@dxos/plugin-navtree 0.8.4-main.e098934 → 0.8.4-main.ead640a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{app-graph-builder-6JDBQ25U.mjs → app-graph-builder-YAPMENYT.mjs} +10 -9
- package/dist/lib/browser/app-graph-builder-YAPMENYT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZKVY35IG.mjs → chunk-IMFXKPSB.mjs} +115 -102
- package/dist/lib/browser/chunk-IMFXKPSB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WCARAZ7J.mjs → chunk-LPAREX6J.mjs} +4 -4
- package/dist/lib/browser/chunk-LPAREX6J.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZENLR72O.mjs +14 -0
- package/dist/lib/browser/chunk-ZENLR72O.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +5 -7
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-N35ZIHFD.mjs → intent-resolver-TCQXGF6U.mjs} +6 -6
- package/dist/lib/browser/intent-resolver-TCQXGF6U.mjs.map +7 -0
- package/dist/lib/browser/{keyboard-HMTMA33N.mjs → keyboard-AHSAWKXA.mjs} +4 -4
- package/dist/lib/browser/{keyboard-HMTMA33N.mjs.map → keyboard-AHSAWKXA.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-5PZ4XJT7.mjs → react-surface-AH2TP73M.mjs} +10 -10
- package/dist/lib/browser/react-surface-AH2TP73M.mjs.map +7 -0
- package/dist/lib/browser/{state-P5DGL7KS.mjs → state-2Q623V7U.mjs} +7 -7
- package/dist/lib/browser/state-2Q623V7U.mjs.map +7 -0
- package/dist/types/src/NavTreePlugin.d.ts +1 -1
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +12 -9
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +1 -2
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +1 -2
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts +2 -0
- package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.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 +1 -2
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.d.ts +1 -2
- package/dist/types/src/experimental/Tree.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.stories.d.ts +2 -3
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts +1 -1
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +47 -47
- package/src/NavTreePlugin.tsx +70 -71
- package/src/capabilities/app-graph-builder.ts +6 -5
- package/src/capabilities/capabilities.ts +2 -2
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +4 -4
- package/src/capabilities/state.ts +2 -2
- package/src/components/CommandsDialog/CommandsDialog.tsx +3 -3
- package/src/components/CommandsDialog/CommandsTrigger.tsx +2 -2
- package/src/components/NavTree/NavTree.stories.tsx +61 -47
- package/src/components/NavTree/NavTree.tsx +4 -0
- package/src/components/NavTreeContainer.tsx +13 -6
- package/src/components/NavTreeDocumentTitle.tsx +2 -2
- package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +2 -4
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +5 -4
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +27 -21
- package/src/components/Sidebar/L0Menu.tsx +50 -49
- package/src/components/Sidebar/L1Panel.tsx +7 -8
- package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +3 -4
- package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
- package/src/events.ts +2 -2
- package/src/experimental/Tree.stories.tsx +24 -28
- package/src/experimental/Tree.tsx +5 -22
- package/src/meta.ts +5 -7
- package/src/testing/app-graph-builder.ts +9 -8
- package/src/testing/generator.ts +2 -2
- package/src/types.ts +4 -3
- package/dist/lib/browser/app-graph-builder-6JDBQ25U.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-WCARAZ7J.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZKVY35IG.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-N35ZIHFD.mjs.map +0 -7
- package/dist/lib/browser/react-surface-5PZ4XJT7.mjs.map +0 -7
- package/dist/lib/browser/state-P5DGL7KS.mjs.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/CommandsDialog/CommandsDialog.tsx", "../../../src/components/CommandsDialog/CommandsTrigger.tsx", "../../../src/util.ts", "../../../src/components/NavTreeContainer.tsx", "../../../src/capabilities/index.ts", "../../../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/components/Sidebar/L1Tabs.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { LayoutAction, createIntent, 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, toLocalizedString, useTranslation } 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, meta } 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(meta.id);\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: meta.id })}</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 React from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { COMMANDS_DIALOG, meta } 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(meta.id);\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 <Icon icon='ph--magnifying-glass--regular' size={5} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Action, type Node, type ReadableGraph, isActionLike } from '@dxos/app-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { 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 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 { type Instruction, extractInstruction } 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 LayoutAction,\n Surface,\n createIntent,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n useLayout,\n} from '@dxos/app-framework';\nimport { type Node, ROOT_ID, type ReadableGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { useConnections, useActions as useGraphActions } from '@dxos/plugin-graph';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type TreeData, type TreeItemDataProps, isTreeData } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, byPosition } from '@dxos/util';\n\nimport { NavTreeCapabilities } from '../capabilities';\nimport { meta } from '../meta';\nimport { type FlattenedActions, type NavTreeItemGraphNode } from '../types';\nimport { getChildren, getParent, resolveMigrationOperation } from '../util';\n\nimport { NAV_TREE_ITEM, NavTree } from './NavTree';\nimport { NavTreeContext } from './NavTreeContext';\nimport { type NavTreeContextValue } from './types';\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(\n () => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE && node.properties.disposition !== 'hidden',\n );\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);\n const filtered = connections.filter((node) => filterItems(node, options?.disposition));\n return options?.sort ? filtered.toSorted((a, b) => byPosition(a.properties, b.properties)) : filtered;\n};\n\nconst useActions = (node: Node): FlattenedActions => {\n const { graph } = useAppGraph();\n const actions = useGraphActions(graph, node.id);\n\n return useMemo(\n () =>\n actions.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 [actions],\n );\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');\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(meta.id);\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 parentOf,\n disabled: node.properties.disabled,\n label: node.properties.label ?? node.id,\n className: mx(node.properties.className, node.properties.modified && 'italic'), // TODO(burdon): Italic?\n headingClassName: node.properties.headingClassName,\n icon: node.properties.icon,\n iconClassName: node.properties.iconClassName,\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 canSelect = useCallback(({ item }: { item: Node }) => {\n return item.properties.selectable ?? true;\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 useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n canSelect,\n isAlternateTree,\n setAlternateTree,\n onTabChange: handleTabChange,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onBack: handleBack,\n }),\n [\n tab,\n useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n canSelect,\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 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", "//\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, L1Tabs, type L1TabsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Pick<TreeProps<NavTreeItemGraphNode>, 'id' | 'root'> & Pick<L1TabsProps, '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 // TODO(thure): `Tabs.Root` forces all items that should be able to receive focus to use `Tabs.Tab(Primitive)` since\n // it uses RovingFocus and doesn’t support moving focus to an item that is not a tab. Assess whether this situation\n // should change including whether it should motivate a change in the design/taxonomy, or if this means this should\n // not use `react-ui-tabs` at all.\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 <L1Tabs 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 { meta } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(meta.id);\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 type MouseEvent,\n type PropsWithChildren,\n forwardRef,\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 { DxAvatar } from '@dxos/lit-ui/react';\nimport {\n Icon,\n ListItem,\n ScrollArea,\n type ThemedClassName,\n Tooltip,\n toLocalizedString,\n useMediaQuery,\n useTranslation,\n} from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } 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 } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { meta } 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');\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(meta.id);\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, role: 'button' };\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Tabs.TabPrimitive\n {...(rootProps as any)}\n data-type={type}\n className={mx(l0ItemRoot, l0Breakpoints[item.properties.l0Breakpoint])}\n ref={forwardedRef}\n >\n {children}\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n );\n },\n);\n\nexport const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) => (\n <div\n role='none'\n className={mx(\n 'hidden group-aria-selected/l0item:block absolute inline-start-0 inset-block-2 is-1 bg-accentSurface rounded-ie',\n classNames,\n )}\n />\n);\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {\n const { t } = useTranslation(meta.id);\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 <L0ItemActiveTabIndicator />\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 { t } = useTranslation(meta.id);\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={6} {...hueFgStyle} />;\n }\n\n if (type === 'tab' && item.properties.disposition !== 'pin-end') {\n const hue = item.properties.hue ?? null;\n const localizedString = toLocalizedString(item.properties.label, t);\n return <DxAvatar hue={hue} hueVariant='surface' variant='square' size={12} fallback={localizedString} />;\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(meta.id);\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 <Tabs.TabPrimitive value='options' asChild role='button'>\n <DropdownMenu.Trigger\n data-testid='spacePlugin.addSpace'\n className={mx(l0ItemRoot, 'grid place-items-center dx-focus-ring-group')}\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 </Tabs.TabPrimitive>\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 <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\nimport { L0ItemActiveTabIndicator } from '../Sidebar';\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 <>\n <L0ItemActiveTabIndicator classNames='inset-block-6' />\n <div\n className='grid place-items-center dx-focus-ring-group-indicator rounded-full'\n data-joyride='welcome/account'\n >\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", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { DensityProvider, IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem';\n\nexport type L1PanelProps = {\n open?: boolean;\n path: string[];\n item: Node<any>;\n currentItemId: string;\n onBack?: () => void;\n};\n\n/**\n * Space or settings panel.\n */\nexport const L1Panel = ({ open, path, item, currentItemId, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, ...navTreeContext } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const { useItems } = navTreeContext;\n const alternateTree = useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\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 useItems(node, { disposition, sort: node?.id === alternateTree.id });\n },\n [alternateTree, useItems],\n );\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 <DensityProvider density='fine'>\n <L1PanelHeader path={path} item={item} currentItemId={currentItemId} onBack={onBack} />\n <div role='none' className='overflow-y-auto'>\n {isAlternate ? (\n <Tree\n {...navTreeContext}\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 useItems={useAlternateItems}\n />\n ) : (\n <Tree\n {...navTreeContext}\n id={item.id}\n root={item}\n path={path}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n draggable\n />\n )}\n </div>\n </DensityProvider>\n )}\n </Tabs.Tabpanel>\n );\n};\n\n/**\n * Header row.\n */\nconst L1PanelHeader = ({ item, path, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, setAlternateTree, ...navTreeContext } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\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 isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const backCapable = item.id.startsWith('!') || isAlternate;\n\n const handleOpen = useCallback(() => {\n setAlternateTree?.(alternatePath, true);\n }, [alternatePath, setAlternateTree]);\n\n const handleBack = useCallback(() => {\n if (isAlternate) {\n setAlternateTree?.(alternatePath, false);\n } else {\n onBack?.();\n }\n }, [isAlternate, alternatePath, setAlternateTree, onBack]);\n\n // TODO(burdon): Reuse same grid as tree?\n return (\n <div className='flex is-full items-center border-be border-subduedSeparator app-drag density-coarse'>\n <div className='is-6' />\n <h2 className='flex-1 truncate min-is-0'>{title}</h2>\n {(backCapable && (\n <IconButton\n variant='ghost'\n icon='ph--arrow-u-down-left--regular'\n iconOnly\n size={5}\n label={t('button back')}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleBack}\n />\n )) ||\n (alternateTree && !isAlternate && (\n <IconButton\n data-testid='treeView.alternateTreeButton'\n variant='ghost'\n icon={alternateTree.properties.icon ?? 'ph--placeholder--regular'}\n iconOnly\n size={5}\n label={toLocalizedString(alternateTree.properties.label ?? alternateTree.id, t)}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleOpen}\n />\n ))}\n <NavTreeItemColumns open path={path} item={item} density='coarse' />\n </div>\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 { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { meta } 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(meta.id);\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={['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={[\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 event.stopPropagation();\n if (disabled) {\n return;\n }\n\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(meta.id);\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 { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { meta } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { type NavTreeItemColumnsProps } from '../types';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\n\nexport const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumnsProps) => {\n const { t } = useTranslation(meta.id);\n const { useActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n const { actions: _actions, groupedActions } = useActions(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 useLoadDescendents(item);\n useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n return (\n <div role='none' className='contents app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (\n <Treegrid.Cell classNames='contents'>\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 </Treegrid.Cell>\n ) : (\n <Treegrid.Cell role='none' />\n )}\n <ActionRoot>\n {actions.length > 0 ? (\n <Treegrid.Cell classNames='contents'>\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 </Treegrid.Cell>\n ) : (\n <Treegrid.Cell role='none' />\n )}\n </ActionRoot>\n {ItemEnd && (\n <Treegrid.Cell classNames='contents'>\n <ItemEnd node={item} open={open} />\n </Treegrid.Cell>\n )}\n </div>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\n\nimport { L1Panel, type L1PanelProps } from './L1Panel';\n\nexport type L1TabsProps = Pick<L1PanelProps, 'open' | 'currentItemId' | 'onBack'> & {\n path: string[];\n topLevelItems: Node<any>[];\n};\n\n/**\n * Each space is an L1 tab.\n */\nexport const L1Tabs = ({ topLevelItems, onBack, ...props }: L1TabsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n switch (type) {\n case 'tab':\n return <L1Panel key={item.id} item={item} {...props} onBack={onBack} />;\n case 'collection':\n return <L1PanelCollection key={item.id} item={item} {...props} />;\n default:\n return null;\n }\n })}\n </>\n );\n};\n\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "useState", "LayoutAction", "createIntent", "useAppGraph", "useIntentDispatcher", "isAction", "isActionGroup", "Keyboard", "keySymbols", "useActions", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "cardDialogContent", "cardDialogHeader", "cardDialogPaddedOverflow", "cardDialogSearchListRoot", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "meta", "id", "setSelected", "useState", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "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", "React", "LayoutAction", "createIntent", "useIntentDispatcher", "Button", "Icon", "useTranslation", "CommandsTrigger", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "meta", "id", "React", "Button", "classNames", "onClick", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "span", "className", "Icon", "icon", "size", "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", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "useMemo", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useCapability", "useIntentDispatcher", "useLayout", "ROOT_ID", "isAction", "isActionLike", "PLANK_COMPANION_TYPE", "useConnections", "useActions", "useGraphActions", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "byPosition", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Keyboard", "ReactSurface", "State", "React", "useMemo", "Tabs", "useEffect", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "meta", "id", "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", "DxAvatar", "Icon", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "DropdownMenu", "MenuProvider", "Tabs", "mx", "arrayMove", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "React", "L0ItemActiveTabIndicator", "classNames", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "tab", "isCurrent", "onSelect", "onTabChange", "useNavTreeContext", "isLg", "useMediaQuery", "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", "meta", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "role", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "Tabs", "TabPrimitive", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0ItemActiveTabIndicator", "classNames", "div", "L0Item", "pinned", "onRearrange", "itemElement", "useRef", "closestEdge", "setEdge", "useState", "hue", "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", "data-frame", "style", "background", "ItemAvatar", "span", "ListItem", "DropIndicator", "edge", "icon", "hueFgStyle", "color", "Icon", "size", "disposition", "DxAvatar", "hueVariant", "variant", "fallback", "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", "MenuProvider", "DropdownMenu", "Root", "group", "items", "ScrollArea", "Viewport", "Scrollbar", "orientation", "Thumb", "filter", "UserAccountAvatar", "userId", "emoji", "status", "React", "useCallback", "useMemo", "DensityProvider", "IconButton", "toLocalizedString", "useTranslation", "Tree", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "React", "IconButton", "toLocalizedString", "useDensityContext", "useTranslation", "DropdownMenu", "MenuProvider", "hoverableControlItem", "hoverableOpenControlItem", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "meta", "id", "useDensityContext", "React", "MenuProvider", "DropdownMenu", "Root", "group", "items", "Trigger", "asChild", "IconButton", "classNames", "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", "Popover", "Treegrid", "toLocalizedString", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "t", "useTranslation", "meta", "id", "useActions", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "_b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "includes", "useLoadDescendents", "undefined", "ActionRoot", "NAV_TREE_ITEM", "Popover", "Anchor", "Fragment", "React", "div", "role", "className", "disabled", "Treegrid", "Cell", "classNames", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "node", "L1Panel", "open", "path", "item", "currentItemId", "onBack", "t", "useTranslation", "meta", "id", "isAlternateTree", "navTreeContext", "useNavTreeContext", "title", "toLocalizedString", "properties", "label", "useItems", "alternateTree", "disposition", "alternatePath", "useMemo", "isAlternate", "useAlternateItems", "useCallback", "node", "sort", "React", "Tabs", "Tabpanel", "key", "value", "classNames", "tabIndex", "aria-label", "inert", "DensityProvider", "density", "L1PanelHeader", "div", "role", "className", "Tree", "root", "levelOffset", "gridTemplateColumns", "renderColumns", "NavTreeItemColumns", "draggable", "setAlternateTree", "backCapable", "startsWith", "handleOpen", "handleBack", "h2", "IconButton", "variant", "icon", "iconOnly", "size", "hoverableControlItem", "hoverableOpenControlItem", "onClick", "data-testid", "React", "useMemo", "L1Tabs", "topLevelItems", "onBack", "props", "React", "map", "item", "type", "l0ItemType", "L1Panel", "key", "id", "L1PanelCollection", "path", "useItems", "useNavTreeContext", "useLoadDescendents", "collectionItems", "groupPath", "useMemo", "filter", "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", "L1Tabs", "currentItemId", "NODE_TYPE", "renderItemEnd", "node", "open", "React", "Surface", "role", "data", "id", "subject", "limit", "getChildrenFilter", "untracked", "isActionLike", "type", "PLANK_COMPANION_TYPE", "properties", "disposition", "filterItems", "action", "isAction", "getItems", "graph", "getConnections", "ROOT_ID", "filter", "useItems", "options", "useAppGraph", "connections", "useConnections", "filtered", "sort", "toSorted", "a", "b", "byPosition", "useActions", "actions", "useGraphActions", "useMemo", "reduce", "acc", "arg", "push", "actionGroup", "getActions", "groupedActions", "NavTreeContainer", "memo", "tab", "popoverAnchorId", "topbar", "isLg", "useMediaQuery", "dispatchPromise", "dispatch", "useIntentDispatcher", "isOpen", "isCurrent", "isAlternateTree", "setItem", "useCapability", "NavTreeCapabilities", "State", "layout", "useLayout", "navigationSidebarState", "useSidebars", "meta", "getProps", "useCallback", "path", "children", "getChildren", "parentOf", "length", "map", "undefined", "disabled", "label", "className", "mx", "modified", "headingClassName", "icon", "iconClassName", "testId", "loadDescendents", "expand", "forEach", "child", "handleOpenChange", "item", "handleTabChange", "createIntent", "LayoutAction", "UpdateSidebar", "part", "state", "SwitchWorkspace", "active", "Open", "canDrop", "source", "target", "canSelect", "selectable", "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", "onTabChange", "onOpenChange", "onSelect", "onBack", "NavTreeContext", "Provider", "value", "NavTree", "root", "sidebarOpen"]
|
|
7
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
meta
|
|
3
|
+
} from "./chunk-ZENLR72O.mjs";
|
|
4
4
|
|
|
5
5
|
// src/capabilities/capabilities.ts
|
|
6
6
|
import { defineCapability } from "@dxos/app-framework";
|
|
7
7
|
(function(NavTreeCapabilities2) {
|
|
8
|
-
NavTreeCapabilities2.State = defineCapability(`${
|
|
8
|
+
NavTreeCapabilities2.State = defineCapability(`${meta.id}/capability/state`);
|
|
9
9
|
})(NavTreeCapabilities || (NavTreeCapabilities = {}));
|
|
10
10
|
var NavTreeCapabilities;
|
|
11
11
|
|
|
12
12
|
export {
|
|
13
13
|
NavTreeCapabilities
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-LPAREX6J.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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 { meta } 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 }>(`${meta.id}/capability/state`);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,sBAAAA;uBACFC,QAAQC,iBAOlB,GAAGC,KAAKC,EAAE,mBAAmB;AAClC,GATiBJ,wBAAAA,sBAAAA,CAAAA,EAAAA;;",
|
|
6
|
+
"names": ["defineCapability", "NavTreeCapabilities", "State", "defineCapability", "meta", "id"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
var meta = {
|
|
3
|
+
id: "dxos.org/plugin/navtree",
|
|
4
|
+
name: "Navtree"
|
|
5
|
+
};
|
|
6
|
+
var KEY_BINDING = "KeyBinding";
|
|
7
|
+
var COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
meta,
|
|
11
|
+
KEY_BINDING,
|
|
12
|
+
COMMANDS_DIALOG
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-ZENLR72O.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/navtree',\n name: 'Navtree',\n};\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n// TODO(wittjosiah): Factor out.\nexport const COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;\n"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;AACR;AAGO,IAAMC,cAAc;AAEpB,IAAMC,kBAAkB,GAAGJ,KAAKC,EAAE;",
|
|
6
|
+
"names": ["meta", "id", "name", "KEY_BINDING", "COMMANDS_DIALOG"]
|
|
7
|
+
}
|
|
@@ -11,21 +11,20 @@ import {
|
|
|
11
11
|
l0ItemType,
|
|
12
12
|
resolveMigrationOperation,
|
|
13
13
|
sortActions
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-IMFXKPSB.mjs";
|
|
15
15
|
import {
|
|
16
16
|
NavTreeCapabilities
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-LPAREX6J.mjs";
|
|
18
18
|
import {
|
|
19
19
|
COMMANDS_DIALOG,
|
|
20
20
|
KEY_BINDING,
|
|
21
|
-
NAVTREE_PLUGIN,
|
|
22
21
|
meta
|
|
23
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-ZENLR72O.mjs";
|
|
24
23
|
|
|
25
24
|
// src/events.ts
|
|
26
25
|
import { Events } from "@dxos/app-framework";
|
|
27
26
|
(function(NavTreeEvents2) {
|
|
28
|
-
NavTreeEvents2.StateReady = Events.createStateEvent(
|
|
27
|
+
NavTreeEvents2.StateReady = Events.createStateEvent(meta.id);
|
|
29
28
|
})(NavTreeEvents || (NavTreeEvents = {}));
|
|
30
29
|
var NavTreeEvents;
|
|
31
30
|
|
|
@@ -52,7 +51,7 @@ var translations = [
|
|
|
52
51
|
];
|
|
53
52
|
|
|
54
53
|
// src/NavTreePlugin.tsx
|
|
55
|
-
var NavTreePlugin = () =>
|
|
54
|
+
var NavTreePlugin = definePlugin(meta, () => [
|
|
56
55
|
defineModule({
|
|
57
56
|
id: `${meta.id}/module/state`,
|
|
58
57
|
activatesOn: Events2.LayoutReady,
|
|
@@ -133,7 +132,6 @@ var NavTreePlugin = () => definePlugin(meta, [
|
|
|
133
132
|
export {
|
|
134
133
|
COMMANDS_DIALOG,
|
|
135
134
|
KEY_BINDING,
|
|
136
|
-
NAVTREE_PLUGIN,
|
|
137
135
|
NavTreeCapabilities,
|
|
138
136
|
NavTreeEvents,
|
|
139
137
|
NavTreePlugin,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/events.ts", "../../../src/NavTreePlugin.tsx", "../../../src/translations.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport {
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["Events", "NavTreeEvents", "StateReady", "Events", "createStateEvent", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport namespace NavTreeEvents {\n export const StateReady = Events.createStateEvent(meta.id);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n Events,\n LayoutAction,\n allOf,\n contributes,\n createIntent,\n defineModule,\n definePlugin,\n} from '@dxos/app-framework';\nimport { type TreeData } from '@dxos/react-ui-list';\n\nimport { AppGraphBuilder, IntentResolver, Keyboard, ReactSurface, State } from './capabilities';\nimport { NODE_TYPE } from './components';\nimport { NavTreeEvents } from './events';\nimport { meta } from './meta';\nimport { translations } from './translations';\n\nexport const NavTreePlugin = definePlugin(meta, () => [\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.LayoutReady,\n activatesAfter: [NavTreeEvents.StateReady],\n activate: State,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: NODE_TYPE,\n metadata: {\n parse: ({ item }: TreeData, type: string) => {\n switch (type) {\n case 'node':\n return item;\n case 'object':\n return item.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.data };\n }\n },\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/expose`,\n activatesOn: allOf(Events.DispatcherReady, Events.AppGraphReady, Events.LayoutReady, NavTreeEvents.StateReady),\n activate: async (context) => {\n const layout = context.getCapability(Capabilities.Layout);\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const { graph } = context.getCapability(Capabilities.AppGraph);\n if (dispatch && layout.active.length === 1) {\n // TODO(wittjosiah): This should really be fired once the navtree renders for the first time.\n // That is the point at which the graph is expanded and the path should be available.\n void graph\n .waitForPath({ target: layout.active[0] }, { timeout: 30_000 })\n .then(() => dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: layout.active[0] })))\n .catch(() => {});\n }\n\n return [];\n },\n }),\n defineModule({\n id: `${meta.id}/module/keyboard`,\n activatesOn: Events.AppGraphReady,\n activate: Keyboard,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'app menu label': 'App menu',\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'tree item actions label': 'More actions',\n 'empty branch message': ' ',\n 'button back': 'Back to Space',\n },\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAc;UAINC,gBAAAA;iBACFC,aAAaC,OAAOC,iBAAiBC,KAAKC,EAAE;AAC3D,GAFiBL,kBAAAA,gBAAAA,CAAAA,EAAAA;;;;ACJjB,SACEM,cACAC,UAAAA,SACAC,cACAC,OACAC,aACAC,cACAC,cACAC,oBACK;;;ACLA,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,EAAE,GAAG;QACT,kBAAkB;QAClB,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,kCAAkC;QAClC,mCAAmC;QACnC,2BAA2B;QAC3B,wBAAwB;QACxB,eAAe;MACjB;IACF;EACF;;;;ADDK,IAAMC,gBAAgBC,aAAaC,MAAM,MAAM;EACpDC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,gBAAgB;MAACC,cAAcC;;IAC/BC,UAAUC;EACZ,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOO;IACpBF,UAAU,MAAMG,YAAYC,aAAaC,cAAcC,YAAAA;EACzD,CAAA;EACAd,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOY;IACpBP,UAAU,MACRG,YAAYC,aAAaI,UAAU;MACjCf,IAAIgB;MACJC,UAAU;QACRC,OAAO,CAAC,EAAEC,KAAI,GAAcC,SAAAA;AAC1B,kBAAQA,MAAAA;YACN,KAAK;AACH,qBAAOD;YACT,KAAK;AACH,qBAAOA,KAAKE;YACd,KAAK;AACH,qBAAO;gBAAErB,IAAI,GAAGmB,KAAKnB,EAAE;gBAASsB,QAAQH,KAAKE;cAAK;UACtD;QACF;MACF;IACF,CAAA;EACJ,CAAA;EACAtB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAasB,MAAMrB,QAAOsB,iBAAiBtB,QAAOuB,eAAevB,QAAOC,aAAaE,cAAcC,UAAU;IAC7GC,UAAU,OAAOmB,YAAAA;AACf,YAAMC,SAASD,QAAQE,cAAcjB,aAAakB,MAAM;AACxD,YAAM,EAAEC,iBAAiBC,SAAQ,IAAKL,QAAQE,cAAcjB,aAAaqB,gBAAgB;AACzF,YAAM,EAAEC,MAAK,IAAKP,QAAQE,cAAcjB,aAAauB,QAAQ;AAC7D,UAAIH,YAAYJ,OAAOQ,OAAOC,WAAW,GAAG;AAG1C,aAAKH,MACFI,YAAY;UAAEC,QAAQX,OAAOQ,OAAO,CAAA;QAAG,GAAG;UAAEI,SAAS;QAAO,CAAA,EAC5DC,KAAK,MAAMT,SAASU,aAAaC,aAAaC,QAAQ;UAAEC,MAAM;UAAcC,SAASlB,OAAOQ,OAAO,CAAA;QAAG,CAAA,CAAA,CAAA,EACtGW,MAAM,MAAA;QAAO,CAAA;MAClB;AAEA,aAAO,CAAA;IACT;EACF,CAAA;EACA/C,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOuB;IACpBlB,UAAUwC;EACZ,CAAA;EACAhD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAO8C;IACpBzC,UAAU0C;EACZ,CAAA;EACAlD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOgD;IACpB3C,UAAU4C;EACZ,CAAA;EACApD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOkD;IACpB7C,UAAU8C;EACZ,CAAA;CACD;",
|
|
6
|
+
"names": ["Events", "NavTreeEvents", "StateReady", "Events", "createStateEvent", "meta", "id", "Capabilities", "Events", "LayoutAction", "allOf", "contributes", "createIntent", "defineModule", "definePlugin", "translations", "meta", "id", "NavTreePlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "LayoutReady", "activatesAfter", "NavTreeEvents", "StateReady", "activate", "State", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "NODE_TYPE", "metadata", "parse", "item", "type", "data", "object", "allOf", "DispatcherReady", "AppGraphReady", "context", "layout", "getCapability", "Layout", "dispatchPromise", "dispatch", "IntentDispatcher", "graph", "AppGraph", "active", "length", "waitForPath", "target", "timeout", "then", "createIntent", "LayoutAction", "Expose", "part", "subject", "catch", "Keyboard", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
|
|
7
7
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NavTreeCapabilities
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-LPAREX6J.mjs";
|
|
4
|
+
import "./chunk-ZENLR72O.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/intent-resolver.ts
|
|
7
|
-
import
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
8
|
import { Capabilities, LayoutAction, contributes, createResolver } from "@dxos/app-framework";
|
|
9
9
|
import { log } from "@dxos/log";
|
|
10
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({
|
|
11
|
+
var intent_resolver_default = ((context) => contributes(Capabilities.IntentResolver, createResolver({
|
|
12
12
|
intent: LayoutAction.UpdateLayout,
|
|
13
13
|
filter: (data) => Schema.is(LayoutAction.Expose.fields.input)(data),
|
|
14
14
|
resolve: async ({ subject }) => {
|
|
@@ -40,8 +40,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
}));
|
|
43
|
+
})));
|
|
44
44
|
export {
|
|
45
45
|
intent_resolver_default as default
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=intent-resolver-
|
|
47
|
+
//# sourceMappingURL=intent-resolver-TCQXGF6U.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capabilities, LayoutAction, type PluginContext, contributes, createResolver } 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,YAAYA,YAAY;AAExB,SAASC,cAAcC,cAAkCC,aAAaC,sBAAsB;AAC5F,SAASC,WAAW;;AAIpB,IAAA,2BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,QAAQ,CAACC,SACAC,UAAGJ,aAAaK,OAAOC,OAAOC,KAAK,EAAEJ,IAAAA;EAC9CK,SAAS,OAAO,EAAEC,QAAO,MAAE;AACzB,UAAM,EAAEC,MAAK,IAAKhB,QAAQiB,cAAcf,aAAagB,QAAQ;AAC7D,UAAM,EAAEC,SAASC,QAAO,IAAKpB,QAAQiB,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", "Capabilities", "LayoutAction", "contributes", "createResolver", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "LayoutAction", "UpdateLayout", "filter", "data", "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,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
KEY_BINDING
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ZENLR72O.mjs";
|
|
4
4
|
|
|
5
5
|
// src/capabilities/keyboard.ts
|
|
6
6
|
import { Capabilities as AppCapabilities, contributes } from "@dxos/app-framework";
|
|
@@ -8,7 +8,7 @@ import { debounce } from "@dxos/async";
|
|
|
8
8
|
import { Keyboard } from "@dxos/keyboard";
|
|
9
9
|
import { isAction } from "@dxos/plugin-graph";
|
|
10
10
|
import { getHostPlatform } from "@dxos/util";
|
|
11
|
-
var keyboard_default = (context) => {
|
|
11
|
+
var keyboard_default = ((context) => {
|
|
12
12
|
const { graph } = context.getCapability(AppCapabilities.AppGraph);
|
|
13
13
|
const visitor = (node, path) => {
|
|
14
14
|
let shortcut;
|
|
@@ -44,8 +44,8 @@ var keyboard_default = (context) => {
|
|
|
44
44
|
unsubscribe();
|
|
45
45
|
Keyboard.singleton.destroy();
|
|
46
46
|
});
|
|
47
|
-
};
|
|
47
|
+
});
|
|
48
48
|
export {
|
|
49
49
|
keyboard_default as default
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=keyboard-
|
|
51
|
+
//# sourceMappingURL=keyboard-AHSAWKXA.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/capabilities/keyboard.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities as AppCapabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { Keyboard } from '@dxos/keyboard';\nimport { type Node, isAction } 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,iBAAqCC,mBAAmB;AACjF,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAAoBC,gBAAgB;AACpC,SAASC,uBAAuB;AAIhC,IAAA,
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,gBAAgBC,iBAAqCC,mBAAmB;AACjF,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAAoBC,gBAAgB;AACpC,SAASC,uBAAuB;AAIhC,IAAA,oBAAe,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
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
7
|
}
|