@dxos/plugin-help 0.8.4-main.84f28bd → 0.8.4-main.937b3ca

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 (145) hide show
  1. package/dist/lib/browser/app-graph-builder-DX3VXARQ.mjs +79 -0
  2. package/dist/lib/browser/app-graph-builder-DX3VXARQ.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-IM2QVQOH.mjs +16 -0
  4. package/dist/lib/browser/chunk-IM2QVQOH.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-TS66J4C6.mjs +58 -0
  6. package/dist/lib/browser/chunk-TS66J4C6.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-W5XAZM46.mjs +360 -0
  8. package/dist/lib/browser/chunk-W5XAZM46.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +58 -59
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/meta.mjs +1 -3
  13. package/dist/lib/browser/react-root-SZRF6EXG.mjs +43 -0
  14. package/dist/lib/browser/react-root-SZRF6EXG.mjs.map +7 -0
  15. package/dist/lib/browser/{react-surface-DIIOUUMT.mjs → react-surface-DWNTJBVM.mjs} +15 -14
  16. package/dist/lib/browser/react-surface-DWNTJBVM.mjs.map +7 -0
  17. package/dist/lib/browser/state-VRPLKT3F.mjs +27 -0
  18. package/dist/lib/browser/state-VRPLKT3F.mjs.map +7 -0
  19. package/dist/lib/browser/types/index.mjs +12 -0
  20. package/dist/types/src/HelpPlugin.d.ts +2 -1
  21. package/dist/types/src/HelpPlugin.d.ts.map +1 -1
  22. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  23. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  24. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  25. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  26. package/dist/types/src/capabilities/index.d.ts +5 -8
  27. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  28. package/dist/types/src/capabilities/operation-resolver/index.d.ts +2 -0
  29. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  30. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  31. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  32. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  33. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  34. package/dist/types/src/capabilities/react-root/react-root.d.ts +10 -0
  35. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  36. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  37. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  38. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  39. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  40. package/dist/types/src/capabilities/state/index.d.ts +11 -0
  41. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  42. package/dist/types/src/capabilities/state/state.d.ts +13 -0
  43. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  44. package/dist/types/src/components/Shortcuts/ShortcutsDialog.d.ts +1 -1
  45. package/dist/types/src/components/Shortcuts/ShortcutsDialog.d.ts.map +1 -1
  46. package/dist/types/src/components/Shortcuts/ShortcutsHints.d.ts.map +1 -1
  47. package/dist/types/src/components/Shortcuts/ShortcutsList.d.ts.map +1 -1
  48. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  49. package/dist/types/src/components/WelcomeTour/WelcomeTour.d.ts.map +1 -1
  50. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts +9 -4
  51. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts.map +1 -1
  52. package/dist/types/src/index.d.ts +1 -1
  53. package/dist/types/src/index.d.ts.map +1 -1
  54. package/dist/types/src/meta.d.ts +2 -3
  55. package/dist/types/src/meta.d.ts.map +1 -1
  56. package/dist/types/src/types/capabilities.d.ts +21 -0
  57. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  58. package/dist/types/src/types/index.d.ts +3 -0
  59. package/dist/types/src/types/index.d.ts.map +1 -0
  60. package/dist/types/src/types/schema.d.ts +32 -0
  61. package/dist/types/src/types/schema.d.ts.map +1 -0
  62. package/dist/types/tsconfig.tsbuildinfo +1 -1
  63. package/package.json +45 -39
  64. package/src/HelpPlugin.tsx +19 -47
  65. package/src/capabilities/app-graph-builder/app-graph-builder.ts +61 -0
  66. package/src/capabilities/app-graph-builder/index.ts +7 -0
  67. package/src/capabilities/index.ts +5 -8
  68. package/src/capabilities/operation-resolver/index.ts +5 -0
  69. package/src/capabilities/operation-resolver/operation-resolver.ts +23 -0
  70. package/src/capabilities/react-root/index.ts +7 -0
  71. package/src/capabilities/react-root/react-root.tsx +36 -0
  72. package/src/capabilities/react-surface/index.ts +7 -0
  73. package/src/capabilities/react-surface/react-surface.tsx +34 -0
  74. package/src/capabilities/state/index.ts +7 -0
  75. package/src/capabilities/state/state.ts +27 -0
  76. package/src/components/Shortcuts/ShortcutsDialog.tsx +7 -9
  77. package/src/components/Shortcuts/ShortcutsHints.tsx +14 -6
  78. package/src/components/Shortcuts/ShortcutsList.tsx +4 -3
  79. package/src/components/Shortcuts/ShortcutsSection.tsx +1 -1
  80. package/src/components/Shortcuts/styles.ts +1 -1
  81. package/src/components/Tooltip/Tooltip.tsx +28 -27
  82. package/src/components/WelcomeTour/WelcomeTour.stories.tsx +23 -18
  83. package/src/components/WelcomeTour/WelcomeTour.tsx +16 -19
  84. package/src/index.ts +1 -1
  85. package/src/meta.ts +8 -6
  86. package/src/types/capabilities.ts +24 -0
  87. package/src/types/index.ts +6 -0
  88. package/src/{types.ts → types/schema.ts} +13 -10
  89. package/dist/lib/browser/app-graph-builder-IXCF4ZDE.mjs +0 -79
  90. package/dist/lib/browser/app-graph-builder-IXCF4ZDE.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-27RZVOIE.mjs +0 -408
  92. package/dist/lib/browser/chunk-27RZVOIE.mjs.map +0 -7
  93. package/dist/lib/browser/chunk-3Y4CMOZP.mjs +0 -13
  94. package/dist/lib/browser/chunk-3Y4CMOZP.mjs.map +0 -7
  95. package/dist/lib/browser/chunk-LDRUZNSN.mjs +0 -16
  96. package/dist/lib/browser/chunk-LDRUZNSN.mjs.map +0 -7
  97. package/dist/lib/browser/chunk-WAN2NFYE.mjs +0 -36
  98. package/dist/lib/browser/chunk-WAN2NFYE.mjs.map +0 -7
  99. package/dist/lib/browser/react-root-A32LXEU4.mjs +0 -34
  100. package/dist/lib/browser/react-root-A32LXEU4.mjs.map +0 -7
  101. package/dist/lib/browser/react-surface-DIIOUUMT.mjs.map +0 -7
  102. package/dist/lib/browser/state-FWUZG6NL.mjs +0 -29
  103. package/dist/lib/browser/state-FWUZG6NL.mjs.map +0 -7
  104. package/dist/lib/browser/types.mjs +0 -12
  105. package/dist/lib/node-esm/app-graph-builder-5QQRWRWG.mjs +0 -80
  106. package/dist/lib/node-esm/app-graph-builder-5QQRWRWG.mjs.map +0 -7
  107. package/dist/lib/node-esm/chunk-6JMO5FFN.mjs +0 -37
  108. package/dist/lib/node-esm/chunk-6JMO5FFN.mjs.map +0 -7
  109. package/dist/lib/node-esm/chunk-CXQ5LKQI.mjs +0 -17
  110. package/dist/lib/node-esm/chunk-CXQ5LKQI.mjs.map +0 -7
  111. package/dist/lib/node-esm/chunk-PU7X4MJO.mjs +0 -409
  112. package/dist/lib/node-esm/chunk-PU7X4MJO.mjs.map +0 -7
  113. package/dist/lib/node-esm/chunk-T523OGIV.mjs +0 -15
  114. package/dist/lib/node-esm/chunk-T523OGIV.mjs.map +0 -7
  115. package/dist/lib/node-esm/index.mjs +0 -115
  116. package/dist/lib/node-esm/index.mjs.map +0 -7
  117. package/dist/lib/node-esm/meta.json +0 -1
  118. package/dist/lib/node-esm/meta.mjs +0 -10
  119. package/dist/lib/node-esm/meta.mjs.map +0 -7
  120. package/dist/lib/node-esm/react-root-Q6PGYYYP.mjs +0 -35
  121. package/dist/lib/node-esm/react-root-Q6PGYYYP.mjs.map +0 -7
  122. package/dist/lib/node-esm/react-surface-QEIKNNW3.mjs +0 -37
  123. package/dist/lib/node-esm/react-surface-QEIKNNW3.mjs.map +0 -7
  124. package/dist/lib/node-esm/state-Y476FGII.mjs +0 -30
  125. package/dist/lib/node-esm/state-Y476FGII.mjs.map +0 -7
  126. package/dist/lib/node-esm/types.mjs +0 -13
  127. package/dist/lib/node-esm/types.mjs.map +0 -7
  128. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  129. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  130. package/dist/types/src/capabilities/capabilities.d.ts +0 -10
  131. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  132. package/dist/types/src/capabilities/react-root.d.ts +0 -8
  133. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  134. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  135. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  136. package/dist/types/src/capabilities/state.d.ts +0 -4
  137. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  138. package/dist/types/src/types.d.ts +0 -29
  139. package/dist/types/src/types.d.ts.map +0 -1
  140. package/src/capabilities/app-graph-builder.ts +0 -76
  141. package/src/capabilities/capabilities.ts +0 -13
  142. package/src/capabilities/react-root.tsx +0 -32
  143. package/src/capabilities/react-surface.tsx +0 -30
  144. package/src/capabilities/state.ts +0 -23
  145. /package/dist/lib/browser/{types.mjs.map → types/index.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,25 +1,32 @@
1
1
  {
2
2
  "name": "@dxos/plugin-help",
3
- "version": "0.8.4-main.84f28bd",
3
+ "version": "0.8.4-main.937b3ca",
4
4
  "description": "Help plugin.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
13
  "sideEffects": true,
10
14
  "type": "module",
11
15
  "exports": {
12
16
  ".": {
17
+ "source": "./src/index.ts",
13
18
  "types": "./dist/types/src/index.d.ts",
14
19
  "browser": "./dist/lib/browser/index.mjs"
15
20
  },
16
21
  "./meta": {
22
+ "source": "./src/meta.ts",
17
23
  "types": "./dist/types/src/meta.d.ts",
18
24
  "browser": "./dist/lib/browser/meta.mjs"
19
25
  },
20
26
  "./types": {
21
- "types": "./dist/types/src/types.d.ts",
22
- "browser": "./dist/lib/browser/types.mjs"
27
+ "source": "./src/types/index.ts",
28
+ "types": "./dist/types/src/types/index.d.ts",
29
+ "browser": "./dist/lib/browser/types/index.mjs"
23
30
  }
24
31
  },
25
32
  "types": "dist/types/src/index.d.ts",
@@ -29,7 +36,7 @@
29
36
  "dist/types/src/meta.d.ts"
30
37
  ],
31
38
  "types": [
32
- "dist/types/src/types.d.ts"
39
+ "dist/types/src/types/index.d.ts"
33
40
  ]
34
41
  }
