@dxos/plugin-navtree 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +157 -124
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/translations.mjs +21 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/types/src/NavTreePlugin.d.ts +2 -1
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +7 -105
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/keyboard.d.ts +3 -2
- package/dist/types/src/capabilities/keyboard.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +4 -18
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.d.ts +12 -5
- package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +25 -5
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/{NavTreeContext.d.ts → NavTreeContext/NavTreeContext.d.ts} +1 -1
- package/dist/types/src/components/NavTreeContext/NavTreeContext.d.ts.map +1 -0
- package/dist/types/src/components/NavTreeContext/index.d.ts +2 -0
- package/dist/types/src/components/NavTreeContext/index.d.ts.map +1 -0
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +13 -9
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +33 -4
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +2 -2
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts +10 -5
- package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.d.ts +4 -8
- package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts +13 -0
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -0
- package/dist/types/src/components/Sidebar/index.d.ts +1 -0
- package/dist/types/src/components/Sidebar/index.d.ts.map +1 -1
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts +8 -5
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +8 -17
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts +6 -0
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +28 -0
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts +2 -0
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsTrigger/index.d.ts +2 -0
- package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
- package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
- package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +1 -1
- package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +2 -0
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +7 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/experimental/Tree.d.ts +5 -6
- package/dist/types/src/experimental/Tree.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.stories.d.ts +23 -6
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +5 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useActions.d.ts +5 -0
- package/dist/types/src/hooks/useActions.d.ts.map +1 -0
- package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
- package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
- package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
- package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useNavTreeState.d.ts +18 -0
- package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +3 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/expose.d.ts +5 -0
- package/dist/types/src/operations/expose.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/testing/app-graph-builder.d.ts +2 -3
- package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts +5 -6
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/testing/update-state.d.ts +2 -2
- package/dist/types/src/testing/update-state.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +8 -10
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +15 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/events.d.ts +5 -0
- package/dist/types/src/types/events.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +4 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/{types.d.ts → types/schema.d.ts} +10 -9
- package/dist/types/src/types/schema.d.ts.map +1 -0
- package/dist/types/src/util.d.ts +12 -9
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +74 -59
- package/src/NavTreePlugin.tsx +66 -86
- package/src/capabilities/app-graph-builder.ts +34 -44
- package/src/capabilities/index.ts +10 -8
- package/src/capabilities/keyboard.ts +58 -51
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +46 -38
- package/src/capabilities/state.ts +129 -84
- package/src/components/NavTree/NavTree.stories.tsx +111 -103
- package/src/components/NavTree/NavTree.tsx +71 -35
- package/src/components/{NavTreeContext.tsx → NavTreeContext/NavTreeContext.tsx} +1 -1
- package/src/components/NavTreeContext/index.ts +5 -0
- package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +25 -19
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +73 -50
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +70 -38
- package/src/components/Sidebar/L0Menu.tsx +176 -210
- package/src/components/Sidebar/L1Panel.tsx +212 -135
- package/src/components/Sidebar/L1Tabs.tsx +42 -0
- package/src/components/Sidebar/index.ts +1 -0
- package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +9 -9
- package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
- package/src/components/index.ts +2 -4
- package/src/components/types.ts +14 -19
- package/src/containers/CommandsDialogContent/CommandsDialogContent.stories.tsx +46 -0
- package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +127 -0
- package/src/containers/CommandsDialogContent/index.ts +5 -0
- package/src/containers/CommandsTrigger/CommandsTrigger.tsx +28 -0
- package/src/containers/CommandsTrigger/index.ts +5 -0
- package/src/containers/NavTreeContainer/NavTreeContainer.tsx +271 -0
- package/src/containers/NavTreeContainer/index.ts +6 -0
- package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +5 -4
- package/src/containers/NavTreeDocumentTitle/index.ts +5 -0
- package/src/containers/index.ts +12 -0
- package/src/experimental/Tree.stories.tsx +110 -115
- package/src/experimental/Tree.tsx +16 -34
- package/src/hooks/index.ts +8 -0
- package/src/hooks/useActions.ts +34 -0
- package/src/hooks/useLoadDescendents.ts +23 -0
- package/src/hooks/useNavTreeModel.ts +118 -0
- package/src/hooks/useNavTreeState.ts +35 -0
- package/src/index.ts +1 -2
- package/src/meta.ts +11 -8
- package/src/operations/expose.ts +42 -0
- package/src/operations/index.ts +7 -0
- package/src/testing/app-graph-builder.ts +167 -238
- package/src/testing/generator.ts +41 -39
- package/src/testing/update-state.ts +6 -6
- package/src/translations.ts +8 -9
- package/src/types/capabilities.ts +21 -0
- package/src/types/events.ts +12 -0
- package/src/types/index.ts +7 -0
- package/src/{types.ts → types/schema.ts} +9 -8
- package/src/util.ts +26 -33
- package/dist/lib/browser/app-graph-builder-5J4LRWDX.mjs +0 -45
- package/dist/lib/browser/app-graph-builder-5J4LRWDX.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERDGQTH5.mjs +0 -16
- package/dist/lib/browser/chunk-ERDGQTH5.mjs.map +0 -7
- package/dist/lib/browser/chunk-TZA65AKW.mjs +0 -1428
- package/dist/lib/browser/chunk-TZA65AKW.mjs.map +0 -7
- package/dist/lib/browser/chunk-WCARAZ7J.mjs +0 -15
- package/dist/lib/browser/chunk-WCARAZ7J.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3XYN2CBU.mjs +0 -47
- package/dist/lib/browser/intent-resolver-3XYN2CBU.mjs.map +0 -7
- package/dist/lib/browser/keyboard-QRS6WOQH.mjs +0 -51
- package/dist/lib/browser/keyboard-QRS6WOQH.mjs.map +0 -7
- package/dist/lib/browser/react-surface-N2HPMYCU.mjs +0 -51
- package/dist/lib/browser/react-surface-N2HPMYCU.mjs.map +0 -7
- package/dist/lib/browser/state-54DY3DOY.mjs +0 -117
- package/dist/lib/browser/state-54DY3DOY.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-GY7GCTGU.mjs +0 -46
- package/dist/lib/node-esm/app-graph-builder-GY7GCTGU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CY7QWR4R.mjs +0 -1429
- package/dist/lib/node-esm/chunk-CY7QWR4R.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P2JGW3WR.mjs +0 -18
- package/dist/lib/node-esm/chunk-P2JGW3WR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-V3QXFDDP.mjs +0 -16
- package/dist/lib/node-esm/chunk-V3QXFDDP.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -150
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-R7UNPSZY.mjs +0 -48
- package/dist/lib/node-esm/intent-resolver-R7UNPSZY.mjs.map +0 -7
- package/dist/lib/node-esm/keyboard-MOZWHFUM.mjs +0 -52
- package/dist/lib/node-esm/keyboard-MOZWHFUM.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-EW5FDMW4.mjs +0 -52
- package/dist/lib/node-esm/react-surface-EW5FDMW4.mjs.map +0 -7
- package/dist/lib/node-esm/state-Z3OTRC2I.mjs +0 -118
- package/dist/lib/node-esm/state-Z3OTRC2I.mjs.map +0 -7
- package/dist/types/src/capabilities/capabilities.d.ts +0 -21
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts +0 -5
- package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
- package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
- package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
- package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeContainer.d.ts +0 -9
- package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/dist/types/src/hooks.d.ts +0 -3
- package/dist/types/src/hooks.d.ts.map +0 -1
- package/dist/types/src/types.d.ts.map +0 -1
- package/src/capabilities/capabilities.ts +0 -20
- package/src/capabilities/intent-resolver.ts +0 -37
- package/src/components/CommandsDialog/CommandsDialog.tsx +0 -118
- package/src/components/CommandsDialog/CommandsTrigger.tsx +0 -37
- package/src/components/CommandsDialog/index.ts +0 -6
- package/src/components/NavTreeContainer.tsx +0 -314
- package/src/events.ts +0 -11
- package/src/hooks.ts +0 -21
- /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/CommandsDialog/CommandsDialog.tsx", "../../../src/components/CommandsDialog/CommandsTrigger.tsx", "../../../src/util.ts", "../../../src/components/NavTreeContainer.tsx", "../../../src/components/NavTree/NavTree.tsx", "../../../src/hooks.ts", "../../../src/components/NavTreeContext.tsx", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/Sidebar/L0Menu.tsx", "../../../src/components/UserAccountAvatar/UserAccountAvatar.tsx", "../../../src/components/Sidebar/L1Panel.tsx", "../../../src/components/NavTreeItem/NavTreeItemAction.tsx", "../../../src/components/NavTreeItem/NavTreeItemColumns.tsx", "../../../src/capabilities/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { createIntent, LayoutAction, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ActionLike, isAction, isActionGroup } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useActions } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport {\n cardDialogContent,\n cardDialogHeader,\n cardDialogPaddedOverflow,\n cardDialogSearchListRoot,\n} from '@dxos/react-ui-stack';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../../meta';\n\n// TODO(wittjosiah): This probably deserves its own plugin but for now it lives here w/ other navigation UI.\nexport const CommandsDialogContent = ({ selected: initial }: { selected?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const [selected, setSelected] = useState<string | undefined>(initial);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n\n // Traverse graph.\n // TODO(burdon): Factor out commonality with shortcut dialog.\n const allActions = useMemo(() => {\n // TODO(burdon): Get from navtree (not keyboard).\n const current = Keyboard.singleton.getCurrentContext();\n const actionMap = new Set<string>();\n const actions: ActionLike[] = [];\n graph.traverse({\n visitor: (node, path) => {\n if (\n (isAction(node) || isActionGroup(node)) &&\n !actionMap.has(node.id) &&\n current.startsWith(path.slice(0, -1).join('/'))\n ) {\n actionMap.add(node.id);\n actions.push(node);\n }\n },\n });\n\n actions.sort((a, b) => {\n return toLocalizedString(a.properties.label, t)\n ?.toLowerCase()\n .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());\n });\n\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const groupActions = useActions(graph, group?.id);\n const actions = isActionGroup(group) ? groupActions : allActions;\n\n return (\n <Dialog.Content classNames={cardDialogContent}>\n <Dialog.Title classNames={cardDialogHeader}>{t('commands dialog title', { ns: NAVTREE_PLUGIN })}</Dialog.Title>\n\n {/* TODO(burdon): BUG: Overscrolls container. */}\n <SearchList.Root label={t('command list input placeholder')} classNames={cardDialogSearchListRoot}>\n <SearchList.Input placeholder={t('command list input placeholder')} />\n <SearchList.Content classNames={cardDialogPaddedOverflow}>\n {actions?.map((action) => {\n const label = toLocalizedString(action.properties.label, t);\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n return (\n <SearchList.Item\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties.disabled) {\n return;\n }\n\n if (isActionGroup(action)) {\n setSelected(action.id);\n return;\n }\n\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n setTimeout(() => {\n const node = graph.getConnections(group?.id ?? action.id, 'inbound')[0];\n void (node && isAction(action) && action.data({ parent: node, caller: KEY_BINDING }));\n });\n }}\n classNames='flex items-center gap-2'\n disabled={action.properties.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon} size={4} />\n <span className='grow truncate'>{label}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n </SearchList.Root>\n\n <div role='none' className='pli-cardSpacingInline pbe-cardSpacingBlock'>\n <Dialog.Close asChild>\n <Button classNames='is-full'>{t('close label', { ns: 'os' })}</Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='m-1 pli-1 lg:pli-2'\n onClick={() =>\n dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n )\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <MagnifyingGlass className={getSize(5)} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Action, type Node, type ReadableGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type FlattenedActions, type NavTreeItemGraphNode } from './types';\n\nexport const getParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.getConnections(node.id, 'inbound').find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n persistenceClass: string,\n): NavTreeItemGraphNode | null => {\n if (node.properties.acceptPersistenceClass?.has(persistenceClass)) {\n return node;\n } else {\n const parent = getParent(graph, node, path);\n return parent ? getPersistenceParent(graph, parent, path.slice(0, path.length - 1), persistenceClass) : null;\n }\n};\n\nexport const resolveMigrationOperation = (\n graph: ReadableGraph,\n activeNode: NavTreeItemGraphNode,\n destinationPath: string[],\n destinationRelatedNode?: NavTreeItemGraphNode,\n): 'transfer' | 'copy' | 'reject' => {\n const activeClass = activeNode.properties.persistenceClass;\n if (destinationRelatedNode && activeClass) {\n const persistenceParent = getPersistenceParent(graph, destinationRelatedNode, destinationPath, activeClass);\n if (persistenceParent) {\n const activeKey = activeNode.properties.persistenceKey;\n if (activeKey && persistenceParent?.properties.acceptPersistenceKey) {\n return persistenceParent.properties.acceptPersistenceKey.has(activeKey) &&\n persistenceParent.properties.onTransferStart\n ? 'transfer'\n : persistenceParent.properties.onCopy\n ? 'copy'\n : 'reject';\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n};\n\n// TODO(wittjosiah): Move into node implementation?\nexport const sortActions = (actions: Action[]): Action[] =>\n actions.sort((a, b) => {\n if (a.properties.disposition === b.properties.disposition) {\n return 0;\n }\n\n if (a.properties.disposition === 'list-item-primary') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getChildren = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .getConnections(node.id, 'outbound')\n .map((n) => {\n // Break cycles.\n const nextPath = [...path, node.id];\n return nextPath.includes(n.id) ? undefined : (n as NavTreeItemGraphNode);\n })\n .filter(isNonNullable) as NavTreeItemGraphNode[];\n};\n\nexport const getActions = (graph: ReadableGraph, node: Node): FlattenedActions => {\n return graph.getActions(node.id).reduce(\n (acc: FlattenedActions, arg) => {\n if (arg.properties.disposition === 'item') {\n return acc;\n }\n\n acc.actions.push(arg);\n if (!isAction(arg)) {\n const actionGroup = graph.getActions(arg.id);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n );\n};\n\nexport const l0ItemType = (item: Node<any>) => {\n if (item.properties.disposition === 'collection') {\n return 'collection';\n } else if (isActionLike(item)) {\n return 'action';\n } else if (item.properties.disposition === 'navigation') {\n return 'link';\n } else {\n return 'tab';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { extractInstruction, type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { untracked } from '@preact/signals-core';\nimport React, { memo, useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n LayoutAction,\n Surface,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n useLayout,\n} from '@dxos/app-framework';\nimport { isAction, isActionLike, ROOT_ID, type Node, type ReadableGraph } from '@dxos/app-graph';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { isTreeData, type TreeItemDataProps, type TreeData } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, byPosition } from '@dxos/util';\n\nimport { NAV_TREE_ITEM, NavTree } from './NavTree';\nimport { NavTreeContext } from './NavTreeContext';\nimport { type NavTreeContextValue } from './types';\nimport { NavTreeCapabilities } from '../capabilities';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItemGraphNode } from '../types';\nimport { getChildren, getParent, getActions as naturalGetActions, resolveMigrationOperation } from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderItemEnd = ({ node, open }: { node: Node; open: boolean }) => (\n <Surface role='navtree-item-end' data={{ id: node.id, subject: node.data, open }} limit={1} />\n);\n\nconst getChildrenFilter = (node: Node): node is Node =>\n untracked(() => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE);\n\nconst filterItems = (node: Node, disposition?: string) => {\n if (!disposition && (node.properties.disposition === 'hidden' || node.properties.disposition === 'alternate-tree')) {\n return false;\n } else if (!disposition) {\n const action = isAction(node);\n return !action || node.properties.disposition === 'item';\n } else {\n return node.properties.disposition === disposition;\n }\n};\n\nconst getItems = (graph: ReadableGraph, node?: Node, disposition?: string) => {\n return graph.getConnections(node?.id ?? ROOT_ID, 'outbound').filter((node) => filterItems(node, disposition));\n};\n\nconst useItems = (node?: Node, options?: { disposition?: string; sort?: boolean }) => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, node?.id ?? ROOT_ID).filter((node) =>\n filterItems(node, options?.disposition),\n );\n return options?.sort ? connections.toSorted((a, b) => byPosition(a.properties, b.properties)) : connections;\n};\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n topbar?: boolean;\n} & Pick<NavTreeContextValue, 'tab'>;\n\nexport const NavTreeContainer = memo(({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => {\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);\n const layout = useLayout();\n const { navigationSidebarState } = useSidebars(NAVTREE_PLUGIN);\n\n const getActions = useCallback((node: Node) => naturalGetActions(graph, node), [graph]);\n\n const getProps = useCallback(\n (node: Node, path: string[]): TreeItemDataProps => {\n const children = getChildren(graph, node, path).filter(getChildrenFilter);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n return {\n id: node.id,\n label: node.properties.label ?? node.id,\n parentOf,\n icon: node.properties.icon,\n disabled: node.properties.disabled,\n className: mx(node.properties.modified && 'italic', node.properties.className),\n headingClassName: node.properties.headingClassName,\n testId: node.properties.testId,\n };\n },\n [graph],\n );\n\n const loadDescendents = useCallback(\n (node: Node) => {\n graph.expand(node.id, 'outbound');\n // Load one level deeper, which resolves some juddering observed on open/close.\n graph.getConnections(node.id, 'outbound').forEach((child) => {\n graph.expand(child.id, 'outbound');\n });\n },\n [graph],\n );\n\n const handleOpenChange = useCallback(\n ({ item: { id }, path, open }: { item: Node; path: string[]; open: boolean }) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n setItem(path, 'open', open);\n graph.expand(id, 'outbound');\n },\n [graph],\n );\n\n const handleTabChange = useCallback(\n async (node: NavTreeItemGraphNode) => {\n await dispatch(\n createIntent(LayoutAction.UpdateSidebar, {\n part: 'sidebar',\n options: {\n state:\n node.id === tab\n ? navigationSidebarState === 'expanded'\n ? isLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n },\n }),\n );\n\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: node.id }));\n\n // Open the first item if the workspace is empty.\n if (layout.active.length === 0) {\n const [item] = getItems(graph, node).filter((node) => !isActionLike(node));\n if (item && item.data) {\n await dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] }));\n }\n }\n },\n [dispatch, layout.active, tab, navigationSidebarState, isLg],\n );\n\n const canDrop = useCallback(({ source, target }: { source: TreeData; target: TreeData }) => {\n return target.item.properties.canDrop?.(source) ?? false;\n }, []);\n\n const handleSelect = useCallback(\n ({ item: node, path, option }: { item: Node; path: string[]; option: boolean }) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parent] = graph.getConnections(node.id, 'inbound');\n void (parent && node.data({ parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n const current = isCurrent(path, node);\n if (!current) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [node.id],\n options: { key: node.properties.key },\n }),\n );\n } else if (option) {\n void dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [node.id], options: { state: false } }),\n );\n } else {\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: node.id }));\n }\n\n const defaultAction = graph.getActions(node.id).find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n void dispatch(createIntent(LayoutAction.UpdateSidebar, { part: 'sidebar', options: { state: 'closed' } }));\n }\n },\n [graph, dispatch, isCurrent, isLg],\n );\n\n const handleBack = useCallback(\n () => dispatch(createIntent(LayoutAction.RevertWorkspace, { part: 'workspace', options: { revert: true } })),\n [dispatch],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isTreeData(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\n const target = location.current.dropTargets[0];\n const instruction: Instruction | null = extractInstruction(target.data);\n if (instruction !== null && instruction.type !== 'instruction-blocked') {\n const sourceNode = source.data.item as NavTreeItemGraphNode;\n const targetNode = target.data.item as NavTreeItemGraphNode;\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n const operation =\n sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join() && instruction.type !== 'make-child'\n ? 'rearrange'\n : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n const sourceItems = getItems(graph, sourceParent);\n const targetItems = getItems(graph, targetParent);\n const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? undefined\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n switch (operation) {\n case 'rearrange': {\n const nextItems = sourceItems.map(({ data }) => data);\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems);\n break;\n }\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\n case 'transfer': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n if (!target?.properties.onTransferStart || !sourceParent?.properties.onTransferEnd) {\n break;\n }\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [graph]);\n\n const setAlternateTree = useCallback(\n (path: string[], open: boolean) => {\n setItem(path, 'alternateTree', open);\n },\n [setItem],\n );\n\n const navTreeContextValue = useMemo(\n () => ({\n useItems,\n tab,\n getActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n onTabChange: handleTabChange,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onBack: handleBack,\n }),\n [\n tab,\n getActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n handleTabChange,\n handleOpenChange,\n handleSelect,\n handleBack,\n ],\n );\n\n return (\n <NavTreeContext.Provider value={navTreeContextValue}>\n <NavTree id={ROOT_ID} root={graph.root} open={layout.sidebarOpen} />\n </NavTreeContext.Provider>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type TreeProps } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { type NavTreeItemGraphNode } from '../../types';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { L0Menu, L1Panels, type L1PanelsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Pick<TreeProps<NavTreeItemGraphNode>, 'id' | 'root'> & Pick<L1PanelsProps, 'open'>;\n\nexport const NavTree = ({ id, root, ...props }: NavTreeProps) => {\n const { tab, useItems, onBack } = useNavTreeContext();\n const topLevelActions = useItems(root, { disposition: 'menu', sort: true });\n const topLevelCollections = useItems(root, { disposition: 'collection' });\n const topLevelWorkspaces = useItems(root, { disposition: 'workspace' });\n const topLevelNavigation = useItems(root, { disposition: 'navigation' });\n const l0Items = useMemo(\n () => [\n // prettier-ignore\n ...topLevelCollections,\n ...topLevelWorkspaces,\n ...topLevelNavigation,\n ],\n [topLevelCollections, topLevelWorkspaces, topLevelNavigation],\n );\n const pinnedItems = useItems(root, { disposition: 'pin-end', sort: true });\n const userAccountItem = useItems(root, { disposition: 'user-account' })[0];\n const topLevelItems = useMemo(\n () => [\n // prettier-ignore\n ...l0Items,\n ...pinnedItems,\n ...(userAccountItem ? [userAccountItem] : []),\n ],\n [l0Items, pinnedItems, userAccountItem],\n );\n\n useLoadDescendents(root);\n const path = useMemo(() => [id], [id]);\n\n return (\n <Tabs.Root value={tab} orientation='vertical' verticalVariant='stateless' classNames='relative'>\n <L0Menu\n menuActions={topLevelActions}\n topLevelItems={l0Items}\n pinnedItems={pinnedItems}\n userAccountItem={userAccountItem}\n path={path}\n parent={root}\n />\n <L1Panels topLevelItems={topLevelItems} path={path} currentItemId={tab} onBack={onBack} {...props} />\n </Tabs.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useNavTreeContext } from './components';\n\nexport const useLoadDescendents = (root?: Node) => {\n const { loadDescendents } = useNavTreeContext();\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n if (root) {\n void loadDescendents?.(root);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [root]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type NavTreeContextValue } from './types';\n\nexport const NavTreeContext = createContext<NavTreeContextValue | null>(null);\n\nexport const useNavTreeContext = () => useContext(NavTreeContext) ?? raise(new Error('Missing NavTreeContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n useEffect(() => {\n document.title = node ? toLocalizedString(node.properties.label, t) : t('current app name', { ns: 'appkit' });\n }, [node?.properties?.label]);\n return null;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport React, {\n forwardRef,\n type MouseEvent,\n type PropsWithChildren,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport { Icon, ListItem, ScrollArea, Tooltip, toLocalizedString, useMediaQuery, useTranslation } from '@dxos/react-ui';\nimport { MenuProvider, DropdownMenu, type MenuItem } from '@dxos/react-ui-menu';\nimport type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, getFirstTwoRenderableChars } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { UserAccountAvatar } from '../UserAccountAvatar';\n\n//\n// L0Item\n//\n\ntype L0ItemData = {\n id: L0ItemProps['item']['id'];\n type: 'l0Item';\n};\n\ntype L0ItemRootProps = {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\ntype L0ItemProps = L0ItemRootProps & {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n pinned?: boolean;\n onRearrange?: StackItemRearrangeHandler<L0ItemData>;\n};\n\nconst useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {\n const { tab, isCurrent, onSelect, onTabChange } = useNavTreeContext();\n const [isLg] = useMediaQuery('lg', { ssr: false });\n\n return useCallback(\n (event: MouseEvent) => {\n switch (type) {\n case 'action': {\n const {\n data: invoke,\n properties: { caller },\n } = item;\n\n return invoke?.(caller ? { node: parent, caller } : { node: parent });\n }\n\n case 'tab':\n return onTabChange?.(item);\n\n case 'link':\n return onSelect?.({ item, path, current: !isCurrent(path, item), option: event.altKey });\n }\n },\n [item, parent, type, tab, isCurrent, onSelect, onTabChange, isLg],\n );\n};\n\nconst l0Breakpoints: Record<string, string> = {\n lg: 'hidden lg:grid',\n};\n\nconst l0ItemRoot =\n 'group/l0item flex w-full justify-center items-center relative data[type!=\"collection\"]:cursor-pointer app-no-drag dx-focus-ring-group';\n\nconst l0ItemContent = 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm';\n\nconst L0ItemRoot = forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, children }, forwardedRef) => {\n const { getProps } = useNavTreeContext();\n const { id, testId } = getProps?.(item, path) ?? {};\n const type = l0ItemType(item);\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const localizedString = toLocalizedString(item.properties.label, t);\n\n const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);\n const rootProps =\n type === 'tab'\n ? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : type !== 'collection'\n ? { onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : { onClick: handleClick };\n\n const Root = type === 'collection' ? 'h2' : type === 'tab' ? Tabs.TabPrimitive : 'button';\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Root\n {...(rootProps as any)}\n data-type={type}\n className={mx(l0ItemRoot, l0Breakpoints[item.properties.l0Breakpoint])}\n ref={forwardedRef}\n >\n {children}\n </Root>\n </Tooltip.Trigger>\n );\n },\n);\n\nconst L0Avatar = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const type = l0ItemType(item);\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n const localizedString = toLocalizedString(item.properties.label, t);\n const avatarValue = useMemo(\n () => (type === 'tab' ? getFirstTwoRenderableChars(localizedString).join('').toUpperCase() : []),\n [type, item.properties.label, t],\n );\n\n return (\n <span role='img' className='place-self-center text-xl font-light' {...hueFgStyle}>\n {avatarValue}\n </span>\n );\n};\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const itemElement = useRef<HTMLElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const localizedString = toLocalizedString(item.properties.label, t);\n const hue = item.properties.hue ?? null;\n\n useLayoutEffect(() => {\n // NOTE(thure): This is copied from StackItem, perhaps this should be DRYed out.\n if (!itemElement.current || !onRearrange) {\n return;\n }\n\n return combine(\n draggable({\n element: itemElement.current,\n getInitialData: () => ({ id: item.id, type: 'l0Item' }) satisfies L0ItemData,\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n const element = source.element.querySelector('[data-frame]') as HTMLElement;\n scrollJustEnoughIntoView({ element });\n const { x, y } = preserveOffsetOnSource({ element, input: location.current.input })({\n container: (element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n },\n onDrop: () => {\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n },\n }),\n dropTargetForElements({\n element: itemElement.current,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type: 'l0Item' },\n { input, element, allowedEdges: ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as L0ItemData, self.data as L0ItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [item, onRearrange]);\n\n return (\n <L0ItemRoot ref={itemElement} item={item} parent={parent} path={path}>\n <div\n role='none'\n data-frame={true}\n {...(hue && { style: { background: `var(--dx-${hue}Surface)` } })}\n className={mx(\n l0ItemContent,\n pinned\n ? 'p-2 group-hover/l0item:bg-activeSurface'\n : 'is-[--l0-avatar-size] bs-[--l0-avatar-size] bg-activeSurface',\n )}\n >\n <ItemAvatar item={item} />\n </div>\n <div\n role='none'\n className='hidden group-aria-selected/l0item:block absolute inline-start-0 inset-block-2 is-1 bg-accentSurface rounded-ie'\n />\n <span id={`${item.id}__label`} className='sr-only'>\n {localizedString}\n </span>\n {closestEdge && <ListItem.DropIndicator edge={closestEdge} />}\n </L0ItemRoot>\n );\n};\n\nconst ItemAvatar = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const type = l0ItemType(item);\n if (item.properties.icon) {\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n return <Icon icon={item.properties.icon} size={5} {...hueFgStyle} />;\n }\n\n if (type === 'tab' && item.properties.disposition !== 'pin-end') {\n return <L0Avatar item={item} />;\n }\n\n return null;\n};\n\n//\n// L0Collection\n//\n\nconst L0Collection = ({ item, path }: L0ItemProps) => {\n const navTreeContext = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = navTreeContext.useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = navTreeContext.getProps?.(item, path) ?? {};\n\n const handleRearrange = useCallback<StackItemRearrangeHandler<L0ItemData>>(\n (source, target, closestEdge) => {\n invariant(item.properties.onRearrangeChildren);\n const sourceIndex = collectionItems.findIndex((i) => i.id === source.id);\n const targetIndex = collectionItems.findIndex((i) => i.id === target.id);\n const insertIndex =\n source.id === target.id\n ? sourceIndex\n : targetIndex +\n (sourceIndex < targetIndex ? (closestEdge === 'top' ? -1 : 0) : closestEdge === 'bottom' ? 1 : 0);\n const nextOrder = arrayMove([...collectionItems], sourceIndex, insertIndex);\n return item.properties.onRearrangeChildren(nextOrder);\n },\n [collectionItems, item.properties.onRearrangeChildren],\n );\n\n return (\n <div\n role='group'\n className='contents group/l0c'\n aria-labelledby={`${item.id}__label`}\n data-itemid={id}\n data-testid={testId}\n >\n {collectionItems.map((collectionItem) => (\n <L0Item\n key={collectionItem.id}\n item={collectionItem}\n parent={item}\n path={groupPath}\n {...(item.properties.onRearrangeChildren && { onRearrange: handleRearrange })}\n />\n ))}\n </div>\n );\n};\n\n//\n// L0Menu\n//\n\nexport type L0MenuProps = {\n menuActions: MenuItem[];\n topLevelItems: Node<any>[];\n pinnedItems: Node<any>[];\n userAccountItem?: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\nexport const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountItem, parent, path }: L0MenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <Tabs.Tablist\n classNames={[\n 'group/l0 absolute z-[1] inset-block-0 inline-start-0 rounded-is',\n 'grid grid-cols-[var(--l0-size)] grid-rows-[var(--rail-size)_1fr_min-content_var(--l0-size)] contain-layout',\n '!is-[--l0-size] bg-baseSurface border-ie border-subduedSeparator app-drag pbe-[env(safe-area-inset-bottom)]',\n ]}\n >\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions}>\n <Tooltip.Trigger content={t('app menu label')} side='right' asChild>\n <DropdownMenu.Trigger\n data-testid='spacePlugin.addSpace'\n className={mx(l0ItemRoot, 'grid place-items-center')}\n >\n <div\n role='none'\n className={mx(\n l0ItemContent,\n 'is-[--rail-action] bs-[--rail-action] group-hover/l0item:bg-hoverSurface',\n )}\n >\n <Icon icon='ph--list--regular' size={5} />\n </div>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n\n {/* Space list. */}\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <div\n role='none'\n className={mx([\n 'flex flex-col gap-1 pbs-1',\n '[body[data-platform=\"darwin\"]_&]:pbs-[calc(30px+0.25rem)]',\n '[body[data-platform=\"ios\"]_&]:pbs-[max(env(safe-area-inset-top),0.25rem)]',\n ])}\n >\n {topLevelItems.map((item) => {\n if (l0ItemType(item) === 'collection') {\n return <L0Collection key={item.id} item={item} parent={parent} path={path} />;\n } else {\n return <L0Item key={item.id} item={item} parent={parent} path={path} />;\n }\n })}\n </div>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n {/* Actions. */}\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-action] pbs-2'>\n {pinnedItems\n .filter((item) => l0ItemType(item) !== 'collection')\n .map((item) => (\n <L0Item key={item.id} item={item} parent={parent} path={path} pinned />\n ))}\n </div>\n\n {userAccountItem && (\n <div role='none' className='grid app-no-drag'>\n <L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>\n <UserAccountAvatar\n userId={userAccountItem.properties.userId}\n hue={userAccountItem.properties.hue}\n emoji={userAccountItem.properties.emoji}\n status={userAccountItem.properties.status}\n size={10}\n />\n </L0ItemRoot>\n </div>\n )}\n\n <div\n role='none'\n className='hidden [body[data-platform=\"darwin\"]_&]:block absolute block-start-0 is-[calc(var(--l0-size)-1px)] bs-[calc(40px+0.25rem)]'\n style={{\n background:\n 'linear-gradient(to bottom, var(--dx-sidebarSurface) 0%, var(--dx-sidebarSurface) 70%, transparent 100%)',\n }}\n />\n </Tabs.Tablist>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Avatar, type AvatarStatus, type Size } from '@dxos/react-ui';\nimport { hexToFallback } from '@dxos/util';\n\nexport type UserAccountAvatarProps = {\n size?: Size;\n userId?: string;\n hue?: string;\n emoji?: string;\n status?: AvatarStatus;\n};\n\nexport const UserAccountAvatar = ({ size, userId, hue, emoji, status }: UserAccountAvatarProps) => {\n const fallbackValue = hexToFallback(userId ?? '0');\n\n return (\n <div className='grid place-items-center' data-joyride='welcome/account'>\n <Avatar.Root>\n <Avatar.Content\n variant='circle'\n size={size ?? 12}\n status={status ?? 'active'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n data-testid='treeView.userAccount'\n />\n </Avatar.Root>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { Button, type ButtonProps, Icon, IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem';\n\nconst headingBackButtonLabel = 'inset-0 min-is-0 truncate flex items-center pis-2';\n\nconst TitleButton = ({ title, onClick }: { title: string } & Pick<ButtonProps, 'onClick'>) => {\n return (\n <Button\n variant='ghost'\n classNames='pli-1 flex-1 group text-start justify-start bs-[--rail-action] font-normal'\n onClick={onClick}\n >\n <Icon icon='ph--caret-left--bold' size={3} />\n <span className={mx(headingBackButtonLabel)}>{title}</span>\n </Button>\n );\n};\n\nexport type L1PanelProps = {\n open?: boolean;\n item: Node<any>;\n path: string[];\n currentItemId: string;\n onBack?: () => void;\n};\n\nconst L1Panel = ({ open, item, path, currentItemId, onBack }: L1PanelProps) => {\n const { isAlternateTree, setAlternateTree, ...navTreeContext } = useNavTreeContext();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const alternateTree = navTreeContext.useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const handleOpen = useCallback(() => setAlternateTree?.(alternatePath, true), [alternatePath, setAlternateTree]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const useAlternateItems = useCallback(\n (node?: Node, { disposition }: { disposition?: string } = {}) => {\n // TODO(wittjosiah): Sorting is expensive, limit to necessary items for now.\n return navTreeContext.useItems(node, { disposition, sort: node?.id === alternateTree.id });\n },\n [navTreeContext, alternateTree],\n );\n\n const handleBack = useCallback(() => {\n if (isAlternate) {\n setAlternateTree?.(alternatePath, false);\n } else {\n onBack?.();\n }\n }, [isAlternate, onBack, alternatePath, setAlternateTree]);\n\n const title = toLocalizedString(item.properties.label, t);\n const backCapable = item.id.startsWith('!') || isAlternate;\n\n return (\n <Tabs.Tabpanel\n key={item.id}\n value={item.id}\n classNames={[\n 'absolute inset-block-0 inline-end-0',\n 'is-[calc(100%-var(--l0-size))] lg:is-[--l1-size] grid-cols-1 grid-rows-[var(--rail-size)_1fr]',\n 'pbs-[env(safe-area-inset-top)]',\n item.id === currentItemId && 'grid',\n ]}\n tabIndex={-1}\n aria-label={title}\n {...(!open && { inert: 'true' })}\n >\n {item.id === currentItemId && (\n <>\n <h2 className='flex items-center border-be border-subduedSeparator app-drag pli-1 density-coarse'>\n {backCapable ? (\n <TitleButton title={title} onClick={handleBack} />\n ) : (\n <span className='flex-1 truncate min-is-0 pis-6'>{title}</span>\n )}\n {alternateTree && !isAlternate && (\n <IconButton\n variant='ghost'\n classNames={mx('shrink-0', hoverableControlItem, hoverableOpenControlItem, 'pli-2 pointer-fine:pli-1')}\n iconOnly\n size={5}\n icon={alternateTree.properties.icon ?? 'ph--placeholder--regular'}\n label={toLocalizedString(alternateTree.properties.label ?? alternateTree.id, t)}\n data-testid='treeView.alternateTreeButton'\n onClick={handleOpen}\n />\n )}\n <NavTreeItemColumns path={path} item={item} open density='coarse' />\n </h2>\n <div role='none' className='overflow-y-auto'>\n {isAlternate ? (\n <Tree\n {...navTreeContext}\n useItems={useAlternateItems}\n id={alternateTree.id}\n root={alternateTree}\n path={alternatePath}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n ) : (\n <Tree\n {...navTreeContext}\n id={item.id}\n root={item}\n path={path}\n levelOffset={5}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n )}\n </div>\n </>\n )}\n </Tabs.Tabpanel>\n );\n};\n\nconst L1PanelCollection = ({ item, path, ...props }: L1PanelProps) => {\n const { useItems } = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n return (\n <>\n {collectionItems\n .filter((item) => l0ItemType(item) === 'tab')\n .map((item) => (\n <L1Panel key={item.id} item={item} path={groupPath} {...props} />\n ))}\n </>\n );\n};\n\nexport type L1PanelsProps = Pick<L1PanelProps, 'open' | 'currentItemId' | 'onBack'> & {\n topLevelItems: Node<any>[];\n path: string[];\n};\n\nexport const L1Panels = ({ topLevelItems, onBack, ...props }: L1PanelsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n switch (type) {\n case 'collection':\n return <L1PanelCollection key={item.id} item={item} {...props} />;\n case 'tab':\n return <L1Panel key={item.id} item={item} {...props} onBack={onBack} />;\n default:\n return null;\n }\n })}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Action, type Node } from '@dxos/app-graph';\nimport { useTranslation, toLocalizedString, IconButton, useDensityContext } from '@dxos/react-ui';\nimport { DropdownMenu, MenuProvider, type MenuItem } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { type ActionProperties } from '../../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Action[];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nconst fineActionButtonProps = {\n size: 4 as const,\n density: 'fine' as const,\n};\nconst coarseActionButtonProps = {\n size: 5 as const,\n density: 'coarse' as const,\n};\n\nexport const NavTreeItemActionDropdownMenu = ({\n parent,\n label,\n icon,\n testId,\n menuActions,\n caller,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const density = useDensityContext();\n return (\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions as MenuItem[]} caller={caller}>\n <DropdownMenu.Trigger asChild>\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n classNames={mx('shrink-0 pli-2 pointer-fine:pli-1', hoverableControlItem, hoverableOpenControlItem)}\n variant='ghost'\n icon={icon ?? fallbackIcon}\n iconOnly\n label={toLocalizedString(label, t)}\n data-testid={testId}\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },\n data: invoke,\n baseLabel,\n}: Action & { parent: Node; onAction?: (action: Action) => void; baseLabel: string }) => {\n const density = useDensityContext();\n return (\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n variant={variant}\n classNames={mx(\n 'shrink-0',\n hoverableControlItem,\n hoverableOpenControlItem,\n iconOnly ? 'pli-2 pointer-fine:pli-1' : 'p-2 pointer-fine:p-2 mie-1',\n )}\n icon={icon ?? fallbackIcon}\n iconOnly={iconOnly}\n label={baseLabel}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { parent, caller } : { parent });\n }}\n data-testid={testId}\n />\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={node} {...menuActions[0]} />\n ) : (\n <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={node} menuActions={menuActions} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, memo } from 'react';\n\nimport { isAction } from '@dxos/app-graph';\nimport { DensityProvider, Popover, toLocalizedString, Treegrid, useTranslation } from '@dxos/react-ui';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport type { NavTreeItemColumnsProps } from '../types';\n\nexport const NavTreeItemColumns = memo(({ path, item, open, density = 'fine' }: NavTreeItemColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { getActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n\n const { actions: _actions, groupedActions } = getActions(item);\n const [primaryAction, ...secondaryActions] = _actions.toSorted((a, b) =>\n a.properties?.disposition === 'list-item-primary' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : _actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition));\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n useLoadDescendents(item);\n useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);\n\n return (\n <DensityProvider density={density}>\n <div role='none' className='contents app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={item}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction.id]}\n menuType={primaryAction.properties?.menuType}\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n <ActionRoot>\n {actions.length > 0 ? (\n <NavTreeItemAction\n testId={`navtree.treeItem.actionsLevel${level}`}\n label={t('tree item actions label')}\n icon='ph--dots-three-vertical--regular'\n parent={item}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {ItemEnd && <ItemEnd node={item} open={open} />}\n </div>\n </DensityProvider>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Keyboard = lazy(() => import('./keyboard'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const State = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useMemo", "useState", "createIntent", "LayoutAction", "useAppGraph", "useIntentDispatcher", "isAction", "isActionGroup", "Keyboard", "keySymbols", "useActions", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "cardDialogContent", "cardDialogHeader", "cardDialogPaddedOverflow", "cardDialogSearchListRoot", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "id", "startsWith", "slice", "join", "add", "push", "sort", "a", "b", "toLocalizedString", "properties", "label", "toLowerCase", "localeCompare", "group", "find", "groupActions", "useActions", "Dialog", "Content", "classNames", "cardDialogContent", "Title", "cardDialogHeader", "ns", "SearchList", "Root", "cardDialogSearchListRoot", "Input", "placeholder", "cardDialogPaddedOverflow", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "setTimeout", "getConnections", "data", "parent", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "div", "role", "Close", "asChild", "Button", "MagnifyingGlass", "React", "createIntent", "LayoutAction", "useIntentDispatcher", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "span", "className", "MagnifyingGlass", "getSize", "isAction", "isActionLike", "isNonNullable", "getParent", "graph", "node", "path", "parentId", "length", "getConnections", "id", "find", "n", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getChildren", "map", "nextPath", "includes", "undefined", "filter", "isNonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "useMemo", "createIntent", "LayoutAction", "Surface", "useAppGraph", "useCapability", "useIntentDispatcher", "useLayout", "isAction", "isActionLike", "ROOT_ID", "PLANK_COMPANION_TYPE", "useConnections", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "byPosition", "React", "useMemo", "Tabs", "useEffect", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "useLoadDescendents", "root", "loadDescendents", "useNavTreeContext", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "attachClosestEdge", "extractClosestEdge", "React", "forwardRef", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "invariant", "Icon", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "MenuProvider", "DropdownMenu", "Tabs", "mx", "arrayMove", "getFirstTwoRenderableChars", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "React", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "tab", "isCurrent", "onSelect", "onTabChange", "useNavTreeContext", "isLg", "useMediaQuery", "ssr", "useCallback", "event", "data", "invoke", "properties", "caller", "node", "current", "option", "altKey", "l0Breakpoints", "lg", "l0ItemRoot", "l0ItemContent", "L0ItemRoot", "forwardRef", "children", "forwardedRef", "getProps", "id", "testId", "l0ItemType", "itemPath", "useMemo", "t", "useTranslation", "NAVTREE_PLUGIN", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "Root", "Tabs", "TabPrimitive", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0Avatar", "hue", "hueFgStyle", "style", "color", "avatarValue", "getFirstTwoRenderableChars", "join", "toUpperCase", "span", "role", "L0Item", "pinned", "onRearrange", "itemElement", "useRef", "closestEdge", "setEdge", "useState", "useLayoutEffect", "combine", "draggable", "element", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "source", "location", "document", "body", "setAttribute", "querySelector", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "input", "container", "offsetParent", "onDragStart", "removeAttribute", "closest", "onDrop", "dropTargetForElements", "getData", "attachClosestEdge", "allowedEdges", "onDragEnter", "self", "extractClosestEdge", "onDrag", "onDragLeave", "div", "data-frame", "background", "ItemAvatar", "ListItem", "DropIndicator", "edge", "icon", "Icon", "size", "disposition", "L0Collection", "navTreeContext", "useLoadDescendents", "collectionItems", "useItems", "groupPath", "handleRearrange", "target", "invariant", "onRearrangeChildren", "sourceIndex", "findIndex", "i", "targetIndex", "insertIndex", "nextOrder", "arrayMove", "aria-labelledby", "data-itemid", "data-testid", "map", "collectionItem", "key", "L0Menu", "menuActions", "topLevelItems", "pinnedItems", "userAccountItem", "Tablist", "classNames", "MenuProvider", "DropdownMenu", "group", "items", "ScrollArea", "Viewport", "Scrollbar", "orientation", "Thumb", "filter", "UserAccountAvatar", "userId", "emoji", "status", "React", "useCallback", "useMemo", "Button", "Icon", "IconButton", "toLocalizedString", "useTranslation", "Tree", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "mx", "React", "useTranslation", "toLocalizedString", "IconButton", "useDensityContext", "DropdownMenu", "MenuProvider", "hoverableControlItem", "hoverableOpenControlItem", "mx", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "NAVTREE_PLUGIN", "useDensityContext", "React", "MenuProvider", "DropdownMenu", "Root", "group", "items", "Trigger", "asChild", "IconButton", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "variant", "iconOnly", "toLocalizedString", "data-testid", "NavTreeItemMonolithicAction", "properties", "disabled", "data", "invoke", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemAction", "monolithic", "node", "props", "monolithicAction", "length", "React", "Fragment", "memo", "isAction", "DensityProvider", "Popover", "toLocalizedString", "Treegrid", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "density", "t", "useTranslation", "NAVTREE_PLUGIN", "getActions", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "includes", "ActionRoot", "NAV_TREE_ITEM", "id", "Popover", "Anchor", "Fragment", "useLoadDescendents", "undefined", "React", "DensityProvider", "div", "role", "className", "disabled", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "Treegrid", "Cell", "node", "headingBackButtonLabel", "TitleButton", "title", "onClick", "React", "Button", "variant", "classNames", "Icon", "icon", "size", "span", "className", "mx", "L1Panel", "open", "item", "path", "currentItemId", "onBack", "isAlternateTree", "setAlternateTree", "navTreeContext", "useNavTreeContext", "t", "useTranslation", "NAVTREE_PLUGIN", "alternateTree", "useItems", "disposition", "alternatePath", "useMemo", "id", "handleOpen", "useCallback", "isAlternate", "useAlternateItems", "node", "sort", "handleBack", "toLocalizedString", "properties", "label", "backCapable", "startsWith", "Tabs", "Tabpanel", "key", "value", "tabIndex", "aria-label", "inert", "h2", "IconButton", "hoverableControlItem", "hoverableOpenControlItem", "iconOnly", "data-testid", "NavTreeItemColumns", "density", "div", "role", "Tree", "root", "levelOffset", "gridTemplateColumns", "renderColumns", "draggable", "L1PanelCollection", "props", "useLoadDescendents", "collectionItems", "groupPath", "filter", "l0ItemType", "map", "L1Panels", "topLevelItems", "type", "NAV_TREE_ITEM", "NavTree", "id", "root", "props", "tab", "useItems", "onBack", "useNavTreeContext", "topLevelActions", "disposition", "sort", "topLevelCollections", "topLevelWorkspaces", "topLevelNavigation", "l0Items", "useMemo", "pinnedItems", "userAccountItem", "topLevelItems", "useLoadDescendents", "path", "React", "Tabs", "Root", "value", "orientation", "verticalVariant", "classNames", "L0Menu", "menuActions", "parent", "L1Panels", "currentItemId", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Keyboard", "ReactSurface", "State", "NODE_TYPE", "renderItemEnd", "node", "open", "React", "Surface", "role", "data", "id", "subject", "limit", "getChildrenFilter", "untracked", "isActionLike", "type", "PLANK_COMPANION_TYPE", "filterItems", "disposition", "properties", "action", "isAction", "getItems", "graph", "getConnections", "ROOT_ID", "filter", "useItems", "options", "useAppGraph", "connections", "useConnections", "sort", "toSorted", "a", "b", "byPosition", "NavTreeContainer", "memo", "tab", "popoverAnchorId", "topbar", "isLg", "useMediaQuery", "ssr", "dispatchPromise", "dispatch", "useIntentDispatcher", "isOpen", "isCurrent", "isAlternateTree", "setItem", "useCapability", "NavTreeCapabilities", "State", "layout", "useLayout", "navigationSidebarState", "useSidebars", "NAVTREE_PLUGIN", "getActions", "useCallback", "naturalGetActions", "getProps", "path", "children", "getChildren", "parentOf", "length", "map", "undefined", "label", "icon", "disabled", "className", "mx", "modified", "headingClassName", "testId", "loadDescendents", "expand", "forEach", "child", "handleOpenChange", "item", "handleTabChange", "createIntent", "LayoutAction", "UpdateSidebar", "part", "state", "SwitchWorkspace", "active", "Open", "canDrop", "source", "target", "handleSelect", "option", "parent", "caller", "NAV_TREE_ITEM", "current", "key", "Close", "ScrollIntoView", "defaultAction", "find", "handleBack", "RevertWorkspace", "revert", "useEffect", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "instruction", "extractInstruction", "sourceNode", "targetNode", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "nextItems", "arrayMove", "onRearrangeChildren", "onCopy", "onTransferStart", "onTransferEnd", "setAlternateTree", "navTreeContextValue", "useMemo", "onTabChange", "onOpenChange", "onSelect", "onBack", "NavTreeContext", "Provider", "value", "NavTree", "root", "sidebarOpen"]
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NAVTREE_PLUGIN
|
|
3
|
-
} from "./chunk-ERDGQTH5.mjs";
|
|
4
|
-
|
|
5
|
-
// src/capabilities/capabilities.ts
|
|
6
|
-
import { defineCapability } from "@dxos/app-framework";
|
|
7
|
-
(function(NavTreeCapabilities2) {
|
|
8
|
-
NavTreeCapabilities2.State = defineCapability(`${NAVTREE_PLUGIN}/capability/state`);
|
|
9
|
-
})(NavTreeCapabilities || (NavTreeCapabilities = {}));
|
|
10
|
-
var NavTreeCapabilities;
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
NavTreeCapabilities
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=chunk-WCARAZ7J.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type Live } from '@dxos/live-object';\n\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItemGraphNode } from '../types';\n\nexport namespace NavTreeCapabilities {\n export const State = defineCapability<{\n state: Map<string, Live<{ open: boolean; current: boolean; alternateTree?: boolean }>>;\n getItem: (path: string[]) => Live<{ open: boolean; current: boolean; alternateTree?: boolean }>;\n setItem: (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => void;\n isOpen: (path: string[], item: NavTreeItemGraphNode) => boolean;\n isCurrent: (path: string[], item: NavTreeItemGraphNode) => boolean;\n isAlternateTree: (path: string[], item: NavTreeItemGraphNode) => boolean;\n }>(`${NAVTREE_PLUGIN}/capability/state`);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,sBAAAA;uBACFC,QAAQC,iBAOlB,GAAGC,cAAAA,mBAAiC;AACzC,GATiBH,wBAAAA,sBAAAA,CAAAA,EAAAA;;",
|
|
6
|
-
"names": ["defineCapability", "NavTreeCapabilities", "State", "defineCapability", "NAVTREE_PLUGIN"]
|
|
7
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NavTreeCapabilities
|
|
3
|
-
} from "./chunk-WCARAZ7J.mjs";
|
|
4
|
-
import "./chunk-ERDGQTH5.mjs";
|
|
5
|
-
|
|
6
|
-
// src/capabilities/intent-resolver.ts
|
|
7
|
-
import { Schema } from "effect";
|
|
8
|
-
import { contributes, Capabilities, createResolver, LayoutAction } from "@dxos/app-framework";
|
|
9
|
-
import { log } from "@dxos/log";
|
|
10
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts";
|
|
11
|
-
var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, createResolver({
|
|
12
|
-
intent: LayoutAction.UpdateLayout,
|
|
13
|
-
filter: (data) => Schema.is(LayoutAction.Expose.fields.input)(data),
|
|
14
|
-
resolve: async ({ subject }) => {
|
|
15
|
-
const { graph } = context.getCapability(Capabilities.AppGraph);
|
|
16
|
-
const { getItem, setItem } = context.getCapability(NavTreeCapabilities.State);
|
|
17
|
-
try {
|
|
18
|
-
const path = await graph.waitForPath({
|
|
19
|
-
target: subject
|
|
20
|
-
}, {
|
|
21
|
-
timeout: 1e3
|
|
22
|
-
});
|
|
23
|
-
[
|
|
24
|
-
...Array(path.length)
|
|
25
|
-
].forEach((_, index) => {
|
|
26
|
-
const subpath = path.slice(0, index);
|
|
27
|
-
const value = getItem(subpath);
|
|
28
|
-
if (!value.open) {
|
|
29
|
-
setItem(subpath, "open", true);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
} catch {
|
|
33
|
-
log("Path to node not found", {
|
|
34
|
-
subject
|
|
35
|
-
}, {
|
|
36
|
-
F: __dxlog_file,
|
|
37
|
-
L: 33,
|
|
38
|
-
S: void 0,
|
|
39
|
-
C: (f, a) => f(...a)
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}));
|
|
44
|
-
export {
|
|
45
|
-
intent_resolver_default as default
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=intent-resolver-3XYN2CBU.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { contributes, type PluginContext, Capabilities, createResolver, LayoutAction } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\n\nimport { NavTreeCapabilities } from './capabilities';\n\nexport default (context: PluginContext) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Expose.fields.input> =>\n Schema.is(LayoutAction.Expose.fields.input)(data),\n resolve: async ({ subject }) => {\n const { graph } = context.getCapability(Capabilities.AppGraph);\n const { getItem, setItem } = context.getCapability(NavTreeCapabilities.State);\n\n try {\n const path = await graph.waitForPath({ target: subject }, { timeout: 1_000 });\n [...Array(path.length)].forEach((_, index) => {\n const subpath = path.slice(0, index);\n const value = getItem(subpath);\n if (!value.open) {\n setItem(subpath, 'open', true);\n }\n });\n } catch {\n log('Path to node not found', { subject });\n }\n },\n }),\n );\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,aAAiCC,cAAcC,gBAAgBC,oBAAoB;AAC5F,SAASC,WAAW;;AAIpB,IAAA,0BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,QAAQ,CAACC,SACPC,OAAOC,GAAGL,aAAaM,OAAOC,OAAOC,KAAK,EAAEL,IAAAA;EAC9CM,SAAS,OAAO,EAAEC,QAAO,MAAE;AACzB,UAAM,EAAEC,MAAK,IAAKjB,QAAQkB,cAAchB,aAAaiB,QAAQ;AAC7D,UAAM,EAAEC,SAASC,QAAO,IAAKrB,QAAQkB,cAAcI,oBAAoBC,KAAK;AAE5E,QAAI;AACF,YAAMC,OAAO,MAAMP,MAAMQ,YAAY;QAAEC,QAAQV;MAAQ,GAAG;QAAEW,SAAS;MAAM,CAAA;AAC3E;WAAIC,MAAMJ,KAAKK,MAAM;QAAGC,QAAQ,CAACC,GAAGC,UAAAA;AAClC,cAAMC,UAAUT,KAAKU,MAAM,GAAGF,KAAAA;AAC9B,cAAMG,QAAQf,QAAQa,OAAAA;AACtB,YAAI,CAACE,MAAMC,MAAM;AACff,kBAAQY,SAAS,QAAQ,IAAA;QAC3B;MACF,CAAA;IACF,QAAQ;AACNI,UAAI,0BAA0B;QAAErB;MAAQ,GAAA;;;;;;IAC1C;EACF;AACF,CAAA,CAAA;",
|
|
6
|
-
"names": ["Schema", "contributes", "Capabilities", "createResolver", "LayoutAction", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "LayoutAction", "UpdateLayout", "filter", "data", "Schema", "is", "Expose", "fields", "input", "resolve", "subject", "graph", "getCapability", "AppGraph", "getItem", "setItem", "NavTreeCapabilities", "State", "path", "waitForPath", "target", "timeout", "Array", "length", "forEach", "_", "index", "subpath", "slice", "value", "open", "log"]
|
|
7
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
KEY_BINDING
|
|
3
|
-
} from "./chunk-ERDGQTH5.mjs";
|
|
4
|
-
|
|
5
|
-
// src/capabilities/keyboard.ts
|
|
6
|
-
import { Capabilities as AppCapabilities, contributes } from "@dxos/app-framework";
|
|
7
|
-
import { debounce } from "@dxos/async";
|
|
8
|
-
import { Keyboard } from "@dxos/keyboard";
|
|
9
|
-
import { isAction } from "@dxos/plugin-graph";
|
|
10
|
-
import { getHostPlatform } from "@dxos/util";
|
|
11
|
-
var keyboard_default = (context) => {
|
|
12
|
-
const { graph } = context.getCapability(AppCapabilities.AppGraph);
|
|
13
|
-
const visitor = (node, path) => {
|
|
14
|
-
let shortcut;
|
|
15
|
-
if (typeof node.properties.keyBinding === "object") {
|
|
16
|
-
const availablePlatforms = Object.keys(node.properties.keyBinding);
|
|
17
|
-
const platform = getHostPlatform();
|
|
18
|
-
shortcut = availablePlatforms.includes(platform) ? node.properties.keyBinding[platform] : platform === "ios" ? node.properties.keyBinding.macos : platform === "linux" || platform === "unknown" ? node.properties.keyBinding.windows : void 0;
|
|
19
|
-
} else {
|
|
20
|
-
shortcut = node.properties.keyBinding;
|
|
21
|
-
}
|
|
22
|
-
if (shortcut && isAction(node)) {
|
|
23
|
-
Keyboard.singleton.getContext(path.slice(0, -1).join("/")).bind({
|
|
24
|
-
shortcut,
|
|
25
|
-
handler: () => {
|
|
26
|
-
void node.data({
|
|
27
|
-
parent: node,
|
|
28
|
-
caller: KEY_BINDING
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
data: node.properties.label
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const eventHandler = debounce(() => {
|
|
36
|
-
graph.traverse({
|
|
37
|
-
visitor
|
|
38
|
-
});
|
|
39
|
-
}, 500);
|
|
40
|
-
const unsubscribe = graph.onNodeChanged.on(eventHandler);
|
|
41
|
-
Keyboard.singleton.initialize();
|
|
42
|
-
Keyboard.singleton.setCurrentContext(graph.root.id);
|
|
43
|
-
return contributes(AppCapabilities.Null, null, () => {
|
|
44
|
-
unsubscribe();
|
|
45
|
-
Keyboard.singleton.destroy();
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
export {
|
|
49
|
-
keyboard_default as default
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=keyboard-QRS6WOQH.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/keyboard.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities as AppCapabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { Keyboard } from '@dxos/keyboard';\nimport { isAction, type Node } from '@dxos/plugin-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING } from '../meta';\n\nexport default (context: PluginContext) => {\n const { graph } = context.getCapability(AppCapabilities.AppGraph);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n const visitor = (node: Node, path: string[]) => {\n let shortcut: string | undefined;\n if (typeof node.properties.keyBinding === 'object') {\n const availablePlatforms = Object.keys(node.properties.keyBinding);\n const platform = getHostPlatform();\n shortcut = availablePlatforms.includes(platform)\n ? node.properties.keyBinding[platform]\n : platform === 'ios'\n ? node.properties.keyBinding.macos // Fallback to macos if ios-specific bindings not provided.\n : platform === 'linux' || platform === 'unknown'\n ? node.properties.keyBinding.windows // Fallback to windows if platform-specific bindings not provided.\n : undefined;\n } else {\n shortcut = node.properties.keyBinding;\n }\n\n if (shortcut && isAction(node)) {\n Keyboard.singleton.getContext(path.slice(0, -1).join('/')).bind({\n shortcut,\n handler: () => {\n void node.data({ parent: node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n };\n\n const eventHandler = debounce(() => {\n graph.traverse({ visitor });\n }, 500);\n\n const unsubscribe = graph.onNodeChanged.on(eventHandler);\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graph.root.id);\n\n return contributes(AppCapabilities.Null, null, () => {\n unsubscribe();\n Keyboard.singleton.destroy();\n });\n};\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,mBAAuC;AACjF,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,gBAA2B;AACpC,SAASC,uBAAuB;AAIhC,IAAA,mBAAe,CAACC,YAAAA;AACd,QAAM,EAAEC,MAAK,IAAKD,QAAQE,cAAcC,gBAAgBC,QAAQ;AAIhE,QAAMC,UAAU,CAACC,MAAYC,SAAAA;AAC3B,QAAIC;AACJ,QAAI,OAAOF,KAAKG,WAAWC,eAAe,UAAU;AAClD,YAAMC,qBAAqBC,OAAOC,KAAKP,KAAKG,WAAWC,UAAU;AACjE,YAAMI,WAAWC,gBAAAA;AACjBP,iBAAWG,mBAAmBK,SAASF,QAAAA,IACnCR,KAAKG,WAAWC,WAAWI,QAAAA,IAC3BA,aAAa,QACXR,KAAKG,WAAWC,WAAWO,QAC3BH,aAAa,WAAWA,aAAa,YACnCR,KAAKG,WAAWC,WAAWQ,UAC3BC;IACV,OAAO;AACLX,iBAAWF,KAAKG,WAAWC;IAC7B;AAEA,QAAIF,YAAYY,SAASd,IAAAA,GAAO;AAC9Be,eAASC,UAAUC,WAAWhB,KAAKiB,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,EAAMC,KAAK;QAC9DlB;QACAmB,SAAS,MAAA;AACP,eAAKrB,KAAKsB,KAAK;YAAEC,QAAQvB;YAAMwB,QAAQC;UAAY,CAAA;QACrD;QACAH,MAAMtB,KAAKG,WAAWuB;MACxB,CAAA;IACF;EACF;AAEA,QAAMC,eAAeC,SAAS,MAAA;AAC5BjC,UAAMkC,SAAS;MAAE9B;IAAQ,CAAA;EAC3B,GAAG,GAAA;AAEH,QAAM+B,cAAcnC,MAAMoC,cAAcC,GAAGL,YAAAA;AAG3CZ,WAASC,UAAUiB,WAAU;AAC7BlB,WAASC,UAAUkB,kBAAkBvC,MAAMwC,KAAKC,EAAE;AAElD,SAAOC,YAAYxC,gBAAgByC,MAAM,MAAM,MAAA;AAC7CR,gBAAAA;AACAf,aAASC,UAAUuB,QAAO;EAC5B,CAAA;AACF;",
|
|
6
|
-
"names": ["Capabilities", "AppCapabilities", "contributes", "debounce", "Keyboard", "isAction", "getHostPlatform", "context", "graph", "getCapability", "AppCapabilities", "AppGraph", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "parent", "caller", "KEY_BINDING", "label", "eventHandler", "debounce", "traverse", "unsubscribe", "onNodeChanged", "on", "initialize", "setCurrentContext", "root", "id", "contributes", "Null", "destroy"]
|
|
7
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CommandsDialogContent,
|
|
3
|
-
CommandsTrigger,
|
|
4
|
-
NavTreeContainer,
|
|
5
|
-
NavTreeDocumentTitle
|
|
6
|
-
} from "./chunk-TZA65AKW.mjs";
|
|
7
|
-
import "./chunk-WCARAZ7J.mjs";
|
|
8
|
-
import {
|
|
9
|
-
COMMANDS_DIALOG,
|
|
10
|
-
NAVTREE_PLUGIN
|
|
11
|
-
} from "./chunk-ERDGQTH5.mjs";
|
|
12
|
-
|
|
13
|
-
// src/capabilities/react-surface.tsx
|
|
14
|
-
import React from "react";
|
|
15
|
-
import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
|
|
16
|
-
import { isGraphNode } from "@dxos/plugin-graph";
|
|
17
|
-
var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
18
|
-
createSurface({
|
|
19
|
-
id: COMMANDS_DIALOG,
|
|
20
|
-
role: "dialog",
|
|
21
|
-
filter: (data) => data.component === COMMANDS_DIALOG,
|
|
22
|
-
component: ({ data }) => /* @__PURE__ */ React.createElement(CommandsDialogContent, data.props)
|
|
23
|
-
}),
|
|
24
|
-
createSurface({
|
|
25
|
-
id: `${NAVTREE_PLUGIN}/navigation`,
|
|
26
|
-
role: "navigation",
|
|
27
|
-
filter: (data) => typeof data.current === "string",
|
|
28
|
-
component: ({ data }) => /* @__PURE__ */ React.createElement(NavTreeContainer, {
|
|
29
|
-
tab: data.current,
|
|
30
|
-
popoverAnchorId: data.popoverAnchorId,
|
|
31
|
-
topbar: data.topbar
|
|
32
|
-
})
|
|
33
|
-
}),
|
|
34
|
-
createSurface({
|
|
35
|
-
id: `${NAVTREE_PLUGIN}/document-title`,
|
|
36
|
-
role: "document-title",
|
|
37
|
-
component: ({ data }) => /* @__PURE__ */ React.createElement(NavTreeDocumentTitle, {
|
|
38
|
-
node: isGraphNode(data.subject) ? data.subject : void 0
|
|
39
|
-
})
|
|
40
|
-
}),
|
|
41
|
-
createSurface({
|
|
42
|
-
id: `${NAVTREE_PLUGIN}/search-input`,
|
|
43
|
-
role: "search-input",
|
|
44
|
-
position: "fallback",
|
|
45
|
-
component: () => /* @__PURE__ */ React.createElement(CommandsTrigger, null)
|
|
46
|
-
})
|
|
47
|
-
]);
|
|
48
|
-
export {
|
|
49
|
-
react_surface_default as default
|
|
50
|
-
};
|
|
51
|
-
//# sourceMappingURL=react-surface-N2HPMYCU.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { isGraphNode } from '@dxos/plugin-graph';\n\nimport { CommandsDialogContent, CommandsTrigger, NavTreeDocumentTitle, NavTreeContainer } from '../components';\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../meta';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: COMMANDS_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { selected?: string } } => data.component === COMMANDS_DIALOG,\n component: ({ data }) => <CommandsDialogContent {...data.props} />,\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/navigation`,\n role: 'navigation',\n filter: (data): data is { popoverAnchorId?: string; topbar: boolean; current: string } =>\n typeof data.current === 'string',\n component: ({ data }) => (\n <NavTreeContainer\n tab={data.current}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n topbar={data.topbar as boolean}\n />\n ),\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/document-title`,\n role: 'document-title',\n component: ({ data }) => <NavTreeDocumentTitle node={isGraphNode(data.subject) ? data.subject : undefined} />,\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/search-input`,\n role: 'search-input',\n position: 'fallback',\n component: () => <CommandsTrigger />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,mBAAmB;AAK5B,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAIC;IACJC,MAAM;IACNC,QAAQ,CAACC,SAAmDA,KAAKC,cAAcJ;IAC/EI,WAAW,CAAC,EAAED,KAAI,MAAO,sBAAA,cAACE,uBAA0BF,KAAKG,KAAK;EAChE,CAAA;EACAR,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNC,QAAQ,CAACC,SACP,OAAOA,KAAKK,YAAY;IAC1BJ,WAAW,CAAC,EAAED,KAAI,MAChB,sBAAA,cAACM,kBAAAA;MACCC,KAAKP,KAAKK;MACVG,iBAAiBR,KAAKQ;MACtBC,QAAQT,KAAKS;;EAGnB,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNG,WAAW,CAAC,EAAED,KAAI,MAAO,sBAAA,cAACU,sBAAAA;MAAqBC,MAAMC,YAAYZ,KAAKa,OAAO,IAAIb,KAAKa,UAAUC;;EAClG,CAAA;EACAnB,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNiB,UAAU;IACVd,WAAW,MAAM,sBAAA,cAACe,iBAAAA,IAAAA;EACpB,CAAA;CACD;",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "isGraphNode", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "COMMANDS_DIALOG", "role", "filter", "data", "component", "CommandsDialogContent", "props", "NAVTREE_PLUGIN", "current", "NavTreeContainer", "tab", "popoverAnchorId", "topbar", "NavTreeDocumentTitle", "node", "isGraphNode", "subject", "undefined", "position", "CommandsTrigger"]
|
|
7
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
NavTreeCapabilities
|
|
3
|
-
} from "./chunk-WCARAZ7J.mjs";
|
|
4
|
-
import {
|
|
5
|
-
NAVTREE_PLUGIN
|
|
6
|
-
} from "./chunk-ERDGQTH5.mjs";
|
|
7
|
-
|
|
8
|
-
// src/capabilities/state.ts
|
|
9
|
-
import { effect, untracked } from "@preact/signals-core";
|
|
10
|
-
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
11
|
-
import { live } from "@dxos/live-object";
|
|
12
|
-
import { Path } from "@dxos/react-ui-list";
|
|
13
|
-
var KEY = `${NAVTREE_PLUGIN}/state/v1`;
|
|
14
|
-
var getInitialState = () => {
|
|
15
|
-
const stringified = localStorage.getItem(KEY);
|
|
16
|
-
if (!stringified) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
try {
|
|
20
|
-
const cached = JSON.parse(stringified);
|
|
21
|
-
return cached.map(([key, value]) => [
|
|
22
|
-
key,
|
|
23
|
-
live({
|
|
24
|
-
open: value.open,
|
|
25
|
-
current: false
|
|
26
|
-
})
|
|
27
|
-
]);
|
|
28
|
-
} catch {
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var state_default = (context) => {
|
|
32
|
-
const layout = context.getCapability(Capabilities.Layout);
|
|
33
|
-
const state = new Map(getInitialState() ?? [
|
|
34
|
-
// TODO(thure): Initialize these dynamically.
|
|
35
|
-
[
|
|
36
|
-
"root",
|
|
37
|
-
live({
|
|
38
|
-
open: true,
|
|
39
|
-
current: false
|
|
40
|
-
})
|
|
41
|
-
],
|
|
42
|
-
[
|
|
43
|
-
"root~dxos.org/plugin/space-spaces",
|
|
44
|
-
live({
|
|
45
|
-
open: true,
|
|
46
|
-
current: false
|
|
47
|
-
})
|
|
48
|
-
],
|
|
49
|
-
[
|
|
50
|
-
"root~dxos.org/plugin/files",
|
|
51
|
-
live({
|
|
52
|
-
open: true,
|
|
53
|
-
current: false
|
|
54
|
-
})
|
|
55
|
-
]
|
|
56
|
-
]);
|
|
57
|
-
const getItem = (_path) => {
|
|
58
|
-
const path = Path.create(..._path);
|
|
59
|
-
const value = state.get(path) ?? live({
|
|
60
|
-
open: false,
|
|
61
|
-
current: false,
|
|
62
|
-
alternateTree: false
|
|
63
|
-
});
|
|
64
|
-
if (!state.has(path)) {
|
|
65
|
-
state.set(path, value);
|
|
66
|
-
}
|
|
67
|
-
return value;
|
|
68
|
-
};
|
|
69
|
-
const setItem = (path, key, next) => {
|
|
70
|
-
const value = getItem(path);
|
|
71
|
-
value[key] = next;
|
|
72
|
-
localStorage.setItem(KEY, JSON.stringify(Array.from(state.entries())));
|
|
73
|
-
};
|
|
74
|
-
const isOpen = (path) => getItem(path).open;
|
|
75
|
-
const isCurrent = (path) => getItem(path).current;
|
|
76
|
-
const isAlternateTree = (path) => {
|
|
77
|
-
const item = getItem(path);
|
|
78
|
-
return item.alternateTree ?? false;
|
|
79
|
-
};
|
|
80
|
-
let previous = [];
|
|
81
|
-
const unsubscribe = effect(() => {
|
|
82
|
-
const removed = previous.filter((id) => !layout.active.includes(id));
|
|
83
|
-
previous = layout.active;
|
|
84
|
-
const handleUpdate = () => {
|
|
85
|
-
removed.forEach((id) => {
|
|
86
|
-
const keys = Array.from(state.keys()).filter((key) => Path.last(key) === id);
|
|
87
|
-
keys.forEach((key) => {
|
|
88
|
-
setItem(Path.parts(key), "current", false);
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
layout.active.forEach((id) => {
|
|
92
|
-
const keys = Array.from(/* @__PURE__ */ new Set([
|
|
93
|
-
...state.keys(),
|
|
94
|
-
id
|
|
95
|
-
])).filter((key) => Path.last(key) === id);
|
|
96
|
-
keys.forEach((key) => {
|
|
97
|
-
setItem(Path.parts(key), "current", true);
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
const timeout = setTimeout(handleUpdate, 500);
|
|
102
|
-
untracked(() => handleUpdate());
|
|
103
|
-
return () => clearTimeout(timeout);
|
|
104
|
-
});
|
|
105
|
-
return contributes(NavTreeCapabilities.State, {
|
|
106
|
-
state,
|
|
107
|
-
getItem,
|
|
108
|
-
setItem,
|
|
109
|
-
isOpen,
|
|
110
|
-
isCurrent,
|
|
111
|
-
isAlternateTree
|
|
112
|
-
}, () => unsubscribe());
|
|
113
|
-
};
|
|
114
|
-
export {
|
|
115
|
-
state_default as default
|
|
116
|
-
};
|
|
117
|
-
//# sourceMappingURL=state-54DY3DOY.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/state.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, untracked } from '@preact/signals-core';\n\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { type Live } from '@dxos/echo';\nimport { live } from '@dxos/live-object';\nimport { Path } from '@dxos/react-ui-list';\n\nimport { NavTreeCapabilities } from './capabilities';\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst KEY = `${NAVTREE_PLUGIN}/state/v1`;\n\nconst getInitialState = () => {\n const stringified = localStorage.getItem(KEY);\n if (!stringified) {\n return;\n }\n\n try {\n const cached: [string, { open: boolean; current: boolean }][] = JSON.parse(stringified);\n return cached.map(([key, value]): [string, Live<{ open: boolean; current: boolean }>] => [\n key,\n live({ open: value.open, current: false }),\n ]);\n } catch {}\n};\n\nexport default (context: PluginContext) => {\n const layout = context.getCapability(Capabilities.Layout);\n\n // TODO(wittjosiah): This currently needs to be not a Live at the root.\n // If it is a Live then React errors when initializing new paths because of state change during render.\n // Ideally this could be a Live but be able to access and update the root level without breaking render.\n // Wrapping accesses and updates in `untracked` didn't seem to work in all cases.\n const state = new Map<string, Live<{ open: boolean; current: boolean; alternateTree?: boolean }>>(\n getInitialState() ?? [\n // TODO(thure): Initialize these dynamically.\n ['root', live({ open: true, current: false })],\n ['root~dxos.org/plugin/space-spaces', live({ open: true, current: false })],\n ['root~dxos.org/plugin/files', live({ open: true, current: false })],\n ],\n );\n\n const getItem = (_path: string[]) => {\n const path = Path.create(..._path);\n const value = state.get(path) ?? live({ open: false, current: false, alternateTree: false });\n if (!state.has(path)) {\n state.set(path, value);\n }\n\n return value;\n };\n\n const setItem = (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => {\n const value = getItem(path);\n value[key] = next;\n\n localStorage.setItem(KEY, JSON.stringify(Array.from(state.entries())));\n };\n\n const isOpen = (path: string[]) => getItem(path).open;\n const isCurrent = (path: string[]) => getItem(path).current;\n const isAlternateTree = (path: string[]) => {\n const item = getItem(path);\n return item.alternateTree ?? false;\n };\n\n let previous: string[] = [];\n const unsubscribe = effect(() => {\n const removed = previous.filter((id) => !layout.active.includes(id));\n previous = layout.active;\n\n const handleUpdate = () => {\n removed.forEach((id) => {\n const keys = Array.from(state.keys()).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', false);\n });\n });\n\n layout.active.forEach((id) => {\n const keys = Array.from(new Set([...state.keys(), id])).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', true);\n });\n });\n };\n\n // TODO(wittjosiah): This is setTimeout because there's a race between the keys be initialized.\n // Keys are initialized on the first render of an item in the navtree.\n // This could be avoided if the location was a path as well and not just an id.\n const timeout = setTimeout(handleUpdate, 500);\n untracked(() => handleUpdate());\n return () => clearTimeout(timeout);\n });\n\n return contributes(NavTreeCapabilities.State, { state, getItem, setItem, isOpen, isCurrent, isAlternateTree }, () =>\n unsubscribe(),\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["effect", "untracked", "Capabilities", "contributes", "live", "Path", "KEY", "NAVTREE_PLUGIN", "getInitialState", "stringified", "localStorage", "getItem", "cached", "JSON", "parse", "map", "key", "value", "live", "open", "current", "context", "layout", "getCapability", "Capabilities", "Layout", "state", "Map", "_path", "path", "Path", "create", "get", "alternateTree", "has", "set", "setItem", "next", "stringify", "Array", "from", "entries", "isOpen", "isCurrent", "isAlternateTree", "item", "previous", "unsubscribe", "effect", "removed", "filter", "id", "active", "includes", "handleUpdate", "forEach", "keys", "last", "parts", "Set", "timeout", "setTimeout", "untracked", "clearTimeout", "contributes", "NavTreeCapabilities", "State"]
|
|
7
|
-
}
|