@dxos/plugin-deck 0.7.5-labs.5f04cf6 → 0.7.5-labs.8a82073

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 (214) hide show
  1. package/dist/lib/browser/{app-graph-builder-67VRUD5K.mjs → app-graph-builder-CI6ZFMNL.mjs} +57 -31
  2. package/dist/lib/browser/app-graph-builder-CI6ZFMNL.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-GEX6W2R5.mjs → check-app-scheme-S3EYUPMF.mjs} +3 -3
  4. package/dist/lib/browser/{check-app-scheme-GEX6W2R5.mjs.map → check-app-scheme-S3EYUPMF.mjs.map} +2 -2
  5. package/dist/lib/browser/chunk-M2L53AIH.mjs +126 -0
  6. package/dist/lib/browser/chunk-M2L53AIH.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-JQJ5UWVB.mjs → chunk-N7TEPFVR.mjs} +3 -2
  8. package/dist/lib/browser/{chunk-JQJ5UWVB.mjs.map → chunk-N7TEPFVR.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-QMS57ZG2.mjs +1119 -0
  10. package/dist/lib/browser/chunk-QMS57ZG2.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-SV4WMVWO.mjs +24 -0
  12. package/dist/lib/browser/chunk-SV4WMVWO.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-5VFDMW5M.mjs → chunk-YQ2GWTDU.mjs} +2 -2
  14. package/dist/lib/browser/chunk-YQ2GWTDU.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +36 -82
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs +494 -0
  18. package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-root-AWYSGU4Q.mjs → react-root-SRNBW2D6.mjs} +10 -14
  21. package/dist/lib/browser/react-root-SRNBW2D6.mjs.map +7 -0
  22. package/dist/lib/browser/react-surface-CSBYRVOM.mjs +38 -0
  23. package/dist/lib/browser/react-surface-CSBYRVOM.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-FNWW6WIJ.mjs → settings-WACNLCPB.mjs} +6 -7
  25. package/dist/lib/browser/settings-WACNLCPB.mjs.map +7 -0
  26. package/dist/lib/browser/state-VPOYUKK6.mjs +117 -0
  27. package/dist/lib/browser/state-VPOYUKK6.mjs.map +7 -0
  28. package/dist/lib/browser/{tools-4XY7KFQF.mjs → tools-5LDJNU56.mjs} +14 -9
  29. package/dist/lib/browser/tools-5LDJNU56.mjs.map +7 -0
  30. package/dist/lib/browser/types.mjs +16 -4
  31. package/dist/lib/browser/url-handler-HLF42IHP.mjs +70 -0
  32. package/dist/lib/browser/url-handler-HLF42IHP.mjs.map +7 -0
  33. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/{layout/app-graph-builder.d.ts → app-graph-builder.d.ts} +22 -22
  35. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  36. package/dist/types/src/capabilities/capabilities.d.ts +132 -3
  37. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  38. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -0
  39. package/dist/types/src/capabilities/index.d.ts +188 -3
  40. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  42. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  43. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  44. package/dist/types/src/capabilities/set-active.d.ts +9 -0
  45. package/dist/types/src/capabilities/set-active.d.ts.map +1 -0
  46. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  47. package/dist/types/src/capabilities/state.d.ts +76 -0
  48. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/{navigation/tools.d.ts → tools.d.ts} +1 -0
  50. package/dist/types/src/capabilities/tools.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
  52. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  53. package/dist/types/src/components/DeckLayout/ComplementarySidebar.d.ts.map +1 -1
  54. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  55. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +1 -4
  56. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  57. package/dist/types/src/components/DeckLayout/Fullscreen.d.ts.map +1 -1
  58. package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts +3 -3
  59. package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts.map +1 -1
  60. package/dist/types/src/components/DeckLayout/Plank.d.ts +8 -6
  61. package/dist/types/src/components/DeckLayout/Plank.d.ts.map +1 -1
  62. package/dist/types/src/components/DeckLayout/PlankControls.d.ts +2 -2
  63. package/dist/types/src/components/DeckLayout/PlankControls.d.ts.map +1 -1
  64. package/dist/types/src/components/DeckLayout/PlankError.d.ts +4 -3
  65. package/dist/types/src/components/DeckLayout/PlankError.d.ts.map +1 -1
  66. package/dist/types/src/components/DeckLayout/Sidebar.d.ts.map +1 -1
  67. package/dist/types/src/components/DeckLayout/SidebarButton.d.ts +5 -3
  68. package/dist/types/src/components/DeckLayout/SidebarButton.d.ts.map +1 -1
  69. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +1 -1
  70. package/dist/types/src/components/DeckLayout/Toast.d.ts +2 -2
  71. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  72. package/dist/types/src/components/fragments.d.ts +2 -0
  73. package/dist/types/src/components/fragments.d.ts.map +1 -1
  74. package/dist/types/src/components/index.d.ts +0 -2
  75. package/dist/types/src/components/index.d.ts.map +1 -1
  76. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  77. package/dist/types/src/hooks/useNode.d.ts.map +1 -1
  78. package/dist/types/src/layout.d.ts +5 -19
  79. package/dist/types/src/layout.d.ts.map +1 -1
  80. package/dist/types/src/meta.d.ts +1 -0
  81. package/dist/types/src/meta.d.ts.map +1 -1
  82. package/dist/types/src/translations.d.ts +3 -3
  83. package/dist/types/src/types.d.ts +107 -2
  84. package/dist/types/src/types.d.ts.map +1 -1
  85. package/dist/types/src/util/index.d.ts +2 -1
  86. package/dist/types/src/util/index.d.ts.map +1 -1
  87. package/dist/types/src/util/layoutAppliesTopbar.d.ts +2 -0
  88. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -0
  89. package/dist/types/src/util/useHoistStatusbar.d.ts.map +1 -1
  90. package/dist/types/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +31 -31
  92. package/src/DeckPlugin.ts +17 -63
  93. package/src/capabilities/{layout/app-graph-builder.ts → app-graph-builder.ts} +36 -28
  94. package/src/capabilities/capabilities.ts +4 -3
  95. package/src/capabilities/{navigation/check-app-scheme.ts → check-app-scheme.ts} +2 -2
  96. package/src/capabilities/index.ts +12 -3
  97. package/src/capabilities/intent-resolver.ts +350 -0
  98. package/src/capabilities/{layout/react-root.tsx → react-root.tsx} +7 -11
  99. package/src/capabilities/react-surface.tsx +31 -0
  100. package/src/capabilities/set-active.ts +43 -0
  101. package/src/capabilities/{settings/settings.ts → settings.ts} +4 -5
  102. package/src/capabilities/state.ts +102 -0
  103. package/src/capabilities/{navigation/tools.ts → tools.ts} +10 -6
  104. package/src/capabilities/url-handler.ts +63 -0
  105. package/src/components/DeckLayout/ActiveNode.tsx +2 -3
  106. package/src/components/DeckLayout/ComplementarySidebar.tsx +120 -69
  107. package/src/components/DeckLayout/ContentEmpty.tsx +7 -10
  108. package/src/components/DeckLayout/DeckLayout.tsx +103 -61
  109. package/src/components/DeckLayout/Fullscreen.tsx +2 -3
  110. package/src/components/DeckLayout/NodePlankHeading.tsx +57 -65
  111. package/src/components/DeckLayout/Plank.tsx +32 -41
  112. package/src/components/DeckLayout/PlankControls.tsx +11 -10
  113. package/src/components/DeckLayout/PlankError.tsx +6 -5
  114. package/src/components/DeckLayout/Sidebar.tsx +17 -20
  115. package/src/components/DeckLayout/SidebarButton.tsx +25 -31
  116. package/src/components/DeckLayout/StatusBar.tsx +5 -11
  117. package/src/components/DeckLayout/Toast.tsx +2 -2
  118. package/src/components/LayoutSettings.tsx +8 -8
  119. package/src/components/fragments.ts +8 -0
  120. package/src/components/index.ts +0 -2
  121. package/src/hooks/useMainSize.ts +3 -3
  122. package/src/hooks/useNode.ts +3 -1
  123. package/src/layout.ts +43 -212
  124. package/src/meta.ts +1 -0
  125. package/src/translations.ts +8 -8
  126. package/src/types.ts +88 -2
  127. package/src/util/index.ts +2 -1
  128. package/src/util/layoutAppliesTopbar.ts +7 -0
  129. package/src/util/useHoistStatusbar.ts +17 -8
  130. package/dist/lib/browser/app-graph-builder-67VRUD5K.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-2PJNBVCY.mjs +0 -39
  132. package/dist/lib/browser/chunk-2PJNBVCY.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-4C2AFTET.mjs +0 -186
  134. package/dist/lib/browser/chunk-4C2AFTET.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-5VFDMW5M.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-KY5WXIXY.mjs +0 -44
  137. package/dist/lib/browser/chunk-KY5WXIXY.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-WUMAJGVA.mjs +0 -1052
  139. package/dist/lib/browser/chunk-WUMAJGVA.mjs.map +0 -7
  140. package/dist/lib/browser/deck-PLCSKPGL.mjs +0 -26
  141. package/dist/lib/browser/deck-PLCSKPGL.mjs.map +0 -7
  142. package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs +0 -152
  143. package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs.map +0 -7
  144. package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs +0 -249
  145. package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs.map +0 -7
  146. package/dist/lib/browser/location-AIO6V3MK.mjs +0 -35
  147. package/dist/lib/browser/location-AIO6V3MK.mjs.map +0 -7
  148. package/dist/lib/browser/react-context-G6PDXUI5.mjs +0 -32
  149. package/dist/lib/browser/react-context-G6PDXUI5.mjs.map +0 -7
  150. package/dist/lib/browser/react-root-AWYSGU4Q.mjs.map +0 -7
  151. package/dist/lib/browser/react-surface-CLUABFNX.mjs +0 -28
  152. package/dist/lib/browser/react-surface-CLUABFNX.mjs.map +0 -7
  153. package/dist/lib/browser/settings-FNWW6WIJ.mjs.map +0 -7
  154. package/dist/lib/browser/state-7I5BD7SE.mjs +0 -34
  155. package/dist/lib/browser/state-7I5BD7SE.mjs.map +0 -7
  156. package/dist/lib/browser/tools-4XY7KFQF.mjs.map +0 -7
  157. package/dist/lib/browser/url-handler-JRAQRY73.mjs +0 -76
  158. package/dist/lib/browser/url-handler-JRAQRY73.mjs.map +0 -7
  159. package/dist/types/src/capabilities/layout/app-graph-builder.d.ts.map +0 -1
  160. package/dist/types/src/capabilities/layout/deck.d.ts +0 -4
  161. package/dist/types/src/capabilities/layout/deck.d.ts.map +0 -1
  162. package/dist/types/src/capabilities/layout/index.d.ts +0 -229
  163. package/dist/types/src/capabilities/layout/index.d.ts.map +0 -1
  164. package/dist/types/src/capabilities/layout/intent-resolver.d.ts.map +0 -1
  165. package/dist/types/src/capabilities/layout/react-context.d.ts +0 -8
  166. package/dist/types/src/capabilities/layout/react-context.d.ts.map +0 -1
  167. package/dist/types/src/capabilities/layout/react-root.d.ts.map +0 -1
  168. package/dist/types/src/capabilities/layout/state.d.ts +0 -42
  169. package/dist/types/src/capabilities/layout/state.d.ts.map +0 -1
  170. package/dist/types/src/capabilities/navigation/check-app-scheme.d.ts.map +0 -1
  171. package/dist/types/src/capabilities/navigation/index.d.ts +0 -6
  172. package/dist/types/src/capabilities/navigation/index.d.ts.map +0 -1
  173. package/dist/types/src/capabilities/navigation/intent-resolver.d.ts +0 -4
  174. package/dist/types/src/capabilities/navigation/intent-resolver.d.ts.map +0 -1
  175. package/dist/types/src/capabilities/navigation/location.d.ts +0 -4
  176. package/dist/types/src/capabilities/navigation/location.d.ts.map +0 -1
  177. package/dist/types/src/capabilities/navigation/set-location.d.ts +0 -10
  178. package/dist/types/src/capabilities/navigation/set-location.d.ts.map +0 -1
  179. package/dist/types/src/capabilities/navigation/tools.d.ts.map +0 -1
  180. package/dist/types/src/capabilities/navigation/url-handler.d.ts.map +0 -1
  181. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  182. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  183. package/dist/types/src/capabilities/settings/react-surface.d.ts.map +0 -1
  184. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  185. package/dist/types/src/components/DeckContext.d.ts +0 -11
  186. package/dist/types/src/components/DeckContext.d.ts.map +0 -1
  187. package/dist/types/src/components/LayoutContext.d.ts +0 -5
  188. package/dist/types/src/components/LayoutContext.d.ts.map +0 -1
  189. package/dist/types/src/layout.test.d.ts +0 -2
  190. package/dist/types/src/layout.test.d.ts.map +0 -1
  191. package/dist/types/src/util/layout-parts.d.ts +0 -7
  192. package/dist/types/src/util/layout-parts.d.ts.map +0 -1
  193. package/src/capabilities/layout/deck.ts +0 -25
  194. package/src/capabilities/layout/index.ts +0 -12
  195. package/src/capabilities/layout/intent-resolver.ts +0 -128
  196. package/src/capabilities/layout/react-context.tsx +0 -26
  197. package/src/capabilities/layout/state.ts +0 -32
  198. package/src/capabilities/navigation/index.ts +0 -11
  199. package/src/capabilities/navigation/intent-resolver.ts +0 -216
  200. package/src/capabilities/navigation/location.ts +0 -28
  201. package/src/capabilities/navigation/set-location.ts +0 -38
  202. package/src/capabilities/navigation/url-handler.ts +0 -67
  203. package/src/capabilities/settings/index.ts +0 -8
  204. package/src/capabilities/settings/react-surface.tsx +0 -23
  205. package/src/components/DeckContext.ts +0 -19
  206. package/src/components/LayoutContext.ts +0 -12
  207. package/src/layout.test.ts +0 -380
  208. package/src/util/layout-parts.ts +0 -12
  209. /package/dist/types/src/capabilities/{navigation/check-app-scheme.d.ts → check-app-scheme.d.ts} +0 -0
  210. /package/dist/types/src/capabilities/{layout/intent-resolver.d.ts → intent-resolver.d.ts} +0 -0
  211. /package/dist/types/src/capabilities/{layout/react-root.d.ts → react-root.d.ts} +0 -0
  212. /package/dist/types/src/capabilities/{settings/react-surface.d.ts → react-surface.d.ts} +0 -0
  213. /package/dist/types/src/capabilities/{settings/settings.d.ts → settings.d.ts} +0 -0
  214. /package/dist/types/src/capabilities/{navigation/url-handler.d.ts → url-handler.d.ts} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/DeckLayout/constants.ts", "../../../src/components/LayoutContext.ts", "../../../src/components/DeckContext.ts", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/hooks/useNode.ts", "../../../src/hooks/useNodeActionExpander.ts", "../../../src/hooks/useMainSize.ts", "../../../src/components/DeckLayout/ComplementarySidebar.tsx", "../../../src/components/DeckLayout/PlankError.tsx", "../../../src/components/DeckLayout/NodePlankHeading.tsx", "../../../src/components/DeckLayout/PlankControls.tsx", "../../../src/components/DeckLayout/SidebarButton.tsx", "../../../src/components/fragments.ts", "../../../src/components/DeckLayout/PlankLoading.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/Fullscreen.tsx", "../../../src/components/DeckLayout/Fallback.tsx", "../../../src/components/DeckLayout/Plank.tsx", "../../../src/components/DeckLayout/Sidebar.tsx", "../../../src/components/DeckLayout/Banner.tsx", "../../../src/util/useHoistStatusbar.ts", "../../../src/components/DeckLayout/StatusBar.tsx", "../../../src/components/DeckLayout/Toast.tsx", "../../../src/components/DeckLayout/Topbar.tsx", "../../../src/components/LayoutSettings.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport const NAV_ID = 'NavTree';\nexport const SURFACE_PREFIX = 'surface:';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext } from 'react';\n\nimport type { Layout } from '@dxos/app-framework';\nimport { raise } from '@dxos/debug';\n\nexport const LayoutContext: Context<Layout | null> = createContext<Layout | null>(null);\n\nexport const useLayout = (): Layout => useContext(LayoutContext) ?? raise(new Error('Missing LayoutContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext } from 'react';\n\nimport { type LayoutMode } from '@dxos/app-framework';\nimport { raise } from '@dxos/debug';\n\nexport type PlankSizing = Record<string, number>;\nexport type DeckContextType = {\n plankSizing: PlankSizing;\n currentUndoId: string | undefined;\n layoutModeHistory: LayoutMode[];\n};\n\nexport const DeckContext: Context<DeckContextType | null> = createContext<DeckContextType | null>(null);\n\nexport const useDeckContext = (): DeckContextType => useContext(DeckContext) ?? raise(new Error('Missing DeckContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { untracked } from '@preact/signals-core';\nimport React, { useCallback, useEffect, useMemo, useRef, type UIEvent, Fragment } from 'react';\n\nimport {\n firstIdInPart,\n Surface,\n usePluginManager,\n type LayoutParts,\n type Toast as ToastSchema,\n} from '@dxos/app-framework';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { AlertDialog, Dialog as NaturalDialog, Main, Popover, useOnTransition, type MainProps } 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 { ComplementarySidebar, type ComplementarySidebarProps } from './ComplementarySidebar';\nimport { ContentEmpty } from './ContentEmpty';\nimport { Fullscreen } from './Fullscreen';\nimport { Plank } from './Plank';\nimport { Sidebar } from './Sidebar';\nimport { StatusBar } from './StatusBar';\nimport { Toast } from './Toast';\nimport { Topbar } from './Topbar';\nimport { type Overscroll } from '../../types';\nimport { calculateOverscroll, useBreakpoints } from '../../util';\nimport { useHoistStatusbar } from '../../util/useHoistStatusbar';\nimport { useDeckContext } from '../DeckContext';\nimport { useLayout } from '../LayoutContext';\n\nexport type DeckLayoutProps = {\n layoutParts: LayoutParts;\n toasts: ToastSchema[];\n overscroll: Overscroll;\n showHints: boolean;\n onDismissToast: (id: string) => void;\n} & Pick<ComplementarySidebarProps, 'panels'>;\n\nconst PlankSeparator = ({ index }: { index: number }) =>\n index > 0 ? <span role='separator' className='row-span-2 bg-deck is-4' style={{ gridColumn: index * 2 }} /> : null;\n\nexport const DeckLayout = ({ layoutParts, toasts, overscroll, showHints, panels, onDismissToast }: DeckLayoutProps) => {\n const context = useLayout();\n const {\n layoutMode,\n sidebarOpen,\n complementarySidebarOpen,\n dialogOpen,\n dialogContent,\n dialogBlockAlign,\n dialogType,\n popoverOpen,\n popoverContent,\n popoverAnchorId,\n } = context;\n const breakpoint = useBreakpoints();\n const hoistStatusbar = useHoistStatusbar(breakpoint);\n const { plankSizing } = useDeckContext();\n const pluginManager = usePluginManager();\n const fullScreenSlug = useMemo(() => firstIdInPart(layoutParts, 'fullScreen'), [layoutParts]);\n\n const scrollLeftRef = useRef<number | null>();\n const deckRef = useRef<HTMLDivElement>(null);\n\n const isSoloModeLoaded = layoutMode === 'solo' && Boolean(layoutParts.solo?.[0]);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n // 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 = isSoloModeLoaded ? firstIdInPart(layoutParts, 'solo') : firstIdInPart(layoutParts, 'main');\n if (attended.length === 0 && firstId) {\n // TODO(wittjosiah): Focusing the type button is a workaround.\n // If the plank is directly focused on first load the focus ring appears.\n document.querySelector<HTMLElement>(`article[data-attendable-id=\"${firstId}\"] button`)?.focus();\n }\n }, []);\n\n /**\n * Clear scroll restoration state if the window is resized\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n\n useOnTransition(layoutMode, (mode) => mode !== 'deck', 'deck', restoreScroll);\n\n /**\n * Save scroll position as the user scrolls\n */\n const handleScroll = useCallback(\n (event: UIEvent) => {\n if (layoutMode === 'deck' && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [layoutMode],\n );\n\n const isEmpty = (layoutParts.main?.length ?? 0) === 0 && (layoutParts.solo?.length ?? 0) === 0;\n\n const padding = useMemo(() => {\n if (layoutMode === 'deck' && overscroll === 'centering') {\n return calculateOverscroll(layoutParts.main?.length ?? 0);\n }\n return {};\n }, [layoutMode, overscroll, layoutParts.main]);\n\n const Dialog = dialogType === 'alert' ? AlertDialog : NaturalDialog;\n\n return (\n <Popover.Root\n modal\n open={!!(popoverAnchorId && popoverOpen)}\n onOpenChange={(nextOpen) => {\n if (nextOpen && popoverAnchorId) {\n context.popoverOpen = true;\n } else {\n context.popoverOpen = false;\n context.popoverAnchorId = undefined;\n }\n }}\n >\n <ActiveNode />\n\n {layoutMode === 'fullscreen' && <Fullscreen id={fullScreenSlug} />}\n\n {layoutMode !== 'fullscreen' && (\n <Main.Root\n navigationSidebarOpen={context.sidebarOpen}\n onNavigationSidebarOpenChange={(next) => (context.sidebarOpen = next)}\n complementarySidebarOpen={context.complementarySidebarOpen}\n onComplementarySidebarOpenChange={(next) => (context.complementarySidebarOpen = next)}\n >\n {/* Left sidebar. */}\n <Sidebar />\n\n {/* Right sidebar. */}\n <ComplementarySidebar panels={panels} current={layoutParts.complementary?.[0].id} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content handlesFocus>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n classNames={[\n 'grid !block-start-[env(safe-area-inset-top)] lg:!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'lg:block-end-[--statusbar-size]',\n ]}\n handlesFocus\n style={\n {\n '--dx-main-sidebarWidth': sidebarOpen ? 'var(--nav-sidebar-size)' : '0px',\n '--dx-main-complementaryWidth': complementarySidebarOpen\n ? 'var(--complementary-sidebar-size)'\n : '0px',\n '--dx-main-contentFirstWidth': `${plankSizing[layoutParts.main?.[0]?.id ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-contentLastWidth': `${plankSizing[layoutParts.main?.[(layoutParts.main?.length ?? 1) - 1]?.id ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainProps['style']\n }\n >\n <div\n role='none'\n className={!isSoloModeLoaded ? 'relative bg-deck overflow-hidden' : 'sr-only'}\n {...(isSoloModeLoaded && { inert: '' })}\n >\n <Stack\n orientation='horizontal'\n size='contain'\n classNames={['absolute inset-block-0 -inset-inline-px', mainPaddingTransitions]}\n onScroll={handleScroll}\n itemsCount={2 * (layoutParts.main?.length ?? 0) - 1}\n style={padding}\n ref={deckRef}\n >\n {layoutParts.main?.map((layoutEntry, index) => (\n <Fragment key={layoutEntry.id}>\n <PlankSeparator index={index} />\n <Plank\n entry={layoutEntry}\n layoutParts={layoutParts}\n part='main'\n layoutMode={layoutMode}\n order={index * 2 + 1}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n <div\n role='none'\n className={isSoloModeLoaded ? 'relative bg-deck overflow-hidden' : 'sr-only'}\n {...(!isSoloModeLoaded && { inert: '' })}\n >\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <Plank entry={layoutParts.solo?.[0]} layoutParts={layoutParts} part='solo' layoutMode={layoutMode} />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Status bar. */}\n {breakpoint === 'desktop' && <Topbar />}\n {hoistStatusbar && <StatusBar showHints={showHints} />}\n </Main.Root>\n )}\n\n {/* Global popovers. */}\n <Popover.Portal>\n <Popover.Content\n onEscapeKeyDown={() => {\n context.popoverOpen = false;\n context.popoverAnchorId = undefined;\n }}\n >\n <Popover.Viewport>\n <Surface role='popover' data={popoverContent} limit={1} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n\n {/* Global dialog. */}\n <Dialog.Root open={dialogOpen} onOpenChange={(nextOpen) => (context.dialogOpen = nextOpen)}>\n <Dialog.Overlay blockAlign={dialogBlockAlign}>\n <Surface role='dialog' data={dialogContent} limit={1} />\n </Dialog.Overlay>\n </Dialog.Root>\n\n {/* Global toasts. */}\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open) => {\n if (!open) {\n onDismissToast(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </Popover.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { useNode, useNodeActionExpander } from '../../hooks';\n\n// TODO(burdon): Factor out to effect in plugin set document title.\nexport const ActiveNode = () => {\n const [id] = useAttended();\n const { graph } = useGraph();\n const activeNode = useNode(graph, id);\n useNodeActionExpander(activeNode);\n\n return (\n <div role='none' className='sr-only'>\n {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.\n Probably this lives in React-land currently in order to access translations? */}\n <Surface role='document-title' data={{ subject: activeNode }} limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Graph, type Node } from '@dxos/plugin-graph';\n\n/**\n * React hook to get a node from the graph.\n *\n * @param graph Graph to find the node in.\n * @param id Id of the node to find.\n * @param timeout Optional timeout in milliseconds to wait for the node to be found.\n * @returns Node if found, undefined otherwise.\n */\n// TODO(wittjosiah): Factor out.\nexport const useNode = <T = any>(graph: Graph, id?: string, timeout?: number): Node<T> | undefined => {\n const [nodeState, setNodeState] = useState<Node<T> | undefined>(id ? graph.findNode(id, false) : undefined);\n\n useEffect(() => {\n if (!id && nodeState) {\n setNodeState(undefined);\n }\n\n if (nodeState?.id === id || !id) {\n return;\n }\n\n // Set timeout did not seem to effectively not block the UI thread.\n const frame = requestAnimationFrame(async () => {\n try {\n const node = await graph.waitForNode(id, timeout);\n if (node) {\n setNodeState(node);\n }\n } catch {}\n });\n\n return () => cancelAnimationFrame(frame);\n }, [graph, id, timeout, nodeState?.id]);\n\n return nodeState;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { ACTION_GROUP_TYPE, ACTION_TYPE, getGraph, type Node } from '@dxos/plugin-graph';\n\nconst expandNodeActions = async (node: Node) => {\n const graph = getGraph(node);\n await graph.expand(node, 'outbound', ACTION_GROUP_TYPE);\n await graph.expand(node, 'outbound', ACTION_TYPE);\n};\n\nexport const useNodeActionExpander = (node?: Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n void expandNodeActions(node);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { navigationSidebarOpen, complementarySidebarOpen } = useMainContext('DeckPluginPlank');\n return {\n 'data-sidebar-inline-start-state': navigationSidebarOpen ? 'open' : 'closed',\n 'data-sidebar-inline-end-state': complementarySidebarOpen ? 'open' : 'closed',\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, NavigationAction, SLUG_PATH_SEPARATOR, Surface, useIntentDispatcher } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Main, ScrollArea, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { railGridHorizontal, StackContext, StackItem } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { PlankContentError } from './PlankError';\nimport { PlankLoading } from './PlankLoading';\nimport { CloseComplementarySidebarButton } from './SidebarButton';\nimport { useNode, useNodeActionExpander } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type Panel } from '../../types';\nimport { useLayout } from '../LayoutContext';\n\nexport type ComplementarySidebarProps = {\n panels: Panel[];\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ panels, current }: ComplementarySidebarProps) => {\n const { popoverAnchorId } = useLayout();\n const attended = useAttended();\n const panelIds = useMemo(() => panels.map((p) => p.id), [panels]);\n const activePanelId = panelIds.find((p) => p === current) ?? panels[0].id;\n const activeEntryId = attended[0] ? `${attended[0]}${SLUG_PATH_SEPARATOR}${activePanelId}` : undefined;\n const { graph } = useGraph();\n const node = useNode(graph, activeEntryId);\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n useNodeActionExpander(node);\n\n const [internalValue, setInternalValue] = useState(activePanelId);\n\n useEffect(() => {\n setInternalValue(activePanelId);\n }, [activePanelId]);\n\n const handleValueChange = useCallback(\n (nextValue: string) => {\n setInternalValue(nextValue);\n void dispatch(createIntent(NavigationAction.Open, { activeParts: { complementary: nextValue } }));\n },\n [dispatch],\n );\n\n // TODO(burdon): Scroll area should be controlled by surface.\n return (\n <Main.ComplementarySidebar classNames='lg:block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]'>\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <div role='none' className={mx(railGridHorizontal, 'grid grid-cols-[100%] bs-full')}>\n <Tabs.Root\n orientation='horizontal'\n value={internalValue}\n onValueChange={handleValueChange}\n attendableId={attended[0]}\n classNames='contents'\n >\n <StackItem.Heading classNames='border-be border-separator grid grid-cols-[1fr_min-content] items-stretch'>\n <ScrollArea.Root classNames='flex-1 min-is-0'>\n <ScrollArea.Viewport>\n <Tabs.Tablist classNames='bs-[--rail-content] is-min items-stretch pis-[max(.5rem,env(safe-area-inset-left))] sm:pis-2'>\n {panels.map((panel) => (\n <Tabs.Tab key={panel.id} value={panel.id} classNames='!min-bs-0'>\n {toLocalizedString(panel.label, t)}\n </Tabs.Tab>\n ))}\n </Tabs.Tablist>\n <ScrollArea.Scrollbar orientation='horizontal'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <CloseComplementarySidebarButton />\n </StackItem.Heading>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n {panels.map((panel) => (\n <Tabs.Tabpanel key={panel.id} value={panel.id} classNames='pbe-[env(safe-area-inset-bottom)]'>\n {panel.id === activePanelId && node && (\n <Surface\n key={activeEntryId}\n role={`complementary--${activePanelId}`}\n data={{\n id: activeEntryId,\n subject: node.properties.object ?? node.properties.space,\n popoverAnchorId,\n }}\n fallback={PlankContentError}\n placeholder={<PlankLoading />}\n />\n )}\n </Tabs.Tabpanel>\n ))}\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Tabs.Root>\n </div>\n </StackContext.Provider>\n </Main.ComplementarySidebar>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type LayoutCoordinate } from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { NodePlankHeading } from './NodePlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const PlankContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='overflow-auto p-8 attention-surface grid place-items-center'>\n <p\n role='alert'\n className={mx(\n descriptionText,\n 'break-words border border-dashed border-separator rounded-lg p-8',\n errorString.length < 256 && 'text-lg',\n )}\n >\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n layoutCoordinate,\n node,\n error,\n}: {\n layoutCoordinate: LayoutCoordinate;\n node?: Node;\n error?: Error;\n}) => {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n setTimeout(() => setTimedOut(true), 5e3);\n }, []);\n return (\n <>\n <NodePlankHeading coordinate={layoutCoordinate} node={node} pending={!timedOut} />\n {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, memo, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n LayoutAction,\n NavigationAction,\n SLUG_PATH_SEPARATOR,\n Surface,\n useIntentDispatcher,\n type LayoutCoordinate,\n} from '@dxos/app-framework';\nimport { type Node, useGraph } from '@dxos/plugin-graph';\nimport { Icon, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\n\nimport { PlankControls } from './PlankControls';\nimport { ToggleComplementarySidebarButton, ToggleSidebarButton } from './SidebarButton';\nimport { DECK_PLUGIN } from '../../meta';\nimport { useBreakpoints } from '../../util';\nimport { soloInlinePadding } from '../fragments';\n\nexport type NodePlankHeadingProps = {\n coordinate: LayoutCoordinate;\n node?: Node;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n pending?: boolean;\n actions?: StackItemSigilAction[];\n};\n\nexport const NodePlankHeading = memo(\n ({\n coordinate,\n node,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n pending,\n actions = [],\n }: NodePlankHeadingProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { graph } = useGraph();\n const icon = node?.properties?.icon ?? 'ph--placeholder--regular';\n const label = pending\n ? t('pending heading')\n : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: DECK_PLUGIN }], t);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;\n const breakpoint = useBreakpoints();\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n node && graph.actions(node);\n });\n\n return () => cancelAnimationFrame(frame);\n }, [node]);\n\n const layoutPart = coordinate.part;\n // NOTE(Zan): Node ids may now contain a path like `${space}:${id}~comments`\n const attendableId = coordinate.entryId.split(SLUG_PATH_SEPARATOR).at(0);\n const capabilities = useMemo(\n () => ({\n solo: layoutPart === 'solo' || layoutPart === 'main',\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n }),\n [breakpoint, layoutPart, canIncrementStart, canIncrementEnd],\n );\n\n return (\n <StackItem.Heading\n classNames={[\n 'plb-1 border-be border-separator items-stretch gap-1',\n layoutPart === 'solo' ? soloInlinePadding : 'pli-1',\n ]}\n >\n <ActionRoot>\n {node ? (\n <StackItem.Sigil\n icon={icon}\n related={layoutPart === 'complementary'}\n attendableId={attendableId}\n triggerLabel={t('actions menu label')}\n actions={[actions, graph.actions(node)].filter((a) => a.length > 0)}\n onAction={(action) =>\n typeof action.data === 'function' && action.data?.({ node: action as Node, caller: DECK_PLUGIN })\n }\n >\n <Surface role='menu-footer' data={{ subject: node.data }} />\n </StackItem.Sigil>\n ) : (\n <StackItem.SigilButton>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={5} />\n </StackItem.SigilButton>\n )}\n </ActionRoot>\n {breakpoint !== 'desktop' && <ToggleSidebarButton />}\n <TextTooltip text={label} onlyWhenTruncating>\n <StackItem.HeadingLabel\n attendableId={attendableId}\n related={layoutPart === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n {node && layoutPart !== 'complementary' && (\n // TODO(Zan): What are we doing with layout coordinate here?\n <Surface role='navbar-end' data={{ subject: node.data }} />\n )}\n {/* NOTE(thure): Pinning & unpinning are temporarily disabled */}\n <PlankControls\n capabilities={capabilities}\n isSolo={layoutPart === 'solo'}\n onClick={(eventType) => {\n if (!layoutPart) {\n return;\n }\n\n // TODO(Zan): Update this to use the new layout actions.\n if (eventType === 'solo') {\n return dispatch(\n createIntent(NavigationAction.Adjust, {\n type: eventType,\n layoutCoordinate: { part: 'main', entryId: coordinate.entryId },\n }),\n );\n } else if (eventType === 'close') {\n if (layoutPart === 'complementary') {\n return dispatch(createIntent(LayoutAction.SetLayout, { element: 'complementary', state: false }));\n } else {\n return dispatch(\n createIntent(NavigationAction.Close, { activeParts: { [layoutPart]: [coordinate.entryId] } }),\n );\n }\n } else {\n return dispatch(createIntent(NavigationAction.Adjust, { type: eventType, layoutCoordinate: coordinate }));\n }\n }}\n close={layoutPart === 'complementary' ? 'minify-end' : true}\n >\n <ToggleComplementarySidebarButton />\n </PlankControls>\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { type PartAdjustment } from '@dxos/app-framework';\nimport {\n Button,\n ButtonGroup,\n type ButtonGroupProps,\n type ButtonProps,\n Icon,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nexport type PlankControlHandler = (event: PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n solo?: boolean;\n};\n\nexport type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: PlankControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: PlankCapabilities;\n isSolo?: boolean;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' {...props}>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={4} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{label}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n// TODO(wittjosiah): Duplicate of stack LayoutControls?\n// Translations were to be duplicated between packages.\nexport const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(\n (\n { onClick, variant = 'default', capabilities: can, isSolo, pin, close = false, children, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const buttonClassNames = variant === 'hide-disabled' ? 'disabled:hidden !pli-2 !plb-3' : '!pli-2 !plb-3';\n\n return (\n <ButtonGroup {...props} ref={forwardedRef}>\n {pin && !isSolo && ['both', 'start'].includes(pin) && (\n <PlankControl\n label={t('pin start label')}\n variant='ghost'\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-start')}\n icon='ph--caret-line-left--regular'\n />\n )}\n\n {can.solo && (\n <PlankControl\n label={isSolo ? t('show deck plank label') : t('show solo plank label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('solo')}\n icon={isSolo ? 'ph--arrow-u-down-left--regular' : 'ph--arrows-out--regular'}\n />\n )}\n\n {!isSolo && can.solo && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!can.incrementStart}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-start')}\n icon='ph--caret-left--regular'\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!can.incrementEnd}\n classNames={buttonClassNames}\n onClick={() => onClick?.('increment-end')}\n icon='ph--caret-right--regular'\n />\n </>\n )}\n\n {pin && !isSolo && ['both', 'end'].includes(pin) && (\n <PlankControl\n label={t('pin end label')}\n classNames={buttonClassNames}\n onClick={() => onClick?.('pin-end')}\n icon='ph--caret-line-right--regular'\n />\n )}\n\n {close && !isSolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n onClick={() => onClick?.('close')}\n data-testid='plankHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { useLayout } from '../LayoutContext';\n\nexport const ToggleSidebarButton = () => {\n const layoutContext = useLayout();\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n variant='ghost'\n iconOnly\n icon='ph--sidebar--regular'\n size={4}\n label={t('open navigation sidebar label')}\n onClick={() => (layoutContext.sidebarOpen = !layoutContext.sidebarOpen)}\n classNames='!pli-2 order-first'\n />\n );\n};\n\nexport const CloseSidebarButton = () => {\n const layoutContext = useLayout();\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.sidebarOpen = false)}\n classNames='!rounded-none !pli-1 ch-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]'\n />\n );\n};\n\nexport const ToggleComplementarySidebarButton = () => {\n const layoutContext = useLayout();\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n iconOnly\n onClick={() => (layoutContext.complementarySidebarOpen = !layoutContext.complementarySidebarOpen)}\n variant='ghost'\n label={t('open complementary sidebar label')}\n classNames='!pli-2 !plb-3 [&>svg]:-scale-x-100'\n icon='ph--sidebar-simple--regular'\n size={4}\n />\n );\n};\n\nexport const CloseComplementarySidebarButton = () => {\n const layoutContext = useLayout();\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n iconOnly\n variant='ghost'\n size={4}\n icon='ph--caret-line-right--regular'\n label={t('close complementary sidebar label')}\n classNames='!rounded-none border-is border-separator ch-focus-ring-inset pie-2 lg:pie-[max(.5rem,env(safe-area-inset-right))]'\n onClick={() => (layoutContext.complementarySidebarOpen = false)}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport const soloInlinePadding =\n 'pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\n// TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259\nexport const PlankLoading = () => {\n return <div role='none' className='grid place-items-center attention-surface' />;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ToggleSidebarButton } from './SidebarButton';\nimport { soloInlinePadding } from '../fragments';\n\nexport const ContentEmpty = () => {\n return (\n <div\n role='none'\n className='min-bs-screen is-dvw sm:is-full p-8 grid grid-rows-[var(--rail-size)_1fr] lg:grid-rows-1'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <div role='toolbar' className={mx(soloInlinePadding, 'bs-[--rail-action] flex items-stretch lg:hidden')}>\n <ToggleSidebarButton />\n <span role='none' className='grow' />\n </div>\n <div role='none' className='grid place-items-center'>\n <Surface role='keyshortcuts' />\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { fixedInsetFlexLayout } from '@dxos/react-ui-theme';\n\nimport { Fallback } from './Fallback';\nimport { SURFACE_PREFIX } from './constants';\nimport { useNode } from '../../hooks';\n\nexport const Fullscreen = ({ id }: { id?: string }) => {\n const { graph } = useGraph();\n const fullScreenNode = useNode(graph, id);\n\n return (\n <div role='none' className={fixedInsetFlexLayout}>\n <Surface\n role='main'\n limit={1}\n fallback={Fallback}\n data={{\n subject: fullScreenNode?.data,\n component: id?.startsWith(SURFACE_PREFIX) ? id.slice(SURFACE_PREFIX.length) : undefined,\n }}\n />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const Fallback = () => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <div role='none' className='min-bs-screen is-full flex items-center justify-center p-8'>\n <p\n role='alert'\n className={mx(\n errorText,\n 'border border-error-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg',\n )}\n >\n {t('plugin error message')}\n </p>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type KeyboardEvent, memo, useCallback, useLayoutEffect, useMemo, useRef } from 'react';\n\nimport {\n createIntent,\n indexInPart,\n LayoutAction,\n partLength,\n Surface,\n useIntentDispatcher,\n type Layout,\n type LayoutCoordinate,\n type LayoutEntry,\n type LayoutPart,\n type LayoutParts,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { useAttendableAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/react-ui-theme';\n\nimport { NodePlankHeading } from './NodePlankHeading';\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankLoading } from './PlankLoading';\nimport { useNode, useMainSize } from '../../hooks';\nimport { DeckAction } from '../../types';\nimport { useDeckContext } from '../DeckContext';\nimport { useLayout } from '../LayoutContext';\n\nconst UNKNOWN_ID = 'unknown_id';\n\nexport type PlankProps = {\n entry?: LayoutEntry;\n layoutParts: LayoutParts;\n // TODO(wittjosiah): Remove. Pass in LayoutCoordinate instead of LayoutEntry.\n part: LayoutPart;\n layoutMode: Layout['layoutMode'];\n order?: number;\n};\n\nexport const Plank = memo(({ entry, layoutParts, part, layoutMode, order }: PlankProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const coordinate: LayoutCoordinate = useMemo(() => ({ part, entryId: entry?.id ?? UNKNOWN_ID }), [entry?.id, part]);\n const { popoverAnchorId, scrollIntoView } = useLayout();\n const { plankSizing } = useDeckContext();\n const { graph } = useGraph();\n const node = useNode(graph, entry?.id);\n const rootElement = useRef<HTMLDivElement | null>(null);\n const canResize = layoutMode === 'deck';\n const Root = part === 'solo' ? 'article' : StackItem.Root;\n\n const attendableAttrs = useAttendableAttributes(coordinate.entryId);\n const index = indexInPart(layoutParts, coordinate);\n const length = partLength(layoutParts, part);\n const canIncrementStart = part === 'main' && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = part === 'main' && index !== undefined && index < length - 1 && length !== undefined;\n\n const size = plankSizing?.[coordinate.entryId] as number | undefined;\n const setSize = useCallback(\n debounce((nextSize: number) => {\n return dispatch(createIntent(DeckAction.UpdatePlankSize, { id: coordinate.entryId, size: nextSize }));\n }, 200),\n [dispatch, coordinate.entryId],\n );\n\n // TODO(thure): Tabster’s focus group should handle moving focus to Main, but something is blocking it.\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.target === event.currentTarget && event.key === 'Escape') {\n rootElement.current?.closest('main')?.focus();\n }\n }, []);\n\n useLayoutEffect(() => {\n if (scrollIntoView === coordinate.entryId) {\n // TODO(wittjosiah): When focused on page load, the focus is always visible.\n // Forcing focus to something smaller than the plank prevents large focus ring in the interim.\n const focusable = rootElement.current?.querySelector('button') || rootElement.current;\n focusable?.focus({ preventScroll: true });\n layoutMode === 'deck' && focusable?.scrollIntoView({ behavior: 'smooth', inline: 'center' });\n // Clear the scroll into view state once it has been actioned.\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { id: undefined }));\n }\n }, [coordinate.entryId, scrollIntoView, layoutMode]);\n\n const isSolo = layoutMode === 'solo' && part === 'solo';\n const isAttendable = isSolo || (layoutMode === 'deck' && part === 'main');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n subject: node.data,\n path: entry?.path,\n coordinate,\n popoverAnchorId,\n },\n [node, node?.data, entry?.path, coordinate, popoverAnchorId],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const className = mx(\n 'attention-surface relative',\n isSolo && mainIntrinsicSize,\n isSolo && railGridHorizontal,\n isSolo ? 'grid absolute inset-0' : '!border-separator border-li',\n );\n\n return (\n <Root\n ref={rootElement}\n data-testid='deck.plank'\n tabIndex={0}\n {...(part === 'solo'\n ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id: entry?.id ?? 'never' },\n size,\n onSizeChange: setSize,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attendableAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n <NodePlankHeading\n coordinate={coordinate}\n node={node}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n />\n <Surface\n key={node.id}\n role='article'\n data={data}\n limit={1}\n fallback={PlankContentError}\n placeholder={placeholder}\n />\n </>\n ) : (\n <PlankError layoutCoordinate={coordinate} />\n )}\n {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Main } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Banner } from './Banner';\nimport { useBreakpoints } from '../../util';\nimport { useHoistStatusbar } from '../../util/useHoistStatusbar';\nimport { useLayout } from '../LayoutContext';\n\nexport const Sidebar = () => {\n const layoutContext = useLayout();\n const { popoverAnchorId } = layoutContext;\n const breakpoint = useBreakpoints();\n const hoistStatusbar = useHoistStatusbar(breakpoint);\n\n const navigationData = useMemo(() => ({ popoverAnchorId }), [popoverAnchorId]);\n\n return (\n <Main.NavigationSidebar classNames='grid grid-cols-1 grid-rows-[var(--rail-size)_var(--rail-action)_1fr_min-content_min-content] md:grid-rows-[var(--rail-size)_var(--rail-action)_1fr_min-content] lg:grid-rows-[1fr_min-content] overflow-hidden lg:block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]'>\n {breakpoint !== 'desktop' && (\n <>\n <Banner variant='sidebar' />\n <Surface role='search-input' limit={1} />\n </>\n )}\n <div role='none' className={mx('!overflow-y-auto', breakpoint !== 'desktop' && 'border-be border-separator')}>\n <Surface role='navigation' data={navigationData} limit={1} />\n </div>\n {!hoistStatusbar && <Surface role='status-bar--sidebar-footer' limit={1} />}\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { CloseSidebarButton, ToggleSidebarButton } from './SidebarButton';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\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'>Composer</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 2025 DXOS.org\n//\n\nimport { useLayoutEffect, useState } from 'react';\n\nexport const useHoistStatusbar = (breakpoint: string) => {\n const [safeAreaBottom, setSafeAreaBottom] = useState(Infinity);\n useLayoutEffect(\n () =>\n setSafeAreaBottom(parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-bottom'))),\n [],\n );\n return Number.isFinite(safeAreaBottom) && safeAreaBottom < 1 && breakpoint === 'desktop';\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { mainPadding, mainPaddingTransitions, mx } from '@dxos/react-ui-theme';\n\nimport { useMainSize } from '../../hooks';\n\nexport const StatusBar = ({ showHints }: { showHints?: boolean }) => {\n const sizeAttrs = useMainSize();\n return (\n <div\n role='contentinfo'\n {...sizeAttrs}\n className={mx(\n 'fixed block-end-0 inset-inline-0 flex justify-between items-center border-bs border-separator z-[2] pbe-[env(safe-area-inset-bottom)]',\n mainPadding,\n mainPaddingTransitions,\n )}\n >\n <div role='none'>{showHints && <Surface role='hints' limit={1} />}</div>\n <Surface role='status-bar' limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport type { Toast as ToastProps } from '@dxos/app-framework';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n toLocalizedString,\n useTranslation,\n type ToastRootProps,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\n\n// TODO(wittjosiah): Render remaining duration as a progress bar within the toast.\nexport const Toast = ({\n id,\n title,\n description,\n icon,\n duration,\n actionLabel,\n actionAlt,\n closeLabel,\n onAction,\n onOpenChange,\n}: ToastProps & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <NaturalToast.Root data-testid={id} defaultOpen duration={duration} onOpenChange={onOpenChange}>\n <NaturalToast.Body>\n <NaturalToast.Title classNames='items-center'>\n {icon && <Icon icon={icon} size={5} classNames='inline mr-1' />}\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && (\n <NaturalToast.Description>{description && toLocalizedString(description, t)}</NaturalToast.Description>\n )}\n </NaturalToast.Body>\n <NaturalToast.Actions>\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Action altText={toLocalizedString(actionAlt, t)} asChild>\n <Button data-testid='toast.action' variant='primary' onClick={() => onAction?.()}>\n {toLocalizedString(actionLabel, t)}\n </Button>\n </NaturalToast.Action>\n )}\n {closeLabel && (\n <NaturalToast.Close asChild>\n <Button data-testid='toast.close'>{toLocalizedString(closeLabel, t)}</Button>\n </NaturalToast.Close>\n )}\n </NaturalToast.Actions>\n </NaturalToast.Root>\n );\n};\n", "//\n// Copyright 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 { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { DECK_PLUGIN } from '../meta';\nimport {\n type NewPlankPositioning,\n NewPlankPositions,\n type DeckSettingsProps,\n type Overscroll,\n OverscrollOptions,\n} from '../types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport const LayoutSettings = ({ settings }: { settings: DeckSettingsProps }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <>\n <DeprecatedFormInput label={t('select new plank positioning label')}>\n <Select.Root\n value={settings.newPlankPositioning ?? 'start'}\n onValueChange={(value) => (settings.newPlankPositioning = value as NewPlankPositioning)}\n >\n <Select.TriggerButton placeholder={t('select new plank positioning placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {NewPlankPositions.map((position) => (\n <Select.Option key={position} value={position}>\n {t(`settings new plank position ${position} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings overscroll label')}>\n <Select.Root\n value={settings.overscroll ?? 'none'}\n onValueChange={(value) => (settings.overscroll = value as Overscroll)}\n >\n <Select.TriggerButton placeholder={t('select overscroll placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {OverscrollOptions.map((option) => (\n <Select.Option key={option} value={option}>\n {t(`settings overscroll ${option} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show hints label')}>\n <Input.Switch checked={settings.showHints} onCheckedChange={(checked) => (settings.showHints = checked)} />\n </DeprecatedFormInput>\n {!isSocket && (\n <DeprecatedFormInput label={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => (settings.enableNativeRedirect = checked)}\n />\n </DeprecatedFormInput>\n )}\n <DeprecatedFormInput label={t('settings custom slots')}>\n <Input.Switch checked={settings.customSlots} onCheckedChange={(checked) => (settings.customSlots = checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings flat deck')}>\n <Input.Switch checked={settings.flatDeck} onCheckedChange={(checked) => (settings.flatDeck = checked)} />\n </DeprecatedFormInput>\n </>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["NAV_ID", "SURFACE_PREFIX", "createContext", "useContext", "raise", "LayoutContext", "createContext", "useLayout", "useContext", "raise", "Error", "createContext", "useContext", "raise", "DeckContext", "createContext", "useDeckContext", "useContext", "raise", "Error", "untracked", "React", "useCallback", "useEffect", "useMemo", "useRef", "Fragment", "firstIdInPart", "Surface", "usePluginManager", "AttentionCapabilities", "AlertDialog", "Dialog", "NaturalDialog", "Main", "Popover", "useOnTransition", "Stack", "StackContext", "DEFAULT_HORIZONTAL_SIZE", "mainPaddingTransitions", "React", "Surface", "useGraph", "useAttended", "useEffect", "useState", "useNode", "graph", "id", "timeout", "nodeState", "setNodeState", "useState", "findNode", "undefined", "useEffect", "frame", "requestAnimationFrame", "node", "waitForNode", "cancelAnimationFrame", "useEffect", "ACTION_GROUP_TYPE", "ACTION_TYPE", "getGraph", "expandNodeActions", "node", "graph", "getGraph", "expand", "ACTION_GROUP_TYPE", "ACTION_TYPE", "useNodeActionExpander", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "useMainContext", "useMainSize", "navigationSidebarOpen", "complementarySidebarOpen", "useMainContext", "ActiveNode", "id", "useAttended", "graph", "useGraph", "activeNode", "useNode", "useNodeActionExpander", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "NavigationAction", "SLUG_PATH_SEPARATOR", "Surface", "useIntentDispatcher", "useGraph", "Main", "ScrollArea", "useTranslation", "toLocalizedString", "useAttended", "railGridHorizontal", "StackContext", "StackItem", "Tabs", "mx", "React", "useEffect", "useState", "useTranslation", "descriptionText", "mx", "React", "Fragment", "memo", "useEffect", "useMemo", "createIntent", "LayoutAction", "NavigationAction", "SLUG_PATH_SEPARATOR", "Surface", "useIntentDispatcher", "useGraph", "Icon", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "React", "forwardRef", "Button", "ButtonGroup", "Icon", "Tooltip", "useTranslation", "PlankControl", "icon", "label", "props", "React", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "span", "className", "Icon", "size", "Portal", "Content", "side", "PlankControls", "forwardRef", "onClick", "capabilities", "can", "isSolo", "pin", "close", "children", "forwardedRef", "t", "useTranslation", "DECK_PLUGIN", "buttonClassNames", "ButtonGroup", "ref", "includes", "classNames", "solo", "disabled", "incrementStart", "incrementEnd", "data-testid", "React", "IconButton", "useTranslation", "ToggleSidebarButton", "layoutContext", "useLayout", "t", "useTranslation", "DECK_PLUGIN", "React", "IconButton", "variant", "iconOnly", "icon", "size", "label", "onClick", "sidebarOpen", "classNames", "CloseSidebarButton", "ToggleComplementarySidebarButton", "complementarySidebarOpen", "CloseComplementarySidebarButton", "soloInlinePadding", "NodePlankHeading", "memo", "coordinate", "node", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "pending", "actions", "t", "useTranslation", "DECK_PLUGIN", "graph", "useGraph", "icon", "properties", "label", "toLocalizedString", "ns", "dispatchPromise", "dispatch", "useIntentDispatcher", "ActionRoot", "id", "Popover", "Anchor", "Fragment", "breakpoint", "useBreakpoints", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "layoutPart", "part", "attendableId", "entryId", "split", "SLUG_PATH_SEPARATOR", "at", "capabilities", "useMemo", "solo", "incrementStart", "incrementEnd", "React", "StackItem", "Heading", "classNames", "soloInlinePadding", "Sigil", "related", "triggerLabel", "filter", "a", "length", "onAction", "action", "data", "caller", "Surface", "role", "subject", "SigilButton", "span", "className", "Icon", "size", "ToggleSidebarButton", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankControls", "isSolo", "onClick", "eventType", "createIntent", "NavigationAction", "Adjust", "type", "layoutCoordinate", "LayoutAction", "SetLayout", "element", "state", "Close", "activeParts", "close", "ToggleComplementarySidebarButton", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "DECK_PLUGIN", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionText", "length", "PlankError", "layoutCoordinate", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "NodePlankHeading", "coordinate", "pending", "PlankLoading", "ComplementarySidebar", "panels", "current", "popoverAnchorId", "useLayout", "attended", "useAttended", "panelIds", "useMemo", "map", "p", "id", "activePanelId", "find", "activeEntryId", "SLUG_PATH_SEPARATOR", "undefined", "graph", "useGraph", "node", "useNode", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "useNodeActionExpander", "internalValue", "setInternalValue", "useState", "useEffect", "handleValueChange", "useCallback", "nextValue", "createIntent", "NavigationAction", "Open", "activeParts", "complementary", "React", "Main", "classNames", "StackContext", "Provider", "value", "size", "orientation", "rail", "div", "role", "className", "mx", "railGridHorizontal", "Tabs", "Root", "onValueChange", "attendableId", "StackItem", "Heading", "ScrollArea", "Viewport", "Tablist", "panel", "Tab", "key", "toLocalizedString", "label", "Scrollbar", "Thumb", "CloseComplementarySidebarButton", "Tabpanel", "Surface", "data", "subject", "properties", "object", "space", "fallback", "PlankContentError", "placeholder", "PlankLoading", "React", "Surface", "mx", "ContentEmpty", "React", "div", "role", "className", "data-testid", "mx", "soloInlinePadding", "ToggleSidebarButton", "span", "Surface", "React", "Surface", "useGraph", "fixedInsetFlexLayout", "React", "useTranslation", "errorText", "mx", "Fallback", "t", "useTranslation", "DECK_PLUGIN", "React", "div", "role", "className", "p", "mx", "errorText", "Fullscreen", "id", "graph", "useGraph", "fullScreenNode", "useNode", "React", "div", "role", "className", "fixedInsetFlexLayout", "Surface", "limit", "fallback", "Fallback", "data", "subject", "component", "startsWith", "SURFACE_PREFIX", "slice", "length", "undefined", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "createIntent", "indexInPart", "LayoutAction", "partLength", "Surface", "useIntentDispatcher", "debounce", "useGraph", "useAttendableAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "UNKNOWN_ID", "Plank", "memo", "entry", "layoutParts", "part", "layoutMode", "order", "dispatchPromise", "dispatch", "useIntentDispatcher", "coordinate", "useMemo", "entryId", "id", "popoverAnchorId", "scrollIntoView", "useLayout", "plankSizing", "useDeckContext", "graph", "useGraph", "node", "useNode", "rootElement", "useRef", "canResize", "Root", "StackItem", "attendableAttrs", "useAttendableAttributes", "index", "indexInPart", "length", "partLength", "canIncrementStart", "undefined", "canIncrementEnd", "size", "setSize", "useCallback", "debounce", "nextSize", "createIntent", "DeckAction", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "focusable", "querySelector", "preventScroll", "behavior", "inline", "LayoutAction", "ScrollIntoView", "isSolo", "isAttendable", "sizeAttrs", "useMainSize", "data", "subject", "path", "placeholder", "React", "PlankLoading", "className", "mx", "mainIntrinsicSize", "railGridHorizontal", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "role", "onKeyDown", "NodePlankHeading", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "layoutCoordinate", "ResizeHandle", "React", "useMemo", "Surface", "Main", "mx", "React", "Surface", "mx", "Banner", "variant", "classNames", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "div", "role", "Surface", "limit", "useLayoutEffect", "useState", "useHoistStatusbar", "breakpoint", "safeAreaBottom", "setSafeAreaBottom", "useState", "Infinity", "useLayoutEffect", "parseFloat", "getComputedStyle", "document", "documentElement", "getPropertyValue", "Number", "isFinite", "Sidebar", "layoutContext", "useLayout", "popoverAnchorId", "breakpoint", "useBreakpoints", "hoistStatusbar", "useHoistStatusbar", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "classNames", "Banner", "variant", "Surface", "role", "limit", "div", "className", "mx", "data", "React", "Surface", "mainPadding", "mainPaddingTransitions", "mx", "StatusBar", "showHints", "sizeAttrs", "useMainSize", "React", "div", "role", "className", "mx", "mainPadding", "mainPaddingTransitions", "Surface", "limit", "React", "Button", "Icon", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "Toast", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "onOpenChange", "t", "useTranslation", "DECK_PLUGIN", "React", "NaturalToast", "Root", "data-testid", "defaultOpen", "Body", "Title", "classNames", "Icon", "size", "span", "toLocalizedString", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "React", "Topbar", "React", "Banner", "variant", "PlankSeparator", "index", "React", "span", "role", "className", "style", "gridColumn", "DeckLayout", "layoutParts", "toasts", "overscroll", "showHints", "panels", "onDismissToast", "context", "useLayout", "layoutMode", "sidebarOpen", "complementarySidebarOpen", "dialogOpen", "dialogContent", "dialogBlockAlign", "dialogType", "popoverOpen", "popoverContent", "popoverAnchorId", "breakpoint", "useBreakpoints", "hoistStatusbar", "useHoistStatusbar", "plankSizing", "useDeckContext", "pluginManager", "usePluginManager", "fullScreenSlug", "useMemo", "firstIdInPart", "scrollLeftRef", "useRef", "deckRef", "isSoloModeLoaded", "Boolean", "solo", "useEffect", "attended", "untracked", "attention", "requestCapability", "AttentionCapabilities", "Attention", "current", "firstId", "length", "document", "querySelector", "focus", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "mode", "handleScroll", "event", "currentTarget", "target", "isEmpty", "main", "padding", "calculateOverscroll", "Dialog", "AlertDialog", "NaturalDialog", "Popover", "Root", "modal", "open", "onOpenChange", "nextOpen", "undefined", "ActiveNode", "Fullscreen", "id", "Main", "navigationSidebarOpen", "onNavigationSidebarOpenChange", "next", "onComplementarySidebarOpenChange", "Sidebar", "ComplementarySidebar", "complementary", "Overlay", "Content", "handlesFocus", "ContentEmpty", "bounce", "classNames", "DEFAULT_HORIZONTAL_SIZE", "div", "inert", "Stack", "orientation", "size", "mainPaddingTransitions", "onScroll", "itemsCount", "ref", "map", "layoutEntry", "Fragment", "key", "Plank", "entry", "part", "order", "StackContext", "Provider", "value", "rail", "Topbar", "StatusBar", "Portal", "onEscapeKeyDown", "Viewport", "Surface", "data", "limit", "Arrow", "blockAlign", "toast", "Toast", "React", "Input", "Select", "useTranslation", "DeprecatedFormInput", "isSocket", "globalThis", "__args", "LayoutSettings", "settings", "t", "useTranslation", "DECK_PLUGIN", "React", "DeprecatedFormInput", "label", "Select", "Root", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "overscroll", "OverscrollOptions", "option", "Input", "Switch", "checked", "showHints", "onCheckedChange", "enableNativeRedirect", "customSlots", "flatDeck"]