35
42
  },
@@ -38,48 +45,47 @@
38
45
  "src"
39
46
  ],
40
47
  "dependencies": {
41
- "@fluentui/react-tabster": "^9.24.2",
42
- "@preact-signals/safe-react": "^0.9.0",
48
+ "@effect-atom/atom": "^0.4.13",
49
+ "@fluentui/react-tabster": "9.26.11",
43
50
  "react-joyride": "^2.7.2",
44
- "@dxos/app-framework": "0.8.4-main.84f28bd",
45
- "@dxos/app-graph": "0.8.4-main.84f28bd",
46
- "@dxos/debug": "0.8.4-main.84f28bd",
47
- "@dxos/echo": "0.8.4-main.84f28bd",
48
- "@dxos/keyboard": "0.8.4-main.84f28bd",
49
- "@dxos/echo-schema": "0.8.4-main.84f28bd",
50
- "@dxos/live-object": "0.8.4-main.84f28bd",
51
- "@dxos/local-storage": "0.8.4-main.84f28bd",
52
- "@dxos/plugin-client": "0.8.4-main.84f28bd",
53
- "@dxos/plugin-graph": "0.8.4-main.84f28bd",
54
- "@dxos/plugin-space": "0.8.4-main.84f28bd",
55
- "@dxos/react-client": "0.8.4-main.84f28bd"
51
+ "@dxos/app-framework": "0.8.4-main.937b3ca",
52
+ "@dxos/app-graph": "0.8.4-main.937b3ca",
53
+ "@dxos/debug": "0.8.4-main.937b3ca",
54
+ "@dxos/echo": "0.8.4-main.937b3ca",
55
+ "@dxos/keyboard": "0.8.4-main.937b3ca",
56
+ "@dxos/effect": "0.8.4-main.937b3ca",
57
+ "@dxos/operation": "0.8.4-main.937b3ca",
58
+ "@dxos/plugin-graph": "0.8.4-main.937b3ca",
59
+ "@dxos/react-client": "0.8.4-main.937b3ca",
60
+ "@dxos/util": "0.8.4-main.937b3ca",
61
+ "@dxos/plugin-client": "0.8.4-main.937b3ca",
62
+ "@dxos/plugin-space": "0.8.4-main.937b3ca"
56
63
  },
