@dxos/plugin-deck 0.8.4-main.c1de068 → 0.8.4-main.dedc0f3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/lib/browser/{app-graph-builder-JTFSDT2I.mjs → app-graph-builder-DVEKLXB4.mjs} +3 -3
  2. package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-57U62A3A.mjs → check-app-scheme-3BQJXWEY.mjs} +1 -1
  4. package/dist/lib/browser/{check-app-scheme-57U62A3A.mjs.map → check-app-scheme-3BQJXWEY.mjs.map} +2 -2
  5. package/dist/lib/browser/{chunk-JFTXENFN.mjs → chunk-NRCPV6AV.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-JFTXENFN.mjs.map → chunk-NRCPV6AV.mjs.map} +2 -2
  7. package/dist/lib/browser/{chunk-D7KTFCUV.mjs → chunk-NU7H23SK.mjs} +198 -194
  8. package/dist/lib/browser/chunk-NU7H23SK.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-QDZO4AJ4.mjs → chunk-WILMPGDV.mjs} +11 -11
  10. package/dist/lib/browser/{chunk-QDZO4AJ4.mjs.map → chunk-WILMPGDV.mjs.map} +3 -3
  11. package/dist/lib/browser/index.mjs +14 -7
  12. package/dist/lib/browser/index.mjs.map +3 -3
  13. package/dist/lib/browser/{intent-resolver-P2OBK5HK.mjs → intent-resolver-2SUIIV6N.mjs} +5 -5
  14. package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs.map +7 -0
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/{react-root-PO64J7ML.mjs → react-root-7PRVDLF7.mjs} +4 -4
  17. package/dist/lib/browser/{react-root-PO64J7ML.mjs.map → react-root-7PRVDLF7.mjs.map} +2 -2
  18. package/dist/lib/browser/{react-surface-E45YOVF5.mjs → react-surface-FNY2YC2F.mjs} +4 -4
  19. package/dist/lib/browser/{react-surface-E45YOVF5.mjs.map → react-surface-FNY2YC2F.mjs.map} +1 -1
  20. package/dist/lib/browser/{settings-6AJZPZPM.mjs → settings-LUPQPZ27.mjs} +1 -1
  21. package/dist/lib/browser/{settings-6AJZPZPM.mjs.map → settings-LUPQPZ27.mjs.map} +1 -1
  22. package/dist/lib/browser/{state-MVDYX77Y.mjs → state-CRXR7X63.mjs} +2 -2
  23. package/dist/lib/browser/toolkit-XGJSBY67.mjs +61 -0
  24. package/dist/lib/browser/toolkit-XGJSBY67.mjs.map +7 -0
  25. package/dist/lib/browser/{url-handler-7L7M6IKH.mjs → url-handler-LROZYQ26.mjs} +2 -2
  26. package/dist/lib/browser/url-handler-LROZYQ26.mjs.map +7 -0
  27. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  28. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  29. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  30. package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
  31. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/index.d.ts +9 -9
  33. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  35. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  37. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  38. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  39. package/dist/types/src/capabilities/settings.d.ts +1 -1
  40. package/dist/types/src/capabilities/state.d.ts +2 -2
  41. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  42. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  43. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  44. package/dist/types/src/capabilities/tools.d.ts +1 -1
  45. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  46. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  47. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  48. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +1 -1
  49. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  50. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  51. package/dist/types/src/components/Plank/Plank.d.ts +1 -1
  52. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  53. package/dist/types/src/components/Plank/Plank.stories.d.ts +84 -4
  54. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  56. package/dist/types/src/components/Plank/PlankHeading.d.ts +1 -1
  57. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  58. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  59. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  60. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  61. package/dist/types/src/translations.d.ts +1 -0
  62. package/dist/types/src/translations.d.ts.map +1 -1
  63. package/dist/types/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +37 -33
  65. package/src/DeckPlugin.ts +11 -5
  66. package/src/capabilities/app-graph-builder.ts +4 -3
  67. package/src/capabilities/check-app-scheme.ts +1 -1
  68. package/src/capabilities/index.ts +2 -1
  69. package/src/capabilities/intent-resolver.ts +10 -9
  70. package/src/capabilities/react-root.tsx +2 -1
  71. package/src/capabilities/react-surface.tsx +1 -1
  72. package/src/capabilities/settings.ts +1 -1
  73. package/src/capabilities/state.ts +3 -2
  74. package/src/capabilities/toolkit.ts +55 -0
  75. package/src/capabilities/tools.ts +9 -6
  76. package/src/capabilities/url-handler.ts +3 -2
  77. package/src/components/DeckLayout/Banner.tsx +1 -1
  78. package/src/components/DeckLayout/ContentEmpty.tsx +1 -1
  79. package/src/components/DeckLayout/DeckLayout.tsx +11 -10
  80. package/src/components/DeckSettings/DeckSettings.tsx +72 -63
  81. package/src/components/Plank/Plank.stories.tsx +7 -6
  82. package/src/components/Plank/Plank.tsx +7 -6
  83. package/src/components/Plank/PlankError.tsx +2 -1
  84. package/src/components/Plank/PlankHeading.tsx +5 -4
  85. package/src/components/Sidebar/ComplementarySidebar.tsx +4 -3
  86. package/src/components/Sidebar/SidebarButton.tsx +2 -2
  87. package/src/hooks/useDeckCompanions.ts +2 -2
  88. package/src/hooks/useNodeActionExpander.ts +1 -1
  89. package/src/translations.ts +1 -0
  90. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-D7KTFCUV.mjs.map +0 -7
  92. package/dist/lib/browser/intent-resolver-P2OBK5HK.mjs.map +0 -7
  93. package/dist/lib/browser/tools-TKQDPCHJ.mjs +0 -88
  94. package/dist/lib/browser/tools-TKQDPCHJ.mjs.map +0 -7
  95. package/dist/lib/browser/url-handler-7L7M6IKH.mjs.map +0 -7
  96. /package/dist/lib/browser/{state-MVDYX77Y.mjs.map → state-CRXR7X63.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DeckLayout/Banner.tsx", "../../../src/components/Sidebar/ComplementarySidebar.tsx", "../../../src/components/Plank/Plank.tsx", "../../../src/components/Plank/PlankError.tsx", "../../../src/components/Plank/PlankHeading.tsx", "../../../src/components/fragments.ts", "../../../src/components/Plank/PlankControls.tsx", "../../../src/components/Plank/PlankLoading.tsx", "../../../src/components/Sidebar/SidebarButton.tsx", "../../../src/components/Sidebar/Sidebar.tsx", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/Dialog.tsx", "../../../src/components/DeckLayout/Popover.tsx", "../../../src/components/DeckLayout/StatusBar.tsx", "../../../src/components/DeckLayout/Toast.tsx", "../../../src/components/DeckLayout/Topbar.tsx", "../../../src/components/DeckSettings/DeckSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <header\n className={mx(\n 'flex items-stretch relative plb-1 pis-1 pie-2',\n variant === 'topbar' &&\n 'fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator',\n classNames,\n )}\n >\n {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}\n <span className='self-center grow mis-1'>{t('current app name', { ns: 'appkit' })}</span>\n {variant === 'topbar' && (\n <div role='none' className='absolute inset-0 pointer-events-none'>\n <div role='none' className='grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto'>\n <Surface role='search-input' limit={1} />\n </div>\n </div>\n )}\n <span role='none' className='grow' />\n <Surface role='header-end' limit={1} />\n <Surface role='notch-start' limit={1} />\n </header>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n Fragment,\n type MouseEvent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { LayoutAction, Surface, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { IconButton, type Label, Main, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { type DeckCompanion, getCompanionId, useBreakpoints, useDeckCompanions, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { PlankContentError, PlankLoading } from '../Plank';\n\nimport { ToggleComplementarySidebarButton } from './SidebarButton';\n\nconst label = ['complementary sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nexport type ComplementarySidebarProps = {\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const layoutMode = getMode(layout.deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const companions = useDeckCompanions();\n const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);\n const activeId = activeCompanion && getCompanionId(activeCompanion.id);\n const [internalValue, setInternalValue] = useState(activeId);\n\n useEffect(() => {\n setInternalValue(activeId);\n }, [activeId]);\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const nextValue = event.currentTarget.getAttribute('data-value') as string;\n if (nextValue === activeId) {\n layout.complementarySidebarState = layout.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';\n } else {\n setInternalValue(nextValue);\n layout.complementarySidebarState = 'expanded';\n void dispatch(createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: nextValue }));\n }\n },\n [layout, activeId, dispatch],\n );\n\n const data = useMemo(\n () =>\n activeCompanion && {\n id: activeCompanion.id,\n subject: activeCompanion.data,\n },\n [activeCompanion?.id, activeCompanion?.data],\n );\n\n useEffect(() => {\n if (!activeId) {\n void dispatch(\n createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),\n );\n }\n }, [activeId, dispatch]);\n\n return (\n <Main.ComplementarySidebar\n label={label}\n classNames={[\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>\n <div\n role='none'\n className='absolute z-[1] inset-block-0 inline-end-0 !is-[--r0-size] pbs-[env(safe-area-inset-top)] pbe-[env(safe-area-inset-bottom)] border-is border-subduedSeparator grid grid-cols-1 grid-rows-[1fr_min-content] bg-baseSurface contain-layout app-drag'\n >\n <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>\n {companions.map((companion) => (\n <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>\n <IconButton\n label={toLocalizedString(companion.properties.label, t)}\n icon={companion.properties.icon}\n size={5}\n iconOnly\n tooltipSide='left'\n data-value={getCompanionId(companion.id)}\n variant={\n activeId === getCompanionId(companion.id)\n ? layout.complementarySidebarState === 'expanded'\n ? 'primary'\n : 'default'\n : 'ghost'\n }\n onClick={handleTabClick}\n />\n </Tabs.Tab>\n ))}\n </Tabs.Tablist>\n {!hoistStatusbar && (\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto'>\n <Surface role='status-bar--r0-footer' limit={1} />\n </div>\n )}\n <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>\n <ToggleComplementarySidebarButton />\n </div>\n </div>\n {activeId &&\n companions.map((companion) => (\n <Tabs.Tabpanel\n key={getCompanionId(companion.id)}\n value={getCompanionId(companion.id)}\n classNames='absolute data-[state=\"inactive\"]:-z-[1] inset-block-0 inline-start-0 is-[calc(100%-var(--r0-size))] lg:is-[--r1-size] grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content] pbs-[env(safe-area-inset-top)]'\n {...(layout.complementarySidebarState !== 'expanded' && { inert: 'true' })}\n >\n <ComplementarySidebarPanel\n companion={companion}\n activeId={activeId}\n data={data}\n hoistStatusbar={hoistStatusbar}\n />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Root>\n </Main.ComplementarySidebar>\n );\n};\n\ntype ComplementarySidebarPanelProps = {\n companion: DeckCompanion;\n activeId: string;\n data?: {\n id: string;\n subject: any;\n };\n hoistStatusbar: boolean;\n};\n\nconst ScrollArea = ({ children }: PropsWithChildren) => {\n return <div className='flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin'>{children}</div>;\n};\n\nconst ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n if (getCompanionId(companion.id) !== activeId && !data) {\n return null;\n }\n\n const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;\n\n return (\n <>\n <h2 className='flex items-center pli-2 border-subduedSeparator border-be font-medium'>\n {toLocalizedString(companion.properties.label, t)}\n </h2>\n <Wrapper>\n <Surface\n role={`deck-companion--${getCompanionId(companion.id)}`}\n data={data}\n fallback={PlankContentError}\n placeholder={<PlankLoading />}\n />\n </Wrapper>\n {!hoistStatusbar && (\n <div\n role='contentinfo'\n className='flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]'\n >\n <Surface role='status-bar--r1-footer' limit={1} />\n </div>\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n type KeyboardEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport {\n LayoutAction,\n Surface,\n createIntent,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type Node, useNode } from '@dxos/plugin-graph';\nimport { ATTENDABLE_PATH_SEPARATOR, useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/react-ui-theme';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useCompanions, useMainSize } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DeckAction, type DeckSettingsProps, type LayoutMode, type ResolvedPart } from '../../types';\n\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\n\nconst UNKNOWN_ID = 'unknown_id';\n\nexport type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path' | 'order' | 'active' | 'settings'> & {\n id?: string;\n companionId?: string;\n};\n\n// TODO(burdon): Factor out conditional rendering.\n// Remove this wrapper component and render the entire set of planks in the deck with conditional visibility\n// to obviate mounting and unmounting when switching between solo and companion mode?\n// NOTE(thure, in reply): Whether any surface should be rendered and hidden is a performance matter — remember that\n// article surfaces contain full experiences, so being able to unmount them will yield relatively large performance\n// benefits. I think where we anticipate users will definitely want to quickly switch between showing and hiding entire\n// articles, over the (again probably large) performance benefit that unmounting them would confer, we can mount and\n// hide them, but I think that scenario in its most unambiguous form is probably rare. You could extrapolate\n// the scenario to include all “potential” planks such as companions, which we could keep mounted and hidden, but I\n// don’t think the resulting performance would be acceptable. I think the real issue is “perceived performance” which\n// has mitigations that are in between mounting and un-mounting since both of those have tradeoffs; we may need one or more\n// “partially-mounted” experiences, like loading skeletons at the simple end, or screenshots of “sleeping” planks at\n// the advanced end.\n\n/**\n * A Plank is the main container for surfaces within a Deck.\n * It may be paired with a companion plank that enables the user to select one of multiple companion surfaces.\n */\nexport const Plank = memo(({ id = UNKNOWN_ID, companionId, ...props }: PlankProps) => {\n const { graph } = useAppGraph();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const currentCompanion = companions.find(({ id }) => id === companionId);\n const hasCompanion = !!(companionId && currentCompanion);\n\n return (\n <PlankContainer solo={props.part === 'solo'} companion={hasCompanion}>\n <PlankComponent\n id={id}\n node={node}\n companioned={hasCompanion ? 'primary' : undefined}\n companions={hasCompanion ? [] : companions}\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-primary' } : {})}\n />\n {hasCompanion && (\n <PlankComponent\n id={companionId}\n node={currentCompanion}\n primary={node}\n companions={companions}\n companioned='companion'\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-companion' } : { order: (props.order ?? 0) + 1 })}\n />\n )}\n </PlankContainer>\n );\n});\n\nconst PlankContainer = ({ children, solo, companion }: PropsWithChildren<{ solo: boolean; companion: boolean }>) => {\n const sizeAttrs = useMainSize();\n if (!solo) {\n return children;\n }\n\n // TODO(burdon): Make resizable.\n return (\n <div\n role='none'\n className={mx('absolute inset-0 grid', companion && 'grid-cols-[1fr_1fr]', railGridHorizontal, mainIntrinsicSize)}\n {...sizeAttrs}\n >\n {children}\n </div>\n );\n};\n\ntype PlankComponentProps = {\n layoutMode: LayoutMode;\n id: string;\n part: ResolvedPart;\n path?: string[];\n order?: number;\n active?: string[];\n // TODO(burdon): Change to role?\n companioned?: 'primary' | 'companion';\n node?: Node;\n primary?: Node;\n companions?: Node[];\n settings?: DeckSettingsProps;\n};\n\nconst PlankComponent = memo(\n ({\n layoutMode,\n id,\n part,\n path,\n order,\n active,\n companioned,\n node,\n primary,\n companions,\n settings,\n }: PlankComponentProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { deck, popoverAnchorId, scrollIntoView } = useCapability(DeckCapabilities.DeckState);\n const canResize = layoutMode === 'deck';\n\n const attentionAttrs = useAttentionAttributes(primary?.id ?? id);\n const index = active ? active.findIndex((entryId) => entryId === id) : 0;\n const length = active?.length ?? 1;\n const canIncrementStart = active && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = active && index !== undefined && index < length - 1 && length !== undefined;\n\n const rootElement = useRef<HTMLDivElement | null>(null);\n\n const { variant } = parseEntryId(id);\n const sizeKey = `${id.split('+')[0]}${variant ? `${ATTENDABLE_PATH_SEPARATOR}${variant}` : ''}`;\n const size = deck.plankSizing[sizeKey] as number | undefined;\n\n const handleSizeChange = useCallback(\n debounce((nextSize: number) => {\n return dispatch(createIntent(DeckAction.UpdatePlankSize, { id: sizeKey, size: nextSize }));\n }, 200),\n [dispatch, sizeKey],\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 === id) {\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, { part: 'current', subject: undefined }));\n }\n }, [id, scrollIntoView, layoutMode]);\n\n const isSolo = layoutMode.startsWith('solo') && part === 'solo';\n const isAttendable =\n (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'deck' && part === 'deck');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n subject: node.data,\n companionTo: primary?.data,\n variant,\n path,\n popoverAnchorId,\n },\n [node, node?.data, path, popoverAnchorId, primary?.data, variant],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const Root = part.startsWith('solo') ? 'article' : StackItem.Root;\n const className = mx(\n 'attention-surface relative dx-focus-ring-inset-over-all density-coarse',\n isSolo && mainIntrinsicSize,\n isSolo && railGridHorizontal,\n isSolo && 'absolute inset-0',\n part.startsWith('solo') && 'grid',\n part === 'deck' && (companioned === 'companion' ? '!border-separator border-ie' : '!border-separator border-li'),\n part.startsWith('solo-') && 'row-span-2 grid-rows-subgrid min-is-0',\n part === 'solo-companion' && '!border-separator border-is',\n );\n\n return (\n <Root\n ref={rootElement}\n data-testid='deck.plank'\n tabIndex={0}\n {...(part.startsWith('solo')\n ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id },\n size,\n onSizeChange: handleSizeChange,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attentionAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n <PlankHeading\n id={id}\n part={part.startsWith('solo-') ? 'solo' : part}\n node={node}\n layoutMode={layoutMode}\n deckEnabled={settings?.enableDeck}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n primaryId={primary?.id}\n companioned={companioned}\n companions={companions}\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 id={id} part={part} />\n )}\n\n {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type Node } from '@dxos/plugin-graph';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionMessage, mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nimport { PlankHeading, type PlankHeadingProps } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\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-y-auto p-8 attention-surface grid place-items-center'>\n <p role='alert' className={mx(descriptionMessage, 'break-all rounded-md p-4')}>\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n id,\n part,\n node,\n error,\n}: {\n id: string;\n part: PlankHeadingProps['part'];\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 <PlankHeading id={id} part={part} node={node} pending={!timedOut} />\n {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';\n\nimport { LayoutAction, Surface, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\nimport { hoverableControls, hoverableFocusedWithinControls } from '@dxos/react-ui-theme';\n\nimport { useBreakpoints } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DECK_PLUGIN } from '../../meta';\nimport { DeckAction, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';\nimport { soloInlinePadding } from '../fragments';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\n\nconst MAX_COMPANIONS = 5;\n\nexport type PlankHeadingProps = {\n id: string;\n part: ResolvedPart;\n layoutMode?: LayoutMode;\n node?: Node;\n deckEnabled?: boolean;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n primaryId?: string;\n pending?: boolean;\n companioned?: 'primary' | 'companion';\n companions?: Node[];\n actions?: StackItemSigilAction[];\n};\n\nexport const PlankHeading = memo(\n ({\n id,\n part,\n node,\n deckEnabled,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n primaryId,\n pending,\n companioned,\n companions,\n layoutMode,\n actions = [],\n }: PlankHeadingProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const breakpoint = useBreakpoints();\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\n const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n if (node) {\n void graph.expand(node.id);\n }\n });\n\n return () => cancelAnimationFrame(frame);\n }, [node]);\n\n const attendableId = primaryId ?? id;\n const capabilities = useMemo(\n () => ({\n deck: deckEnabled ?? true,\n solo: breakpoint !== 'mobile' && (part === 'solo' || part === 'deck'),\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n fullscreen: !isCompanionNode,\n companion: !isCompanionNode && companions && companions.length > 0,\n }),\n [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled],\n );\n\n const { variant } = parseEntryId(id);\n const sigilActions = useMemo(() => {\n if (!node) {\n return undefined;\n } else if (variant) {\n return [];\n } else {\n return [\n actions,\n graph\n .getActions(node.id)\n .filter((a) => ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition)),\n ].filter((a) => a.length > 0);\n }\n }, [actions, node, variant, graph]);\n\n const handleAction = useCallback(\n (action: StackItemSigilAction) => {\n typeof action.data === 'function' && void action.data?.({ parent: node, caller: DECK_PLUGIN });\n },\n [node],\n );\n\n const handlePlankAction = useCallback(\n (eventType: DeckAction.PartAdjustment) => {\n if (eventType.startsWith('solo')) {\n return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));\n } else if (eventType === 'close') {\n if (part === 'complementary') {\n return dispatch(\n createIntent(LayoutAction.UpdateComplementary, {\n part: 'complementary',\n options: { state: 'collapsed' },\n }),\n );\n } else {\n return dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [id], options: { state: false } }),\n );\n }\n } else {\n return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));\n }\n },\n [dispatch, id, part],\n );\n\n const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;\n const tabId = target?.dataset?.id;\n if (primaryId && tabId) {\n void dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: primaryId,\n companion: tabId,\n }),\n );\n }\n },\n [primaryId],\n );\n\n return (\n <StackItem.Heading\n classNames={[\n 'plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse',\n part === 'solo' ? soloInlinePadding : 'pli-1',\n ...(layoutMode === 'solo--fullscreen'\n ? [\n hoverableControls,\n hoverableFocusedWithinControls,\n '*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color] hover-hover:hover:bg-headerSurface focus-within:bg-headerSurface hover-hover:hover:border-subduedSeparator focus-within:border-subduedSeparator',\n ]\n : []),\n ]}\n data-plank-heading\n >\n {companions && isCompanionNode ? (\n /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */\n <div role='none' className='flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1'>\n {companions.map(({ id, properties: { icon, label } }) => (\n <IconButton\n key={id}\n data-id={id}\n icon={icon}\n iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}\n label={toLocalizedString(label, t)}\n size={5}\n variant={node?.id === id ? 'primary' : 'ghost'}\n onClick={handleTabClick}\n />\n ))}\n </div>\n ) : (\n <>\n <ActionRoot>\n {node && sigilActions ? (\n <StackItem.Sigil\n icon={icon}\n related={part === 'complementary'}\n attendableId={attendableId}\n triggerLabel={t('actions menu label')}\n actions={sigilActions}\n onAction={handleAction}\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={part === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n </>\n )}\n {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}\n {companioned === 'companion' ? (\n <PlankCompanionControls primary={primaryId} />\n ) : (\n <PlankControls\n capabilities={capabilities}\n layoutMode={layoutMode}\n close={part === 'complementary' ? 'minify-end' : true}\n onClick={handlePlankAction}\n />\n )}\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const soloInlinePadding =\n 'pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]';\n\nconst sidebarToggleStyles = 'bs-[--rail-item] is-[--rail-item] absolute block-end-2 z-[1] !bg-deckSurface lg:hidden';\n\nexport const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'inline-start-2');\n\nexport const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'inline-end-2');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { DeckAction, type LayoutMode } from '../../types';\n\nexport type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n deck?: boolean;\n solo?: boolean;\n fullscreen?: boolean;\n companion?: 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 layoutMode?: LayoutMode;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return <IconButton iconOnly label={label} icon={icon} size={5} variant='ghost' tooltipSide='bottom' {...props} />;\n};\n\nconst plankControlSpacing = 'pli-2';\n\ntype PlankComplimentControlsProps = {\n primary?: string;\n};\n\nexport const PlankCompanionControls = forwardRef<HTMLDivElement, PlankComplimentControlsProps>(\n ({ primary }, forwardedRef) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleCloseCompanion = useCallback(() => {\n invariant(primary);\n return dispatch(createIntent(DeckAction.ChangeCompanion, { primary, companion: null }));\n }, []);\n return (\n <div ref={forwardedRef} className='contents app-no-drag'>\n <PlankControl\n label={t('close companion label')}\n variant='ghost'\n icon='ph--x--regular'\n onClick={handleCloseCompanion}\n classNames={plankControlSpacing}\n />\n </div>\n );\n },\n);\n\n// TODO(wittjosiah): Duplicate of stack LayoutControls?\n// Translations were to be duplicated between packages.\n// NOTE(thure): Pinning & unpinning are disabled indefinitely.\nexport const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(\n (\n { children, classNames, variant = 'default', capabilities, layoutMode, pin, close = false, onClick, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const buttonClassNames =\n variant === 'hide-disabled' ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;\n\n const layoutIsAnySolo = !!layoutMode?.startsWith('solo');\n\n return (\n <ButtonGroup {...props} classNames={['app-no-drag !opacity-100', classNames]} ref={forwardedRef}>\n {capabilities.deck ? (\n <>\n {capabilities.solo && (\n <>\n {layoutMode === 'solo' && (\n <PlankControl\n label={t('show fullscreen plank label')}\n classNames={buttonClassNames}\n icon='ph--corners-out--regular'\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )}\n <PlankControl\n label={t(\n layoutMode === 'solo--fullscreen'\n ? 'exit fullscreen label'\n : layoutIsAnySolo\n ? 'show deck plank label'\n : 'show solo plank label',\n )}\n classNames={buttonClassNames}\n icon={\n layoutMode === 'solo--fullscreen'\n ? 'ph--corners-in--regular'\n : layoutIsAnySolo\n ? 'ph--arrows-in-line-horizontal--regular'\n : 'ph--arrows-out-line-horizontal--regular'\n }\n onClick={() => onClick?.(layoutMode === 'solo--fullscreen' ? 'solo--fullscreen' : 'solo')}\n />\n </>\n )}\n\n {!layoutIsAnySolo && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!capabilities.incrementStart}\n classNames={buttonClassNames}\n icon='ph--caret-left--regular'\n onClick={() => onClick?.('increment-start')}\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!capabilities.incrementEnd}\n classNames={buttonClassNames}\n icon='ph--caret-right--regular'\n onClick={() => onClick?.('increment-end')}\n />\n </>\n )}\n </>\n ) : (\n capabilities.fullscreen && (\n <PlankControl\n label={t(layoutMode === 'solo--fullscreen' ? 'exit fullscreen label' : 'show fullscreen plank label')}\n classNames={buttonClassNames}\n icon={layoutMode === 'solo--fullscreen' ? 'ph--corners-in--regular' : 'ph--corners-out--regular'}\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )\n )}\n\n {close && !layoutIsAnySolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\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 onClick={() => onClick?.('close')}\n />\n )}\n\n {capabilities.companion && (\n <PlankControl\n label={t('open companion label')}\n classNames={buttonClassNames}\n data-testid='plankHeading.companion'\n icon='ph--square-split-horizontal--regular'\n onClick={() => onClick?.('companion')}\n />\n )}\n {children}\n </ButtonGroup>\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 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { getCompanionId, useDeckCompanions } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const ToggleSidebarButton = ({\n classNames,\n variant = 'ghost',\n}: ThemedClassName<Pick<IconButtonProps, 'variant'>>) => {\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n variant={variant}\n iconOnly\n icon='ph--sidebar--regular'\n size={4}\n label={t('open navigation sidebar label')}\n onClick={() =>\n (layoutContext.sidebarState = layoutContext.sidebarState === 'expanded' ? 'collapsed' : 'expanded')\n }\n classNames={classNames}\n />\n );\n};\n\nexport const CloseSidebarButton = () => {\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n variant='ghost'\n iconOnly\n icon='ph--caret-line-left--regular'\n size={4}\n label={t('close navigation sidebar label')}\n onClick={() => (layoutContext.sidebarState = 'collapsed')}\n classNames='rounded-none pli-1 dx-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]'\n />\n );\n};\n\nexport const ToggleComplementarySidebarButton = ({\n inR0,\n classNames,\n current,\n}: ThemedClassName<{ inR0?: boolean; current?: string }>) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n\n const companions = useDeckCompanions();\n const handleClick = useCallback(async () => {\n layoutContext.complementarySidebarState =\n layoutContext.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';\n const firstCompanion = companions[0];\n if (layoutContext.complementarySidebarState === 'expanded' && !current && firstCompanion) {\n await dispatch(\n createIntent(LayoutAction.UpdateComplementary, {\n part: 'complementary',\n subject: getCompanionId(firstCompanion.id),\n }),\n );\n }\n }, [layoutContext, current, companions, dispatch]);\n\n return (\n <IconButton\n iconOnly\n onClick={handleClick}\n variant='ghost'\n label={t('open complementary sidebar label')}\n classNames={['[&>svg]:-scale-x-100', classNames]}\n icon='ph--sidebar-simple--regular'\n size={inR0 ? 5 : 4}\n tooltipSide={inR0 ? 'left' : undefined}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { type Label, Main } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\n\nconst label = ['sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nexport const Sidebar = () => {\n const { popoverAnchorId, activeDeck: current, deck } = useCapability(DeckCapabilities.DeckState);\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const navigationData = useMemo(\n () => ({ popoverAnchorId, topbar, hoistStatusbar, current }),\n [popoverAnchorId, topbar, hoistStatusbar, current],\n );\n\n return (\n <Main.NavigationSidebar\n label={label}\n classNames={[\n 'grid',\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Surface role='navigation' data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { untracked } from '@preact/signals-core';\nimport React, { Fragment, type UIEvent, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport {\n Capabilities,\n LayoutAction,\n createIntent,\n useCapability,\n useIntentDispatcher,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Main, type MainProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';\nimport { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';\nimport { mainPaddingTransitions } from '@dxos/react-ui-theme';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type DeckSettingsProps, getMode } from '../../types';\nimport { calculateOverscroll, layoutAppliesTopbar } from '../../util';\nimport { fixedComplementarySidebarToggleStyles, fixedSidebarToggleStyles } from '../fragments';\nimport { Plank } from '../Plank';\nimport { ComplementarySidebar, Sidebar, ToggleComplementarySidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nimport { ActiveNode } from './ActiveNode';\nimport { ContentEmpty } from './ContentEmpty';\nimport { Dialog } from './Dialog';\nimport { PopoverContent, PopoverRoot } from './Popover';\nimport { StatusBar } from './StatusBar';\nimport { Toast } from './Toast';\nimport { Topbar } from './Topbar';\n\nexport type DeckLayoutProps = {\n onDismissToast: (id: string) => void;\n};\n\nconst PlankSeparator = ({ order }: { order: number }) =>\n order > 0 ? <span role='separator' className='row-span-2 bg-deckSurface is-4' style={{ gridColumn: order }} /> : null;\n\nexport const DeckLayout = ({ onDismissToast }: DeckLayoutProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const settings = useCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(DECK_PLUGIN)!.value;\n const context = useCapability(DeckCapabilities.MutableDeckState);\n const { sidebarState, complementarySidebarState, complementarySidebarPanel, deck, toasts } = context;\n const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n const pluginManager = usePluginManager();\n\n const scrollLeftRef = useRef<number | null>();\n const deckRef = useRef<HTMLDivElement>(null);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attended = untracked(() => {\n const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);\n return attention.current;\n });\n const firstId = solo ?? active[0];\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 // Not using `breakpoint` to avoid firing when breakpoint changes between tablet and desktop.\n // `ssr: false` to avoid using fallback values and flashing into solo mode on startup.\n const [isNotMobile] = useMediaQuery('md', { ssr: false });\n const shouldRevert = useRef(false);\n useEffect(() => {\n if (!isNotMobile && getMode(deck) === 'deck') {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attended = untracked(() => {\n const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);\n return attention.current;\n });\n\n shouldRevert.current = true;\n void dispatch(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', subject: attended[0], options: { mode: 'solo' } }),\n );\n } else if (isNotMobile && getMode(deck) === 'solo' && shouldRevert.current) {\n void dispatch(createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { revert: true } }));\n }\n }, [isNotMobile, deck, dispatch]);\n\n // When deck is disabled in settings, set to solo mode if the current layout mode is deck.\n // TODO(thure): Applying this as an effect should be avoided over emitting the intent only when the setting changes.\n useEffect(() => {\n if (!settings.enableDeck && layoutMode === 'deck') {\n void dispatch(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', subject: active[0], options: { mode: 'solo' } }),\n );\n }\n }, [settings.enableDeck, dispatch, active, layoutMode]);\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 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 (!solo && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [solo],\n );\n\n const isEmpty = !solo && active.length === 0;\n\n const padding = useMemo(() => {\n if (!solo && settings.overscroll === 'centering') {\n return calculateOverscroll(active.length);\n }\n return {};\n }, [solo, settings.overscroll, deck]);\n\n const mainPosition = useMemo(\n () => [\n 'grid !block-start-[env(safe-area-inset-top)]',\n topbar && '!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'lg:block-end-[--statusbar-size]',\n ],\n [topbar, hoistStatusbar],\n );\n\n const { order, itemsCount }: { order: Record<string, number>; itemsCount: number } = useMemo(() => {\n return active.reduce(\n (acc: { order: Record<string, number>; itemsCount: number }, entryId) => {\n acc.order[entryId] = acc.itemsCount + 1;\n acc.itemsCount += activeCompanions?.[entryId] ? 3 : 2;\n return acc;\n },\n { order: {}, itemsCount: 0 },\n );\n }, [active, activeCompanions]);\n\n return (\n <PopoverRoot>\n <ActiveNode />\n\n <Main.Root\n navigationSidebarState={fullscreen ? 'closed' : context.sidebarState}\n onNavigationSidebarStateChange={(next) => (context.sidebarState = next)}\n complementarySidebarState={fullscreen ? 'closed' : context.complementarySidebarState}\n onComplementarySidebarStateChange={(next) => (context.complementarySidebarState = next)}\n >\n {/* Left sidebar. */}\n <Sidebar />\n\n {/* Right sidebar. */}\n <ComplementarySidebar current={complementarySidebarPanel} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content bounce handlesFocus classNames={mainPosition}>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n handlesFocus\n classNames={mainPosition}\n style={\n {\n '--dx-main-sidebarWidth':\n sidebarState === 'expanded'\n ? 'var(--nav-sidebar-size)'\n : sidebarState === 'collapsed'\n ? 'var(--l0-size)'\n : '0',\n '--dx-main-complementaryWidth':\n complementarySidebarState === 'expanded'\n ? 'var(--complementary-sidebar-size)'\n : complementarySidebarState === 'collapsed'\n ? 'var(--rail-size)'\n : '0',\n '--dx-main-contentFirstWidth': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-contentLastWidth': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainProps['style']\n }\n >\n <div\n role='none'\n className={!solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}\n {...(solo && { inert: '' })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <Stack\n ref={deckRef}\n orientation='horizontal'\n size='contain'\n classNames={['absolute inset-block-0 -inset-inline-px', mainPaddingTransitions]}\n itemsCount={itemsCount - 1}\n style={padding}\n onScroll={handleScroll}\n >\n {active.map((entryId) => (\n <Fragment key={entryId}>\n <PlankSeparator order={order[entryId] - 1} />\n <Plank\n id={entryId}\n companionId={activeCompanions?.[entryId]}\n part='deck'\n order={order[entryId]}\n active={active}\n layoutMode={layoutMode}\n settings={settings}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n <div\n role='none'\n className={solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}\n {...(!solo && { inert: '' })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <Plank\n id={solo}\n companionId={solo ? activeCompanions?.[solo] : undefined}\n part='solo'\n layoutMode={layoutMode}\n settings={settings}\n />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Topbar. */}\n {topbar && <Topbar />}\n\n {/* Status bar. */}\n {hoistStatusbar && <StatusBar showHints={settings.showHints} />}\n </Main.Root>\n\n {/* Global popovers. */}\n <PopoverContent />\n\n {/* Global dialog. */}\n <Dialog />\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 </PopoverRoot>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useAppGraph } from '@dxos/app-framework';\nimport { useNode } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { 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 } = useAppGraph();\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 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints } from '../../hooks';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { fixedSidebarToggleStyles } from '../fragments';\nimport { ToggleSidebarButton } from '../Sidebar';\n\nexport const ContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const { deck } = useCapability(DeckCapabilities.MutableDeckState);\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n return (\n <div\n role='none'\n className='grid place-items-center p-8 relative bg-deckSurface'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { PlankContentError } from '../Plank';\n\nexport const Dialog = () => {\n const context = useCapability(DeckCapabilities.MutableDeckState);\n const { dialogOpen, dialogType, dialogBlockAlign, dialogOverlayClasses, dialogOverlayStyle, dialogContent } = context;\n const Root = dialogType === 'alert' ? AlertDialog.Root : NaturalDialog.Root;\n const Overlay = dialogType === 'alert' ? AlertDialog.Overlay : NaturalDialog.Overlay;\n\n // TODO(thure): End block alignment affecting `modal` and whether the surface renders in an overlay is tailored to the needs of the ambient chat dialog. As the feature matures, consider separating concerns.\n return (\n <Root\n modal={dialogBlockAlign !== 'end'}\n open={dialogOpen}\n onOpenChange={(nextOpen) => (context.dialogOpen = nextOpen)}\n >\n {dialogBlockAlign === 'end' ? (\n // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} placeholder={<div />} />\n ) : (\n <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} />\n </Overlay>\n )}\n </Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { Popover, type PopoverContentInteractOutsideEvent } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\n\nexport type DeckPopoverRootProps = PropsWithChildren<{}>;\n\nconst DEBOUNCE_DELAY = 40;\n\ntype DeckPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [DeckPopoverProvider, useDeckPopoverContext] = createContext<DeckPopoverContextValue>('DeckPopover');\n\nexport const PopoverRoot = ({ children }: DeckPopoverRootProps) => {\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const virtualRef = useRef<HTMLButtonElement | null>(null);\n const [virtualIter, setVirtualIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // TODO(thure): This is a workaround for the race condition between displaying a Popover and either rendering\n // the anchor further down the tree or measuring the virtual trigger’s client rect.\n useEffect(() => {\n setOpen(false);\n if (layout.popoverOpen) {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (layout.popoverAnchor && virtualRef.current !== layout.popoverAnchor) {\n virtualRef.current = layout.popoverAnchor ?? null;\n setVirtualIter((iter) => iter + 1);\n }\n debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);\n }\n }, [layout.popoverOpen, layout.popoverAnchorId, layout.popoverAnchor, layout.popoverContent]);\n\n return (\n <DeckPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={false} open={open}>\n {layout.popoverAnchor && <Popover.VirtualTrigger key={virtualIter} virtualRef={virtualRef} />}\n {children}\n </Popover.Root>\n </DeckPopoverProvider>\n );\n};\n\nexport const PopoverContent = () => {\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const { setOpen } = useDeckPopoverContext('PopoverContent');\n\n const handleClose = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n setOpen(false);\n layout.popoverOpen = false;\n layout.popoverAnchor = undefined;\n layout.popoverAnchorId = undefined;\n layout.popoverSide = undefined;\n }\n },\n [setOpen],\n );\n\n const collisionBoundaries: HTMLElement[] = useMemo(() => {\n const closest = layout.popoverAnchor?.closest('[data-popover-collision-boundary]') as\n | HTMLElement\n | null\n | undefined;\n return closest ? [closest] : [];\n }, [layout.popoverAnchor]);\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={layout.popoverSide}\n onInteractOutside={handleClose}\n onEscapeKeyDown={handleClose}\n collisionBoundary={collisionBoundaries}\n sticky='always'\n hideWhenDetached\n >\n <Popover.Viewport>\n <Surface role='card--popover' data={layout.popoverContent} limit={1} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useLandmarkMover } from '@dxos/react-ui';\n\nexport const StatusBar = ({ showHints }: { showHints?: boolean }) => {\n const mover = useLandmarkMover(undefined, '3');\n return (\n <div\n role='contentinfo'\n className='fixed block-end-0 inset-inline-0 bs-[--statusbar-size] border-bs border-separator z-[2] flex text-description'\n {...mover}\n >\n {showHints && <Surface role='hints' limit={1} />}\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 LayoutAction } from '@dxos/app-framework';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n type ToastRootProps,\n toLocalizedString,\n useTranslation,\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}: LayoutAction.Toast & 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 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Banner } from './Banner';\n\nexport const Topbar = () => {\n return <Banner variant='topbar' />;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport {\n type DeckSettingsProps,\n type NewPlankPositioning,\n NewPlankPositions,\n type Overscroll,\n OverscrollOptions,\n} from '../../types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport const DeckSettings = ({ settings }: { settings: DeckSettingsProps }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <ControlPage>\n <ControlSection title={t('settings title', { ns: DECK_PLUGIN })}>\n <ControlGroup>\n <ControlItemInput title={t('settings enable deck label')}>\n <Input.Switch\n checked={settings.enableDeck}\n onCheckedChange={(checked) => (settings.enableDeck = checked)}\n />\n </ControlItemInput>\n <ControlItemInput title={t('select new plank positioning label')}>\n <Select.Root\n disabled={!settings.enableDeck}\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.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n <ControlItemInput title={t('settings overscroll label')}>\n <Select.Root\n disabled={!settings.enableDeck}\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.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n <ControlItemInput title={t('settings enable statusbar label')}>\n <Input.Switch\n checked={settings.enableStatusbar}\n onCheckedChange={(checked) => (settings.enableStatusbar = checked)}\n />\n </ControlItemInput>\n <ControlItemInput title={t('settings show hints label')}>\n <Input.Switch checked={settings.showHints} onCheckedChange={(checked) => (settings.showHints = checked)} />\n </ControlItemInput>\n {!isSocket && (\n <ControlItemInput title={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => (settings.enableNativeRedirect = checked)}\n />\n </ControlItemInput>\n )}\n </ControlGroup>\n </ControlSection>\n </ControlPage>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "Surface", "useTranslation", "mx", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useState", "LayoutAction", "Surface", "createIntent", "useCapability", "useIntentDispatcher", "IconButton", "Main", "toLocalizedString", "useTranslation", "Tabs", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useCapability", "useIntentDispatcher", "debounce", "useNode", "ATTENDABLE_PATH_SEPARATOR", "useAttentionAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "React", "useEffect", "useState", "useTranslation", "descriptionMessage", "mx", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useIntentDispatcher", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "hoverableControls", "hoverableFocusedWithinControls", "mx", "soloInlinePadding", "sidebarToggleStyles", "fixedSidebarToggleStyles", "mx", "fixedComplementarySidebarToggleStyles", "React", "forwardRef", "useCallback", "createIntent", "useIntentDispatcher", "invariant", "ButtonGroup", "IconButton", "useTranslation", "PlankControl", "icon", "label", "props", "IconButton", "iconOnly", "size", "variant", "tooltipSide", "plankControlSpacing", "PlankCompanionControls", "forwardRef", "primary", "forwardedRef", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleCloseCompanion", "useCallback", "invariant", "createIntent", "DeckAction", "ChangeCompanion", "companion", "div", "ref", "className", "onClick", "classNames", "PlankControls", "children", "capabilities", "layoutMode", "pin", "close", "buttonClassNames", "layoutIsAnySolo", "startsWith", "ButtonGroup", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "fullscreen", "data-testid", "MAX_COMPANIONS", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "layoutMode", "actions", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "breakpoint", "useBreakpoints", "icon", "properties", "label", "toLocalizedString", "ns", "isCompanionNode", "type", "PLANK_COMPANION_TYPE", "useEffect", "frame", "requestAnimationFrame", "expand", "cancelAnimationFrame", "attendableId", "capabilities", "useMemo", "deck", "solo", "incrementStart", "incrementEnd", "fullscreen", "companion", "length", "variant", "parseEntryId", "sigilActions", "undefined", "getActions", "filter", "a", "includes", "disposition", "handleAction", "useCallback", "action", "data", "parent", "caller", "handlePlankAction", "eventType", "startsWith", "createIntent", "DeckAction", "Adjust", "LayoutAction", "UpdateComplementary", "options", "state", "Close", "subject", "ActionRoot", "Popover", "Anchor", "Fragment", "handleTabClick", "event", "target", "closest", "tabId", "dataset", "ChangeCompanion", "primary", "React", "StackItem", "Heading", "classNames", "soloInlinePadding", "hoverableControls", "hoverableFocusedWithinControls", "data-plank-heading", "div", "role", "className", "map", "IconButton", "key", "data-id", "iconOnly", "size", "onClick", "Sigil", "related", "triggerLabel", "onAction", "Surface", "SigilButton", "span", "Icon", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankCompanionControls", "PlankControls", "close", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "DECK_PLUGIN", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionMessage", "PlankError", "id", "part", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "PlankHeading", "pending", "PlankLoading", "UNKNOWN_ID", "Plank", "memo", "id", "companionId", "props", "graph", "useAppGraph", "node", "useNode", "companions", "useCompanions", "currentCompanion", "find", "hasCompanion", "React", "PlankContainer", "solo", "part", "companion", "PlankComponent", "companioned", "undefined", "primary", "order", "children", "sizeAttrs", "useMainSize", "div", "role", "className", "mx", "railGridHorizontal", "mainIntrinsicSize", "layoutMode", "path", "active", "settings", "dispatchPromise", "dispatch", "useIntentDispatcher", "deck", "popoverAnchorId", "scrollIntoView", "useCapability", "DeckCapabilities", "DeckState", "canResize", "attentionAttrs", "useAttentionAttributes", "index", "findIndex", "entryId", "length", "canIncrementStart", "canIncrementEnd", "rootElement", "useRef", "variant", "parseEntryId", "sizeKey", "split", "ATTENDABLE_PATH_SEPARATOR", "size", "plankSizing", "handleSizeChange", "useCallback", "debounce", "nextSize", "createIntent", "DeckAction", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "focusable", "querySelector", "preventScroll", "behavior", "inline", "LayoutAction", "ScrollIntoView", "subject", "isSolo", "startsWith", "isAttendable", "data", "useMemo", "companionTo", "placeholder", "PlankLoading", "Root", "StackItem", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "ResizeHandle", "React", "useCallback", "LayoutAction", "createIntent", "useCapability", "useIntentDispatcher", "IconButton", "useTranslation", "ToggleSidebarButton", "classNames", "variant", "layoutContext", "useCapability", "DeckCapabilities", "MutableDeckState", "t", "useTranslation", "DECK_PLUGIN", "React", "IconButton", "iconOnly", "icon", "size", "label", "onClick", "sidebarState", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "current", "dispatchPromise", "dispatch", "useIntentDispatcher", "companions", "useDeckCompanions", "handleClick", "useCallback", "complementarySidebarState", "firstCompanion", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject", "getCompanionId", "id", "tooltipSide", "undefined", "label", "ns", "DECK_PLUGIN", "ComplementarySidebar", "current", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "layout", "useCapability", "DeckCapabilities", "MutableDeckState", "layoutMode", "getMode", "deck", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "companions", "useDeckCompanions", "activeCompanion", "find", "companion", "getCompanionId", "id", "activeId", "internalValue", "setInternalValue", "useState", "useEffect", "handleTabClick", "useCallback", "event", "nextValue", "currentTarget", "getAttribute", "complementarySidebarState", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject", "data", "useMemo", "options", "state", "React", "Main", "classNames", "Tabs", "Root", "orientation", "verticalVariant", "value", "div", "role", "className", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "properties", "icon", "size", "iconOnly", "tooltipSide", "data-value", "variant", "onClick", "Surface", "limit", "ToggleComplementarySidebarButton", "Tabpanel", "inert", "ComplementarySidebarPanel", "ScrollArea", "children", "Wrapper", "fixed", "Fragment", "h2", "fallback", "PlankContentError", "placeholder", "PlankLoading", "React", "useMemo", "Surface", "useCapability", "Main", "label", "ns", "DECK_PLUGIN", "Sidebar", "popoverAnchorId", "activeDeck", "current", "deck", "useCapability", "DeckCapabilities", "DeckState", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "classNames", "Surface", "role", "data", "limit", "Banner", "variant", "classNames", "t", "useTranslation", "DECK_PLUGIN", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "ns", "div", "role", "Surface", "limit", "untracked", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useRef", "Capabilities", "LayoutAction", "createIntent", "useCapability", "useIntentDispatcher", "usePluginManager", "AttentionCapabilities", "Main", "useMediaQuery", "useOnTransition", "DEFAULT_HORIZONTAL_SIZE", "Stack", "StackContext", "mainPaddingTransitions", "React", "Surface", "useAppGraph", "useNode", "useAttended", "ActiveNode", "id", "useAttended", "graph", "useAppGraph", "activeNode", "useNode", "useNodeActionExpander", "React", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "Surface", "useCapability", "ContentEmpty", "breakpoint", "useBreakpoints", "deck", "useCapability", "DeckCapabilities", "MutableDeckState", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "React", "div", "role", "className", "data-testid", "Surface", "ToggleSidebarButton", "variant", "classNames", "fixedSidebarToggleStyles", "React", "Surface", "useCapability", "AlertDialog", "Dialog", "NaturalDialog", "Dialog", "context", "useCapability", "DeckCapabilities", "MutableDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "dialogContent", "Root", "AlertDialog", "NaturalDialog", "Overlay", "React", "modal", "open", "onOpenChange", "nextOpen", "Surface", "role", "data", "limit", "fallback", "PlankContentError", "placeholder", "div", "blockAlign", "classNames", "style", "createContext", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Surface", "useCapability", "Popover", "DEBOUNCE_DELAY", "DeckPopoverProvider", "useDeckPopoverContext", "createContext", "PopoverRoot", "children", "layout", "useCapability", "DeckCapabilities", "MutableDeckState", "virtualRef", "useRef", "virtualIter", "setVirtualIter", "useState", "open", "setOpen", "debounceRef", "useEffect", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "React", "Popover", "Root", "modal", "VirtualTrigger", "key", "PopoverContent", "handleClose", "useCallback", "event", "type", "currentTarget", "classList", "contains", "preventDefault", "undefined", "popoverSide", "collisionBoundaries", "useMemo", "closest", "Portal", "Content", "side", "onInteractOutside", "onEscapeKeyDown", "collisionBoundary", "sticky", "hideWhenDetached", "Viewport", "Surface", "role", "data", "limit", "Arrow", "React", "Surface", "useLandmarkMover", "StatusBar", "showHints", "mover", "useLandmarkMover", "undefined", "React", "div", "role", "className", "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", "React", "Topbar", "React", "Banner", "variant", "PlankSeparator", "order", "React", "span", "role", "className", "style", "gridColumn", "DeckLayout", "onDismissToast", "dispatchPromise", "dispatch", "useIntentDispatcher", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "DECK_PLUGIN", "value", "context", "DeckCapabilities", "MutableDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "deck", "toasts", "active", "activeCompanions", "fullscreen", "solo", "plankSizing", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "pluginManager", "usePluginManager", "scrollLeftRef", "useRef", "deckRef", "useEffect", "attended", "untracked", "attention", "getCapability", "AttentionCapabilities", "Attention", "current", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "ssr", "shouldRevert", "createIntent", "LayoutAction", "SetLayoutMode", "part", "subject", "options", "mode", "revert", "enableDeck", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "handleScroll", "event", "currentTarget", "target", "isEmpty", "padding", "useMemo", "overscroll", "calculateOverscroll", "mainPosition", "itemsCount", "reduce", "acc", "entryId", "PopoverRoot", "ActiveNode", "Main", "Root", "navigationSidebarState", "onNavigationSidebarStateChange", "next", "onComplementarySidebarStateChange", "Sidebar", "ComplementarySidebar", "Overlay", "Content", "bounce", "handlesFocus", "classNames", "ContentEmpty", "DEFAULT_HORIZONTAL_SIZE", "div", "inert", "ToggleSidebarButton", "fixedSidebarToggleStyles", "ToggleComplementarySidebarButton", "fixedComplementarySidebarToggleStyles", "Stack", "ref", "orientation", "size", "mainPaddingTransitions", "onScroll", "map", "Fragment", "key", "Plank", "id", "companionId", "StackContext", "Provider", "rail", "undefined", "Topbar", "StatusBar", "showHints", "PopoverContent", "Dialog", "toast", "Toast", "onOpenChange", "open", "React", "Input", "Select", "useTranslation", "ControlGroup", "ControlItemInput", "ControlPage", "ControlSection", "isSocket", "globalThis", "__args", "DeckSettings", "settings", "t", "useTranslation", "DECK_PLUGIN", "React", "ControlPage", "ControlSection", "title", "ns", "ControlGroup", "ControlItemInput", "Input", "Switch", "checked", "enableDeck", "onCheckedChange", "Select", "Root", "disabled", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "Arrow", "overscroll", "OverscrollOptions", "option", "enableStatusbar", "showHints", "enableNativeRedirect"]
