@dxos/plugin-navtree 0.8.2-main.12df754 → 0.8.2-main.30e4dbb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/lib/browser/{chunk-FHOAKMRS.mjs → chunk-ZULGSU3L.mjs} +240 -205
  2. package/dist/lib/browser/chunk-ZULGSU3L.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +2 -2
  4. package/dist/lib/browser/index.mjs.map +2 -2
  5. package/dist/lib/browser/{intent-resolver-OBGGMBVJ.mjs → intent-resolver-XCABZFA6.mjs} +4 -4
  6. package/dist/lib/browser/intent-resolver-XCABZFA6.mjs.map +7 -0
  7. package/dist/lib/browser/{keyboard-IQXHKUWM.mjs → keyboard-2KXRP22I.mjs} +2 -2
  8. package/dist/lib/browser/{keyboard-IQXHKUWM.mjs.map → keyboard-2KXRP22I.mjs.map} +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-DWMOF2TM.mjs → react-surface-BVZN7664.mjs} +2 -2
  11. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  12. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  13. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  14. package/dist/types/src/capabilities/keyboard.d.ts.map +1 -1
  15. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  16. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +1 -0
  17. package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +1 -0
  18. package/dist/types/src/components/CommandsDialog/index.d.ts +3 -0
  19. package/dist/types/src/components/CommandsDialog/index.d.ts.map +1 -0
  20. package/dist/types/src/components/NavTree/NavTree.d.ts +8 -0
  21. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -0
  22. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +8 -0
  23. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -0
  24. package/dist/types/src/components/NavTree/index.d.ts +2 -0
  25. package/dist/types/src/components/NavTree/index.d.ts.map +1 -0
  26. package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
  27. package/dist/types/src/components/NavTreeContext.d.ts.map +1 -1
  28. package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +1 -1
  29. package/dist/types/src/components/{NavTreeItemAction.d.ts → NavTreeItem/NavTreeItemAction.d.ts} +2 -3
  30. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -0
  31. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +8 -0
  32. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/{NavTreeItemColumns.d.ts → NavTreeItem/NavTreeItemColumns.d.ts} +1 -1
  34. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -0
  35. package/dist/types/src/components/NavTreeItem/index.d.ts +3 -0
  36. package/dist/types/src/components/NavTreeItem/index.d.ts.map +1 -0
  37. package/dist/types/src/components/Sidebar/L0Menu.d.ts +13 -0
  38. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -0
  39. package/dist/types/src/components/Sidebar/L1Panel.d.ts +15 -0
  40. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -0
  41. package/dist/types/src/components/Sidebar/index.d.ts +3 -0
  42. package/dist/types/src/components/Sidebar/index.d.ts.map +1 -0
  43. package/dist/types/src/components/{UserAccountAvatar.d.ts → UserAccountAvatar/UserAccountAvatar.d.ts} +1 -1
  44. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -0
  45. package/dist/types/src/components/{UserAccountAvatar.stories.d.ts → UserAccountAvatar/UserAccountAvatar.stories.d.ts} +1 -2
  46. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -0
  47. package/dist/types/src/components/UserAccountAvatar/index.d.ts +2 -0
  48. package/dist/types/src/components/UserAccountAvatar/index.d.ts.map +1 -0
  49. package/dist/types/src/components/index.d.ts +0 -1
  50. package/dist/types/src/components/index.d.ts.map +1 -1
  51. package/dist/types/src/components/types.d.ts +14 -15
  52. package/dist/types/src/components/types.d.ts.map +1 -1
  53. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  54. package/dist/types/src/hooks.d.ts.map +1 -1
  55. package/dist/types/src/testing/app-graph-builder.d.ts +11 -0
  56. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -0
  57. package/dist/types/src/testing/generator.d.ts +5 -4
  58. package/dist/types/src/testing/generator.d.ts.map +1 -1
  59. package/dist/types/src/testing/index.d.ts +1 -0
  60. package/dist/types/src/testing/index.d.ts.map +1 -1
  61. package/dist/types/src/testing/update-state.d.ts.map +1 -1
  62. package/dist/types/src/translations.d.ts +1 -1
  63. package/dist/types/src/util.d.ts +1 -1
  64. package/dist/types/src/util.d.ts.map +1 -1
  65. package/dist/types/tsconfig.tsbuildinfo +1 -1
  66. package/package.json +34 -31
  67. package/src/capabilities/intent-resolver.ts +4 -3
  68. package/src/capabilities/keyboard.ts +1 -1
  69. package/src/components/{CommandsDialog.tsx → CommandsDialog/CommandsDialog.tsx} +2 -2
  70. package/src/components/{CommandsTrigger.tsx → CommandsDialog/CommandsTrigger.tsx} +1 -1
  71. package/src/components/CommandsDialog/index.ts +6 -0
  72. package/src/components/NavTree/NavTree.stories.tsx +87 -0
  73. package/src/components/{NavTree.tsx → NavTree/NavTree.tsx} +24 -11
  74. package/src/components/NavTree/index.ts +5 -0
  75. package/src/components/NavTreeContainer.tsx +35 -16
  76. package/src/components/NavTreeContext.tsx +1 -1
  77. package/src/components/{NavTreeItemAction.stories.tsx → NavTreeItem/NavTreeItemAction.stories.tsx} +12 -6
  78. package/src/components/{NavTreeItemAction.tsx → NavTreeItem/NavTreeItemAction.tsx} +13 -14
  79. package/src/components/{NavTreeItemColumns.tsx → NavTreeItem/NavTreeItemColumns.tsx} +5 -5
  80. package/src/components/NavTreeItem/index.ts +6 -0
  81. package/src/components/{L0Menu.tsx → Sidebar/L0Menu.tsx} +182 -129
  82. package/src/components/{L1Panels.tsx → Sidebar/L1Panel.tsx} +29 -48
  83. package/src/components/Sidebar/index.ts +6 -0
  84. package/src/components/{UserAccountAvatar.stories.tsx → UserAccountAvatar/UserAccountAvatar.stories.tsx} +5 -5
  85. package/src/components/{UserAccountAvatar.tsx → UserAccountAvatar/UserAccountAvatar.tsx} +6 -6
  86. package/src/components/UserAccountAvatar/index.ts +5 -0
  87. package/src/components/index.ts +0 -1
  88. package/src/components/types.ts +13 -15
  89. package/src/testing/app-graph-builder.ts +158 -0
  90. package/src/testing/generator.ts +12 -9
  91. package/src/testing/index.ts +1 -0
  92. package/src/translations.ts +1 -1
  93. package/dist/lib/browser/chunk-FHOAKMRS.mjs.map +0 -7
  94. package/dist/lib/browser/intent-resolver-OBGGMBVJ.mjs.map +0 -7
  95. package/dist/types/src/components/CommandsDialog.d.ts.map +0 -1
  96. package/dist/types/src/components/CommandsTrigger.d.ts.map +0 -1
  97. package/dist/types/src/components/L0Menu.d.ts +0 -10
  98. package/dist/types/src/components/L0Menu.d.ts.map +0 -1
  99. package/dist/types/src/components/L1Panels.d.ts +0 -14
  100. package/dist/types/src/components/L1Panels.d.ts.map +0 -1
  101. package/dist/types/src/components/NavTree.d.ts +0 -5
  102. package/dist/types/src/components/NavTree.d.ts.map +0 -1
  103. package/dist/types/src/components/NavTree.stories.d.ts +0 -7
  104. package/dist/types/src/components/NavTree.stories.d.ts.map +0 -1
  105. package/dist/types/src/components/NavTreeItemAction.d.ts.map +0 -1
  106. package/dist/types/src/components/NavTreeItemAction.stories.d.ts +0 -41
  107. package/dist/types/src/components/NavTreeItemAction.stories.d.ts.map +0 -1
  108. package/dist/types/src/components/NavTreeItemColumns.d.ts.map +0 -1
  109. package/dist/types/src/components/UserAccountAvatar.d.ts.map +0 -1
  110. package/dist/types/src/components/UserAccountAvatar.stories.d.ts.map +0 -1
  111. package/dist/types/src/stories/Graph.stories.d.ts +0 -7
  112. package/dist/types/src/stories/Graph.stories.d.ts.map +0 -1
  113. package/dist/types/src/stories/StorybookNavTree.d.ts +0 -4
  114. package/dist/types/src/stories/StorybookNavTree.d.ts.map +0 -1
  115. package/src/components/NavTree.stories.tsx +0 -107
  116. package/src/stories/Graph.stories.tsx +0 -130
  117. package/src/stories/StorybookNavTree.tsx +0 -63
  118. /package/dist/lib/browser/{react-surface-DWMOF2TM.mjs.map → react-surface-BVZN7664.mjs.map} +0 -0
  119. /package/dist/types/src/components/{CommandsDialog.d.ts → CommandsDialog/CommandsDialog.d.ts} +0 -0
  120. /package/dist/types/src/components/{CommandsTrigger.d.ts → CommandsDialog/CommandsTrigger.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/CommandsDialog/CommandsDialog.tsx", "../../../src/components/CommandsDialog/CommandsTrigger.tsx", "../../../src/util.ts", "../../../src/components/NavTreeContainer.tsx", "../../../src/components/NavTree/NavTree.tsx", "../../../src/hooks.ts", "../../../src/components/NavTreeContext.tsx", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/Sidebar/L0Menu.tsx", "../../../src/components/UserAccountAvatar/UserAccountAvatar.tsx", "../../../src/components/Sidebar/L1Panel.tsx", "../../../src/components/NavTreeItem/NavTreeItemAction.tsx", "../../../src/components/NavTreeItem/NavTreeItemColumns.tsx", "../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { createIntent, LayoutAction, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\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 { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n\n // Traverse graph.\n // TODO(burdon): Factor out commonality with shortcut dialog.\n const allActions = useMemo(() => {\n // TODO(burdon): Get from navtree (not keyboard).\n const current = Keyboard.singleton.getCurrentContext();\n const actionMap = new Set<string>();\n const actions: ActionLike[] = [];\n graph?.traverse({\n visitor: (node, path) => {\n if (\n (isAction(node) || isActionGroup(node)) &&\n !actionMap.has(node.id) &&\n current.startsWith(path.slice(0, -1).join('/'))\n ) {\n actionMap.add(node.id);\n actions.push(node);\n }\n },\n });\n\n actions.sort((a, b) => {\n return toLocalizedString(a.properties.label, t)\n ?.toLowerCase()\n .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());\n });\n\n // 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(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ parent: node, caller: KEY_BINDING }));\n });\n }}\n classNames='flex items-center gap-2'\n disabled={action.properties.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon} size={4} />\n <span className='grow truncate'>{label}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n </SearchList.Root>\n\n <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 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='m-1 pli-1 lg:pli-2'\n onClick={() =>\n dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n )\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <MagnifyingGlass className={getSize(5)} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n isActionLike,\n} from '@dxos/app-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type FlattenedActions, type NavTreeItemGraphNode } from './types';\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 === 'list-item-primary') {\n return -1;\n }\n\n return 1;\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(isNonNullable) as NavTreeItemGraphNode[];\n};\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\nexport const l0ItemType = (item: Node<any>) => {\n if (item.properties.disposition === 'collection') {\n return 'collection';\n } else if (isActionLike(item)) {\n return 'action';\n } else if (item.properties.disposition === 'navigation') {\n return 'link';\n } else {\n return 'tab';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { extractInstruction, type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { untracked } from '@preact/signals-core';\nimport React, { memo, useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n LayoutAction,\n Surface,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n useLayout,\n} from '@dxos/app-framework';\nimport { isAction, isActionLike, type Node } from '@dxos/app-graph';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { isEchoObject, isSpace } from '@dxos/react-client/echo';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { isTreeData, type TreeData, type PropsFromTreeItem } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove } from '@dxos/util';\n\nimport { NAV_TREE_ITEM, NavTree } from './NavTree';\nimport { NavTreeContext } from './NavTreeContext';\nimport { type NavTreeContextValue } from './types';\nimport { NavTreeCapabilities } from '../capabilities';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItemGraphNode } from '../types';\nimport {\n expandActions,\n expandChildren,\n getActions as naturalGetActions,\n getChildren,\n getParent,\n resolveMigrationOperation,\n expandChildrenAndActions,\n} from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderItemEnd = ({ node, open }: { node: Node; open: boolean }) => (\n <Surface role='navtree-item-end' data={{ id: node.id, subject: node.data, open }} limit={1} />\n);\n\nconst getChildrenFilter = (node: Node): node is Node =>\n untracked(() => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE);\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n topbar?: boolean;\n} & Pick<NavTreeContextValue, 'tab'>;\n\nexport const NavTreeContainer = memo(({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => {\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);\n const layout = useLayout();\n const { navigationSidebarState } = useSidebars(NAVTREE_PLUGIN);\n\n const getActions = useCallback((node: Node) => naturalGetActions(graph, node), [graph]);\n\n const getItems = useCallback(\n (node?: Node, disposition?: string) => {\n return graph.nodes(node ?? graph.root, {\n filter: (node): node is Node => {\n return untracked(() => {\n if (\n !disposition &&\n (node.properties.disposition === 'hidden' || node.properties.disposition === 'alternate-tree')\n ) {\n return false;\n } else if (!disposition) {\n const action = isAction(node);\n return !action || node.properties.disposition === 'item';\n } else {\n return node.properties.disposition === disposition;\n }\n });\n },\n });\n },\n [graph],\n );\n\n const getProps = useCallback(\n (node: Node, path: string[]): PropsFromTreeItem => {\n const children = getChildren(graph, node, getChildrenFilter, path);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n return {\n id: node.id,\n label: node.properties.label ?? node.id,\n parentOf,\n icon: node.properties.icon,\n disabled: node.properties.disabled,\n className: mx(node.properties.modified && 'italic', node.properties.className),\n headingClassName: node.properties.headingClassName,\n testId: node.properties.testId,\n };\n },\n [graph],\n );\n\n const loadDescendents = useCallback(\n (node: Node) => {\n 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 handleOpenChange = useCallback(\n ({ item: { id }, path, open }: { item: Node; path: string[]; open: boolean }) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n setItem(path, 'open', open);\n\n if (graph) {\n const node = graph.findNode(id);\n return node && expandChildrenAndActions(graph, node as NavTreeItemGraphNode);\n }\n },\n [graph],\n );\n\n const handleTabChange = useCallback(\n async (node: NavTreeItemGraphNode) => {\n await dispatch(\n createIntent(LayoutAction.UpdateSidebar, {\n part: 'sidebar',\n options: {\n state:\n node.id === tab\n ? navigationSidebarState === 'expanded'\n ? isLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n },\n }),\n );\n\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: node.id }));\n\n // Open the first item if the workspace is empty.\n if (layout.active.length === 0) {\n const [item] = getItems(node).filter((node) => !isActionLike(node));\n if (item && item.data) {\n await dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] }));\n }\n }\n },\n [dispatch, layout.active, tab, navigationSidebarState, isLg],\n );\n\n const canDrop = useCallback((source: TreeData, target: TreeData) => {\n const sourceNode = source.item as Node;\n const targetNode = target.item as Node;\n if (isSpace(targetNode.data)) {\n // TODO(wittjosiah): Find a way to only allow space as source for rearranging.\n return isEchoObject(sourceNode.data) || isSpace(sourceNode.data);\n } else if (isEchoObject(targetNode.data)) {\n return isEchoObject(sourceNode.data);\n } else {\n return false;\n }\n }, []);\n\n const handleSelect = useCallback(\n ({ item: node, path, option }: { item: Node; path: string[]; option: boolean }) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parent] = graph.nodes(node, { relation: 'inbound' });\n void (parent && node.data({ parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n const current = isCurrent(path, node);\n if (!current) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [node.id],\n options: { key: node.properties.key },\n }),\n );\n } else if (option) {\n void dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [node.id], options: { state: false } }),\n );\n } else {\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: node.id }));\n }\n\n const defaultAction = graph.actions(node).find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n void dispatch(createIntent(LayoutAction.UpdateSidebar, { part: 'sidebar', options: { state: 'closed' } }));\n }\n },\n [graph, dispatch, isCurrent, isLg],\n );\n\n const handleBack = useCallback(\n () => dispatch(createIntent(LayoutAction.RevertWorkspace, { part: 'workspace', options: { revert: true } })),\n [dispatch],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isTreeData(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\n const target = location.current.dropTargets[0];\n const instruction: Instruction | null = extractInstruction(target.data);\n if (instruction !== null && instruction.type !== 'instruction-blocked') {\n const sourceNode = source.data.item as NavTreeItemGraphNode;\n const targetNode = target.data.item as NavTreeItemGraphNode;\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n const operation =\n sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join() && instruction.type !== 'make-child'\n ? 'rearrange'\n : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n const sourceItems = getItems(sourceParent);\n const targetItems = getItems(targetParent);\n const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? undefined\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n switch (operation) {\n case 'rearrange': {\n const nextItems = sourceItems.map(({ data }) => data);\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems);\n break;\n }\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\n case 'transfer': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n if (!target?.properties.onTransferStart || !sourceParent?.properties.onTransferEnd) {\n break;\n }\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [graph]);\n\n const setAlternateTree = useCallback(\n (path: string[], open: boolean) => {\n setItem(path, 'alternateTree', open);\n },\n [setItem],\n );\n\n const navTreeContextValue = useMemo(\n () => ({\n tab,\n getActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getItems,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n onTabChange: handleTabChange,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onBack: handleBack,\n }),\n [\n tab,\n getActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getItems,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n handleTabChange,\n handleOpenChange,\n handleSelect,\n handleBack,\n ],\n );\n\n return (\n <NavTreeContext.Provider value={navTreeContextValue}>\n <NavTree id={graph.root.id} root={graph.root} open={layout.sidebarOpen} />\n </NavTreeContext.Provider>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type TreeProps } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { byPosition } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { type NavTreeItemGraphNode } from '../../types';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { L0Menu, L1Panels, type L1PanelsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Pick<TreeProps<NavTreeItemGraphNode>, 'id' | 'root'> & Pick<L1PanelsProps, 'open'>;\n\nexport const NavTree = ({ id, root, ...props }: NavTreeProps) => {\n const { tab, getItems, onBack } = useNavTreeContext();\n const topLevelActions = getItems(root, 'menu').toSorted((a, b) => byPosition(a.properties, b.properties));\n const topLevelCollections = getItems(root, 'collection');\n const topLevelWorkspaces = getItems(root, 'workspace');\n const topLevelNavigation = getItems(root, 'navigation');\n const l0Items = useMemo(\n () => [\n // prettier-ignore\n ...topLevelCollections,\n ...topLevelWorkspaces,\n ...topLevelNavigation,\n ],\n [topLevelCollections, topLevelWorkspaces, topLevelNavigation],\n );\n const pinnedItems = getItems(root, 'pin-end').toSorted((a, b) => byPosition(a.properties, b.properties));\n const userAccountItem = getItems(root, 'user-account')[0];\n const topLevelItems = useMemo(\n () => [\n // prettier-ignore\n ...l0Items,\n ...pinnedItems,\n ...(userAccountItem ? [userAccountItem] : []),\n ],\n [l0Items, pinnedItems, userAccountItem],\n );\n\n useLoadDescendents(root);\n const path = useMemo(() => [id], [id]);\n\n return (\n // NOTE(thure): 74px (rather than rem) is intentional in order to match the size of macOS windowing controls\n <Tabs.Root value={tab} orientation='vertical' verticalVariant='stateless' classNames='relative'>\n <L0Menu\n menuActions={topLevelActions}\n topLevelItems={l0Items}\n pinnedItems={pinnedItems}\n userAccountItem={userAccountItem}\n path={path}\n parent={root}\n />\n <L1Panels topLevelItems={topLevelItems} path={path} currentItemId={tab} onBack={onBack} {...props} />\n </Tabs.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useNavTreeContext } from './components';\n\nexport const useLoadDescendents = (root?: Node) => {\n const { loadDescendents } = useNavTreeContext();\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n if (root) {\n void loadDescendents?.(root);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [root]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type NavTreeContextValue } from './types';\n\nexport const NavTreeContext = createContext<NavTreeContextValue | null>(null);\n\nexport const useNavTreeContext = () => useContext(NavTreeContext) ?? raise(new Error('Missing NavTreeContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n useEffect(() => {\n document.title = node ? toLocalizedString(node.properties.label, t) : t('current app name', { ns: 'appkit' });\n }, [node?.properties?.label]);\n return null;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport React, {\n forwardRef,\n type MouseEvent,\n type PropsWithChildren,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport {\n Icon,\n IconButton,\n ListItem,\n ScrollArea,\n Tooltip,\n toLocalizedString,\n useMediaQuery,\n useTranslation,\n} from '@dxos/react-ui';\nimport { MenuProvider, DropdownMenu, type MenuItem } from '@dxos/react-ui-menu';\nimport type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, getFirstTwoRenderableChars } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { UserAccountAvatar } from '../UserAccountAvatar';\n\n//\n// L0Item\n//\n\ntype L0ItemData = {\n id: L0ItemProps['item']['id'];\n type: 'l0Item';\n};\n\ntype L0ItemRootProps = {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\ntype L0ItemProps = L0ItemRootProps & {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n pinned?: boolean;\n onRearrange?: StackItemRearrangeHandler<L0ItemData>;\n};\n\nconst useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {\n const { tab, isCurrent, onSelect, onTabChange } = useNavTreeContext();\n const [isLg] = useMediaQuery('lg', { ssr: false });\n\n return useCallback(\n (event: MouseEvent) => {\n switch (type) {\n case 'action': {\n const {\n data: invoke,\n properties: { caller },\n } = item;\n\n return invoke?.(caller ? { node: parent, caller } : { node: parent });\n }\n\n case 'tab':\n return onTabChange?.(item);\n\n case 'link':\n return onSelect?.({ item, path, current: !isCurrent(path, item), option: event.altKey });\n }\n },\n [item, parent, type, tab, isCurrent, onSelect, onTabChange, isLg],\n );\n};\n\nconst l0Breakpoints: Record<string, string> = {\n lg: 'hidden lg:grid',\n};\n\nconst L0ItemRoot = forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, children }, forwardedRef) => {\n const { getProps } = useNavTreeContext();\n const { id, testId } = getProps?.(item, path) ?? {};\n const type = l0ItemType(item);\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const localizedString = toLocalizedString(item.properties.label, t);\n\n const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);\n const rootProps =\n type === 'tab'\n ? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : type !== 'collection'\n ? { onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : { onClick: handleClick };\n\n const Root = type === 'collection' ? 'h2' : type === 'tab' ? Tabs.TabPrimitive : 'button';\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Root\n {...(rootProps as any)}\n data-type={type}\n className={mx(\n 'group/l0item flex w-full justify-center items-center relative data[type!=\"collection\"]:cursor-pointer app-no-drag dx-focus-ring-group',\n l0Breakpoints[item.properties.l0Breakpoint],\n )}\n ref={forwardedRef}\n >\n {children}\n </Root>\n </Tooltip.Trigger>\n );\n },\n);\n\nconst L0Avator = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const type = l0ItemType(item);\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n const localizedString = toLocalizedString(item.properties.label, t);\n const avatarValue = useMemo(\n () => (type === 'tab' ? getFirstTwoRenderableChars(localizedString).join('').toUpperCase() : []),\n [type, item.properties.label, t],\n );\n\n return (\n <span role='img' className='place-self-center text-xl font-light' {...hueFgStyle}>\n {avatarValue}\n </span>\n );\n};\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const itemElement = useRef<HTMLElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const type = l0ItemType(item);\n const localizedString = toLocalizedString(item.properties.label, t);\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n\n useLayoutEffect(() => {\n // NOTE(thure): This is copied from StackItem, perhaps this should be DRYed out.\n if (!itemElement.current || !onRearrange) {\n return;\n }\n\n return combine(\n draggable({\n element: itemElement.current,\n getInitialData: () => ({ id: item.id, type: 'l0Item' }) satisfies L0ItemData,\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n const element = source.element.querySelector('[data-frame]') as HTMLElement;\n scrollJustEnoughIntoView({ element });\n const { x, y } = preserveOffsetOnSource({ element, input: location.current.input })({\n container: (element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n },\n onDrop: () => {\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n },\n }),\n dropTargetForElements({\n element: itemElement.current,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type: 'l0Item' },\n { input, element, allowedEdges: ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as L0ItemData, self.data as L0ItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [item, onRearrange]);\n\n return (\n <L0ItemRoot ref={itemElement} item={item} parent={parent} path={path}>\n <div\n role='none'\n data-frame={true}\n className={mx(\n 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded',\n // TODO(burdon): Create reusable button/component and/or create var for size.\n pinned\n ? 'bg-transparent w-[50px] p-2 group-hover/l0item:bg-groupSurface'\n : 'bg-groupSurface w-[50px] h-[50px]',\n )}\n {...(hue && { style: { background: `var(--dx-${hue}Surface)` } })}\n >\n {(item.properties.icon && <Icon icon={item.properties.icon} size={pinned ? 5 : 6} {...hueFgStyle} />) ||\n (type === 'tab' && item.properties.disposition !== 'pin-end' && <L0Avator item={item} />)}\n </div>\n <div\n role='none'\n className='hidden group-aria-selected/l0item:block absolute inline-start-0 inset-block-4 is-1 bg-accentSurface rounded-ie'\n />\n <span id={`${item.id}__label`} className='sr-only'>\n {localizedString}\n </span>\n {onRearrange && closestEdge && <ListItem.DropIndicator edge={closestEdge} />}\n </L0ItemRoot>\n );\n};\n\n//\n// L0Collection\n//\n\nconst L0Collection = ({ item, path }: L0ItemProps) => {\n const navTreeContext = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = navTreeContext.getItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = navTreeContext.getProps?.(item, path) ?? {};\n const handleRearrange = useCallback<StackItemRearrangeHandler<L0ItemData>>(\n (source, target, closestEdge) => {\n invariant(item.properties.onRearrangeChildren);\n const sourceIndex = collectionItems.findIndex((i) => i.id === source.id);\n const targetIndex = collectionItems.findIndex((i) => i.id === target.id);\n const insertIndex =\n source.id === target.id\n ? sourceIndex\n : targetIndex +\n (sourceIndex < targetIndex ? (closestEdge === 'top' ? -1 : 0) : closestEdge === 'bottom' ? 1 : 0);\n const nextOrder = arrayMove([...collectionItems], sourceIndex, insertIndex);\n return item.properties.onRearrangeChildren(nextOrder);\n },\n [collectionItems, item.properties.onRearrangeChildren],\n );\n\n return (\n <div\n role='group'\n className='contents group/l0c'\n aria-labelledby={`${item.id}__label`}\n data-itemid={id}\n data-testid={testId}\n >\n {collectionItems.map((collectionItem) => (\n <L0Item\n key={collectionItem.id}\n item={collectionItem}\n parent={item}\n path={groupPath}\n {...(item.properties.onRearrangeChildren && { onRearrange: handleRearrange })}\n />\n ))}\n </div>\n );\n};\n\n//\n// L0Menu\n//\n\nexport type L0MenuProps = {\n menuActions: MenuItem[];\n topLevelItems: Node<any>[];\n pinnedItems: Node<any>[];\n userAccountItem: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\nexport const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountItem, parent, path }: L0MenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <Tabs.Tablist\n classNames={[\n 'group/l0 absolute z-[1] inset-block-0 inline-start-0 rounded-is-lg',\n 'grid grid-cols-[var(--l0-size)] grid-rows-[var(--rail-size)_1fr_min-content_var(--l0-size)] gap-1 contain-layout',\n '!is-[--l0-size] bg-baseSurface border-ie border-separator app-drag pbe-[env(safe-area-inset-bottom)]',\n ]}\n >\n <div role='none' className='flex justify-center p-1'>\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions}>\n <DropdownMenu.Trigger asChild>\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n {/* TODO(burdon): Replace with Sigil. */}\n <IconButton\n iconOnly\n icon='ph--dots-three--regular'\n size={5}\n label={t('app menu label')}\n classNames='w-[50px] _bg-primary-500'\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n </div>\n\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <div\n role='none'\n className={mx([\n 'flex flex-col gap-2',\n '[body[data-platform=\"darwin\"]_&]:pbs-[calc(30px+0.25rem)]',\n '[body[data-platform=\"ios\"]_&]:pbs-[max(env(safe-area-inset-top),0.25rem)]',\n ])}\n >\n {topLevelItems.map((item) => {\n if (l0ItemType(item) === 'collection') {\n return <L0Collection key={item.id} item={item} parent={parent} path={path} />;\n } else {\n return <L0Item key={item.id} item={item} parent={parent} path={path} />;\n }\n })}\n </div>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-action] pbs-2'>\n {pinnedItems\n .filter((item) => l0ItemType(item) !== 'collection')\n .map((item) => (\n <L0Item key={item.id} item={item} parent={parent} path={path} pinned />\n ))}\n </div>\n\n {userAccountItem && (\n <div role='none' className='grid app-no-drag'>\n <L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>\n <UserAccountAvatar\n userId={userAccountItem.properties.userId}\n hue={userAccountItem.properties.hue}\n emoji={userAccountItem.properties.emoji}\n status={userAccountItem.properties.status}\n size={11}\n />\n </L0ItemRoot>\n </div>\n )}\n\n <div\n role='none'\n className='hidden [body[data-platform=\"darwin\"]_&]:block absolute block-start-0 is-[calc(var(--l0-size)-1px)] bs-[calc(40px+0.25rem)]'\n style={{\n background:\n 'linear-gradient(to bottom, var(--dx-baseSurface) 0%, var(--dx-baseSurface) 70%, transparent 100%)',\n }}\n />\n </Tabs.Tablist>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Avatar, type AvatarStatus, type Size } from '@dxos/react-ui';\nimport { hexToFallback } from '@dxos/util';\n\nexport type UserAccountAvatarProps = {\n size?: Size;\n userId?: string;\n hue?: string;\n emoji?: string;\n status?: AvatarStatus;\n};\n\nexport const UserAccountAvatar = ({ size, userId, hue, emoji, status }: UserAccountAvatarProps) => {\n const fallbackValue = hexToFallback(userId ?? '0');\n\n return (\n <div className='grid place-items-center' data-joyride='welcome/account'>\n <Avatar.Root>\n <Avatar.Content\n variant='circle'\n size={size ?? 12}\n status={status ?? 'active'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n data-testid='treeView.userAccount'\n />\n </Avatar.Root>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { Button, type ButtonProps, Icon, IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\nimport { byPosition } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem';\n\nconst headingBackButtonLabel = 'absolute inset-0 min-is-0 truncate flex items-center pis-6';\n\n// TODO(burdon): Figure out better L1 back navigation.\nconst HeadingBackButton = ({ title, onClick }: { title: string } & Pick<ButtonProps, 'onClick'>) => {\n return (\n <Button\n variant='ghost'\n classNames='pli-1 flex-1 relative group text-start justify-start bs-[--rail-action] font-normal'\n onClick={onClick}\n >\n <Icon icon='ph--caret-left--bold' size={3} />\n <span className={mx(headingBackButtonLabel)}>{title}</span>\n </Button>\n );\n};\n\nexport type L1PanelProps = {\n open?: boolean;\n item: Node<any>;\n path: string[];\n currentItemId: string;\n onBack?: () => void;\n};\n\nconst L1Panel = ({ open, item, path, currentItemId, onBack }: L1PanelProps) => {\n const { isAlternateTree, setAlternateTree, ...navTreeContext } = useNavTreeContext();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const alternateTree = navTreeContext.getItems(item, 'alternate-tree')[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const handleOpen = useCallback(() => setAlternateTree?.(alternatePath, true), [alternatePath, setAlternateTree]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const alternateGetItems = useCallback(\n (node?: Node, disposition?: string) => {\n const items = navTreeContext.getItems(node, disposition);\n if (node === alternateTree) {\n // TODO(wittjosiah): Sorting is expensive, limit to necessary items for now.\n return items.toSorted((a, b) => byPosition(a.properties, b.properties));\n }\n return items;\n },\n [navTreeContext, alternateTree],\n );\n\n const handleBack = useCallback(() => {\n if (isAlternate) {\n setAlternateTree?.(alternatePath, false);\n } else {\n onBack?.();\n }\n }, [isAlternate, onBack, alternatePath, setAlternateTree]);\n\n const title = toLocalizedString(item.properties.label, t);\n const backCapable = item.id.startsWith('!') || isAlternate;\n\n return (\n <Tabs.Tabpanel\n key={item.id}\n value={item.id}\n classNames={[\n 'absolute inset-block-0 inline-end-0',\n 'is-[calc(100%-var(--l0-size))] lg:is-[--l1-size] grid-cols-1 grid-rows-[var(--rail-size)_1fr]',\n 'pbs-[env(safe-area-inset-top)]',\n item.id === currentItemId && 'grid',\n ]}\n tabIndex={-1}\n aria-label={title}\n {...(!open && { inert: 'true' })}\n >\n {item.id === currentItemId && (\n <>\n <h2 className='flex items-center border-be border-separator app-drag pis-1'>\n {backCapable ? (\n <HeadingBackButton title={title} onClick={handleBack} />\n ) : (\n <span className='flex-1 truncate min-is-0 pis-6'>{title}</span>\n )}\n {alternateTree && !isAlternate && (\n <IconButton\n variant='ghost'\n classNames={mx('shrink-0', hoverableControlItem, hoverableOpenControlItem, 'pli-2 pointer-fine:pli-1')}\n iconOnly\n size={5}\n density='coarse'\n icon={alternateTree.properties.icon ?? 'ph--placeholder--regular'}\n label={toLocalizedString(alternateTree.properties.label ?? alternateTree.id, t)}\n data-testid='treeView.alternateTreeButton'\n onClick={handleOpen}\n />\n )}\n <NavTreeItemColumns path={path} item={item} open density='coarse' />\n </h2>\n <div role='none' className='overflow-y-auto'>\n {isAlternate ? (\n <Tree\n {...navTreeContext}\n getItems={alternateGetItems}\n id={alternateTree.id}\n root={alternateTree}\n path={alternatePath}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n ) : (\n <Tree\n {...navTreeContext}\n id={item.id}\n root={item}\n path={path}\n levelOffset={5}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n )}\n </div>\n </>\n )}\n </Tabs.Tabpanel>\n );\n};\n\nconst L1PanelCollection = ({ item, path, ...props }: L1PanelProps) => {\n const { getItems } = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = getItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n return (\n <>\n {collectionItems\n .filter((item) => l0ItemType(item) === 'tab')\n .map((item) => (\n <L1Panel key={item.id} item={item} path={groupPath} {...props} />\n ))}\n </>\n );\n};\n\nexport type L1PanelsProps = Pick<L1PanelProps, 'open' | 'currentItemId' | 'onBack'> & {\n topLevelItems: Node<any>[];\n path: string[];\n};\n\nexport const L1Panels = ({ topLevelItems, onBack, ...props }: L1PanelsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n switch (type) {\n case 'collection':\n return <L1PanelCollection key={item.id} item={item} {...props} />;\n case 'tab':\n return <L1Panel key={item.id} item={item} {...props} onBack={onBack} />;\n default:\n return null;\n }\n })}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type MutableRefObject, useRef } from 'react';\n\nimport { type Action, type Node } from '@dxos/app-graph';\nimport { useTranslation, toLocalizedString, IconButton, useDensityContext } from '@dxos/react-ui';\nimport { DropdownMenu, MenuProvider, type MenuItem } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { type ActionProperties } from '../../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Action[];\n suppressNextTooltip?: MutableRefObject<boolean>;\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nconst fineActionButtonProps = {\n size: 4 as const,\n density: 'fine' as const,\n};\nconst coarseActionButtonProps = {\n size: 5 as const,\n density: 'coarse' as const,\n};\n\nexport const NavTreeItemActionDropdownMenu = ({\n parent,\n label,\n icon,\n testId,\n menuActions,\n caller,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const suppressNextTooltip = useRef<boolean>(false);\n const density = useDensityContext();\n return (\n <MenuProvider>\n <DropdownMenu.Root\n group={parent}\n items={menuActions as MenuItem[]}\n caller={caller}\n suppressNextTooltip={suppressNextTooltip}\n >\n <DropdownMenu.Trigger asChild>\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n classNames={mx('shrink-0 pli-2 pointer-fine:pli-1', hoverableControlItem, hoverableOpenControlItem)}\n variant='ghost'\n icon={icon ?? fallbackIcon}\n iconOnly\n label={toLocalizedString(label, t)}\n data-testid={testId}\n suppressNextTooltip={suppressNextTooltip}\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },\n data: invoke,\n baseLabel,\n}: Action & { parent: Node; onAction?: (action: Action) => void; baseLabel: string }) => {\n const density = useDensityContext();\n return (\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n variant={variant}\n classNames={mx(\n 'shrink-0',\n hoverableControlItem,\n hoverableOpenControlItem,\n iconOnly ? 'pli-2 pointer-fine:pli-1' : 'p-2 pointer-fine:p-2 mie-1',\n )}\n icon={icon ?? fallbackIcon}\n iconOnly={iconOnly}\n label={baseLabel}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { parent, caller } : { parent });\n }}\n data-testid={testId}\n />\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={node} {...menuActions[0]} />\n ) : (\n <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={node} menuActions={menuActions} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, memo } from 'react';\n\nimport { isAction } from '@dxos/app-graph';\nimport { DensityProvider, Popover, toLocalizedString, Treegrid, useTranslation } from '@dxos/react-ui';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport type { NavTreeItemColumnsProps } from '../types';\n\nexport const NavTreeItemColumns = memo(({ path, item, open, density = 'fine' }: NavTreeItemColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { getActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n\n const { actions: _actions, groupedActions } = getActions(item);\n const [primaryAction, ...secondaryActions] = _actions.toSorted((a, b) =>\n a.properties?.disposition === 'list-item-primary' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : _actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((action) => !action.properties?.hidden);\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n useLoadDescendents(item);\n useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);\n\n return (\n <DensityProvider density={density}>\n <div role='none' className='contents app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={item}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction.id]}\n menuType={primaryAction.properties?.menuType}\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n <ActionRoot>\n {actions.length > 0 ? (\n <NavTreeItemAction\n testId={`navtree.treeItem.actionsLevel${level}`}\n label={t('tree item actions label')}\n icon='ph--dots-three-vertical--regular'\n parent={item}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {ItemEnd && <ItemEnd node={item} open={open} />}\n </div>\n </DensityProvider>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Keyboard = lazy(() => import('./keyboard'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const State = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "useState", "createIntent", "LayoutAction", "useAppGraph", "useIntentDispatcher", "isActionGroup", "isAction", "Keyboard", "keySymbols", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "id", "startsWith", "slice", "join", "add", "push", "sort", "a", "b", "toLocalizedString", "properties", "label", "toLowerCase", "localeCompare", "group", "find", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "setTimeout", "nodes", "relation", "data", "parent", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "MagnifyingGlass", "React", "createIntent", "LayoutAction", "useIntentDispatcher", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "span", "className", "MagnifyingGlass", "getSize", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "isActionLike", "isNonNullable", "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", "getChildren", "filter", "map", "nextPath", "includes", "undefined", "isNonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "useMemo", "createIntent", "LayoutAction", "Surface", "useAppGraph", "useCapability", "useIntentDispatcher", "useLayout", "isAction", "isActionLike", "PLANK_COMPANION_TYPE", "isEchoObject", "isSpace", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "React", "useMemo", "Tabs", "byPosition", "useEffect", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "useLoadDescendents", "root", "loadDescendents", "useNavTreeContext", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "attachClosestEdge", "extractClosestEdge", "React", "forwardRef", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "invariant", "Icon", "IconButton", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "MenuProvider", "DropdownMenu", "Tabs", "mx", "arrayMove", "getFirstTwoRenderableChars", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "React", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "tab", "isCurrent", "onSelect", "onTabChange", "useNavTreeContext", "isLg", "useMediaQuery", "ssr", "useCallback", "event", "data", "invoke", "properties", "caller", "node", "current", "option", "altKey", "l0Breakpoints", "lg", "L0ItemRoot", "forwardRef", "children", "forwardedRef", "getProps", "id", "testId", "l0ItemType", "itemPath", "useMemo", "t", "useTranslation", "NAVTREE_PLUGIN", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "Root", "Tabs", "TabPrimitive", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0Avator", "hue", "hueFgStyle", "style", "color", "avatarValue", "getFirstTwoRenderableChars", "join", "toUpperCase", "span", "role", "L0Item", "pinned", "onRearrange", "itemElement", "useRef", "closestEdge", "setEdge", "useState", "useLayoutEffect", "combine", "draggable", "element", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "source", "location", "document", "body", "setAttribute", "querySelector", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "input", "container", "offsetParent", "onDragStart", "removeAttribute", "closest", "onDrop", "dropTargetForElements", "getData", "attachClosestEdge", "allowedEdges", "onDragEnter", "self", "extractClosestEdge", "onDrag", "onDragLeave", "div", "data-frame", "background", "icon", "Icon", "size", "disposition", "ListItem", "DropIndicator", "edge", "L0Collection", "navTreeContext", "useLoadDescendents", "collectionItems", "getItems", "groupPath", "handleRearrange", "target", "invariant", "onRearrangeChildren", "sourceIndex", "findIndex", "i", "targetIndex", "insertIndex", "nextOrder", "arrayMove", "aria-labelledby", "data-itemid", "data-testid", "map", "collectionItem", "key", "L0Menu", "menuActions", "topLevelItems", "pinnedItems", "userAccountItem", "Tablist", "classNames", "MenuProvider", "DropdownMenu", "group", "items", "IconButton", "iconOnly", "ScrollArea", "Viewport", "Scrollbar", "orientation", "Thumb", "filter", "UserAccountAvatar", "userId", "emoji", "status", "React", "useCallback", "useMemo", "Button", "Icon", "IconButton", "toLocalizedString", "useTranslation", "Tree", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "mx", "byPosition", "React", "useRef", "useTranslation", "toLocalizedString", "IconButton", "useDensityContext", "DropdownMenu", "MenuProvider", "hoverableControlItem", "hoverableOpenControlItem", "mx", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "NAVTREE_PLUGIN", "suppressNextTooltip", "useRef", "useDensityContext", "React", "MenuProvider", "DropdownMenu", "Root", "group", "items", "Trigger", "asChild", "IconButton", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "variant", "iconOnly", "toLocalizedString", "data-testid", "NavTreeItemMonolithicAction", "properties", "disabled", "data", "invoke", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemAction", "monolithic", "node", "props", "monolithicAction", "length", "React", "Fragment", "memo", "isAction", "DensityProvider", "Popover", "toLocalizedString", "Treegrid", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "density", "t", "useTranslation", "NAVTREE_PLUGIN", "getActions", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "hidden", "ActionRoot", "NAV_TREE_ITEM", "id", "Popover", "Anchor", "Fragment", "useLoadDescendents", "undefined", "React", "DensityProvider", "div", "role", "className", "disabled", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "Treegrid", "Cell", "node", "headingBackButtonLabel", "HeadingBackButton", "title", "onClick", "React", "Button", "variant", "classNames", "Icon", "icon", "size", "span", "className", "mx", "L1Panel", "open", "item", "path", "currentItemId", "onBack", "isAlternateTree", "setAlternateTree", "navTreeContext", "useNavTreeContext", "t", "useTranslation", "NAVTREE_PLUGIN", "alternateTree", "getItems", "alternatePath", "useMemo", "id", "handleOpen", "useCallback", "isAlternate", "alternateGetItems", "node", "disposition", "items", "toSorted", "a", "b", "byPosition", "properties", "handleBack", "toLocalizedString", "label", "backCapable", "startsWith", "Tabs", "Tabpanel", "key", "value", "tabIndex", "aria-label", "inert", "h2", "IconButton", "hoverableControlItem", "hoverableOpenControlItem", "iconOnly", "density", "data-testid", "NavTreeItemColumns", "div", "role", "Tree", "root", "levelOffset", "gridTemplateColumns", "renderColumns", "draggable", "L1PanelCollection", "props", "useLoadDescendents", "collectionItems", "groupPath", "filter", "l0ItemType", "map", "L1Panels", "topLevelItems", "type", "NAV_TREE_ITEM", "NavTree", "id", "root", "props", "tab", "getItems", "onBack", "useNavTreeContext", "topLevelActions", "toSorted", "a", "b", "byPosition", "properties", "topLevelCollections", "topLevelWorkspaces", "topLevelNavigation", "l0Items", "useMemo", "pinnedItems", "userAccountItem", "topLevelItems", "useLoadDescendents", "path", "React", "Tabs", "Root", "value", "orientation", "verticalVariant", "classNames", "L0Menu", "menuActions", "parent", "L1Panels", "currentItemId", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Keyboard", "ReactSurface", "State", "NODE_TYPE", "renderItemEnd", "node", "open", "React", "Surface", "role", "data", "id", "subject", "limit", "getChildrenFilter", "untracked", "isActionLike", "type", "PLANK_COMPANION_TYPE", "NavTreeContainer", "memo", "tab", "popoverAnchorId", "topbar", "isLg", "useMediaQuery", "ssr", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "isOpen", "isCurrent", "isAlternateTree", "setItem", "useCapability", "NavTreeCapabilities", "State", "layout", "useLayout", "navigationSidebarState", "useSidebars", "NAVTREE_PLUGIN", "getActions", "useCallback", "naturalGetActions", "getItems", "disposition", "nodes", "root", "filter", "properties", "action", "isAction", "getProps", "path", "children", "getChildren", "parentOf", "length", "map", "undefined", "label", "icon", "disabled", "className", "mx", "modified", "headingClassName", "testId", "loadDescendents", "expandActions", "expandChildren", "then", "Promise", "all", "flatMap", "child", "handleOpenChange", "item", "findNode", "expandChildrenAndActions", "handleTabChange", "createIntent", "LayoutAction", "UpdateSidebar", "part", "options", "state", "SwitchWorkspace", "active", "Open", "canDrop", "source", "target", "sourceNode", "targetNode", "isSpace", "isEchoObject", "handleSelect", "option", "parent", "relation", "caller", "NAV_TREE_ITEM", "current", "key", "Close", "ScrollIntoView", "defaultAction", "actions", "find", "handleBack", "RevertWorkspace", "revert", "useEffect", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "instruction", "extractInstruction", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "nextItems", "arrayMove", "onRearrangeChildren", "onCopy", "onTransferStart", "onTransferEnd", "setAlternateTree", "navTreeContextValue", "useMemo", "onTabChange", "onOpenChange", "onSelect", "onBack", "NavTreeContext", "Provider", "value", "NavTree", "sidebarOpen"]
7
+ }
@@ -15,7 +15,7 @@ import {
15
15
  l0ItemType,
16
16
  resolveMigrationOperation,
17
17
  sortActions
18
- } from "./chunk-FHOAKMRS.mjs";
18
+ } from "./chunk-ZULGSU3L.mjs";
19
19
  import {
20
20
  NavTreeCapabilities
21
21
  } from "./chunk-TLQLMZXU.mjs";