57
64
  "devDependencies": {
58
- "@effect-rx/rx-react": "0.38.0",
59
- "@effect/platform": "0.88.0",
60
- "@phosphor-icons/react": "^2.1.5",
61
- "@types/react": "~18.2.0",
62
- "@types/react-dom": "~18.2.0",
63
- "effect": "3.16.13",
64
- "react": "~18.2.0",
65
- "react-dom": "~18.2.0",
65
+ "@effect-atom/atom-react": "^0.4.6",
66
+ "@effect/platform": "0.93.6",
67
+ "@types/react": "~19.2.7",
68
+ "@types/react-dom": "~19.2.3",
69
+ "effect": "3.19.11",
70
+ "react": "~19.2.3",
71
+ "react-dom": "~19.2.3",
66
72
  "react-floater": "0.7.9",
67
73
  "type-fest": "4.10.1",
68
- "vite": "5.4.7",
69
- "@dxos/random": "0.8.4-main.84f28bd",
70
- "@dxos/react-ui": "0.8.4-main.84f28bd",
71
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd",
72
- "@dxos/storybook-utils": "0.8.4-main.84f28bd"
74
+ "vite": "7.1.9",
75
+ "@dxos/random": "0.8.4-main.937b3ca",
76
+ "@dxos/plugin-testing": "0.8.4-main.937b3ca",
77
+ "@dxos/react-ui": "0.8.4-main.937b3ca",
78
+ "@dxos/storybook-utils": "0.8.4-main.937b3ca",
79
+ "@dxos/ui-theme": "0.8.4-main.937b3ca"
73
80
  },