7
+ }
@@ -96,15 +96,15 @@ var useNodeActionExpander = (node) => {
96
96
 
97
97
  // src/capabilities/index.ts
98
98
  import { lazy } from "@dxos/app-framework";
99
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-JTFSDT2I.mjs"));
100
- var CheckAppScheme = lazy(() => import("./check-app-scheme-57U62A3A.mjs"));
101
- var DeckSettings = lazy(() => import("./settings-6AJZPZPM.mjs"));
102
- var DeckState = lazy(() => import("./state-MVDYX77Y.mjs"));
103
- var LayoutIntentResolver = lazy(() => import("./intent-resolver-P2OBK5HK.mjs"));
104
- var ReactRoot = lazy(() => import("./react-root-PO64J7ML.mjs"));
105
- var ReactSurface = lazy(() => import("./react-surface-E45YOVF5.mjs"));
106
- var Tools = lazy(() => import("./tools-TKQDPCHJ.mjs"));
107
- var UrlHandler = lazy(() => import("./url-handler-7L7M6IKH.mjs"));
99
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-DVEKLXB4.mjs"));
100
+ var CheckAppScheme = lazy(() => import("./check-app-scheme-3BQJXWEY.mjs"));
101
+ var DeckSettings = lazy(() => import("./settings-LUPQPZ27.mjs"));
102
+ var DeckState = lazy(() => import("./state-CRXR7X63.mjs"));
103
+ var LayoutIntentResolver = lazy(() => import("./intent-resolver-2SUIIV6N.mjs"));
104
+ var ReactRoot = lazy(() => import("./react-root-7PRVDLF7.mjs"));
105
+ var ReactSurface = lazy(() => import("./react-surface-FNY2YC2F.mjs"));
106
+ var Toolkit = lazy(() => import("./toolkit-XGJSBY67.mjs"));
107
+ var UrlHandler = lazy(() => import("./url-handler-LROZYQ26.mjs"));
108
108
 
109
109
  export {
110
110
  useBreakpoints,
@@ -121,7 +121,7 @@ export {
121
121
  LayoutIntentResolver,
122
122
  ReactRoot,
123
123
  ReactSurface,
124
- Tools,
124
+ Toolkit,
125
125
  UrlHandler
126
126
  };
127
- //# sourceMappingURL=chunk-QDZO4AJ4.mjs.map
127
+ //# sourceMappingURL=chunk-WILMPGDV.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useCompanions.ts", "../../../src/hooks/useBreakpoints.ts", "../../../src/hooks/useDeckCompanions.ts", "../../../src/hooks/useHoistStatusbar.ts", "../../../src/hooks/useMainSize.ts", "../../../src/hooks/useNodeActionExpander.ts", "../../../src/capabilities/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\nimport { PLANK_COMPANION_TYPE } from '../types';\n\nexport const useCompanions = (id?: string) => {\n const { graph } = useAppGraph();\n const nodes = useConnections(graph, id);\n const companions = nodes.filter((node) => node.type === PLANK_COMPANION_TYPE);\n return useMemo(() => companions.toSorted((a, b) => byPosition(a.properties, b.properties)), [companions]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMediaQuery } from '@dxos/react-ui';\n\nexport const useBreakpoints = () => {\n const [isNotMobile] = useMediaQuery('md');\n const [isDesktop] = useMediaQuery('lg');\n return isDesktop ? 'desktop' : isNotMobile ? 'tablet' : 'mobile';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Label, useAppGraph } from '@dxos/app-framework';\nimport { ROOT_ID, useConnections, type Node } from '@dxos/plugin-graph';\nimport { byPosition, type Position } from '@dxos/util';\n\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '../types';\n\nexport const getCompanionId = (id: string) => {\n const [_, companionId] = id.split(ATTENDABLE_PATH_SEPARATOR);\n return companionId ?? 'never';\n};\n\nexport type DeckCompanion = Node<\n any,\n {\n label: Label;\n icon: string;\n // TODO(burdon): Scroll area should be controlled by surface.\n /** If true, the panel will not be wrapped in a scroll area. */\n fixed?: boolean;\n position?: Position;\n }\n>;\n\nexport const useDeckCompanions = (): DeckCompanion[] => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, ROOT_ID);\n const companions = connections.filter((node) => node.type === DECK_COMPANION_TYPE) as DeckCompanion[];\n return companions.toSorted((a, b) => byPosition(a.properties, b.properties));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapability } from '@dxos/app-framework';\nimport { useThemeContext } from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../meta';\nimport type { DeckSettingsProps, LayoutMode } from '../types';\n\nexport const useHoistStatusbar = (breakpoint: string, layoutMode?: LayoutMode): boolean => {\n const enableStatusbar = useCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(DECK_PLUGIN)!.value\n .enableStatusbar;\n const { safeAreaPadding } = useThemeContext();\n return useMemo(() => {\n return (\n breakpoint === 'desktop' &&\n layoutMode !== 'solo--fullscreen' &&\n !!enableStatusbar &&\n safeAreaPadding?.bottom === 0\n );\n }, [enableStatusbar, breakpoint, safeAreaPadding?.bottom, layoutMode]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { navigationSidebarState, complementarySidebarState } = useMainContext('DeckPluginPlank');\n return {\n 'data-sidebar-inline-start-state': navigationSidebarState,\n 'data-sidebar-inline-end-state': complementarySidebarState,\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { getGraph, type Node } from '@dxos/plugin-graph';\n\nexport const useNodeActionExpander = (node?: Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n const graph = getGraph(node);\n void graph.expand(node.id);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const CheckAppScheme = lazy(() => import('./check-app-scheme'));\nexport const DeckSettings = lazy(() => import('./settings'));\nexport const DeckState = lazy(() => import('./state'));\nexport const LayoutIntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Tools = lazy(() => import('./tools'));\nexport const UrlHandler = lazy(() => import('./url-handler'));\n\nexport * from './capabilities';\nexport * from './state';\n"],
5
- "mappings": "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",
6
- "names": ["useMemo", "useAppGraph", "useConnections", "byPosition", "useCompanions", "id", "graph", "useAppGraph", "nodes", "useConnections", "companions", "filter", "node", "type", "PLANK_COMPANION_TYPE", "useMemo", "toSorted", "a", "b", "byPosition", "properties", "useMediaQuery", "useBreakpoints", "isNotMobile", "useMediaQuery", "isDesktop", "useAppGraph", "ROOT_ID", "useConnections", "byPosition", "getCompanionId", "id", "_", "companionId", "split", "ATTENDABLE_PATH_SEPARATOR", "useDeckCompanions", "graph", "useAppGraph", "connections", "useConnections", "ROOT_ID", "companions", "filter", "node", "type", "DECK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "useMemo", "Capabilities", "useCapability", "useThemeContext", "useHoistStatusbar", "breakpoint", "layoutMode", "enableStatusbar", "useCapability", "Capabilities", "SettingsStore", "getStore", "DECK_PLUGIN", "value", "safeAreaPadding", "useThemeContext", "useMemo", "bottom", "useMainContext", "useMainSize", "navigationSidebarState", "complementarySidebarState", "useMainContext", "useEffect", "getGraph", "useNodeActionExpander", "node", "useEffect", "frame", "requestAnimationFrame", "graph", "getGraph", "expand", "id", "cancelAnimationFrame", "lazy", "AppGraphBuilder", "lazy", "CheckAppScheme", "DeckSettings", "DeckState", "LayoutIntentResolver", "ReactRoot", "ReactSurface", "Tools", "UrlHandler"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\nimport { PLANK_COMPANION_TYPE } from '../types';\n\nexport const useCompanions = (id?: string) => {\n const { graph } = useAppGraph();\n const nodes = useConnections(graph, id);\n const companions = nodes.filter((node) => node.type === PLANK_COMPANION_TYPE);\n return useMemo(() => companions.toSorted((a, b) => byPosition(a.properties, b.properties)), [companions]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMediaQuery } from '@dxos/react-ui';\n\nexport const useBreakpoints = () => {\n const [isNotMobile] = useMediaQuery('md');\n const [isDesktop] = useMediaQuery('lg');\n return isDesktop ? 'desktop' : isNotMobile ? 'tablet' : 'mobile';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Label, useAppGraph } from '@dxos/app-framework';\nimport { type Node, ROOT_ID, useConnections } from '@dxos/plugin-graph';\nimport { type Position, byPosition } from '@dxos/util';\n\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '../types';\n\nexport const getCompanionId = (id: string) => {\n const [_, companionId] = id.split(ATTENDABLE_PATH_SEPARATOR);\n return companionId ?? 'never';\n};\n\nexport type DeckCompanion = Node<\n any,\n {\n label: Label;\n icon: string;\n // TODO(burdon): Scroll area should be controlled by surface.\n /** If true, the panel will not be wrapped in a scroll area. */\n fixed?: boolean;\n position?: Position;\n }\n>;\n\nexport const useDeckCompanions = (): DeckCompanion[] => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, ROOT_ID);\n const companions = connections.filter((node) => node.type === DECK_COMPANION_TYPE) as DeckCompanion[];\n return companions.toSorted((a, b) => byPosition(a.properties, b.properties));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { Capabilities, useCapability } from '@dxos/app-framework';\nimport { useThemeContext } from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../meta';\nimport type { DeckSettingsProps, LayoutMode } from '../types';\n\nexport const useHoistStatusbar = (breakpoint: string, layoutMode?: LayoutMode): boolean => {\n const enableStatusbar = useCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(DECK_PLUGIN)!.value\n .enableStatusbar;\n const { safeAreaPadding } = useThemeContext();\n return useMemo(() => {\n return (\n breakpoint === 'desktop' &&\n layoutMode !== 'solo--fullscreen' &&\n !!enableStatusbar &&\n safeAreaPadding?.bottom === 0\n );\n }, [enableStatusbar, breakpoint, safeAreaPadding?.bottom, layoutMode]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { navigationSidebarState, complementarySidebarState } = useMainContext('DeckPluginPlank');\n return {\n 'data-sidebar-inline-start-state': navigationSidebarState,\n 'data-sidebar-inline-end-state': complementarySidebarState,\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node, getGraph } from '@dxos/plugin-graph';\n\nexport const useNodeActionExpander = (node?: Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n const graph = getGraph(node);\n void graph.expand(node.id);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const CheckAppScheme = lazy(() => import('./check-app-scheme'));\nexport const DeckSettings = lazy(() => import('./settings'));\nexport const DeckState = lazy(() => import('./state'));\nexport const LayoutIntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n// export const Tools = lazy(() => import('./tools'));\nexport const Toolkit = lazy(() => import('./toolkit'));\nexport const UrlHandler = lazy(() => import('./url-handler'));\n\nexport * from './capabilities';\nexport * from './state';\n"],
5
+ "mappings": "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",
6
+ "names": ["useMemo", "useAppGraph", "useConnections", "byPosition", "useCompanions", "id", "graph", "useAppGraph", "nodes", "useConnections", "companions", "filter", "node", "type", "PLANK_COMPANION_TYPE", "useMemo", "toSorted", "a", "b", "byPosition", "properties", "useMediaQuery", "useBreakpoints", "isNotMobile", "useMediaQuery", "isDesktop", "useAppGraph", "ROOT_ID", "useConnections", "byPosition", "getCompanionId", "id", "_", "companionId", "split", "ATTENDABLE_PATH_SEPARATOR", "useDeckCompanions", "graph", "useAppGraph", "connections", "useConnections", "ROOT_ID", "companions", "filter", "node", "type", "DECK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "useMemo", "Capabilities", "useCapability", "useThemeContext", "useHoistStatusbar", "breakpoint", "layoutMode", "enableStatusbar", "useCapability", "Capabilities", "SettingsStore", "getStore", "DECK_PLUGIN", "value", "safeAreaPadding", "useThemeContext", "useMemo", "bottom", "useMainContext", "useMainSize", "navigationSidebarState", "complementarySidebarState", "useMainContext", "useEffect", "getGraph", "useNodeActionExpander", "node", "useEffect", "frame", "requestAnimationFrame", "graph", "getGraph", "expand", "id", "cancelAnimationFrame", "lazy", "AppGraphBuilder", "lazy", "CheckAppScheme", "DeckSettings", "DeckState", "LayoutIntentResolver", "ReactRoot", "ReactSurface", "Toolkit", "UrlHandler"]
7
7
  }
@@ -6,11 +6,11 @@ import {
6
6
  LayoutIntentResolver,
7
7
  ReactRoot,
8
8
  ReactSurface,
9
- Tools,
9
+ Toolkit,
10
10
  UrlHandler,
11
11
  useCompanions
12
- } from "./chunk-QDZO4AJ4.mjs";
13
- import "./chunk-JFTXENFN.mjs";
12
+ } from "./chunk-WILMPGDV.mjs";
13
+ import "./chunk-NRCPV6AV.mjs";
14
14
  import {
15
15
  DeckCapabilities
16
16
  } from "./chunk-M57WD3V6.mjs";
@@ -29,7 +29,7 @@ var DeckEvents;
29
29
 
30
30
  // src/DeckPlugin.ts
31
31
  import { setAutoFreeze } from "immer";
32
- import { allOf, Capabilities, contributes, defineModule, definePlugin, Events as Events2, oneOf } from "@dxos/app-framework";
32
+ import { Capabilities, Events as Events2, allOf, contributes, defineModule, definePlugin, oneOf } from "@dxos/app-framework";
33
33
  import { translations as stackTranslations } from "@dxos/react-ui-stack";
34
34
 
35
35
  // src/translations.ts
@@ -38,6 +38,7 @@ var translations = [
38
38
  "en-US": {
39
39
  [meta.id]: {
40
40
  "plugin name": "Deck",
41
+ "settings title": "Deck settings",
41
42
  "main header label": "Main header",
42
43
  "open navigation sidebar label": "Open sidebar",
43
44
  "collapse navigation sidebar label": "Minimize sidebar",
@@ -146,10 +147,16 @@ var DeckPlugin = () => definePlugin(meta, [
146
147
  activatesOn: Events2.SetupAppGraph,
147
148
  activate: AppGraphBuilder
148
149
  }),
150
+ // defineModule({
151
+ // id: `${meta.id}/module/tools`,
152
+ // activatesOn: Events.SetupArtifactDefinition,
153
+ // activate: Tools,
154
+ // }),
149
155
  defineModule({
150
- id: `${meta.id}/module/tools`,
151
- activatesOn: Events2.SetupArtifactDefinition,
152
- activate: Tools
156
+ id: `${meta.id}/module/toolkit`,
157
+ // TODO(wittjosiah): Shouldn't use the startup event.
158
+ activatesOn: Events2.Startup,
159
+ activate: Toolkit
153
160
  }),
154
161
  defineModule({
155
162
  id: `${meta.id}/module/url`,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
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 DeckSettings,\n DeckState,\n LayoutIntentResolver,\n ReactRoot,\n ReactSurface,\n Tools,\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 // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: oneOf(Events.SetupSettings, 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.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/layout-intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\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/tools`,\n activatesOn: Events.SetupArtifactDefinition,\n activate: Tools,\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 { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\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 'sidebar title': 'Navigation sidebar',\n 'complementary sidebar title': '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 '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 'exit fullscreen label': 'Exit fullscreen',\n 'show fullscreen plank label': 'Fullscreen',\n 'close label': 'Close',\n 'minify label': 'Minify',\n 'open companion label': 'Open companion',\n 'close companion label': 'Close companion',\n 'settings overscroll label': 'Plank scrolling',\n 'select overscroll placeholder': 'Select plank scrolling behavior',\n 'settings overscroll centering label': 'Centering',\n 'settings overscroll none label': 'None',\n 'settings enable statusbar label': 'Show status bar',\n 'settings enable deck label': 'Enable Deck',\n 'close current label': 'Close current plank',\n 'close others label': 'Close other planks',\n 'close all label': 'Close all planks',\n 'companion plank heading fallback label': 'Related',\n },\n },\n },\n] as const satisfies Resource[];\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;;;ACC3C,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,EAAE,GAAG;QACT,eAAe;QACf,qBAAqB;QACrB,iCAAiC;QACjC,qCAAqC;QACrC,oCAAoC;QACpC,qCAAqC;QACrC,iBAAiB;QACjB,+BAA+B;QAC/B,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,mBAAmB;QACnB,sBAAsB;QACtB,gBAAgB;QAChB,mBAAmB;QACnB,iBAAiB;QACjB,yBAAyB;QACzB,uBAAuB;QACvB,yBAAyB;QACzB,yBAAyB;QACzB,yBAAyB;QACzB,+BAA+B;QAC/B,eAAe;QACf,gBAAgB;QAChB,wBAAwB;QACxB,yBAAyB;QACzB,6BAA6B;QAC7B,iCAAiC;QACjC,uCAAuC;QACvC,kCAAkC;QAClC,mCAAmC;QACnC,8BAA8B;QAC9B,uBAAuB;QACvB,sBAAsB;QACtB,mBAAmB;QACnB,0CAA0C;MAC5C;IACF;EACF;;;;ADvCFC,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;;;;IAIdC,aAAaO,MAAMN,QAAOI,eAAeJ,QAAOO,aAAa;IAC7DC,gBAAgB;MAACR,QAAOS;MAAaC,WAAWC;;IAChDT,UAAUU;EACZ,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOa;IACpBX,UAAU,MAAMY,YAAYC,aAAaC,cAAc;SAAIC;SAAiBC;KAAkB;EAChG,CAAA;EACArB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAOmB;IACpBjB,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,QAAOO;IACpBL,UAAUuB;EACZ,CAAA;EACA5B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,QAAO0B;IACpBxB,UAAUyB;EACZ,CAAA;EACA9B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAa6B,MAAM5B,QAAO6B,iBAAiBnB,WAAWC,UAAU;IAChET,UAAU4B;EACZ,CAAA;CACD;",
6
- "names": ["Events", "DeckEvents", "StateReady", "Events", "createStateEvent", "DECK_PLUGIN", "setAutoFreeze", "allOf", "Capabilities", "contributes", "defineModule", "definePlugin", "Events", "oneOf", "translations", "stackTranslations", "translations", "meta", "id", "setAutoFreeze", "DeckPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SettingsReady", "activate", "CheckAppScheme", "SetupSettings", "DeckSettings", "oneOf", "SetupAppGraph", "activatesAfter", "LayoutReady", "DeckEvents", "StateReady", "DeckState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "stackTranslations", "Startup", "ReactRoot", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "LayoutIntentResolver", "AppGraphBuilder", "SetupArtifactDefinition", "Tools", "allOf", "DispatcherReady", "UrlHandler"]
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 { Capabilities, Events, allOf, contributes, defineModule, definePlugin, oneOf } from '@dxos/app-framework';\nimport { translations as stackTranslations } from '@dxos/react-ui-stack';\n\nimport {\n AppGraphBuilder,\n CheckAppScheme,\n DeckSettings,\n DeckState,\n LayoutIntentResolver,\n ReactRoot,\n ReactSurface,\n Toolkit,\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 // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: oneOf(Events.SetupSettings, 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.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/layout-intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\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/tools`,\n // activatesOn: Events.SetupArtifactDefinition,\n // activate: Tools,\n // }),\n defineModule({\n id: `${meta.id}/module/toolkit`,\n // TODO(wittjosiah): Shouldn't use the startup event.\n activatesOn: Events.Startup,\n activate: Toolkit,\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 { type Resource } from '@dxos/react-ui';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'plugin name': 'Deck',\n 'settings title': 'Deck settings',\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 'sidebar title': 'Navigation sidebar',\n 'complementary sidebar title': '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 '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 'exit fullscreen label': 'Exit fullscreen',\n 'show fullscreen plank label': 'Fullscreen',\n 'close label': 'Close',\n 'minify label': 'Minify',\n 'open companion label': 'Open companion',\n 'close companion label': 'Close companion',\n 'settings overscroll label': 'Plank scrolling',\n 'select overscroll placeholder': 'Select plank scrolling behavior',\n 'settings overscroll centering label': 'Centering',\n 'settings overscroll none label': 'None',\n 'settings enable statusbar label': 'Show status bar',\n 'settings enable deck label': 'Enable Deck',\n 'close current label': 'Close current plank',\n 'close others label': 'Close other planks',\n 'close all label': 'Close all planks',\n 'companion plank heading fallback label': 'Related',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
+ "mappings": "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",
6
+ "names": ["Events", "DeckEvents", "StateReady", "Events", "createStateEvent", "DECK_PLUGIN", "setAutoFreeze", "Capabilities", "Events", "allOf", "contributes", "defineModule", "definePlugin", "oneOf", "translations", "stackTranslations", "translations", "meta", "id", "setAutoFreeze", "DeckPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SettingsReady", "activate", "CheckAppScheme", "SetupSettings", "DeckSettings", "oneOf", "SetupAppGraph", "activatesAfter", "LayoutReady", "DeckEvents", "StateReady", "DeckState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "stackTranslations", "Startup", "ReactRoot", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "LayoutIntentResolver", "AppGraphBuilder", "Toolkit", "allOf", "DispatcherReady", "UrlHandler"]
7
7
  }
@@ -21,8 +21,8 @@ import {
21
21
 
22
22
  // src/capabilities/intent-resolver.ts
23
23
  import { batch } from "@preact/signals-core";
24
- import { Schema, Effect, pipe, Option } from "effect";
25
- import { Capabilities, createResolver, contributes, IntentAction, LayoutAction, createIntent, chain } from "@dxos/app-framework";
24
+ import { Effect, Option, Schema, pipe } from "effect";
25
+ import { Capabilities, IntentAction, LayoutAction, chain, contributes, createIntent, createResolver } from "@dxos/app-framework";
26
26
  import { Obj } from "@dxos/echo";
27
27
  import { invariant } from "@dxos/invariant";
28
28
  import { isLiveObject } from "@dxos/live-object";
@@ -210,7 +210,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
210
210
  } else {
211
211
  log.warn("Invalid layout mode", options, {
212
212
  F: __dxlog_file,
213
- L: 200,
213
+ L: 201,
214
214
  S: void 0,
215
215
  C: (f, a) => f(...a)
216
216
  });
@@ -422,7 +422,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
422
422
  } else {
423
423
  invariant(data.companion !== data.primary, void 0, {
424
424
  F: __dxlog_file,
425
- L: 380,
425
+ L: 381,
426
426
  S: void 0,
427
427
  A: [
428
428
  "data.companion !== data.primary",
@@ -518,4 +518,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
518
518
  export {
519
519
  intent_resolver_default as default
520
520
  };
521
- //# sourceMappingURL=intent-resolver-P2OBK5HK.mjs.map
521
+ //# sourceMappingURL=intent-resolver-2SUIIV6N.mjs.map