7
- }
@@ -1,26 +0,0 @@
1
- import {
2
- DeckCapabilities
3
- } from "./chunk-5VFDMW5M.mjs";
4
- import "./chunk-JQJ5UWVB.mjs";
5
-
6
- // packages/plugins/plugin-deck/src/capabilities/layout/deck.ts
7
- import { contributes } from "@dxos/app-framework";
8
- import { LocalStorageStore } from "@dxos/local-storage";
9
- var DECK_KEY = "dxos.org/settings/deck";
10
- var deck_default = () => {
11
- const deck = new LocalStorageStore(DECK_KEY, {
12
- plankSizing: {},
13
- currentUndoId: void 0,
14
- // TODO(Zan): Cap depth!
15
- layoutModeHistory: []
16
- });
17
- deck.prop({
18
- key: "plankSizing",
19
- type: LocalStorageStore.json()
20
- });
21
- return contributes(DeckCapabilities.DeckState, deck.values, () => deck.close());
22
- };
23
- export {
24
- deck_default as default
25
- };
26
- //# sourceMappingURL=deck-PLCSKPGL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/layout/deck.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\n\nimport { type DeckContextType } from '../../components';\nimport { DeckCapabilities } from '../capabilities';\n\n// NOTE: The key is this currently for backwards compatibility of storage.\nconst DECK_KEY = 'dxos.org/settings/deck';\n\nexport default () => {\n const deck = new LocalStorageStore<DeckContextType>(DECK_KEY, {\n plankSizing: {},\n currentUndoId: undefined,\n // TODO(Zan): Cap depth!\n layoutModeHistory: [],\n });\n\n deck.prop({ key: 'plankSizing', type: LocalStorageStore.json<Record<string, number>>() });\n\n return contributes(DeckCapabilities.DeckState, deck.values, () => deck.close());\n};\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,mBAAmB;AAC5B,SAASC,yBAAyB;AAMlC,IAAMC,WAAW;AAEjB,IAAA,eAAe,MAAA;AACb,QAAMC,OAAO,IAAIC,kBAAmCF,UAAU;IAC5DG,aAAa,CAAC;IACdC,eAAeC;;IAEfC,mBAAmB,CAAA;EACrB,CAAA;AAEAL,OAAKM,KAAK;IAAEC,KAAK;IAAeC,MAAMP,kBAAkBQ,KAAI;EAA2B,CAAA;AAEvF,SAAOC,YAAYC,iBAAiBC,WAAWZ,KAAKa,QAAQ,MAAMb,KAAKc,MAAK,CAAA;AAC9E;",
6
- "names": ["contributes", "LocalStorageStore", "DECK_KEY", "deck", "LocalStorageStore", "plankSizing", "currentUndoId", "undefined", "layoutModeHistory", "prop", "key", "type", "json", "contributes", "DeckCapabilities", "DeckState", "values", "close"]
7
- }
@@ -1,152 +0,0 @@
1
- import {
2
- DeckAction
3
- } from "./chunk-KY5WXIXY.mjs";
4
- import {
5
- DeckCapabilities
6
- } from "./chunk-5VFDMW5M.mjs";
7
- import {
8
- DECK_PLUGIN
9
- } from "./chunk-JQJ5UWVB.mjs";
10
-
11
- // packages/plugins/plugin-deck/src/capabilities/layout/intent-resolver.ts
12
- import { batch } from "@preact/signals-core";
13
- import { Capabilities, createResolver, contributes, IntentAction, LayoutAction, openIds, Toast as ToastSchema } from "@dxos/app-framework";
14
- import { S } from "@dxos/echo-schema";
15
- import { log } from "@dxos/log";
16
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-deck/src/capabilities/layout/intent-resolver.ts";
17
- var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, [
18
- createResolver(DeckAction.UpdatePlankSize, (data) => {
19
- const deck = context.requestCapability(DeckCapabilities.MutableDeckState);
20
- deck.plankSizing[data.id] = data.size;
21
- }),
22
- createResolver(IntentAction.ShowUndo, (data) => {
23
- const deck = context.requestCapability(DeckCapabilities.MutableDeckState);
24
- const layout = context.requestCapability(Capabilities.MutableLayout);
25
- const { undoPromise: undo } = context.requestCapability(Capabilities.IntentDispatcher);
26
- if (deck.currentUndoId) {
27
- layout.toasts = layout.toasts.filter((toast) => toast.id !== deck.currentUndoId);
28
- }
29
- deck.currentUndoId = `${IntentAction.ShowUndo._tag}-${Date.now()}`;
30
- layout.toasts = [
31
- ...layout.toasts,
32
- {
33
- id: deck.currentUndoId,
34
- title: data.message ?? [
35
- "undo available label",
36
- {
37
- ns: DECK_PLUGIN
38
- }
39
- ],
40
- duration: 1e4,
41
- actionLabel: [
42
- "undo action label",
43
- {
44
- ns: DECK_PLUGIN
45
- }
46
- ],
47
- actionAlt: [
48
- "undo action alt",
49
- {
50
- ns: DECK_PLUGIN
51
- }
52
- ],
53
- closeLabel: [
54
- "undo close label",
55
- {
56
- ns: DECK_PLUGIN
57
- }
58
- ],
59
- onAction: () => undo()
60
- }
61
- ];
62
- }),
63
- createResolver(LayoutAction.SetLayout, ({ element, state, component, subject, anchorId, dialogBlockAlign, dialogType }) => {
64
- const layout = context.requestCapability(Capabilities.MutableLayout);
65
- switch (element) {
66
- case "sidebar": {
67
- layout.sidebarOpen = state ?? !layout.sidebarOpen;
68
- break;
69
- }
70
- case "complementary": {
71
- layout.complementarySidebarOpen = !!state;
72
- break;
73
- }
74
- case "dialog": {
75
- layout.dialogOpen = state ?? Boolean(component);
76
- layout.dialogContent = component ? {
77
- component,
78
- subject
79
- } : null;
80
- layout.dialogBlockAlign = dialogBlockAlign ?? "center";
81
- layout.dialogType = dialogType;
82
- break;
83
- }
84
- case "popover": {
85
- layout.popoverOpen = state ?? Boolean(component);
86
- layout.popoverContent = component ? {
87
- component,
88
- subject
89
- } : null;
90
- layout.popoverAnchorId = anchorId;
91
- break;
92
- }
93
- case "toast": {
94
- if (S.is(ToastSchema)(subject)) {
95
- layout.toasts = [
96
- ...layout.toasts,
97
- subject
98
- ];
99
- }
100
- break;
101
- }
102
- }
103
- }),
104
- createResolver(LayoutAction.SetLayoutMode, (data) => {
105
- const layout = context.requestCapability(Capabilities.MutableLayout);
106
- const location = context.requestCapability(Capabilities.MutableLocation);
107
- const deck = context.requestCapability(DeckCapabilities.MutableDeckState);
108
- const setMode = (mode) => {
109
- const main = openIds(location.active, [
110
- "main"
111
- ]);
112
- const solo = openIds(location.active, [
113
- "solo"
114
- ]);
115
- const current = layout.layoutMode === "solo" ? solo : main;
116
- const next = mode === "solo" ? solo : [
117
- ...main,
118
- ...solo
119
- ];
120
- const removed = current.filter((id) => !next.includes(id));
121
- const closed = Array.from(/* @__PURE__ */ new Set([
122
- ...location.closed.filter((id) => !next.includes(id)),
123
- ...removed
124
- ]));
125
- location.closed = closed;
126
- layout.layoutMode = mode;
127
- };
128
- return batch(() => {
129
- if ("layoutMode" in data) {
130
- deck.layoutModeHistory.push(layout.layoutMode);
131
- setMode(data.layoutMode);
132
- } else if (data.revert) {
133
- setMode(deck.layoutModeHistory.pop() ?? "solo");
134
- } else {
135
- log.warn("Invalid layout mode", data, {
136
- F: __dxlog_file,
137
- L: 120,
138
- S: void 0,
139
- C: (f, a) => f(...a)
140
- });
141
- }
142
- });
143
- }),
144
- createResolver(LayoutAction.ScrollIntoView, ({ id }) => {
145
- const layout = context.requestCapability(Capabilities.MutableLayout);
146
- layout.scrollIntoView = id;
147
- })
148
- ]);
149
- export {
150
- intent_resolver_default as default
151
- };
152
- //# sourceMappingURL=intent-resolver-FVOQSTBX.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/layout/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\n\nimport {\n Capabilities,\n createResolver,\n contributes,\n IntentAction,\n LayoutAction,\n openIds,\n Toast as ToastSchema,\n type LayoutMode,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { S } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { DeckAction } from '../../types';\nimport { DeckCapabilities } from '../capabilities';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver(DeckAction.UpdatePlankSize, (data) => {\n const deck = context.requestCapability(DeckCapabilities.MutableDeckState);\n deck.plankSizing[data.id] = data.size;\n }),\n createResolver(IntentAction.ShowUndo, (data) => {\n const deck = context.requestCapability(DeckCapabilities.MutableDeckState);\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const { undoPromise: undo } = context.requestCapability(Capabilities.IntentDispatcher);\n\n // TODO(wittjosiah): Support undoing further back than the last action.\n if (deck.currentUndoId) {\n layout.toasts = layout.toasts.filter((toast) => toast.id !== deck.currentUndoId);\n }\n deck.currentUndoId = `${IntentAction.ShowUndo._tag}-${Date.now()}`;\n layout.toasts = [\n ...layout.toasts,\n {\n id: deck.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 createResolver(\n LayoutAction.SetLayout,\n ({ element, state, component, subject, anchorId, dialogBlockAlign, dialogType }) => {\n const layout = context.requestCapability(Capabilities.MutableLayout);\n switch (element) {\n case 'sidebar': {\n layout.sidebarOpen = state ?? !layout.sidebarOpen;\n break;\n }\n\n case 'complementary': {\n layout.complementarySidebarOpen = !!state;\n // TODO(thure): Hoist content into the c11y sidebar of Deck.\n // layout.complementarySidebarContent = component || subject ? { component, subject } : null;\n break;\n }\n\n case 'dialog': {\n layout.dialogOpen = state ?? Boolean(component);\n layout.dialogContent = component ? { component, subject } : null;\n layout.dialogBlockAlign = dialogBlockAlign ?? 'center';\n layout.dialogType = dialogType;\n break;\n }\n\n case 'popover': {\n layout.popoverOpen = state ?? Boolean(component);\n layout.popoverContent = component ? { component, subject } : null;\n layout.popoverAnchorId = anchorId;\n break;\n }\n\n case 'toast': {\n if (S.is(ToastSchema)(subject)) {\n layout.toasts = [...layout.toasts, subject];\n }\n break;\n }\n }\n },\n ),\n createResolver(LayoutAction.SetLayoutMode, (data) => {\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const location = context.requestCapability(Capabilities.MutableLocation);\n const deck = context.requestCapability(DeckCapabilities.MutableDeckState);\n\n const setMode = (mode: LayoutMode) => {\n const main = openIds(location.active, ['main']);\n const solo = openIds(location.active, ['solo']);\n const current = layout.layoutMode === 'solo' ? solo : main;\n // When un-soloing, the solo entry is added to the deck.\n const next = mode === 'solo' ? solo : [...main, ...solo];\n const removed = current.filter((id) => !next.includes(id));\n const closed = Array.from(new Set([...location.closed.filter((id) => !next.includes(id)), ...removed]));\n\n location.closed = closed;\n layout.layoutMode = mode;\n };\n\n return batch(() => {\n if ('layoutMode' in data) {\n deck.layoutModeHistory.push(layout.layoutMode);\n setMode(data.layoutMode);\n } else if (data.revert) {\n setMode(deck.layoutModeHistory.pop() ?? 'solo');\n } else {\n log.warn('Invalid layout mode', data);\n }\n });\n }),\n createResolver(LayoutAction.ScrollIntoView, ({ id }) => {\n const layout = context.requestCapability(Capabilities.MutableLayout);\n layout.scrollIntoView = id;\n }),\n ]);\n"],
5
- "mappings": "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",
6
- "names": ["batch", "Capabilities", "createResolver", "contributes", "IntentAction", "LayoutAction", "openIds", "Toast", "ToastSchema", "S", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "DeckAction", "UpdatePlankSize", "data", "deck", "requestCapability", "DeckCapabilities", "MutableDeckState", "plankSizing", "id", "size", "IntentAction", "ShowUndo", "layout", "MutableLayout", "undoPromise", "undo", "IntentDispatcher", "currentUndoId", "toasts", "filter", "toast", "_tag", "Date", "now", "title", "message", "ns", "DECK_PLUGIN", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "LayoutAction", "SetLayout", "element", "state", "component", "subject", "anchorId", "dialogBlockAlign", "dialogType", "sidebarOpen", "complementarySidebarOpen", "dialogOpen", "Boolean", "dialogContent", "popoverOpen", "popoverContent", "popoverAnchorId", "S", "is", "ToastSchema", "SetLayoutMode", "location", "MutableLocation", "setMode", "mode", "main", "openIds", "active", "solo", "current", "layoutMode", "next", "removed", "includes", "closed", "Array", "from", "Set", "batch", "layoutModeHistory", "push", "revert", "pop", "log", "warn", "ScrollIntoView", "scrollIntoView"]
7
- }