74
81
  "peerDependencies": {
75
- "@effect-rx/rx-react": "^0.34.1",
76
- "@effect/platform": "^0.80.12",
77
- "@phosphor-icons/react": "^2.1.5",
78
- "effect": "^3.13.3",
79
- "react": "~18.2.0",
80
- "react-dom": "~18.2.0",
81
- "@dxos/react-ui": "0.8.4-main.84f28bd",
82
- "@dxos/react-ui-theme": "0.8.4-main.84f28bd"
82
+ "@effect-atom/atom-react": "^0.4.6",
83
+ "@effect/platform": "0.93.6",
84
+ "effect": "3.19.11",
85
+ "react": "~19.2.3",
86
+ "react-dom": "~19.2.3",
87
+ "@dxos/react-ui": "0.8.4-main.937b3ca",
88
+ "@dxos/ui-theme": "0.8.4-main.937b3ca"
83
89
  },
84
90
  "publishConfig": {
85
91
  "access": "public"
@@ -2,56 +2,28 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { createResolver, defineModule, definePlugin, Events, contributes, Capabilities } from '@dxos/app-framework';
5
+ import { Common, Plugin } from '@dxos/app-framework';
6
6
 
7
- import { AppGraphBuilder, HelpState, ReactRoot, ReactSurface } from './capabilities';
8
- import { HelpCapabilities } from './capabilities/capabilities';
7
+ import { AppGraphBuilder, HelpState, OperationResolver, ReactRoot, ReactSurface } from './capabilities';
9
8
  import { meta } from './meta';
10
9
  import { translations } from './translations';
11
- import { type Step, HelpAction } from './types';
10
+ import { type Step } from './types';
12
11
 
13
12
  export type HelpPluginOptions = { steps?: Step[] };
14
13
 
15
- export const HelpPlugin = ({ steps = [] }: HelpPluginOptions) =>
16
- definePlugin(meta, [
17
- defineModule({
18
- id: `${meta.id}/module/state`,
19
- activatesOn: Events.Startup,
20
- activate: HelpState,
21
- }),
22
- defineModule({
23
- id: `${meta.id}/module/translations`,
24
- activatesOn: Events.SetupTranslations,
25
- activate: () => contributes(Capabilities.Translations, translations),
26
- }),
27
- defineModule({
28
- id: `${meta.id}/module/react-root`,
29
- activatesOn: Events.Startup,
30
- activate: () => ReactRoot(steps),
31
- }),
32
- defineModule({
33
- id: `${meta.id}/module/react-surface`,
34
- activatesOn: Events.SetupReactSurface,
35
- activate: ReactSurface,
36
- }),
37
- defineModule({
38
- id: `${meta.id}/module/intent-resolver`,
39
- activatesOn: Events.SetupIntentResolver,
40
- activate: (context) =>
41
- contributes(
42
- Capabilities.IntentResolver,
43
- createResolver({
44
- intent: HelpAction.Start,
45
- resolve: () => {
46
- const state = context.getCapability(HelpCapabilities.MutableState);
47
- state.running = true;
48
- },
49
- }),
50
- ),
51
- }),
52
- defineModule({
53
- id: `${meta.id}/module/app-graph-builder`,
54
- activatesOn: Events.SetupAppGraph,
55
- activate: AppGraphBuilder,
56
- }),
57
- ]);
14
+ export const HelpPlugin = Plugin.define<HelpPluginOptions>(meta).pipe(
15
+ Plugin.addModule({
16
+ activatesOn: Common.ActivationEvent.Startup,
17
+ activate: HelpState,
18
+ }),
19
+ Common.Plugin.addTranslationsModule({ translations }),
20
+ Plugin.addModule(({ steps = [] }) => ({
21
+ id: 'react-root',
22
+ activatesOn: Common.ActivationEvent.Startup,
23
+ activate: () => ReactRoot(steps),
24
+ })),
25
+ Common.Plugin.addSurfaceModule({ activate: ReactSurface }),
26
+ Common.Plugin.addOperationResolverModule({ activate: OperationResolver }),
27
+ Common.Plugin.addAppGraphModule({ activate: AppGraphBuilder }),
28
+ Plugin.make,
29
+ );
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { GraphBuilder, NodeMatcher } from '@dxos/app-graph';
9
+ import { Operation } from '@dxos/operation';
10
+
11
+ import { SHORTCUTS_DIALOG } from '../../components';
12
+ import { meta } from '../../meta';
13
+ import { HelpCapabilities, HelpOperation } from '../../types';
14
+
15
+ export default Capability.makeModule(
16
+ Effect.fnUntraced(function* () {
17
+ const extensions = yield* GraphBuilder.createExtension({
18
+ id: meta.id,
19
+ match: NodeMatcher.whenRoot,
20
+ actions: () =>
21
+ Effect.succeed([
22
+ {
23
+ id: HelpOperation.Start.meta.key,
24
+ data: Effect.fnUntraced(function* () {
25
+ yield* Common.Capability.updateAtomValue(HelpCapabilities.State, (s) => ({ ...s, showHints: true }));
26
+ yield* Operation.invoke(HelpOperation.Start);
27
+ }),
28
+ properties: {
29
+ label: ['open help tour', { ns: meta.id }],
30
+ icon: 'ph--info--regular',
31
+ keyBinding: {
32
+ macos: 'shift+meta+/',
33
+ windows: 'shift+ctrl+/',
34
+ linux: 'shift+ctrl+?',
35
+ },
36
+ testId: 'helpPlugin.openHelp',
37
+ },
38
+ },
39
+ {
40
+ id: `${meta.id}/open-shortcuts`,
41
+ data: Effect.fnUntraced(function* () {
42
+ yield* Common.Capability.updateAtomValue(HelpCapabilities.State, (s) => ({ ...s, showHints: true }));
43
+ yield* Operation.invoke(Common.LayoutOperation.UpdateDialog, {
44
+ subject: SHORTCUTS_DIALOG,
45
+ blockAlign: 'center',
46
+ });
47
+ }),
48
+ properties: {
49
+ label: ['open shortcuts label', { ns: meta.id }],
50
+ icon: 'ph--keyboard--regular',
51
+ keyBinding: {
52
+ macos: 'meta+ctrl+/',
53
+ },
54
+ },
55
+ },
56
+ ]),
57
+ });
58
+
59
+ return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
60
+ }),
61
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
@@ -2,11 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
6
-
7
- export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
8
- export const ReactRoot = lazy(() => import('./react-root'));
9
- export const ReactSurface = lazy(() => import('./react-surface'));
10
- export const HelpState = lazy(() => import('./state'));
11
-
12
- export * from './capabilities';
5
+ export * from './app-graph-builder';
6
+ export * from './operation-resolver';
7
+ export * from './react-root';
8
+ export * from './react-surface';
9
+ export * from './state';
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export { default as OperationResolver } from './operation-resolver';
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability, Common } from '@dxos/app-framework';
8
+ import { OperationResolver } from '@dxos/operation';
9
+
10
+ import { HelpCapabilities, HelpOperation } from '../../types';
11
+
12
+ export default Capability.makeModule(
13
+ Effect.fnUntraced(function* () {
14
+ return Capability.contributes(Common.Capability.OperationResolver, [
15
+ OperationResolver.make({
16
+ operation: HelpOperation.Start,
17
+ handler: Effect.fnUntraced(function* () {
18
+ yield* Common.Capability.updateAtomValue(HelpCapabilities.State, (state) => ({ ...state, running: true }));
19
+ }),
20
+ }),
21
+ ]);
22
+ }),
23
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ReactRoot = Capability.lazy('ReactRoot', () => import('./react-root'));
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import React from 'react';
7
+
8
+ import { Capability, Common } from '@dxos/app-framework';
9
+ import { useAtomCapabilityState } from '@dxos/app-framework/react';
10
+
11
+ import { WelcomeTour } from '../../components';
12
+ import { meta } from '../../meta';
13
+ import { HelpCapabilities, type Step } from '../../types';
14
+
15
+ export default Capability.makeModule(
16
+ Effect.fnUntraced(function* (steps?: Step[]) {
17
+ return Capability.contributes(Common.Capability.ReactRoot, {
18
+ id: meta.id,
19
+ root: () => {
20
+ const [state, updateState] = useAtomCapabilityState(HelpCapabilities.State);
21
+ return (
22
+ <WelcomeTour
23
+ steps={steps ?? []}
24
+ running={state.running}
25
+ onRunningChanged={(newState) => {
26
+ updateState((s) => ({ ...s, running: newState }));
27
+ if (!newState) {
28
+ updateState((s) => ({ ...s, showHints: false }));
29
+ }
30
+ }}
31
+ />
32
+ );
33
+ },
34
+ });
35
+ }),
36
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import React from 'react';
7
+
8
+ import { Capability, Common } from '@dxos/app-framework';
9
+
10
+ import { SHORTCUTS_DIALOG, ShortcutsDialogContent, ShortcutsHints, ShortcutsList } from '../../components';
11
+ import { meta } from '../../meta';
12
+
13
+ export default Capability.makeModule(() =>
14
+ Effect.succeed(
15
+ Capability.contributes(Common.Capability.ReactSurface, [
16
+ Common.createSurface({
17
+ id: `${meta.id}/hints`,
18
+ role: 'hints',
19
+ component: () => <ShortcutsHints />,
20
+ }),
21
+ Common.createSurface({
22
+ id: `${meta.id}/keyshortcuts`,
23
+ role: 'keyshortcuts',
24
+ component: () => <ShortcutsList />,
25
+ }),
26
+ Common.createSurface({
27
+ id: SHORTCUTS_DIALOG,
28
+ role: 'dialog',
29
+ filter: (data): data is { component: string } => data.component === SHORTCUTS_DIALOG,
30
+ component: () => <ShortcutsDialogContent />,
31
+ }),
32
+ ]),
33
+ ),
34
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const HelpState = Capability.lazy('HelpState', () => import('./state'));
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { createKvsStore } from '@dxos/effect';
9
+
10
+ import { meta } from '../../meta';
11
+ import { HelpCapabilities } from '../../types';
12
+
13
+ export default Capability.makeModule(() =>
14
+ Effect.sync(() => {
15
+ const stateAtom = createKvsStore({
16
+ key: meta.id,
17
+ schema: HelpCapabilities.StateSchema,
18
+ defaultValue: () => ({
19
+ running: false,
20
+ showHints: true,
21
+ showWelcome: true,
22
+ }),
23
+ });
24
+
25
+ return Capability.contributes(HelpCapabilities.State, stateAtom);
26
+ }),
27
+ );
@@ -4,25 +4,23 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
7
+ import { Dialog, IconButton, useTranslation } from '@dxos/react-ui';
8
+
9
+ import { meta } from '../../meta';
8
10
 
9
11
  import { ShortcutsList } from './ShortcutsList';
10
- import { HELP_PLUGIN } from '../../meta';
11
12
 
12
- export const SHORTCUTS_DIALOG = `${HELP_PLUGIN}/ShortcutsDialog`;
13
+ export const SHORTCUTS_DIALOG = `${meta.id}/ShortcutsDialog`;
13
14
 
14
15
  export const ShortcutsDialogContent = () => {
15
- const { t } = useTranslation(HELP_PLUGIN);
16
+ const { t } = useTranslation(meta.id);
16
17
 
17
18
  return (
18
- <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[25rem] overflow-hidden'>
19
+ <Dialog.Content>
19
20
  <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>
20
21
  <Dialog.Title>{t('shortcuts dialog title')}</Dialog.Title>
21
-
22
22
  <Dialog.Close asChild>
23
- <Button density='fine' variant='ghost' autoFocus>
24
- <Icon icon='ph--x--bold' size={3} />
25
- </Button>
23
+ <IconButton icon='ph--x--bold' iconOnly size={3} label='Close' variant='ghost' autoFocus />
26
24
  </Dialog.Close>
27
25
  </div>
28
26
 
@@ -5,12 +5,13 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { type KeyBinding, Keyboard } from '@dxos/keyboard';
8
- import { Button, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
8
+ import { IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';
9
+ import { osTranslations } from '@dxos/ui-theme';
9
10
 
10
11
  import { Key } from './Key';
11
12
 
12
13
  const Shortcut = ({ binding }: { binding: KeyBinding }) => {
13
- const { t } = useTranslation('os');
14
+ const { t } = useTranslation(osTranslations);
14
15
  return (
15
16
  <div role='none' className='flex items-center gap-2 whitespace-nowrap'>
16
17
  <Key binding={binding.shortcut} />
@@ -26,14 +27,21 @@ export const ShortcutsHints = ({ onClose }: { onClose?: () => void }) => {
26
27
  const hints = bindings.filter((binding) => defaults.includes(binding.shortcut));
27
28
 
28
29
  return (
29
- <div role='none' className='flex overflow-hidden px-2 gap-4'>
30
+ <div role='none' className='flex overflow-hidden pli-2 gap-4'>
30
31
  {hints.map((binding) => (
31
32
  <Shortcut key={binding.shortcut} binding={binding} />
32
33
  ))}
33
34
  {onClose && (
34
- <Button variant='ghost' classNames='p-0 cursor-pointer' onClick={onClose}>
35
- <Icon icon='ph--x--regular' size={4} />
36
- </Button>
35
+ <IconButton
36
+ icon='ph--x--regular'
37
+ size={4}
38
+ label='Close'
39
+ iconOnly
40
+ noTooltip
41
+ variant='ghost'
42
+ classNames='p-0 cursor-pointer'
43
+ onClick={onClose}
44
+ />
37
45
  )}
38
46
  </div>
39
47
  );
@@ -6,13 +6,14 @@ import React, { Fragment } from 'react';
6
6
 
7
7
  import { Keyboard } from '@dxos/keyboard';
8
8
  import { toLocalizedString, useTranslation } from '@dxos/react-ui';
9
- import { mx } from '@dxos/react-ui-theme';
9
+ import { mx } from '@dxos/ui-theme';
10
+
11
+ import { meta } from '../../meta';
10
12
 
11
13
  import { Key } from './Key';
12
- import { HELP_PLUGIN } from '../../meta';
13
14
 
14
15
  export const ShortcutsList = () => {
15
- const { t } = useTranslation(HELP_PLUGIN);
16
+ const { t } = useTranslation(meta.id);
16
17
  const bindings = Keyboard.singleton.getBindings();
17
18
 
18
19
  // TODO(burdon): Get shortcuts from TextEditor.
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { descriptionText } from '@dxos/react-ui-theme';
7
+ import { descriptionText } from '@dxos/ui-theme';
8
8
 
9
9
  import { ShortcutsList } from './ShortcutsList';
10
10
 
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { mx } from '@dxos/react-ui-theme';
5
+ import { mx } from '@dxos/ui-theme';
6
6
 
7
7
  export const shortcutKey = mx(
8
8
  'inline-flex min-is-[24px] bs-[24px] pli-0.5 justify-center items-center text-xs',