@@ -41,7 +41,7 @@ var translations_default = [
41
41
  {
42
42
  "en-US": {
43
43
  [NAVTREE_PLUGIN]: {
44
- "back label": "Back",
44
+ "app menu label": "App menu",
45
45
  "open settings label": "Settings",
46
46
  "open commands label": "Search commands",
47
47
  "commands dialog title": "Commands",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/events.ts", "../../../src/NavTreePlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport namespace NavTreeEvents {\n export const StateReady = Events.createStateEvent(NAVTREE_PLUGIN);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n definePlugin,\n defineModule,\n Events,\n contributes,\n Capabilities,\n allOf,\n createIntent,\n LayoutAction,\n} from '@dxos/app-framework';\nimport { type TreeData } from '@dxos/react-ui-list';\n\nimport { AppGraphBuilder, IntentResolver, Keyboard, ReactSurface, State } from './capabilities';\nimport { NODE_TYPE } from './components';\nimport { NavTreeEvents } from './events';\nimport { meta } from './meta';\nimport translations from './translations';\n\nexport const NavTreePlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.LayoutReady,\n activatesAfter: [NavTreeEvents.StateReady],\n activate: State,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: NODE_TYPE,\n metadata: {\n parse: ({ item }: TreeData, type: string) => {\n switch (type) {\n case 'node':\n return item;\n case 'object':\n return item.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.data };\n }\n },\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/expose`,\n activatesOn: allOf(Events.DispatcherReady, Events.LayoutReady, NavTreeEvents.StateReady),\n activate: async (context) => {\n const layout = context.requestCapability(Capabilities.Layout);\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n if (dispatch && layout.active.length === 1) {\n await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: layout.active[0] }));\n }\n\n return [];\n },\n }),\n defineModule({\n id: `${meta.id}/module/keyboard`,\n activatesOn: Events.AppGraphReady,\n activate: Keyboard,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\n 'back label': 'Back',\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'tree item actions label': 'More actions',\n 'empty branch message': ' ',\n },\n },\n },\n];\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAc;;UAINC,gBAAAA;iBACFC,aAAaC,OAAOC,iBAAiBC,cAAAA;AACpD,GAFiBJ,kBAAAA,gBAAAA,CAAAA,EAAAA;;;ACJjB,SACEK,cACAC,cACAC,UAAAA,SACAC,aACAC,cACAC,OACAC,cACAC,oBACK;;;ACPP,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,cAAAA,GAAiB;QAChB,cAAc;QACd,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,kCAAkC;QAClC,mCAAmC;QACnC,2BAA2B;QAC3B,wBAAwB;MAC1B;IACF;EACF;;;;ADEK,IAAMC,gBAAgB,MAC3BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,gBAAgB;MAACC,cAAcC;;IAC/BC,UAAUC;EACZ,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOO;IACpBF,UAAU,MAAMG,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAd,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOY;IACpBP,UAAU,MACRG,YAAYC,aAAaI,UAAU;MACjCf,IAAIgB;MACJC,UAAU;QACRC,OAAO,CAAC,EAAEC,KAAI,GAAcC,SAAAA;AAC1B,kBAAQA,MAAAA;YACN,KAAK;AACH,qBAAOD;YACT,KAAK;AACH,qBAAOA,KAAKE;YACd,KAAK;AACH,qBAAO;gBAAErB,IAAI,GAAGmB,KAAKnB,EAAE;gBAASsB,QAAQH,KAAKE;cAAK;UACtD;QACF;MACF;IACF,CAAA;EACJ,CAAA;EACAtB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAasB,MAAMrB,QAAOsB,iBAAiBtB,QAAOC,aAAaE,cAAcC,UAAU;IACvFC,UAAU,OAAOkB,YAAAA;AACf,YAAMC,SAASD,QAAQE,kBAAkBhB,aAAaiB,MAAM;AAC5D,YAAM,EAAEC,iBAAiBC,SAAQ,IAAKL,QAAQE,kBAAkBhB,aAAaoB,gBAAgB;AAC7F,UAAID,YAAYJ,OAAOM,OAAOC,WAAW,GAAG;AAC1C,cAAMH,SAASI,aAAaC,aAAaC,QAAQ;UAAEC,MAAM;UAAcC,SAASZ,OAAOM,OAAO,CAAA;QAAG,CAAA,CAAA;MACnG;AAEA,aAAO,CAAA;IACT;EACF,CAAA;EACAjC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOqC;IACpBhC,UAAUiC;EACZ,CAAA;EACAzC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOuC;IACpBlC,UAAUmC;EACZ,CAAA;EACA3C,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOyC;IACpBpC,UAAUqC;EACZ,CAAA;EACA7C,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAO2C;IACpBtC,UAAUuC;EACZ,CAAA;CACD;",
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport namespace NavTreeEvents {\n export const StateReady = Events.createStateEvent(NAVTREE_PLUGIN);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n definePlugin,\n defineModule,\n Events,\n contributes,\n Capabilities,\n allOf,\n createIntent,\n LayoutAction,\n} from '@dxos/app-framework';\nimport { type TreeData } from '@dxos/react-ui-list';\n\nimport { AppGraphBuilder, IntentResolver, Keyboard, ReactSurface, State } from './capabilities';\nimport { NODE_TYPE } from './components';\nimport { NavTreeEvents } from './events';\nimport { meta } from './meta';\nimport translations from './translations';\n\nexport const NavTreePlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.LayoutReady,\n activatesAfter: [NavTreeEvents.StateReady],\n activate: State,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: NODE_TYPE,\n metadata: {\n parse: ({ item }: TreeData, type: string) => {\n switch (type) {\n case 'node':\n return item;\n case 'object':\n return item.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.data };\n }\n },\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/expose`,\n activatesOn: allOf(Events.DispatcherReady, Events.LayoutReady, NavTreeEvents.StateReady),\n activate: async (context) => {\n const layout = context.requestCapability(Capabilities.Layout);\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n if (dispatch && layout.active.length === 1) {\n await dispatch(createIntent(LayoutAction.Expose, { part: 'navigation', subject: layout.active[0] }));\n }\n\n return [];\n },\n }),\n defineModule({\n id: `${meta.id}/module/keyboard`,\n activatesOn: Events.AppGraphReady,\n activate: Keyboard,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\n 'app menu label': 'App menu',\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'tree item actions label': 'More actions',\n 'empty branch message': ' ',\n },\n },\n },\n];\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAc;;UAINC,gBAAAA;iBACFC,aAAaC,OAAOC,iBAAiBC,cAAAA;AACpD,GAFiBJ,kBAAAA,gBAAAA,CAAAA,EAAAA;;;ACJjB,SACEK,cACAC,cACAC,UAAAA,SACAC,aACAC,cACAC,OACAC,cACAC,oBACK;;;ACPP,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,cAAAA,GAAiB;QAChB,kBAAkB;QAClB,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,kCAAkC;QAClC,mCAAmC;QACnC,2BAA2B;QAC3B,wBAAwB;MAC1B;IACF;EACF;;;;ADEK,IAAMC,gBAAgB,MAC3BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,gBAAgB;MAACC,cAAcC;;IAC/BC,UAAUC;EACZ,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOO;IACpBF,UAAU,MAAMG,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAd,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOY;IACpBP,UAAU,MACRG,YAAYC,aAAaI,UAAU;MACjCf,IAAIgB;MACJC,UAAU;QACRC,OAAO,CAAC,EAAEC,KAAI,GAAcC,SAAAA;AAC1B,kBAAQA,MAAAA;YACN,KAAK;AACH,qBAAOD;YACT,KAAK;AACH,qBAAOA,KAAKE;YACd,KAAK;AACH,qBAAO;gBAAErB,IAAI,GAAGmB,KAAKnB,EAAE;gBAASsB,QAAQH,KAAKE;cAAK;UACtD;QACF;MACF;IACF,CAAA;EACJ,CAAA;EACAtB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAasB,MAAMrB,QAAOsB,iBAAiBtB,QAAOC,aAAaE,cAAcC,UAAU;IACvFC,UAAU,OAAOkB,YAAAA;AACf,YAAMC,SAASD,QAAQE,kBAAkBhB,aAAaiB,MAAM;AAC5D,YAAM,EAAEC,iBAAiBC,SAAQ,IAAKL,QAAQE,kBAAkBhB,aAAaoB,gBAAgB;AAC7F,UAAID,YAAYJ,OAAOM,OAAOC,WAAW,GAAG;AAC1C,cAAMH,SAASI,aAAaC,aAAaC,QAAQ;UAAEC,MAAM;UAAcC,SAASZ,OAAOM,OAAO,CAAA;QAAG,CAAA,CAAA;MACnG;AAEA,aAAO,CAAA;IACT;EACF,CAAA;EACAjC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOqC;IACpBhC,UAAUiC;EACZ,CAAA;EACAzC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOuC;IACpBlC,UAAUmC;EACZ,CAAA;EACA3C,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOyC;IACpBpC,UAAUqC;EACZ,CAAA;EACA7C,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAO2C;IACpBtC,UAAUuC;EACZ,CAAA;CACD;",
6
6
  "names": ["Events", "NavTreeEvents", "StateReady", "Events", "createStateEvent", "NAVTREE_PLUGIN", "definePlugin", "defineModule", "Events", "contributes", "Capabilities", "allOf", "createIntent", "LayoutAction", "NAVTREE_PLUGIN", "NavTreePlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "LayoutReady", "activatesAfter", "NavTreeEvents", "StateReady", "activate", "State", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "SetupMetadata", "Metadata", "NODE_TYPE", "metadata", "parse", "item", "type", "data", "object", "allOf", "DispatcherReady", "context", "layout", "requestCapability", "Layout", "dispatchPromise", "dispatch", "IntentDispatcher", "active", "length", "createIntent", "LayoutAction", "Expose", "part", "subject", "AppGraphReady", "Keyboard", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }
@@ -4,13 +4,13 @@ import {
4
4
  import "./chunk-IEW3JD5C.mjs";
5
5
 
6
6
  // packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts
7
+ import { Schema } from "effect";
7
8
  import { contributes, Capabilities, createResolver, LayoutAction } from "@dxos/app-framework";
8
- import { S } from "@dxos/echo-schema";
9
9
  import { log } from "@dxos/log";
10
10
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts";
11
11
  var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, createResolver({
12
12
  intent: LayoutAction.UpdateLayout,
13
- filter: (data) => S.is(LayoutAction.Expose.fields.input)(data),
13
+ filter: (data) => Schema.is(LayoutAction.Expose.fields.input)(data),
14
14
  resolve: async ({ subject }) => {
15
15
  const { graph } = context.requestCapability(Capabilities.AppGraph);
16
16
  const { getItem, setItem } = context.requestCapability(NavTreeCapabilities.State);
@@ -34,7 +34,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
34
34
  subject
35
35
  }, {
36
36
  F: __dxlog_file,
37
- L: 32,
37
+ L: 33,
38
38
  S: void 0,
39
39
  C: (f, a) => f(...a)
40
40
  });
@@ -44,4 +44,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
44
44
  export {
45
45
  intent_resolver_default as default
46
46
  };
47
- //# sourceMappingURL=intent-resolver-OBGGMBVJ.mjs.map
47
+ //# sourceMappingURL=intent-resolver-XCABZFA6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { contributes, type PluginsContext, Capabilities, createResolver, LayoutAction } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\n\nimport { NavTreeCapabilities } from './capabilities';\n\nexport default (context: PluginsContext) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Expose.fields.input> =>\n Schema.is(LayoutAction.Expose.fields.input)(data),\n resolve: async ({ subject }) => {\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n const { getItem, setItem } = context.requestCapability(NavTreeCapabilities.State);\n\n try {\n const path = await graph.waitForPath({ target: subject }, { timeout: 1_000 });\n [...Array(path.length)].forEach((_, index) => {\n const subpath = path.slice(0, index);\n const value = getItem(subpath);\n if (!value.open) {\n setItem(subpath, 'open', true);\n }\n });\n } catch {\n log('Path to node not found', { subject });\n }\n },\n }),\n );\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,aAAkCC,cAAcC,gBAAgBC,oBAAoB;AAC7F,SAASC,WAAW;;AAIpB,IAAA,0BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,QAAQ,CAACC,SACPC,OAAOC,GAAGL,aAAaM,OAAOC,OAAOC,KAAK,EAAEL,IAAAA;EAC9CM,SAAS,OAAO,EAAEC,QAAO,MAAE;AACzB,UAAM,EAAEC,MAAK,IAAKjB,QAAQkB,kBAAkBhB,aAAaiB,QAAQ;AACjE,UAAM,EAAEC,SAASC,QAAO,IAAKrB,QAAQkB,kBAAkBI,oBAAoBC,KAAK;AAEhF,QAAI;AACF,YAAMC,OAAO,MAAMP,MAAMQ,YAAY;QAAEC,QAAQV;MAAQ,GAAG;QAAEW,SAAS;MAAM,CAAA;AAC3E;WAAIC,MAAMJ,KAAKK,MAAM;QAAGC,QAAQ,CAACC,GAAGC,UAAAA;AAClC,cAAMC,UAAUT,KAAKU,MAAM,GAAGF,KAAAA;AAC9B,cAAMG,QAAQf,QAAQa,OAAAA;AACtB,YAAI,CAACE,MAAMC,MAAM;AACff,kBAAQY,SAAS,QAAQ,IAAA;QAC3B;MACF,CAAA;IACF,QAAQ;AACNI,UAAI,0BAA0B;QAAErB;MAAQ,GAAA;;;;;;IAC1C;EACF;AACF,CAAA,CAAA;",
6
+ "names": ["Schema", "contributes", "Capabilities", "createResolver", "LayoutAction", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "LayoutAction", "UpdateLayout", "filter", "data", "Schema", "is", "Expose", "fields", "input", "resolve", "subject", "graph", "requestCapability", "AppGraph", "getItem", "setItem", "NavTreeCapabilities", "State", "path", "waitForPath", "target", "timeout", "Array", "length", "forEach", "_", "index", "subpath", "slice", "value", "open", "log"]
7
+ }
@@ -24,7 +24,7 @@ var keyboard_default = (context) => {
24
24
  shortcut,
25
25
  handler: () => {
26
26
  void node.data({
27
- node,
27
+ parent: node,
28
28
  caller: KEY_BINDING
29
29
  });
30
30
  },
@@ -43,4 +43,4 @@ var keyboard_default = (context) => {
43
43
  export {
44
44
  keyboard_default as default
45
45
  };
46
- //# sourceMappingURL=keyboard-IQXHKUWM.mjs.map
46
+ //# sourceMappingURL=keyboard-2KXRP22I.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/keyboard.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities as AppCapabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { Keyboard } from '@dxos/keyboard';\nimport { isAction } from '@dxos/plugin-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING } from '../meta';\n\nexport default (context: PluginsContext) => {\n const { graph } = context.requestCapability(AppCapabilities.AppGraph);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n const unsubscribe = 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(graph.root.id);\n\n return contributes(AppCapabilities.Null, null, () => {\n unsubscribe();\n Keyboard.singleton.destroy();\n });\n};\n"],
5
- "mappings": ";;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,mBAAwC;AAClF,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAIhC,IAAA,mBAAe,CAACC,YAAAA;AACd,QAAM,EAAEC,MAAK,IAAKD,QAAQE,kBAAkBC,gBAAgBC,QAAQ;AAIpE,QAAMC,cAAcJ,MAAMK,kBAAkB;IAC1CC,SAAS,CAACC,MAAMC,SAAAA;AACd,UAAIC;AACJ,UAAI,OAAOF,KAAKG,WAAWC,eAAe,UAAU;AAClD,cAAMC,qBAAqBC,OAAOC,KAAKP,KAAKG,WAAWC,UAAU;AACjE,cAAMI,WAAWC,gBAAAA;AACjBP,mBAAWG,mBAAmBK,SAASF,QAAAA,IACnCR,KAAKG,WAAWC,WAAWI,QAAAA,IAC3BA,aAAa,QACXR,KAAKG,WAAWC,WAAWO,QAC3BH,aAAa,WAAWA,aAAa,YACnCR,KAAKG,WAAWC,WAAWQ,UAC3BC;MACV,OAAO;AACLX,mBAAWF,KAAKG,WAAWC;MAC7B;AAEA,UAAIF,YAAYY,SAASd,IAAAA,GAAO;AAC9Be,iBAASC,UAAUC,WAAWhB,KAAKiB,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,EAAMC,KAAK;UAC9DlB;UACAmB,SAAS,MAAA;AACP,iBAAKrB,KAAKsB,KAAK;cAAEtB;cAAMuB,QAAQC;YAAY,CAAA;UAC7C;UACAF,MAAMtB,KAAKG,WAAWsB;QACxB,CAAA;MACF;IACF;EACF,CAAA;AAGAV,WAASC,UAAUU,WAAU;AAC7BX,WAASC,UAAUW,kBAAkBlC,MAAMmC,KAAKC,EAAE;AAElD,SAAOC,YAAYnC,gBAAgBoC,MAAM,MAAM,MAAA;AAC7ClC,gBAAAA;AACAkB,aAASC,UAAUgB,QAAO;EAC5B,CAAA;AACF;",
6
- "names": ["Capabilities", "AppCapabilities", "contributes", "Keyboard", "isAction", "getHostPlatform", "context", "graph", "requestCapability", "AppCapabilities", "AppGraph", "unsubscribe", "subscribeTraverse", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "caller", "KEY_BINDING", "label", "initialize", "setCurrentContext", "root", "id", "contributes", "Null", "destroy"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities as AppCapabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { Keyboard } from '@dxos/keyboard';\nimport { isAction } from '@dxos/plugin-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING } from '../meta';\n\nexport default (context: PluginsContext) => {\n const { graph } = context.requestCapability(AppCapabilities.AppGraph);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n const unsubscribe = 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({ parent: 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(graph.root.id);\n\n return contributes(AppCapabilities.Null, null, () => {\n unsubscribe();\n Keyboard.singleton.destroy();\n });\n};\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,mBAAwC;AAClF,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAIhC,IAAA,mBAAe,CAACC,YAAAA;AACd,QAAM,EAAEC,MAAK,IAAKD,QAAQE,kBAAkBC,gBAAgBC,QAAQ;AAIpE,QAAMC,cAAcJ,MAAMK,kBAAkB;IAC1CC,SAAS,CAACC,MAAMC,SAAAA;AACd,UAAIC;AACJ,UAAI,OAAOF,KAAKG,WAAWC,eAAe,UAAU;AAClD,cAAMC,qBAAqBC,OAAOC,KAAKP,KAAKG,WAAWC,UAAU;AACjE,cAAMI,WAAWC,gBAAAA;AACjBP,mBAAWG,mBAAmBK,SAASF,QAAAA,IACnCR,KAAKG,WAAWC,WAAWI,QAAAA,IAC3BA,aAAa,QACXR,KAAKG,WAAWC,WAAWO,QAC3BH,aAAa,WAAWA,aAAa,YACnCR,KAAKG,WAAWC,WAAWQ,UAC3BC;MACV,OAAO;AACLX,mBAAWF,KAAKG,WAAWC;MAC7B;AAEA,UAAIF,YAAYY,SAASd,IAAAA,GAAO;AAC9Be,iBAASC,UAAUC,WAAWhB,KAAKiB,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,EAAMC,KAAK;UAC9DlB;UACAmB,SAAS,MAAA;AACP,iBAAKrB,KAAKsB,KAAK;cAAEC,QAAQvB;cAAMwB,QAAQC;YAAY,CAAA;UACrD;UACAH,MAAMtB,KAAKG,WAAWuB;QACxB,CAAA;MACF;IACF;EACF,CAAA;AAGAX,WAASC,UAAUW,WAAU;AAC7BZ,WAASC,UAAUY,kBAAkBnC,MAAMoC,KAAKC,EAAE;AAElD,SAAOC,YAAYpC,gBAAgBqC,MAAM,MAAM,MAAA;AAC7CnC,gBAAAA;AACAkB,aAASC,UAAUiB,QAAO;EAC5B,CAAA;AACF;",
6
+ "names": ["Capabilities", "AppCapabilities", "contributes", "Keyboard", "isAction", "getHostPlatform", "context", "graph", "requestCapability", "AppCapabilities", "AppGraph", "unsubscribe", "subscribeTraverse", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "parent", "caller", "KEY_BINDING", "label", "initialize", "setCurrentContext", "root", "id", "contributes", "Null", "destroy"]
7
7
  }