@dxos/plugin-deck 0.8.1 → 0.8.2-main.f081794

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 (80) hide show
  1. package/dist/lib/browser/{chunk-B4LOJUWW.mjs → chunk-4QSEGMY3.mjs} +10 -10
  2. package/dist/lib/browser/{chunk-B4LOJUWW.mjs.map → chunk-4QSEGMY3.mjs.map} +3 -3
  3. package/dist/lib/browser/{chunk-6ZSOFCPP.mjs → chunk-6HJZL3WT.mjs} +8 -7
  4. package/dist/lib/browser/{chunk-6ZSOFCPP.mjs.map → chunk-6HJZL3WT.mjs.map} +3 -3
  5. package/dist/lib/browser/{chunk-FJBMNSUC.mjs → chunk-VP6FCWFV.mjs} +171 -151
  6. package/dist/lib/browser/chunk-VP6FCWFV.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-RJNCG4ND.mjs → chunk-ZMJMCN7O.mjs} +9 -6
  8. package/dist/lib/browser/chunk-ZMJMCN7O.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +5 -3
  10. package/dist/lib/browser/index.mjs.map +2 -2
  11. package/dist/lib/browser/{intent-resolver-UDYKO2QW.mjs → intent-resolver-6AK45PT5.mjs} +49 -31
  12. package/dist/lib/browser/intent-resolver-6AK45PT5.mjs.map +7 -0
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/{react-root-XLXN2VEW.mjs → react-root-KA2IL5RA.mjs} +5 -5
  15. package/dist/lib/browser/{react-surface-WNGMZL7I.mjs → react-surface-LIPGYEYN.mjs} +5 -5
  16. package/dist/lib/browser/{settings-HMDGSBGO.mjs → settings-6NU7CF2B.mjs} +4 -4
  17. package/dist/lib/browser/settings-6NU7CF2B.mjs.map +7 -0
  18. package/dist/lib/browser/{state-7TN26M42.mjs → state-Z6UY2Z3M.mjs} +6 -5
  19. package/dist/lib/browser/state-Z6UY2Z3M.mjs.map +7 -0
  20. package/dist/lib/browser/{tools-SC6QEN7R.mjs → tools-VDVQTJMD.mjs} +2 -2
  21. package/dist/lib/browser/types.mjs +1 -1
  22. package/dist/lib/browser/{url-handler-ODG4B6NX.mjs → url-handler-3CARFXQK.mjs} +2 -2
  23. package/dist/types/src/capabilities/capabilities.d.ts +8 -6
  24. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  25. package/dist/types/src/capabilities/index.d.ts +2 -2
  26. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  27. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  28. package/dist/types/src/capabilities/state.d.ts +5 -4
  29. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  30. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  31. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  32. package/dist/types/src/components/DeckLayout/Dialog.d.ts +3 -0
  33. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -0
  34. package/dist/types/src/components/DeckLayout/Popover.d.ts +5 -0
  35. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -0
  36. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  37. package/dist/types/src/components/Plank/PlankControls.d.ts +2 -2
  38. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  39. package/dist/types/src/components/Plank/PlankHeading.d.ts +3 -2
  40. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  41. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  42. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
  43. package/dist/types/src/translations.d.ts +2 -0
  44. package/dist/types/src/translations.d.ts.map +1 -1
  45. package/dist/types/src/types.d.ts +11 -9
  46. package/dist/types/src/types.d.ts.map +1 -1
  47. package/dist/types/src/util/layoutAppliesTopbar.d.ts +2 -1
  48. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  49. package/dist/types/src/util/useHoistStatusbar.d.ts +2 -1
  50. package/dist/types/src/util/useHoistStatusbar.d.ts.map +1 -1
  51. package/package.json +28 -28
  52. package/src/capabilities/index.ts +2 -2
  53. package/src/capabilities/intent-resolver.ts +36 -20
  54. package/src/capabilities/settings.ts +2 -2
  55. package/src/capabilities/state.ts +3 -2
  56. package/src/components/DeckLayout/ContentEmpty.tsx +6 -2
  57. package/src/components/DeckLayout/DeckLayout.tsx +114 -181
  58. package/src/components/DeckLayout/Dialog.tsx +36 -0
  59. package/src/components/DeckLayout/Popover.tsx +76 -0
  60. package/src/components/Plank/Plank.tsx +3 -2
  61. package/src/components/Plank/PlankControls.tsx +33 -33
  62. package/src/components/Plank/PlankHeading.tsx +6 -4
  63. package/src/components/Sidebar/ComplementarySidebar.tsx +30 -20
  64. package/src/components/Sidebar/Sidebar.tsx +5 -3
  65. package/src/translations.ts +2 -0
  66. package/src/types.ts +9 -6
  67. package/src/util/layoutAppliesTopbar.ts +8 -2
  68. package/src/util/useHoistStatusbar.ts +9 -4
  69. package/dist/lib/browser/chunk-FJBMNSUC.mjs.map +0 -7
  70. package/dist/lib/browser/chunk-RJNCG4ND.mjs.map +0 -7
  71. package/dist/lib/browser/intent-resolver-UDYKO2QW.mjs.map +0 -7
  72. package/dist/lib/browser/settings-HMDGSBGO.mjs.map +0 -7
  73. package/dist/lib/browser/state-7TN26M42.mjs.map +0 -7
  74. package/dist/types/src/components/DeckLayout/Fullscreen.d.ts +0 -5
  75. package/dist/types/src/components/DeckLayout/Fullscreen.d.ts.map +0 -1
  76. package/src/components/DeckLayout/Fullscreen.tsx +0 -31
  77. /package/dist/lib/browser/{react-root-XLXN2VEW.mjs.map → react-root-KA2IL5RA.mjs.map} +0 -0
  78. /package/dist/lib/browser/{react-surface-WNGMZL7I.mjs.map → react-surface-LIPGYEYN.mjs.map} +0 -0
  79. /package/dist/lib/browser/{tools-SC6QEN7R.mjs.map → tools-VDVQTJMD.mjs.map} +0 -0
  80. /package/dist/lib/browser/{url-handler-ODG4B6NX.mjs.map → url-handler-3CARFXQK.mjs.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/DeckLayout/Banner.tsx", "../../../src/components/Sidebar/ComplementarySidebar.tsx", "../../../src/components/Sidebar/SidebarButton.tsx", "../../../src/components/Plank/Plank.tsx", "../../../src/components/Plank/PlankError.tsx", "../../../src/components/Plank/PlankHeading.tsx", "../../../src/components/Plank/PlankControls.tsx", "../../../src/components/fragments.ts", "../../../src/components/Plank/PlankLoading.tsx", "../../../src/hooks/useNodeActionExpander.ts", "../../../src/hooks/useMainSize.ts", "../../../src/components/Sidebar/Sidebar.tsx", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/Fullscreen.tsx", "../../../src/components/DeckLayout/Fallback.tsx", "../../../src/components/DeckLayout/constants.ts", "../../../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 { useTranslation, type ThemedClassName } 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 {\n LayoutAction,\n Surface,\n createIntent,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { Main, useTranslation, toLocalizedString, IconButton, type Label } from '@dxos/react-ui';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { byPosition, type Position } from '@dxos/util';\n\nimport { ToggleComplementarySidebarButton } from './SidebarButton';\nimport { DeckCapabilities } from '../../capabilities';\nimport { DECK_PLUGIN } from '../../meta';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '../../types';\nimport { layoutAppliesTopbar, useBreakpoints, useHoistStatusbar } from '../../util';\nimport { PlankContentError, PlankLoading } from '../Plank';\n\nconst label = ['complementary sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nconst getCompanionId = (id: string) => {\n const [_, companionId] = id.split(ATTENDABLE_PATH_SEPARATOR);\n return companionId ?? 'never';\n};\n\ntype 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\nconst useDeckCompanions = (): DeckCompanion[] => {\n const { graph } = useAppGraph();\n const companions = graph.nodes(graph.root, { type: DECK_COMPANION_TYPE }) as DeckCompanion[];\n return companions.toSorted((a, b) => byPosition(a.properties, b.properties));\n};\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 breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint);\n const hoistStatusbar = useHoistStatusbar(breakpoint);\n\n const companions = useDeckCompanions();\n const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current) ?? companions.at(0);\n const activeId = getCompanionId(activeCompanion?.id ?? 'never');\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 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-separator 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 {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-separator 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-separator 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 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\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 = ({ inR0, classNames }: ThemedClassName<{ inR0?: boolean }>) => {\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n iconOnly\n onClick={() =>\n (layoutContext.complementarySidebarState =\n layoutContext.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded')\n }\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, {\n Fragment,\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 useCapability,\n useAppGraph,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { useNode, type Node } from '@dxos/plugin-graph';\nimport { ATTENDABLE_PATH_SEPARATOR, useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/react-ui-theme';\n\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DeckCapabilities } from '../../capabilities';\nimport { useMainSize } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DeckAction, type LayoutMode, type Part, type ResolvedPart, type DeckSettingsProps } from '../../types';\nimport { useCompanions } from '../../util';\n\nconst UNKNOWN_ID = 'unknown_id';\n\nexport type PlankProps = {\n id?: string;\n companionId?: string;\n part: Part;\n path?: string[];\n order?: number;\n active?: string[];\n layoutMode: LayoutMode;\n settings?: DeckSettingsProps;\n};\n\ntype PlankImplProps = Omit<PlankProps, 'id' | 'companionId' | 'part'> & {\n id: string;\n part: ResolvedPart;\n node?: Node;\n companioned?: 'primary' | 'companion';\n primary?: Node;\n companions?: Node[];\n};\n\nconst PlankImpl = memo(\n ({ id, node, part, path, order, active, layoutMode, companioned, primary, companions, settings }: PlankImplProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { deck, popoverAnchorId, scrollIntoView } = useCapability(DeckCapabilities.DeckState);\n const rootElement = useRef<HTMLDivElement | null>(null);\n const canResize = layoutMode === 'deck';\n const Root = part.startsWith('solo') ? 'article' : StackItem.Root;\n\n const attendableAttrs = useAttendableAttributes(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 { variant } = parseEntryId(id);\n const sizeKey = `${id.split('+')[0]}${variant ? `${ATTENDABLE_PATH_SEPARATOR}${variant}` : ''}`;\n const size = deck.plankSizing[sizeKey] as number | undefined;\n const setSize = 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 === 'solo' && part === 'solo';\n const isAttendable =\n (layoutMode === '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],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const className = mx(\n 'attention-surface relative',\n isSolo && mainIntrinsicSize,\n isSolo && railGridHorizontal,\n isSolo && '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: setSize,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attendableAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n <PlankHeading\n id={id}\n part={part.startsWith('solo-') ? 'solo' : part}\n node={node}\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 {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n },\n);\n\nconst SplitFrame = ({ children }: PropsWithChildren<{}>) => {\n const sizeAttrs = useMainSize();\n return (\n <div\n role='none'\n className={mx('grid grid-cols-[1fr_1fr] absolute inset-0', railGridHorizontal, mainIntrinsicSize)}\n {...sizeAttrs}\n >\n {children}\n </div>\n );\n};\n\nexport const Plank = ({ id = UNKNOWN_ID, ...props }: PlankProps) => {\n const { graph } = useAppGraph();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const currentCompanion = companions.find(({ id }) => id === props.companionId);\n\n if (props.companionId) {\n const Root = props.part === 'solo' ? SplitFrame : Fragment;\n return (\n <Root>\n <PlankImpl\n id={id}\n node={node}\n companioned='primary'\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-primary' } : {})}\n />\n <PlankImpl\n id={props.companionId}\n node={currentCompanion}\n companioned='companion'\n primary={node}\n companions={companions}\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-companion' } : { order: props.order! + 1 })}\n />\n </Root>\n );\n } else {\n return <PlankImpl id={id} node={node} companions={companions} {...props} />;\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 { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { PlankHeading, type PlankHeadingProps } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const PlankContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='overflow-auto p-8 attention-surface grid place-items-center'>\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'break-words border border-dashed border-separator rounded-lg p-8',\n errorString.length < 256 && 'text-lg',\n )}\n >\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n 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, memo, useCallback, useEffect, useMemo, type MouseEvent } from 'react';\n\nimport { createIntent, LayoutAction, Surface, 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';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\nimport { parseEntryId } from '../../layout';\nimport { DECK_PLUGIN } from '../../meta';\nimport { PLANK_COMPANION_TYPE, DeckAction, type ResolvedPart } from '../../types';\nimport { useBreakpoints } from '../../util';\nimport { soloInlinePadding } from '../fragments';\n\nexport type PlankHeadingProps = {\n id: string;\n part: ResolvedPart;\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 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 node && graph.actions(node);\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 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 [actions, graph.actions(node)].filter((a) => a.length > 0);\n }\n }, [actions, node, variant, graph]);\n\n const handleAction = useCallback((action: StackItemSigilAction) => {\n typeof action.data === 'function' && action.data?.({ node: action as Node, caller: DECK_PLUGIN });\n }, []);\n\n const handlePlankAction = useCallback(\n (eventType: DeckAction.PartAdjustment) => {\n if (eventType === '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 border-be border-separator items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 layout-contain',\n part === 'solo' ? soloInlinePadding : 'pli-1',\n ]}\n >\n {companions && isCompanionNode ? (\n <div role='none' className='flex-1 min-is-0 overflow-x-auto scrollbar-thin flex gap-1'>\n {companions.map(({ id, properties: { icon, label } }) => (\n <IconButton\n key={id}\n data-id={id}\n icon={icon}\n iconOnly={node?.id !== id}\n label={toLocalizedString(label, t)}\n size={5}\n variant={node?.id === id ? 'primary' : 'default'}\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 isSolo={part === 'solo'}\n close={part === 'complementary' ? 'minify-end' : true}\n onClick={handlePlankAction}\n />\n )}\n </StackItem.Heading>\n );\n },\n);\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 {\n Button,\n ButtonGroup,\n type ButtonGroupProps,\n type ButtonProps,\n Icon,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { DeckAction } 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 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 isSolo?: boolean;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' {...props}>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={5} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{label}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nconst plankControlSpacing = 'pli-2 plb-3';\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--minus--regular'\n icon='ph--caret-left--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, isSolo, 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 return (\n <ButtonGroup {...props} classNames={['app-no-drag', classNames]} ref={forwardedRef}>\n {/* {pin && !isSolo && ['both', 'start'].includes(pin) && (\n <PlankControl\n label={t('pin start label')}\n variant='ghost'\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-start')}\n icon='ph--caret-line-left--regular'\n />\n )} */}\n\n {capabilities.deck && capabilities.solo && (\n <>\n <PlankControl\n label={isSolo ? t('show deck plank label') : t('show solo plank label')}\n classNames={buttonClassNames}\n icon={isSolo ? 'ph--corners-in--regular' : 'ph--corners-out--regular'}\n onClick={() => onClick?.('solo')}\n />\n\n {!isSolo && (\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\n {/* {pin && !isSolo && ['both', 'end'].includes(pin) && (\n <PlankControl\n label={t('pin end label')}\n classNames={buttonClassNames}\n icon='ph--caret-line-right--regular'\n onClick={() => onClick?.('pin-end')}\n />\n )} */}\n\n {close && !isSolo && (\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 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-deck 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 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 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { ACTION_GROUP_TYPE, ACTION_TYPE, getGraph, type Node } from '@dxos/plugin-graph';\n\nconst expandNodeActions = async (node: Node) => {\n const graph = getGraph(node);\n await graph.expand(node, 'outbound', ACTION_GROUP_TYPE);\n await graph.expand(node, 'outbound', ACTION_TYPE);\n};\n\nexport const useNodeActionExpander = (node?: Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n void expandNodeActions(node);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { 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 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 { DECK_PLUGIN } from '../../meta';\nimport { layoutAppliesTopbar, useBreakpoints, useHoistStatusbar } from '../../util';\n\nconst label = ['sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nexport const Sidebar = () => {\n const { popoverAnchorId, activeDeck: current } = useCapability(DeckCapabilities.DeckState);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint);\n const hoistStatusbar = useHoistStatusbar(breakpoint);\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, { useCallback, useEffect, useMemo, useRef, type UIEvent, Fragment, useState } from 'react';\n\nimport {\n Capabilities,\n LayoutAction,\n Surface,\n createIntent,\n useCapability,\n useIntentDispatcher,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport {\n AlertDialog,\n Dialog as NaturalDialog,\n Main,\n Popover,\n type MainProps,\n useMediaQuery,\n useOnTransition,\n} from '@dxos/react-ui';\nimport { Stack, StackContext, DEFAULT_HORIZONTAL_SIZE } from '@dxos/react-ui-stack';\nimport { mainPaddingTransitions } from '@dxos/react-ui-theme';\n\nimport { ActiveNode } from './ActiveNode';\nimport { ContentEmpty } from './ContentEmpty';\nimport { Fullscreen } from './Fullscreen';\nimport { StatusBar } from './StatusBar';\nimport { Toast } from './Toast';\nimport { Topbar } from './Topbar';\nimport { DeckCapabilities } from '../../capabilities';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type DeckSettingsProps, getMode } from '../../types';\nimport { calculateOverscroll, layoutAppliesTopbar, useBreakpoints, useHoistStatusbar } from '../../util';\nimport { Plank, PlankContentError } from '../Plank';\nimport { ComplementarySidebar, Sidebar, ToggleComplementarySidebarButton, ToggleSidebarButton } from '../Sidebar';\nimport { fixedComplementarySidebarToggleStyles, fixedSidebarToggleStyles } from '../fragments';\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-deck 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 {\n sidebarState,\n complementarySidebarState,\n complementarySidebarPanel,\n dialogOpen,\n dialogContent,\n dialogBlockAlign,\n dialogType,\n popoverOpen,\n popoverContent,\n popoverAnchorId,\n deck,\n toasts,\n } = context;\n const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint);\n const hoistStatusbar = useHoistStatusbar(breakpoint);\n const pluginManager = usePluginManager();\n\n const scrollLeftRef = useRef<number | null>();\n const deckRef = useRef<HTMLDivElement>(null);\n\n // TODO(thure): This is a workaround for the difference in `React`ion time between displaying a Popover and rendering\n // the anchor further down the tree. Refactor to use VirtualTrigger or some other approach which does not cause a lag.\n const [delayedPopoverVisibility, setDelayedPopoverVisibility] = useState(false);\n useEffect(() => {\n popoverOpen ? setTimeout(() => setDelayedPopoverVisibility(true), 40) : setDelayedPopoverVisibility(false);\n }, [popoverOpen]);\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.requestCapability(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.requestCapability(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 // If deck is disabled in settings, ensure that the layout is in solo mode.\n useEffect(() => {\n if (!settings.enableDeck) {\n void dispatch(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', subject: active[0], options: { mode: 'solo' } }),\n );\n }\n }, [settings.enableDeck, dispatch, active]);\n\n /**\n * Clear scroll restoration state if the window is resized\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n\n const layoutMode = getMode(deck);\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 Dialog = dialogType === 'alert' ? AlertDialog : NaturalDialog;\n\n const handlePopoverOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (nextOpen && popoverAnchorId) {\n context.popoverOpen = true;\n } else {\n context.popoverOpen = false;\n context.popoverAnchorId = undefined;\n context.popoverSide = undefined;\n }\n },\n [context],\n );\n const handlePopoverClose = useCallback(() => handlePopoverOpenChange(false), [handlePopoverOpenChange]);\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 <Popover.Root modal open={!!(popoverAnchorId && delayedPopoverVisibility)} onOpenChange={handlePopoverOpenChange}>\n <ActiveNode />\n\n {fullscreen && <Fullscreen id={solo} />}\n\n {!fullscreen && (\n <Main.Root\n navigationSidebarState={context.sidebarState}\n onNavigationSidebarStateChange={(next) => (context.sidebarState = next)}\n complementarySidebarState={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 classNames={mainPosition}\n handlesFocus\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-deck overflow-hidden' : 'sr-only'}\n {...(solo && { inert: '' })}\n >\n {!topbar && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />}\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-deck overflow-hidden' : 'sr-only'}\n {...(!solo && { inert: '' })}\n >\n {!topbar && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />}\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\n {/* Global popovers. */}\n <Popover.Portal>\n <Popover.Content side={context.popoverSide} onEscapeKeyDown={handlePopoverClose}>\n <Popover.Viewport>\n <Surface role='popover' data={popoverContent} limit={1} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n\n {/* Global dialog. */}\n {/* TODO(thure): End block alignment affecting `modal` and whether the surface renders in an overlay is tailored\n to the needs of the ambient chat dialog. As the feature matures, consider separating concerns. */}\n <Dialog.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 <Dialog.Overlay blockAlign={dialogBlockAlign}>\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} />\n </Dialog.Overlay>\n )}\n </Dialog.Root>\n\n {/* Global toasts. */}\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open) => {\n if (!open) {\n onDismissToast(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, 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 } from '@dxos/app-framework';\n\nimport { layoutAppliesTopbar, useBreakpoints } from '../../util';\nimport { ToggleSidebarButton } from '../Sidebar';\nimport { fixedSidebarToggleStyles } from '../fragments';\n\nexport const ContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint);\n return (\n <div\n role='none'\n className='grid place-items-center p-8 relative bg-deck'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}\n </div>\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 { fixedInsetFlexLayout } from '@dxos/react-ui-theme';\n\nimport { Fallback } from './Fallback';\nimport { SURFACE_PREFIX } from './constants';\n\nexport const Fullscreen = ({ id }: { id?: string }) => {\n const { graph } = useAppGraph();\n const fullScreenNode = useNode(graph, id);\n\n return (\n <div role='none' className={fixedInsetFlexLayout}>\n <Surface\n role='main'\n limit={1}\n fallback={Fallback}\n data={{\n subject: fullScreenNode?.data,\n component: id?.startsWith(SURFACE_PREFIX) ? id.slice(SURFACE_PREFIX.length) : undefined,\n }}\n />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const Fallback = () => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <div role='none' className='min-bs-screen is-full flex items-center justify-center p-8'>\n <p\n role='alert'\n className={mx(\n errorText,\n 'border border-error-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg',\n )}\n >\n {t('plugin error message')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const NAV_ID = 'NavTree';\nexport const SURFACE_PREFIX = 'surface:';\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 { DeprecatedFormContainer, DeprecatedFormInput } 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 <DeprecatedFormContainer>\n <DeprecatedFormInput label={t('settings enable deck label')}>\n <Input.Switch checked={settings.enableDeck} onCheckedChange={(checked) => (settings.enableDeck = checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={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.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={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.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings enable statusbar label')}>\n <Input.Switch\n checked={settings.enableStatusbar}\n onCheckedChange={(checked) => (settings.enableStatusbar = checked)}\n />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show hints label')}>\n <Input.Switch checked={settings.showHints} onCheckedChange={(checked) => (settings.showHints = checked)} />\n </DeprecatedFormInput>\n {!isSocket && (\n <DeprecatedFormInput label={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => (settings.enableNativeRedirect = checked)}\n />\n </DeprecatedFormInput>\n )}\n </DeprecatedFormContainer>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "Surface", "useTranslation", "mx", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useState", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useCapability", "useIntentDispatcher", "Main", "useTranslation", "toLocalizedString", "IconButton", "Tabs", "byPosition", "React", "useCapability", "IconButton", "useTranslation", "ToggleSidebarButton", "classNames", "variant", "layoutContext", "useCapability", "DeckCapabilities", "MutableDeckState", "t", "useTranslation", "DECK_PLUGIN", "IconButton", "iconOnly", "icon", "size", "label", "onClick", "sidebarState", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "complementarySidebarState", "tooltipSide", "undefined", "React", "Fragment", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "LayoutAction", "Surface", "createIntent", "useCapability", "useAppGraph", "useIntentDispatcher", "debounce", "useNode", "ATTENDABLE_PATH_SEPARATOR", "useAttendableAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "React", "useEffect", "useState", "useTranslation", "descriptionText", "mx", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "createIntent", "LayoutAction", "Surface", "useAppGraph", "useIntentDispatcher", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "React", "forwardRef", "useCallback", "createIntent", "useIntentDispatcher", "invariant", "Button", "ButtonGroup", "Icon", "Tooltip", "useTranslation", "PlankControl", "icon", "label", "props", "React", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "span", "className", "Icon", "size", "Portal", "Content", "side", "plankControlSpacing", "PlankCompanionControls", "forwardRef", "primary", "forwardedRef", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleCloseCompanion", "useCallback", "invariant", "createIntent", "DeckAction", "ChangeCompanion", "companion", "div", "ref", "onClick", "classNames", "PlankControls", "children", "capabilities", "isSolo", "pin", "close", "buttonClassNames", "ButtonGroup", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "data-testid", "mx", "soloInlinePadding", "sidebarToggleStyles", "fixedSidebarToggleStyles", "mx", "fixedComplementarySidebarToggleStyles", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "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", "cancelAnimationFrame", "attendableId", "capabilities", "useMemo", "deck", "solo", "incrementStart", "incrementEnd", "companion", "length", "variant", "parseEntryId", "sigilActions", "undefined", "filter", "a", "handleAction", "useCallback", "action", "data", "caller", "handlePlankAction", "eventType", "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", "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", "isSolo", "close", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "DECK_PLUGIN", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionText", "length", "PlankError", "id", "part", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "PlankHeading", "pending", "PlankLoading", "useEffect", "ACTION_GROUP_TYPE", "ACTION_TYPE", "getGraph", "expandNodeActions", "node", "graph", "getGraph", "expand", "ACTION_GROUP_TYPE", "ACTION_TYPE", "useNodeActionExpander", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "useMainContext", "useMainSize", "navigationSidebarState", "complementarySidebarState", "useMainContext", "UNKNOWN_ID", "PlankImpl", "memo", "id", "node", "part", "path", "order", "active", "layoutMode", "companioned", "primary", "companions", "settings", "dispatchPromise", "dispatch", "useIntentDispatcher", "deck", "popoverAnchorId", "scrollIntoView", "useCapability", "DeckCapabilities", "DeckState", "rootElement", "useRef", "canResize", "Root", "startsWith", "StackItem", "attendableAttrs", "useAttendableAttributes", "index", "findIndex", "entryId", "length", "canIncrementStart", "undefined", "canIncrementEnd", "variant", "parseEntryId", "sizeKey", "split", "ATTENDABLE_PATH_SEPARATOR", "size", "plankSizing", "setSize", "useCallback", "debounce", "nextSize", "createIntent", "DeckAction", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "focusable", "querySelector", "preventScroll", "behavior", "inline", "LayoutAction", "ScrollIntoView", "subject", "isSolo", "isAttendable", "sizeAttrs", "useMainSize", "data", "useMemo", "companionTo", "placeholder", "React", "PlankLoading", "className", "mx", "mainIntrinsicSize", "railGridHorizontal", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "role", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "ResizeHandle", "SplitFrame", "children", "div", "Plank", "props", "graph", "useAppGraph", "useNode", "useCompanions", "currentCompanion", "find", "companionId", "Fragment", "label", "ns", "DECK_PLUGIN", "getCompanionId", "id", "_", "companionId", "split", "ATTENDABLE_PATH_SEPARATOR", "useDeckCompanions", "graph", "useAppGraph", "companions", "nodes", "root", "type", "DECK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "ComplementarySidebar", "current", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "layout", "useCapability", "DeckCapabilities", "MutableDeckState", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "activeCompanion", "find", "companion", "at", "activeId", "internalValue", "setInternalValue", "useState", "useEffect", "handleTabClick", "useCallback", "event", "nextValue", "currentTarget", "getAttribute", "complementarySidebarState", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject", "data", "useMemo", "React", "Main", "classNames", "Tabs", "Root", "orientation", "verticalVariant", "value", "div", "role", "className", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "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", "useCapability", "DeckCapabilities", "DeckState", "breakpoint", "useBreakpoints", "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", "useCallback", "useEffect", "useMemo", "useRef", "Fragment", "useState", "Capabilities", "LayoutAction", "Surface", "createIntent", "useCapability", "useIntentDispatcher", "usePluginManager", "AttentionCapabilities", "AlertDialog", "Dialog", "NaturalDialog", "Main", "Popover", "useMediaQuery", "useOnTransition", "Stack", "StackContext", "DEFAULT_HORIZONTAL_SIZE", "mainPaddingTransitions", "React", "Surface", "useAppGraph", "useNode", "useAttended", "ActiveNode", "id", "useAttended", "graph", "useAppGraph", "activeNode", "useNode", "useNodeActionExpander", "React", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "Surface", "ContentEmpty", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "React", "div", "role", "className", "data-testid", "Surface", "ToggleSidebarButton", "variant", "classNames", "fixedSidebarToggleStyles", "React", "Surface", "useAppGraph", "useNode", "fixedInsetFlexLayout", "React", "useTranslation", "errorText", "mx", "Fallback", "t", "useTranslation", "DECK_PLUGIN", "React", "div", "role", "className", "p", "mx", "errorText", "SURFACE_PREFIX", "Fullscreen", "id", "graph", "useAppGraph", "fullScreenNode", "useNode", "React", "div", "role", "className", "fixedInsetFlexLayout", "Surface", "limit", "fallback", "Fallback", "data", "subject", "component", "startsWith", "SURFACE_PREFIX", "slice", "length", "undefined", "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", "dialogOpen", "dialogContent", "dialogBlockAlign", "dialogType", "popoverOpen", "popoverContent", "popoverAnchorId", "deck", "toasts", "active", "activeCompanions", "fullscreen", "solo", "plankSizing", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "pluginManager", "usePluginManager", "scrollLeftRef", "useRef", "deckRef", "delayedPopoverVisibility", "setDelayedPopoverVisibility", "useState", "useEffect", "setTimeout", "attended", "untracked", "attention", "requestCapability", "AttentionCapabilities", "Attention", "current", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "ssr", "shouldRevert", "getMode", "createIntent", "LayoutAction", "SetLayoutMode", "part", "subject", "options", "mode", "revert", "enableDeck", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "layoutMode", "useOnTransition", "handleScroll", "event", "currentTarget", "target", "isEmpty", "padding", "useMemo", "overscroll", "calculateOverscroll", "mainPosition", "Dialog", "AlertDialog", "NaturalDialog", "handlePopoverOpenChange", "nextOpen", "undefined", "popoverSide", "handlePopoverClose", "itemsCount", "reduce", "acc", "entryId", "Popover", "Root", "modal", "open", "onOpenChange", "ActiveNode", "Fullscreen", "id", "Main", "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", "companionId", "StackContext", "Provider", "rail", "Topbar", "StatusBar", "showHints", "Portal", "side", "onEscapeKeyDown", "Viewport", "Surface", "data", "limit", "Arrow", "fallback", "PlankContentError", "placeholder", "blockAlign", "toast", "Toast", "React", "Input", "Select", "useTranslation", "DeprecatedFormContainer", "DeprecatedFormInput", "isSocket", "globalThis", "__args", "DeckSettings", "settings", "t", "useTranslation", "DECK_PLUGIN", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "enableDeck", "onCheckedChange", "Select", "Root", "disabled", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "overscroll", "OverscrollOptions", "option", "enableStatusbar", "showHints", "enableNativeRedirect"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { LayoutAction } from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\n\nimport { DECK_PLUGIN } from './meta';\n\nexport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nexport const PLANK_COMPANION_TYPE = 'dxos.org/plugin/deck/plank-companion';\nexport const DECK_COMPANION_TYPE = 'dxos.org/plugin/deck/deck-companion';\n\n// TODO(Zan): In the future we should consider adding new planks adjacent to the attended plank.\nexport const NewPlankPositions = ['start', 'end'] as const;\nexport type NewPlankPositioning = (typeof NewPlankPositions)[number];\n\nexport const OverscrollOptions = ['none', 'centering'] as const;\nexport type Overscroll = (typeof OverscrollOptions)[number];\n\nexport type Part = 'solo' | 'deck' | 'complementary';\nexport type ResolvedPart = Part | 'solo-primary' | 'solo-companion';\n\nexport const DeckSettingsSchema = S.Struct({\n showHints: S.optional(S.Boolean),\n enableDeck: S.optional(S.Boolean),\n enableNativeRedirect: S.optional(S.Boolean),\n enableStatusbar: S.optional(S.Boolean),\n newPlankPositioning: S.optional(S.Literal(...NewPlankPositions)),\n overscroll: S.optional(S.Literal(...OverscrollOptions)),\n}).pipe(S.mutable);\nexport type DeckSettingsProps = S.Schema.Type<typeof DeckSettingsSchema>;\n\nexport const PlankSizing = S.Record({ key: S.String, value: S.Number });\nexport type PlankSizing = S.Schema.Type<typeof PlankSizing>;\n\n// State of an individual deck.\nexport const DeckState = S.Struct({\n /** If false, the deck has not yet left solo mode and new planks should be soloed. */\n initialized: S.Boolean,\n active: S.mutable(S.Array(S.String)),\n // TODO(wittjosiah): Piping into both mutable and optional caused invalid typescript output.\n activeCompanions: S.optional(S.mutable(S.Record({ key: S.String, value: S.String }))),\n inactive: S.mutable(S.Array(S.String)),\n solo: S.optional(S.String),\n fullscreen: S.Boolean,\n plankSizing: S.mutable(PlankSizing),\n companionFrameSizing: S.mutable(PlankSizing),\n});\nexport type DeckState = S.Schema.Type<typeof DeckState>;\n\nexport const defaultDeck: DeckState = {\n initialized: false,\n active: [],\n activeCompanions: {},\n inactive: [],\n solo: undefined,\n fullscreen: false,\n plankSizing: {},\n companionFrameSizing: {},\n};\n\nconst LayoutMode = S.Literal('deck', 'solo', 'fullscreen');\nexport type LayoutMode = S.Schema.Type<typeof LayoutMode>;\nexport const isLayoutMode = (value: any): value is LayoutMode => S.is(LayoutMode)(value);\n\nexport const getMode = (deck: DeckState): LayoutMode => {\n if (deck.solo) {\n return deck.fullscreen ? 'fullscreen' : 'solo';\n }\n\n return 'deck';\n};\n\n// State of the deck plugin.\nexport const DeckPluginState = S.Struct({\n sidebarState: S.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarState: S.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarPanel: S.optional(S.String),\n\n dialogOpen: S.Boolean,\n /** Data to be passed to the dialog Surface. */\n dialogContent: S.optional(S.Any),\n dialogBlockAlign: S.optional(S.Literal('start', 'center', 'end')),\n dialogType: S.optional(S.Literal('default', 'alert')),\n\n popoverOpen: S.Boolean,\n popoverSide: S.optional(S.Literal('top', 'right', 'bottom', 'left')),\n /** Data to be passed to the popover Surface. */\n popoverContent: S.optional(S.Any),\n popoverAnchorId: S.optional(S.String),\n\n toasts: S.mutable(S.Array(LayoutAction.Toast)),\n currentUndoId: S.optional(S.String),\n\n activeDeck: S.String,\n previousDeck: S.String,\n decks: S.mutable(S.Record({ key: S.String, value: S.mutable(DeckState) })),\n previousMode: S.mutable(S.Record({ key: S.String, value: LayoutMode })),\n deck: S.mutable(DeckState),\n\n /** The identifier of a component to scroll into view when it is mounted. */\n scrollIntoView: S.optional(S.String),\n}).pipe(S.mutable);\n\nexport type DeckPluginState = S.Schema.Type<typeof DeckPluginState>;\n\nexport const DECK_ACTION = `${DECK_PLUGIN}/action`;\n\nexport namespace DeckAction {\n const PartAdjustmentSchema = S.Union(\n S.Literal('close').annotations({ description: 'Close the plank.' }),\n S.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n S.Literal('solo').annotations({ description: 'Solo the plank.' }),\n S.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n S.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n );\n export type PartAdjustment = S.Schema.Type<typeof PartAdjustmentSchema>;\n export const Adjustment = S.mutable(S.Struct({ id: S.String, type: PartAdjustmentSchema }));\n export type Adjustment = S.Schema.Type<typeof Adjustment>;\n\n // An atomic transaction to apply to the deck, describing which element to move to which location.\n export class Adjust extends S.TaggedClass<Adjust>()(`${DECK_ACTION}/adjust`, {\n input: Adjustment,\n output: S.Void,\n }) {}\n\n export class UpdatePlankSize extends S.TaggedClass<UpdatePlankSize>()(`${DECK_ACTION}/update-plank-size`, {\n input: S.Struct({\n id: S.String,\n size: S.Number,\n }),\n output: S.Void,\n }) {}\n\n export class ChangeCompanion extends S.TaggedClass<ChangeCompanion>()(`${DECK_ACTION}/change-companion`, {\n input: S.Struct({\n primary: S.String,\n companion: S.Union(S.String, S.Null),\n }),\n output: S.Void,\n }) {}\n}\n"],
5
- "mappings": "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",
6
- "names": ["LayoutAction", "S", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "DECK_COMPANION_TYPE", "NewPlankPositions", "OverscrollOptions", "DeckSettingsSchema", "S", "Struct", "showHints", "optional", "Boolean", "enableDeck", "enableNativeRedirect", "enableStatusbar", "newPlankPositioning", "Literal", "overscroll", "pipe", "mutable", "PlankSizing", "Record", "key", "String", "value", "Number", "DeckState", "initialized", "active", "Array", "activeCompanions", "inactive", "solo", "fullscreen", "plankSizing", "companionFrameSizing", "defaultDeck", "undefined", "LayoutMode", "isLayoutMode", "is", "getMode", "deck", "DeckPluginState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "dialogOpen", "dialogContent", "Any", "dialogBlockAlign", "dialogType", "popoverOpen", "popoverSide", "popoverContent", "popoverAnchorId", "toasts", "LayoutAction", "Toast", "currentUndoId", "activeDeck", "previousDeck", "decks", "previousMode", "scrollIntoView", "DECK_ACTION", "DECK_PLUGIN", "DeckAction", "PartAdjustmentSchema", "Union", "annotations", "description", "Adjustment", "id", "type", "Adjust", "TaggedClass", "input", "output", "Void", "UpdatePlankSize", "size", "ChangeCompanion", "primary", "companion", "Null"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport { pipe } from 'effect';\n\nimport {\n Capabilities,\n createResolver,\n contributes,\n IntentAction,\n LayoutAction,\n type PluginsContext,\n createIntent,\n chain,\n} from '@dxos/app-framework';\nimport { getTypename, S } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { isReactiveObject } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { type Node } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { byPosition, isNonNullable } from '@dxos/util';\n\nimport { DeckCapabilities } from './capabilities';\nimport { closeEntry, createEntryId, incrementPlank, openEntry } from '../layout';\nimport { DECK_PLUGIN } from '../meta';\nimport {\n DeckAction,\n type LayoutMode,\n type DeckSettingsProps,\n isLayoutMode,\n getMode,\n defaultDeck,\n PLANK_COMPANION_TYPE,\n} from '../types';\nimport { setActive } from '../util';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: IntentAction.ShowUndo,\n resolve: (data) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n const { undoPromise: undo } = context.requestCapability(Capabilities.IntentDispatcher);\n\n // TODO(wittjosiah): Support undoing further back than the last action.\n if (layout.currentUndoId) {\n layout.toasts = layout.toasts.filter((toast) => toast.id !== layout.currentUndoId);\n }\n layout.currentUndoId = `${IntentAction.ShowUndo._tag}-${Date.now()}`;\n layout.toasts = [\n ...layout.toasts,\n {\n id: layout.currentUndoId,\n title: data.message ?? ['undo available label', { ns: DECK_PLUGIN }],\n duration: 10_000,\n actionLabel: ['undo action label', { ns: DECK_PLUGIN }],\n actionAlt: ['undo action alt', { ns: DECK_PLUGIN }],\n closeLabel: ['undo close label', { ns: DECK_PLUGIN }],\n onAction: () => undo(),\n },\n ];\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateSidebar.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.UpdateSidebar.fields.input> =>\n S.is(LayoutAction.UpdateSidebar.fields.input)(data),\n resolve: ({ options }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n const next = options?.state ?? layout.sidebarState;\n if (next !== layout.sidebarState) {\n layout.sidebarState = next;\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateComplementary.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.UpdateComplementary.fields.input> =>\n S.is(LayoutAction.UpdateComplementary.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n\n if (layout.complementarySidebarPanel !== subject) {\n layout.complementarySidebarPanel = subject;\n }\n\n const next = subject ? 'expanded' : options?.state ?? layout.complementarySidebarState;\n if (next !== layout.complementarySidebarState) {\n layout.complementarySidebarState = next;\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateDialog.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.UpdateDialog.fields.input> =>\n S.is(LayoutAction.UpdateDialog.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n layout.dialogOpen = options.state ?? Boolean(subject);\n layout.dialogContent = subject ? { component: subject, props: options.props } : null;\n layout.dialogBlockAlign = options.blockAlign ?? 'center';\n layout.dialogType = options.type ?? 'default';\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdatePopover.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.UpdatePopover.fields.input> =>\n S.is(LayoutAction.UpdatePopover.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n layout.popoverOpen = options.state ?? Boolean(subject);\n layout.popoverContent = subject ? { component: subject, props: options.props } : null;\n layout.popoverAnchorId = options.anchorId;\n layout.popoverSide = options.side;\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.AddToast.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.AddToast.fields.input> =>\n S.is(LayoutAction.AddToast.fields.input)(data),\n resolve: ({ subject }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n layout.toasts.push(subject);\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.SetLayoutMode.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is S.Schema.Type<typeof LayoutAction.SetLayoutMode.fields.input> => {\n if (!S.is(LayoutAction.SetLayoutMode.fields.input)(data)) {\n return false;\n }\n\n if ('mode' in data.options) {\n return isLayoutMode(data.options.mode);\n }\n\n return true;\n },\n resolve: ({ subject, options }) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n\n const setMode = (mode: LayoutMode) => {\n const deck = state.deck;\n const current = deck.solo ? [deck.solo] : deck.active;\n // When un-soloing, the solo entry is added to the deck.\n const next = (\n mode !== 'deck' ? [subject ?? deck.solo ?? deck.active[0]] : [...deck.active, deck.solo]\n ).filter(isNonNullable);\n\n const removed = current.filter((id) => !next.includes(id));\n const closed = Array.from(new Set([...deck.inactive.filter((id) => !next.includes(id)), ...removed]));\n deck.inactive = closed;\n\n if (mode !== 'deck' && next[0]) {\n deck.solo = next[0];\n } else if (mode === 'deck' && deck.solo) {\n deck.solo = undefined;\n deck.initialized = true;\n }\n\n if (mode === 'fullscreen' && !deck.fullscreen) {\n deck.fullscreen = true;\n } else if (mode !== 'fullscreen' && deck.fullscreen) {\n deck.fullscreen = false;\n }\n };\n\n return batch(() => {\n if ('mode' in options) {\n const current = getMode(state.deck);\n if (current !== options.mode) {\n state.previousMode[state.activeDeck] = current;\n }\n setMode(options.mode as LayoutMode);\n } else if ('revert' in options) {\n const last = state.previousMode[state.activeDeck];\n setMode(last ?? 'solo');\n } else {\n log.warn('Invalid layout mode', options);\n }\n });\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.SwitchWorkspace.fields.input> =>\n S.is(LayoutAction.SwitchWorkspace.fields.input)(data),\n resolve: ({ subject }) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n batch(() => {\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n if (!state.activeDeck.startsWith('!')) {\n state.previousDeck = state.activeDeck;\n }\n state.activeDeck = subject;\n if (!state.decks[subject]) {\n state.decks[subject] = { ...defaultDeck };\n }\n });\n\n const first = state.deck.solo ? state.deck.solo : state.deck.active[0];\n if (first) {\n return {\n intents: [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: first })],\n };\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.RevertWorkspace.fields.input> =>\n S.is(LayoutAction.RevertWorkspace.fields.input)(data),\n resolve: () => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n return {\n intents: [createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: state.previousDeck })],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.Open.fields.input> =>\n S.is(LayoutAction.Open.fields.input)(data),\n resolve: ({ subject, options }) => {\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;\n\n const previouslyOpenIds = new Set<string>(state.deck.solo ? [state.deck.solo] : state.deck.active);\n batch(() => {\n const next = state.deck.solo\n ? (subject as string[]).map((id) => createEntryId(id, options?.variant))\n : subject.reduce(\n (acc, entryId) =>\n openEntry(acc, entryId, {\n key: options?.key,\n positioning: options?.positioning ?? settings?.newPlankPositioning,\n pivotId: options?.pivotId,\n variant: options?.variant,\n }),\n state.deck.active,\n );\n\n return setActive({ next, state, attention });\n });\n\n const ids = state.deck.solo ? [state.deck.solo] : state.deck.active;\n const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));\n\n return {\n intents: [\n ...(options?.scrollIntoView !== false\n ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: newlyOpen[0] ?? subject[0] })]\n : []),\n createIntent(LayoutAction.Expose, { part: 'navigation', subject: newlyOpen[0] ?? subject[0] }),\n ...newlyOpen.map((subjectId) => {\n const active = graph?.findNode(subjectId)?.data;\n const typename = isReactiveObject(active) ? getTypename(active) : undefined;\n return createIntent(ObservabilityAction.SendEvent, {\n name: 'navigation.activate',\n properties: {\n subjectId,\n typename,\n },\n });\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.Close.fields.input> =>\n S.is(LayoutAction.Close.fields.input)(data),\n resolve: ({ subject }) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const active = state.deck.solo ? [state.deck.solo] : state.deck.active;\n const next = subject.reduce((acc, id) => closeEntry(acc, id), active);\n const toAttend = setActive({ next, state, attention });\n\n const clearCompanionIntents = subject\n .filter((id) => state.deck.activeCompanions && id in state.deck.activeCompanions)\n .map((primary) => createIntent(DeckAction.ChangeCompanion, { primary, companion: null }));\n\n return {\n intents: [\n ...clearCompanionIntents,\n ...(toAttend ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: toAttend })] : []),\n ],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.Set.fields.input> =>\n S.is(LayoutAction.Set.fields.input)(data),\n resolve: ({ subject }) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const toAttend = setActive({ next: subject as string[], state, attention });\n return {\n intents: toAttend ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: toAttend })] : [],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is S.Schema.Type<typeof LayoutAction.ScrollIntoView.fields.input> =>\n S.is(LayoutAction.ScrollIntoView.fields.input)(data),\n resolve: ({ subject }) => {\n const layout = context.requestCapability(DeckCapabilities.MutableDeckState);\n layout.scrollIntoView = subject;\n },\n }),\n createResolver({\n intent: DeckAction.UpdatePlankSize,\n resolve: (data) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n state.deck.plankSizing[data.id] = data.size;\n },\n }),\n createResolver({\n intent: DeckAction.ChangeCompanion,\n resolve: (data) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n // TODO(thure): Reactivity only works when creating a lexically new `activeCompanions`… Are these not proxy objects?\n if (data.companion === null) {\n const { [data.primary]: _, ...nextActiveCompanions } = state.deck.activeCompanions ?? {};\n state.deck.activeCompanions = nextActiveCompanions;\n } else {\n invariant(data.companion !== data.primary);\n state.deck.activeCompanions = {\n ...state.deck.activeCompanions,\n [data.primary]: data.companion,\n };\n }\n },\n }),\n createResolver({\n intent: DeckAction.Adjust,\n resolve: (adjustment) => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n\n return batch(() => {\n if (adjustment.type === 'increment-end' || adjustment.type === 'increment-start') {\n setActive({\n next: incrementPlank(state.deck.active, adjustment),\n state,\n attention,\n });\n }\n\n if (adjustment.type === 'companion') {\n const node = graph.findNode(adjustment.id);\n const [companion] = node\n ? graph\n .nodes(node, { filter: (n): n is Node<any> => n.type === PLANK_COMPANION_TYPE })\n .toSorted((a, b) => byPosition(a.properties, b.properties))\n : [];\n if (companion) {\n return {\n intents: [\n // TODO(wittjosiah): This should remember the previously selected companion.\n createIntent(DeckAction.ChangeCompanion, { primary: adjustment.id, companion: companion.id }),\n ],\n };\n }\n }\n\n if (adjustment.type === 'solo') {\n const entryId = adjustment.id;\n if (!state.deck.solo) {\n // Solo the entry.\n return {\n intents: [\n createIntent(LayoutAction.SetLayoutMode, {\n part: 'mode',\n subject: entryId,\n options: { mode: 'solo' },\n }),\n ],\n };\n } else {\n // Un-solo the current entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'deck' } }),\n chain(LayoutAction.Open, { part: 'main', subject: [entryId] }),\n ),\n ],\n };\n }\n }\n });\n },\n }),\n ]);\n"],
5
- "mappings": "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",
6
- "names": ["batch", "pipe", "Capabilities", "createResolver", "contributes", "IntentAction", "LayoutAction", "createIntent", "chain", "getTypename", "S", "invariant", "isReactiveObject", "log", "AttentionCapabilities", "ObservabilityAction", "byPosition", "isNonNullable", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "IntentAction", "ShowUndo", "resolve", "data", "layout", "requestCapability", "DeckCapabilities", "MutableDeckState", "undoPromise", "undo", "IntentDispatcher", "currentUndoId", "toasts", "filter", "toast", "id", "_tag", "Date", "now", "title", "message", "ns", "DECK_PLUGIN", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "LayoutAction", "UpdateLayout", "S", "is", "UpdateSidebar", "fields", "input", "options", "next", "state", "sidebarState", "UpdateComplementary", "subject", "complementarySidebarPanel", "complementarySidebarState", "UpdateDialog", "dialogOpen", "Boolean", "dialogContent", "component", "props", "dialogBlockAlign", "blockAlign", "dialogType", "type", "UpdatePopover", "popoverOpen", "popoverContent", "popoverAnchorId", "anchorId", "popoverSide", "side", "AddToast", "push", "SetLayoutMode", "isLayoutMode", "mode", "setMode", "deck", "current", "solo", "active", "isNonNullable", "removed", "includes", "closed", "Array", "from", "Set", "inactive", "undefined", "initialized", "fullscreen", "batch", "getMode", "previousMode", "activeDeck", "last", "log", "warn", "SwitchWorkspace", "startsWith", "previousDeck", "decks", "defaultDeck", "first", "intents", "createIntent", "ScrollIntoView", "part", "RevertWorkspace", "Open", "graph", "AppGraph", "attention", "AttentionCapabilities", "Attention", "settings", "requestCapabilities", "SettingsStore", "getStore", "value", "previouslyOpenIds", "map", "createEntryId", "variant", "reduce", "acc", "entryId", "openEntry", "key", "positioning", "newPlankPositioning", "pivotId", "setActive", "ids", "newlyOpen", "i", "has", "scrollIntoView", "Expose", "subjectId", "findNode", "typename", "isReactiveObject", "getTypename", "ObservabilityAction", "SendEvent", "name", "properties", "Close", "closeEntry", "toAttend", "clearCompanionIntents", "activeCompanions", "primary", "DeckAction", "ChangeCompanion", "companion", "UpdatePlankSize", "plankSizing", "size", "_", "nextActiveCompanions", "invariant", "Adjust", "adjustment", "incrementPlank", "node", "nodes", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "pipe", "chain"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/settings.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { create } from '@dxos/live-object';\n\nimport { DECK_PLUGIN } from '../meta';\nimport { DeckSettingsSchema, type DeckSettingsProps } from '../types';\n\nexport default () => {\n const settings = create<DeckSettingsProps>({\n showHints: false,\n enableDeck: true,\n enableNativeRedirect: false,\n enableStatusbar: false,\n newPlankPositioning: 'start',\n overscroll: 'none',\n });\n\n return contributes(Capabilities.Settings, {\n schema: DeckSettingsSchema,\n prefix: DECK_PLUGIN,\n value: settings,\n });\n};\n"],
5
- "mappings": ";;;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,cAAc;AAKvB,IAAA,mBAAe,MAAA;AACb,QAAMC,WAAWC,OAA0B;IACzCC,WAAW;IACXC,YAAY;IACZC,sBAAsB;IACtBC,iBAAiB;IACjBC,qBAAqB;IACrBC,YAAY;EACd,CAAA;AAEA,SAAOC,YAAYC,aAAaC,UAAU;IACxCC,QAAQC;IACRC,QAAQC;IACRC,OAAOf;EACT,CAAA;AACF;",
6
- "names": ["Capabilities", "contributes", "create", "settings", "create", "showHints", "enableDeck", "enableNativeRedirect", "enableStatusbar", "newPlankPositioning", "overscroll", "contributes", "Capabilities", "Settings", "schema", "DeckSettingsSchema", "prefix", "DECK_PLUGIN", "value"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/state.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { create } from '@dxos/live-object';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { type SidebarState } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from './capabilities';\nimport { DECK_PLUGIN } from '../meta';\nimport { getMode, type DeckState, type DeckPluginState, defaultDeck } from '../types';\n\nconst boolean = /true|false/;\n\n// TODO(thure, 18 Feb 2025): Remove after the next release.\n\nconst migrateSidebarStateDefaults = {\n [`${DECK_PLUGIN}/complementary-sidebar-state`]: 'expanded',\n [`${DECK_PLUGIN}/sidebar-state`]: 'collapsed',\n};\n\nconst migrateSidebarState = () => {\n Object.entries(migrateSidebarStateDefaults).forEach(([key, defaultValue]) => {\n if (boolean.test(localStorage.getItem(key) ?? 'never')) {\n localStorage.setItem(key, defaultValue);\n }\n });\n};\n\nexport default () => {\n migrateSidebarState();\n\n const state = new LocalStorageStore<DeckPluginState>(DECK_PLUGIN, {\n sidebarState: 'expanded',\n complementarySidebarState: 'collapsed',\n complementarySidebarPanel: undefined,\n dialogContent: null,\n dialogOpen: false,\n dialogBlockAlign: undefined,\n dialogType: undefined,\n popoverContent: null,\n popoverAnchorId: undefined,\n popoverOpen: false,\n toasts: [],\n currentUndoId: undefined,\n activeDeck: 'default',\n previousDeck: 'default',\n decks: {\n default: { ...defaultDeck },\n },\n get deck() {\n const deck = this.decks[this.activeDeck];\n invariant(deck, `Deck not found: ${this.activeDeck}`);\n return deck;\n },\n previousMode: {},\n scrollIntoView: undefined,\n });\n\n state\n .prop({ key: 'sidebarState', type: LocalStorageStore.enum<SidebarState>() })\n .prop({ key: 'complementarySidebarState', type: LocalStorageStore.enum<SidebarState>() })\n .prop({ key: 'complementarySidebarPanel', type: LocalStorageStore.string({ allowUndefined: true }) })\n .prop({ key: 'decks', type: LocalStorageStore.json<Record<string, DeckState>>() })\n .prop({ key: 'activeDeck', type: LocalStorageStore.string() })\n .prop({ key: 'previousDeck', type: LocalStorageStore.string() });\n\n const layout = create<Capabilities.Layout>({\n get mode() {\n return getMode(state.values.deck);\n },\n get dialogOpen() {\n return state.values.dialogOpen;\n },\n get sidebarOpen() {\n return state.values.sidebarState === 'expanded';\n },\n get complementarySidebarOpen() {\n return state.values.complementarySidebarState === 'expanded';\n },\n get workspace() {\n return state.values.activeDeck;\n },\n get active() {\n return state.values.deck.solo ? [state.values.deck.solo] : state.values.deck.active;\n },\n get inactive() {\n return state.values.deck.inactive;\n },\n get scrollIntoView() {\n return state.values.scrollIntoView;\n },\n });\n\n return [\n contributes(DeckCapabilities.DeckState, state.values, () => state.close()),\n contributes(Capabilities.Layout, layout),\n ];\n};\n"],
5
- "mappings": ";;;;;;;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,iBAAiB;AAC1B,SAASC,cAAc;AACvB,SAASC,yBAAyB;;AAOlC,IAAMC,UAAU;AAIhB,IAAMC,8BAA8B;EAClC,CAAC,GAAGC,WAAAA,8BAAyC,GAAG;EAChD,CAAC,GAAGA,WAAAA,gBAA2B,GAAG;AACpC;AAEA,IAAMC,sBAAsB,MAAA;AAC1BC,SAAOC,QAAQJ,2BAAAA,EAA6BK,QAAQ,CAAC,CAACC,KAAKC,YAAAA,MAAa;AACtE,QAAIR,QAAQS,KAAKC,aAAaC,QAAQJ,GAAAA,KAAQ,OAAA,GAAU;AACtDG,mBAAaE,QAAQL,KAAKC,YAAAA;IAC5B;EACF,CAAA;AACF;AAEA,IAAA,gBAAe,MAAA;AACbL,sBAAAA;AAEA,QAAMU,QAAQ,IAAIC,kBAAmCZ,aAAa;IAChEa,cAAc;IACdC,2BAA2B;IAC3BC,2BAA2BC;IAC3BC,eAAe;IACfC,YAAY;IACZC,kBAAkBH;IAClBI,YAAYJ;IACZK,gBAAgB;IAChBC,iBAAiBN;IACjBO,aAAa;IACbC,QAAQ,CAAA;IACRC,eAAeT;IACfU,YAAY;IACZC,cAAc;IACdC,OAAO;MACLC,SAAS;QAAE,GAAGC;MAAY;IAC5B;IACA,IAAIC,OAAO;AACT,YAAMA,OAAO,KAAKH,MAAM,KAAKF,UAAU;AACvCM,gBAAUD,MAAM,mBAAmB,KAAKL,UAAU,IAAE;;;;;;;;;AACpD,aAAOK;IACT;IACAE,cAAc,CAAC;IACfC,gBAAgBlB;EAClB,CAAA;AAEAL,QACGwB,KAAK;IAAE9B,KAAK;IAAgB+B,MAAMxB,kBAAkByB,KAAI;EAAiB,CAAA,EACzEF,KAAK;IAAE9B,KAAK;IAA6B+B,MAAMxB,kBAAkByB,KAAI;EAAiB,CAAA,EACtFF,KAAK;IAAE9B,KAAK;IAA6B+B,MAAMxB,kBAAkB0B,OAAO;MAAEC,gBAAgB;IAAK,CAAA;EAAG,CAAA,EAClGJ,KAAK;IAAE9B,KAAK;IAAS+B,MAAMxB,kBAAkB4B,KAAI;EAA8B,CAAA,EAC/EL,KAAK;IAAE9B,KAAK;IAAc+B,MAAMxB,kBAAkB0B,OAAM;EAAG,CAAA,EAC3DH,KAAK;IAAE9B,KAAK;IAAgB+B,MAAMxB,kBAAkB0B,OAAM;EAAG,CAAA;AAEhE,QAAMG,SAASC,OAA4B;IACzC,IAAIC,OAAO;AACT,aAAOC,QAAQjC,MAAMkC,OAAOd,IAAI;IAClC;IACA,IAAIb,aAAa;AACf,aAAOP,MAAMkC,OAAO3B;IACtB;IACA,IAAI4B,cAAc;AAChB,aAAOnC,MAAMkC,OAAOhC,iBAAiB;IACvC;IACA,IAAIkC,2BAA2B;AAC7B,aAAOpC,MAAMkC,OAAO/B,8BAA8B;IACpD;IACA,IAAIkC,YAAY;AACd,aAAOrC,MAAMkC,OAAOnB;IACtB;IACA,IAAIuB,SAAS;AACX,aAAOtC,MAAMkC,OAAOd,KAAKmB,OAAO;QAACvC,MAAMkC,OAAOd,KAAKmB;UAAQvC,MAAMkC,OAAOd,KAAKkB;IAC/E;IACA,IAAIE,WAAW;AACb,aAAOxC,MAAMkC,OAAOd,KAAKoB;IAC3B;IACA,IAAIjB,iBAAiB;AACnB,aAAOvB,MAAMkC,OAAOX;IACtB;EACF,CAAA;AAEA,SAAO;IACLkB,YAAYC,iBAAiBC,WAAW3C,MAAMkC,QAAQ,MAAMlC,MAAM4C,MAAK,CAAA;IACvEH,YAAYI,aAAaC,QAAQhB,MAAAA;;AAErC;",
6
- "names": ["Capabilities", "contributes", "invariant", "create", "LocalStorageStore", "boolean", "migrateSidebarStateDefaults", "DECK_PLUGIN", "migrateSidebarState", "Object", "entries", "forEach", "key", "defaultValue", "test", "localStorage", "getItem", "setItem", "state", "LocalStorageStore", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "undefined", "dialogContent", "dialogOpen", "dialogBlockAlign", "dialogType", "popoverContent", "popoverAnchorId", "popoverOpen", "toasts", "currentUndoId", "activeDeck", "previousDeck", "decks", "default", "defaultDeck", "deck", "invariant", "previousMode", "scrollIntoView", "prop", "type", "enum", "string", "allowUndefined", "json", "layout", "create", "mode", "getMode", "values", "sidebarOpen", "complementarySidebarOpen", "workspace", "active", "solo", "inactive", "contributes", "DeckCapabilities", "DeckState", "close", "Capabilities", "Layout"]
7
- }
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const Fullscreen: ({ id }: {
3
- id?: string;
4
- }) => React.JSX.Element;
5
- //# sourceMappingURL=Fullscreen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Fullscreen.d.ts","sourceRoot":"","sources":["../../../../../src/components/DeckLayout/Fullscreen.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,eAAO,MAAM,UAAU,WAAY;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,sBAiBjD,CAAC"}
@@ -1,31 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { Surface, useAppGraph } from '@dxos/app-framework';
8
- import { useNode } from '@dxos/plugin-graph';
9
- import { fixedInsetFlexLayout } from '@dxos/react-ui-theme';
10
-
11
- import { Fallback } from './Fallback';
12
- import { SURFACE_PREFIX } from './constants';
13
-
14
- export const Fullscreen = ({ id }: { id?: string }) => {
15
- const { graph } = useAppGraph();
16
- const fullScreenNode = useNode(graph, id);
17
-
18
- return (
19
- <div role='none' className={fixedInsetFlexLayout}>
20
- <Surface
21
- role='main'
22
- limit={1}
23
- fallback={Fallback}
24
- data={{
25
- subject: fullScreenNode?.data,
26
- component: id?.startsWith(SURFACE_PREFIX) ? id.slice(SURFACE_PREFIX.length) : undefined,
27
- }}
28
- />
29
- </div>
30
- );
31
- };