@dxos/plugin-navtree 0.6.14-staging.e15392e → 0.7.0
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 +47 -37
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/components/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeFooter.d.ts.map +1 -1
- package/package.json +28 -28
- package/src/NavTreePlugin.tsx +21 -18
- package/src/components/CommandsTrigger.tsx +1 -1
- package/src/components/NavBarStart.tsx +3 -3
- package/src/components/NavTree.stories.tsx +0 -1
- package/src/components/NavTree.tsx +0 -1
- package/src/components/NavTreeContainer.tsx +5 -1
- package/src/components/NavTreeFooter.tsx +13 -10
- package/src/types.ts +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/NavTreePlugin.tsx", "../../../src/components/CommandsDialog.tsx", "../../../src/components/NavBarStart.tsx", "../../../src/components/NavTree.tsx", "../../../src/components/NavTreeItemAction.tsx", "../../../src/components/NavTreeContainer.tsx", "../../../src/components/NavTreeFooter.tsx", "../../../src/util.ts", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/NotchStart.tsx", "../../../src/components/HaloButton.tsx", "../../../src/components/CommandsTrigger.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type GraphBuilderProvides,\n resolvePlugin,\n type MetadataRecordsProvides,\n type PluginDefinition,\n type SurfaceProvides,\n type TranslationsProvides,\n type Plugin,\n type IntentResolverProvides,\n parseIntentPlugin,\n LayoutAction,\n type GraphProvides,\n parseGraphPlugin,\n NavigationAction,\n} from '@dxos/app-framework';\nimport { createExtension, type Graph, isAction, isGraphNode, type Node, type NodeFilter } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport { Keyboard } from '@dxos/keyboard';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { getHostPlatform } from '@dxos/util';\n\nimport {\n CommandsDialogContent,\n NODE_TYPE,\n NavBarStart,\n NavTreeContainer,\n NavTreeDocumentTitle,\n NotchStart,\n} from './components';\nimport { CommandsTrigger } from './components/CommandsTrigger';\nimport meta, { KEY_BINDING, NAVTREE_PLUGIN } from './meta';\nimport translations from './translations';\nimport { type NavTreeItem } from './types';\nimport {\n expandOpenGraphNodes,\n getActions,\n getChildren,\n treeItemsFromRootNode,\n type NavTreeItemGraphNode,\n} from './util';\n\nexport type NavTreePluginProvides = SurfaceProvides &\n MetadataRecordsProvides &\n GraphBuilderProvides &\n TranslationsProvides &\n IntentResolverProvides;\n\ntype NavTreeState = {\n root?: NavTreeItemGraphNode;\n flatTree: NavTreeItem[];\n open: string[];\n};\n\nexport const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let graph: Graph | undefined;\n const itemCache = new Map<string, NavTreeItem>();\n\n const state = new LocalStorageStore<NavTreeState>('dxos.org/settings/navtree', {\n root: undefined,\n get flatTree() {\n if (!this.root || !graph) {\n return [];\n }\n\n return treeItemsFromRootNode(graph, this.root, this.open, getItem);\n },\n // TODO(thure): Do this dynamically.\n open: ['root', 'root~dxos.org/plugin/space-spaces', 'root~dxos.org/plugin/files'],\n });\n\n const getItem = (node: NavTreeItemGraphNode, parent: readonly string[], filter?: NodeFilter) => {\n invariant(graph);\n const path = [...parent, node.id];\n const { actions, groupedActions } = getActions(graph, node);\n const children = getChildren(graph, node, filter, path);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n const item = {\n id: node.id,\n label: node.properties.label ?? node.id,\n icon: node.properties.icon,\n disabled: node.properties.disabled,\n testId: node.properties.testId,\n className: node.properties.className,\n headingClassName: node.properties.headingClassName,\n path,\n parentOf,\n node,\n actions,\n groupedActions,\n } satisfies NavTreeItem;\n\n const cachedItem = itemCache.get(node.id);\n // TODO(wittjosiah): This is not a good enough check.\n // Consider better ways to doing reactive transformations which retain referential equality.\n if (cachedItem && JSON.stringify(item) === JSON.stringify(cachedItem)) {\n return cachedItem;\n } else {\n itemCache.set(node.id, item);\n return item;\n }\n };\n\n const handleOpenChange = (item: NavTreeItem, open: boolean) => {\n const path = Path.create(...item.path);\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n if (open) {\n state.values.open.push(path);\n } else {\n const index = state.values.open.indexOf(path);\n if (index > -1) {\n state.values.open.splice(index, 1);\n }\n }\n\n if (graph) {\n void expandOpenGraphNodes(graph, state.values.open);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n graph = graphPlugin?.provides.graph;\n if (!graph) {\n return;\n }\n\n state.values.root = graph.root as NavTreeItemGraphNode;\n getChildren(graph, state.values.root);\n getActions(graph, state.values.root);\n\n state.prop({ key: 'open', type: LocalStorageStore.json<string[]>() });\n\n void expandOpenGraphNodes(graph, state.values.open);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n graph.subscribeTraverse({\n visitor: (node, path) => {\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({ node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n },\n });\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graphPlugin?.provides.graph.root.id);\n },\n unload: async () => {\n Keyboard.singleton.destroy();\n },\n provides: {\n metadata: {\n records: {\n [NODE_TYPE]: {\n parse: (item: NavTreeItem, type: string) => {\n switch (type) {\n case 'node':\n return item.node;\n case 'object':\n return item.node.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.node.data };\n }\n },\n },\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (data.component) {\n case `${NAVTREE_PLUGIN}/Commands`: {\n const selected = typeof data.subject === 'string' ? data.subject : undefined;\n return <CommandsDialogContent selected={selected} />;\n }\n }\n\n switch (role) {\n case 'navigation':\n return (\n <NavTreeContainer\n items={state.values.flatTree}\n current={data.activeIds as string[]}\n open={state.values.open}\n onOpenChange={handleOpenChange}\n popoverAnchorId={data.popoverAnchorId as string}\n />\n );\n\n case 'document-title': {\n return <NavTreeDocumentTitle node={isGraphNode(data.activeNode) ? data.activeNode : undefined} />;\n }\n\n case 'navbar-start': {\n if (state.values.root && data.activeNode) {\n return {\n node: (\n <NavBarStart\n activeNode={data.activeNode as Node}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n />\n ),\n disposition: 'hoist',\n };\n }\n break;\n }\n\n case 'notch-start':\n return <NotchStart />;\n\n case 'search-input':\n return {\n node: <CommandsTrigger />,\n disposition: 'fallback',\n };\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case NavigationAction.EXPOSE: {\n if (graph && intent.data?.id) {\n const path = graph.getPath({ target: intent.data.id });\n if (Array.isArray(path)) {\n const additionalOpenItems = [...Array(path.length)].reduce((acc: string[], _, index) => {\n const itemId = Path.create(...path.slice(0, index));\n if (itemId.length > 0) {\n acc.push(itemId);\n }\n return acc;\n }, []);\n state.values.open.push(...additionalOpenItems);\n }\n }\n break;\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n // TODO(burdon): Move to separate plugin (for keys and command k). Move bindings from LayoutPlugin.\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return [\n createExtension({\n id: NAVTREE_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: 'dxos.org/plugin/navtree/open-commands',\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${NAVTREE_PLUGIN}/Commands`,\n dialogBlockAlign: 'start',\n },\n });\n },\n properties: {\n label: ['open commands label', { ns: NAVTREE_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ],\n }),\n ];\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\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 dispatch = useIntentDispatcher();\n const { graph } = useGraph();\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 // console.log(JSON.stringify(actions, undefined, 2));\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const actions = isActionGroup(group) ? graph.actions(group) : allActions;\n\n return (\n <Dialog.Content classNames={['md:max-is-[30rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{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='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input placeholder={t('command list input placeholder')} classNames='px-1 my-2' />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\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({ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } });\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ 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 <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Fragment } from 'react';\n\nimport { getGraph, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../meta';\n\nconst TREE_ITEM_MAIN_HEADING = 'TreeItemMainHeading';\n\nexport const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node; popoverAnchorId?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const ActionRoot =\n popoverAnchorId === `dxos.org/ui/${TREE_ITEM_MAIN_HEADING}/${activeNode.id}` ||\n popoverAnchorId === `dxos.org/ui/${KEY_BINDING}/${activeNode.id}`\n ? Popover.Anchor\n : Fragment;\n\n const graph = getGraph(activeNode);\n const actions = graph.actions(activeNode);\n const label = toLocalizedString(activeNode.properties?.label, t);\n\n const menuTriggerLabel = t('node actions menu invoker label');\n\n return (\n <>\n <ActionRoot>\n <PlankHeading.ActionsMenu\n icon={activeNode.properties?.icon ?? 'ph--dots-three-vertical--regular'}\n attendableId={activeNode.id}\n triggerLabel={menuTriggerLabel}\n actions={[actions]}\n onAction={(action) =>\n typeof action.data === 'function' && action.data({ node: action as Node, caller: TREE_ITEM_MAIN_HEADING })\n }\n />\n </ActionRoot>\n <PlankHeading.Label attendableId={activeNode.id}>{label}</PlankHeading.Label>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, useCallback, useEffect, type FC } from 'react';\n\nimport { isAction, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, Treegrid, useTranslation } from '@dxos/react-ui';\nimport { Tree, type TreeProps } from '@dxos/react-ui-list';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItem } from '../types';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Omit<TreeProps<NavTreeItem>, 'draggable' | 'gridTemplateColumns' | 'renderColumns'> &\n Pick<NavTreeColumnsProps, 'loadDescendents' | 'renderPresence' | 'popoverAnchorId'>;\n\nexport const NavTree = ({ loadDescendents, renderPresence, popoverAnchorId, ...props }: NavTreeProps) => {\n const renderColumns = useCallback<NonNullable<TreeProps<NavTreeItem>['renderColumns']>>(\n ({ item, menuOpen, setMenuOpen }) => {\n return (\n <NavTreeColumns\n item={item}\n menuOpen={menuOpen}\n setMenuOpen={setMenuOpen}\n loadDescendents={loadDescendents}\n renderPresence={renderPresence}\n popoverAnchorId={popoverAnchorId}\n />\n );\n },\n [renderPresence, popoverAnchorId, loadDescendents],\n );\n\n return (\n <Tree<NavTreeItem>\n {...props}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n classNames='pbs-1'\n renderColumns={renderColumns}\n />\n );\n};\n\ntype NavTreeColumnsProps = {\n item: NavTreeItem;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n loadDescendents?: (node: Node) => MaybePromise<void>;\n renderPresence?: FC<{ item: NavTreeItem }>;\n popoverAnchorId?: string;\n};\n\nconst NavTreeColumns = ({\n item,\n menuOpen,\n setMenuOpen,\n loadDescendents,\n renderPresence: Presence,\n popoverAnchorId,\n}: NavTreeColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const level = item.path.length - 2;\n\n const [primaryAction, ...secondaryActions] = item.actions.toSorted((a, b) =>\n a.properties?.disposition === 'toolbar' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'toolbar' ? secondaryActions : item.actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((action) => !action.properties?.hidden);\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n // TODO(thure): Ideally this should not be necessary.\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n void loadDescendents?.(item.node);\n if (primaryAction && !isAction(primaryAction)) {\n void loadDescendents?.(primaryAction);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [primaryAction]);\n\n return (\n <>\n {primaryAction?.properties?.disposition === 'toolbar' ? (\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.node}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : item.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.node}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n menuOpen={menuOpen}\n onChangeMenuOpen={setMenuOpen}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {Presence && <Presence item={item} />}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MutableRefObject, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { type Action, type ActionLike, type Node } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport {\n Button,\n Dialog,\n DropdownMenu,\n ContextMenu,\n Tooltip,\n useTranslation,\n toLocalizedString,\n Icon,\n} from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { descriptionText, hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\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 suppressNextTooltip?: MutableRefObject<boolean>;\n menuOpen?: boolean;\n defaultMenuOpen?: boolean;\n onChangeMenuOpen?: (nextOpen: boolean) => void;\n onAction?: (action: Action) => void;\n};\n\nconst getShortcut = (action: ActionLike) => {\n return typeof action.properties?.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties?.keyBinding?.[getHostPlatform()];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nexport const NavTreeItemActionDropdownMenu = ({\n label,\n icon,\n testId,\n defaultMenuOpen,\n menuActions,\n menuOpen,\n suppressNextTooltip,\n onChangeMenuOpen,\n onAction,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: menuOpen,\n defaultProp: defaultMenuOpen,\n onChange: onChangeMenuOpen,\n });\n\n return (\n <DropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n aria-label={t('tree item actions label')}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <DropdownMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties!.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </DropdownMenu.Item>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n\nexport const NavTreeItemActionContextMenu = (\n props: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>,\n) => {\n return (props.menuActions?.length ?? 0) > 0 ? <NavTreeItemActionContextMenuImpl {...props} /> : <>{props.children}</>;\n};\n\nconst NavTreeItemActionContextMenuImpl = ({\n menuActions,\n onAction,\n children,\n}: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <ContextMenu.Root>\n <ContextMenu.Trigger asChild>{children}</ContextMenu.Trigger>\n <ContextMenu.Portal>\n <ContextMenu.Content classNames='z-[31]'>\n <ContextMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <ContextMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </ContextMenu.Item>\n );\n })}\n </ContextMenu.Viewport>\n <ContextMenu.Arrow />\n </ContextMenu.Content>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n};\n\nexport const NavTreeItemActionSearchList = ({\n menuActions,\n icon,\n label,\n testId,\n suppressNextTooltip,\n onAction,\n}: Pick<\n NavTreeItemActionMenuProps,\n 'icon' | 'menuActions' | 'testId' | 'label' | 'onAction' | 'suppressNextTooltip'\n>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n const button = useRef<HTMLButtonElement | null>(null);\n\n // TODO(burdon): Optionally sort.\n const sortedActions = menuActions?.sort(({ properties: p1 }, { properties: p2 }) => {\n const t1 = toLocalizedString(p1!.label, t).toLowerCase();\n const t2 = toLocalizedString(p2!.label, t).toLowerCase();\n return t1.localeCompare(t2);\n });\n\n // TODO(thure): Use LayoutPlugin’s global Dialog.\n return (\n <Dialog.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <Dialog.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n onKeyDownCapture={(event) => {\n // TODO(thure): Why is only this `Button` affected and not `DropdownMenu.Trigger`’s?\n if (button.current && button.current === event.target) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Capture this event and stop propagation to the drag start handler.\n event.stopPropagation();\n setOptionsMenuOpen(true);\n break;\n default:\n }\n }\n }}\n ref={button}\n >\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Dialog.Trigger>\n </Tooltip.Trigger>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content classNames='z-[31] is-full max-is-[24rem] pli-2 plb-1'>\n <SearchList.Root label={t('tree item searchlist input placeholder')}>\n <SearchList.Input placeholder={t('tree item searchlist input placeholder')} classNames='pli-3' />\n <SearchList.Content classNames='min-bs-[12rem] bs-[50dvh] max-bs-[30rem] overflow-auto'>\n {sortedActions?.map((action) => {\n const label = toLocalizedString(action.properties!.label, t);\n const shortcut = getShortcut(action);\n return (\n <SearchList.Item\n // TODO(burdon): Value should be id since label is not unique.\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties?.disabled) {\n return;\n }\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='flex items-center gap-2 pli-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{label}</span>\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n <div role='none' className='flex items-center plb-2 pli-3'>\n <span className={descriptionText}>{toLocalizedString(label, t)}</span>\n </div>\n </SearchList.Root>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, label, icon } = { label: 'never' },\n data: invoke,\n}: Action & { parent: Node; onAction?: (action: Action) => void }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { node: parent, caller } : { node: parent });\n }}\n data-testid={testId}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Tooltip.Trigger>\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const suppressNextTooltip = useRef<boolean>(false);\n const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return (\n <Tooltip.Root\n open={triggerTooltipOpen}\n onOpenChange={(nextOpen) => {\n if (suppressNextTooltip.current) {\n setTriggerTooltipOpen(false);\n suppressNextTooltip.current = false;\n } else {\n setTriggerTooltipOpen(nextOpen);\n }\n }}\n >\n {baseLabel && (\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[31]' side='bottom'>\n {baseLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n )}\n {monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction parent={node} {...menuActions[0]} />\n ) : props.menuType === 'searchList' ? (\n <NavTreeItemActionSearchList\n {...props}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n ) : (\n <NavTreeItemActionDropdownMenu\n {...props}\n parent={node}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n )}\n </Tooltip.Root>\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 React, { useCallback, useEffect } from 'react';\n\nimport { NavigationAction, Surface, useIntentDispatcher } from '@dxos/app-framework';\nimport { isAction, isActionLike, type Node } from '@dxos/app-graph';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { isEchoObject, isSpace } from '@dxos/react-client/echo';\nimport { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { isItem } from '@dxos/react-ui-list';\nimport { arrayMove } from '@dxos/util';\n\nimport { NAV_TREE_ITEM, NavTree, type NavTreeProps } from './NavTree';\nimport { NavTreeFooter } from './NavTreeFooter';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItem } from '../types';\nimport {\n expandActions,\n expandChildren,\n getChildren,\n getParent,\n resolveMigrationOperation,\n type NavTreeItemGraphNode,\n} from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderPresence = ({ item }: { item: NavTreeItem }) => (\n <Surface role='presence--glyph' data={{ object: item.node.data, id: item.node.id }} />\n);\n\nexport type NavTreeContainerProps = {\n items: NavTreeItem[];\n current: string[];\n open: string[];\n popoverAnchorId?: string;\n} & Pick<NavTreeProps, 'onOpenChange'>;\n\nexport const NavTreeContainer = ({ items, current, open, popoverAnchorId, ...props }: NavTreeContainerProps) => {\n const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const dispatch = useIntentDispatcher();\n const { graph } = useGraph();\n\n const loadDescendents = useCallback(\n (node: Node) => {\n void expandActions(graph, node);\n if (!isActionLike(node)) {\n void expandChildren(graph, node).then(() =>\n // Load one level deeper, which resolves some juddering observed on open/close.\n Promise.all(\n getChildren(graph, node).flatMap((child) => [expandActions(graph, child), expandChildren(graph, child)]),\n ),\n );\n }\n },\n [graph],\n );\n\n const canDrop = useCallback((source: NavTreeItem, target: NavTreeItem) => {\n if (isSpace(target.node.data)) {\n // TODO(wittjosiah): Find a way to only allow space as source for rearranging.\n return isEchoObject(source.node.data) || isSpace(source.node.data);\n } else if (isEchoObject(target.node.data)) {\n return isEchoObject(source.node.data);\n } else {\n return false;\n }\n }, []);\n\n const handleSelect = useCallback(\n ({ node, actions, path }: NavTreeItem) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parentId] = path.slice(1);\n const parent = items.find(({ id }) => id === parentId)?.node;\n void (parent && node.data({ node: parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n // TODO(thure): Refactor opening related planks (comments in this case) to a generalized approach.\n void dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: {\n main: [node.id],\n },\n },\n });\n\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n closeNavigationSidebar();\n }\n },\n [items, dispatch, isLg, closeNavigationSidebar],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isItem(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\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.node as NavTreeItemGraphNode;\n const targetNode = target.data.node as NavTreeItemGraphNode;\n\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n\n const nextItems = instruction.type.startsWith('reorder')\n ? items.filter((item) => item.path.slice(0, -1).join() === targetPath.slice(0, -1).join())\n : items.filter((item) => item.path.slice(0, -1).join() === targetPath.join());\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\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n\n const sourceIndex = nextItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = nextItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? nextItems.length > 0\n ? nextItems.length - 1\n : 0\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n\n switch (operation) {\n case 'rearrange': {\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems.map((item) => item.node.data));\n break;\n }\n\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\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\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [items]);\n\n return (\n <ElevationProvider elevation='chrome'>\n <div\n role='none'\n className='bs-full overflow-hidden row-span-3 grid grid-cols-1 grid-rows-[min-content_1fr_min-content]'\n >\n <Surface role='search-input' limit={1} />\n\n {/* TODO(thure): What gives this an inline `overflow: initial`? */}\n <div role='none' className='!overflow-y-auto'>\n <NavTree\n items={items}\n open={open}\n current={current}\n loadDescendents={loadDescendents}\n renderPresence={renderPresence}\n popoverAnchorId={popoverAnchorId}\n canDrop={canDrop}\n onSelect={handleSelect}\n {...props}\n />\n </div>\n\n <NavTreeFooter />\n </div>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowSquareOut, GearSix, Warning } from '@phosphor-icons/react';\nimport { formatDistance } from 'date-fns/formatDistance';\nimport React from 'react';\n\nimport {\n SettingsAction,\n useResolvePlugin,\n parseNavigationPlugin,\n useIntentDispatcher,\n type LayoutPart,\n} from '@dxos/app-framework';\nimport { useConfig } from '@dxos/react-client';\nimport {\n Button,\n Tooltip,\n Popover,\n useSidebars,\n useTranslation,\n Link,\n Message,\n Trans,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst buttonStyles = 'pli-1.5 text-xs font-normal';\n\nconst repo = 'https://github.com/dxos/dxos';\n\nexport const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {\n const layoutPart = useDefaultValue(props.layoutPart, () => 'sidebar');\n const config = useConfig();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const { version, timestamp, commitHash } = config.values.runtime?.app?.build ?? {};\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n\n const releaseUrl =\n config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production'\n ? `${repo}/releases/tag/v${version}`\n : `${repo}/commit/${commitHash}`;\n\n const previewUrl = 'https://docs.dxos.org/composer#technology-preview';\n\n return (\n <div\n role='none'\n className={mx(\n 'bs-[--rail-size] pbe-[env(safe-area-inset-bottom)] box-content border-separator border-bs pli-1 flex justify-end',\n layoutPart === 'complementary' && 'md:justify-end flex-row-reverse',\n )}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames={buttonStyles} {...(!navigationSidebarOpen && { tabIndex: -1 })}>\n v{version}\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='top'\n role='message'\n classNames='z-[12] bg-warning-500 max-is-[min(calc(100vw-16px),40ch)]'\n >\n <Message.Root valence='warning' className='rounded-be-none p-5'>\n <Message.Title>\n <Warning weight='duotone' className='inline mie-2 is-6 bs-6' />\n <span>{t('warning title')}</span>\n </Message.Title>\n <Message.Body>\n {t('technology preview message')}\n <br />\n <Link href={previewUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('learn more label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </Message.Body>\n </Message.Root>\n <div role='none' className='plb-4 pli-5 space-b-2 text-baseText'>\n {timestamp && (\n <p>\n {t('released message', {\n released: formatDistance(new Date(timestamp), new Date(), { addSuffix: true }),\n })}\n <br />\n <Link href={releaseUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('see release label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </p>\n )}\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'powered by dxos message',\n components: {\n dxos: <Link href='https://dxos.org' target='_blank' rel='noreferrer' variant='neutral' />,\n },\n }}\n />\n </p>\n </div>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(burdon): Reconcile with action created by LayoutPlugin. */}\n <Button\n variant='ghost'\n classNames={buttonStyles}\n data-testid='treeView.openSettings'\n data-joyride='welcome/settings'\n {...(!navigationSidebarOpen && { tabIndex: -1 })}\n onClick={() => dispatch({ action: SettingsAction.OPEN })}\n >\n <span className='sr-only'>{t('open settings label')}</span>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[12]'>\n {t('open settings label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {/* NOTE(thure): Unpinning from the NavTree’s default position in Deck is temporarily disabled. */}\n {navigationPlugin?.meta.id === 'dxos.org/plugin/deck' && (\n <PlankHeading.Controls\n variant='hide-disabled'\n capabilities={{\n incrementStart: false,\n incrementEnd: false,\n }}\n onClick={(_type) => {\n // TODO(Zan): If we inmplement pinning again, we should dispatch here.\n }}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n} from '@dxos/app-graph';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { type MaybePromise, nonNullable } from '@dxos/util';\n\nimport { type NodeProperties, type NavTreeItem } from './types';\n\nexport type NavTreeItemGraphNode = Node<\n any,\n Partial<\n NodeProperties & {\n persistenceClass: string;\n persistenceKey: string;\n acceptPersistenceClass: Set<string>;\n acceptPersistenceKey: Set<string>;\n onRearrangeChildren: (nextOrder: NavTreeItemGraphNode[]) => MaybePromise<void>;\n onCopy: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferStart: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferEnd: (activeNode: NavTreeItemGraphNode, destinationParent: NavTreeItemGraphNode) => MaybePromise<void>;\n }\n >\n>;\n\nexport const getParent = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.nodes(node, { relation: 'inbound' }).find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: Graph,\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: Graph,\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 === 'toolbar') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getTreeItemNode = (treeItems: NavTreeItem[], path?: string[]): NavTreeItem | undefined => {\n if (!path) {\n return undefined;\n }\n\n return treeItems.find((treeItem) => {\n return treeItem.path && !treeItem.path.find((id, index) => path[index] !== id);\n });\n};\n\nexport const getChildren = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n filter?: NodeFilter,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .nodes(node, { relation: 'outbound', filter })\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(nonNullable) as NavTreeItemGraphNode[];\n};\n\ntype FlattenedActions = Required<Pick<NavTreeItem, 'actions' | 'groupedActions'>>;\n\nexport const getActions = (graph: Graph, node: Node): FlattenedActions => {\n return graph.actions(node).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.actions(arg);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n );\n};\n\nexport const expandChildrenAndActions = (graph: Graph, node: Node) => {\n return Promise.all([expandChildren(graph, node), expandActions(graph, node)]);\n};\n\nexport const expandChildren = (graph: Graph, node: Node) => {\n return graph.expand(node, 'outbound');\n};\n\nexport const expandActions = (graph: Graph, node: Node) => {\n return Promise.all([graph.expand(node, 'outbound', ACTION_TYPE), graph.expand(node, 'outbound', ACTION_GROUP_TYPE)]);\n};\n\nfunction* navTreeItemVisitor({\n graph,\n node,\n open,\n getItem,\n path = [],\n filter,\n}: {\n graph: Graph;\n node: NavTreeItemGraphNode;\n open: string[];\n getItem: (node: NavTreeItemGraphNode, parent: readonly string[], filter?: NodeFilter) => NavTreeItem;\n path?: readonly string[];\n filter?: NodeFilter;\n}): Generator<NavTreeItem> {\n const stack: NavTreeItem[] = [getItem(node, path, filter)];\n while (stack.length > 0) {\n const nextItem = stack.pop()!;\n if (nextItem.path.length > 1) {\n yield nextItem;\n }\n const { node, path } = nextItem;\n const children = getChildren(graph, node, filter, path);\n const actions = graph.actions(node);\n if (path.length === 1 || open.includes(Path.create(...path))) {\n for (let i = actions.length - 1; i >= 0; i--) {\n if (actions[i].properties.disposition === 'item') {\n stack.push(getItem(actions[i], path, filter));\n }\n }\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i] as NavTreeItemGraphNode;\n stack.push(getItem(child, path, filter));\n }\n }\n }\n}\n\n/**\n * Get a reactive tree node from a graph node.\n */\nexport const treeItemsFromRootNode = (\n graph: Graph,\n rootNode: NavTreeItemGraphNode,\n open: string[],\n getItem: (node: NavTreeItemGraphNode, parent: readonly string[]) => NavTreeItem,\n path?: readonly string[],\n filter?: NodeFilter,\n): NavTreeItem[] => {\n return Array.from(navTreeItemVisitor({ graph, node: rootNode, open, getItem, path, filter }));\n};\n\nexport const expandOpenGraphNodes = (graph: Graph, open: string[]) => {\n return Promise.all(\n open\n .map((id) => {\n const node = graph.findNode(Path.last(id));\n return node && expandChildrenAndActions(graph, node as NavTreeItemGraphNode);\n })\n .filter(nonNullable),\n );\n};\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 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher, useResolvePlugin } from '@dxos/app-framework';\nimport { ClientAction } from '@dxos/plugin-client/meta';\nimport { parseObservabilityPlugin } from '@dxos/plugin-observability';\nimport { useIdentity } from '@dxos/react-client/halo';\n\nimport { HaloButton } from './HaloButton';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin (ClientPlugin?).\nexport const NotchStart = () => {\n const identity = useIdentity();\n const observabilityPlugin = useResolvePlugin(parseObservabilityPlugin);\n const dispatch = useIntentDispatcher();\n return (\n <HaloButton\n size={8}\n identityKey={identity?.identityKey.toHex()}\n hue={identity?.profile?.data?.hue}\n emoji={identity?.profile?.data?.emoji}\n internal={observabilityPlugin?.provides?.observability?.group === 'dxos'}\n onClick={() => dispatch({ action: ClientAction.SHARE_IDENTITY })}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ConnectionState, useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Avatar, type Size } from '@dxos/react-ui';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nconst INTERNAL = 'https://avatars.githubusercontent.com/u/57182821';\n\nexport type HaloButtonProps = {\n size?: Size;\n identityKey?: string;\n hue?: string;\n emoji?: string;\n internal?: boolean;\n onClick?: () => void;\n};\n\nexport const HaloButton = (props: HaloButtonProps) => {\n const { onClick, identityKey, internal, size = 8 } = props;\n const fallbackValue = hexToFallback(identityKey ?? '0');\n const { swarm: connectionState } = useNetworkStatus();\n return (\n <button className={mx(focusRing, 'rounded grid place-items-center')} onClick={onClick}>\n <Avatar.Root\n size={size}\n variant='circle'\n status={connectionState === ConnectionState.OFFLINE ? 'error' : internal ? 'internal' : 'active'}\n hue={props.hue || fallbackValue.hue}\n >\n <Avatar.Frame data-testid='treeView.haloButton' data-joyride='welcome/halo'>\n {internal ? <Avatar.Image href={INTERNAL} /> : <Avatar.Fallback text={props.emoji || fallbackValue.emoji} />}\n </Avatar.Frame>\n </Avatar.Root>\n </button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatch } = useIntent();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='pis-3 pie-2 gap-2 mli-1 mbs-1 min-bs-0 bs-[--rail-action] justify-start'\n onClick={() =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', component: `${NAVTREE_PLUGIN}/Commands`, dialogBlockAlign: 'start' },\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 { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\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 'warning title': 'WARNING',\n 'technology preview message': 'Composer is still in technology preview.',\n 'learn more label': 'Learn more',\n 'released message': 'This version released {{released}}.',\n 'see release label': 'See release on GitHub',\n 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',\n 'tree item actions label': 'More actions',\n 'tree item searchlist input placeholder': 'Search for actions…',\n 'empty branch message': ' ',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NavTreePlugin } from './NavTreePlugin';\n\nexport default NavTreePlugin;\n\nexport * from './NavTreePlugin';\nexport * from './util';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "resolvePlugin", "parseIntentPlugin", "LayoutAction", "parseGraphPlugin", "NavigationAction", "createExtension", "isAction", "isGraphNode", "invariant", "Keyboard", "LocalStorageStore", "Path", "getHostPlatform", "React", "useMemo", "useState", "useIntentDispatcher", "LayoutAction", "isActionGroup", "isAction", "Keyboard", "keySymbols", "useGraph", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatch", "useIntentDispatcher", "graph", "useGraph", "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", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "setTimeout", "nodes", "relation", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "React", "Fragment", "getGraph", "Popover", "toLocalizedString", "useTranslation", "PlankHeading", "TREE_ITEM_MAIN_HEADING", "NavBarStart", "activeNode", "popoverAnchorId", "t", "useTranslation", "NAVTREE_PLUGIN", "ActionRoot", "id", "KEY_BINDING", "Popover", "Anchor", "Fragment", "graph", "getGraph", "actions", "label", "toLocalizedString", "properties", "menuTriggerLabel", "React", "PlankHeading", "ActionsMenu", "icon", "attendableId", "triggerLabel", "onAction", "action", "data", "node", "caller", "Label", "React", "Fragment", "useCallback", "useEffect", "isAction", "Popover", "toLocalizedString", "Treegrid", "useTranslation", "Tree", "useControllableState", "React", "useRef", "useState", "keySymbols", "Button", "Dialog", "DropdownMenu", "ContextMenu", "Tooltip", "useTranslation", "toLocalizedString", "Icon", "SearchList", "descriptionText", "hoverableControlItem", "hoverableOpenControlItem", "mx", "getHostPlatform", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "fallbackIcon", "NavTreeItemActionDropdownMenu", "label", "icon", "testId", "defaultMenuOpen", "menuActions", "menuOpen", "suppressNextTooltip", "onChangeMenuOpen", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "React", "DropdownMenu", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "aria-label", "span", "className", "toLocalizedString", "Icon", "size", "Portal", "Content", "Viewport", "map", "shortcut", "Item", "key", "id", "onClick", "event", "disabled", "stopPropagation", "descriptionText", "keySymbols", "join", "Arrow", "NavTreeItemActionSearchList", "menuActions", "icon", "label", "testId", "suppressNextTooltip", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useState", "button", "useRef", "sortedActions", "sort", "properties", "p1", "p2", "t1", "toLocalizedString", "toLowerCase", "t2", "localeCompare", "React", "Dialog", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "onKeyDownCapture", "event", "target", "key", "stopPropagation", "ref", "Icon", "fallbackIcon", "size", "Portal", "Overlay", "Content", "SearchList", "Input", "placeholder", "map", "action", "shortcut", "getShortcut", "Item", "value", "id", "onSelect", "disabled", "span", "className", "descriptionText", "keySymbols", "join", "div", "role", "NavTreeItemMonolithicAction", "parent", "caller", "data", "invoke", "onClick", "node", "NavTreeItemAction", "monolithic", "props", "triggerTooltipOpen", "setTriggerTooltipOpen", "monolithicAction", "length", "baseLabel", "side", "Arrow", "menuType", "NavTreeItemActionDropdownMenu", "NAV_TREE_ITEM", "NavTree", "loadDescendents", "renderPresence", "popoverAnchorId", "props", "renderColumns", "useCallback", "item", "menuOpen", "setMenuOpen", "React", "NavTreeColumns", "Tree", "draggable", "gridTemplateColumns", "classNames", "Presence", "t", "useTranslation", "NAVTREE_PLUGIN", "level", "path", "length", "primaryAction", "secondaryActions", "actions", "toSorted", "a", "b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "hidden", "ActionRoot", "id", "Popover", "Anchor", "Fragment", "useEffect", "frame", "requestAnimationFrame", "node", "cancelAnimationFrame", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "groupedActions", "menuType", "caller", "Treegrid", "Cell", "onChangeMenuOpen", "monitorForElements", "extractInstruction", "React", "useCallback", "useEffect", "NavigationAction", "Surface", "useIntentDispatcher", "isAction", "isActionLike", "useGraph", "isEchoObject", "isSpace", "ElevationProvider", "useMediaQuery", "useSidebars", "isItem", "arrayMove", "ArrowSquareOut", "GearSix", "Warning", "formatDistance", "React", "SettingsAction", "useResolvePlugin", "parseNavigationPlugin", "useIntentDispatcher", "useConfig", "Button", "Tooltip", "Popover", "useSidebars", "useTranslation", "Link", "Message", "Trans", "useDefaultValue", "PlankHeading", "getSize", "mx", "buttonStyles", "repo", "NavTreeFooter", "props", "layoutPart", "useDefaultValue", "config", "useConfig", "t", "useTranslation", "NAVTREE_PLUGIN", "navigationSidebarOpen", "useSidebars", "dispatch", "useIntentDispatcher", "version", "timestamp", "commitHash", "values", "runtime", "app", "build", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "releaseUrl", "env", "DX_ENVIRONMENT", "previewUrl", "React", "div", "role", "className", "mx", "Popover", "Root", "Trigger", "asChild", "Button", "variant", "classNames", "tabIndex", "Portal", "Content", "side", "Message", "valence", "Title", "Warning", "weight", "span", "Body", "br", "Link", "href", "target", "rel", "ArrowSquareOut", "p", "released", "formatDistance", "Date", "addSuffix", "Trans", "i18nKey", "components", "dxos", "Arrow", "Tooltip", "data-testid", "data-joyride", "onClick", "action", "SettingsAction", "OPEN", "GearSix", "getSize", "meta", "id", "PlankHeading", "Controls", "capabilities", "incrementStart", "incrementEnd", "_type", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "Path", "nonNullable", "getParent", "graph", "node", "path", "parentId", "length", "nodes", "relation", "find", "n", "id", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getTreeItemNode", "treeItems", "undefined", "treeItem", "index", "getChildren", "filter", "map", "nextPath", "includes", "nonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "navTreeItemVisitor", "open", "getItem", "stack", "nextItem", "pop", "children", "Path", "create", "i", "child", "treeItemsFromRootNode", "rootNode", "Array", "from", "expandOpenGraphNodes", "findNode", "last", "NODE_TYPE", "renderPresence", "item", "React", "Surface", "role", "data", "object", "node", "id", "NavTreeContainer", "items", "current", "open", "popoverAnchorId", "props", "closeNavigationSidebar", "useSidebars", "NAVTREE_PLUGIN", "isLg", "useMediaQuery", "ssr", "dispatch", "useIntentDispatcher", "graph", "useGraph", "loadDescendents", "useCallback", "expandActions", "isActionLike", "expandChildren", "then", "Promise", "all", "getChildren", "flatMap", "child", "canDrop", "source", "target", "isSpace", "isEchoObject", "handleSelect", "actions", "path", "isAction", "parentId", "slice", "parent", "find", "caller", "NAV_TREE_ITEM", "action", "NavigationAction", "OPEN", "activeParts", "main", "defaultAction", "properties", "disposition", "useEffect", "monitorForElements", "canMonitor", "isItem", "onDrop", "location", "dropTargets", "length", "instruction", "extractInstruction", "type", "sourceNode", "targetNode", "sourcePath", "targetPath", "nextItems", "startsWith", "filter", "join", "operation", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "arrayMove", "onRearrangeChildren", "map", "onCopy", "onTransferStart", "onTransferEnd", "ElevationProvider", "elevation", "div", "className", "limit", "NavTree", "onSelect", "NavTreeFooter", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "React", "useIntentDispatcher", "useResolvePlugin", "ClientAction", "parseObservabilityPlugin", "useIdentity", "React", "ConnectionState", "useNetworkStatus", "Avatar", "focusRing", "mx", "hexToFallback", "INTERNAL", "HaloButton", "props", "onClick", "identityKey", "internal", "size", "fallbackValue", "hexToFallback", "swarm", "connectionState", "useNetworkStatus", "React", "button", "className", "mx", "focusRing", "Avatar", "Root", "variant", "status", "ConnectionState", "OFFLINE", "hue", "Frame", "data-testid", "data-joyride", "Image", "href", "Fallback", "text", "emoji", "NotchStart", "identity", "useIdentity", "observabilityPlugin", "useResolvePlugin", "parseObservabilityPlugin", "dispatch", "useIntentDispatcher", "React", "HaloButton", "size", "identityKey", "toHex", "hue", "profile", "data", "emoji", "internal", "provides", "observability", "group", "onClick", "action", "ClientAction", "SHARE_IDENTITY", "MagnifyingGlass", "React", "LayoutAction", "useIntent", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatch", "useIntent", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "component", "dialogBlockAlign", "span", "className", "MagnifyingGlass", "getSize", "NAVTREE_PLUGIN", "NavTreePlugin", "graphPlugin", "graph", "itemCache", "Map", "state", "LocalStorageStore", "root", "undefined", "flatTree", "treeItemsFromRootNode", "open", "getItem", "node", "parent", "filter", "invariant", "path", "id", "actions", "groupedActions", "getActions", "children", "getChildren", "parentOf", "length", "map", "properties", "role", "item", "label", "icon", "disabled", "testId", "className", "headingClassName", "cachedItem", "get", "JSON", "stringify", "set", "handleOpenChange", "Path", "create", "values", "push", "index", "indexOf", "splice", "expandOpenGraphNodes", "meta", "ready", "plugins", "resolvePlugin", "parseGraphPlugin", "provides", "prop", "key", "type", "json", "subscribeTraverse", "visitor", "shortcut", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "caller", "KEY_BINDING", "initialize", "setCurrentContext", "unload", "destroy", "metadata", "records", "NODE_TYPE", "parse", "object", "surface", "component", "NAVTREE_PLUGIN", "selected", "subject", "React", "CommandsDialogContent", "NavTreeContainer", "items", "current", "activeIds", "onOpenChange", "popoverAnchorId", "NavTreeDocumentTitle", "isGraphNode", "activeNode", "NavBarStart", "disposition", "NotchStart", "CommandsTrigger", "intent", "resolver", "action", "NavigationAction", "EXPOSE", "getPath", "target", "Array", "isArray", "additionalOpenItems", "reduce", "acc", "_", "itemId", "builder", "intentPlugin", "parseIntentPlugin", "createExtension", "dispatch", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "ns", "translations", "NavTreePlugin"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type GraphBuilderProvides,\n resolvePlugin,\n type MetadataRecordsProvides,\n type PluginDefinition,\n type SurfaceProvides,\n type TranslationsProvides,\n type Plugin,\n type IntentResolverProvides,\n parseIntentPlugin,\n LayoutAction,\n type GraphProvides,\n parseGraphPlugin,\n NavigationAction,\n parseNavigationPlugin,\n} from '@dxos/app-framework';\nimport { createExtension, type Graph, isAction, isGraphNode, type Node, type NodeFilter } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport { Keyboard } from '@dxos/keyboard';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport {\n CommandsDialogContent,\n NODE_TYPE,\n NavBarStart,\n NavTreeContainer,\n NavTreeDocumentTitle,\n NotchStart,\n} from './components';\nimport { CommandsTrigger } from './components/CommandsTrigger';\nimport meta, { KEY_BINDING, NAVTREE_PLUGIN } from './meta';\nimport translations from './translations';\nimport { type NavTreeItem } from './types';\nimport {\n expandOpenGraphNodes,\n getActions,\n getChildren,\n treeItemsFromRootNode,\n type NavTreeItemGraphNode,\n} from './util';\n\nexport type NavTreePluginProvides = SurfaceProvides &\n MetadataRecordsProvides &\n GraphBuilderProvides &\n TranslationsProvides &\n IntentResolverProvides;\n\ntype NavTreeState = {\n root?: NavTreeItemGraphNode;\n flatTree: NavTreeItem[];\n open: string[];\n};\n\nexport const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let graph: Graph | undefined;\n const itemCache = new Map<string, NavTreeItem>();\n\n const state = new LocalStorageStore<NavTreeState>('dxos.org/settings/navtree', {\n root: undefined,\n get flatTree() {\n if (!this.root || !graph) {\n return [];\n }\n\n return treeItemsFromRootNode(graph, this.root, this.open, getItem);\n },\n // TODO(thure): Do this dynamically.\n open: ['root', 'root~dxos.org/plugin/space-spaces', 'root~dxos.org/plugin/files'],\n });\n\n const getItem = (node: NavTreeItemGraphNode, parent: readonly string[], filter?: NodeFilter) => {\n invariant(graph);\n const path = [...parent, node.id];\n const { actions, groupedActions } = getActions(graph, node);\n const children = getChildren(graph, node, filter, path);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n const item = {\n id: node.id,\n label: node.properties.label ?? node.id,\n icon: node.properties.icon,\n disabled: node.properties.disabled,\n testId: node.properties.testId,\n className: mx(node.properties.modified && 'italic', node.properties.className),\n headingClassName: node.properties.headingClassName,\n path,\n parentOf,\n node,\n actions,\n groupedActions,\n } satisfies NavTreeItem;\n\n const cachedItem = itemCache.get(node.id);\n // TODO(wittjosiah): This is not a good enough check.\n // Consider better ways to doing reactive transformations which retain referential equality.\n if (cachedItem && JSON.stringify(item) === JSON.stringify(cachedItem)) {\n return cachedItem;\n } else {\n itemCache.set(node.id, item);\n return item;\n }\n };\n\n const handleOpenChange = (item: NavTreeItem, open: boolean) => {\n const path = Path.create(...item.path);\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n if (open) {\n state.values.open.push(path);\n } else {\n const index = state.values.open.indexOf(path);\n if (index > -1) {\n state.values.open.splice(index, 1);\n }\n }\n\n if (graph) {\n void expandOpenGraphNodes(graph, state.values.open);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n state.prop({ key: 'open', type: LocalStorageStore.json<string[]>() });\n\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n graph = graphPlugin?.provides.graph;\n if (!graph) {\n return;\n }\n\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n const soloPart = resolvePlugin(plugins, parseNavigationPlugin)?.provides.location.active.solo?.[0];\n if (dispatch && soloPart) {\n void dispatch({ plugin: NAVTREE_PLUGIN, action: NavigationAction.EXPOSE, data: { id: soloPart.id } });\n }\n\n state.values.root = graph.root as NavTreeItemGraphNode;\n void expandOpenGraphNodes(graph, state.values.open);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n graph.subscribeTraverse({\n visitor: (node, path) => {\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({ node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n },\n });\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graphPlugin?.provides.graph.root.id);\n },\n unload: async () => {\n Keyboard.singleton.destroy();\n },\n provides: {\n metadata: {\n records: {\n [NODE_TYPE]: {\n parse: (item: NavTreeItem, type: string) => {\n switch (type) {\n case 'node':\n return item.node;\n case 'object':\n return item.node.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.node.data };\n }\n },\n },\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (data.component) {\n case `${NAVTREE_PLUGIN}/Commands`: {\n const selected = typeof data.subject === 'string' ? data.subject : undefined;\n return <CommandsDialogContent selected={selected} />;\n }\n }\n\n switch (role) {\n case 'navigation':\n return (\n <NavTreeContainer\n items={state.values.flatTree}\n current={data.activeIds as string[]}\n open={state.values.open}\n onOpenChange={handleOpenChange}\n popoverAnchorId={data.popoverAnchorId as string}\n />\n );\n\n case 'document-title': {\n return <NavTreeDocumentTitle node={isGraphNode(data.activeNode) ? data.activeNode : undefined} />;\n }\n\n case 'navbar-start': {\n if (state.values.root && data.activeNode) {\n return {\n node: (\n <NavBarStart\n activeNode={data.activeNode as Node}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n />\n ),\n disposition: 'hoist',\n };\n }\n break;\n }\n\n case 'notch-start':\n return <NotchStart />;\n\n case 'search-input':\n return {\n node: <CommandsTrigger />,\n disposition: 'fallback',\n };\n }\n\n return null;\n },\n },\n intent: {\n resolver: async (intent) => {\n switch (intent.action) {\n case NavigationAction.EXPOSE: {\n if (graph && intent.data?.id) {\n const path = await graph.waitForPath({ target: intent.data.id });\n const additionalOpenItems = [...Array(path.length)].reduce((acc: string[], _, index) => {\n const itemId = Path.create(...path.slice(0, index));\n if (itemId.length > 0 && !state.values.open.includes(itemId)) {\n acc.push(itemId);\n }\n return acc;\n }, []);\n state.values.open.push(...additionalOpenItems);\n }\n break;\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n // TODO(burdon): Move to separate plugin (for keys and command k). Move bindings from LayoutPlugin.\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return [\n createExtension({\n id: NAVTREE_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: 'dxos.org/plugin/navtree/open-commands',\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${NAVTREE_PLUGIN}/Commands`,\n dialogBlockAlign: 'start',\n },\n });\n },\n properties: {\n label: ['open commands label', { ns: NAVTREE_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ],\n }),\n ];\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\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 dispatch = useIntentDispatcher();\n const { graph } = useGraph();\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 // console.log(JSON.stringify(actions, undefined, 2));\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const actions = isActionGroup(group) ? graph.actions(group) : allActions;\n\n return (\n <Dialog.Content classNames={['md:max-is-[30rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{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='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input placeholder={t('command list input placeholder')} classNames='px-1 my-2' />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\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({ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } });\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ 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 <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Fragment } from 'react';\n\nimport { getGraph, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../meta';\n\nconst TREE_ITEM_MAIN_HEADING = 'TreeItemMainHeading';\n\nexport const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node; popoverAnchorId?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const ActionRoot =\n popoverAnchorId === `dxos.org/ui/${TREE_ITEM_MAIN_HEADING}/${activeNode.id}` ||\n popoverAnchorId === `dxos.org/ui/${KEY_BINDING}/${activeNode.id}`\n ? Popover.Anchor\n : Fragment;\n\n const graph = getGraph(activeNode);\n const actions = graph.actions(activeNode);\n const label = toLocalizedString(activeNode.properties?.label, t);\n\n const menuTriggerLabel = t('node actions menu invoker label');\n\n return (\n <>\n <ActionRoot>\n <StackItem.Sigil\n icon={activeNode.properties?.icon ?? 'ph--dots-three-vertical--regular'}\n attendableId={activeNode.id}\n triggerLabel={menuTriggerLabel}\n actions={[actions]}\n onAction={(action) =>\n typeof action.data === 'function' && action.data({ node: action as Node, caller: TREE_ITEM_MAIN_HEADING })\n }\n />\n </ActionRoot>\n <StackItem.HeadingLabel attendableId={activeNode.id}>{label}</StackItem.HeadingLabel>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, useCallback, useEffect, type FC } from 'react';\n\nimport { isAction, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, Treegrid, useTranslation } from '@dxos/react-ui';\nimport { Tree, type TreeProps } from '@dxos/react-ui-list';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItem } from '../types';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Omit<TreeProps<NavTreeItem>, 'draggable' | 'gridTemplateColumns' | 'renderColumns'> &\n Pick<NavTreeColumnsProps, 'loadDescendents' | 'renderPresence' | 'popoverAnchorId'>;\n\nexport const NavTree = ({ loadDescendents, renderPresence, popoverAnchorId, ...props }: NavTreeProps) => {\n const renderColumns = useCallback<NonNullable<TreeProps<NavTreeItem>['renderColumns']>>(\n ({ item, menuOpen, setMenuOpen }) => {\n return (\n <NavTreeColumns\n item={item}\n menuOpen={menuOpen}\n setMenuOpen={setMenuOpen}\n loadDescendents={loadDescendents}\n renderPresence={renderPresence}\n popoverAnchorId={popoverAnchorId}\n />\n );\n },\n [renderPresence, popoverAnchorId, loadDescendents],\n );\n\n return (\n <Tree<NavTreeItem>\n {...props}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={renderColumns}\n />\n );\n};\n\ntype NavTreeColumnsProps = {\n item: NavTreeItem;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n loadDescendents?: (node: Node) => MaybePromise<void>;\n renderPresence?: FC<{ item: NavTreeItem }>;\n popoverAnchorId?: string;\n};\n\nconst NavTreeColumns = ({\n item,\n menuOpen,\n setMenuOpen,\n loadDescendents,\n renderPresence: Presence,\n popoverAnchorId,\n}: NavTreeColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const level = item.path.length - 2;\n\n const [primaryAction, ...secondaryActions] = item.actions.toSorted((a, b) =>\n a.properties?.disposition === 'toolbar' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'toolbar' ? secondaryActions : item.actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((action) => !action.properties?.hidden);\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n // TODO(thure): Ideally this should not be necessary.\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n void loadDescendents?.(item.node);\n if (primaryAction && !isAction(primaryAction)) {\n void loadDescendents?.(primaryAction);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [primaryAction]);\n\n return (\n <>\n {primaryAction?.properties?.disposition === 'toolbar' ? (\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.node}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : item.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.node}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n menuOpen={menuOpen}\n onChangeMenuOpen={setMenuOpen}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {Presence && <Presence item={item} />}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MutableRefObject, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { type Action, type ActionLike, type Node } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport {\n Button,\n Dialog,\n DropdownMenu,\n ContextMenu,\n Tooltip,\n useTranslation,\n toLocalizedString,\n Icon,\n} from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { descriptionText, hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\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 suppressNextTooltip?: MutableRefObject<boolean>;\n menuOpen?: boolean;\n defaultMenuOpen?: boolean;\n onChangeMenuOpen?: (nextOpen: boolean) => void;\n onAction?: (action: Action) => void;\n};\n\nconst getShortcut = (action: ActionLike) => {\n return typeof action.properties?.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties?.keyBinding?.[getHostPlatform()];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nexport const NavTreeItemActionDropdownMenu = ({\n label,\n icon,\n testId,\n defaultMenuOpen,\n menuActions,\n menuOpen,\n suppressNextTooltip,\n onChangeMenuOpen,\n onAction,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: menuOpen,\n defaultProp: defaultMenuOpen,\n onChange: onChangeMenuOpen,\n });\n\n return (\n <DropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n aria-label={t('tree item actions label')}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <DropdownMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties!.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </DropdownMenu.Item>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n\nexport const NavTreeItemActionContextMenu = (\n props: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>,\n) => {\n return (props.menuActions?.length ?? 0) > 0 ? <NavTreeItemActionContextMenuImpl {...props} /> : <>{props.children}</>;\n};\n\nconst NavTreeItemActionContextMenuImpl = ({\n menuActions,\n onAction,\n children,\n}: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <ContextMenu.Root>\n <ContextMenu.Trigger asChild>{children}</ContextMenu.Trigger>\n <ContextMenu.Portal>\n <ContextMenu.Content classNames='z-[31]'>\n <ContextMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <ContextMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </ContextMenu.Item>\n );\n })}\n </ContextMenu.Viewport>\n <ContextMenu.Arrow />\n </ContextMenu.Content>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n};\n\nexport const NavTreeItemActionSearchList = ({\n menuActions,\n icon,\n label,\n testId,\n suppressNextTooltip,\n onAction,\n}: Pick<\n NavTreeItemActionMenuProps,\n 'icon' | 'menuActions' | 'testId' | 'label' | 'onAction' | 'suppressNextTooltip'\n>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n const button = useRef<HTMLButtonElement | null>(null);\n\n // TODO(burdon): Optionally sort.\n const sortedActions = menuActions?.sort(({ properties: p1 }, { properties: p2 }) => {\n const t1 = toLocalizedString(p1!.label, t).toLowerCase();\n const t2 = toLocalizedString(p2!.label, t).toLowerCase();\n return t1.localeCompare(t2);\n });\n\n // TODO(thure): Use LayoutPlugin’s global Dialog.\n return (\n <Dialog.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <Dialog.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n onKeyDownCapture={(event) => {\n // TODO(thure): Why is only this `Button` affected and not `DropdownMenu.Trigger`’s?\n if (button.current && button.current === event.target) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Capture this event and stop propagation to the drag start handler.\n event.stopPropagation();\n setOptionsMenuOpen(true);\n break;\n default:\n }\n }\n }}\n ref={button}\n >\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Dialog.Trigger>\n </Tooltip.Trigger>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content classNames='z-[31] is-full max-is-[24rem] pli-2 plb-1'>\n <SearchList.Root label={t('tree item searchlist input placeholder')}>\n <SearchList.Input placeholder={t('tree item searchlist input placeholder')} classNames='pli-3' />\n <SearchList.Content classNames='min-bs-[12rem] bs-[50dvh] max-bs-[30rem] overflow-auto'>\n {sortedActions?.map((action) => {\n const label = toLocalizedString(action.properties!.label, t);\n const shortcut = getShortcut(action);\n return (\n <SearchList.Item\n // TODO(burdon): Value should be id since label is not unique.\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties?.disabled) {\n return;\n }\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='flex items-center gap-2 pli-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{label}</span>\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n <div role='none' className='flex items-center plb-2 pli-3'>\n <span className={descriptionText}>{toLocalizedString(label, t)}</span>\n </div>\n </SearchList.Root>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, label, icon } = { label: 'never' },\n data: invoke,\n}: Action & { parent: Node; onAction?: (action: Action) => void }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { node: parent, caller } : { node: parent });\n }}\n data-testid={testId}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Tooltip.Trigger>\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const suppressNextTooltip = useRef<boolean>(false);\n const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return (\n <Tooltip.Root\n open={triggerTooltipOpen}\n onOpenChange={(nextOpen) => {\n if (suppressNextTooltip.current) {\n setTriggerTooltipOpen(false);\n suppressNextTooltip.current = false;\n } else {\n setTriggerTooltipOpen(nextOpen);\n }\n }}\n >\n {baseLabel && (\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[31]' side='bottom'>\n {baseLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n )}\n {monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction parent={node} {...menuActions[0]} />\n ) : props.menuType === 'searchList' ? (\n <NavTreeItemActionSearchList\n {...props}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n ) : (\n <NavTreeItemActionDropdownMenu\n {...props}\n parent={node}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n )}\n </Tooltip.Root>\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 React, { useCallback, useEffect } from 'react';\n\nimport { NavigationAction, Surface, useIntentDispatcher } from '@dxos/app-framework';\nimport { isAction, isActionLike, type Node } from '@dxos/app-graph';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { isEchoObject, isSpace } from '@dxos/react-client/echo';\nimport { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { isItem } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove } from '@dxos/util';\n\nimport { NAV_TREE_ITEM, NavTree, type NavTreeProps } from './NavTree';\nimport { NavTreeFooter } from './NavTreeFooter';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItem } from '../types';\nimport {\n expandActions,\n expandChildren,\n getChildren,\n getParent,\n resolveMigrationOperation,\n type NavTreeItemGraphNode,\n} from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderPresence = ({ item }: { item: NavTreeItem }) => (\n <Surface role='presence--glyph' data={{ object: item.node.data, id: item.node.id }} />\n);\n\nexport type NavTreeContainerProps = {\n items: NavTreeItem[];\n current: string[];\n open: string[];\n popoverAnchorId?: string;\n} & Pick<NavTreeProps, 'onOpenChange'>;\n\nexport const NavTreeContainer = ({ items, current, open, popoverAnchorId, ...props }: NavTreeContainerProps) => {\n const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const dispatch = useIntentDispatcher();\n const { graph } = useGraph();\n\n const loadDescendents = useCallback(\n (node: Node) => {\n void expandActions(graph, node);\n if (!isActionLike(node)) {\n void expandChildren(graph, node).then(() =>\n // Load one level deeper, which resolves some juddering observed on open/close.\n Promise.all(\n getChildren(graph, node).flatMap((child) => [expandActions(graph, child), expandChildren(graph, child)]),\n ),\n );\n }\n },\n [graph],\n );\n\n const canDrop = useCallback((source: NavTreeItem, target: NavTreeItem) => {\n if (isSpace(target.node.data)) {\n // TODO(wittjosiah): Find a way to only allow space as source for rearranging.\n return isEchoObject(source.node.data) || isSpace(source.node.data);\n } else if (isEchoObject(target.node.data)) {\n return isEchoObject(source.node.data);\n } else {\n return false;\n }\n }, []);\n\n const handleSelect = useCallback(\n ({ node, actions, path }: NavTreeItem) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parentId] = path.slice(1);\n const parent = items.find(({ id }) => id === parentId)?.node;\n void (parent && node.data({ node: parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n // TODO(thure): Refactor opening related planks (comments in this case) to a generalized approach.\n void dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: {\n main: [node.id],\n },\n },\n });\n\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n closeNavigationSidebar();\n }\n },\n [items, dispatch, isLg, closeNavigationSidebar],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isItem(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\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.node as NavTreeItemGraphNode;\n const targetNode = target.data.node as NavTreeItemGraphNode;\n\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n\n const nextItems = instruction.type.startsWith('reorder')\n ? items.filter((item) => item.path.slice(0, -1).join() === targetPath.slice(0, -1).join())\n : items.filter((item) => item.path.slice(0, -1).join() === targetPath.join());\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\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n\n const sourceIndex = nextItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = nextItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? nextItems.length > 0\n ? nextItems.length - 1\n : 0\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n\n switch (operation) {\n case 'rearrange': {\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems.map((item) => item.node.data));\n break;\n }\n\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\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\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [items]);\n\n return (\n <ElevationProvider elevation='chrome'>\n <div\n role='none'\n className={mx(\n 'grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content]',\n 'bs-full overflow-hidden row-span-3 divide-y divide-separator',\n )}\n >\n <Surface role='search-input' limit={1} />\n\n {/* TODO(thure): What gives this an inline `overflow: initial`? */}\n <div role='none' className='!overflow-y-auto'>\n <NavTree\n items={items}\n open={open}\n current={current}\n loadDescendents={loadDescendents}\n renderPresence={renderPresence}\n popoverAnchorId={popoverAnchorId}\n canDrop={canDrop}\n onSelect={handleSelect}\n {...props}\n />\n </div>\n\n <NavTreeFooter />\n </div>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowSquareOut, GearSix, Warning } from '@phosphor-icons/react';\nimport { formatDistance } from 'date-fns/formatDistance';\nimport React from 'react';\n\nimport {\n type LayoutPart,\n SettingsAction,\n parseNavigationPlugin,\n useResolvePlugin,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { useConfig } from '@dxos/react-client';\nimport {\n Button,\n Link,\n Message,\n Popover,\n Tooltip,\n Trans,\n useDefaultValue,\n useSidebars,\n useTranslation,\n} from '@dxos/react-ui';\nimport { LayoutControls } from '@dxos/react-ui-stack';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst buttonStyles = 'pli-1.5 text-xs font-normal';\n\nconst repo = 'https://github.com/dxos/dxos';\n\nconst VERSION_REGEX = /([\\d.]+)/;\n\nexport const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {\n const layoutPart = useDefaultValue(props.layoutPart, () => 'sidebar');\n const config = useConfig();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const { version, timestamp, commitHash } = config.values.runtime?.app?.build ?? {};\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const [_, v] = version?.match(VERSION_REGEX) ?? [];\n\n const releaseUrl =\n config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production'\n ? `${repo}/releases/tag/v${version}`\n : `${repo}/commit/${commitHash}`;\n\n const previewUrl = 'https://docs.dxos.org/composer#technology-preview';\n\n return (\n <div\n role='none'\n className={mx(\n 'flex bs-[--rail-size] pbe-[env(safe-area-inset-bottom)] box-content justify-end',\n layoutPart === 'complementary' && 'md:justify-end flex-row-reverse',\n )}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames={buttonStyles} {...(!navigationSidebarOpen && { tabIndex: -1 })}>\n v{v}\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='top'\n role='message'\n classNames='z-[12] bg-warning-500 max-is-[min(calc(100vw-16px),40ch)]'\n >\n <Message.Root valence='warning' className='rounded-be-none p-5'>\n <Message.Title>\n <Warning weight='duotone' className='inline mie-2 is-6 bs-6' />\n <span>{t('warning title')}</span>\n </Message.Title>\n <Message.Body>\n {t('technology preview message')}\n <br />\n <Link href={previewUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('learn more label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </Message.Body>\n </Message.Root>\n <div role='none' className='plb-4 pli-5 space-b-2 text-baseText'>\n {timestamp && (\n <p>\n {t('released message', {\n released: formatDistance(new Date(timestamp), new Date(), { addSuffix: true }),\n })}\n <br />\n <Link href={releaseUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('see release label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </p>\n )}\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'powered by dxos message',\n components: {\n dxos: <Link href='https://dxos.org' target='_blank' rel='noreferrer' variant='neutral' />,\n },\n }}\n />\n </p>\n </div>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(burdon): Reconcile with action created by LayoutPlugin. */}\n <Button\n variant='ghost'\n classNames={buttonStyles}\n data-testid='treeView.openSettings'\n data-joyride='welcome/settings'\n {...(!navigationSidebarOpen && { tabIndex: -1 })}\n onClick={() => dispatch({ action: SettingsAction.OPEN })}\n >\n <span className='sr-only'>{t('open settings label')}</span>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[12]'>\n {t('open settings label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {/* NOTE(thure): Unpinning from the NavTree’s default position in Deck is temporarily disabled. */}\n {navigationPlugin?.meta.id === 'dxos.org/plugin/deck' && (\n <LayoutControls\n variant='hide-disabled'\n capabilities={{\n incrementStart: false,\n incrementEnd: false,\n }}\n onClick={(_type) => {\n // TODO(Zan): If we inmplement pinning again, we should dispatch here.\n }}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n} from '@dxos/app-graph';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { type MaybePromise, nonNullable } from '@dxos/util';\n\nimport { type NodeProperties, type NavTreeItem } from './types';\n\nexport type NavTreeItemGraphNode = Node<\n any,\n Partial<\n NodeProperties & {\n persistenceClass: string;\n persistenceKey: string;\n acceptPersistenceClass: Set<string>;\n acceptPersistenceKey: Set<string>;\n onRearrangeChildren: (nextOrder: NavTreeItemGraphNode[]) => MaybePromise<void>;\n onCopy: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferStart: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferEnd: (activeNode: NavTreeItemGraphNode, destinationParent: NavTreeItemGraphNode) => MaybePromise<void>;\n }\n >\n>;\n\nexport const getParent = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.nodes(node, { relation: 'inbound' }).find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: Graph,\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: Graph,\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 === 'toolbar') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getTreeItemNode = (treeItems: NavTreeItem[], path?: string[]): NavTreeItem | undefined => {\n if (!path) {\n return undefined;\n }\n\n return treeItems.find((treeItem) => {\n return treeItem.path && !treeItem.path.find((id, index) => path[index] !== id);\n });\n};\n\nexport const getChildren = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n filter?: NodeFilter,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .nodes(node, { relation: 'outbound', filter })\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(nonNullable) as NavTreeItemGraphNode[];\n};\n\ntype FlattenedActions = Required<Pick<NavTreeItem, 'actions' | 'groupedActions'>>;\n\nexport const getActions = (graph: Graph, node: Node): FlattenedActions => {\n return graph.actions(node).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.actions(arg);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n );\n};\n\nexport const expandChildrenAndActions = (graph: Graph, node: Node) => {\n return Promise.all([expandChildren(graph, node), expandActions(graph, node)]);\n};\n\nexport const expandChildren = (graph: Graph, node: Node) => {\n return graph.expand(node, 'outbound');\n};\n\nexport const expandActions = (graph: Graph, node: Node) => {\n return Promise.all([graph.expand(node, 'outbound', ACTION_TYPE), graph.expand(node, 'outbound', ACTION_GROUP_TYPE)]);\n};\n\nfunction* navTreeItemVisitor({\n graph,\n node,\n open,\n getItem,\n path = [],\n filter,\n}: {\n graph: Graph;\n node: NavTreeItemGraphNode;\n open: string[];\n getItem: (node: NavTreeItemGraphNode, parent: readonly string[], filter?: NodeFilter) => NavTreeItem;\n path?: readonly string[];\n filter?: NodeFilter;\n}): Generator<NavTreeItem> {\n const stack: NavTreeItem[] = [getItem(node, path, filter)];\n while (stack.length > 0) {\n const nextItem = stack.pop()!;\n if (nextItem.path.length > 1) {\n yield nextItem;\n }\n const { node, path } = nextItem;\n const children = getChildren(graph, node, filter, path);\n const actions = graph.actions(node);\n if (path.length === 1 || open.includes(Path.create(...path))) {\n for (let i = actions.length - 1; i >= 0; i--) {\n if (actions[i].properties.disposition === 'item') {\n stack.push(getItem(actions[i], path, filter));\n }\n }\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i] as NavTreeItemGraphNode;\n stack.push(getItem(child, path, filter));\n }\n }\n }\n}\n\n/**\n * Get a reactive tree node from a graph node.\n */\nexport const treeItemsFromRootNode = (\n graph: Graph,\n rootNode: NavTreeItemGraphNode,\n open: string[],\n getItem: (node: NavTreeItemGraphNode, parent: readonly string[]) => NavTreeItem,\n path?: readonly string[],\n filter?: NodeFilter,\n): NavTreeItem[] => {\n return Array.from(navTreeItemVisitor({ graph, node: rootNode, open, getItem, path, filter }));\n};\n\nexport const expandOpenGraphNodes = (graph: Graph, open: string[]) => {\n return Promise.all(\n open\n .map((id) => {\n const node = graph.findNode(Path.last(id));\n return node && expandChildrenAndActions(graph, node as NavTreeItemGraphNode);\n })\n .filter(nonNullable),\n );\n};\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 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher, useResolvePlugin } from '@dxos/app-framework';\nimport { ClientAction } from '@dxos/plugin-client/meta';\nimport { parseObservabilityPlugin } from '@dxos/plugin-observability';\nimport { useIdentity } from '@dxos/react-client/halo';\n\nimport { HaloButton } from './HaloButton';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin (ClientPlugin?).\nexport const NotchStart = () => {\n const identity = useIdentity();\n const observabilityPlugin = useResolvePlugin(parseObservabilityPlugin);\n const dispatch = useIntentDispatcher();\n return (\n <HaloButton\n size={8}\n identityKey={identity?.identityKey.toHex()}\n hue={identity?.profile?.data?.hue}\n emoji={identity?.profile?.data?.emoji}\n internal={observabilityPlugin?.provides?.observability?.group === 'dxos'}\n onClick={() => dispatch({ action: ClientAction.SHARE_IDENTITY })}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ConnectionState, useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Avatar, type Size } from '@dxos/react-ui';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nconst INTERNAL = 'https://avatars.githubusercontent.com/u/57182821';\n\nexport type HaloButtonProps = {\n size?: Size;\n identityKey?: string;\n hue?: string;\n emoji?: string;\n internal?: boolean;\n onClick?: () => void;\n};\n\nexport const HaloButton = (props: HaloButtonProps) => {\n const { onClick, identityKey, internal, size = 8 } = props;\n const fallbackValue = hexToFallback(identityKey ?? '0');\n const { swarm: connectionState } = useNetworkStatus();\n return (\n <button className={mx(focusRing, 'rounded grid place-items-center')} onClick={onClick}>\n <Avatar.Root\n size={size}\n variant='circle'\n status={connectionState === ConnectionState.OFFLINE ? 'error' : internal ? 'internal' : 'active'}\n hue={props.hue || fallbackValue.hue}\n >\n <Avatar.Frame data-testid='treeView.haloButton' data-joyride='welcome/halo'>\n {internal ? <Avatar.Image href={INTERNAL} /> : <Avatar.Fallback text={props.emoji || fallbackValue.emoji} />}\n </Avatar.Frame>\n </Avatar.Root>\n </button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatch } = useIntent();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='w-full h-full !rounded-none'\n onClick={() =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', component: `${NAVTREE_PLUGIN}/Commands`, dialogBlockAlign: 'start' },\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 { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\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 'warning title': 'WARNING',\n 'technology preview message': 'Composer is still in technology preview.',\n 'learn more label': 'Learn more',\n 'released message': 'This version released {{released}}.',\n 'see release label': 'See release on GitHub',\n 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',\n 'tree item actions label': 'More actions',\n 'tree item searchlist input placeholder': 'Search for actions…',\n 'empty branch message': ' ',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NavTreePlugin } from './NavTreePlugin';\n\nexport default NavTreePlugin;\n\nexport * from './NavTreePlugin';\nexport * from './util';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "resolvePlugin", "parseIntentPlugin", "LayoutAction", "parseGraphPlugin", "NavigationAction", "parseNavigationPlugin", "createExtension", "isAction", "isGraphNode", "invariant", "Keyboard", "LocalStorageStore", "Path", "mx", "getHostPlatform", "React", "useMemo", "useState", "useIntentDispatcher", "LayoutAction", "isActionGroup", "isAction", "Keyboard", "keySymbols", "useGraph", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatch", "useIntentDispatcher", "graph", "useGraph", "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", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "setTimeout", "nodes", "relation", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "React", "Fragment", "getGraph", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TREE_ITEM_MAIN_HEADING", "NavBarStart", "activeNode", "popoverAnchorId", "t", "useTranslation", "NAVTREE_PLUGIN", "ActionRoot", "id", "KEY_BINDING", "Popover", "Anchor", "Fragment", "graph", "getGraph", "actions", "label", "toLocalizedString", "properties", "menuTriggerLabel", "React", "StackItem", "Sigil", "icon", "attendableId", "triggerLabel", "onAction", "action", "data", "node", "caller", "HeadingLabel", "React", "Fragment", "useCallback", "useEffect", "isAction", "Popover", "toLocalizedString", "Treegrid", "useTranslation", "Tree", "useControllableState", "React", "useRef", "useState", "keySymbols", "Button", "Dialog", "DropdownMenu", "ContextMenu", "Tooltip", "useTranslation", "toLocalizedString", "Icon", "SearchList", "descriptionText", "hoverableControlItem", "hoverableOpenControlItem", "mx", "getHostPlatform", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "fallbackIcon", "NavTreeItemActionDropdownMenu", "label", "icon", "testId", "defaultMenuOpen", "menuActions", "menuOpen", "suppressNextTooltip", "onChangeMenuOpen", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "React", "DropdownMenu", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "aria-label", "span", "className", "toLocalizedString", "Icon", "size", "Portal", "Content", "Viewport", "map", "shortcut", "Item", "key", "id", "onClick", "event", "disabled", "stopPropagation", "descriptionText", "keySymbols", "join", "Arrow", "NavTreeItemActionSearchList", "menuActions", "icon", "label", "testId", "suppressNextTooltip", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useState", "button", "useRef", "sortedActions", "sort", "properties", "p1", "p2", "t1", "toLocalizedString", "toLowerCase", "t2", "localeCompare", "React", "Dialog", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "onKeyDownCapture", "event", "target", "key", "stopPropagation", "ref", "Icon", "fallbackIcon", "size", "Portal", "Overlay", "Content", "SearchList", "Input", "placeholder", "map", "action", "shortcut", "getShortcut", "Item", "value", "id", "onSelect", "disabled", "span", "className", "descriptionText", "keySymbols", "join", "div", "role", "NavTreeItemMonolithicAction", "parent", "caller", "data", "invoke", "onClick", "node", "NavTreeItemAction", "monolithic", "props", "triggerTooltipOpen", "setTriggerTooltipOpen", "monolithicAction", "length", "baseLabel", "side", "Arrow", "menuType", "NavTreeItemActionDropdownMenu", "NAV_TREE_ITEM", "NavTree", "loadDescendents", "renderPresence", "popoverAnchorId", "props", "renderColumns", "useCallback", "item", "menuOpen", "setMenuOpen", "React", "NavTreeColumns", "Tree", "draggable", "gridTemplateColumns", "Presence", "t", "useTranslation", "NAVTREE_PLUGIN", "level", "path", "length", "primaryAction", "secondaryActions", "actions", "toSorted", "a", "b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "hidden", "ActionRoot", "id", "Popover", "Anchor", "Fragment", "useEffect", "frame", "requestAnimationFrame", "node", "cancelAnimationFrame", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "groupedActions", "menuType", "caller", "Treegrid", "Cell", "onChangeMenuOpen", "monitorForElements", "extractInstruction", "React", "useCallback", "useEffect", "NavigationAction", "Surface", "useIntentDispatcher", "isAction", "isActionLike", "useGraph", "isEchoObject", "isSpace", "ElevationProvider", "useMediaQuery", "useSidebars", "isItem", "mx", "arrayMove", "ArrowSquareOut", "GearSix", "Warning", "formatDistance", "React", "SettingsAction", "parseNavigationPlugin", "useResolvePlugin", "useIntentDispatcher", "useConfig", "Button", "Link", "Message", "Popover", "Tooltip", "Trans", "useDefaultValue", "useSidebars", "useTranslation", "LayoutControls", "getSize", "mx", "buttonStyles", "repo", "VERSION_REGEX", "NavTreeFooter", "props", "layoutPart", "useDefaultValue", "config", "useConfig", "t", "useTranslation", "NAVTREE_PLUGIN", "navigationSidebarOpen", "useSidebars", "dispatch", "useIntentDispatcher", "version", "timestamp", "commitHash", "values", "runtime", "app", "build", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "_", "v", "match", "releaseUrl", "env", "DX_ENVIRONMENT", "previewUrl", "React", "div", "role", "className", "mx", "Popover", "Root", "Trigger", "asChild", "Button", "variant", "classNames", "tabIndex", "Portal", "Content", "side", "Message", "valence", "Title", "Warning", "weight", "span", "Body", "br", "Link", "href", "target", "rel", "ArrowSquareOut", "p", "released", "formatDistance", "Date", "addSuffix", "Trans", "i18nKey", "components", "dxos", "Arrow", "Tooltip", "data-testid", "data-joyride", "onClick", "action", "SettingsAction", "OPEN", "GearSix", "getSize", "meta", "id", "LayoutControls", "capabilities", "incrementStart", "incrementEnd", "_type", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "Path", "nonNullable", "getParent", "graph", "node", "path", "parentId", "length", "nodes", "relation", "find", "n", "id", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getTreeItemNode", "treeItems", "undefined", "treeItem", "index", "getChildren", "filter", "map", "nextPath", "includes", "nonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "navTreeItemVisitor", "open", "getItem", "stack", "nextItem", "pop", "children", "Path", "create", "i", "child", "treeItemsFromRootNode", "rootNode", "Array", "from", "expandOpenGraphNodes", "findNode", "last", "NODE_TYPE", "renderPresence", "item", "React", "Surface", "role", "data", "object", "node", "id", "NavTreeContainer", "items", "current", "open", "popoverAnchorId", "props", "closeNavigationSidebar", "useSidebars", "NAVTREE_PLUGIN", "isLg", "useMediaQuery", "ssr", "dispatch", "useIntentDispatcher", "graph", "useGraph", "loadDescendents", "useCallback", "expandActions", "isActionLike", "expandChildren", "then", "Promise", "all", "getChildren", "flatMap", "child", "canDrop", "source", "target", "isSpace", "isEchoObject", "handleSelect", "actions", "path", "isAction", "parentId", "slice", "parent", "find", "caller", "NAV_TREE_ITEM", "action", "NavigationAction", "OPEN", "activeParts", "main", "defaultAction", "properties", "disposition", "useEffect", "monitorForElements", "canMonitor", "isItem", "onDrop", "location", "dropTargets", "length", "instruction", "extractInstruction", "type", "sourceNode", "targetNode", "sourcePath", "targetPath", "nextItems", "startsWith", "filter", "join", "operation", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "arrayMove", "onRearrangeChildren", "map", "onCopy", "onTransferStart", "onTransferEnd", "ElevationProvider", "elevation", "div", "className", "mx", "limit", "NavTree", "onSelect", "NavTreeFooter", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "React", "useIntentDispatcher", "useResolvePlugin", "ClientAction", "parseObservabilityPlugin", "useIdentity", "React", "ConnectionState", "useNetworkStatus", "Avatar", "focusRing", "mx", "hexToFallback", "INTERNAL", "HaloButton", "props", "onClick", "identityKey", "internal", "size", "fallbackValue", "hexToFallback", "swarm", "connectionState", "useNetworkStatus", "React", "button", "className", "mx", "focusRing", "Avatar", "Root", "variant", "status", "ConnectionState", "OFFLINE", "hue", "Frame", "data-testid", "data-joyride", "Image", "href", "Fallback", "text", "emoji", "NotchStart", "identity", "useIdentity", "observabilityPlugin", "useResolvePlugin", "parseObservabilityPlugin", "dispatch", "useIntentDispatcher", "React", "HaloButton", "size", "identityKey", "toHex", "hue", "profile", "data", "emoji", "internal", "provides", "observability", "group", "onClick", "action", "ClientAction", "SHARE_IDENTITY", "MagnifyingGlass", "React", "LayoutAction", "useIntent", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatch", "useIntent", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "component", "dialogBlockAlign", "span", "className", "MagnifyingGlass", "getSize", "NAVTREE_PLUGIN", "NavTreePlugin", "graphPlugin", "graph", "itemCache", "Map", "state", "LocalStorageStore", "root", "undefined", "flatTree", "treeItemsFromRootNode", "open", "getItem", "node", "parent", "filter", "invariant", "path", "id", "actions", "groupedActions", "getActions", "children", "getChildren", "parentOf", "length", "map", "properties", "role", "item", "label", "icon", "disabled", "testId", "className", "mx", "modified", "headingClassName", "cachedItem", "get", "JSON", "stringify", "set", "handleOpenChange", "Path", "create", "values", "push", "index", "indexOf", "splice", "expandOpenGraphNodes", "meta", "ready", "plugins", "prop", "key", "type", "json", "resolvePlugin", "parseGraphPlugin", "provides", "dispatch", "parseIntentPlugin", "intent", "soloPart", "parseNavigationPlugin", "location", "active", "solo", "plugin", "NAVTREE_PLUGIN", "action", "NavigationAction", "EXPOSE", "data", "subscribeTraverse", "visitor", "shortcut", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "caller", "KEY_BINDING", "initialize", "setCurrentContext", "unload", "destroy", "metadata", "records", "NODE_TYPE", "parse", "object", "surface", "component", "selected", "subject", "React", "CommandsDialogContent", "NavTreeContainer", "items", "current", "activeIds", "onOpenChange", "popoverAnchorId", "NavTreeDocumentTitle", "isGraphNode", "activeNode", "NavBarStart", "disposition", "NotchStart", "CommandsTrigger", "resolver", "waitForPath", "target", "additionalOpenItems", "Array", "reduce", "acc", "_", "itemId", "builder", "intentPlugin", "createExtension", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "ns", "translations", "NavTreePlugin"]
|
|
7
7
|
}
|