@dxos/plugin-deck 0.7.5-main.9d26e3a → 0.7.5-main.e9bb01b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/app-graph-builder-CI6ZFMNL.mjs +147 -0
- package/dist/lib/browser/app-graph-builder-CI6ZFMNL.mjs.map +7 -0
- package/dist/lib/browser/check-app-scheme-S3EYUPMF.mjs +33 -0
- package/dist/lib/browser/check-app-scheme-S3EYUPMF.mjs.map +7 -0
- package/dist/lib/browser/chunk-M2L53AIH.mjs +126 -0
- package/dist/lib/browser/chunk-M2L53AIH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GVOGPULO.mjs → chunk-N7TEPFVR.mjs} +5 -4
- package/dist/lib/browser/chunk-N7TEPFVR.mjs.map +7 -0
- package/dist/lib/browser/chunk-NYZJCVAU.mjs +22 -0
- package/dist/lib/browser/chunk-NYZJCVAU.mjs.map +7 -0
- package/dist/lib/browser/chunk-WXNLVMK2.mjs +1119 -0
- package/dist/lib/browser/chunk-WXNLVMK2.mjs.map +7 -0
- package/dist/lib/browser/chunk-YQ2GWTDU.mjs +17 -0
- package/dist/lib/browser/chunk-YQ2GWTDU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +90 -1775
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs +494 -0
- package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-ECDQZYQT.mjs +46 -0
- package/dist/lib/browser/react-root-ECDQZYQT.mjs.map +7 -0
- package/dist/lib/browser/react-surface-4WIQZW2S.mjs +38 -0
- package/dist/lib/browser/react-surface-4WIQZW2S.mjs.map +7 -0
- package/dist/lib/browser/settings-WACNLCPB.mjs +28 -0
- package/dist/lib/browser/settings-WACNLCPB.mjs.map +7 -0
- package/dist/lib/browser/state-VPOYUKK6.mjs +117 -0
- package/dist/lib/browser/state-VPOYUKK6.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +16 -4
- package/dist/lib/browser/url-handler-HLF42IHP.mjs +70 -0
- package/dist/lib/browser/url-handler-HLF42IHP.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts +1 -5
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +142 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme.d.ts +4 -0
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +189 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root.d.ts +7 -0
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +4 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/set-active.d.ts +9 -0
- package/dist/types/src/capabilities/set-active.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +4 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +76 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/url-handler.d.ts +4 -0
- package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Banner.d.ts +6 -0
- package/dist/types/src/components/DeckLayout/Banner.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +1 -4
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Fullscreen.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts +3 -3
- package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Plank.d.ts +8 -6
- package/dist/types/src/components/DeckLayout/Plank.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/PlankControls.d.ts +2 -2
- package/dist/types/src/components/DeckLayout/PlankControls.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/PlankError.d.ts +4 -3
- package/dist/types/src/components/DeckLayout/PlankError.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Sidebar.d.ts +1 -5
- package/dist/types/src/components/DeckLayout/Sidebar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/SidebarButton.d.ts +8 -0
- package/dist/types/src/components/DeckLayout/SidebarButton.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Toast.d.ts +2 -2
- package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Topbar.d.ts +3 -0
- package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +1 -0
- package/dist/types/src/components/fragments.d.ts +4 -0
- package/dist/types/src/components/fragments.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +0 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +4 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/hooks/useMainSize.d.ts +2 -2
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/layout.d.ts +5 -19
- package/dist/types/src/layout.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +4 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +4 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +117 -20
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +3 -2
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/layoutAppliesTopbar.d.ts +2 -0
- package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -0
- package/dist/types/src/util/useBreakpoints.d.ts +2 -0
- package/dist/types/src/util/useBreakpoints.d.ts.map +1 -0
- package/dist/types/src/util/useHoistStatusbar.d.ts +2 -0
- package/dist/types/src/util/useHoistStatusbar.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +30 -36
- package/src/DeckPlugin.ts +77 -0
- package/src/capabilities/app-graph-builder.ts +109 -0
- package/src/capabilities/capabilities.ts +18 -0
- package/src/capabilities/check-app-scheme.ts +44 -0
- package/src/capabilities/index.ts +16 -0
- package/src/capabilities/intent-resolver.ts +350 -0
- package/src/capabilities/react-root.tsx +48 -0
- package/src/capabilities/react-surface.tsx +31 -0
- package/src/capabilities/set-active.ts +43 -0
- package/src/capabilities/settings.ts +21 -0
- package/src/capabilities/state.ts +102 -0
- package/src/capabilities/url-handler.ts +63 -0
- package/src/components/DeckLayout/ActiveNode.tsx +2 -3
- package/src/components/DeckLayout/Banner.tsx +37 -0
- package/src/components/DeckLayout/ComplementarySidebar.tsx +128 -55
- package/src/components/DeckLayout/ContentEmpty.tsx +9 -4
- package/src/components/DeckLayout/DeckLayout.tsx +113 -76
- package/src/components/DeckLayout/Fullscreen.tsx +2 -3
- package/src/components/DeckLayout/NodePlankHeading.tsx +64 -77
- package/src/components/DeckLayout/Plank.tsx +34 -43
- package/src/components/DeckLayout/PlankControls.tsx +11 -10
- package/src/components/DeckLayout/PlankError.tsx +6 -5
- package/src/components/DeckLayout/Sidebar.tsx +19 -9
- package/src/components/DeckLayout/SidebarButton.tsx +68 -0
- package/src/components/DeckLayout/StatusBar.tsx +6 -12
- package/src/components/DeckLayout/Toast.tsx +2 -2
- package/src/components/DeckLayout/Topbar.tsx +11 -0
- package/src/components/LayoutSettings.tsx +8 -8
- package/src/components/fragments.ts +14 -0
- package/src/components/index.ts +0 -2
- package/src/events.ts +11 -0
- package/src/hooks/useMainSize.ts +3 -3
- package/src/index.ts +3 -4
- package/src/layout.ts +43 -212
- package/src/meta.ts +3 -2
- package/src/translations.ts +8 -6
- package/src/types.ts +95 -34
- package/src/util/index.ts +3 -2
- package/src/util/layoutAppliesTopbar.ts +7 -0
- package/src/util/useBreakpoints.ts +11 -0
- package/src/util/useHoistStatusbar.ts +24 -0
- package/dist/lib/browser/chunk-GVOGPULO.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZC3K6C2W.mjs +0 -37
- package/dist/lib/browser/chunk-ZC3K6C2W.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -9
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/types/src/components/DeckContext.d.ts +0 -8
- package/dist/types/src/components/DeckContext.d.ts.map +0 -1
- package/dist/types/src/components/LayoutContext.d.ts +0 -5
- package/dist/types/src/components/LayoutContext.d.ts.map +0 -1
- package/dist/types/src/layout.test.d.ts +0 -2
- package/dist/types/src/layout.test.d.ts.map +0 -1
- package/dist/types/src/util/check-app-scheme.d.ts +0 -2
- package/dist/types/src/util/check-app-scheme.d.ts.map +0 -1
- package/dist/types/src/util/layout-parts.d.ts +0 -7
- package/dist/types/src/util/layout-parts.d.ts.map +0 -1
- package/src/DeckPlugin.tsx +0 -623
- package/src/components/DeckContext.ts +0 -14
- package/src/components/LayoutContext.ts +0 -12
- package/src/layout.test.ts +0 -380
- package/src/util/check-app-scheme.ts +0 -21
- package/src/util/layout-parts.ts +0 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport { pipe } from 'effect';\nimport { setAutoFreeze } from 'immer';\nimport React, { type PropsWithChildren } from 'react';\n\nimport {\n chain,\n createIntent,\n createResolver,\n createSurface,\n filterPlugins,\n IntentAction,\n type IntentPluginProvides,\n type Layout,\n LayoutAction,\n type LayoutEntry,\n type LayoutMode,\n type LayoutPart,\n type LayoutParts,\n NavigationAction,\n openIds,\n parseGraphPlugin,\n parseIntentPlugin,\n type Plugin,\n type PluginDefinition,\n resolvePlugin,\n SLUG_PATH_SEPARATOR,\n Toast as ToastSchema,\n} from '@dxos/app-framework';\nimport { type UnsubscribeCallback } from '@dxos/async';\nimport { getTypename, S } from '@dxos/echo-schema';\nimport { scheduledEffect } from '@dxos/echo-signals/core';\nimport { invariant } from '@dxos/invariant';\nimport { create, isReactiveObject } from '@dxos/live-object';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { type AttentionPluginProvides, parseAttentionPlugin } from '@dxos/plugin-attention';\nimport { createExtension, ROOT_ID, type Node } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { translations as stackTranslations } from '@dxos/react-ui-stack';\n\nimport { DeckContext, type DeckContextType, DeckLayout, LayoutContext, LayoutSettings, NAV_ID } from './components';\nimport {\n closeEntry,\n incrementPlank,\n mergeLayoutParts,\n openEntry,\n removePart,\n soloPartToUri,\n uriToSoloPart,\n} from './layout';\nimport meta, { DECK_PLUGIN } from './meta';\nimport translations from './translations';\nimport {\n DeckAction,\n type DeckPluginProvides,\n type DeckSettingsProps,\n type NewPlankPositioning,\n type Overscroll,\n type Panel,\n parsePanelPlugin,\n} from './types';\nimport { checkAppScheme, getEffectivePart } from './util';\n\nconst isSocket = !!(globalThis as any).__args;\n\n// TODO(mjamesderocher): Can we get this directly from Socket?\nconst appScheme = 'composer://';\n\n// NOTE(Zan): When producing values with immer, we shouldn't auto-freeze them because\n// our signal implementation needs to add some hidden properties to the produced values.\n// TODO(Zan): Move this to a more global location if we use immer more broadly.\nsetAutoFreeze(false);\n\nexport const DeckPlugin = ({\n observability,\n}: {\n observability?: boolean;\n} = {}): PluginDefinition<DeckPluginProvides> => {\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n let attentionPlugin: Plugin<AttentionPluginProvides> | undefined;\n const unsubscriptionCallbacks = [] as (UnsubscribeCallback | undefined)[];\n let currentUndoId: string | undefined;\n let handleNavigation: () => Promise<void> | undefined;\n const panels: Panel[] = [];\n\n const settings = new LocalStorageStore<DeckSettingsProps>('dxos.org/settings/layout', {\n showHints: false,\n customSlots: false,\n flatDeck: false,\n enableNativeRedirect: false,\n disableDeck: false,\n newPlankPositioning: 'start',\n overscroll: 'centering',\n });\n\n const layout = new LocalStorageStore<Layout>('dxos.org/settings/layout', {\n layoutMode: 'solo',\n sidebarOpen: true,\n complementarySidebarOpen: false,\n dialogContent: null,\n dialogOpen: false,\n dialogBlockAlign: undefined,\n dialogType: undefined,\n popoverContent: null,\n popoverAnchorId: undefined,\n popoverOpen: false,\n toasts: [],\n });\n\n const deck = new LocalStorageStore<DeckContextType>('dxos.org/settings/deck', {\n plankSizing: {},\n });\n\n // TODO(wittjosiah): This active state is not a generic navigation state but quite deck specific.\n // It is also closely tied to the layout mode state (which also seems quite deck specific).\n // The layout and navigation interfaces need to be revisited and cleaned up.\n // Doing this cleanup should also help simplify some of the convoluted logic for managing it.\n const location = new LocalStorageStore<{ active: LayoutParts; closed: string[] }>('dxos.org/state/layout', {\n active: { sidebar: [{ id: NAV_ID }] },\n closed: [],\n });\n\n // TODO(Zan): Cap depth!\n const layoutModeHistory = create({ values: [] as LayoutMode[] });\n\n const handleSetLayout = ({\n element,\n state,\n component,\n subject,\n anchorId,\n dialogBlockAlign,\n dialogType,\n }: LayoutAction.SetLayout['input']) => {\n switch (element) {\n case 'sidebar': {\n layout.values.sidebarOpen = state ?? !layout.values.sidebarOpen;\n break;\n }\n\n case 'complementary': {\n layout.values.complementarySidebarOpen = !!state;\n // TODO(thure): Hoist content into the c11y sidebar of Deck.\n // layout.values.complementarySidebarContent = component || subject ? { component, subject } : null;\n break;\n }\n\n case 'dialog': {\n layout.values.dialogOpen = state ?? Boolean(component);\n layout.values.dialogContent = component ? { component, subject } : null;\n layout.values.dialogBlockAlign = dialogBlockAlign ?? 'center';\n layout.values.dialogType = dialogType;\n break;\n }\n\n case 'popover': {\n layout.values.popoverOpen = state ?? Boolean(component);\n layout.values.popoverContent = component ? { component, subject } : null;\n layout.values.popoverAnchorId = anchorId;\n break;\n }\n\n case 'toast': {\n if (S.is(ToastSchema)(subject)) {\n layout.values.toasts = [...layout.values.toasts, subject];\n }\n break;\n }\n }\n };\n\n /**\n * Update the active state and returns the id of the next attended plank.\n */\n const handleSetLocation = (next: LayoutParts) => {\n const part = layout.values.layoutMode === 'solo' ? 'solo' : 'main';\n const ids = openIds(next, [part]);\n\n const current = openIds(location.values.active, [part]);\n const removed = current.filter((id) => !ids.includes(id));\n const closed = Array.from(new Set([...location.values.closed.filter((id) => !ids.includes(id)), ...removed]));\n\n location.values.closed = closed;\n location.values.active = next;\n\n if (attentionPlugin) {\n const attended = attentionPlugin.provides.attention.attended;\n const [attendedId] = Array.from(attended);\n const isAttendedAvailable = !!attendedId && ids.includes(attendedId);\n if (!isAttendedAvailable) {\n const currentIds = location.values.active[part]?.map(({ id }) => id) ?? [];\n const attendedIndex = currentIds.indexOf(attendedId);\n // If outside of bounds, focus on the first/last plank, otherwise focus on the new plank in the same position.\n const index = attendedIndex === -1 ? 0 : attendedIndex >= ids.length ? ids.length - 1 : attendedIndex;\n return next[part]?.[index].id;\n }\n }\n };\n\n return {\n meta,\n ready: async ({ plugins }) => {\n attentionPlugin = resolvePlugin(plugins, parseAttentionPlugin);\n intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n const dispatch = intentPlugin?.provides.intent.dispatchPromise;\n\n layout\n .prop({ key: 'layoutMode', type: LocalStorageStore.enum<LayoutMode>() })\n .prop({ key: 'sidebarOpen', type: LocalStorageStore.bool() })\n .prop({ key: 'complementarySidebarOpen', type: LocalStorageStore.bool() });\n\n deck.prop({ key: 'plankSizing', type: LocalStorageStore.json<Record<string, number>>() });\n\n location\n .prop({ key: 'active', type: LocalStorageStore.json<LayoutParts>() })\n .prop({ key: 'closed', type: LocalStorageStore.json<string[]>() });\n\n panels.push(\n ...filterPlugins(plugins, parsePanelPlugin).flatMap((plugin) => plugin.provides.complementary.panels),\n );\n\n settings\n .prop({ key: 'showHints', type: LocalStorageStore.bool() })\n .prop({ key: 'customSlots', type: LocalStorageStore.bool() })\n .prop({ key: 'flatDeck', type: LocalStorageStore.bool() })\n .prop({ key: 'enableNativeRedirect', type: LocalStorageStore.bool() })\n .prop({ key: 'disableDeck', type: LocalStorageStore.bool() }) // Deprecated.\n .prop({ key: 'newPlankPositioning', type: LocalStorageStore.enum<NewPlankPositioning>() })\n .prop({ key: 'overscroll', type: LocalStorageStore.enum<Overscroll>() });\n\n if (!isSocket && settings.values.enableNativeRedirect) {\n checkAppScheme(appScheme);\n }\n\n handleNavigation = async () => {\n const pathname = window.location.pathname;\n if (pathname === '/reset') {\n handleSetLocation({ sidebar: [{ id: NAV_ID }] });\n location.values.closed = [];\n layout.values.layoutMode = 'solo';\n window.location.pathname = '/';\n return;\n }\n\n const startingLayout = removePart(location.values.active, 'solo');\n const layoutFromUri = uriToSoloPart(pathname);\n if (!layoutFromUri) {\n const toAttend = handleSetLocation(startingLayout);\n layout.values.layoutMode = 'deck';\n await dispatch?.(createIntent(LayoutAction.ScrollIntoView, { id: toAttend }));\n return;\n }\n\n const toAttend = handleSetLocation(mergeLayoutParts(layoutFromUri, startingLayout));\n layout.values.layoutMode = 'solo';\n await dispatch?.(createIntent(LayoutAction.ScrollIntoView, { id: toAttend }));\n };\n\n await handleNavigation();\n window.addEventListener('popstate', handleNavigation);\n\n unsubscriptionCallbacks.push(\n scheduledEffect(\n () => ({ selectedPath: soloPartToUri(location.values.active) }),\n ({ selectedPath }) => {\n // TODO(thure): In some browsers, this only preserves the most recent state change, even though this is not `history.replace`…\n history.pushState(null, '', `/${selectedPath}${window.location.search}`);\n },\n ),\n );\n\n layoutModeHistory.values.push(`${layout.values.layoutMode}`);\n },\n unload: async () => {\n layout.close();\n location.close();\n unsubscriptionCallbacks.forEach((unsubscribe) => unsubscribe?.());\n window.removeEventListener('popstate', handleNavigation);\n },\n provides: {\n settings: settings.values,\n layout: layout.values,\n location: location.values,\n translations: [...translations, ...stackTranslations],\n graph: {\n builder: (plugins) => {\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;\n const attention = resolvePlugin(plugins, parseAttentionPlugin)?.provides.attention;\n\n invariant(dispatch, 'Intent plugin is required for deck plugin.');\n invariant(attention, 'Attention plugin is required for deck plugin.');\n\n // TODO(burdon): Root menu isn't visible so nothing bound.\n return createExtension({\n id: DECK_PLUGIN,\n filter: (node): node is Node<null> => node.id === ROOT_ID,\n actions: () => {\n // NOTE(Zan): This is currently disabled.\n // TODO(Zan): Fullscreen needs to know the active node and provide that to the layout part.\n const _fullscreen = {\n id: `${LayoutAction.SetLayoutMode._tag}/fullscreen`,\n data: async () => {\n await dispatch(createIntent(LayoutAction.SetLayoutMode, { layoutMode: 'fullscreen' }));\n },\n properties: {\n label: ['toggle fullscreen label', { ns: DECK_PLUGIN }],\n icon: 'ph--arrows-out--regular',\n keyBinding: {\n macos: 'ctrl+meta+f',\n windows: 'shift+ctrl+f',\n },\n },\n };\n\n const closeCurrent = {\n id: `${NavigationAction.Close._tag}/current`,\n data: async () => {\n const attended = attention.attended.at(-1);\n if (attended) {\n await dispatch(createIntent(NavigationAction.Close, { activeParts: { main: [attended] } }));\n }\n },\n properties: {\n label: ['close current label', { ns: DECK_PLUGIN }],\n icon: 'ph--x--regular',\n },\n };\n\n const closeOthers = {\n id: `${NavigationAction.Close._tag}/others`,\n data: async () => {\n const attended = attention.attended.at(-1);\n const ids = openIds(location.values.active, ['main']).filter((id) => id !== attended);\n await dispatch(\n createIntent(NavigationAction.Close, {\n activeParts: { main: ids },\n }),\n );\n },\n properties: {\n label: ['close others label', { ns: DECK_PLUGIN }],\n icon: 'ph--x-square--regular',\n },\n };\n\n const closeAll = {\n id: `${NavigationAction.Close._tag}/all`,\n data: async () => {\n await dispatch(\n createIntent(NavigationAction.Close, {\n activeParts: { main: openIds(location.values.active, ['main']) },\n }),\n );\n },\n properties: {\n label: ['close all label', { ns: DECK_PLUGIN }],\n icon: 'ph--x-circle--regular',\n },\n };\n\n return layout.values.layoutMode === 'deck' ? [closeCurrent, closeOthers, closeAll] : [];\n },\n });\n },\n },\n context: (props: PropsWithChildren) => (\n <LayoutContext.Provider value={layout.values}>\n <DeckContext.Provider value={deck.values}>{props.children}</DeckContext.Provider>\n </LayoutContext.Provider>\n ),\n root: () => {\n return (\n <DeckLayout\n layoutParts={location.values.active}\n showHints={settings.values.showHints}\n overscroll={settings.values.overscroll}\n toasts={layout.values.toasts}\n panels={panels}\n onDismissToast={(id) => {\n const index = layout.values.toasts.findIndex((toast) => toast.id === id);\n if (index !== -1) {\n // Allow time for the toast to animate out.\n // TODO(burdon): Factor out and unregister timeout.\n setTimeout(() => {\n if (layout.values.toasts[index].id === currentUndoId) {\n currentUndoId = undefined;\n }\n layout.values.toasts.splice(index, 1);\n }, 1_000);\n }\n }}\n />\n );\n },\n surface: {\n definitions: () =>\n createSurface({\n id: DECK_PLUGIN,\n role: 'settings',\n filter: (data): data is any => data.subject === DECK_PLUGIN,\n component: () => <LayoutSettings settings={settings.values} />,\n }),\n },\n intent: {\n resolvers: ({ plugins }) => {\n const graph = resolvePlugin(plugins, parseGraphPlugin)?.provides.graph;\n\n return [\n createResolver(DeckAction.UpdatePlankSize, (data) => {\n deck.values.plankSizing[data.id] = data.size;\n }),\n createResolver(IntentAction.ShowUndo, (data) => {\n // TODO(wittjosiah): Support undoing further back than the last action.\n if (currentUndoId) {\n layout.values.toasts = layout.values.toasts.filter((toast) => toast.id !== currentUndoId);\n }\n currentUndoId = `${IntentAction.ShowUndo._tag}-${Date.now()}`;\n layout.values.toasts = [\n ...layout.values.toasts,\n {\n id: currentUndoId,\n title: data.message ?? ['undo available label', { ns: DECK_PLUGIN }],\n duration: 10_000,\n actionLabel: ['undo action label', { ns: DECK_PLUGIN }],\n actionAlt: ['undo action alt', { ns: DECK_PLUGIN }],\n closeLabel: ['undo close label', { ns: DECK_PLUGIN }],\n onAction: () => intentPlugin?.provides.intent.undoPromise?.(),\n },\n ];\n }),\n createResolver(LayoutAction.SetLayout, handleSetLayout),\n createResolver(LayoutAction.SetLayoutMode, (data) => {\n const setMode = (mode: LayoutMode) => {\n const main = openIds(location.values.active, ['main']);\n const solo = openIds(location.values.active, ['solo']);\n const current = layout.values.layoutMode === 'solo' ? solo : main;\n // When un-soloing, the solo entry is added to the deck.\n const next = mode === 'solo' ? solo : [...main, ...solo];\n const removed = current.filter((id) => !next.includes(id));\n const closed = Array.from(\n new Set([...location.values.closed.filter((id) => !next.includes(id)), ...removed]),\n );\n\n location.values.closed = closed;\n layout.values.layoutMode = mode;\n };\n\n return batch(() => {\n if ('layoutMode' in data) {\n layoutModeHistory.values.push(layout.values.layoutMode);\n setMode(data.layoutMode);\n } else if (data.revert) {\n setMode(layoutModeHistory.values.pop() ?? 'solo');\n } else {\n log.warn('Invalid layout mode', data);\n }\n });\n }),\n createResolver(LayoutAction.ScrollIntoView, ({ id }) => {\n layout.values.scrollIntoView = id;\n }),\n // TODO(wittjosiah): Factor out navgiation from deck plugin.\n createResolver(NavigationAction.Open, (data) => {\n const previouslyOpenIds = new Set<string>(openIds(location.values.active));\n const layoutMode = layout.values.layoutMode;\n const toAttend = batch(() => {\n const processLayoutEntry = (partName: string, entryString: string, currentLayout: any) => {\n // TODO(burdon): Option to toggle?\n const toggle = false;\n const [id, path] = entryString.split(SLUG_PATH_SEPARATOR);\n const layoutEntry: LayoutEntry = { id, ...(path ? { path } : {}) };\n const effectivePart = getEffectivePart(partName as LayoutPart, layoutMode);\n if (\n toggle &&\n layoutMode === 'deck' &&\n effectivePart === 'main' &&\n currentLayout[effectivePart]?.some((entry: LayoutEntry) => entry.id === id) &&\n !data?.noToggle\n ) {\n // If we're in deck mode and the main part is already open, toggle it closed.\n return closeEntry(currentLayout, { part: effectivePart as LayoutPart, entryId: id });\n } else {\n return openEntry(currentLayout, effectivePart, layoutEntry, {\n positioning: settings.values.newPlankPositioning,\n });\n }\n };\n\n let newLayout = location.values.active;\n Object.entries(data.activeParts).forEach(([partName, layoutEntries]) => {\n if (Array.isArray(layoutEntries)) {\n layoutEntries.forEach((activePartEntry: string) => {\n newLayout = processLayoutEntry(partName, activePartEntry, newLayout);\n });\n } else if (typeof layoutEntries === 'string') {\n // Legacy single string entry.\n newLayout = processLayoutEntry(partName, layoutEntries, newLayout);\n }\n });\n\n return handleSetLocation(newLayout);\n });\n\n const ids = openIds(location.values.active);\n const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));\n\n return {\n data: { open: ids },\n intents: [\n createIntent(LayoutAction.ScrollIntoView, { id: newlyOpen[0] ?? toAttend }),\n ...(toAttend ? [createIntent(NavigationAction.Expose, { id: toAttend })] : []),\n ...(observability\n ? newlyOpen.map((id) => {\n const active = graph?.findNode(id)?.data;\n const typename = isReactiveObject(active) ? getTypename(active) : undefined;\n return createIntent(ObservabilityAction.SendEvent, {\n name: 'navigation.activate',\n properties: {\n id,\n typename,\n },\n });\n })\n : []),\n ],\n };\n }),\n createResolver(NavigationAction.AddToActive, (data) => {\n const layoutEntry = { id: data.id };\n const effectivePart = getEffectivePart(data.part, layout.values.layoutMode);\n\n handleSetLocation(\n openEntry(location.values.active, effectivePart, layoutEntry, {\n positioning: data.positioning ?? settings.values.newPlankPositioning,\n pivotId: data.pivotId,\n }),\n );\n\n const intents = [];\n if (data.scrollIntoView && layout.values.layoutMode === 'deck') {\n intents.push(createIntent(LayoutAction.ScrollIntoView, { id: data.id }));\n }\n\n return { intents };\n }),\n createResolver(NavigationAction.Close, (data) => {\n let newLayout = location.values.active;\n const layoutMode = layout.values.layoutMode;\n const intentParts = data.activeParts;\n Object.keys(intentParts).forEach((partName: string) => {\n const effectivePart = getEffectivePart(partName as LayoutPart, layoutMode);\n const ids = intentParts[partName];\n if (Array.isArray(ids)) {\n ids.forEach((id: string) => {\n newLayout = closeEntry(newLayout, { part: effectivePart, entryId: id });\n });\n } else {\n // Legacy single string entry\n newLayout = closeEntry(newLayout, { part: effectivePart, entryId: ids });\n }\n });\n\n const toAttend = handleSetLocation(newLayout);\n return { intents: [createIntent(LayoutAction.ScrollIntoView, { id: toAttend })] };\n }),\n createResolver(NavigationAction.Set, (data) => {\n return batch(() => {\n const toAttend = handleSetLocation(data.activeParts);\n return { intents: [createIntent(LayoutAction.ScrollIntoView, { id: toAttend })] };\n });\n }),\n createResolver(NavigationAction.Adjust, (adjustment) => {\n return batch(() => {\n if (adjustment.type === 'increment-end' || adjustment.type === 'increment-start') {\n handleSetLocation(\n incrementPlank(location.values.active, {\n type: adjustment.type,\n layoutCoordinate: adjustment.layoutCoordinate,\n }),\n );\n }\n\n if (adjustment.type === 'solo') {\n const entryId = adjustment.layoutCoordinate.entryId;\n if (layout.values.layoutMode !== 'solo') {\n // Solo the entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(NavigationAction.Open, { activeParts: { solo: [entryId] } }),\n chain(LayoutAction.SetLayoutMode, { layoutMode: 'solo' }),\n ),\n ],\n };\n } else {\n // Un-solo the current entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(LayoutAction.SetLayoutMode, { layoutMode: 'deck' }),\n chain(NavigationAction.Close, { activeParts: { solo: [entryId] } }),\n chain(NavigationAction.Open, { activeParts: { main: [entryId] }, noToggle: true }),\n chain(LayoutAction.ScrollIntoView, { id: entryId }),\n ),\n ],\n };\n }\n }\n });\n }),\n ];\n },\n },\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const NAV_ID = 'NavTree';\nexport const SURFACE_PREFIX = 'surface:';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Sidebar as MenuIcon } from '@phosphor-icons/react';\nimport { untracked } from '@preact/signals-core';\nimport React, { useCallback, useEffect, useMemo, useRef, type UIEvent, Fragment } from 'react';\n\nimport { type LayoutParts, Surface, type Toast as ToastSchema, firstIdInPart, usePlugin } from '@dxos/app-framework';\nimport { type AttentionPluginProvides } from '@dxos/plugin-attention';\nimport {\n AlertDialog,\n Button,\n Dialog as NaturalDialog,\n Main,\n Popover,\n useOnTransition,\n useTranslation,\n type MainProps,\n} from '@dxos/react-ui';\nimport { Stack, StackContext, DEFAULT_HORIZONTAL_SIZE } from '@dxos/react-ui-stack';\nimport { getSize, mainPaddingTransitions } from '@dxos/react-ui-theme';\n\nimport { ActiveNode } from './ActiveNode';\nimport { ComplementarySidebar, type ComplementarySidebarProps } from './ComplementarySidebar';\nimport { ContentEmpty } from './ContentEmpty';\nimport { Fullscreen } from './Fullscreen';\nimport { Plank } from './Plank';\nimport { Sidebar } from './Sidebar';\nimport { StatusBar } from './StatusBar';\nimport { Toast } from './Toast';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type Overscroll } from '../../types';\nimport { calculateOverscroll } from '../../util';\nimport { useDeckContext } from '../DeckContext';\nimport { useLayout } from '../LayoutContext';\n\nexport type DeckLayoutProps = {\n layoutParts: LayoutParts;\n toasts: ToastSchema[];\n overscroll: Overscroll;\n showHints: boolean;\n onDismissToast: (id: string) => void;\n} & Pick<ComplementarySidebarProps, 'panels'>;\n\nconst PlankSeparator = ({ index }: { index: number }) =>\n index > 0 ? <span role='separator' className='row-span-2 bg-deck is-4' style={{ gridColumn: index * 2 }} /> : null;\n\nexport const DeckLayout = ({ layoutParts, toasts, overscroll, showHints, panels, onDismissToast }: DeckLayoutProps) => {\n const context = useLayout();\n const {\n layoutMode,\n sidebarOpen,\n complementarySidebarOpen,\n dialogOpen,\n dialogContent,\n dialogBlockAlign,\n dialogType,\n popoverOpen,\n popoverContent,\n popoverAnchorId,\n } = context;\n const { t } = useTranslation(DECK_PLUGIN);\n const { plankSizing } = useDeckContext();\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attentionPlugin = usePlugin<AttentionPluginProvides>('dxos.org/plugin/attention');\n const fullScreenSlug = useMemo(() => firstIdInPart(layoutParts, 'fullScreen'), [layoutParts]);\n\n const scrollLeftRef = useRef<number | null>();\n const deckRef = useRef<HTMLDivElement>(null);\n\n const isSoloModeLoaded = layoutMode === 'solo' && Boolean(layoutParts.solo?.[0]);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n const attended = untracked(() => attentionPlugin?.provides.attention.attended ?? []);\n const firstId = isSoloModeLoaded ? firstIdInPart(layoutParts, 'solo') : firstIdInPart(layoutParts, 'main');\n if (attended.length === 0 && firstId) {\n // TODO(wittjosiah): Focusing the type button is a workaround.\n // If the plank is directly focused on first load the focus ring appears.\n document.querySelector<HTMLElement>(`article[data-attendable-id=\"${firstId}\"] button`)?.focus();\n }\n }, []);\n\n /**\n * Clear scroll restoration state if the window is resized\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n\n useOnTransition(layoutMode, (mode) => mode !== 'deck', 'deck', restoreScroll);\n\n /**\n * Save scroll position as the user scrolls\n */\n const handleScroll = useCallback(\n (event: UIEvent) => {\n if (layoutMode === 'deck' && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [layoutMode],\n );\n\n const isEmpty = (layoutParts.main?.length ?? 0) === 0 && (layoutParts.solo?.length ?? 0) === 0;\n\n const padding = useMemo(() => {\n if (layoutMode === 'deck' && overscroll === 'centering') {\n return calculateOverscroll(layoutParts.main?.length ?? 0);\n }\n return {};\n }, [layoutMode, overscroll, layoutParts.main]);\n\n const Dialog = dialogType === 'alert' ? AlertDialog : NaturalDialog;\n\n return (\n <Popover.Root\n modal\n open={!!(popoverAnchorId && popoverOpen)}\n onOpenChange={(nextOpen) => {\n if (nextOpen && popoverAnchorId) {\n context.popoverOpen = true;\n } else {\n context.popoverOpen = false;\n context.popoverAnchorId = undefined;\n }\n }}\n >\n <ActiveNode />\n\n {layoutMode === 'fullscreen' && <Fullscreen id={fullScreenSlug} />}\n\n {layoutMode !== 'fullscreen' && (\n <Main.Root\n navigationSidebarOpen={context.sidebarOpen}\n onNavigationSidebarOpenChange={(next) => (context.sidebarOpen = next)}\n complementarySidebarOpen={context.complementarySidebarOpen}\n onComplementarySidebarOpenChange={(next) => (context.complementarySidebarOpen = next)}\n >\n {/* Notch */}\n <Main.Notch classNames='z-[21]'>\n <Surface role='notch-start' />\n <Button onClick={() => (context.sidebarOpen = !context.sidebarOpen)} variant='ghost' classNames='p-1'>\n <span className='sr-only'>{t('open navigation sidebar label')}</span>\n <MenuIcon weight='light' className={getSize(5)} />\n </Button>\n <Surface role='notch-end' />\n </Main.Notch>\n\n {/* Left sidebar. */}\n <Sidebar layoutParts={layoutParts} />\n\n {/* Right sidebar. */}\n <ComplementarySidebar panels={panels} current={layoutParts.complementary?.[0].id} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content handlesFocus>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n classNames='grid block-end-[--statusbar-size]'\n handlesFocus\n style={\n {\n '--dx-main-sidebarWidth': sidebarOpen ? 'var(--nav-sidebar-size)' : '0px',\n '--dx-main-complementaryWidth': complementarySidebarOpen\n ? 'var(--complementary-sidebar-size)'\n : '0px',\n '--dx-main-contentFirstWidth': `${plankSizing[layoutParts.main?.[0]?.id ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-contentLastWidth': `${plankSizing[layoutParts.main?.[(layoutParts.main?.length ?? 1) - 1]?.id ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainProps['style']\n }\n >\n <div\n role='none'\n className={!isSoloModeLoaded ? 'relative bg-deck overflow-hidden' : 'sr-only'}\n {...(isSoloModeLoaded && { inert: '' })}\n >\n <Stack\n orientation='horizontal'\n size='contain'\n classNames={['absolute inset-block-0 -inset-inline-px', mainPaddingTransitions]}\n onScroll={handleScroll}\n itemsCount={2 * (layoutParts.main?.length ?? 0) - 1}\n style={padding}\n ref={deckRef}\n >\n {layoutParts.main?.map((layoutEntry, index) => (\n <Fragment key={layoutEntry.id}>\n <PlankSeparator index={index} />\n <Plank\n entry={layoutEntry}\n layoutParts={layoutParts}\n part='main'\n layoutMode={layoutMode}\n order={index * 2 + 1}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n <div\n role='none'\n className={isSoloModeLoaded ? 'relative bg-deck overflow-hidden' : 'sr-only'}\n {...(!isSoloModeLoaded && { inert: '' })}\n >\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <Plank entry={layoutParts.solo?.[0]} layoutParts={layoutParts} part='solo' layoutMode={layoutMode} />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Footer status. */}\n <StatusBar showHints={showHints} />\n </Main.Root>\n )}\n\n {/* Global popovers. */}\n <Popover.Portal>\n <Popover.Content\n onEscapeKeyDown={() => {\n context.popoverOpen = false;\n context.popoverAnchorId = undefined;\n }}\n >\n <Popover.Viewport>\n <Surface role='popover' data={popoverContent} limit={1} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n\n {/* Global dialog. */}\n <Dialog.Root open={dialogOpen} onOpenChange={(nextOpen) => (context.dialogOpen = nextOpen)}>\n <Dialog.Overlay blockAlign={dialogBlockAlign}>\n <Surface role='dialog' data={dialogContent} limit={1} />\n </Dialog.Overlay>\n </Dialog.Root>\n\n {/* Global toasts. */}\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open) => {\n if (!open) {\n onDismissToast(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { useNode, useNodeActionExpander } from '../../hooks';\n\n// TODO(burdon): Factor out to effect in plugin set document title.\nexport const ActiveNode = () => {\n const [id] = useAttended();\n const { graph } = useGraph();\n const activeNode = useNode(graph, id);\n useNodeActionExpander(activeNode);\n\n return (\n <div role='none' className='sr-only'>\n {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.\n Probably this lives in React-land currently in order to access translations? */}\n <Surface role='document-title' data={{ subject: activeNode }} limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Graph, type Node } from '@dxos/plugin-graph';\n\n/**\n * React hook to get a node from the graph.\n *\n * @param graph Graph to find the node in.\n * @param id Id of the node to find.\n * @param timeout Optional timeout in milliseconds to wait for the node to be found.\n * @returns Node if found, undefined otherwise.\n */\n// TODO(wittjosiah): Factor out.\nexport const useNode = <T = any>(graph: Graph, id?: string, timeout?: number): Node<T> | undefined => {\n const [nodeState, setNodeState] = useState<Node<T> | undefined>(id ? graph.findNode(id, false) : undefined);\n\n useEffect(() => {\n if (!id && nodeState) {\n setNodeState(undefined);\n }\n\n if (nodeState?.id === id || !id) {\n return;\n }\n\n // Set timeout did not seem to effectively not block the UI thread.\n const frame = requestAnimationFrame(async () => {\n try {\n const node = await graph.waitForNode(id, timeout);\n if (node) {\n setNodeState(node);\n }\n } catch {}\n });\n\n return () => cancelAnimationFrame(frame);\n }, [graph, id, timeout, nodeState?.id]);\n\n return nodeState;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { ACTION_GROUP_TYPE, ACTION_TYPE, getGraph, type Node } from '@dxos/plugin-graph';\n\nconst expandNodeActions = async (node: Node) => {\n const graph = getGraph(node);\n await graph.expand(node, 'outbound', ACTION_GROUP_TYPE);\n await graph.expand(node, 'outbound', ACTION_TYPE);\n};\n\nexport const useNodeActionExpander = (node?: Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n void expandNodeActions(node);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { navigationSidebarOpen, complementarySidebarOpen } = useMainContext('DeckPluginPlank');\n return {\n 'data-sidebar-inline-start-state': navigationSidebarOpen ? 'open' : 'closed',\n 'data-sidebar-inline-end-state': complementarySidebarOpen ? 'open' : 'closed',\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport {\n createIntent,\n type LayoutCoordinate,\n NavigationAction,\n SLUG_PATH_SEPARATOR,\n Surface,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Main, ScrollArea } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { railGridHorizontal, StackContext } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { NodePlankHeading } from './NodePlankHeading';\nimport { PlankContentError } from './PlankError';\nimport { PlankLoading } from './PlankLoading';\nimport { useNode, useNodeActionExpander } from '../../hooks';\nimport { type Panel } from '../../types';\nimport { useLayout } from '../LayoutContext';\n\nexport type ComplementarySidebarProps = {\n panels: Panel[];\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ panels, current }: ComplementarySidebarProps) => {\n const { popoverAnchorId } = useLayout();\n const attended = useAttended();\n const panel = (panels.find((p) => p.id === current) ?? panels[0])?.id;\n const id = attended[0] ? `${attended[0]}${SLUG_PATH_SEPARATOR}${panel}` : undefined;\n const { graph } = useGraph();\n const node = useNode(graph, id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n useNodeActionExpander(node);\n\n const actions = useMemo(\n () =>\n panels.map(({ id, label, icon }) => ({\n id: `complementary-${id}`,\n data: () => {\n void dispatch(createIntent(NavigationAction.Open, { activeParts: { complementary: id } }));\n },\n properties: {\n label,\n icon,\n menuItemType: 'toggle',\n isChecked: panel === id,\n },\n })),\n [panel],\n );\n\n // TODO(wittjosiah): Ensure that id is always defined.\n const coordinate: LayoutCoordinate = useMemo(() => ({ entryId: id ?? 'unknown', part: 'complementary' }), [id]);\n\n // TODO(burdon): Scroll area should be controlled by surface.\n return (\n <Main.ComplementarySidebar>\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <div role='none' className={mx(railGridHorizontal, 'grid grid-cols-[100%] bs-full')}>\n <NodePlankHeading coordinate={coordinate} node={node} popoverAnchorId={popoverAnchorId} actions={actions} />\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n {node && (\n <Surface\n key={id}\n role={`complementary--${panel}`}\n limit={1}\n data={{ id, subject: node.properties.object ?? node.properties.space, popoverAnchorId }}\n fallback={PlankContentError}\n placeholder={<PlankLoading />}\n />\n )}\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </div>\n </StackContext.Provider>\n </Main.ComplementarySidebar>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, memo, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n LayoutAction,\n NavigationAction,\n SLUG_PATH_SEPARATOR,\n Surface,\n useIntentDispatcher,\n type LayoutCoordinate,\n} from '@dxos/app-framework';\nimport { type Node, useGraph } from '@dxos/plugin-graph';\nimport { Icon, Popover, toLocalizedString, useMediaQuery, useTranslation, IconButton } from '@dxos/react-ui';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\n\nimport { PlankControls } from './PlankControls';\nimport { DECK_PLUGIN } from '../../meta';\nimport { useLayout } from '../LayoutContext';\n\nexport type NodePlankHeadingProps = {\n coordinate: LayoutCoordinate;\n node?: Node;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n pending?: boolean;\n actions?: StackItemSigilAction[];\n};\n\nexport const NodePlankHeading = memo(\n ({\n coordinate,\n node,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n pending,\n actions = [],\n }: NodePlankHeadingProps) => {\n const layoutContext = useLayout();\n const { t } = useTranslation(DECK_PLUGIN);\n const { graph } = useGraph();\n const icon = node?.properties?.icon ?? 'ph--placeholder--regular';\n const label = pending\n ? t('pending heading')\n : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: DECK_PLUGIN }], t);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;\n const [isNotMobile] = useMediaQuery('md');\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n node && graph.actions(node);\n });\n\n return () => cancelAnimationFrame(frame);\n }, [node]);\n\n const layoutPart = coordinate.part;\n // NOTE(Zan): Node ids may now contain a path like `${space}:${id}~comments`\n const attendableId = coordinate.entryId.split(SLUG_PATH_SEPARATOR).at(0);\n const capabilities = useMemo(\n () => ({\n solo: (layoutPart === 'solo' || layoutPart === 'main') && isNotMobile,\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n }),\n [isNotMobile, layoutPart, canIncrementStart, canIncrementEnd],\n );\n\n return (\n <StackItem.Heading classNames='pie-1 border-be border-separator'>\n <ActionRoot>\n {node ? (\n <StackItem.Sigil\n icon={icon}\n related={layoutPart === 'complementary'}\n attendableId={attendableId}\n triggerLabel={t('actions menu label')}\n actions={[actions, graph.actions(node)].filter((a) => a.length > 0)}\n onAction={(action) =>\n typeof action.data === 'function' && action.data?.({ node: action as Node, caller: DECK_PLUGIN })\n }\n >\n <Surface role='menu-footer' data={{ subject: node.data }} />\n </StackItem.Sigil>\n ) : (\n <StackItem.SigilButton>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={5} />\n </StackItem.SigilButton>\n )}\n </ActionRoot>\n <TextTooltip text={label} onlyWhenTruncating>\n <StackItem.HeadingLabel\n attendableId={attendableId}\n related={layoutPart === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n {node && layoutPart !== 'complementary' && (\n // TODO(Zan): What are we doing with layout coordinate here?\n <Surface role='navbar-end' data={{ subject: node.data }} />\n )}\n {/* NOTE(thure): Pinning & unpinning are temporarily disabled */}\n <PlankControls\n capabilities={capabilities}\n isSolo={layoutPart === 'solo'}\n classNames='mx-1'\n onClick={(eventType) => {\n if (!layoutPart) {\n return;\n }\n\n // TODO(Zan): Update this to use the new layout actions.\n if (eventType === 'solo') {\n return dispatch(\n createIntent(NavigationAction.Adjust, {\n type: eventType,\n layoutCoordinate: { part: 'main', entryId: coordinate.entryId },\n }),\n );\n } else if (eventType === 'close') {\n if (layoutPart === 'complementary') {\n return dispatch(createIntent(LayoutAction.SetLayout, { element: 'complementary', state: false }));\n } else {\n return dispatch(\n createIntent(NavigationAction.Close, { activeParts: { [layoutPart]: [coordinate.entryId] } }),\n );\n }\n } else {\n return dispatch(createIntent(NavigationAction.Adjust, { type: eventType, layoutCoordinate: coordinate }));\n }\n }}\n close={layoutPart === 'complementary' ? 'minify-end' : true}\n >\n {/* TODO(wittjosiah): This doesn't behave exactly the same as the rest of the button group. */}\n {layoutPart !== 'complementary' && (\n <IconButton\n iconOnly\n onClick={() => (layoutContext.complementarySidebarOpen = !layoutContext.complementarySidebarOpen)}\n variant='ghost'\n label={t('open complementary sidebar label')}\n classNames='!pli-2 !plb-3 [&>svg]:-scale-x-100'\n icon='ph--sidebar-simple--regular'\n size={4}\n />\n )}\n </PlankControls>\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { type PartAdjustment } from '@dxos/app-framework';\nimport {\n Button,\n ButtonGroup,\n type ButtonGroupProps,\n type ButtonProps,\n Icon,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nexport type PlankControlHandler = (event: PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n solo?: boolean;\n};\n\nexport type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: PlankControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: PlankCapabilities;\n isSolo?: boolean;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' {...props}>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={4} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{label}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n// TODO(wittjosiah): Duplicate of stack LayoutControls?\n// Translations were to be duplicated between packages.\nexport const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(\n (\n { onClick, variant = 'default', capabilities: can, isSolo, pin, close = false, children, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const buttonClassNames = variant === 'hide-disabled' ? 'disabled:hidden !pli-2 !plb-3' : '!pli-2 !plb-3';\n\n return (\n <ButtonGroup {...props} ref={forwardedRef}>\n {pin && !isSolo && ['both', 'start'].includes(pin) && (\n <PlankControl\n label={t('pin start label')}\n variant='ghost'\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-start')}\n icon='ph--caret-line-left--regular'\n />\n )}\n\n {can.solo && (\n <PlankControl\n label={isSolo ? t('show deck plank label') : t('show solo plank label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('solo')}\n icon={isSolo ? 'ph--arrow-u-down-left--regular' : 'ph--arrows-out--regular'}\n />\n )}\n\n {!isSolo && can.solo && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!can.incrementStart}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-start')}\n icon='ph--caret-left--regular'\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!can.incrementEnd}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-end')}\n icon='ph--caret-right--regular'\n />\n </>\n )}\n\n {pin && !isSolo && ['both', 'end'].includes(pin) && (\n <PlankControl\n label={t('pin end label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-end')}\n icon='ph--caret-line-right--regular'\n />\n )}\n\n {close && !isSolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n onClick={() => onClick?.('close')}\n data-testid='plankHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext } from 'react';\n\nimport type { Layout } from '@dxos/app-framework';\nimport { raise } from '@dxos/debug';\n\nexport const LayoutContext: Context<Layout | null> = createContext<Layout | null>(null);\n\nexport const useLayout = (): Layout => useContext(LayoutContext) ?? raise(new Error('Missing LayoutContext'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type LayoutCoordinate } from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { NodePlankHeading } from './NodePlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const PlankContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='overflow-auto p-8 attention-surface grid place-items-center'>\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'break-words border border-dashed border-separator rounded-lg p-8',\n errorString.length < 256 && 'text-lg',\n )}\n >\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n layoutCoordinate,\n node,\n error,\n}: {\n layoutCoordinate: LayoutCoordinate;\n node?: Node;\n error?: Error;\n}) => {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n setTimeout(() => setTimedOut(true), 5e3);\n }, []);\n return (\n <>\n <NodePlankHeading coordinate={layoutCoordinate} node={node} pending={!timedOut} />\n {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}\n </>\n );\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 PlankLoading = () => {\n return <div role='none' className='grid place-items-center attention-surface' />;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\n\nexport const ContentEmpty = () => {\n return (\n <div\n role='none'\n className='min-bs-screen is-dvw sm:is-full flex items-center justify-center p-8'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <div role='none' className='grid place-items-center grid-rows-[min-content_min-content]'>\n <Surface role='keyshortcuts' />\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { fixedInsetFlexLayout } from '@dxos/react-ui-theme';\n\nimport { Fallback } from './Fallback';\nimport { SURFACE_PREFIX } from './constants';\nimport { useNode } from '../../hooks';\n\nexport const Fullscreen = ({ id }: { id?: string }) => {\n const { graph } = useGraph();\n const fullScreenNode = useNode(graph, id);\n\n return (\n <div role='none' className={fixedInsetFlexLayout}>\n <Surface\n role='main'\n limit={1}\n fallback={Fallback}\n data={{\n subject: fullScreenNode?.data,\n component: id?.startsWith(SURFACE_PREFIX) ? id.slice(SURFACE_PREFIX.length) : undefined,\n }}\n />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const Fallback = () => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <div role='none' className='min-bs-screen is-full flex items-center justify-center p-8'>\n <p\n role='alert'\n className={mx(\n errorText,\n 'border border-error-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg',\n )}\n >\n {t('plugin error message')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type KeyboardEvent, memo, useCallback, useLayoutEffect, useMemo, useRef } from 'react';\n\nimport {\n type LayoutCoordinate,\n type LayoutEntry,\n type LayoutPart,\n type LayoutParts,\n Surface,\n useIntentDispatcher,\n type Layout,\n indexInPart,\n partLength,\n LayoutAction,\n createIntent,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/react-ui-theme';\n\nimport { NodePlankHeading } from './NodePlankHeading';\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankLoading } from './PlankLoading';\nimport { useNode, useMainSize } from '../../hooks';\nimport { DeckAction } from '../../types';\nimport { useDeckContext } from '../DeckContext';\nimport { useLayout } from '../LayoutContext';\n\nconst UNKNOWN_ID = 'unknown_id';\n\nexport type PlankProps = {\n entry?: LayoutEntry;\n layoutParts: LayoutParts;\n // TODO(wittjosiah): Remove. Pass in LayoutCoordinate instead of LayoutEntry.\n part: LayoutPart;\n layoutMode: Layout['layoutMode'];\n order?: number;\n};\n\nexport const Plank = memo(({ entry, layoutParts, part, layoutMode, order }: PlankProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const coordinate: LayoutCoordinate = useMemo(() => ({ part, entryId: entry?.id ?? UNKNOWN_ID }), [entry?.id, part]);\n const { popoverAnchorId, scrollIntoView } = useLayout();\n const { plankSizing } = useDeckContext();\n const { graph } = useGraph();\n const node = useNode(graph, entry?.id);\n const rootElement = useRef<HTMLDivElement | null>(null);\n const canResize = layoutMode === 'deck';\n const Root = part === 'solo' ? 'article' : StackItem.Root;\n\n const attendableAttrs = useAttendableAttributes(coordinate.entryId);\n const index = indexInPart(layoutParts, coordinate);\n const length = partLength(layoutParts, part);\n const canIncrementStart = part === 'main' && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = part === 'main' && index !== undefined && index < length - 1 && length !== undefined;\n\n const size = plankSizing?.[coordinate.entryId] as number | undefined;\n const setSize = useCallback(\n debounce((nextSize: number) => {\n return dispatch(createIntent(DeckAction.UpdatePlankSize, { id: coordinate.entryId, size: nextSize }));\n }, 200),\n [dispatch, coordinate.entryId],\n );\n\n // TODO(thure): Tabster’s focus group should handle moving focus to Main, but something is blocking it.\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.target === event.currentTarget && event.key === 'Escape') {\n rootElement.current?.closest('main')?.focus();\n }\n }, []);\n\n useLayoutEffect(() => {\n if (scrollIntoView === coordinate.entryId) {\n // TODO(wittjosiah): When focused on page load, the focus is always visible.\n // Forcing focus to something smaller than the plank prevents large focus ring in the interim.\n const focusable = rootElement.current?.querySelector('button') || rootElement.current;\n focusable?.focus({ preventScroll: true });\n layoutMode === 'deck' && focusable?.scrollIntoView({ behavior: 'smooth', inline: 'center' });\n // Clear the scroll into view state once it has been actioned.\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { id: undefined }));\n }\n }, [coordinate.entryId, scrollIntoView, layoutMode]);\n\n const isSolo = layoutMode === 'solo' && part === 'solo';\n const isAttendable = isSolo || (layoutMode === 'deck' && part === 'main');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n subject: node.data,\n path: entry?.path,\n coordinate,\n popoverAnchorId,\n },\n [node, node?.data, entry?.path, coordinate, popoverAnchorId],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const className = mx(\n 'attention-surface relative',\n isSolo && mainIntrinsicSize,\n isSolo && railGridHorizontal,\n isSolo ? 'grid absolute inset-0' : '!border-separator border-li',\n );\n\n return (\n <Root\n ref={rootElement}\n data-testid='deck.plank'\n tabIndex={0}\n {...(part === 'solo'\n ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id: entry?.id ?? 'never' },\n size,\n onSizeChange: setSize,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attendableAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n <NodePlankHeading\n coordinate={coordinate}\n node={node}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n />\n <Surface\n key={node.id}\n role='article'\n data={data}\n limit={1}\n fallback={PlankContentError}\n placeholder={placeholder}\n />\n </>\n ) : (\n <PlankError layoutCoordinate={coordinate} />\n )}\n {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nexport type PlankSizing = Record<string, number>;\nexport type DeckContextType = { plankSizing: PlankSizing };\n\nexport const DeckContext: Context<DeckContextType | null> = createContext<DeckContextType | null>(null);\n\nexport const useDeckContext = (): DeckContextType => useContext(DeckContext) ?? raise(new Error('Missing DeckContext'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type LayoutParts, Surface } from '@dxos/app-framework';\nimport { Main } from '@dxos/react-ui';\n\nimport { useLayout } from '../LayoutContext';\n\nexport type SidebarProps = {\n layoutParts: LayoutParts;\n};\n\nexport const Sidebar = ({ layoutParts }: SidebarProps) => {\n const { popoverAnchorId } = useLayout();\n const navigationData = useMemo(() => ({ popoverAnchorId }), [popoverAnchorId]);\n\n return (\n <Main.NavigationSidebar>\n <Surface role='navigation' data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { mainPadding, mainPaddingTransitions, mx } from '@dxos/react-ui-theme';\n\nimport { useMainSize } from '../../hooks';\n\nexport const StatusBar = ({ showHints }: { showHints?: boolean }) => {\n const sizeAttrs = useMainSize();\n return (\n <div\n role='none'\n {...sizeAttrs}\n className={mx(\n 'fixed flex justify-between block-end-0 inset-inline-0 items-center border-bs border-separator z-[2]',\n mainPadding,\n mainPaddingTransitions,\n )}\n >\n <div role='none'>{showHints && <Surface role='hints' limit={1} />}</div>\n <Surface role='status-bar' limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport type { Toast as ToastProps } from '@dxos/app-framework';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n toLocalizedString,\n useTranslation,\n type ToastRootProps,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\n\n// TODO(wittjosiah): Render remaining duration as a progress bar within the toast.\nexport const Toast = ({\n id,\n title,\n description,\n icon,\n duration,\n actionLabel,\n actionAlt,\n closeLabel,\n onAction,\n onOpenChange,\n}: ToastProps & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <NaturalToast.Root data-testid={id} defaultOpen duration={duration} onOpenChange={onOpenChange}>\n <NaturalToast.Body>\n <NaturalToast.Title classNames='items-center'>\n {icon && <Icon icon={icon} size={5} classNames='inline mr-1' />}\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && (\n <NaturalToast.Description>{description && toLocalizedString(description, t)}</NaturalToast.Description>\n )}\n </NaturalToast.Body>\n <NaturalToast.Actions>\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Action altText={toLocalizedString(actionAlt, t)} asChild>\n <Button data-testid='toast.action' variant='primary' onClick={() => onAction?.()}>\n {toLocalizedString(actionLabel, t)}\n </Button>\n </NaturalToast.Action>\n )}\n {closeLabel && (\n <NaturalToast.Close asChild>\n <Button data-testid='toast.close'>{toLocalizedString(closeLabel, t)}</Button>\n </NaturalToast.Close>\n )}\n </NaturalToast.Actions>\n </NaturalToast.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(mjamesderocher): Factor out as part of NavigationPlugin.\nexport const checkAppScheme = (url: string) => {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n iframe.src = url + window.location.pathname.replace(/^\\/+/, '') + window.location.search;\n\n const timer = setTimeout(() => {\n document.body.removeChild(iframe);\n }, 3000);\n\n window.addEventListener('pagehide', (event) => {\n clearTimeout(timer);\n document.body.removeChild(iframe);\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type LayoutMode, type LayoutPart } from '@dxos/app-framework';\n\n/**\n * If in solo mode and the part is the main part, open it in solo mode.\n * From the dispatch POV we refer to both 'solo' and 'main' as 'main'.\n */\nexport const getEffectivePart = (partName: LayoutPart, layoutMode: LayoutMode): LayoutPart =>\n layoutMode === 'solo' && partName === 'main' ? 'solo' : partName;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type { CSSProperties } from 'react';\n\n/**\n * ┌────────────────────────────────────────────────────────────────────────────────────────────────────┐\n * | Overscroll Padding Calculation for Centering Planks on Screen. │\n * ├────────────────────────────────────────────────────────────────────────────────────────────────────┤\n * │ NOTE(Zan): I found the way you calculate the overscroll padding to center a plank on the screen │\n * │ at the edges of the scroll context a bit confusing, so I've diagrammed it here. │\n * │ │\n * │ Multiple Planks: │\n * │ ─────────────── │\n * | Use the following overscroll padding calculation centering the boundary planks on the SCREEN. │\n * │ │\n * │ Left Padding: Right Padding: │\n * │ ┌───┬────┬──────────────────┬──────┐ ┌──────┬──────────────────┬────┬───┐ │\n * │ │ │████│ Ideal │ │ │ │ Ideal │████│ │ │\n * │ │ S │█PL█│ first │ │ │ │ last │█PR█│ C │ │\n * │ │ │████│ plank │ │ │ │ plank │████│ │ │\n * │ └───┴────┴──────────────────┴──────┘ └──────┴──────────────────┴────┴───┘ │\n * │ <--------- screen width -----------> <---------- screen width ----------> │\n * │ │\n * │ PL = ((screen width - Plank Width) / 2) - S │\n * │ PR = ((screen width - Plank Width) / 2) - C │\n * │ │\n * │ S = Sidebar width C = Complementary sidebar width │\n * │ PL = Padding Left PR = Padding Right │\n * │ │\n * │ Single Plank: │\n * │ ───────────── │\n * │ For a single plank we use the following overscroll padding calculation to center the plank in │\n * │ the content area: │\n * │ │\n * │ ┌───┬───────────────────────┬───┬───────────────────────┬───┐ │\n * │ │ │███████████████████████│ │███████████████████████│ │ │\n * │ │ S │█████ Left Padding ████│ P │████ Right Padding ████│ C │ │\n * │ │ │███████████████████████│ │███████████████████████│ │ │\n * │ └───┴───────────────────────┴───┴───────────────────────┴───┘ │\n * │ <------------------------ screen width ---------------------> │\n * │ │\n * │ Left/Right Padding Width = (screen width - S - P - C) / 2 │\n * │ │\n * │ S = Sidebar width (may be 0) │\n * │ P = Plank width (centered) │\n * │ C = Complementary sidebar width (may be 0) │\n * └────────────────────────────────────────────────────────────────────────────────────────────────────┘\n */\nexport const calculateOverscroll = (\n planksCount: number,\n): Pick<CSSProperties, 'paddingInlineStart' | 'paddingInlineEnd'> | undefined => {\n if (!planksCount) {\n return { paddingInlineStart: 0, paddingInlineEnd: 0 };\n }\n if (planksCount === 1) {\n const overscrollPadding =\n 'max(0px, calc(((100dvw - var(--dx-main-sidebarWidth) - var(--dx-main-complementaryWidth) - (var(--dx-main-contentFirstWidth) + 1px)) / 2)))';\n return { paddingInlineStart: overscrollPadding, paddingInlineEnd: overscrollPadding };\n } else {\n return {\n paddingInlineStart:\n 'max(0px, calc(((100dvw - (var(--dx-main-contentFirstWidth) + 1px)) / 2) - var(--dx-main-sidebarWidth)))',\n paddingInlineEnd:\n 'max(0px, calc(((100dvw - (var(--dx-main-contentLastWidth) + 1px)) / 2) - var(--dx-main-complementaryWidth)))',\n };\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { DECK_PLUGIN } from '../meta';\nimport {\n type NewPlankPositioning,\n NewPlankPositions,\n type DeckSettingsProps,\n type Overscroll,\n OverscrollOptions,\n} from '../types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport const LayoutSettings = ({ settings }: { settings: DeckSettingsProps }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <>\n <DeprecatedFormInput label={t('select new plank positioning label')}>\n <Select.Root\n value={settings.newPlankPositioning ?? 'start'}\n onValueChange={(value) => (settings.newPlankPositioning = value as NewPlankPositioning)}\n >\n <Select.TriggerButton placeholder={t('select new plank positioning placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {NewPlankPositions.map((position) => (\n <Select.Option key={position} value={position}>\n {t(`settings new plank position ${position} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings overscroll label')}>\n <Select.Root\n value={settings.overscroll ?? 'none'}\n onValueChange={(value) => (settings.overscroll = value as Overscroll)}\n >\n <Select.TriggerButton placeholder={t('select overscroll placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {OverscrollOptions.map((option) => (\n <Select.Option key={option} value={option}>\n {t(`settings overscroll ${option} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show hints label')}>\n <Input.Switch checked={settings.showHints} onCheckedChange={(checked) => (settings.showHints = checked)} />\n </DeprecatedFormInput>\n {!isSocket && (\n <DeprecatedFormInput label={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => (settings.enableNativeRedirect = checked)}\n />\n </DeprecatedFormInput>\n )}\n <DeprecatedFormInput label={t('settings custom slots')}>\n <Input.Switch checked={settings.customSlots} onCheckedChange={(checked) => (settings.customSlots = checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings flat deck')}>\n <Input.Switch checked={settings.flatDeck} onCheckedChange={(checked) => (settings.flatDeck = checked)} />\n </DeprecatedFormInput>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { produce } from 'immer';\n\nimport {\n type LayoutAdjustment,\n type LayoutCoordinate,\n type LayoutEntry,\n type LayoutPart,\n type LayoutParts,\n SLUG_ENTRY_SEPARATOR,\n SLUG_KEY_VALUE_SEPARATOR,\n SLUG_LIST_SEPARATOR,\n SLUG_PATH_SEPARATOR,\n} from '@dxos/app-framework';\n\nimport { type NewPlankPositioning } from './types';\n\n// Part feature support\nconst partsThatSupportIncrement = ['main'] as LayoutPart[];\n\n//\n// --- Layout Parts Manipulation ----------------------------------------------\n\ntype OpenLayoutEntryOptions = { positioning?: NewPlankPositioning; pivotId?: string };\n\nexport const openEntry = (\n layout: LayoutParts,\n part: LayoutPart,\n entry: LayoutEntry,\n options?: OpenLayoutEntryOptions,\n): LayoutParts => {\n return produce(layout, (draft) => {\n const layoutPart = draft[part];\n // If the part doesn't exist, create it.\n if (!layoutPart) {\n draft[part] = [entry];\n return;\n }\n if (part === 'main') {\n // Check that the entry is not already in the part\n if (layoutPart.find((e) => e.id === entry.id)) {\n return;\n }\n\n const plankPositioning = options?.positioning ?? 'start';\n const pivotId = options?.pivotId;\n\n if (pivotId) {\n const pivotIndex = layoutPart.findIndex((e) => e.id === pivotId);\n if (pivotIndex !== -1) {\n if (plankPositioning === 'start') {\n layoutPart.splice(pivotIndex, 0, entry);\n } else {\n layoutPart.splice(pivotIndex + 1, 0, entry);\n }\n return;\n }\n }\n\n // If no pivot found or provided, fall back to original behavior\n if (plankPositioning === 'start') {\n layoutPart.unshift(entry);\n } else {\n layoutPart.push(entry);\n }\n } else {\n // If the part is not main, we're going to replace the single entry in the part with the new entry.\n draft[part] = [entry];\n }\n });\n};\n\nexport const closeEntry = (layout: LayoutParts, layoutCoordinate: LayoutCoordinate): LayoutParts => {\n return produce(layout, (draft) => {\n const { part, entryId: slugId } = layoutCoordinate;\n const layoutPart = draft[part];\n if (!layoutPart) {\n return;\n }\n\n const index = layoutPart.findIndex((entry) => entry.id === slugId);\n if (index === -1) {\n return;\n }\n\n // If there's only one entry in the layout part, remove the whole part from the layout.\n if (layoutPart.length === 1) {\n delete draft[part];\n } else {\n layoutPart.splice(index, 1);\n }\n });\n};\n\nexport const incrementPlank = (layout: LayoutParts, adjustment: LayoutAdjustment): LayoutParts => {\n return produce(layout, (draft) => {\n const { layoutCoordinate, type } = adjustment;\n const { part, entryId } = layoutCoordinate;\n\n // Only allow adjustments in the 'main' part\n if (partsThatSupportIncrement.includes(part) === false) {\n return;\n }\n\n const layoutPart = draft[part];\n if (!layoutPart) {\n return;\n }\n const index = layoutPart.findIndex((entry) => entry.id === entryId);\n if (\n index === -1 ||\n (type === 'increment-start' && index === 0) ||\n (type === 'increment-end' && index === layoutPart.length - 1)\n ) {\n return;\n }\n\n if (type === 'increment-start') {\n // Swap the current item with the previous item.\n [layoutPart[index - 1], layoutPart[index]] = [layoutPart[index], layoutPart[index - 1]];\n } else if (type === 'increment-end') {\n // Swap the current item with the next item.\n [layoutPart[index], layoutPart[index + 1]] = [layoutPart[index + 1], layoutPart[index]];\n }\n });\n};\n\nexport const removePart = (layout: LayoutParts, part: LayoutPart): LayoutParts => {\n return produce(layout, (draft) => {\n delete draft[part];\n });\n};\n\nexport const mergeLayoutParts = (...layoutParts: LayoutParts[]): LayoutParts => {\n return layoutParts.reduce(\n (merged, current) =>\n produce(merged, (draft) => {\n Object.entries(current).forEach(([part, entries]) => {\n const typedPart = part as LayoutPart;\n\n if (!draft[typedPart]) {\n draft[typedPart] = [];\n }\n\n const partEntries = draft[typedPart] as LayoutEntry[];\n\n entries.forEach((entry) => {\n const existingIndex = partEntries.findIndex((e) => e.id === entry.id);\n if (existingIndex !== -1) {\n partEntries[existingIndex] = entry;\n } else {\n partEntries.push(entry);\n }\n });\n });\n }),\n {} as LayoutParts,\n );\n};\n\n//\n// URI Projection\n//\n\nconst parseLayoutEntry = (itemString: string): LayoutEntry => {\n // Layout entries are in the form of 'id~path' or just 'id'\n const [id, path] = itemString.split(SLUG_PATH_SEPARATOR);\n const entry: LayoutEntry = { id };\n if (path) {\n entry.path = path;\n }\n return entry;\n};\n\nexport const uriToSoloPart = (uri: string): LayoutParts | undefined => {\n // Now after the domain part, there will be a single ID with an optional path\n const parts = uri.split('/');\n const slug = parts[parts.length - 1]; // Take the last part of the URI\n\n if (slug.length > 0) {\n return {\n solo: [parseLayoutEntry(slug)],\n };\n }\n\n return undefined;\n};\n\nexport const soloPartToUri = (layout: LayoutParts): string => {\n const soloPart = layout?.solo;\n if (!soloPart || soloPart.length === 0) {\n return '';\n }\n\n const entry = soloPart[0];\n return `${entry.id}${entry.path ? SLUG_PATH_SEPARATOR + entry.path : ''}`;\n};\n\n/**\n * Converts a URI string into a LayoutParts object.\n * @deprecated Keeping these as a reference for now. We should remove these once we're sure we don't need them.\n */\nexport const uriToActiveParts = (uri: string): LayoutParts => {\n const parts = uri.split('/');\n const slug = parts[parts.length - 1]; // Take the last part of the URI\n\n if (!slug) {\n return {}; // Return an empty object if the slug is empty\n }\n\n return slug.split(SLUG_ENTRY_SEPARATOR).reduce((acc: LayoutParts, partDescriptor) => {\n const [part, layoutEntry] = partDescriptor.split(SLUG_KEY_VALUE_SEPARATOR);\n if (part && layoutEntry) {\n // TODO(Zan): Remove this cast.\n acc[part as LayoutPart] = layoutEntry.split(SLUG_LIST_SEPARATOR).map(parseLayoutEntry);\n }\n return acc;\n }, {} as LayoutParts);\n};\n\nconst formatLayoutEntry = ({ id, path }: LayoutEntry): string => {\n // NOTE(Zan): Format = `[SOLO_INDICATOR] ID [PATH_SEPARATOR PATH]`.\n let entry = '';\n entry += id;\n if (path) {\n entry += `${SLUG_PATH_SEPARATOR}${path}`;\n }\n return entry;\n};\n\nconst formatPartDescriptor = (part: LayoutPart, layoutEntries: LayoutEntry[]): string => {\n const formattedEntries = layoutEntries.map(formatLayoutEntry).join(SLUG_LIST_SEPARATOR);\n return `${part}${SLUG_KEY_VALUE_SEPARATOR}${formattedEntries}`;\n};\n\n/**\n * Converts a LayoutParts object into a URI string.\n * @deprecated Keeping these as a reference for now. We should remove these once we're sure we don't need them.\n */\nexport const activePartsToUri = (activeParts: LayoutParts): string => {\n return Object.entries(activeParts)\n .filter(([, layoutEntries]) => layoutEntries.length > 0) // Only include non-empty parts\n .map(([part, layoutEntries]) => formatPartDescriptor(part as LayoutPart, layoutEntries))\n .join(SLUG_ENTRY_SEPARATOR);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DECK_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [DECK_PLUGIN]: {\n 'main header label': 'Main header',\n 'open navigation sidebar label': 'Open navigation sidebar',\n 'open complementary sidebar label': 'Open sidebar',\n 'plugin error message': 'Content failed to render.',\n 'content fallback message': 'Unsupported',\n 'content fallback description':\n 'No plugin had a response for the address you navigated to. Double-check the URL, and ensure you’ve enabled a plugin that supports the object.',\n 'toggle fullscreen label': 'Toggle fullscreen',\n 'settings show hints label': 'Show hints',\n 'settings native redirect label': 'Enable native url redirect (experimental)',\n 'settings custom slots': 'Theme option (experimental)',\n 'settings new plank position start label': 'Start',\n 'settings new plank position end label': 'End',\n 'select new plank positioning placeholder': 'Select new plank positioning',\n 'select new plank positioning label': 'New plank positioning',\n 'undo available label': 'Click to undo previous action.',\n 'undo action label': 'Undo',\n 'undo action alt': 'Undo previous action',\n 'undo close label': 'Dismiss',\n 'error fallback message': 'Unable to open this item',\n 'plank heading fallback label': 'Untitled',\n 'actions menu label': 'Options',\n 'settings deck label': 'Disable Deck',\n 'reload required message': 'Reload required.',\n 'pending heading': 'Loading…',\n 'insert plank label': 'Open',\n 'resize label': 'Drag to resize',\n 'pin start label': 'Pin to the left sidebar',\n 'pin end label': 'Pin to the right sidebar',\n 'increment start label': 'Move to the left',\n 'increment end label': 'Move to the right',\n 'show deck plank label': 'Return to deck',\n 'show solo plank label': 'Maximize',\n 'close label': 'Close',\n 'minify label': 'Minify',\n 'settings overscroll label': 'Plank Overscrolling',\n 'select overscroll placeholder': 'Select plank overscrolling behavior',\n 'settings overscroll centering label': 'Centering',\n 'settings overscroll none label': 'None',\n 'settings flat deck': 'Flatten deck appearance',\n 'close current label': 'Close current plank',\n 'close others label': 'Close other planks',\n 'close all label': 'Close all planks',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DeckPlugin } from './DeckPlugin';\n\nexport default DeckPlugin;\n\nexport * from './DeckPlugin';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["batch", "pipe", "setAutoFreeze", "React", "chain", "createIntent", "createResolver", "createSurface", "filterPlugins", "IntentAction", "LayoutAction", "NavigationAction", "openIds", "parseGraphPlugin", "parseIntentPlugin", "resolvePlugin", "SLUG_PATH_SEPARATOR", "Toast", "ToastSchema", "getTypename", "S", "scheduledEffect", "invariant", "create", "isReactiveObject", "LocalStorageStore", "log", "parseAttentionPlugin", "createExtension", "ROOT_ID", "ObservabilityAction", "translations", "stackTranslations", "NAV_ID", "SURFACE_PREFIX", "Sidebar", "MenuIcon", "untracked", "React", "useCallback", "useEffect", "useMemo", "useRef", "Fragment", "Surface", "firstIdInPart", "usePlugin", "AlertDialog", "Button", "Dialog", "NaturalDialog", "Main", "Popover", "useOnTransition", "useTranslation", "Stack", "StackContext", "DEFAULT_HORIZONTAL_SIZE", "getSize", "mainPaddingTransitions", "React", "Surface", "useGraph", "useAttended", "useEffect", "useState", "useNode", "graph", "id", "timeout", "nodeState", "setNodeState", "useState", "findNode", "undefined", "useEffect", "frame", "requestAnimationFrame", "node", "waitForNode", "cancelAnimationFrame", "useEffect", "ACTION_GROUP_TYPE", "ACTION_TYPE", "getGraph", "expandNodeActions", "node", "graph", "getGraph", "expand", "ACTION_GROUP_TYPE", "ACTION_TYPE", "useNodeActionExpander", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "useMainContext", "useMainSize", "navigationSidebarOpen", "complementarySidebarOpen", "useMainContext", "ActiveNode", "id", "useAttended", "graph", "useGraph", "activeNode", "useNode", "useNodeActionExpander", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "useMemo", "createIntent", "NavigationAction", "SLUG_PATH_SEPARATOR", "Surface", "useIntentDispatcher", "useGraph", "Main", "ScrollArea", "useAttended", "railGridHorizontal", "StackContext", "mx", "React", "Fragment", "memo", "useEffect", "useMemo", "createIntent", "LayoutAction", "NavigationAction", "SLUG_PATH_SEPARATOR", "Surface", "useIntentDispatcher", "useGraph", "Icon", "Popover", "toLocalizedString", "useMediaQuery", "useTranslation", "IconButton", "StackItem", "TextTooltip", "React", "forwardRef", "Button", "ButtonGroup", "Icon", "Tooltip", "useTranslation", "PlankControl", "icon", "label", "props", "React", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "span", "className", "Icon", "size", "Portal", "Content", "side", "PlankControls", "forwardRef", "onClick", "capabilities", "can", "isSolo", "pin", "close", "children", "forwardedRef", "t", "useTranslation", "DECK_PLUGIN", "buttonClassNames", "ButtonGroup", "ref", "includes", "classNames", "solo", "disabled", "incrementStart", "incrementEnd", "data-testid", "createContext", "useContext", "raise", "LayoutContext", "createContext", "useLayout", "useContext", "raise", "Error", "NodePlankHeading", "memo", "coordinate", "node", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "pending", "actions", "layoutContext", "useLayout", "t", "useTranslation", "DECK_PLUGIN", "graph", "useGraph", "icon", "properties", "label", "toLocalizedString", "ns", "dispatchPromise", "dispatch", "useIntentDispatcher", "ActionRoot", "id", "Popover", "Anchor", "Fragment", "isNotMobile", "useMediaQuery", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "layoutPart", "part", "attendableId", "entryId", "split", "SLUG_PATH_SEPARATOR", "at", "capabilities", "useMemo", "solo", "incrementStart", "incrementEnd", "React", "StackItem", "Heading", "classNames", "Sigil", "related", "triggerLabel", "filter", "a", "length", "onAction", "action", "data", "caller", "Surface", "role", "subject", "SigilButton", "span", "className", "Icon", "size", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankControls", "isSolo", "onClick", "eventType", "createIntent", "NavigationAction", "Adjust", "type", "layoutCoordinate", "LayoutAction", "SetLayout", "element", "state", "Close", "activeParts", "close", "IconButton", "iconOnly", "complementarySidebarOpen", "variant", "React", "useEffect", "useState", "useTranslation", "descriptionText", "mx", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "DECK_PLUGIN", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionText", "length", "PlankError", "layoutCoordinate", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "NodePlankHeading", "coordinate", "pending", "PlankLoading", "ComplementarySidebar", "panels", "current", "popoverAnchorId", "useLayout", "attended", "useAttended", "panel", "find", "p", "id", "SLUG_PATH_SEPARATOR", "undefined", "graph", "useGraph", "node", "useNode", "dispatchPromise", "dispatch", "useIntentDispatcher", "useNodeActionExpander", "actions", "useMemo", "map", "label", "icon", "data", "createIntent", "NavigationAction", "Open", "activeParts", "complementary", "properties", "menuItemType", "isChecked", "coordinate", "entryId", "part", "React", "Main", "StackContext", "Provider", "value", "size", "orientation", "rail", "div", "role", "className", "mx", "railGridHorizontal", "NodePlankHeading", "ScrollArea", "Root", "Viewport", "Surface", "key", "limit", "subject", "object", "space", "fallback", "PlankContentError", "placeholder", "PlankLoading", "Scrollbar", "Thumb", "React", "Surface", "ContentEmpty", "React", "div", "role", "className", "data-testid", "Surface", "React", "Surface", "useGraph", "fixedInsetFlexLayout", "React", "useTranslation", "errorText", "mx", "Fallback", "t", "useTranslation", "DECK_PLUGIN", "React", "div", "role", "className", "p", "mx", "errorText", "Fullscreen", "id", "graph", "useGraph", "fullScreenNode", "useNode", "React", "div", "role", "className", "fixedInsetFlexLayout", "Surface", "limit", "fallback", "Fallback", "data", "subject", "component", "startsWith", "SURFACE_PREFIX", "slice", "length", "undefined", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "Surface", "useIntentDispatcher", "indexInPart", "partLength", "LayoutAction", "createIntent", "debounce", "useGraph", "useAttendableAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "createContext", "useContext", "raise", "DeckContext", "createContext", "useDeckContext", "useContext", "raise", "Error", "UNKNOWN_ID", "Plank", "memo", "entry", "layoutParts", "part", "layoutMode", "order", "dispatchPromise", "dispatch", "useIntentDispatcher", "coordinate", "useMemo", "entryId", "id", "popoverAnchorId", "scrollIntoView", "useLayout", "plankSizing", "useDeckContext", "graph", "useGraph", "node", "useNode", "rootElement", "useRef", "canResize", "Root", "StackItem", "attendableAttrs", "useAttendableAttributes", "index", "indexInPart", "length", "partLength", "canIncrementStart", "undefined", "canIncrementEnd", "size", "setSize", "useCallback", "debounce", "nextSize", "createIntent", "DeckAction", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "focusable", "querySelector", "preventScroll", "behavior", "inline", "LayoutAction", "ScrollIntoView", "isSolo", "isAttendable", "sizeAttrs", "useMainSize", "data", "subject", "path", "placeholder", "React", "PlankLoading", "className", "mx", "mainIntrinsicSize", "railGridHorizontal", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "role", "onKeyDown", "NodePlankHeading", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "layoutCoordinate", "ResizeHandle", "React", "useMemo", "Surface", "Main", "Sidebar", "layoutParts", "popoverAnchorId", "useLayout", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "Surface", "role", "data", "limit", "React", "Surface", "mainPadding", "mainPaddingTransitions", "mx", "StatusBar", "showHints", "sizeAttrs", "useMainSize", "React", "div", "role", "className", "mx", "mainPadding", "mainPaddingTransitions", "Surface", "limit", "React", "Button", "Icon", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "Toast", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "onOpenChange", "t", "useTranslation", "DECK_PLUGIN", "React", "NaturalToast", "Root", "data-testid", "defaultOpen", "Body", "Title", "classNames", "Icon", "size", "span", "toLocalizedString", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "checkAppScheme", "url", "iframe", "document", "createElement", "style", "display", "body", "appendChild", "src", "window", "location", "pathname", "replace", "search", "timer", "setTimeout", "removeChild", "addEventListener", "event", "clearTimeout", "getEffectivePart", "partName", "layoutMode", "calculateOverscroll", "planksCount", "paddingInlineStart", "paddingInlineEnd", "overscrollPadding", "PlankSeparator", "index", "React", "span", "role", "className", "style", "gridColumn", "DeckLayout", "layoutParts", "toasts", "overscroll", "showHints", "panels", "onDismissToast", "context", "useLayout", "layoutMode", "sidebarOpen", "complementarySidebarOpen", "dialogOpen", "dialogContent", "dialogBlockAlign", "dialogType", "popoverOpen", "popoverContent", "popoverAnchorId", "t", "useTranslation", "DECK_PLUGIN", "plankSizing", "useDeckContext", "attentionPlugin", "usePlugin", "fullScreenSlug", "useMemo", "firstIdInPart", "scrollLeftRef", "useRef", "deckRef", "isSoloModeLoaded", "Boolean", "solo", "useEffect", "attended", "untracked", "provides", "attention", "firstId", "length", "document", "querySelector", "focus", "handleResize", "useCallback", "current", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "mode", "handleScroll", "event", "currentTarget", "target", "isEmpty", "main", "padding", "calculateOverscroll", "Dialog", "AlertDialog", "NaturalDialog", "Popover", "Root", "modal", "open", "onOpenChange", "nextOpen", "undefined", "ActiveNode", "Fullscreen", "id", "Main", "navigationSidebarOpen", "onNavigationSidebarOpenChange", "next", "onComplementarySidebarOpenChange", "Notch", "classNames", "Surface", "Button", "onClick", "variant", "MenuIcon", "weight", "getSize", "Sidebar", "ComplementarySidebar", "complementary", "Overlay", "Content", "handlesFocus", "ContentEmpty", "bounce", "DEFAULT_HORIZONTAL_SIZE", "div", "inert", "Stack", "orientation", "size", "mainPaddingTransitions", "onScroll", "itemsCount", "ref", "map", "layoutEntry", "Fragment", "key", "Plank", "entry", "part", "order", "StackContext", "Provider", "value", "rail", "StatusBar", "Portal", "onEscapeKeyDown", "Viewport", "data", "limit", "Arrow", "blockAlign", "toast", "Toast", "React", "Input", "Select", "useTranslation", "DeprecatedFormInput", "isSocket", "globalThis", "__args", "LayoutSettings", "settings", "t", "useTranslation", "DECK_PLUGIN", "React", "DeprecatedFormInput", "label", "Select", "Root", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "overscroll", "OverscrollOptions", "option", "Input", "Switch", "checked", "showHints", "onCheckedChange", "enableNativeRedirect", "customSlots", "flatDeck", "produce", "SLUG_ENTRY_SEPARATOR", "SLUG_KEY_VALUE_SEPARATOR", "SLUG_LIST_SEPARATOR", "SLUG_PATH_SEPARATOR", "partsThatSupportIncrement", "openEntry", "layout", "part", "entry", "options", "produce", "draft", "layoutPart", "find", "e", "id", "plankPositioning", "positioning", "pivotId", "pivotIndex", "findIndex", "splice", "unshift", "push", "closeEntry", "layoutCoordinate", "entryId", "slugId", "index", "length", "incrementPlank", "adjustment", "type", "includes", "removePart", "mergeLayoutParts", "layoutParts", "reduce", "merged", "current", "Object", "entries", "forEach", "typedPart", "partEntries", "existingIndex", "parseLayoutEntry", "itemString", "path", "split", "SLUG_PATH_SEPARATOR", "uriToSoloPart", "uri", "parts", "slug", "solo", "undefined", "soloPartToUri", "soloPart", "DECK_PLUGIN", "isSocket", "globalThis", "__args", "appScheme", "setAutoFreeze", "DeckPlugin", "observability", "intentPlugin", "attentionPlugin", "unsubscriptionCallbacks", "currentUndoId", "handleNavigation", "panels", "settings", "LocalStorageStore", "showHints", "customSlots", "flatDeck", "enableNativeRedirect", "disableDeck", "newPlankPositioning", "overscroll", "layout", "layoutMode", "sidebarOpen", "complementarySidebarOpen", "dialogContent", "dialogOpen", "dialogBlockAlign", "undefined", "dialogType", "popoverContent", "popoverAnchorId", "popoverOpen", "toasts", "deck", "plankSizing", "location", "active", "sidebar", "id", "NAV_ID", "closed", "layoutModeHistory", "create", "values", "handleSetLayout", "element", "state", "component", "subject", "anchorId", "Boolean", "S", "is", "ToastSchema", "handleSetLocation", "next", "part", "ids", "openIds", "current", "removed", "filter", "includes", "Array", "from", "Set", "attended", "provides", "attention", "attendedId", "isAttendedAvailable", "currentIds", "map", "attendedIndex", "indexOf", "index", "length", "meta", "ready", "plugins", "resolvePlugin", "parseAttentionPlugin", "parseIntentPlugin", "dispatch", "intent", "dispatchPromise", "prop", "key", "type", "enum", "bool", "json", "push", "filterPlugins", "parsePanelPlugin", "flatMap", "plugin", "complementary", "checkAppScheme", "pathname", "window", "startingLayout", "removePart", "layoutFromUri", "uriToSoloPart", "toAttend", "createIntent", "LayoutAction", "ScrollIntoView", "mergeLayoutParts", "addEventListener", "scheduledEffect", "selectedPath", "soloPartToUri", "history", "pushState", "search", "unload", "close", "forEach", "unsubscribe", "removeEventListener", "translations", "stackTranslations", "graph", "builder", "invariant", "createExtension", "DECK_PLUGIN", "node", "ROOT_ID", "actions", "_fullscreen", "SetLayoutMode", "_tag", "data", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "closeCurrent", "NavigationAction", "Close", "at", "activeParts", "main", "closeOthers", "closeAll", "context", "props", "React", "LayoutContext", "Provider", "value", "DeckContext", "children", "root", "DeckLayout", "layoutParts", "onDismissToast", "findIndex", "toast", "setTimeout", "splice", "surface", "definitions", "createSurface", "role", "LayoutSettings", "resolvers", "parseGraphPlugin", "createResolver", "DeckAction", "UpdatePlankSize", "size", "IntentAction", "ShowUndo", "Date", "now", "title", "message", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "undoPromise", "SetLayout", "setMode", "mode", "solo", "batch", "revert", "pop", "log", "warn", "scrollIntoView", "Open", "previouslyOpenIds", "processLayoutEntry", "partName", "entryString", "currentLayout", "toggle", "path", "split", "SLUG_PATH_SEPARATOR", "layoutEntry", "effectivePart", "getEffectivePart", "some", "entry", "noToggle", "closeEntry", "entryId", "openEntry", "positioning", "newLayout", "Object", "entries", "layoutEntries", "isArray", "activePartEntry", "newlyOpen", "i", "has", "open", "intents", "Expose", "findNode", "typename", "isReactiveObject", "getTypename", "ObservabilityAction", "SendEvent", "name", "AddToActive", "pivotId", "intentParts", "keys", "Adjust", "adjustment", "incrementPlank", "layoutCoordinate", "pipe", "chain", "DeckPlugin"]
|
|
3
|
+
"sources": ["../../../src/events.ts", "../../../src/DeckPlugin.ts", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { DECK_PLUGIN } from './meta';\n\nexport namespace DeckEvents {\n export const StateReady = Events.createStateEvent(`${DECK_PLUGIN}/state-ready`);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { setAutoFreeze } from 'immer';\n\nimport { allOf, Capabilities, contributes, defineModule, definePlugin, Events, oneOf } from '@dxos/app-framework';\nimport { translations as stackTranslations } from '@dxos/react-ui-stack';\n\nimport {\n AppGraphBuilder,\n CheckAppScheme,\n DeckState,\n LayoutIntentResolver,\n ReactRoot,\n DeckSettings,\n ReactSurface,\n UrlHandler,\n} from './capabilities';\nimport { DeckEvents } from './events';\nimport { meta } from './meta';\nimport translations from './translations';\n\n// NOTE(Zan): When producing values with immer, we shouldn't auto-freeze them because\n// our signal implementation needs to add some hidden properties to the produced values.\n// TODO(Zan): Move this to a more global location if we use immer more broadly.\nsetAutoFreeze(false);\n\nexport const DeckPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/check-app-scheme`,\n activatesOn: Events.SettingsReady,\n activate: CheckAppScheme,\n }),\n defineModule({\n id: `${meta.id}/module/settings`,\n activatesOn: Events.SetupSettings,\n activate: DeckSettings,\n }),\n defineModule({\n id: `${meta.id}/module/layout`,\n activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),\n activatesAfter: [Events.LayoutReady, DeckEvents.StateReady],\n activate: DeckState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...stackTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/react-root`,\n activatesOn: Events.Startup,\n activate: ReactRoot,\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/layout-intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: LayoutIntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n defineModule({\n id: `${meta.id}/module/url`,\n activatesOn: allOf(Events.DispatcherReady, DeckEvents.StateReady),\n activate: UrlHandler,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DECK_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [DECK_PLUGIN]: {\n 'plugin name': 'Deck',\n 'main header label': 'Main header',\n 'open navigation sidebar label': 'Open sidebar',\n 'collapse navigation sidebar label': 'Minimize sidebar',\n 'open complementary sidebar label': 'Open context sidebar',\n 'close complementary sidebar label': 'Minimize context sidebar',\n 'plugin error message': 'Content failed to render.',\n 'content fallback message': 'Unsupported',\n 'content fallback description':\n 'No plugin had a response for the address you navigated to. Double-check the URL, and ensure you’ve enabled a plugin that supports the object.',\n 'toggle fullscreen label': 'Toggle fullscreen',\n 'settings show hints label': 'Show hints',\n 'settings native redirect label': 'Enable native url redirect (experimental)',\n 'settings new plank position start label': 'Start',\n 'settings new plank position end label': 'End',\n 'select new plank positioning placeholder': 'Select new plank positioning',\n 'select new plank positioning label': 'New plank positioning',\n 'undo available label': 'Click to undo previous action.',\n 'undo action label': 'Undo',\n 'undo action alt': 'Undo previous action',\n 'undo close label': 'Dismiss',\n 'error fallback message': 'Unable to open this item',\n 'plank heading fallback label': 'Untitled',\n 'actions menu label': 'Options',\n 'settings deck label': 'Disable deck',\n 'reload required message': 'Reload required.',\n 'pending heading': 'Loading…',\n 'insert plank label': 'Open',\n 'resize label': 'Drag to resize',\n 'pin start label': 'Pin to the left sidebar',\n 'pin end label': 'Pin to the right sidebar',\n 'increment start label': 'Move to the left',\n 'increment end label': 'Move to the right',\n 'show deck plank label': 'Return to deck',\n 'show solo plank label': 'Maximize',\n 'close label': 'Close',\n 'minify label': 'Minify',\n 'settings overscroll label': 'Plank overscrolling',\n 'select overscroll placeholder': 'Select plank overscrolling behavior',\n 'settings overscroll centering label': 'Centering',\n 'settings overscroll none label': 'None',\n 'settings enable ide-style statusbar label': 'IDE-style statusbar',\n 'close current label': 'Close current plank',\n 'close others label': 'Close other planks',\n 'close all label': 'Close all planks',\n },\n },\n },\n];\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAc;;UAINC,aAAAA;cACFC,aAAaC,OAAOC,iBAAiB,GAAGC,WAAAA,cAAyB;AAChF,GAFiBJ,eAAAA,aAAAA,CAAAA,EAAAA;;;ACJjB,SAASK,qBAAqB;AAE9B,SAASC,OAAOC,cAAcC,aAAaC,cAAcC,cAAcC,UAAAA,SAAQC,aAAa;AAC5F,SAASC,gBAAgBC,yBAAyB;;;ACDlD,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,WAAAA,GAAc;QACb,eAAe;QACf,qBAAqB;QACrB,iCAAiC;QACjC,qCAAqC;QACrC,oCAAoC;QACpC,qCAAqC;QACrC,wBAAwB;QACxB,4BAA4B;QAC5B,gCACE;QACF,2BAA2B;QAC3B,6BAA6B;QAC7B,kCAAkC;QAClC,2CAA2C;QAC3C,yCAAyC;QACzC,4CAA4C;QAC5C,sCAAsC;QACtC,wBAAwB;QACxB,qBAAqB;QACrB,mBAAmB;QACnB,oBAAoB;QACpB,0BAA0B;QAC1B,gCAAgC;QAChC,sBAAsB;QACtB,uBAAuB;QACvB,2BAA2B;QAC3B,mBAAmB;QACnB,sBAAsB;QACtB,gBAAgB;QAChB,mBAAmB;QACnB,iBAAiB;QACjB,yBAAyB;QACzB,uBAAuB;QACvB,yBAAyB;QACzB,yBAAyB;QACzB,eAAe;QACf,gBAAgB;QAChB,6BAA6B;QAC7B,iCAAiC;QACjC,uCAAuC;QACvC,kCAAkC;QAClC,6CAA6C;QAC7C,uBAAuB;QACvB,sBAAsB;QACtB,mBAAmB;MACrB;IACF;EACF;;;;AD/BFC,cAAc,KAAA;AAEP,IAAMC,aAAa,MACxBC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOC;IACpBC,UAAUC;EACZ,CAAA;EACAN,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOI;IACpBF,UAAUG;EACZ,CAAA;EACAR,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaO,MAAMN,QAAOO,SAASP,QAAOQ,aAAa;IACvDC,gBAAgB;MAACT,QAAOU;MAAaC,WAAWC;;IAChDV,UAAUW;EACZ,CAAA;EACAhB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOc;IACpBZ,UAAU,MAAMa,YAAYC,aAAaC,cAAc;SAAIC;SAAiBC;KAAkB;EAChG,CAAA;EACAtB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOO;IACpBL,UAAUkB;EACZ,CAAA;EACAvB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOqB;IACpBnB,UAAUoB;EACZ,CAAA;EACAzB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOuB;IACpBrB,UAAUsB;EACZ,CAAA;EACA3B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOQ;IACpBN,UAAUuB;EACZ,CAAA;EACA5B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAa2B,MAAM1B,QAAO2B,iBAAiBhB,WAAWC,UAAU;IAChEV,UAAU0B;EACZ,CAAA;CACD;",
|
|
6
|
+
"names": ["Events", "DeckEvents", "StateReady", "Events", "createStateEvent", "DECK_PLUGIN", "setAutoFreeze", "allOf", "Capabilities", "contributes", "defineModule", "definePlugin", "Events", "oneOf", "translations", "stackTranslations", "DECK_PLUGIN", "setAutoFreeze", "DeckPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SettingsReady", "activate", "CheckAppScheme", "SetupSettings", "DeckSettings", "oneOf", "Startup", "SetupAppGraph", "activatesAfter", "LayoutReady", "DeckEvents", "StateReady", "DeckState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "stackTranslations", "ReactRoot", "SetupSurfaces", "ReactSurface", "SetupIntents", "LayoutIntentResolver", "AppGraphBuilder", "allOf", "DispatcherReady", "UrlHandler"]
|
|
7
7
|
}
|