@dxos/plugin-navtree 0.7.4 → 0.7.5-labs.071a3e2

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 (117) hide show
  1. package/dist/lib/browser/app-graph-builder-BL7LRXCM.mjs +44 -0
  2. package/dist/lib/browser/app-graph-builder-BL7LRXCM.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-54MPRXMH.mjs +1109 -0
  4. package/dist/lib/browser/chunk-54MPRXMH.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-AOAGODQB.mjs +15 -0
  6. package/dist/lib/browser/chunk-AOAGODQB.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-PSVCPL4T.mjs → chunk-KOXMEAOS.mjs} +5 -3
  8. package/dist/lib/browser/chunk-KOXMEAOS.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +107 -1218
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/intent-resolver-U25VBFH3.mjs +47 -0
  12. package/dist/lib/browser/intent-resolver-U25VBFH3.mjs.map +7 -0
  13. package/dist/lib/browser/keyboard-MUBRTPI5.mjs +46 -0
  14. package/dist/lib/browser/keyboard-MUBRTPI5.mjs.map +7 -0
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/react-surface-LNRTNSM6.mjs +57 -0
  17. package/dist/lib/browser/react-surface-LNRTNSM6.mjs.map +7 -0
  18. package/dist/lib/browser/state-65TQKYX7.mjs +108 -0
  19. package/dist/lib/browser/state-65TQKYX7.mjs.map +7 -0
  20. package/dist/types/src/NavTreePlugin.d.ts +1 -3
  21. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  22. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  23. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  24. package/dist/types/src/capabilities/capabilities.d.ts +18 -0
  25. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  26. package/dist/types/src/capabilities/index.d.ts +251 -0
  27. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  28. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  29. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  30. package/dist/types/src/capabilities/keyboard.d.ts +4 -0
  31. package/dist/types/src/capabilities/keyboard.d.ts.map +1 -0
  32. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  33. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  34. package/dist/types/src/capabilities/state.d.ts +17 -0
  35. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  36. package/dist/types/src/components/CommandsDialog.d.ts.map +1 -1
  37. package/dist/types/src/components/CommandsTrigger.d.ts.map +1 -1
  38. package/dist/types/src/components/L0Menu.d.ts +9 -0
  39. package/dist/types/src/components/L0Menu.d.ts.map +1 -0
  40. package/dist/types/src/components/L1Panels.d.ts +8 -0
  41. package/dist/types/src/components/L1Panels.d.ts.map +1 -0
  42. package/dist/types/src/components/NavTree.d.ts +3 -20
  43. package/dist/types/src/components/NavTree.d.ts.map +1 -1
  44. package/dist/types/src/components/NavTree.stories.d.ts +2 -2
  45. package/dist/types/src/components/NavTree.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/NavTreeContainer.d.ts +4 -3
  47. package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
  48. package/dist/types/src/components/NavTreeContext.d.ts +4 -0
  49. package/dist/types/src/components/NavTreeContext.d.ts.map +1 -0
  50. package/dist/types/src/components/NavTreeItemAction.d.ts +4 -8
  51. package/dist/types/src/components/NavTreeItemAction.d.ts.map +1 -1
  52. package/dist/types/src/components/NavTreeItemAction.stories.d.ts +0 -5
  53. package/dist/types/src/components/NavTreeItemAction.stories.d.ts.map +1 -1
  54. package/dist/types/src/components/NavTreeItemColumns.d.ts +4 -0
  55. package/dist/types/src/components/NavTreeItemColumns.d.ts.map +1 -0
  56. package/dist/types/src/components/NotchStart.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +3 -0
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/components/types.d.ts +25 -0
  60. package/dist/types/src/components/types.d.ts.map +1 -0
  61. package/dist/types/src/events.d.ts +4 -0
  62. package/dist/types/src/events.d.ts.map +1 -0
  63. package/dist/types/src/hooks.d.ts +3 -0
  64. package/dist/types/src/hooks.d.ts.map +1 -0
  65. package/dist/types/src/index.d.ts +3 -2
  66. package/dist/types/src/index.d.ts.map +1 -1
  67. package/dist/types/src/meta.d.ts +2 -2
  68. package/dist/types/src/meta.d.ts.map +1 -1
  69. package/dist/types/src/stories/Graph.stories.d.ts +2 -2
  70. package/dist/types/src/stories/Graph.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/StorybookNavTree.d.ts +4 -0
  72. package/dist/types/src/stories/StorybookNavTree.d.ts.map +1 -0
  73. package/dist/types/src/translations.d.ts +0 -7
  74. package/dist/types/src/translations.d.ts.map +1 -1
  75. package/dist/types/src/types.d.ts +3 -2
  76. package/dist/types/src/types.d.ts.map +1 -1
  77. package/dist/types/src/util.d.ts +9 -0
  78. package/dist/types/src/util.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -0
  80. package/package.json +34 -39
  81. package/src/NavTreePlugin.tsx +68 -287
  82. package/src/capabilities/app-graph-builder.ts +42 -0
  83. package/src/capabilities/capabilities.ts +19 -0
  84. package/src/capabilities/index.ts +13 -0
  85. package/src/capabilities/intent-resolver.ts +36 -0
  86. package/src/capabilities/keyboard.ts +54 -0
  87. package/src/capabilities/react-surface.tsx +56 -0
  88. package/src/capabilities/state.ts +97 -0
  89. package/src/components/CommandsDialog.tsx +4 -5
  90. package/src/components/CommandsTrigger.tsx +13 -8
  91. package/src/components/L0Menu.tsx +210 -0
  92. package/src/components/L1Panels.tsx +100 -0
  93. package/src/components/NavTree.stories.tsx +5 -5
  94. package/src/components/NavTree.tsx +26 -121
  95. package/src/components/NavTreeContainer.tsx +109 -69
  96. package/src/components/NavTreeContext.tsx +13 -0
  97. package/src/components/NavTreeItemAction.stories.tsx +0 -2
  98. package/src/components/NavTreeItemAction.tsx +58 -316
  99. package/src/components/NavTreeItemColumns.tsx +71 -0
  100. package/src/components/NotchStart.tsx +9 -8
  101. package/src/components/index.ts +3 -0
  102. package/src/components/types.ts +33 -0
  103. package/src/events.ts +11 -0
  104. package/src/hooks.ts +21 -0
  105. package/src/index.ts +3 -4
  106. package/src/meta.ts +3 -1
  107. package/src/stories/Graph.stories.tsx +5 -4
  108. package/src/stories/StorybookNavTree.tsx +63 -0
  109. package/src/translations.ts +0 -7
  110. package/src/types.ts +3 -2
  111. package/src/util.ts +54 -0
  112. package/dist/lib/browser/chunk-PSVCPL4T.mjs.map +0 -7
  113. package/dist/lib/browser/meta.mjs +0 -11
  114. package/dist/lib/browser/meta.mjs.map +0 -7
  115. package/dist/types/src/components/NavTreeFooter.d.ts +0 -6
  116. package/dist/types/src/components/NavTreeFooter.d.ts.map +0 -1
  117. package/src/components/NavTreeFooter.tsx +0 -158
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/NavTreePlugin.tsx", "../../../src/components/CommandsDialog.tsx", "../../../src/components/NavTree.tsx", "../../../src/components/NavTreeItemAction.tsx", "../../../src/components/NavTreeContainer.tsx", "../../../src/components/NavTreeFooter.tsx", "../../../src/util.ts", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/NotchStart.tsx", "../../../src/components/HaloButton.tsx", "../../../src/components/CommandsTrigger.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\nimport React from 'react';\n\nimport {\n type GraphBuilderProvides,\n type GraphProvides,\n type IntentResolverProvides,\n LayoutAction,\n type MetadataRecordsProvides,\n NavigationAction,\n parseGraphPlugin,\n parseIntentPlugin,\n parseLayoutPlugin,\n parseNavigationPlugin,\n type Plugin,\n type PluginDefinition,\n resolvePlugin,\n type SurfaceProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { createExtension, type Graph, isAction, isGraphNode, type Node } from '@dxos/app-graph';\nimport { type UnsubscribeCallback } from '@dxos/async';\nimport { Keyboard } from '@dxos/keyboard';\nimport { create, type ReactiveObject } from '@dxos/live-object';\nimport { type TreeData } from '@dxos/react-ui-list';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { CommandsDialogContent, NavTreeContainer, NavTreeDocumentTitle, NODE_TYPE, NotchStart } from './components';\nimport { CommandsTrigger } from './components/CommandsTrigger';\nimport meta, { KEY_BINDING, NAVTREE_PLUGIN } from './meta';\nimport translations from './translations';\nimport { type NavTreeItemGraphNode } from './types';\nimport { expandChildrenAndActions } from './util';\n\nexport type NavTreePluginProvides = SurfaceProvides &\n MetadataRecordsProvides &\n GraphBuilderProvides &\n TranslationsProvides &\n IntentResolverProvides;\n\nconst KEY = `${NAVTREE_PLUGIN}/state`;\nconst getInitialState = () => {\n const stringified = localStorage.getItem(KEY);\n if (!stringified) {\n return;\n }\n\n try {\n const cached: [string, { open: boolean; current: boolean }][] = JSON.parse(stringified);\n return cached.map(\n ([key, value]): [\n string,\n ReactiveObject<{\n open: boolean;\n current: boolean;\n }>,\n ] => [key, create({ open: value.open, current: false })],\n );\n } catch {}\n};\n\nexport const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let graph: Graph | undefined;\n let unsubscribe: UnsubscribeCallback | undefined;\n\n // TODO(wittjosiah): This currently needs to be not a ReactiveObject at the root.\n // If it is a ReactiveObject then React errors when initializing new paths because of state change during render.\n // Ideally this could be a ReactiveObject but be able to access and update the root level without breaking render.\n // Wrapping accesses and updates in `untracked` didn't seem to work in all cases.\n const state = new Map<string, ReactiveObject<{ open: boolean; current: boolean }>>(\n getInitialState() ?? [\n // TODO(thure): Initialize these dynamically.\n ['root', create({ open: true, current: false })],\n ['root~dxos.org/plugin/space-spaces', create({ open: true, current: false })],\n ['root~dxos.org/plugin/files', create({ open: true, current: false })],\n ],\n );\n\n const getItem = (_path: string[]) => {\n const path = Path.create(..._path);\n const value = state.get(path) ?? create({ open: false, current: false });\n if (!state.has(path)) {\n state.set(path, value);\n }\n\n return value;\n };\n\n const setItem = (path: string[], key: 'open' | 'current', next: boolean) => {\n const value = getItem(path);\n value[key] = next;\n\n localStorage.setItem(KEY, JSON.stringify(Array.from(state.entries())));\n };\n\n const isOpen = (path: string[]) => getItem(path).open;\n const isCurrent = (path: string[]) => getItem(path).current;\n\n const handleOpenChange = ({ 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\n return {\n meta,\n ready: async (plugins) => {\n const layout = resolvePlugin(plugins, parseLayoutPlugin)?.provides.layout;\n const location = resolvePlugin(plugins, parseNavigationPlugin)?.provides.location;\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n graph = graphPlugin?.provides.graph;\n if (!graph || !location || !layout) {\n return;\n }\n\n const soloPart = location?.active.solo?.[0];\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (dispatch && soloPart) {\n void dispatch({ plugin: NAVTREE_PLUGIN, action: NavigationAction.EXPOSE, data: { id: soloPart.id } });\n }\n\n let previous: string[] = [];\n unsubscribe = effect(() => {\n const part = layout.layoutMode === 'solo' ? 'solo' : 'main';\n const current = location.active[part]?.map(({ id }) => id) ?? [];\n const removed = previous.filter((id) => !current.includes(id));\n previous = current;\n\n // TODO(wittjosiah): This is setTimeout because there's a race between the keys be initialized.\n // This could be avoided if the location was a path as well and not just an id.\n setTimeout(() => {\n removed.forEach((id) => {\n const keys = Array.from(state.keys()).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', false);\n });\n });\n\n current.forEach((id) => {\n const keys = Array.from(new Set([...state.keys(), id])).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', true);\n });\n });\n });\n });\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n graph.subscribeTraverse({\n visitor: (node, path) => {\n let shortcut: string | undefined;\n if (typeof node.properties.keyBinding === 'object') {\n const availablePlatforms = Object.keys(node.properties.keyBinding);\n const platform = getHostPlatform();\n shortcut = availablePlatforms.includes(platform)\n ? node.properties.keyBinding[platform]\n : platform === 'ios'\n ? node.properties.keyBinding.macos // Fallback to macos if ios-specific bindings not provided.\n : platform === 'linux' || platform === 'unknown'\n ? node.properties.keyBinding.windows // Fallback to windows if platform-specific bindings not provided.\n : undefined;\n } else {\n shortcut = node.properties.keyBinding;\n }\n\n if (shortcut && isAction(node)) {\n Keyboard.singleton.getContext(path.slice(0, -1).join('/')).bind({\n shortcut,\n handler: () => {\n void node.data({ node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n },\n });\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graphPlugin?.provides.graph.root.id);\n },\n unload: async () => {\n unsubscribe?.();\n Keyboard.singleton.destroy();\n },\n provides: {\n metadata: {\n records: {\n [NODE_TYPE]: {\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 surface: {\n component: ({ data, role }) => {\n switch (data.component) {\n case `${NAVTREE_PLUGIN}/Commands`: {\n const selected = typeof data.subject === 'string' ? data.subject : undefined;\n return <CommandsDialogContent selected={selected} />;\n }\n }\n\n switch (role) {\n case 'navigation':\n return (\n <NavTreeContainer\n isOpen={isOpen}\n isCurrent={isCurrent}\n onOpenChange={handleOpenChange}\n popoverAnchorId={data.popoverAnchorId as string}\n />\n );\n\n case 'document-title': {\n return <NavTreeDocumentTitle node={isGraphNode(data.activeNode) ? data.activeNode : undefined} />;\n }\n\n case 'notch-start':\n return <NotchStart />;\n\n case 'search-input':\n return {\n node: <CommandsTrigger />,\n disposition: 'fallback',\n };\n }\n\n return null;\n },\n },\n intent: {\n resolver: async (intent) => {\n switch (intent.action) {\n case NavigationAction.EXPOSE: {\n if (graph && intent.data?.id) {\n const path = await graph.waitForPath({ target: intent.data.id });\n [...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 }\n break;\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n // TODO(burdon): Move to separate plugin (for keys and command k). Move bindings from LayoutPlugin.\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return [\n createExtension({\n id: NAVTREE_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: 'dxos.org/plugin/navtree/open-commands',\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${NAVTREE_PLUGIN}/Commands`,\n dialogBlockAlign: 'start',\n },\n });\n },\n properties: {\n label: ['open commands label', { ns: NAVTREE_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ],\n }),\n ];\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../meta';\n\n// TODO(wittjosiah): This probably deserves its own plugin but for now it lives here w/ other navigation UI.\nexport const CommandsDialogContent = ({ selected: initial }: { selected?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const [selected, setSelected] = useState<string | undefined>(initial);\n const dispatch = useIntentDispatcher();\n const { graph } = useGraph();\n\n // Traverse graph.\n // TODO(burdon): Factor out commonality with shortcut dialog.\n const allActions = useMemo(() => {\n // TODO(burdon): Get from navtree (not keyboard).\n const current = Keyboard.singleton.getCurrentContext();\n const actionMap = new Set<string>();\n const actions: ActionLike[] = [];\n graph?.traverse({\n visitor: (node, path) => {\n if (\n (isAction(node) || isActionGroup(node)) &&\n !actionMap.has(node.id) &&\n current.startsWith(path.slice(0, -1).join('/'))\n ) {\n actionMap.add(node.id);\n actions.push(node);\n }\n },\n });\n\n actions.sort((a, b) => {\n return toLocalizedString(a.properties.label, t)\n ?.toLowerCase()\n .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());\n });\n\n // console.log(JSON.stringify(actions, undefined, 2));\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const actions = isActionGroup(group) ? graph.actions(group) : allActions;\n\n return (\n <Dialog.Content classNames={['md:max-is-[30rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{t('commands dialog title', { ns: NAVTREE_PLUGIN })}</Dialog.Title>\n\n {/* TODO(burdon): BUG: Overscrolls container. */}\n <SearchList.Root label={t('command list input placeholder')} classNames='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input placeholder={t('command list input placeholder')} classNames='px-1 my-2' />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\n {actions?.map((action) => {\n const label = toLocalizedString(action.properties.label, t);\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n return (\n <SearchList.Item\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties.disabled) {\n return;\n }\n\n if (isActionGroup(action)) {\n setSelected(action.id);\n return;\n }\n\n void dispatch({ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } });\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ node, caller: KEY_BINDING }));\n });\n }}\n classNames='flex items-center gap-2'\n disabled={action.properties.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon} size={4} />\n <span className='grow truncate'>{label}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n </SearchList.Root>\n\n <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, useCallback, useEffect, type FC } from 'react';\n\nimport { isAction, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, Treegrid, useTranslation } from '@dxos/react-ui';\nimport { Tree, type TreeProps } from '@dxos/react-ui-list';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type FlattenedActions, type NavTreeItemGraphNode } from '../types';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Omit<\n TreeProps<NavTreeItemGraphNode>,\n 'draggable' | 'gridTemplateColumns' | 'renderColumns'\n> &\n Pick<NavTreeColumnsProps, 'getActions' | 'loadDescendents' | 'renderItemEnd' | 'popoverAnchorId'>;\n\nexport const NavTree = ({ getActions, loadDescendents, renderItemEnd, popoverAnchorId, ...props }: NavTreeProps) => {\n const renderColumns = useCallback<NonNullable<TreeProps<NavTreeItemGraphNode>['renderColumns']>>(\n ({ item, path, menuOpen, setMenuOpen }) => {\n return (\n <NavTreeColumns\n path={path}\n node={item}\n getActions={getActions}\n menuOpen={menuOpen}\n setMenuOpen={setMenuOpen}\n loadDescendents={loadDescendents}\n renderItemEnd={renderItemEnd}\n popoverAnchorId={popoverAnchorId}\n />\n );\n },\n [renderItemEnd, popoverAnchorId, loadDescendents],\n );\n\n return (\n <Tree\n {...props}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={renderColumns}\n />\n );\n};\n\ntype NavTreeColumnsProps = {\n path: string[];\n node: Node;\n getActions: (node: Node) => FlattenedActions;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n loadDescendents?: (node: Node) => MaybePromise<void>;\n renderItemEnd?: FC<{ node: Node }>;\n popoverAnchorId?: string;\n};\n\nconst NavTreeColumns = ({\n path,\n node,\n getActions,\n menuOpen,\n setMenuOpen,\n loadDescendents,\n renderItemEnd: ItemEnd,\n popoverAnchorId,\n}: NavTreeColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const level = path.length - 2;\n\n const { actions: _actions, groupedActions } = getActions(node);\n const [primaryAction, ...secondaryActions] = _actions.toSorted((a, b) =>\n a.properties?.disposition === 'toolbar' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'toolbar' ? 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}/${node.id}` ? Popover.Anchor : Fragment;\n\n // TODO(thure): Ideally this should not be necessary.\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n void loadDescendents?.(node);\n if (primaryAction && !isAction(primaryAction)) {\n void loadDescendents?.(primaryAction);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [primaryAction]);\n\n return (\n <>\n {primaryAction?.properties?.disposition === 'toolbar' ? (\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={node}\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={node}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n menuOpen={menuOpen}\n onChangeMenuOpen={setMenuOpen}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {ItemEnd && <ItemEnd node={node} />}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MutableRefObject, type PropsWithChildren, useRef, useState } from 'react';\n\nimport { type Action, type ActionLike, type Node } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport {\n Button,\n Dialog,\n DropdownMenu,\n ContextMenu,\n Tooltip,\n useTranslation,\n toLocalizedString,\n Icon,\n} from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { descriptionText, hoverableControlItem, hoverableOpenControlItem, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type ActionProperties } from '../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Action[];\n suppressNextTooltip?: MutableRefObject<boolean>;\n menuOpen?: boolean;\n defaultMenuOpen?: boolean;\n onChangeMenuOpen?: (nextOpen: boolean) => void;\n onAction?: (action: Action) => void;\n};\n\nconst getShortcut = (action: ActionLike) => {\n return typeof action.properties?.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties?.keyBinding?.[getHostPlatform()];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nexport const NavTreeItemActionDropdownMenu = ({\n label,\n icon,\n testId,\n defaultMenuOpen,\n menuActions,\n menuOpen,\n suppressNextTooltip,\n onChangeMenuOpen,\n onAction,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: menuOpen,\n defaultProp: defaultMenuOpen,\n onChange: onChangeMenuOpen,\n });\n\n return (\n <DropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <DropdownMenu.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n aria-label={t('tree item actions label')}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='z-[31]'>\n <DropdownMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <DropdownMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties!.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </DropdownMenu.Item>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n\nexport const NavTreeItemActionContextMenu = (\n props: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>,\n) => {\n return (props.menuActions?.length ?? 0) > 0 ? <NavTreeItemActionContextMenuImpl {...props} /> : <>{props.children}</>;\n};\n\nconst NavTreeItemActionContextMenuImpl = ({\n menuActions,\n onAction,\n children,\n}: PropsWithChildren<Pick<NavTreeItemActionMenuProps, 'menuActions' | 'onAction'>>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <ContextMenu.Root>\n <ContextMenu.Trigger asChild>{children}</ContextMenu.Trigger>\n <ContextMenu.Portal>\n <ContextMenu.Content classNames='z-[31]'>\n <ContextMenu.Viewport>\n {menuActions?.map((action) => {\n const shortcut = getShortcut(action);\n return (\n <ContextMenu.Item\n key={action.id}\n onClick={(event) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n onAction?.(action);\n }}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </ContextMenu.Item>\n );\n })}\n </ContextMenu.Viewport>\n <ContextMenu.Arrow />\n </ContextMenu.Content>\n </ContextMenu.Portal>\n </ContextMenu.Root>\n );\n};\n\nexport const NavTreeItemActionSearchList = ({\n menuActions,\n icon,\n label,\n testId,\n suppressNextTooltip,\n onAction,\n}: Pick<\n NavTreeItemActionMenuProps,\n 'icon' | 'menuActions' | 'testId' | 'label' | 'onAction' | 'suppressNextTooltip'\n>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const [optionsMenuOpen, setOptionsMenuOpen] = useState(false);\n const button = useRef<HTMLButtonElement | null>(null);\n\n // TODO(burdon): Optionally sort.\n const sortedActions = menuActions?.sort(({ properties: p1 }, { properties: p2 }) => {\n const t1 = toLocalizedString(p1!.label, t).toLowerCase();\n const t2 = toLocalizedString(p2!.label, t).toLowerCase();\n return t1.localeCompare(t2);\n });\n\n // TODO(thure): Use LayoutPlugin’s global Dialog.\n return (\n <Dialog.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n <Tooltip.Trigger asChild>\n <Dialog.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n data-testid={testId}\n onKeyDownCapture={(event) => {\n // TODO(thure): Why is only this `Button` affected and not `DropdownMenu.Trigger`’s?\n if (button.current && button.current === event.target) {\n switch (event.key) {\n case 'Enter':\n case ' ':\n // Capture this event and stop propagation to the drag start handler.\n event.stopPropagation();\n setOptionsMenuOpen(true);\n break;\n default:\n }\n }\n }}\n ref={button}\n >\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Dialog.Trigger>\n </Tooltip.Trigger>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content classNames='z-[31] is-full max-is-[24rem] pli-2 plb-1'>\n <SearchList.Root label={t('tree item searchlist input placeholder')}>\n <SearchList.Input placeholder={t('tree item searchlist input placeholder')} classNames='pli-3' />\n <SearchList.Content classNames='min-bs-[12rem] bs-[50dvh] max-bs-[30rem] overflow-auto'>\n {sortedActions?.map((action) => {\n const label = toLocalizedString(action.properties!.label, t);\n const shortcut = getShortcut(action);\n return (\n <SearchList.Item\n // TODO(burdon): Value should be id since label is not unique.\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties?.disabled) {\n return;\n }\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n }}\n classNames='flex items-center gap-2 pli-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties?.icon} size={4} />}\n <span className='grow truncate'>{label}</span>\n {shortcut && (\n <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>\n )}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n <div role='none' className='flex items-center plb-2 pli-3'>\n <span className={descriptionText}>{toLocalizedString(label, t)}</span>\n </div>\n </SearchList.Root>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, label, icon } = { label: 'never' },\n data: invoke,\n}: Action & { parent: Node; onAction?: (action: Action) => void }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n density='fine'\n classNames={mx('shrink-0 !pli-2 pointer-fine:!pli-1', hoverableControlItem, hoverableOpenControlItem)}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { node: parent, caller } : { node: parent });\n }}\n data-testid={testId}\n >\n <span className='sr-only'>{toLocalizedString(label, t)}</span>\n <Icon icon={icon ?? fallbackIcon} size={4} />\n </Button>\n </Tooltip.Trigger>\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const suppressNextTooltip = useRef<boolean>(false);\n const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return (\n <Tooltip.Root\n open={triggerTooltipOpen}\n onOpenChange={(nextOpen) => {\n if (suppressNextTooltip.current) {\n setTriggerTooltipOpen(false);\n suppressNextTooltip.current = false;\n } else {\n setTriggerTooltipOpen(nextOpen);\n }\n }}\n >\n {baseLabel && (\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[31]' side='bottom'>\n {baseLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n )}\n {monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction parent={node} {...menuActions[0]} />\n ) : props.menuType === 'searchList' ? (\n <NavTreeItemActionSearchList\n {...props}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n ) : (\n <NavTreeItemActionDropdownMenu\n {...props}\n parent={node}\n menuActions={menuActions}\n suppressNextTooltip={suppressNextTooltip}\n onAction={(action) => action.data?.(props.caller ? { node, caller: props.caller } : { node })}\n />\n )}\n </Tooltip.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { extractInstruction, type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { untracked } from '@preact/signals-core';\nimport React, { memo, useCallback, useEffect } from 'react';\n\nimport { LayoutAction, NavigationAction, Surface, useIntentDispatcher } from '@dxos/app-framework';\nimport { isAction, isActionLike, type Node } from '@dxos/app-graph';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { isEchoObject, isSpace } from '@dxos/react-client/echo';\nimport { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { 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, type NavTreeProps } from './NavTree';\nimport { NavTreeFooter } from './NavTreeFooter';\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} 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 }: { node: Node }) => (\n <Surface role='navtree-item-end' data={{ object: node.data, id: node.id }} />\n);\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n} & Pick<NavTreeProps, 'isOpen' | 'isCurrent' | 'onOpenChange'>;\n\nexport const NavTreeContainer = memo(({ isCurrent, popoverAnchorId, ...props }: NavTreeContainerProps) => {\n const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const dispatch = useIntentDispatcher();\n const { graph } = useGraph();\n\n const getActions = useCallback((node: Node) => naturalGetActions(graph, node), [graph]);\n\n const getItems = useCallback(\n (node?: Node) => {\n return graph.nodes(node ?? graph.root, {\n filter: (node): node is Node => {\n return untracked(() => {\n const action = isActionLike(node);\n const disposition = node.properties.disposition;\n return !action || (action && disposition === 'item');\n });\n },\n });\n },\n [graph],\n );\n\n const getProps = useCallback(\n (node: Node, path: string[]): PropsFromTreeItem => {\n const children = getChildren(graph, node, undefined, 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 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({ node: parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n const current = isCurrent(path, node);\n if (!current) {\n void dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: {\n main: [node.id],\n },\n },\n });\n } else if (option) {\n void dispatch({\n action: NavigationAction.CLOSE,\n data: {\n activeParts: {\n main: [node.id],\n },\n },\n });\n } else {\n void dispatch({\n action: LayoutAction.SCROLL_INTO_VIEW,\n data: { id: node.id },\n });\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 closeNavigationSidebar();\n }\n },\n [graph, dispatch, isCurrent, isLg, closeNavigationSidebar],\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 return (\n <ElevationProvider elevation='chrome'>\n <div\n role='none'\n className='grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content] bs-full overflow-hidden'\n >\n {/* TODO(wittjosiah): Factor out surfaces to layout? */}\n <div role='none' className='border-be border-separator'>\n <Surface role='search-input' limit={1} />\n </div>\n\n {/* TODO(thure): What gives this an inline `overflow: initial`? */}\n <div role='none' className='border-be border-separator !overflow-y-auto'>\n <NavTree\n id={graph.root.id}\n getActions={getActions}\n getItems={getItems}\n getProps={getProps}\n isCurrent={isCurrent}\n loadDescendents={loadDescendents}\n renderItemEnd={renderItemEnd}\n popoverAnchorId={popoverAnchorId}\n canDrop={canDrop}\n onSelect={handleSelect}\n {...props}\n />\n </div>\n\n <NavTreeFooter />\n </div>\n </ElevationProvider>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowSquareOut, GearSix, Warning } from '@phosphor-icons/react';\nimport { formatDistance } from 'date-fns/formatDistance';\nimport React from 'react';\n\nimport {\n type LayoutPart,\n SettingsAction,\n parseNavigationPlugin,\n useResolvePlugin,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { useConfig } from '@dxos/react-client';\nimport {\n Button,\n Link,\n Message,\n Popover,\n Tooltip,\n Trans,\n useDefaultValue,\n useSidebars,\n useTranslation,\n} from '@dxos/react-ui';\nimport { LayoutControls } from '@dxos/react-ui-stack';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst buttonStyles = 'pli-1.5 text-xs font-normal';\n\nconst repo = 'https://github.com/dxos/dxos';\n\nconst VERSION_REGEX = /([\\d.]+)/;\n\nexport const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {\n const layoutPart = useDefaultValue(props.layoutPart, () => 'sidebar');\n const config = useConfig();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const { version, timestamp, commitHash } = config.values.runtime?.app?.build ?? {};\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n const [_, v] = version?.match(VERSION_REGEX) ?? [];\n\n const releaseUrl =\n config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production'\n ? `${repo}/releases/tag/v${version}`\n : `${repo}/commit/${commitHash}`;\n\n const previewUrl = 'https://docs.dxos.org/composer#technology-preview';\n\n return (\n <div\n role='none'\n className={mx(\n 'flex bs-[--rail-size] pbe-[env(safe-area-inset-bottom)] box-content justify-end',\n layoutPart === 'complementary' && 'md:justify-end flex-row-reverse',\n )}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames={buttonStyles} {...(!navigationSidebarOpen && { tabIndex: -1 })}>\n v{v}\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='top'\n role='message'\n classNames='z-[12] bg-warning-500 max-is-[min(calc(100vw-16px),40ch)]'\n >\n <Message.Root valence='warning' className='rounded-be-none p-5'>\n <Message.Title>\n <Warning weight='duotone' className='inline mie-2 is-6 bs-6' />\n <span>{t('warning title')}</span>\n </Message.Title>\n <Message.Body>\n {t('technology preview message')}\n <br />\n <Link href={previewUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('learn more label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </Message.Body>\n </Message.Root>\n <div role='none' className='plb-4 pli-5 space-b-2 text-baseText'>\n {timestamp && (\n <p>\n {t('released message', {\n released: formatDistance(new Date(timestamp), new Date(), { addSuffix: true }),\n })}\n <br />\n <Link href={releaseUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('see release label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </p>\n )}\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'powered by dxos message',\n components: {\n dxos: <Link href='https://dxos.org' target='_blank' rel='noreferrer' variant='neutral' />,\n },\n }}\n />\n </p>\n </div>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(burdon): Reconcile with action created by LayoutPlugin. */}\n <Button\n variant='ghost'\n classNames={buttonStyles}\n data-testid='treeView.openSettings'\n data-joyride='welcome/settings'\n {...(!navigationSidebarOpen && { tabIndex: -1 })}\n onClick={() => dispatch({ action: SettingsAction.OPEN })}\n >\n <span className='sr-only'>{t('open settings label')}</span>\n <GearSix className={mx(getSize(5), 'rotate-90')} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[12]'>\n {t('open settings label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {/* NOTE(thure): Unpinning from the NavTree’s default position in Deck is temporarily disabled. */}\n {navigationPlugin?.meta.id === 'dxos.org/plugin/deck' && (\n <LayoutControls\n variant='hide-disabled'\n capabilities={{\n incrementStart: false,\n incrementEnd: false,\n }}\n onClick={(_type) => {\n // TODO(Zan): If we inmplement pinning again, we should dispatch here.\n }}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n} from '@dxos/app-graph';\nimport { nonNullable } 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 === 'toolbar') {\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(nonNullable) 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", "//\n// Copyright 2023 DXOS.org\n//\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n useEffect(() => {\n document.title = node ? toLocalizedString(node.properties.label, t) : t('current app name', { ns: 'appkit' });\n }, [node?.properties?.label]);\n return null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher, useResolvePlugin } from '@dxos/app-framework';\nimport { ClientAction } from '@dxos/plugin-client/meta';\nimport { parseObservabilityPlugin } from '@dxos/plugin-observability';\nimport { useIdentity } from '@dxos/react-client/halo';\n\nimport { HaloButton } from './HaloButton';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin (ClientPlugin?).\nexport const NotchStart = () => {\n const identity = useIdentity();\n const observabilityPlugin = useResolvePlugin(parseObservabilityPlugin);\n const dispatch = useIntentDispatcher();\n return (\n <HaloButton\n size={8}\n identityKey={identity?.identityKey.toHex()}\n hue={identity?.profile?.data?.hue}\n emoji={identity?.profile?.data?.emoji}\n internal={observabilityPlugin?.provides?.observability?.group === 'dxos'}\n onClick={() => dispatch({ action: ClientAction.SHARE_IDENTITY })}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ConnectionState, useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Avatar, type Size } from '@dxos/react-ui';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nconst INTERNAL = 'https://avatars.githubusercontent.com/u/57182821';\n\nexport type HaloButtonProps = {\n size?: Size;\n identityKey?: string;\n hue?: string;\n emoji?: string;\n internal?: boolean;\n onClick?: () => void;\n};\n\nexport const HaloButton = (props: HaloButtonProps) => {\n const { onClick, identityKey, internal, size = 8 } = props;\n const fallbackValue = hexToFallback(identityKey ?? '0');\n const { swarm: connectionState } = useNetworkStatus();\n return (\n <button className={mx(focusRing, 'rounded grid place-items-center')} onClick={onClick}>\n <Avatar.Root\n size={size}\n variant='circle'\n status={connectionState === ConnectionState.OFFLINE ? 'error' : internal ? 'internal' : 'active'}\n hue={props.hue || fallbackValue.hue}\n >\n <Avatar.Frame data-testid='treeView.haloButton' data-joyride='welcome/halo'>\n {internal ? <Avatar.Image href={INTERNAL} /> : <Avatar.Fallback text={props.emoji || fallbackValue.emoji} />}\n </Avatar.Frame>\n </Avatar.Root>\n </button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatch } = useIntent();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='w-full h-full !rounded-none'\n onClick={() =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', component: `${NAVTREE_PLUGIN}/Commands`, dialogBlockAlign: 'start' },\n })\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <MagnifyingGlass className={getSize(5)} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'warning title': 'WARNING',\n 'technology preview message': 'Composer is still in technology preview.',\n 'learn more label': 'Learn more',\n 'released message': 'This version released {{released}}.',\n 'see release label': 'See release on GitHub',\n 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',\n 'tree item actions label': 'More actions',\n 'tree item searchlist input placeholder': 'Search for actions…',\n 'empty branch message': ' ',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NavTreePlugin } from './NavTreePlugin';\n\nexport default NavTreePlugin;\n\nexport * from './NavTreePlugin';\nexport * from './util';\n"],
5
- "mappings": "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",
6
- "names": ["effect", "React", "LayoutAction", "NavigationAction", "parseGraphPlugin", "parseIntentPlugin", "parseLayoutPlugin", "parseNavigationPlugin", "resolvePlugin", "createExtension", "isAction", "isGraphNode", "Keyboard", "create", "Path", "getHostPlatform", "React", "useMemo", "useState", "useIntentDispatcher", "LayoutAction", "isActionGroup", "isAction", "Keyboard", "keySymbols", "useGraph", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatch", "useIntentDispatcher", "graph", "useGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "id", "startsWith", "slice", "join", "add", "push", "sort", "a", "b", "toLocalizedString", "properties", "label", "toLowerCase", "localeCompare", "group", "find", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "setTimeout", "nodes", "relation", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "React", "Fragment", "useCallback", "useEffect", "isAction", "Popover", "toLocalizedString", "Treegrid", "useTranslation", "Tree", "useControllableState", "React", "useRef", "useState", "keySymbols", "Button", "Dialog", "DropdownMenu", "ContextMenu", "Tooltip", "useTranslation", "toLocalizedString", "Icon", "SearchList", "descriptionText", "hoverableControlItem", "hoverableOpenControlItem", "mx", "getHostPlatform", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "fallbackIcon", "NavTreeItemActionDropdownMenu", "label", "icon", "testId", "defaultMenuOpen", "menuActions", "menuOpen", "suppressNextTooltip", "onChangeMenuOpen", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "React", "DropdownMenu", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "aria-label", "span", "className", "toLocalizedString", "Icon", "size", "Portal", "Content", "Viewport", "map", "shortcut", "Item", "key", "id", "onClick", "event", "disabled", "stopPropagation", "descriptionText", "keySymbols", "join", "Arrow", "NavTreeItemActionSearchList", "menuActions", "icon", "label", "testId", "suppressNextTooltip", "onAction", "t", "useTranslation", "NAVTREE_PLUGIN", "optionsMenuOpen", "setOptionsMenuOpen", "useState", "button", "useRef", "sortedActions", "sort", "properties", "p1", "p2", "t1", "toLocalizedString", "toLowerCase", "t2", "localeCompare", "React", "Dialog", "Root", "open", "onOpenChange", "nextOpen", "current", "Tooltip", "Trigger", "asChild", "Button", "variant", "density", "classNames", "mx", "hoverableControlItem", "hoverableOpenControlItem", "data-testid", "onKeyDownCapture", "event", "target", "key", "stopPropagation", "ref", "Icon", "fallbackIcon", "size", "Portal", "Overlay", "Content", "SearchList", "Input", "placeholder", "map", "action", "shortcut", "getShortcut", "Item", "value", "id", "onSelect", "disabled", "span", "className", "descriptionText", "keySymbols", "join", "div", "role", "NavTreeItemMonolithicAction", "parent", "caller", "data", "invoke", "onClick", "node", "NavTreeItemAction", "monolithic", "props", "triggerTooltipOpen", "setTriggerTooltipOpen", "monolithicAction", "length", "baseLabel", "side", "Arrow", "menuType", "NavTreeItemActionDropdownMenu", "NAV_TREE_ITEM", "NavTree", "getActions", "loadDescendents", "renderItemEnd", "popoverAnchorId", "props", "renderColumns", "useCallback", "item", "path", "menuOpen", "setMenuOpen", "React", "NavTreeColumns", "node", "Tree", "draggable", "gridTemplateColumns", "ItemEnd", "t", "useTranslation", "NAVTREE_PLUGIN", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "hidden", "ActionRoot", "id", "Popover", "Anchor", "Fragment", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "Treegrid", "Cell", "onChangeMenuOpen", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "LayoutAction", "NavigationAction", "Surface", "useIntentDispatcher", "isAction", "isActionLike", "useGraph", "isEchoObject", "isSpace", "ElevationProvider", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "ArrowSquareOut", "GearSix", "Warning", "formatDistance", "React", "SettingsAction", "parseNavigationPlugin", "useResolvePlugin", "useIntentDispatcher", "useConfig", "Button", "Link", "Message", "Popover", "Tooltip", "Trans", "useDefaultValue", "useSidebars", "useTranslation", "LayoutControls", "getSize", "mx", "buttonStyles", "repo", "VERSION_REGEX", "NavTreeFooter", "props", "layoutPart", "useDefaultValue", "config", "useConfig", "t", "useTranslation", "NAVTREE_PLUGIN", "navigationSidebarOpen", "useSidebars", "dispatch", "useIntentDispatcher", "version", "timestamp", "commitHash", "values", "runtime", "app", "build", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "_", "v", "match", "releaseUrl", "env", "DX_ENVIRONMENT", "previewUrl", "React", "div", "role", "className", "mx", "Popover", "Root", "Trigger", "asChild", "Button", "variant", "classNames", "tabIndex", "Portal", "Content", "side", "Message", "valence", "Title", "Warning", "weight", "span", "Body", "br", "Link", "href", "target", "rel", "ArrowSquareOut", "p", "released", "formatDistance", "Date", "addSuffix", "Trans", "i18nKey", "components", "dxos", "Arrow", "Tooltip", "data-testid", "data-joyride", "onClick", "action", "SettingsAction", "OPEN", "GearSix", "getSize", "meta", "id", "LayoutControls", "capabilities", "incrementStart", "incrementEnd", "_type", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "nonNullable", "getParent", "graph", "node", "path", "parentId", "length", "nodes", "relation", "find", "n", "id", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getChildren", "filter", "map", "nextPath", "includes", "undefined", "nonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "NODE_TYPE", "renderItemEnd", "node", "React", "Surface", "role", "data", "object", "id", "NavTreeContainer", "memo", "isCurrent", "popoverAnchorId", "props", "closeNavigationSidebar", "useSidebars", "NAVTREE_PLUGIN", "isLg", "useMediaQuery", "ssr", "dispatch", "useIntentDispatcher", "graph", "useGraph", "getActions", "useCallback", "naturalGetActions", "getItems", "nodes", "root", "filter", "untracked", "action", "isActionLike", "disposition", "properties", "getProps", "path", "children", "getChildren", "undefined", "parentOf", "length", "map", "label", "icon", "disabled", "className", "mx", "modified", "headingClassName", "testId", "loadDescendents", "expandActions", "expandChildren", "then", "Promise", "all", "flatMap", "child", "canDrop", "source", "target", "sourceNode", "item", "targetNode", "isSpace", "isEchoObject", "handleSelect", "option", "isAction", "parent", "relation", "caller", "NAV_TREE_ITEM", "current", "NavigationAction", "OPEN", "activeParts", "main", "CLOSE", "LayoutAction", "SCROLL_INTO_VIEW", "defaultAction", "actions", "find", "useEffect", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "instruction", "extractInstruction", "type", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "nextItems", "arrayMove", "onRearrangeChildren", "onCopy", "onTransferStart", "onTransferEnd", "ElevationProvider", "elevation", "div", "limit", "NavTree", "onSelect", "NavTreeFooter", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "React", "useIntentDispatcher", "useResolvePlugin", "ClientAction", "parseObservabilityPlugin", "useIdentity", "React", "ConnectionState", "useNetworkStatus", "Avatar", "focusRing", "mx", "hexToFallback", "INTERNAL", "HaloButton", "props", "onClick", "identityKey", "internal", "size", "fallbackValue", "hexToFallback", "swarm", "connectionState", "useNetworkStatus", "React", "button", "className", "mx", "focusRing", "Avatar", "Root", "variant", "status", "ConnectionState", "OFFLINE", "hue", "Frame", "data-testid", "data-joyride", "Image", "href", "Fallback", "text", "emoji", "NotchStart", "identity", "useIdentity", "observabilityPlugin", "useResolvePlugin", "parseObservabilityPlugin", "dispatch", "useIntentDispatcher", "React", "HaloButton", "size", "identityKey", "toHex", "hue", "profile", "data", "emoji", "internal", "provides", "observability", "group", "onClick", "action", "ClientAction", "SHARE_IDENTITY", "MagnifyingGlass", "React", "LayoutAction", "useIntent", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatch", "useIntent", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "component", "dialogBlockAlign", "span", "className", "MagnifyingGlass", "getSize", "NAVTREE_PLUGIN", "KEY", "NAVTREE_PLUGIN", "getInitialState", "stringified", "localStorage", "getItem", "cached", "JSON", "parse", "map", "key", "value", "create", "open", "current", "NavTreePlugin", "graphPlugin", "graph", "unsubscribe", "state", "Map", "_path", "path", "Path", "get", "has", "set", "setItem", "next", "stringify", "Array", "from", "entries", "isOpen", "isCurrent", "handleOpenChange", "item", "id", "node", "findNode", "expandChildrenAndActions", "meta", "ready", "plugins", "layout", "resolvePlugin", "parseLayoutPlugin", "provides", "location", "parseNavigationPlugin", "parseGraphPlugin", "soloPart", "active", "solo", "dispatch", "parseIntentPlugin", "intent", "plugin", "action", "NavigationAction", "EXPOSE", "data", "previous", "effect", "part", "layoutMode", "removed", "filter", "includes", "setTimeout", "forEach", "keys", "last", "parts", "Set", "subscribeTraverse", "visitor", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "platform", "getHostPlatform", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "caller", "KEY_BINDING", "label", "initialize", "setCurrentContext", "root", "unload", "destroy", "metadata", "records", "NODE_TYPE", "type", "object", "surface", "component", "role", "selected", "subject", "React", "CommandsDialogContent", "NavTreeContainer", "onOpenChange", "popoverAnchorId", "NavTreeDocumentTitle", "isGraphNode", "activeNode", "NotchStart", "CommandsTrigger", "disposition", "resolver", "waitForPath", "target", "length", "_", "index", "subpath", "builder", "intentPlugin", "createExtension", "actions", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "ns", "icon", "translations", "NavTreePlugin"]
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\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.SetupSurfaces,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\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 '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,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,kCAAkC;QAClC,mCAAmC;QACnC,2BAA2B;QAC3B,wBAAwB;MAC1B;IACF;EACF;;;;ADGK,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;AAE7F,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
+ "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", "SetupSurfaces", "ReactSurface", "SetupIntents", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }
@@ -0,0 +1,47 @@
1
+ import {
2
+ NavTreeCapabilities
3
+ } from "./chunk-AOAGODQB.mjs";
4
+ import "./chunk-KOXMEAOS.mjs";
5
+
6
+ // packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts
7
+ import { contributes, Capabilities, createResolver, LayoutAction } from "@dxos/app-framework";
8
+ import { S } from "@dxos/echo-schema";
9
+ import { log } from "@dxos/log";
10
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts";
11
+ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, createResolver({
12
+ intent: LayoutAction.UpdateLayout,
13
+ filter: (data) => S.is(LayoutAction.Expose.fields.input)(data),
14
+ resolve: async ({ subject }) => {
15
+ const { graph } = context.requestCapability(Capabilities.AppGraph);
16
+ const { getItem, setItem } = context.requestCapability(NavTreeCapabilities.State);
17
+ try {
18
+ const path = await graph.waitForPath({
19
+ target: subject
20
+ }, {
21
+ timeout: 1e3
22
+ });
23
+ [
24
+ ...Array(path.length)
25
+ ].forEach((_, index) => {
26
+ const subpath = path.slice(0, index);
27
+ const value = getItem(subpath);
28
+ if (!value.open) {
29
+ setItem(subpath, "open", true);
30
+ }
31
+ });
32
+ } catch {
33
+ log("Path to node not found", {
34
+ subject
35
+ }, {
36
+ F: __dxlog_file,
37
+ L: 32,
38
+ S: void 0,
39
+ C: (f, a) => f(...a)
40
+ });
41
+ }
42
+ }
43
+ }));
44
+ export {
45
+ intent_resolver_default as default
46
+ };
47
+ //# sourceMappingURL=intent-resolver-U25VBFH3.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 { contributes, type PluginsContext, Capabilities, createResolver, LayoutAction } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\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 S.Schema.Type<typeof LayoutAction.Expose.fields.input> =>\n S.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,aAAkCC,cAAcC,gBAAgBC,oBAAoB;AAC7F,SAASC,SAAS;AAClB,SAASC,WAAW;;AAIpB,IAAA,0BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,QAAQ,CAACC,SACPC,EAAEC,GAAGL,aAAaM,OAAOC,OAAOC,KAAK,EAAEL,IAAAA;EACzCM,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": ["contributes", "Capabilities", "createResolver", "LayoutAction", "S", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "LayoutAction", "UpdateLayout", "filter", "data", "S", "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
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ KEY_BINDING
3
+ } from "./chunk-KOXMEAOS.mjs";
4
+
5
+ // packages/plugins/plugin-navtree/src/capabilities/keyboard.ts
6
+ import { Capabilities as AppCapabilities, contributes } from "@dxos/app-framework";
7
+ import { Keyboard } from "@dxos/keyboard";
8
+ import { isAction } from "@dxos/plugin-graph";
9
+ import { getHostPlatform } from "@dxos/util";
10
+ var keyboard_default = (context) => {
11
+ const { graph } = context.requestCapability(AppCapabilities.AppGraph);
12
+ const unsubscribe = graph.subscribeTraverse({
13
+ visitor: (node, path) => {
14
+ let shortcut;
15
+ if (typeof node.properties.keyBinding === "object") {
16
+ const availablePlatforms = Object.keys(node.properties.keyBinding);
17
+ const platform = getHostPlatform();
18
+ shortcut = availablePlatforms.includes(platform) ? node.properties.keyBinding[platform] : platform === "ios" ? node.properties.keyBinding.macos : platform === "linux" || platform === "unknown" ? node.properties.keyBinding.windows : void 0;
19
+ } else {
20
+ shortcut = node.properties.keyBinding;
21
+ }
22
+ if (shortcut && isAction(node)) {
23
+ Keyboard.singleton.getContext(path.slice(0, -1).join("/")).bind({
24
+ shortcut,
25
+ handler: () => {
26
+ void node.data({
27
+ node,
28
+ caller: KEY_BINDING
29
+ });
30
+ },
31
+ data: node.properties.label
32
+ });
33
+ }
34
+ }
35
+ });
36
+ Keyboard.singleton.initialize();
37
+ Keyboard.singleton.setCurrentContext(graph.root.id);
38
+ return contributes(AppCapabilities.Null, null, () => {
39
+ unsubscribe();
40
+ Keyboard.singleton.destroy();
41
+ });
42
+ };
43
+ export {
44
+ keyboard_default as default
45
+ };
46
+ //# sourceMappingURL=keyboard-MUBRTPI5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/keyboard.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities as AppCapabilities, contributes, type 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"]
7
+ }