@dxos/plugin-deck 0.8.4-main.1f223c7 → 0.8.4-main.2244d791bb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/app-graph-builder-X7LCO5KE.mjs +121 -0
- package/dist/lib/browser/app-graph-builder-X7LCO5KE.mjs.map +7 -0
- package/dist/lib/browser/check-app-scheme-PGISDJX7.mjs +32 -0
- package/dist/lib/browser/check-app-scheme-PGISDJX7.mjs.map +7 -0
- package/dist/lib/browser/chunk-DONG2FYU.mjs +295 -0
- package/dist/lib/browser/chunk-DONG2FYU.mjs.map +7 -0
- package/dist/lib/browser/chunk-JGC4ZLG3.mjs +1469 -0
- package/dist/lib/browser/chunk-JGC4ZLG3.mjs.map +7 -0
- package/dist/lib/browser/{chunk-CNTGBCMK.mjs → chunk-NHABISX2.mjs} +40 -33
- package/dist/lib/browser/chunk-NHABISX2.mjs.map +7 -0
- package/dist/lib/browser/chunk-YT3AJVUU.mjs +161 -0
- package/dist/lib/browser/chunk-YT3AJVUU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +83 -76
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-XJFR3PNQ.mjs +597 -0
- package/dist/lib/browser/operation-resolver-XJFR3PNQ.mjs.map +7 -0
- package/dist/lib/browser/react-root-AJFHKHRL.mjs +47 -0
- package/dist/lib/browser/react-root-AJFHKHRL.mjs.map +7 -0
- package/dist/lib/browser/react-surface-KBRBGEXY.mjs +43 -0
- package/dist/lib/browser/react-surface-KBRBGEXY.mjs.map +7 -0
- package/dist/lib/browser/settings-ES42FGLG.mjs +38 -0
- package/dist/lib/browser/settings-ES42FGLG.mjs.map +7 -0
- package/dist/lib/browser/state-YMI6IDEL.mjs +104 -0
- package/dist/lib/browser/state-YMI6IDEL.mjs.map +7 -0
- package/dist/lib/browser/toolkit-VRD54KY3.mjs +54 -0
- package/dist/lib/browser/toolkit-VRD54KY3.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +11 -4
- package/dist/lib/browser/url-handler-37UPOB3U.mjs +94 -0
- package/dist/lib/browser/url-handler-37UPOB3U.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-US54I64T.mjs +122 -0
- package/dist/lib/node-esm/app-graph-builder-US54I64T.mjs.map +7 -0
- package/dist/lib/node-esm/check-app-scheme-CK6EVG5D.mjs +33 -0
- package/dist/lib/node-esm/check-app-scheme-CK6EVG5D.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7NPS347C.mjs +1470 -0
- package/dist/lib/node-esm/chunk-7NPS347C.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ADPMWKLL.mjs +154 -0
- package/dist/lib/node-esm/chunk-ADPMWKLL.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CVYHPJIN.mjs +297 -0
- package/dist/lib/node-esm/chunk-CVYHPJIN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZMJPCZ3V.mjs +162 -0
- package/dist/lib/node-esm/chunk-ZMJPCZ3V.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +183 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/operation-resolver-ZQGNATPX.mjs +598 -0
- package/dist/lib/node-esm/operation-resolver-ZQGNATPX.mjs.map +7 -0
- package/dist/lib/node-esm/react-root-2S77ABBS.mjs +48 -0
- package/dist/lib/node-esm/react-root-2S77ABBS.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-FIHMAFXH.mjs +44 -0
- package/dist/lib/node-esm/react-surface-FIHMAFXH.mjs.map +7 -0
- package/dist/lib/node-esm/settings-E3TH3FAW.mjs +39 -0
- package/dist/lib/node-esm/settings-E3TH3FAW.mjs.map +7 -0
- package/dist/lib/node-esm/state-WQEFBQMD.mjs +105 -0
- package/dist/lib/node-esm/state-WQEFBQMD.mjs.map +7 -0
- package/dist/lib/node-esm/toolkit-ME546G5T.mjs +55 -0
- package/dist/lib/node-esm/toolkit-ME546G5T.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +40 -0
- package/dist/lib/node-esm/url-handler-2KYHXINK.mjs +95 -0
- package/dist/lib/node-esm/url-handler-2KYHXINK.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts +2 -1
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +5 -0
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts +3 -0
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +8 -13
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
- package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +19 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +22 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/index.d.ts +174 -0
- package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/state.d.ts +177 -0
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/toolkit/index.d.ts +3 -0
- package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts +27 -0
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -0
- package/dist/types/src/capabilities/tools/index.d.ts +3 -0
- package/dist/types/src/capabilities/tools/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/tools/tools.d.ts +12 -0
- package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -0
- package/dist/types/src/capabilities/url-handler/index.d.ts +3 -0
- package/dist/types/src/capabilities/url-handler/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts +5 -0
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +2 -3
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +75 -0
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/DeckMain.d.ts +3 -0
- package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Toast.d.ts +7 -2
- package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +4 -2
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
- package/dist/types/src/components/Plank/Plank.d.ts +3 -3
- package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
- package/dist/types/src/components/Plank/Plank.stories.d.ts +26 -6
- package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts +1 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankError.d.ts +1 -1
- package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankHeading.d.ts +2 -2
- package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -3
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckState.d.ts +17 -0
- package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
- package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
- package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
- package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
- package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/{capabilities → types}/capabilities.d.ts +98 -90
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/events.d.ts +7 -0
- package/dist/types/src/types/events.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +92 -30
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util/set-active.d.ts +18 -3
- package/dist/types/src/util/set-active.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +55 -48
- package/src/DeckPlugin.ts +45 -66
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +119 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/check-app-scheme/check-app-scheme.ts +45 -0
- package/src/capabilities/check-app-scheme/index.ts +7 -0
- package/src/capabilities/index.ts +9 -14
- package/src/capabilities/operation-resolver/index.ts +10 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +570 -0
- package/src/capabilities/react-root/index.ts +7 -0
- package/src/capabilities/react-root/react-root.tsx +47 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +38 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +39 -0
- package/src/capabilities/state/index.ts +7 -0
- package/src/capabilities/state/state.ts +105 -0
- package/src/capabilities/toolkit/index.ts +7 -0
- package/src/capabilities/toolkit/toolkit.ts +64 -0
- package/src/capabilities/tools/index.ts +7 -0
- package/src/capabilities/tools/tools.ts +92 -0
- package/src/capabilities/url-handler/index.ts +7 -0
- package/src/capabilities/url-handler/url-handler.ts +96 -0
- package/src/components/DeckLayout/ActiveNode.tsx +3 -2
- package/src/components/DeckLayout/Banner.tsx +8 -8
- package/src/components/DeckLayout/ContentEmpty.tsx +4 -5
- package/src/components/DeckLayout/DeckLayout.stories.tsx +52 -0
- package/src/components/DeckLayout/DeckLayout.tsx +17 -285
- package/src/components/DeckLayout/DeckMain.tsx +286 -0
- package/src/components/DeckLayout/Dialog.tsx +21 -12
- package/src/components/DeckLayout/Fallback.tsx +4 -4
- package/src/components/DeckLayout/Popover.tsx +60 -32
- package/src/components/DeckLayout/StatusBar.tsx +3 -3
- package/src/components/DeckLayout/Toast.tsx +30 -5
- package/src/components/DeckSettings/DeckSettings.tsx +44 -28
- package/src/components/Plank/Plank.stories.tsx +18 -11
- package/src/components/Plank/Plank.tsx +88 -55
- package/src/components/Plank/PlankControls.tsx +9 -9
- package/src/components/Plank/PlankError.tsx +4 -4
- package/src/components/Plank/PlankHeading.tsx +38 -42
- package/src/components/Sidebar/ComplementarySidebar.tsx +67 -36
- package/src/components/Sidebar/Sidebar.tsx +7 -7
- package/src/components/Sidebar/SidebarButton.tsx +39 -32
- package/src/components/fragments.ts +1 -1
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCompanions.ts +1 -1
- package/src/hooks/useDeckCompanions.ts +6 -4
- package/src/hooks/useDeckState.ts +82 -0
- package/src/hooks/useHoistStatusbar.ts +4 -5
- package/src/hooks/useNodeActionExpander.ts +4 -4
- package/src/index.ts +1 -2
- package/src/meta.ts +8 -5
- package/src/translations.ts +3 -1
- package/src/types/capabilities.ts +33 -0
- package/src/types/events.ts +21 -0
- package/src/types/index.ts +2 -0
- package/src/types/schema.ts +90 -14
- package/src/util/layoutAppliesTopbar.ts +1 -1
- package/src/util/set-active.ts +49 -29
- package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs +0 -152
- package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs.map +0 -7
- package/dist/lib/browser/check-app-scheme-3BQJXWEY.mjs +0 -32
- package/dist/lib/browser/check-app-scheme-3BQJXWEY.mjs.map +0 -7
- package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
- package/dist/lib/browser/chunk-F5BQOOEG.mjs +0 -160
- package/dist/lib/browser/chunk-F5BQOOEG.mjs.map +0 -7
- package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
- package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
- package/dist/lib/browser/chunk-NRCPV6AV.mjs +0 -129
- package/dist/lib/browser/chunk-NRCPV6AV.mjs.map +0 -7
- package/dist/lib/browser/chunk-NU7H23SK.mjs +0 -1498
- package/dist/lib/browser/chunk-NU7H23SK.mjs.map +0 -7
- package/dist/lib/browser/chunk-WILMPGDV.mjs +0 -127
- package/dist/lib/browser/chunk-WILMPGDV.mjs.map +0 -7
- package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
- package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs +0 -521
- package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs.map +0 -7
- package/dist/lib/browser/react-root-7PRVDLF7.mjs +0 -43
- package/dist/lib/browser/react-root-7PRVDLF7.mjs.map +0 -7
- package/dist/lib/browser/react-surface-FNY2YC2F.mjs +0 -40
- package/dist/lib/browser/react-surface-FNY2YC2F.mjs.map +0 -7
- package/dist/lib/browser/settings-LUPQPZ27.mjs +0 -29
- package/dist/lib/browser/settings-LUPQPZ27.mjs.map +0 -7
- package/dist/lib/browser/state-CRXR7X63.mjs +0 -12
- package/dist/lib/browser/toolkit-XGJSBY67.mjs +0 -61
- package/dist/lib/browser/toolkit-XGJSBY67.mjs.map +0 -7
- package/dist/lib/browser/url-handler-LROZYQ26.mjs +0 -70
- package/dist/lib/browser/url-handler-LROZYQ26.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/check-app-scheme.d.ts +0 -4
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -7
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -101
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/capabilities/toolkit.d.ts +0 -5
- package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
- package/dist/types/src/capabilities/tools.d.ts +0 -11
- package/dist/types/src/capabilities/tools.d.ts.map +0 -1
- package/dist/types/src/capabilities/url-handler.d.ts +0 -4
- package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -142
- package/src/capabilities/capabilities.ts +0 -14
- package/src/capabilities/check-app-scheme.ts +0 -40
- package/src/capabilities/intent-resolver.ts +0 -469
- package/src/capabilities/react-root.tsx +0 -39
- package/src/capabilities/react-surface.tsx +0 -30
- package/src/capabilities/settings.ts +0 -26
- package/src/capabilities/state.ts +0 -105
- package/src/capabilities/toolkit.ts +0 -55
- package/src/capabilities/tools.ts +0 -84
- package/src/capabilities/url-handler.ts +0 -60
- package/src/events.ts +0 -11
- /package/dist/lib/{browser/state-CRXR7X63.mjs.map → node-esm/types/index.mjs.map} +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { useFocusFinders } from '@fluentui/react-tabster';
|
|
5
6
|
import React, {
|
|
6
7
|
type KeyboardEvent,
|
|
7
8
|
type PropsWithChildren,
|
|
@@ -12,24 +13,18 @@ import React, {
|
|
|
12
13
|
useRef,
|
|
13
14
|
} from 'react';
|
|
14
15
|
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
createIntent,
|
|
19
|
-
useAppGraph,
|
|
20
|
-
useCapability,
|
|
21
|
-
useIntentDispatcher,
|
|
22
|
-
} from '@dxos/app-framework';
|
|
16
|
+
import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
|
|
17
|
+
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
18
|
+
import { useAppGraph } from '@dxos/app-toolkit/ui';
|
|
23
19
|
import { debounce } from '@dxos/async';
|
|
24
20
|
import { type Node, useNode } from '@dxos/plugin-graph';
|
|
25
21
|
import { ATTENDABLE_PATH_SEPARATOR, useAttentionAttributes } from '@dxos/react-ui-attention';
|
|
26
22
|
import { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';
|
|
27
|
-
import { mainIntrinsicSize, mx } from '@dxos/
|
|
23
|
+
import { mainIntrinsicSize, mx } from '@dxos/ui-theme';
|
|
28
24
|
|
|
29
|
-
import {
|
|
30
|
-
import { useCompanions, useMainSize } from '../../hooks';
|
|
25
|
+
import { useCompanions, useDeckState, useMainSize } from '../../hooks';
|
|
31
26
|
import { parseEntryId } from '../../layout';
|
|
32
|
-
import {
|
|
27
|
+
import { DeckOperation, type DeckSettingsProps, type LayoutMode, type ResolvedPart } from '../../types';
|
|
33
28
|
|
|
34
29
|
import { PlankContentError, PlankError } from './PlankError';
|
|
35
30
|
import { PlankHeading } from './PlankHeading';
|
|
@@ -37,6 +32,10 @@ import { PlankLoading } from './PlankLoading';
|
|
|
37
32
|
|
|
38
33
|
const UNKNOWN_ID = 'unknown_id';
|
|
39
34
|
|
|
35
|
+
//
|
|
36
|
+
// Plank
|
|
37
|
+
//
|
|
38
|
+
|
|
40
39
|
export type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path' | 'order' | 'active' | 'settings'> & {
|
|
41
40
|
id?: string;
|
|
42
41
|
companionId?: string;
|
|
@@ -50,10 +49,10 @@ export type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path
|
|
|
50
49
|
// benefits. I think where we anticipate users will definitely want to quickly switch between showing and hiding entire
|
|
51
50
|
// articles, over the (again probably large) performance benefit that unmounting them would confer, we can mount and
|
|
52
51
|
// hide them, but I think that scenario in its most unambiguous form is probably rare. You could extrapolate
|
|
53
|
-
// the scenario to include all
|
|
54
|
-
// don
|
|
52
|
+
// the scenario to include all "potential" planks such as companions, which we could keep mounted and hidden, but I
|
|
53
|
+
// don't think the resulting performance would be acceptable. I think the real issue is "perceived performance" which
|
|
55
54
|
// has mitigations that are in between mounting and un-mounting since both of those have tradeoffs; we may need one or more
|
|
56
|
-
//
|
|
55
|
+
// "partially-mounted" experiences, like loading skeletons at the simple end, or screenshots of "sleeping" planks at
|
|
57
56
|
// the advanced end.
|
|
58
57
|
|
|
59
58
|
/**
|
|
@@ -68,7 +67,11 @@ export const Plank = memo(({ id = UNKNOWN_ID, companionId, ...props }: PlankProp
|
|
|
68
67
|
const hasCompanion = !!(companionId && currentCompanion);
|
|
69
68
|
|
|
70
69
|
return (
|
|
71
|
-
<PlankContainer
|
|
70
|
+
<PlankContainer
|
|
71
|
+
solo={props.part === 'solo'}
|
|
72
|
+
companion={hasCompanion}
|
|
73
|
+
encapsulate={!!props.settings?.encapsulatedPlanks}
|
|
74
|
+
>
|
|
72
75
|
<PlankComponent
|
|
73
76
|
id={id}
|
|
74
77
|
node={node}
|
|
@@ -92,7 +95,13 @@ export const Plank = memo(({ id = UNKNOWN_ID, companionId, ...props }: PlankProp
|
|
|
92
95
|
);
|
|
93
96
|
});
|
|
94
97
|
|
|
95
|
-
|
|
98
|
+
//
|
|
99
|
+
// PlankContainer
|
|
100
|
+
//
|
|
101
|
+
|
|
102
|
+
type PlankContainerProps = PropsWithChildren<{ solo: boolean; companion: boolean; encapsulate: boolean }>;
|
|
103
|
+
|
|
104
|
+
const PlankContainer = ({ children, solo, companion, encapsulate }: PlankContainerProps) => {
|
|
96
105
|
const sizeAttrs = useMainSize();
|
|
97
106
|
if (!solo) {
|
|
98
107
|
return children;
|
|
@@ -102,7 +111,14 @@ const PlankContainer = ({ children, solo, companion }: PropsWithChildren<{ solo:
|
|
|
102
111
|
return (
|
|
103
112
|
<div
|
|
104
113
|
role='none'
|
|
105
|
-
|
|
114
|
+
data-popover-collision-boundary={true}
|
|
115
|
+
className={mx(
|
|
116
|
+
'absolute inset-[--main-spacing] grid',
|
|
117
|
+
encapsulate && 'border border-separator rounded overflow-hidden',
|
|
118
|
+
companion && 'grid-cols-[6fr_4fr]', // TODO(burdon): Resize.
|
|
119
|
+
railGridHorizontal,
|
|
120
|
+
mainIntrinsicSize,
|
|
121
|
+
)}
|
|
106
122
|
{...sizeAttrs}
|
|
107
123
|
>
|
|
108
124
|
{children}
|
|
@@ -110,6 +126,10 @@ const PlankContainer = ({ children, solo, companion }: PropsWithChildren<{ solo:
|
|
|
110
126
|
);
|
|
111
127
|
};
|
|
112
128
|
|
|
129
|
+
//
|
|
130
|
+
// PlankComponent
|
|
131
|
+
//
|
|
132
|
+
|
|
113
133
|
type PlankComponentProps = {
|
|
114
134
|
layoutMode: LayoutMode;
|
|
115
135
|
id: string;
|
|
@@ -117,11 +137,10 @@ type PlankComponentProps = {
|
|
|
117
137
|
path?: string[];
|
|
118
138
|
order?: number;
|
|
119
139
|
active?: string[];
|
|
120
|
-
// TODO(burdon): Change to role?
|
|
121
140
|
companioned?: 'primary' | 'companion';
|
|
122
|
-
node?: Node;
|
|
123
|
-
primary?: Node;
|
|
124
|
-
companions?: Node[];
|
|
141
|
+
node?: Node.Node;
|
|
142
|
+
primary?: Node.Node;
|
|
143
|
+
companions?: Node.Node[];
|
|
125
144
|
settings?: DeckSettingsProps;
|
|
126
145
|
};
|
|
127
146
|
|
|
@@ -139,8 +158,10 @@ const PlankComponent = memo(
|
|
|
139
158
|
companions,
|
|
140
159
|
settings,
|
|
141
160
|
}: PlankComponentProps) => {
|
|
142
|
-
const {
|
|
143
|
-
const {
|
|
161
|
+
const { invokePromise } = useOperationInvoker();
|
|
162
|
+
const { state, deck } = useDeckState();
|
|
163
|
+
const { popoverAnchorId, scrollIntoView } = state;
|
|
164
|
+
const { findFirstFocusable } = useFocusFinders();
|
|
144
165
|
const canResize = layoutMode === 'deck';
|
|
145
166
|
|
|
146
167
|
const attentionAttrs = useAttentionAttributes(primary?.id ?? id);
|
|
@@ -157,29 +178,32 @@ const PlankComponent = memo(
|
|
|
157
178
|
|
|
158
179
|
const handleSizeChange = useCallback(
|
|
159
180
|
debounce((nextSize: number) => {
|
|
160
|
-
return
|
|
181
|
+
return invokePromise(DeckOperation.UpdatePlankSize, { id: sizeKey, size: nextSize });
|
|
161
182
|
}, 200),
|
|
162
|
-
[
|
|
183
|
+
[invokePromise, sizeKey],
|
|
163
184
|
);
|
|
164
185
|
|
|
165
|
-
// TODO(thure): Tabster
|
|
186
|
+
// TODO(thure): Tabster's focus group should handle moving focus to Main, but something is blocking it.
|
|
166
187
|
const handleKeyDown = useCallback((event: KeyboardEvent) => {
|
|
167
|
-
if (event.target === event.currentTarget
|
|
168
|
-
|
|
188
|
+
if (event.target === event.currentTarget) {
|
|
189
|
+
switch (event.key) {
|
|
190
|
+
case 'Escape':
|
|
191
|
+
rootElement.current?.closest('main')?.focus();
|
|
192
|
+
break;
|
|
193
|
+
case 'Enter':
|
|
194
|
+
rootElement.current && findFirstFocusable(rootElement.current)?.focus();
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
169
197
|
}
|
|
170
198
|
}, []);
|
|
171
199
|
|
|
172
200
|
useLayoutEffect(() => {
|
|
173
201
|
if (scrollIntoView === id) {
|
|
174
|
-
|
|
175
|
-
// Forcing focus to something smaller than the plank prevents large focus ring in the interim.
|
|
176
|
-
const focusable = rootElement.current?.querySelector('button') || rootElement.current;
|
|
177
|
-
focusable?.focus({ preventScroll: true });
|
|
178
|
-
layoutMode === 'deck' && focusable?.scrollIntoView({ behavior: 'smooth', inline: 'center' });
|
|
202
|
+
layoutMode === 'deck' && rootElement.current?.scrollIntoView({ behavior: 'smooth', inline: 'center' });
|
|
179
203
|
// Clear the scroll into view state once it has been actioned.
|
|
180
|
-
void
|
|
204
|
+
void invokePromise(LayoutOperation.ScrollIntoView, { subject: undefined });
|
|
181
205
|
}
|
|
182
|
-
}, [id, scrollIntoView, layoutMode]);
|
|
206
|
+
}, [id, scrollIntoView, layoutMode, invokePromise]);
|
|
183
207
|
|
|
184
208
|
const isSolo = layoutMode.startsWith('solo') && part === 'solo';
|
|
185
209
|
const isAttendable =
|
|
@@ -190,34 +214,42 @@ const PlankComponent = memo(
|
|
|
190
214
|
const data = useMemo(
|
|
191
215
|
() =>
|
|
192
216
|
node && {
|
|
217
|
+
attendableId: id,
|
|
193
218
|
subject: node.data,
|
|
194
219
|
companionTo: primary?.data,
|
|
220
|
+
properties: node.properties,
|
|
195
221
|
variant,
|
|
196
222
|
path,
|
|
197
223
|
popoverAnchorId,
|
|
198
224
|
},
|
|
199
|
-
[node, node?.data, path, popoverAnchorId, primary?.data, variant],
|
|
225
|
+
[node, node?.data, node?.properties, path, popoverAnchorId, primary?.data, variant],
|
|
200
226
|
);
|
|
201
227
|
|
|
202
228
|
// TODO(wittjosiah): Change prop to accept a component.
|
|
203
229
|
const placeholder = useMemo(() => <PlankLoading />, []);
|
|
204
230
|
|
|
205
231
|
const Root = part.startsWith('solo') ? 'article' : StackItem.Root;
|
|
232
|
+
const fullscreen = layoutMode === 'solo--fullscreen';
|
|
206
233
|
const className = mx(
|
|
207
234
|
'attention-surface relative dx-focus-ring-inset-over-all density-coarse',
|
|
208
|
-
isSolo && mainIntrinsicSize,
|
|
209
|
-
isSolo && railGridHorizontal,
|
|
210
235
|
isSolo && 'absolute inset-0',
|
|
236
|
+
isSolo && mainIntrinsicSize,
|
|
237
|
+
railGridHorizontal,
|
|
211
238
|
part.startsWith('solo') && 'grid',
|
|
239
|
+
part.startsWith('solo-') && 'grid-rows-subgrid row-span-2 min-is-0',
|
|
240
|
+
fullscreen && 'grid-rows-1',
|
|
212
241
|
part === 'deck' && (companioned === 'companion' ? '!border-separator border-ie' : '!border-separator border-li'),
|
|
213
|
-
part.startsWith('solo-') && 'row-span-2 grid-rows-subgrid min-is-0',
|
|
214
242
|
part === 'solo-companion' && '!border-separator border-is',
|
|
243
|
+
settings?.encapsulatedPlanks &&
|
|
244
|
+
!part.startsWith('solo') &&
|
|
245
|
+
'mli-[--main-spacing] !border-separator border rounded overflow-hidden',
|
|
215
246
|
);
|
|
216
247
|
|
|
217
248
|
return (
|
|
218
249
|
<Root
|
|
219
250
|
ref={rootElement}
|
|
220
251
|
data-testid='deck.plank'
|
|
252
|
+
data-popover-collision-boundary={true}
|
|
221
253
|
tabIndex={0}
|
|
222
254
|
{...(part.startsWith('solo')
|
|
223
255
|
? ({ ...sizeAttrs, className } as any)
|
|
@@ -234,20 +266,22 @@ const PlankComponent = memo(
|
|
|
234
266
|
>
|
|
235
267
|
{node ? (
|
|
236
268
|
<>
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
269
|
+
{!fullscreen && (
|
|
270
|
+
<PlankHeading
|
|
271
|
+
id={id}
|
|
272
|
+
part={part.startsWith('solo-') ? 'solo' : part}
|
|
273
|
+
node={node}
|
|
274
|
+
layoutMode={layoutMode}
|
|
275
|
+
deckEnabled={settings?.enableDeck}
|
|
276
|
+
canIncrementStart={canIncrementStart}
|
|
277
|
+
canIncrementEnd={canIncrementEnd}
|
|
278
|
+
popoverAnchorId={popoverAnchorId}
|
|
279
|
+
primaryId={primary?.id}
|
|
280
|
+
companioned={companioned}
|
|
281
|
+
companions={companions}
|
|
282
|
+
/>
|
|
283
|
+
)}
|
|
284
|
+
<Surface.Surface
|
|
251
285
|
key={node.id}
|
|
252
286
|
role='article'
|
|
253
287
|
data={data}
|
|
@@ -259,7 +293,6 @@ const PlankComponent = memo(
|
|
|
259
293
|
) : (
|
|
260
294
|
<PlankError id={id} part={part} />
|
|
261
295
|
)}
|
|
262
|
-
|
|
263
296
|
{canResize && <StackItem.ResizeHandle />}
|
|
264
297
|
</Root>
|
|
265
298
|
);
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { forwardRef, useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
|
|
11
|
-
import {
|
|
12
|
-
import { DeckAction, type LayoutMode } from '../../types';
|
|
11
|
+
import { meta } from '../../meta';
|
|
12
|
+
import { type DeckAction, DeckOperation, type LayoutMode } from '../../types';
|
|
13
13
|
|
|
14
14
|
export type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;
|
|
15
15
|
|
|
@@ -32,7 +32,7 @@ export type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
const PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {
|
|
35
|
-
return <IconButton
|
|
35
|
+
return <IconButton label={label} icon={icon} iconOnly variant='ghost' tooltipSide='bottom' {...props} />;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
const plankControlSpacing = 'pli-2';
|
|
@@ -43,12 +43,12 @@ type PlankComplimentControlsProps = {
|
|
|
43
43
|
|
|
44
44
|
export const PlankCompanionControls = forwardRef<HTMLDivElement, PlankComplimentControlsProps>(
|
|
45
45
|
({ primary }, forwardedRef) => {
|
|
46
|
-
const { t } = useTranslation(
|
|
47
|
-
const {
|
|
46
|
+
const { t } = useTranslation(meta.id);
|
|
47
|
+
const { invokePromise } = useOperationInvoker();
|
|
48
48
|
const handleCloseCompanion = useCallback(() => {
|
|
49
49
|
invariant(primary);
|
|
50
|
-
return
|
|
51
|
-
}, []);
|
|
50
|
+
return invokePromise(DeckOperation.ChangeCompanion, { primary, companion: null });
|
|
51
|
+
}, [invokePromise, primary]);
|
|
52
52
|
return (
|
|
53
53
|
<div ref={forwardedRef} className='contents app-no-drag'>
|
|
54
54
|
<PlankControl
|
|
@@ -71,7 +71,7 @@ export const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(
|
|
|
71
71
|
{ children, classNames, variant = 'default', capabilities, layoutMode, pin, close = false, onClick, ...props },
|
|
72
72
|
forwardedRef,
|
|
73
73
|
) => {
|
|
74
|
-
const { t } = useTranslation(
|
|
74
|
+
const { t } = useTranslation(meta.id);
|
|
75
75
|
const buttonClassNames =
|
|
76
76
|
variant === 'hide-disabled' ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;
|
|
77
77
|
|
|
@@ -6,15 +6,15 @@ import React, { useEffect, useState } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type Node } from '@dxos/plugin-graph';
|
|
8
8
|
import { useTranslation } from '@dxos/react-ui';
|
|
9
|
-
import { descriptionMessage, mx } from '@dxos/
|
|
9
|
+
import { descriptionMessage, mx } from '@dxos/ui-theme';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { meta } from '../../meta';
|
|
12
12
|
|
|
13
13
|
import { PlankHeading, type PlankHeadingProps } from './PlankHeading';
|
|
14
14
|
import { PlankLoading } from './PlankLoading';
|
|
15
15
|
|
|
16
16
|
export const PlankContentError = ({ error }: { error?: Error }) => {
|
|
17
|
-
const { t } = useTranslation(
|
|
17
|
+
const { t } = useTranslation(meta.id);
|
|
18
18
|
const errorString = error?.toString() ?? '';
|
|
19
19
|
return (
|
|
20
20
|
<div role='none' className='overflow-y-auto p-8 attention-surface grid place-items-center'>
|
|
@@ -33,7 +33,7 @@ export const PlankError = ({
|
|
|
33
33
|
}: {
|
|
34
34
|
id: string;
|
|
35
35
|
part: PlankHeadingProps['part'];
|
|
36
|
-
node?: Node;
|
|
36
|
+
node?: Node.Node;
|
|
37
37
|
error?: Error;
|
|
38
38
|
}) => {
|
|
39
39
|
const [timedOut, setTimedOut] = useState(false);
|
|
@@ -4,17 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
|
+
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
9
|
+
import { useAppGraph } from '@dxos/app-toolkit/ui';
|
|
10
|
+
import { Graph, type Node, useActionRunner } from '@dxos/plugin-graph';
|
|
9
11
|
import { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
10
12
|
import { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';
|
|
11
13
|
import { TextTooltip } from '@dxos/react-ui-text-tooltip';
|
|
12
|
-
import { hoverableControls, hoverableFocusedWithinControls } from '@dxos/
|
|
14
|
+
import { hoverableControls, hoverableFocusedWithinControls } from '@dxos/ui-theme';
|
|
13
15
|
|
|
14
16
|
import { useBreakpoints } from '../../hooks';
|
|
15
17
|
import { parseEntryId } from '../../layout';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
+
import { meta } from '../../meta';
|
|
19
|
+
import { DeckOperation, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';
|
|
18
20
|
import { soloInlinePadding } from '../fragments';
|
|
19
21
|
|
|
20
22
|
import { PlankCompanionControls, PlankControls } from './PlankControls';
|
|
@@ -25,7 +27,7 @@ export type PlankHeadingProps = {
|
|
|
25
27
|
id: string;
|
|
26
28
|
part: ResolvedPart;
|
|
27
29
|
layoutMode?: LayoutMode;
|
|
28
|
-
node?: Node;
|
|
30
|
+
node?: Node.Node;
|
|
29
31
|
deckEnabled?: boolean;
|
|
30
32
|
canIncrementStart?: boolean;
|
|
31
33
|
canIncrementEnd?: boolean;
|
|
@@ -33,7 +35,7 @@ export type PlankHeadingProps = {
|
|
|
33
35
|
primaryId?: string;
|
|
34
36
|
pending?: boolean;
|
|
35
37
|
companioned?: 'primary' | 'companion';
|
|
36
|
-
companions?: Node[];
|
|
38
|
+
companions?: Node.Node[];
|
|
37
39
|
actions?: StackItemSigilAction[];
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -53,14 +55,15 @@ export const PlankHeading = memo(
|
|
|
53
55
|
layoutMode,
|
|
54
56
|
actions = [],
|
|
55
57
|
}: PlankHeadingProps) => {
|
|
56
|
-
const { t } = useTranslation(
|
|
57
|
-
const {
|
|
58
|
+
const { t } = useTranslation(meta.id);
|
|
59
|
+
const { invokePromise, invokeSync } = useOperationInvoker();
|
|
60
|
+
const runAction = useActionRunner();
|
|
58
61
|
const { graph } = useAppGraph();
|
|
59
62
|
const breakpoint = useBreakpoints();
|
|
60
63
|
const icon = node?.properties?.icon ?? 'ph--placeholder--regular';
|
|
61
64
|
const label = pending
|
|
62
65
|
? t('pending heading')
|
|
63
|
-
: toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns:
|
|
66
|
+
: toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: meta.id }], t);
|
|
64
67
|
|
|
65
68
|
const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;
|
|
66
69
|
|
|
@@ -68,7 +71,7 @@ export const PlankHeading = memo(
|
|
|
68
71
|
const frame = requestAnimationFrame(() => {
|
|
69
72
|
// Load actions for the node.
|
|
70
73
|
if (node) {
|
|
71
|
-
void
|
|
74
|
+
void Graph.expand(graph, node.id);
|
|
72
75
|
}
|
|
73
76
|
});
|
|
74
77
|
|
|
@@ -97,60 +100,53 @@ export const PlankHeading = memo(
|
|
|
97
100
|
} else {
|
|
98
101
|
return [
|
|
99
102
|
actions,
|
|
100
|
-
graph
|
|
101
|
-
.
|
|
102
|
-
|
|
103
|
+
Graph.getActions(graph, node.id).filter((a) =>
|
|
104
|
+
['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition),
|
|
105
|
+
),
|
|
103
106
|
].filter((a) => a.length > 0);
|
|
104
107
|
}
|
|
105
108
|
}, [actions, node, variant, graph]);
|
|
106
109
|
|
|
107
110
|
const handleAction = useCallback(
|
|
108
111
|
(action: StackItemSigilAction) => {
|
|
109
|
-
typeof action.data === 'function'
|
|
112
|
+
if (typeof action.data === 'function') {
|
|
113
|
+
void runAction(action as Node.Action, { parent: node, caller: meta.id });
|
|
114
|
+
}
|
|
110
115
|
},
|
|
111
|
-
[node],
|
|
116
|
+
[node, runAction],
|
|
112
117
|
);
|
|
113
118
|
|
|
114
119
|
const handlePlankAction = useCallback(
|
|
115
|
-
(eventType:
|
|
120
|
+
(eventType: DeckOperation.PartAdjustment) => {
|
|
116
121
|
if (eventType.startsWith('solo')) {
|
|
117
|
-
return
|
|
122
|
+
return invokePromise(DeckOperation.Adjust, { type: eventType, id });
|
|
118
123
|
} else if (eventType === 'close') {
|
|
119
124
|
if (part === 'complementary') {
|
|
120
|
-
return
|
|
121
|
-
createIntent(LayoutAction.UpdateComplementary, {
|
|
122
|
-
part: 'complementary',
|
|
123
|
-
options: { state: 'collapsed' },
|
|
124
|
-
}),
|
|
125
|
-
);
|
|
125
|
+
return invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
|
|
126
126
|
} else {
|
|
127
|
-
return
|
|
128
|
-
createIntent(LayoutAction.Close, { part: 'main', subject: [id], options: { state: false } }),
|
|
129
|
-
);
|
|
127
|
+
return invokeSync(LayoutOperation.Close, { subject: [id] });
|
|
130
128
|
}
|
|
131
129
|
} else {
|
|
132
|
-
return
|
|
130
|
+
return invokePromise(DeckOperation.Adjust, { type: eventType, id });
|
|
133
131
|
}
|
|
134
132
|
},
|
|
135
|
-
[
|
|
133
|
+
[invokePromise, invokeSync, id, part],
|
|
136
134
|
);
|
|
137
135
|
|
|
138
|
-
const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${
|
|
136
|
+
const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? Popover.Anchor : Fragment;
|
|
139
137
|
|
|
140
138
|
const handleTabClick = useCallback(
|
|
141
139
|
(event: MouseEvent) => {
|
|
142
140
|
const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;
|
|
143
141
|
const tabId = target?.dataset?.id;
|
|
144
142
|
if (primaryId && tabId) {
|
|
145
|
-
void
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}),
|
|
150
|
-
);
|
|
143
|
+
void invokePromise(DeckOperation.ChangeCompanion, {
|
|
144
|
+
primary: primaryId,
|
|
145
|
+
companion: tabId,
|
|
146
|
+
});
|
|
151
147
|
}
|
|
152
148
|
},
|
|
153
|
-
[primaryId],
|
|
149
|
+
[primaryId, invokePromise],
|
|
154
150
|
);
|
|
155
151
|
|
|
156
152
|
return (
|
|
@@ -162,7 +158,8 @@ export const PlankHeading = memo(
|
|
|
162
158
|
? [
|
|
163
159
|
hoverableControls,
|
|
164
160
|
hoverableFocusedWithinControls,
|
|
165
|
-
'*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color]
|
|
161
|
+
'*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color]',
|
|
162
|
+
'hover-hover:hover:bg-headerSurface focus-within:bg-headerSurface hover-hover:hover:border-subduedSeparator focus-within:border-subduedSeparator',
|
|
166
163
|
]
|
|
167
164
|
: []),
|
|
168
165
|
]}
|
|
@@ -178,7 +175,6 @@ export const PlankHeading = memo(
|
|
|
178
175
|
icon={icon}
|
|
179
176
|
iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}
|
|
180
177
|
label={toLocalizedString(label, t)}
|
|
181
|
-
size={5}
|
|
182
178
|
variant={node?.id === id ? 'primary' : 'ghost'}
|
|
183
179
|
onClick={handleTabClick}
|
|
184
180
|
/>
|
|
@@ -196,12 +192,12 @@ export const PlankHeading = memo(
|
|
|
196
192
|
actions={sigilActions}
|
|
197
193
|
onAction={handleAction}
|
|
198
194
|
>
|
|
199
|
-
<Surface role='menu-footer' data={{ subject: node.data }} />
|
|
195
|
+
<Surface.Surface role='menu-footer' data={{ subject: node.data }} />
|
|
200
196
|
</StackItem.Sigil>
|
|
201
197
|
) : (
|
|
202
198
|
<StackItem.SigilButton>
|
|
203
199
|
<span className='sr-only'>{label}</span>
|
|
204
|
-
<Icon icon={icon}
|
|
200
|
+
<Icon icon={icon} />
|
|
205
201
|
</StackItem.SigilButton>
|
|
206
202
|
)}
|
|
207
203
|
</ActionRoot>
|
|
@@ -216,7 +212,7 @@ export const PlankHeading = memo(
|
|
|
216
212
|
</TextTooltip>
|
|
217
213
|
</>
|
|
218
214
|
)}
|
|
219
|
-
{node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}
|
|
215
|
+
{node && part !== 'complementary' && <Surface.Surface role='navbar-end' data={{ subject: node.data }} />}
|
|
220
216
|
{companioned === 'companion' ? (
|
|
221
217
|
<PlankCompanionControls primary={primaryId} />
|
|
222
218
|
) : (
|