@dxos/plugin-simple-layout 0.8.4-main.9735255 → 0.8.4-main.c85a9c8dae
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-P77G4YTR.mjs → chunk-7VLT3S46.mjs} +3 -3
- package/dist/lib/browser/chunk-7VLT3S46.mjs.map +7 -0
- package/dist/lib/browser/chunk-TMZNLVT2.mjs +1170 -0
- package/dist/lib/browser/chunk-TMZNLVT2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +20 -19
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-775UYAC2.mjs → operation-resolver-BYRIQOQT.mjs} +30 -28
- package/dist/lib/browser/operation-resolver-BYRIQOQT.mjs.map +7 -0
- package/dist/lib/browser/{react-root-KM55OMGJ.mjs → react-root-MMB575WY.mjs} +5 -5
- package/dist/lib/browser/react-root-MMB575WY.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-BABGAWGY.mjs → react-surface-M6CURANW.mjs} +10 -8
- package/dist/lib/browser/react-surface-M6CURANW.mjs.map +7 -0
- package/dist/lib/browser/{spotlight-dismiss-VSNOPETH.mjs → spotlight-dismiss-67PHYS5B.mjs} +3 -3
- package/dist/lib/browser/spotlight-dismiss-67PHYS5B.mjs.map +7 -0
- package/dist/lib/browser/{state-OUFTC2KV.mjs → state-A3PGDWWZ.mjs} +5 -4
- package/dist/lib/browser/state-A3PGDWWZ.mjs.map +7 -0
- package/dist/lib/browser/url-handler-HTIUY6WL.mjs +152 -0
- package/dist/lib/browser/url-handler-HTIUY6WL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FLOYBAHE.mjs +1171 -0
- package/dist/lib/node-esm/chunk-FLOYBAHE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-F5TEKVJG.mjs → chunk-VIDE5UMB.mjs} +3 -3
- package/dist/lib/node-esm/chunk-VIDE5UMB.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +20 -19
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-LDNYS3DI.mjs → operation-resolver-BDTFNCS2.mjs} +30 -28
- package/dist/lib/node-esm/operation-resolver-BDTFNCS2.mjs.map +7 -0
- package/dist/lib/node-esm/{react-root-36UYFEEB.mjs → react-root-ENZKVSY4.mjs} +5 -5
- package/dist/lib/node-esm/react-root-ENZKVSY4.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-CGHFVWU3.mjs → react-surface-ITVNQYLG.mjs} +10 -8
- package/dist/lib/node-esm/react-surface-ITVNQYLG.mjs.map +7 -0
- package/dist/lib/node-esm/{spotlight-dismiss-L5PCWIJG.mjs → spotlight-dismiss-RMLRZUVY.mjs} +3 -3
- package/dist/lib/node-esm/spotlight-dismiss-RMLRZUVY.mjs.map +7 -0
- package/dist/lib/node-esm/{state-Q2ZA26W5.mjs → state-ZCFZTTPL.mjs} +5 -4
- package/dist/lib/node-esm/state-ZCFZTTPL.mjs.map +7 -0
- package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs +153 -0
- package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs.map +7 -0
- package/dist/types/src/SimpleLayoutPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts +1 -1
- package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/spotlight-dismiss/spotlight-dismiss.d.ts +1 -1
- package/dist/types/src/capabilities/spotlight-dismiss/spotlight-dismiss.d.ts.map +1 -1
- package/dist/types/src/capabilities/state/index.d.ts +1 -1
- package/dist/types/src/capabilities/state/state.d.ts +1 -1
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts +3 -1
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -1
- package/dist/types/src/components/ContentError.stories.d.ts +1 -3
- package/dist/types/src/components/ContentError.stories.d.ts.map +1 -1
- package/dist/types/src/components/Home/Home.d.ts.map +1 -1
- package/dist/types/src/components/MobileLayout/MobileLayout.d.ts +35 -0
- package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -0
- package/dist/types/src/components/MobileLayout/MobileLayout.stories.d.ts +7 -0
- package/dist/types/src/components/MobileLayout/MobileLayout.stories.d.ts.map +1 -0
- package/dist/types/src/components/MobileLayout/index.d.ts +2 -0
- package/dist/types/src/components/MobileLayout/index.d.ts.map +1 -0
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/AppBar.d.ts +26 -0
- package/dist/types/src/components/SimpleLayout/AppBar.d.ts.map +1 -0
- package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts +47 -0
- package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts.map +1 -0
- package/dist/types/src/components/SimpleLayout/Drawer.d.ts +1 -1
- package/dist/types/src/components/SimpleLayout/Drawer.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/Main.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/NavBar.d.ts +10 -3
- package/dist/types/src/components/SimpleLayout/NavBar.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts +4 -4
- package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/SimpleLayout.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts.map +1 -1
- package/dist/types/src/components/SimpleLayout/index.d.ts +3 -0
- package/dist/types/src/components/SimpleLayout/index.d.ts.map +1 -1
- package/dist/types/src/components/Workspace/Workspace.d.ts +3 -1
- package/dist/types/src/components/Workspace/Workspace.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/actions.d.ts +20 -0
- package/dist/types/src/hooks/actions.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +4 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAppBarProps.d.ts +7 -0
- package/dist/types/src/hooks/useAppBarProps.d.ts.map +1 -0
- package/dist/types/src/hooks/useCompanions.d.ts +5 -1
- package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDrawerActions.d.ts +13 -0
- package/dist/types/src/hooks/useDrawerActions.d.ts.map +1 -0
- package/dist/types/src/hooks/useNavbarActions.d.ts +14 -0
- package/dist/types/src/hooks/useNavbarActions.d.ts.map +1 -0
- package/dist/types/src/hooks/useSimpleLayoutState.d.ts +3 -3
- package/dist/types/src/hooks/useSimpleLayoutState.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +7 -6
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +36 -30
- package/src/SimpleLayoutPlugin.ts +10 -9
- package/src/capabilities/operation-resolver/operation-resolver.ts +24 -22
- package/src/capabilities/react-root/react-root.tsx +2 -2
- package/src/capabilities/react-surface/react-surface.tsx +6 -5
- package/src/capabilities/spotlight-dismiss/spotlight-dismiss.ts +2 -2
- package/src/capabilities/state/state.tsx +4 -3
- package/src/capabilities/url-handler/url-handler.ts +111 -34
- package/src/components/ContentError.stories.tsx +8 -7
- package/src/components/ContentLoading.stories.tsx +2 -2
- package/src/components/ContentLoading.tsx +1 -1
- package/src/components/Dialog/Dialog.tsx +5 -5
- package/src/components/Home/Home.tsx +41 -33
- package/src/components/MobileLayout/MobileLayout.stories.tsx +129 -0
- package/src/components/MobileLayout/MobileLayout.tsx +305 -0
- package/src/components/MobileLayout/index.ts +5 -0
- package/src/components/Popover/Popover.tsx +17 -7
- package/src/components/SimpleLayout/AppBar.stories.tsx +144 -0
- package/src/components/SimpleLayout/AppBar.tsx +94 -0
- package/src/components/SimpleLayout/Drawer.tsx +22 -68
- package/src/components/SimpleLayout/Main.tsx +40 -29
- package/src/components/SimpleLayout/NavBar.stories.tsx +131 -23
- package/src/components/SimpleLayout/NavBar.tsx +15 -47
- package/src/components/SimpleLayout/SimpleLayout.stories.tsx +20 -11
- package/src/components/SimpleLayout/SimpleLayout.tsx +38 -19
- package/src/components/SimpleLayout/index.ts +3 -0
- package/src/components/Workspace/Workspace.tsx +34 -24
- package/src/components/hooks.ts +4 -4
- package/src/components/index.ts +1 -0
- package/src/hooks/actions.ts +85 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useAppBarProps.ts +116 -0
- package/src/hooks/useCompanions.ts +8 -5
- package/src/hooks/useDrawerActions.ts +98 -0
- package/src/hooks/useNavbarActions.ts +86 -0
- package/src/hooks/useSimpleLayoutState.ts +5 -5
- package/src/types/capabilities.ts +10 -6
- package/src/types/events.ts +3 -2
- package/dist/lib/browser/chunk-LR3EE3VB.mjs +0 -789
- package/dist/lib/browser/chunk-LR3EE3VB.mjs.map +0 -7
- package/dist/lib/browser/chunk-P77G4YTR.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-775UYAC2.mjs.map +0 -7
- package/dist/lib/browser/react-root-KM55OMGJ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-BABGAWGY.mjs.map +0 -7
- package/dist/lib/browser/spotlight-dismiss-VSNOPETH.mjs.map +0 -7
- package/dist/lib/browser/state-OUFTC2KV.mjs.map +0 -7
- package/dist/lib/browser/url-handler-DOUFQIAC.mjs +0 -54
- package/dist/lib/browser/url-handler-DOUFQIAC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-F5TEKVJG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HB2B3LLG.mjs +0 -790
- package/dist/lib/node-esm/chunk-HB2B3LLG.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-LDNYS3DI.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-36UYFEEB.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-CGHFVWU3.mjs.map +0 -7
- package/dist/lib/node-esm/spotlight-dismiss-L5PCWIJG.mjs.map +0 -7
- package/dist/lib/node-esm/state-Q2ZA26W5.mjs.map +0 -7
- package/dist/lib/node-esm/url-handler-DVAZZEUO.mjs +0 -55
- package/dist/lib/node-esm/url-handler-DVAZZEUO.mjs.map +0 -7
- package/dist/types/src/components/ContentError.d.ts +0 -5
- package/dist/types/src/components/ContentError.d.ts.map +0 -1
- package/dist/types/src/components/SimpleLayout/Banner.d.ts +0 -8
- package/dist/types/src/components/SimpleLayout/Banner.d.ts.map +0 -1
- package/src/components/ContentError.tsx +0 -23
- package/src/components/SimpleLayout/Banner.tsx +0 -113
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/Home/Home.tsx", "../../../src/components/hooks.ts", "../../../src/components/SimpleLayout/SimpleLayout.tsx", "../../../src/hooks/useCompanions.ts", "../../../src/hooks/useSimpleLayoutState.ts", "../../../src/components/Dialog/Dialog.tsx", "../../../src/components/ContentError.tsx", "../../../src/components/Popover/Popover.tsx", "../../../src/components/SimpleLayout/Drawer.tsx", "../../../src/components/ContentLoading.tsx", "../../../src/components/SimpleLayout/Main.tsx", "../../../src/components/SimpleLayout/Banner.tsx", "../../../src/components/SimpleLayout/NavBar.tsx", "../../../src/components/Workspace/Workspace.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { Node, useConnections } from '@dxos/plugin-graph';\nimport { Avatar, Icon, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Card, Layout, Mosaic, type StackTileComponent } from '@dxos/react-ui-mosaic';\nimport { SearchList, useSearchListItem, useSearchListResults } from '@dxos/react-ui-searchlist';\nimport { mx } from '@dxos/ui-theme';\nimport { byPosition } from '@dxos/util';\n\nimport { meta } from '../../meta';\nimport { useLoadDescendents } from '../hooks';\n\nexport type HomeProps = {};\n\n/**\n * Home screen.\n */\nexport const Home = (_: HomeProps) => {\n const { t } = useTranslation(meta.id);\n const userAccountItem = useItemsByDisposition('user-account')[0];\n const pinnedItems = useItemsByDisposition('pin-end', true);\n const workspaceItems = useItemsByDisposition('workspace');\n useLoadDescendents(Node.RootId);\n\n const items = useMemo(\n () => [...(userAccountItem ? [userAccountItem] : []), ...pinnedItems, ...workspaceItems],\n [userAccountItem, pinnedItems, workspaceItems],\n );\n\n const { results, handleSearch } = useSearchListResults({\n items,\n extract: (node) => toLocalizedString(node.properties.label, t),\n });\n\n return (\n <Layout.Main toolbar>\n <SearchList.Root onSearch={handleSearch}>\n <Toolbar.Root>\n <SearchList.Input placeholder={t('search placeholder')} autoFocus />\n </Toolbar.Root>\n <SearchList.Content>\n <Mosaic.Container asChild>\n <Mosaic.Viewport padding>\n <Mosaic.Stack items={results} getId={(node) => node.id} Tile={WorkspaceTile} />\n </Mosaic.Viewport>\n </Mosaic.Container>\n </SearchList.Content>\n </SearchList.Root>\n </Layout.Main>\n );\n};\n\nconst WorkspaceTile: StackTileComponent<Node.Node> = ({ data }) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const { selectedValue, registerItem, unregisterItem } = useSearchListItem();\n const ref = useRef<HTMLDivElement>(null);\n\n const handleSelect = useCallback(\n () => invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: data.id }),\n [invokePromise, data.id],\n );\n\n useLoadDescendents(data.id);\n\n const name = toLocalizedString(data.properties.label, t);\n const isSelected = selectedValue === data.id;\n\n // Register this workspace with the search context.\n useEffect(() => {\n if (ref.current) {\n registerItem(data.id, ref.current, handleSelect);\n }\n\n return () => unregisterItem(data.id);\n }, [data.id, handleSelect, registerItem, unregisterItem]);\n\n // Scroll into view when selected.\n useEffect(() => {\n if (isSelected && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, [isSelected]);\n\n return (\n <Card.Root\n ref={ref}\n role='button'\n fullWidth\n tabIndex={-1} // TODO(burdon): Use Mosaic.Focus.\n data-selected={isSelected}\n classNames={mx('dx-focus-ring', isSelected && 'bg-hoverOverlay')}\n onClick={handleSelect}\n >\n <Card.Toolbar density='coarse'>\n <Avatar.Root>\n <Avatar.Content\n icon={data.properties.icon}\n hue={data.properties.hue}\n hueVariant='transparent'\n variant='square'\n size={12}\n fallback={name}\n />\n <Avatar.Label>{name}</Avatar.Label>\n <Icon icon='ph--caret-right--regular' />\n </Avatar.Root>\n </Card.Toolbar>\n </Card.Root>\n );\n};\n\n/** Filters nodes by disposition. */\nconst filterItems = (node: Node.Node, disposition: string) => {\n return node.properties.disposition === disposition;\n};\n\n/** Returns root-level items filtered by disposition. */\nconst useItemsByDisposition = (disposition: string, sort = false) => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, Node.RootId);\n const filtered = connections.filter((node) => filterItems(node, disposition));\n return sort ? filtered.toSorted((a, b) => byPosition(a.properties, b.properties)) : filtered;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { Graph } from '@dxos/plugin-graph';\n\n/**\n * Hook to expand graph nodes two levels deep when directly linked to.\n */\nexport const useLoadDescendents = (nodeId?: string) => {\n const { graph } = useAppGraph();\n\n useEffect(() => {\n if (nodeId) {\n // First level: expand the node itself.\n Graph.expand(graph, nodeId, 'outbound');\n // Second level: expand each child.\n Graph.getConnections(graph, nodeId, 'outbound').forEach((child) => {\n Graph.expand(graph, child.id, 'outbound');\n });\n }\n }, [nodeId, graph]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type DrawerState, Main as NaturalMain } from '@dxos/react-ui';\nimport { Mosaic } from '@dxos/react-ui-mosaic';\n\nimport { useSimpleLayoutState } from '../../hooks';\nimport { Dialog } from '../Dialog';\nimport { PopoverContent, PopoverRoot } from '../Popover';\n\nimport { Drawer } from './Drawer';\nimport { Main } from './Main';\n\nexport const SimpleLayout = () => {\n const { state, updateState } = useSimpleLayoutState();\n\n const handleDrawerStateChange = useCallback(\n (nextState: DrawerState) => {\n // Sync all drawer state changes to state.\n updateState((s) => ({ ...s, drawerState: nextState }));\n },\n [updateState],\n );\n\n return (\n <Mosaic.Root>\n <NaturalMain.Root drawerState={state.drawerState ?? 'closed'} onDrawerStateChange={handleDrawerStateChange}>\n <PopoverRoot>\n <Main />\n <Drawer />\n <Dialog />\n <PopoverContent />\n </PopoverRoot>\n </NaturalMain.Root>\n </Mosaic.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\n// TODO(wittjosiah): Factor out to shared location with plugin-deck.\nconst PLANK_COMPANION_TYPE = 'dxos.org/plugin/deck/plank-companion';\n\nexport const useCompanions = (id?: string) => {\n const { graph } = useAppGraph();\n const nodes = useConnections(graph, id);\n const companions = nodes.filter((node) => node.type === PLANK_COMPANION_TYPE);\n return useMemo(() => companions.toSorted((a, b) => byPosition(a.properties, b.properties)), [companions]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext, useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback, useContext } from 'react';\n\nimport { useCapability } from '@dxos/app-framework/react';\n\nimport { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '../types';\n\nexport type SimpleLayoutStateHook = {\n state: SimpleLayoutState;\n updateState: (fn: (current: SimpleLayoutState) => SimpleLayoutState) => void;\n};\n\nexport const useSimpleLayoutState = (): SimpleLayoutStateHook => {\n const registry = useContext(RegistryContext);\n const stateAtom = useCapability(SimpleLayoutStateCapability);\n const state = useAtomValue(stateAtom);\n\n const updateState = useCallback(\n (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {\n registry.set(stateAtom, fn(registry.get(stateAtom)));\n },\n [registry, stateAtom],\n );\n\n return { state, updateState };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { useSimpleLayoutState } from '../../hooks';\nimport { ContentError } from '../ContentError';\n\nexport const Dialog = () => {\n const { state, updateState } = useSimpleLayoutState();\n\n const DialogRoot = state.dialogType === 'alert' ? AlertDialog.Root : NaturalDialog.Root;\n const DialogOverlay = state.dialogType === 'alert' ? AlertDialog.Overlay : NaturalDialog.Overlay;\n\n return (\n <DialogRoot\n modal={state.dialogBlockAlign !== 'end'}\n open={state.dialogOpen}\n onOpenChange={(nextOpen) => updateState((s) => ({ ...s, dialogOpen: nextOpen }))}\n >\n {state.dialogBlockAlign === 'end' ? (\n <Surface role='dialog' data={state.dialogContent} limit={1} fallback={ContentError} />\n ) : (\n <DialogOverlay\n blockAlign={state.dialogBlockAlign}\n classNames={state.dialogOverlayClasses}\n style={state.dialogOverlayStyle}\n >\n <Surface role='dialog' data={state.dialogContent} limit={1} fallback={ContentError} />\n </DialogOverlay>\n )}\n </DialogRoot>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\n\n// TODO(burdon): Factor out.\nexport const ContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(meta.id);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='grid place-items-center overflow-y-auto attention-surface'>\n <p role='alert' className={mx(descriptionMessage, 'p-2 break-all rounded-sm')}>\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { Popover, type PopoverContentInteractOutsideEvent, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-mosaic';\n\nimport { useSimpleLayoutState } from '../../hooks';\nimport { meta } from '../../meta';\n\nconst DEBOUNCE_DELAY = 40;\n\ntype LayoutPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [LayoutPopoverProvider, useLayoutPopoverContext] = createContext<LayoutPopoverContextValue>('LayoutPopover');\n\nexport const PopoverRoot = ({ children }: PropsWithChildren) => {\n const { state } = useSimpleLayoutState();\n const [open, setOpen] = useState(false);\n const virtualRef = useRef<HTMLButtonElement | null>(null);\n const [virtualIter, setVirtualIter] = useState(0);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // TODO(thure): This is a workaround for the race condition between displaying a Popover and either rendering\n // the anchor further down the tree or measuring the virtual trigger's client rect.\n useEffect(() => {\n setOpen(false);\n if (state.popoverOpen) {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (state.popoverAnchor && virtualRef.current !== state.popoverAnchor) {\n virtualRef.current = state.popoverAnchor ?? null;\n setVirtualIter((iter) => iter + 1);\n }\n debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);\n }\n }, [state.popoverOpen, state.popoverAnchorId, state.popoverAnchor, state.popoverContent]);\n\n return (\n <LayoutPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={false} open={open}>\n {state.popoverAnchor && <Popover.VirtualTrigger key={virtualIter} virtualRef={virtualRef} />}\n {children}\n </Popover.Root>\n </LayoutPopoverProvider>\n );\n};\n\nexport const PopoverContent = () => {\n const { t } = useTranslation(meta.id);\n const { state, updateState } = useSimpleLayoutState();\n const { setOpen } = useLayoutPopoverContext('PopoverContent');\n\n const handleClose = useCallback(() => {\n setOpen(false);\n updateState((s) => ({\n ...s,\n popoverOpen: false,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverSide: undefined,\n }));\n }, [setOpen, updateState]);\n\n const handleInteractOutside = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n handleClose();\n }\n },\n [handleClose],\n );\n\n const collisionBoundaries: HTMLElement[] = useMemo(() => {\n const closest = state.popoverAnchor?.closest('[data-popover-collision-boundary]') as HTMLElement | null | undefined;\n return closest ? [closest] : [];\n }, [state.popoverAnchor]);\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={state.popoverSide}\n sticky='always'\n hideWhenDetached\n collisionBoundary={collisionBoundaries}\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n >\n <Popover.Viewport>\n {state.popoverKind === 'card' && (\n <Card.Root>\n <Card.Toolbar>\n {/* TODO(wittjosiah): Cleaner way to handle no drag handle in toolbar? */}\n <span />\n {state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}\n <Card.Close onClick={handleClose} />\n </Card.Toolbar>\n <Surface role='card--content' data={state.popoverContent} limit={1} />\n </Card.Root>\n )}\n {state.popoverKind === 'base' && <Surface role='popover' data={state.popoverContent} limit={1} />}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Surface, useAppGraph } from '@dxos/app-framework/react';\nimport { type Node, useNode } from '@dxos/plugin-graph';\nimport { IconButton, Main as NaturalMain, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nimport { useCompanions, useSimpleLayoutState } from '../../hooks';\nimport { meta } from '../../meta';\nimport { ContentError } from '../ContentError';\nimport { ContentLoading } from '../ContentLoading';\n\nconst DRAWER_NAME = 'SimpleLayout.Drawer';\n\n/**\n * Companion drawer component.\n */\nexport const Drawer = () => {\n const { t } = useTranslation(meta.id);\n const { state, updateState } = useSimpleLayoutState();\n const { graph } = useAppGraph();\n\n const placeholder = useMemo(() => <ContentLoading />, []);\n\n // Get all companions for the current active (primary) item.\n const activeId = state.active ?? state.workspace;\n const companions = useCompanions(activeId);\n const { companionId, variant } = useSelectedCompanion(companions, state.companionVariant);\n\n // Get node for the selected companion.\n const node = useNode(graph, companionId);\n const parentNode = useNode(graph, activeId);\n\n // Build Surface data for the companion content.\n const data = useMemo(() => {\n return (\n node && {\n attendableId: companionId,\n subject: node.data,\n companionTo: parentNode?.data,\n properties: node.properties,\n variant,\n }\n );\n }, [companionId, node, parentNode, variant]);\n\n // Handle tab click to switch companions.\n const handleTabClick = useCallback(\n (companion: Node.Node) => {\n const [, companionVariant] = companion.id.split(ATTENDABLE_PATH_SEPARATOR);\n updateState((s) => ({ ...s, companionVariant }));\n },\n [updateState],\n );\n\n // Handle expand/collapse toggle.\n const handleToggleExpand = useCallback(() => {\n updateState((s) => ({\n ...s,\n drawerState: s.drawerState === 'full' ? 'expanded' : 'full',\n }));\n }, [updateState]);\n\n // Handle close.\n const handleClose = useCallback(() => {\n updateState((s) => ({ ...s, drawerState: 'closed' }));\n }, [updateState]);\n\n const drawerState = state.drawerState ?? 'closed';\n if (drawerState === 'closed') {\n return null;\n }\n\n const isFullyExpanded = drawerState === 'full';\n\n return (\n <NaturalMain.Drawer label={t('drawer label')}>\n <Toolbar.Root>\n {/* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */}\n <div role='tablist' className='flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1'>\n {/* TODO(burdon): Factor out in common with NavBar. */}\n {companions.map((companion) => (\n <IconButton\n key={companion.id}\n role='tab'\n aria-selected={companionId === companion.id}\n icon={companion.properties.icon}\n iconOnly\n label={toLocalizedString(companion.properties.label, t)}\n variant={companionId === companion.id ? 'primary' : 'ghost'}\n onClick={() => handleTabClick(companion)}\n />\n ))}\n </div>\n <Toolbar.Separator variant='gap' />\n <Toolbar.IconButton\n icon={isFullyExpanded ? 'ph--arrow-down--regular' : 'ph--arrow-up--regular'}\n iconOnly\n label={isFullyExpanded ? t('collapse drawer label') : t('expand drawer label')}\n onClick={handleToggleExpand}\n />\n <Toolbar.IconButton icon='ph--x--regular' iconOnly label={t('close drawer label')} onClick={handleClose} />\n </Toolbar.Root>\n {/* TODO(burdon): Fix containment. */}\n <Surface role='article' data={data} limit={1} fallback={ContentError} placeholder={placeholder} />\n </NaturalMain.Drawer>\n );\n};\n\nDrawer.displayName = DRAWER_NAME;\n\n/** Parse entry ID to extract primary ID and variant. */\nconst parseEntryId = (entryId: string) => {\n const [id, variant] = entryId.split(ATTENDABLE_PATH_SEPARATOR);\n return { id, variant };\n};\n\n/**\n * Resolves which companion to show based on variant preference.\n * Falls back to first available if preferred variant not available.\n */\nconst useSelectedCompanion = (companions: Node.Node[], preferredVariant?: string) => {\n const selectedCompanion = useMemo(() => {\n if (companions.length === 0) {\n return undefined;\n }\n\n // Try to find companion matching the preferred variant.\n if (preferredVariant) {\n const preferred = companions.find((c) => {\n const { variant } = parseEntryId(c.id);\n return variant === preferredVariant;\n });\n if (preferred) {\n return preferred;\n }\n }\n\n // Fallback to first companion.\n return companions[0];\n }, [companions, preferredVariant]);\n\n const companionId = selectedCompanion?.id;\n const { variant } = parseEntryId(companionId ?? '');\n\n return { selectedCompanion, companionId, variant };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\n// TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259\nexport const ContentLoading = () => {\n return <div role='none' className='grid place-items-center attention-surface' />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface, useAppGraph } from '@dxos/app-framework/react';\nimport { useNode } from '@dxos/plugin-graph';\nimport { Main as NaturalMain, useSidebars } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useSimpleLayoutState } from '../../hooks';\nimport { ContentError } from '../ContentError';\nimport { ContentLoading } from '../ContentLoading';\nimport { useLoadDescendents } from '../hooks';\n\nimport { Banner } from './Banner';\nimport { NavBar } from './NavBar';\n\nconst MAIN_NAME = 'SimpleLayout.Main';\n\n/**\n * Main content component.\n */\nexport const Main = () => {\n const { state } = useSimpleLayoutState();\n const { graph } = useAppGraph();\n const id = state.active ?? state.workspace;\n const node = useNode(graph, id);\n\n // Ensures that children are loaded so that they are available to navigate to.\n useLoadDescendents(id);\n\n const placeholder = useMemo(() => <ContentLoading />, []);\n\n const data = useMemo(() => {\n return (\n node && {\n attendableId: id,\n subject: node.data,\n properties: node.properties,\n popoverAnchorId: state.popoverAnchorId,\n }\n );\n }, [id, node, node?.data, node?.properties, state.popoverAnchorId]);\n\n const { drawerState } = useSidebars(MAIN_NAME);\n const showNavBar = !state.isPopover && drawerState === 'closed';\n\n return (\n <NaturalMain.Content\n bounce\n classNames={mx('bs-full', 'pbs-[env(safe-area-inset-top)] pbe-[env(safe-area-inset-bottom)]')}\n >\n <div\n role='none'\n className={mx(\n 'grid bs-full overflow-hidden',\n showNavBar ? 'grid-rows-[min-content_1fr_min-content]' : 'grid-rows-[min-content_1fr]',\n )}\n >\n <Banner classNames='border-be border-separator' node={node} />\n <article className='bs-full overflow-hidden'>\n <Surface key={id} role='article' data={data} limit={1} fallback={ContentError} placeholder={placeholder} />\n </article>\n {showNavBar && <NavBar classNames='border-bs border-separator' activeId={id} />}\n </div>\n </NaturalMain.Content>\n );\n};\n\nMain.displayName = MAIN_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, useCallback, useMemo } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { Graph, Node, useActionRunner, useActions } from '@dxos/plugin-graph';\nimport { IconButton, Popover, type ThemedClassName, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, MenuProvider } from '@dxos/react-ui-menu';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { useSimpleLayoutState } from '../../hooks';\nimport { meta } from '../../meta';\n\n/**\n * Check if an item is a direct child of a workspace or collection.\n * Returns true if any parent node has disposition 'workspace' or 'collection'.\n */\nconst isWorkspaceOrCollectionChild = (graph: Graph.ReadableGraph, itemId: string): boolean => {\n const parents = Graph.getConnections(graph, itemId, 'inbound');\n return parents.some(\n (node) => node.properties.disposition === 'workspace' || node.properties.disposition === 'collection',\n );\n};\n\nexport type BannerProps = ThemedClassName<{\n node?: Node.Node;\n}>;\n\nexport const Banner = ({ node, classNames }: BannerProps) => {\n const { t } = useTranslation(meta.id);\n const { state } = useSimpleLayoutState();\n const { invokePromise } = useOperationInvoker();\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const label = (node && toLocalizedString(node.properties.label, t)) ?? t('current app name', { ns: osTranslations });\n\n // Get actions for the current node, filtered by disposition.\n // NOTE: Graph expansion is handled by useLoadDescendents in Main.tsx.\n const allActions = useActions(graph, node?.id);\n const actions = useMemo(() => {\n return allActions.filter((a) =>\n ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition),\n );\n }, [allActions]);\n\n // Check if current active item is a top-level workspace/collection child.\n const isTopLevelItem = useMemo(() => {\n if (!state.active) {\n return false;\n }\n return isWorkspaceOrCollectionChild(graph, state.active);\n }, [graph, state.active]);\n\n const handleClick = useCallback(async () => {\n if (state.active) {\n // If history is empty and this is a top-level item, go to home.\n if (state.history.length === 0 && isTopLevelItem) {\n await invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: Node.RootId });\n } else {\n // Otherwise, close (which will pop from history or clear active).\n await invokePromise(Common.LayoutOperation.Close, { subject: [state.active] });\n }\n } else {\n await invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: Node.RootId });\n }\n }, [invokePromise, state.active, state.history.length, isTopLevelItem]);\n\n // Wrap the menu trigger with Popover.Anchor when the popoverAnchorId matches.\n const AnchorRoot = node && state.popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? Popover.Anchor : Fragment;\n\n if (!node) {\n return null;\n }\n\n return (\n <Toolbar.Root role='banner' classNames={mx('grid grid-cols-[var(--rail-size)_1fr_var(--rail-size)]', classNames)}>\n {node.id !== Node.RootId ? (\n <IconButton\n iconOnly\n variant='ghost'\n icon='ph--caret-left--regular'\n label={t('back label')}\n onClick={handleClick}\n />\n ) : (\n <div />\n )}\n <h1 className={'grow text-center truncate font-medium'}>{label}</h1>\n {actions.length > 0 ? (\n <AnchorRoot>\n <MenuProvider onAction={runAction}>\n <DropdownMenu.Root items={actions} caller={meta.id}>\n <DropdownMenu.Trigger asChild>\n <IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('actions menu label')}\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n </AnchorRoot>\n ) : (\n <span />\n )}\n </Toolbar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { Node, useActionRunner, useConnections } from '@dxos/plugin-graph';\nimport { IconButton, type ThemedClassName, Toolbar, Tooltip, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, MenuProvider } from '@dxos/react-ui-menu';\nimport { mx } from '@dxos/ui-theme';\n\nimport { useCompanions } from '../../hooks';\nimport { meta } from '../../meta';\n\nconst NAVBAR_NAME = 'SimpleLayout.NavBar';\n\nexport type NavBarProps = ThemedClassName<{\n /** Active AppGraph node ID. */\n activeId?: string;\n}>;\n\nexport const NavBar = ({ classNames, activeId }: NavBarProps) => {\n const { t } = useTranslation(meta.id);\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n const { invokePromise } = useOperationInvoker();\n\n const connections = useConnections(graph, Node.RootId);\n const menuActions = connections.filter((node) => node.properties.disposition === 'menu');\n\n const companions = useCompanions(activeId);\n\n return (\n <Toolbar.Root classNames={mx('justify-center', classNames)}>\n {companions.map((companion) => (\n <Toolbar.IconButton\n key={companion.id}\n icon={companion.properties.icon ?? 'ph--placeholder--regular'}\n iconOnly\n label={toLocalizedString(companion.properties.label, t)}\n onClick={() => {\n void invokePromise(Common.LayoutOperation.Open, {\n subject: [companion.id],\n });\n }}\n />\n ))}\n\n <Toolbar.Separator variant='gap' />\n\n <MenuProvider onAction={runAction}>\n <DropdownMenu.Root items={menuActions}>\n <Tooltip.Trigger asChild content={t('app menu label')}>\n <DropdownMenu.Trigger asChild data-testid='simpleLayoutPlugin.addSpace'>\n <IconButton icon='ph--plus--regular' iconOnly label={t('main menu label')} />\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n </Toolbar.Root>\n );\n};\n\nNavBar.displayName = NAVBAR_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { type Node, useConnections } from '@dxos/plugin-graph';\nimport { Avatar, Icon, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Card, Layout, Mosaic, type StackTileComponent } from '@dxos/react-ui-mosaic';\nimport { SearchList, useSearchListItem, useSearchListResults } from '@dxos/react-ui-searchlist';\nimport { mx } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\nimport { useLoadDescendents } from '../hooks';\n\nexport type WorkspaceProps = {\n id: string;\n};\n\n/**\n *\n */\n// TODO(burdon): Rename or motivate name in comment.\nexport const Workspace = ({ id }: WorkspaceProps) => {\n const { t } = useTranslation(meta.id);\n const { graph } = useAppGraph();\n\n // Expand the workspace node to load its children.\n useLoadDescendents(id);\n\n // Get direct children of the workspace node.\n const children = useConnections(graph, id, 'outbound');\n\n const { results, handleSearch } = useSearchListResults({\n items: children,\n extract: (child) => toLocalizedString(child.properties.label, t),\n });\n\n return (\n <Layout.Main toolbar>\n <SearchList.Root onSearch={handleSearch}>\n <Toolbar.Root>\n <SearchList.Input placeholder={t('search placeholder')} autoFocus />\n </Toolbar.Root>\n <SearchList.Content>\n <Mosaic.Container asChild>\n <Mosaic.Viewport padding>\n <Mosaic.Stack items={results} getId={(child) => child.id} Tile={WorkspaceChildTile} />\n </Mosaic.Viewport>\n </Mosaic.Container>\n </SearchList.Content>\n </SearchList.Root>\n </Layout.Main>\n );\n};\n\nconst WorkspaceChildTile: StackTileComponent<Node.Node> = ({ data }) => {\n const { t } = useTranslation(meta.id);\n const { invokeSync } = useOperationInvoker();\n const ref = useRef<HTMLDivElement>(null);\n const { selectedValue, registerItem, unregisterItem } = useSearchListItem();\n const isSelected = selectedValue === data.id;\n\n const name = toLocalizedString(data.properties.label, t);\n\n const handleSelect = useCallback(\n () => invokeSync(Common.LayoutOperation.Open, { subject: [data.id] }),\n [invokeSync, data.id],\n );\n\n // Register this item with the search context.\n useEffect(() => {\n if (ref.current) {\n registerItem(data.id, ref.current, handleSelect);\n }\n\n return () => unregisterItem(data.id);\n }, [data.id, handleSelect, registerItem, unregisterItem]);\n\n // Scroll into view when selected.\n useEffect(() => {\n if (isSelected && ref.current) {\n ref.current.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, [isSelected]);\n\n return (\n <Card.Root\n ref={ref}\n role='button'\n fullWidth\n tabIndex={-1} // TODO(burdon): Use Mosaic.Focus.\n data-selected={isSelected}\n classNames={mx('dx-focus-ring', isSelected && 'bg-hoverOverlay')}\n onClick={handleSelect}\n >\n <Card.Toolbar density='coarse'>\n <Avatar.Root>\n <Avatar.Content\n hue={data.properties.hue}\n icon={data.properties.icon}\n hueVariant='transparent'\n variant='square'\n size={12}\n fallback={name}\n />\n <Avatar.Label>{name}</Avatar.Label>\n <Icon icon='ph--caret-right--regular' />\n </Avatar.Root>\n </Card.Toolbar>\n </Card.Root>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useCallback", "useEffect", "useMemo", "useRef", "Common", "useAppGraph", "useOperationInvoker", "Node", "useConnections", "Avatar", "Icon", "Toolbar", "toLocalizedString", "useTranslation", "Card", "Layout", "Mosaic", "SearchList", "useSearchListItem", "useSearchListResults", "mx", "byPosition", "useEffect", "useAppGraph", "Graph", "useLoadDescendents", "nodeId", "graph", "useAppGraph", "useEffect", "Graph", "expand", "getConnections", "forEach", "child", "id", "Home", "_", "t", "useTranslation", "meta", "id", "userAccountItem", "useItemsByDisposition", "pinnedItems", "workspaceItems", "useLoadDescendents", "Node", "RootId", "items", "useMemo", "results", "handleSearch", "useSearchListResults", "extract", "node", "toLocalizedString", "properties", "label", "Layout", "Main", "toolbar", "SearchList", "Root", "onSearch", "Toolbar", "Input", "placeholder", "autoFocus", "Content", "Mosaic", "Container", "asChild", "Viewport", "padding", "Stack", "getId", "Tile", "WorkspaceTile", "data", "invokePromise", "useOperationInvoker", "selectedValue", "registerItem", "unregisterItem", "useSearchListItem", "ref", "useRef", "handleSelect", "useCallback", "Common", "LayoutOperation", "SwitchWorkspace", "subject", "name", "isSelected", "useEffect", "current", "scrollIntoView", "block", "behavior", "Card", "role", "fullWidth", "tabIndex", "data-selected", "classNames", "mx", "onClick", "density", "Avatar", "icon", "hue", "hueVariant", "variant", "size", "fallback", "Label", "Icon", "filterItems", "disposition", "sort", "graph", "useAppGraph", "connections", "useConnections", "filtered", "filter", "toSorted", "a", "b", "byPosition", "React", "useCallback", "Main", "NaturalMain", "Mosaic", "useMemo", "useAppGraph", "useConnections", "byPosition", "PLANK_COMPANION_TYPE", "useCompanions", "id", "graph", "useAppGraph", "nodes", "useConnections", "companions", "filter", "node", "type", "useMemo", "toSorted", "a", "b", "byPosition", "properties", "RegistryContext", "useAtomValue", "useCallback", "useContext", "useCapability", "useSimpleLayoutState", "registry", "useContext", "RegistryContext", "stateAtom", "useCapability", "SimpleLayoutStateCapability", "state", "useAtomValue", "updateState", "useCallback", "fn", "set", "get", "React", "Surface", "AlertDialog", "Dialog", "NaturalDialog", "React", "useTranslation", "descriptionMessage", "mx", "ContentError", "error", "t", "useTranslation", "meta", "id", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionMessage", "Dialog", "state", "updateState", "useSimpleLayoutState", "DialogRoot", "dialogType", "AlertDialog", "Root", "NaturalDialog", "DialogOverlay", "Overlay", "React", "modal", "dialogBlockAlign", "open", "dialogOpen", "onOpenChange", "nextOpen", "s", "Surface", "role", "data", "dialogContent", "limit", "fallback", "ContentError", "blockAlign", "classNames", "dialogOverlayClasses", "style", "dialogOverlayStyle", "createContext", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Surface", "Popover", "toLocalizedString", "useTranslation", "Card", "DEBOUNCE_DELAY", "LayoutPopoverProvider", "useLayoutPopoverContext", "createContext", "PopoverRoot", "children", "state", "useSimpleLayoutState", "open", "setOpen", "useState", "virtualRef", "useRef", "virtualIter", "setVirtualIter", "debounceRef", "useEffect", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "React", "Popover", "Root", "modal", "VirtualTrigger", "key", "PopoverContent", "t", "useTranslation", "meta", "id", "updateState", "handleClose", "useCallback", "s", "undefined", "popoverSide", "handleInteractOutside", "event", "type", "currentTarget", "classList", "contains", "preventDefault", "collisionBoundaries", "useMemo", "closest", "Portal", "Content", "side", "sticky", "hideWhenDetached", "collisionBoundary", "onInteractOutside", "onEscapeKeyDown", "Viewport", "popoverKind", "Card", "Toolbar", "span", "popoverTitle", "Title", "toLocalizedString", "Close", "onClick", "Surface", "role", "data", "limit", "Arrow", "React", "useCallback", "useMemo", "Surface", "useAppGraph", "useNode", "IconButton", "Main", "NaturalMain", "Toolbar", "toLocalizedString", "useTranslation", "ATTENDABLE_PATH_SEPARATOR", "React", "ContentLoading", "React", "div", "role", "className", "DRAWER_NAME", "Drawer", "t", "useTranslation", "meta", "id", "state", "updateState", "useSimpleLayoutState", "graph", "useAppGraph", "placeholder", "useMemo", "React", "ContentLoading", "activeId", "active", "workspace", "companions", "useCompanions", "companionId", "variant", "useSelectedCompanion", "companionVariant", "node", "useNode", "parentNode", "data", "attendableId", "subject", "companionTo", "properties", "handleTabClick", "useCallback", "companion", "split", "ATTENDABLE_PATH_SEPARATOR", "s", "handleToggleExpand", "drawerState", "handleClose", "isFullyExpanded", "NaturalMain", "label", "Toolbar", "Root", "div", "role", "className", "map", "IconButton", "key", "aria-selected", "icon", "iconOnly", "toLocalizedString", "onClick", "Separator", "Surface", "limit", "fallback", "ContentError", "displayName", "parseEntryId", "entryId", "preferredVariant", "selectedCompanion", "length", "undefined", "preferred", "find", "c", "React", "useMemo", "Surface", "useAppGraph", "useNode", "Main", "NaturalMain", "useSidebars", "mx", "React", "Fragment", "useCallback", "useMemo", "Common", "useAppGraph", "useOperationInvoker", "Graph", "Node", "useActionRunner", "useActions", "IconButton", "Popover", "Toolbar", "toLocalizedString", "useTranslation", "DropdownMenu", "MenuProvider", "mx", "osTranslations", "isWorkspaceOrCollectionChild", "graph", "itemId", "parents", "Graph", "getConnections", "some", "node", "properties", "disposition", "Banner", "classNames", "t", "useTranslation", "meta", "id", "state", "useSimpleLayoutState", "invokePromise", "useOperationInvoker", "useAppGraph", "runAction", "useActionRunner", "label", "toLocalizedString", "ns", "osTranslations", "allActions", "useActions", "actions", "useMemo", "filter", "a", "includes", "isTopLevelItem", "active", "handleClick", "useCallback", "history", "length", "Common", "LayoutOperation", "SwitchWorkspace", "subject", "Node", "RootId", "Close", "AnchorRoot", "popoverAnchorId", "Popover", "Anchor", "Fragment", "React", "Toolbar", "Root", "role", "mx", "IconButton", "iconOnly", "variant", "icon", "onClick", "div", "h1", "className", "MenuProvider", "onAction", "DropdownMenu", "items", "caller", "Trigger", "asChild", "span", "React", "Common", "useAppGraph", "useOperationInvoker", "Node", "useActionRunner", "useConnections", "IconButton", "Toolbar", "Tooltip", "toLocalizedString", "useTranslation", "DropdownMenu", "MenuProvider", "mx", "NAVBAR_NAME", "NavBar", "classNames", "activeId", "t", "useTranslation", "meta", "id", "graph", "useAppGraph", "runAction", "useActionRunner", "invokePromise", "useOperationInvoker", "connections", "useConnections", "Node", "RootId", "menuActions", "filter", "node", "properties", "disposition", "companions", "useCompanions", "React", "Toolbar", "Root", "mx", "map", "companion", "IconButton", "key", "icon", "iconOnly", "label", "toLocalizedString", "onClick", "Common", "LayoutOperation", "Open", "subject", "Separator", "variant", "MenuProvider", "onAction", "DropdownMenu", "items", "Tooltip", "Trigger", "asChild", "content", "data-testid", "displayName", "MAIN_NAME", "Main", "state", "useSimpleLayoutState", "graph", "useAppGraph", "id", "active", "workspace", "node", "useNode", "useLoadDescendents", "placeholder", "useMemo", "React", "ContentLoading", "data", "attendableId", "subject", "properties", "popoverAnchorId", "drawerState", "useSidebars", "showNavBar", "isPopover", "NaturalMain", "Content", "bounce", "classNames", "mx", "div", "role", "className", "Banner", "article", "Surface", "key", "limit", "fallback", "ContentError", "NavBar", "activeId", "displayName", "SimpleLayout", "state", "updateState", "useSimpleLayoutState", "handleDrawerStateChange", "useCallback", "nextState", "s", "drawerState", "React", "Mosaic", "Root", "NaturalMain", "onDrawerStateChange", "PopoverRoot", "Main", "Drawer", "Dialog", "PopoverContent", "React", "useCallback", "useEffect", "useRef", "Common", "useAppGraph", "useOperationInvoker", "useConnections", "Avatar", "Icon", "Toolbar", "toLocalizedString", "useTranslation", "Card", "Layout", "Mosaic", "SearchList", "useSearchListItem", "useSearchListResults", "mx", "Workspace", "id", "t", "useTranslation", "meta", "graph", "useAppGraph", "useLoadDescendents", "children", "useConnections", "results", "handleSearch", "useSearchListResults", "items", "extract", "child", "toLocalizedString", "properties", "label", "React", "Layout", "Main", "toolbar", "SearchList", "Root", "onSearch", "Toolbar", "Input", "placeholder", "autoFocus", "Content", "Mosaic", "Container", "asChild", "Viewport", "padding", "Stack", "getId", "Tile", "WorkspaceChildTile", "data", "invokeSync", "useOperationInvoker", "ref", "useRef", "selectedValue", "registerItem", "unregisterItem", "useSearchListItem", "isSelected", "name", "handleSelect", "useCallback", "Common", "LayoutOperation", "Open", "subject", "useEffect", "current", "scrollIntoView", "block", "behavior", "Card", "role", "fullWidth", "tabIndex", "data-selected", "classNames", "mx", "onClick", "density", "Avatar", "hue", "icon", "hueVariant", "variant", "size", "fallback", "Label", "Icon"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Operation, OperationResolver } from '@dxos/operation';\nimport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nimport { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '../../types';\n\n/** Maximum number of items to keep in navigation history. */\nconst MAX_HISTORY_LENGTH = 50;\n\n/** Parse entry ID to extract primary ID and variant. */\nconst parseEntryId = (entryId: string) => {\n const [id, variant] = entryId.split(ATTENDABLE_PATH_SEPARATOR);\n return { id, variant };\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const registry = yield* Capability.get(Common.Capability.AtomRegistry);\n const stateAtom = yield* Capability.get(SimpleLayoutStateCapability);\n\n const getState = () => registry.get(stateAtom);\n const updateState = (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {\n registry.set(stateAtom, fn(getState()));\n };\n\n return Capability.contributes(Common.Capability.OperationResolver, [\n //\n // SetLayoutMode\n //\n // TODO(burdon): No-op for to fix startup bug?\n OperationResolver.make({\n operation: Common.LayoutOperation.SetLayoutMode,\n handler: Effect.fnUntraced(function* () {}),\n }),\n\n //\n // UpdateSidebar - No-op for simple layout.\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateSidebar,\n handler: () => Effect.void,\n }),\n\n //\n // UpdateComplementary - Controls companion drawer.\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateComplementary,\n handler: Effect.fnUntraced(function* (input) {\n if (input.state === 'closed') {\n updateState((state) => ({\n ...state,\n drawerState: 'closed',\n }));\n }\n }),\n }),\n\n //\n // UpdateDialog\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateDialog,\n handler: Effect.fnUntraced(function* (input) {\n updateState((state) => ({\n ...state,\n dialogOpen: input.state ?? Boolean(input.subject),\n dialogType: input.type ?? 'default',\n dialogBlockAlign: input.blockAlign ?? 'center',\n dialogOverlayClasses: input.overlayClasses,\n dialogOverlayStyle: input.overlayStyle,\n dialogContent: input.subject ? { component: input.subject, props: input.props } : undefined,\n }));\n }),\n }),\n\n //\n // UpdatePopover\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdatePopover,\n handler: Effect.fnUntraced(function* (input) {\n updateState((state) => ({\n ...state,\n popoverOpen: input.state ?? Boolean(input.subject),\n popoverKind: input.kind ?? 'base',\n popoverTitle: input.kind === 'card' ? input.title : undefined,\n popoverContent:\n typeof input.subject === 'string'\n ? { component: input.subject, props: input.props }\n : input.subject\n ? { subject: input.subject }\n : undefined,\n popoverSide: input.side,\n popoverVariant: input.variant,\n popoverAnchor: input.variant === 'virtual' ? input.anchor : state.popoverAnchor,\n popoverAnchorId: input.variant !== 'virtual' ? input.anchorId : state.popoverAnchorId,\n }));\n }),\n }),\n\n //\n // SwitchWorkspace\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.SwitchWorkspace,\n handler: Effect.fnUntraced(function* (input) {\n updateState((state) => ({\n ...state,\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n previousWorkspace: !state.workspace.startsWith('!') ? state.workspace : state.previousWorkspace,\n workspace: input.subject,\n active: undefined,\n // Clear history when switching workspaces.\n history: [],\n }));\n }),\n }),\n\n //\n // RevertWorkspace\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.RevertWorkspace,\n handler: Effect.fnUntraced(function* () {\n const state = getState();\n yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, {\n subject: state.previousWorkspace,\n });\n }),\n }),\n\n //\n // Open\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Open,\n handler: Effect.fnUntraced(function* (input) {\n const id = input.subject[0];\n const { variant } = parseEntryId(id);\n\n if (variant) {\n // It's a companion - store the variant preference and open drawer.\n updateState((state) => ({\n ...state,\n companionVariant: variant,\n // Open drawer if closed, otherwise preserve current state (expanded/full).\n drawerState: state.drawerState === 'closed' || !state.drawerState ? 'expanded' : state.drawerState,\n }));\n } else {\n // Regular navigation - update active and history.\n updateState((state) => {\n // Push current active to history if it exists.\n const newHistory = state.active ? [...state.history, state.active] : state.history;\n // Limit history length to prevent memory issues.\n const trimmedHistory =\n newHistory.length > MAX_HISTORY_LENGTH ? newHistory.slice(-MAX_HISTORY_LENGTH) : newHistory;\n return {\n ...state,\n active: id,\n history: trimmedHistory,\n };\n });\n }\n }),\n }),\n\n //\n // Close\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Close,\n handler: Effect.fnUntraced(function* () {\n updateState((state) => {\n // Pop from history if available.\n if (state.history.length > 0) {\n const newHistory = [...state.history];\n const previousActive = newHistory.pop();\n return {\n ...state,\n active: previousActive,\n history: newHistory,\n };\n }\n // No history, just clear active.\n return {\n ...state,\n active: undefined,\n };\n });\n }),\n }),\n\n //\n // Set\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Set,\n handler: Effect.fnUntraced(function* (input) {\n updateState((state) => ({\n ...state,\n active: input.subject[0],\n }));\n }),\n }),\n ]);\n }),\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "Operation", "OperationResolver", "ATTENDABLE_PATH_SEPARATOR", "MAX_HISTORY_LENGTH", "parseEntryId", "entryId", "id", "variant", "split", "ATTENDABLE_PATH_SEPARATOR", "Capability", "makeModule", "fnUntraced", "registry", "get", "Common", "AtomRegistry", "stateAtom", "SimpleLayoutStateCapability", "getState", "updateState", "fn", "set", "contributes", "OperationResolver", "make", "operation", "LayoutOperation", "SetLayoutMode", "handler", "UpdateSidebar", "void", "UpdateComplementary", "input", "state", "drawerState", "UpdateDialog", "dialogOpen", "Boolean", "subject", "dialogType", "type", "dialogBlockAlign", "blockAlign", "dialogOverlayClasses", "overlayClasses", "dialogOverlayStyle", "overlayStyle", "dialogContent", "component", "props", "undefined", "UpdatePopover", "popoverOpen", "popoverKind", "kind", "popoverTitle", "title", "popoverContent", "popoverSide", "side", "popoverVariant", "popoverAnchor", "anchor", "popoverAnchorId", "anchorId", "SwitchWorkspace", "previousWorkspace", "workspace", "startsWith", "active", "history", "RevertWorkspace", "Operation", "invoke", "Open", "companionVariant", "newHistory", "trimmedHistory", "length", "slice", "Close", "previousActive", "pop", "Set"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-root/react-root.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\n\nimport { SimpleLayout } from '../../components';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactRoot, {\n id: meta.id,\n root: () => {\n return <SimpleLayout />;\n },\n }),\n ),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,YAAYC,cAAc;AAKnC,IAAA,qBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,WAAW;EAClDC,IAAIC,KAAKD;EACTE,MAAM,MAAA;AACJ,WAAO,sBAAA,cAACC,cAAAA,IAAAA;EACV;AACF,CAAA,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "React", "Capability", "Common", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactRoot", "id", "meta", "root", "SimpleLayout"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface/react-surface.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Node } from '@dxos/plugin-graph';\n\nimport { Home, Workspace } from '../../components';\nimport { meta } from '../../meta';\n\ntype SurfaceData = {\n attendableId: string;\n properties: Record<string, any>;\n};\n\nconst ALLOWED_DISPOSITIONS = ['workspace', 'user-account', 'pin-end'];\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactSurface, [\n Common.createSurface({\n id: `${meta.id}/home`,\n role: 'article',\n filter: (data): data is SurfaceData => data.attendableId === Node.RootId,\n component: () => <Home />,\n }),\n Common.createSurface({\n id: `${meta.id}/workspace-article`,\n role: 'article',\n position: 'fallback',\n filter: (data): data is SurfaceData =>\n ALLOWED_DISPOSITIONS.includes((data.properties as Record<string, any>)?.disposition),\n component: ({ data }) => <Workspace id={data.attendableId} />,\n }),\n ]),\n ),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,YAAYC,cAAc;AACnC,SAASC,YAAY;AAUrB,IAAMC,uBAAuB;EAAC;EAAa;EAAgB;;AAE3D,IAAA,wBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,cAAc;EACrDD,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAA8BA,KAAKC,iBAAiBC,KAAKC;IAClEC,WAAW,MAAM,sBAAA,cAACC,MAAAA,IAAAA;EACpB,CAAA;EACAZ,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNQ,UAAU;IACVP,QAAQ,CAACC,SACPZ,qBAAqBmB,SAAUP,KAAKQ,YAAoCC,WAAAA;IAC1EL,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACU,WAAAA;MAAUd,IAAII,KAAKC;;EAC/C,CAAA;CACD,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "React", "Capability", "Common", "Node", "ALLOWED_DISPOSITIONS", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "attendableId", "Node", "RootId", "component", "Home", "position", "includes", "properties", "disposition", "Workspace"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/spotlight-dismiss/spotlight-dismiss.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// Based on the frontend-driven dismiss pattern from:\n// https://github.com/Jedliu/tauri-template-demo\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { isTauri } from '@dxos/util';\n\n/**\n * Get the Tauri window API from the global object.\n */\nconst getTauriWindow = (): any => {\n const tauri = (globalThis as any).__TAURI__;\n return tauri?.window;\n};\n\n/**\n * Get the Tauri core API (invoke) from the global object.\n */\nconst getTauriCore = (): any => {\n const tauri = (globalThis as any).__TAURI__;\n return tauri?.core;\n};\n\nexport type SpotlightDismissOptions = {\n /** Whether running in popover window context. */\n isPopover?: boolean;\n};\n\n/**\n * Capability that sets up spotlight panel dismiss behavior.\n * When running in Tauri popover mode, listens for focus loss and Escape key\n * to dismiss the spotlight panel. Runs at startup before React renders.\n */\nexport default Capability.makeModule(({ isPopover = false }: SpotlightDismissOptions = {}) =>\n Effect.promise(async () => {\n if (!isPopover || !isTauri()) {\n return [];\n }\n\n // Set up focus listener.\n let focusCleanup: (() => void) | undefined;\n try {\n const tauriWindow = getTauriWindow();\n const tauriCore = getTauriCore();\n if (tauriWindow && tauriCore) {\n const win = tauriWindow.getCurrentWindow();\n focusCleanup = await win.onFocusChanged(async ({ payload }: { payload: boolean }) => {\n if (!payload) {\n await tauriCore.invoke('hide_spotlight');\n }\n });\n }\n } catch (err) {\n log.catch(err);\n }\n\n // Set up Escape key listener.\n const handleKeyDown = async (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n try {\n const tauriCore = getTauriCore();\n if (tauriCore) {\n await tauriCore.invoke('hide_spotlight');\n }\n } catch (err) {\n log.catch(err);\n }\n }\n };\n window.addEventListener('keydown', handleKeyDown);\n\n return Capability.contributes(Common.Capability.Null, null, () =>\n Effect.sync(() => {\n focusCleanup?.();\n window.removeEventListener('keydown', handleKeyDown);\n }),\n );\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAOA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,WAAW;AACpB,SAASC,eAAe;;AAKxB,IAAMC,iBAAiB,MAAA;AACrB,QAAMC,QAASC,WAAmBC;AAClC,SAAOF,OAAOG;AAChB;AAKA,IAAMC,eAAe,MAAA;AACnB,QAAMJ,QAASC,WAAmBC;AAClC,SAAOF,OAAOK;AAChB;AAYA,IAAA,4BAAeV,WAAWW,WAAW,CAAC,EAAEC,YAAY,MAAK,IAA8B,CAAC,MAC/EC,eAAQ,YAAA;AACb,MAAI,CAACD,aAAa,CAACT,QAAAA,GAAW;AAC5B,WAAO,CAAA;EACT;AAGA,MAAIW;AACJ,MAAI;AACF,UAAMC,cAAcX,eAAAA;AACpB,UAAMY,YAAYP,aAAAA;AAClB,QAAIM,eAAeC,WAAW;AAC5B,YAAMC,MAAMF,YAAYG,iBAAgB;AACxCJ,qBAAe,MAAMG,IAAIE,eAAe,OAAO,EAAEC,QAAO,MAAwB;AAC9E,YAAI,CAACA,SAAS;AACZ,gBAAMJ,UAAUK,OAAO,gBAAA;QACzB;MACF,CAAA;IACF;EACF,SAASC,KAAK;AACZpB,QAAIqB,MAAMD,KAAAA,QAAAA;;;;;;EACZ;AAGA,QAAME,gBAAgB,OAAOC,UAAAA;AAC3B,QAAIA,MAAMC,QAAQ,UAAU;AAC1BD,YAAME,eAAc;AACpB,UAAI;AACF,cAAMX,YAAYP,aAAAA;AAClB,YAAIO,WAAW;AACb,gBAAMA,UAAUK,OAAO,gBAAA;QACzB;MACF,SAASC,KAAK;AACZpB,YAAIqB,MAAMD,KAAAA,QAAAA;;;;;;MACZ;IACF;EACF;AACAd,SAAOoB,iBAAiB,WAAWJ,aAAAA;AAEnC,SAAOxB,WAAW6B,YAAY5B,OAAOD,WAAW8B,MAAM,MAAM,MACnDC,YAAK,MAAA;AACVjB,mBAAAA;AACAN,WAAOwB,oBAAoB,WAAWR,aAAAA;EACxC,CAAA,CAAA;AAEJ,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "log", "isTauri", "getTauriWindow", "tauri", "globalThis", "__TAURI__", "window", "getTauriCore", "core", "makeModule", "isPopover", "promise", "focusCleanup", "tauriWindow", "tauriCore", "win", "getCurrentWindow", "onFocusChanged", "payload", "invoke", "err", "catch", "handleKeyDown", "event", "key", "preventDefault", "addEventListener", "contributes", "Null", "sync", "removeEventListener"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/state/state.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Node } from '@dxos/plugin-graph';\n\nimport { type SimpleLayoutState } from '../../types';\nimport { SimpleLayoutState as SimpleLayoutStateCapability } from '../../types';\n\nconst defaultState: SimpleLayoutState = {\n dialogOpen: false,\n workspace: Node.RootId,\n previousWorkspace: Node.RootId,\n history: [],\n isPopover: false,\n companionVariant: undefined,\n drawerState: 'closed',\n};\n\nexport type SimpleLayoutStateOptions = {\n initialState?: Partial<SimpleLayoutState>;\n};\n\nexport default Capability.makeModule(({ initialState }: SimpleLayoutStateOptions = {}) =>\n Effect.sync(() => {\n const stateAtom = Atom.make<SimpleLayoutState>({ ...defaultState, ...initialState });\n\n const layoutAtom = Atom.make((get): Common.Capability.Layout => {\n const state = get(stateAtom);\n return {\n mode: 'simple',\n dialogOpen: state.dialogOpen,\n sidebarOpen: false,\n complementarySidebarOpen: false,\n workspace: state.workspace,\n active: state.active ? [state.active] : [],\n inactive: [],\n scrollIntoView: undefined,\n };\n });\n\n return [\n Capability.contributes(SimpleLayoutStateCapability, stateAtom),\n Capability.contributes(Common.Capability.Layout, layoutAtom),\n ];\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,YAAY;AACrB,YAAYC,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,YAAY;AAKrB,IAAMC,eAAkC;EACtCC,YAAY;EACZC,WAAWC,KAAKC;EAChBC,mBAAmBF,KAAKC;EACxBE,SAAS,CAAA;EACTC,WAAW;EACXC,kBAAkBC;EAClBC,aAAa;AACf;AAMA,IAAA,gBAAeC,WAAWC,WAAW,CAAC,EAAEC,aAAY,IAA+B,CAAC,MAC3EC,YAAK,MAAA;AACV,QAAMC,YAAYC,KAAKC,KAAwB;IAAE,GAAGjB;IAAc,GAAGa;EAAa,CAAA;AAElF,QAAMK,aAAaF,KAAKC,KAAK,CAACE,QAAAA;AAC5B,UAAMC,QAAQD,IAAIJ,SAAAA;AAClB,WAAO;MACLM,MAAM;MACNpB,YAAYmB,MAAMnB;MAClBqB,aAAa;MACbC,0BAA0B;MAC1BrB,WAAWkB,MAAMlB;MACjBsB,QAAQJ,MAAMI,SAAS;QAACJ,MAAMI;UAAU,CAAA;MACxCC,UAAU,CAAA;MACVC,gBAAgBjB;IAClB;EACF,CAAA;AAEA,SAAO;IACLE,WAAWgB,YAAYC,mBAA6Bb,SAAAA;IACpDJ,WAAWgB,YAAYE,OAAOlB,WAAWmB,QAAQZ,UAAAA;;AAErD,CAAA,CAAA;",
|
|
6
|
-
"names": ["Atom", "Effect", "Capability", "Common", "Node", "defaultState", "dialogOpen", "workspace", "Node", "RootId", "previousWorkspace", "history", "isPopover", "companionVariant", "undefined", "drawerState", "Capability", "makeModule", "initialState", "sync", "stateAtom", "Atom", "make", "layoutAtom", "get", "state", "mode", "sidebarOpen", "complementarySidebarOpen", "active", "inactive", "scrollIntoView", "contributes", "SimpleLayoutStateCapability", "Common", "Layout"]
|
|
7
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
SimpleLayoutState
|
|
4
|
-
} from "./chunk-F5TEKVJG.mjs";
|
|
5
|
-
|
|
6
|
-
// src/capabilities/url-handler/url-handler.ts
|
|
7
|
-
import * as Effect from "effect/Effect";
|
|
8
|
-
import { Capability, Common } from "@dxos/app-framework";
|
|
9
|
-
import { Node } from "@dxos/plugin-graph";
|
|
10
|
-
var url_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
11
|
-
const { invokeSync } = yield* Capability.get(Common.Capability.OperationInvoker);
|
|
12
|
-
const handleNavigation = () => {
|
|
13
|
-
const pathname = window.location.pathname;
|
|
14
|
-
const [_, nextWorkspace, nextActive] = pathname.split("/");
|
|
15
|
-
const targetWorkspace = !nextWorkspace || nextWorkspace === "root" ? Node.RootId : nextWorkspace;
|
|
16
|
-
invokeSync(Common.LayoutOperation.SwitchWorkspace, {
|
|
17
|
-
subject: targetWorkspace
|
|
18
|
-
});
|
|
19
|
-
if (nextActive) {
|
|
20
|
-
invokeSync(Common.LayoutOperation.Open, {
|
|
21
|
-
subject: [
|
|
22
|
-
nextActive
|
|
23
|
-
]
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
yield* Effect.sync(() => handleNavigation());
|
|
28
|
-
window.addEventListener("popstate", handleNavigation);
|
|
29
|
-
let lastWorkspace;
|
|
30
|
-
let lastActive;
|
|
31
|
-
const unsubscribe = yield* Common.Capability.subscribeAtom(SimpleLayoutState, (state) => {
|
|
32
|
-
const { workspace, active } = state;
|
|
33
|
-
if (workspace !== lastWorkspace || active !== lastActive) {
|
|
34
|
-
lastWorkspace = workspace;
|
|
35
|
-
lastActive = active;
|
|
36
|
-
let path;
|
|
37
|
-
if (workspace === Node.RootId) {
|
|
38
|
-
path = active ? `/${Node.RootId}/${active}` : "/";
|
|
39
|
-
} else {
|
|
40
|
-
path = active ? `/${workspace}/${active}` : `/${workspace}`;
|
|
41
|
-
}
|
|
42
|
-
if (window.location.pathname !== path) {
|
|
43
|
-
history.pushState(null, "", `${path}${window.location.search}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
return Capability.contributes(Common.Capability.Null, null, () => Effect.sync(() => {
|
|
48
|
-
window.removeEventListener("popstate", handleNavigation);
|
|
49
|
-
unsubscribe();
|
|
50
|
-
}));
|
|
51
|
-
}));
|
|
52
|
-
export {
|
|
53
|
-
url_handler_default as default
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=url-handler-DVAZZEUO.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/url-handler/url-handler.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Node } from '@dxos/plugin-graph';\n\nimport { type SimpleLayoutState, SimpleLayoutState as SimpleLayoutStateCapability } from '../../types';\n\n/**\n * URL handler for simple layout that syncs browser URL with layout state.\n * URL format: /{workspace} or /{workspace}/{active}\n * Root is represented as / or /root.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const { invokeSync } = yield* Capability.get(Common.Capability.OperationInvoker);\n\n /**\n * Handle navigation events (initial load and popstate).\n * Parses URL and updates state accordingly.\n */\n const handleNavigation = () => {\n const pathname = window.location.pathname;\n\n // Parse URL segments: /{workspace}/{active}\n const [_, nextWorkspace, nextActive] = pathname.split('/');\n\n // Determine target workspace (empty or 'root' means Node.RootId).\n const targetWorkspace = !nextWorkspace || nextWorkspace === 'root' ? Node.RootId : nextWorkspace;\n\n // Navigate via operations (they will update state accordingly).\n invokeSync(Common.LayoutOperation.SwitchWorkspace, { subject: targetWorkspace });\n if (nextActive) {\n invokeSync(Common.LayoutOperation.Open, { subject: [nextActive] });\n }\n };\n\n // Handle initial URL and listen for browser navigation.\n yield* Effect.sync(() => handleNavigation());\n window.addEventListener('popstate', handleNavigation);\n\n // Subscribe to state changes to update the URL.\n let lastWorkspace: string | undefined;\n let lastActive: string | undefined;\n const unsubscribe = yield* Common.Capability.subscribeAtom(\n SimpleLayoutStateCapability,\n (state: SimpleLayoutState) => {\n const { workspace, active } = state;\n\n // Only update URL if relevant state changed.\n if (workspace !== lastWorkspace || active !== lastActive) {\n lastWorkspace = workspace;\n lastActive = active;\n\n // Build path: root is represented as /, other workspaces as /{workspace}.\n let path: string;\n if (workspace === Node.RootId) {\n path = active ? `/${Node.RootId}/${active}` : '/';\n } else {\n path = active ? `/${workspace}/${active}` : `/${workspace}`;\n }\n\n if (window.location.pathname !== path) {\n history.pushState(null, '', `${path}${window.location.search}`);\n }\n }\n },\n );\n\n return Capability.contributes(Common.Capability.Null, null, () =>\n Effect.sync(() => {\n window.removeEventListener('popstate', handleNavigation);\n unsubscribe();\n }),\n );\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,YAAY;AASrB,IAAA,sBAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAM,EAAEC,WAAU,IAAK,OAAOH,WAAWI,IAAIC,OAAOL,WAAWM,gBAAgB;AAM/E,QAAMC,mBAAmB,MAAA;AACvB,UAAMC,WAAWC,OAAOC,SAASF;AAGjC,UAAM,CAACG,GAAGC,eAAeC,UAAAA,IAAcL,SAASM,MAAM,GAAA;AAGtD,UAAMC,kBAAkB,CAACH,iBAAiBA,kBAAkB,SAASI,KAAKC,SAASL;AAGnFT,eAAWE,OAAOa,gBAAgBC,iBAAiB;MAAEC,SAASL;IAAgB,CAAA;AAC9E,QAAIF,YAAY;AACdV,iBAAWE,OAAOa,gBAAgBG,MAAM;QAAED,SAAS;UAACP;;MAAY,CAAA;IAClE;EACF;AAGA,SAAcS,YAAK,MAAMf,iBAAAA,CAAAA;AACzBE,SAAOc,iBAAiB,YAAYhB,gBAAAA;AAGpC,MAAIiB;AACJ,MAAIC;AACJ,QAAMC,cAAc,OAAOrB,OAAOL,WAAW2B,cAC3CC,mBACA,CAACC,UAAAA;AACC,UAAM,EAAEC,WAAWC,OAAM,IAAKF;AAG9B,QAAIC,cAAcN,iBAAiBO,WAAWN,YAAY;AACxDD,sBAAgBM;AAChBL,mBAAaM;AAGb,UAAIC;AACJ,UAAIF,cAAcd,KAAKC,QAAQ;AAC7Be,eAAOD,SAAS,IAAIf,KAAKC,MAAM,IAAIc,MAAAA,KAAW;MAChD,OAAO;AACLC,eAAOD,SAAS,IAAID,SAAAA,IAAaC,MAAAA,KAAW,IAAID,SAAAA;MAClD;AAEA,UAAIrB,OAAOC,SAASF,aAAawB,MAAM;AACrCC,gBAAQC,UAAU,MAAM,IAAI,GAAGF,IAAAA,GAAOvB,OAAOC,SAASyB,MAAM,EAAE;MAChE;IACF;EACF,CAAA;AAGF,SAAOnC,WAAWoC,YAAY/B,OAAOL,WAAWqC,MAAM,MAAM,MACnDf,YAAK,MAAA;AACVb,WAAO6B,oBAAoB,YAAY/B,gBAAAA;AACvCmB,gBAAAA;EACF,CAAA,CAAA;AAEJ,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "Node", "Capability", "makeModule", "fnUntraced", "invokeSync", "get", "Common", "OperationInvoker", "handleNavigation", "pathname", "window", "location", "_", "nextWorkspace", "nextActive", "split", "targetWorkspace", "Node", "RootId", "LayoutOperation", "SwitchWorkspace", "subject", "Open", "sync", "addEventListener", "lastWorkspace", "lastActive", "unsubscribe", "subscribeAtom", "SimpleLayoutStateCapability", "state", "workspace", "active", "path", "history", "pushState", "search", "contributes", "Null", "removeEventListener"]
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentError.d.ts","sourceRoot":"","sources":["../../../../src/components/ContentError.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,eAAO,MAAM,YAAY,GAAI,WAAW;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,sBAUxD,CAAC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Node } from '@dxos/plugin-graph';
|
|
3
|
-
import { type ThemedClassName } from '@dxos/react-ui';
|
|
4
|
-
export type BannerProps = ThemedClassName<{
|
|
5
|
-
node?: Node.Node;
|
|
6
|
-
}>;
|
|
7
|
-
export declare const Banner: ({ node, classNames }: BannerProps) => React.JSX.Element | null;
|
|
8
|
-
//# sourceMappingURL=Banner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../../../src/components/SimpleLayout/Banner.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAS,IAAI,EAA+B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAuB,KAAK,eAAe,EAA8C,MAAM,gBAAgB,CAAC;AAkBvH,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;IACxC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH,eAAO,MAAM,MAAM,GAAI,sBAAsB,WAAW,6BAiFvD,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React from 'react';
|
|
6
|
-
|
|
7
|
-
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
-
import { descriptionMessage, mx } from '@dxos/ui-theme';
|
|
9
|
-
|
|
10
|
-
import { meta } from '../meta';
|
|
11
|
-
|
|
12
|
-
// TODO(burdon): Factor out.
|
|
13
|
-
export const ContentError = ({ error }: { error?: Error }) => {
|
|
14
|
-
const { t } = useTranslation(meta.id);
|
|
15
|
-
const errorString = error?.toString() ?? '';
|
|
16
|
-
return (
|
|
17
|
-
<div role='none' className='grid place-items-center overflow-y-auto attention-surface'>
|
|
18
|
-
<p role='alert' className={mx(descriptionMessage, 'p-2 break-all rounded-sm')}>
|
|
19
|
-
{error ? errorString : t('error fallback message')}
|
|
20
|
-
</p>
|
|
21
|
-
</div>
|
|
22
|
-
);
|
|
23
|
-
};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React, { Fragment, useCallback, useMemo } from 'react';
|
|
6
|
-
|
|
7
|
-
import { Common } from '@dxos/app-framework';
|
|
8
|
-
import { useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';
|
|
9
|
-
import { Graph, Node, useActionRunner, useActions } from '@dxos/plugin-graph';
|
|
10
|
-
import { IconButton, Popover, type ThemedClassName, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
11
|
-
import { DropdownMenu, MenuProvider } from '@dxos/react-ui-menu';
|
|
12
|
-
import { mx, osTranslations } from '@dxos/ui-theme';
|
|
13
|
-
|
|
14
|
-
import { useSimpleLayoutState } from '../../hooks';
|
|
15
|
-
import { meta } from '../../meta';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Check if an item is a direct child of a workspace or collection.
|
|
19
|
-
* Returns true if any parent node has disposition 'workspace' or 'collection'.
|
|
20
|
-
*/
|
|
21
|
-
const isWorkspaceOrCollectionChild = (graph: Graph.ReadableGraph, itemId: string): boolean => {
|
|
22
|
-
const parents = Graph.getConnections(graph, itemId, 'inbound');
|
|
23
|
-
return parents.some(
|
|
24
|
-
(node) => node.properties.disposition === 'workspace' || node.properties.disposition === 'collection',
|
|
25
|
-
);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export type BannerProps = ThemedClassName<{
|
|
29
|
-
node?: Node.Node;
|
|
30
|
-
}>;
|
|
31
|
-
|
|
32
|
-
export const Banner = ({ node, classNames }: BannerProps) => {
|
|
33
|
-
const { t } = useTranslation(meta.id);
|
|
34
|
-
const { state } = useSimpleLayoutState();
|
|
35
|
-
const { invokePromise } = useOperationInvoker();
|
|
36
|
-
const { graph } = useAppGraph();
|
|
37
|
-
const runAction = useActionRunner();
|
|
38
|
-
|
|
39
|
-
const label = (node && toLocalizedString(node.properties.label, t)) ?? t('current app name', { ns: osTranslations });
|
|
40
|
-
|
|
41
|
-
// Get actions for the current node, filtered by disposition.
|
|
42
|
-
// NOTE: Graph expansion is handled by useLoadDescendents in Main.tsx.
|
|
43
|
-
const allActions = useActions(graph, node?.id);
|
|
44
|
-
const actions = useMemo(() => {
|
|
45
|
-
return allActions.filter((a) =>
|
|
46
|
-
['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition),
|
|
47
|
-
);
|
|
48
|
-
}, [allActions]);
|
|
49
|
-
|
|
50
|
-
// Check if current active item is a top-level workspace/collection child.
|
|
51
|
-
const isTopLevelItem = useMemo(() => {
|
|
52
|
-
if (!state.active) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
return isWorkspaceOrCollectionChild(graph, state.active);
|
|
56
|
-
}, [graph, state.active]);
|
|
57
|
-
|
|
58
|
-
const handleClick = useCallback(async () => {
|
|
59
|
-
if (state.active) {
|
|
60
|
-
// If history is empty and this is a top-level item, go to home.
|
|
61
|
-
if (state.history.length === 0 && isTopLevelItem) {
|
|
62
|
-
await invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
|
|
63
|
-
} else {
|
|
64
|
-
// Otherwise, close (which will pop from history or clear active).
|
|
65
|
-
await invokePromise(Common.LayoutOperation.Close, { subject: [state.active] });
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
await invokePromise(Common.LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
|
|
69
|
-
}
|
|
70
|
-
}, [invokePromise, state.active, state.history.length, isTopLevelItem]);
|
|
71
|
-
|
|
72
|
-
// Wrap the menu trigger with Popover.Anchor when the popoverAnchorId matches.
|
|
73
|
-
const AnchorRoot = node && state.popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? Popover.Anchor : Fragment;
|
|
74
|
-
|
|
75
|
-
if (!node) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return (
|
|
80
|
-
<Toolbar.Root role='banner' classNames={mx('grid grid-cols-[var(--rail-size)_1fr_var(--rail-size)]', classNames)}>
|
|
81
|
-
{node.id !== Node.RootId ? (
|
|
82
|
-
<IconButton
|
|
83
|
-
iconOnly
|
|
84
|
-
variant='ghost'
|
|
85
|
-
icon='ph--caret-left--regular'
|
|
86
|
-
label={t('back label')}
|
|
87
|
-
onClick={handleClick}
|
|
88
|
-
/>
|
|
89
|
-
) : (
|
|
90
|
-
<div />
|
|
91
|
-
)}
|
|
92
|
-
<h1 className={'grow text-center truncate font-medium'}>{label}</h1>
|
|
93
|
-
{actions.length > 0 ? (
|
|
94
|
-
<AnchorRoot>
|
|
95
|
-
<MenuProvider onAction={runAction}>
|
|
96
|
-
<DropdownMenu.Root items={actions} caller={meta.id}>
|
|
97
|
-
<DropdownMenu.Trigger asChild>
|
|
98
|
-
<IconButton
|
|
99
|
-
iconOnly
|
|
100
|
-
variant='ghost'
|
|
101
|
-
icon='ph--dots-three-vertical--regular'
|
|
102
|
-
label={t('actions menu label')}
|
|
103
|
-
/>
|
|
104
|
-
</DropdownMenu.Trigger>
|
|
105
|
-
</DropdownMenu.Root>
|
|
106
|
-
</MenuProvider>
|
|
107
|
-
</AnchorRoot>
|
|
108
|
-
) : (
|
|
109
|
-
<span />
|
|
110
|
-
)}
|
|
111
|
-
</Toolbar.Root>
|
|
112
|
-
);
|
|
113
|
-
};
|