@dxos/plugin-help 0.7.5-feature-compute.4d9d99a → 0.7.5-labs.071a3e2

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 (46) hide show
  1. package/dist/lib/browser/{app-graph-builder-G3FCDRBG.mjs → app-graph-builder-X4XWALX3.mjs} +8 -5
  2. package/dist/lib/browser/{app-graph-builder-G3FCDRBG.mjs.map → app-graph-builder-X4XWALX3.mjs.map} +3 -3
  3. package/dist/lib/browser/{chunk-VNAN5GRY.mjs → chunk-C7PCVS5K.mjs} +151 -151
  4. package/dist/lib/browser/chunk-C7PCVS5K.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +15 -12
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-context-SIW6XKOC.mjs → react-root-4AV22UGT.mjs} +9 -9
  9. package/dist/lib/browser/react-root-4AV22UGT.mjs.map +7 -0
  10. package/dist/lib/browser/{react-surface-TZZUXIVX.mjs → react-surface-7S3NUVZH.mjs} +2 -2
  11. package/dist/types/src/HelpPlugin.d.ts.map +1 -1
  12. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  13. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  14. package/dist/types/src/capabilities/index.d.ts +29 -30
  15. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/{react-context.d.ts → react-root.d.ts} +2 -3
  17. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  18. package/dist/types/src/components/WelcomeTour/WelcomeTour.d.ts +9 -0
  19. package/dist/types/src/components/WelcomeTour/WelcomeTour.d.ts.map +1 -0
  20. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts +10 -0
  21. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts.map +1 -0
  22. package/dist/types/src/components/WelcomeTour/index.d.ts +2 -0
  23. package/dist/types/src/components/WelcomeTour/index.d.ts.map +1 -0
  24. package/dist/types/src/components/index.d.ts +1 -1
  25. package/dist/types/src/components/index.d.ts.map +1 -1
  26. package/dist/types/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +19 -19
  28. package/src/HelpPlugin.tsx +10 -7
  29. package/src/capabilities/app-graph-builder.ts +9 -1
  30. package/src/capabilities/index.ts +1 -1
  31. package/src/capabilities/{react-context.tsx → react-root.tsx} +5 -7
  32. package/src/components/{HelpContextProvider/HelpContextProvider.stories.tsx → WelcomeTour/WelcomeTour.stories.tsx} +9 -8
  33. package/src/components/{HelpContextProvider/HelpContextProvider.tsx → WelcomeTour/WelcomeTour.tsx} +7 -13
  34. package/src/components/WelcomeTour/index.ts +5 -0
  35. package/src/components/index.ts +1 -1
  36. package/dist/lib/browser/chunk-VNAN5GRY.mjs.map +0 -7
  37. package/dist/lib/browser/react-context-SIW6XKOC.mjs.map +0 -7
  38. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  39. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.d.ts +0 -9
  40. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.d.ts.map +0 -1
  41. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.stories.d.ts +0 -10
  42. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.stories.d.ts.map +0 -1
  43. package/dist/types/src/components/HelpContextProvider/index.d.ts +0 -2
  44. package/dist/types/src/components/HelpContextProvider/index.d.ts.map +0 -1
  45. package/src/components/HelpContextProvider/index.ts +0 -5
  46. /package/dist/lib/browser/{react-surface-TZZUXIVX.mjs.map → react-surface-7S3NUVZH.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SHORTCUTS_DIALOG
3
- } from "./chunk-VNAN5GRY.mjs";
3
+ } from "./chunk-C7PCVS5K.mjs";
4
4
  import {
5
5
  HelpAction
6
6
  } from "./chunk-24E4WRKH.mjs";
@@ -49,9 +49,12 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
49
49
  const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
50
50
  const state = context.requestCapability(HelpCapabilities.MutableState);
51
51
  state.showHints = true;
52
- await dispatch?.(createIntent(LayoutAction.SetLayout, {
53
- element: "dialog",
54
- component: SHORTCUTS_DIALOG
52
+ await dispatch(createIntent(LayoutAction.UpdateDialog, {
53
+ part: "dialog",
54
+ subject: SHORTCUTS_DIALOG,
55
+ options: {
56
+ blockAlign: "center"
57
+ }
55
58
  }));
56
59
  },
57
60
  properties: {
@@ -72,4 +75,4 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
72
75
  export {
73
76
  app_graph_builder_default as default
74
77
  };
75
- //# sourceMappingURL=app-graph-builder-G3FCDRBG.mjs.map
78
+ //# sourceMappingURL=app-graph-builder-X4XWALX3.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, LayoutAction, type PluginsContext } from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/app-graph';\n\nimport { HelpCapabilities } from './capabilities';\nimport { SHORTCUTS_DIALOG } from '../components';\nimport { HELP_PLUGIN } from '../meta';\nimport { HelpAction } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: HELP_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: HelpAction.Start._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.showHints = true;\n await dispatch(createIntent(HelpAction.Start));\n },\n properties: {\n label: ['open help tour', { ns: HELP_PLUGIN }],\n icon: 'ph--info--regular',\n keyBinding: {\n macos: 'shift+meta+/',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'shift+ctrl+/',\n linux: 'shift+ctrl+?',\n },\n testId: 'helpPlugin.openHelp',\n },\n },\n {\n id: 'dxos.org/plugin/help/open-shortcuts',\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.showHints = true;\n await dispatch?.(createIntent(LayoutAction.SetLayout, { element: 'dialog', component: SHORTCUTS_DIALOG }));\n },\n properties: {\n label: ['open shortcuts label', { ns: HELP_PLUGIN }],\n icon: 'ph--keyboard--regular',\n keyBinding: {\n macos: 'meta+ctrl+/',\n },\n },\n },\n ],\n }),\n );\n"],
5
- "mappings": ";;;;;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,cAAcC,oBAAyC;AAC3F,SAASC,uBAAkC;AAO3C,IAAA,4BAAe,CAACC,YACdC,YACEC,aAAaC,iBACbC,gBAAgB;EACdC,IAAIC;EACJC,QAAQ,CAACC,SAA6BA,KAAKH,OAAO;EAClDI,SAAS,MAAM;IACb;MACEJ,IAAIK,WAAWC,MAAMC;MACrBC,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKf,QAAQgB,kBAAkBd,aAAae,gBAAgB;AAC7F,cAAMC,QAAQlB,QAAQgB,kBAAkBG,iBAAiBC,YAAY;AACrEF,cAAMG,YAAY;AAClB,cAAMN,SAASO,aAAaZ,WAAWC,KAAK,CAAA;MAC9C;MACAY,YAAY;QACVC,OAAO;UAAC;UAAkB;YAAEC,IAAInB;UAAY;;QAC5CoB,MAAM;QACNC,YAAY;UACVC,OAAO;;UAEPC,SAAS;UACTC,OAAO;QACT;QACAC,QAAQ;MACV;IACF;IACA;MACE1B,IAAI;MACJQ,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKf,QAAQgB,kBAAkBd,aAAae,gBAAgB;AAC7F,cAAMC,QAAQlB,QAAQgB,kBAAkBG,iBAAiBC,YAAY;AACrEF,cAAMG,YAAY;AAClB,cAAMN,WAAWO,aAAaU,aAAaC,WAAW;UAAEC,SAAS;UAAUC,WAAWC;QAAiB,CAAA,CAAA;MACzG;MACAb,YAAY;QACVC,OAAO;UAAC;UAAwB;YAAEC,IAAInB;UAAY;;QAClDoB,MAAM;QACNC,YAAY;UACVC,OAAO;QACT;MACF;IACF;;AAEJ,CAAA,CAAA;",
6
- "names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "HELP_PLUGIN", "filter", "node", "actions", "HelpAction", "Start", "_tag", "data", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "state", "HelpCapabilities", "MutableState", "showHints", "createIntent", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "linux", "testId", "LayoutAction", "SetLayout", "element", "component", "SHORTCUTS_DIALOG"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, LayoutAction, type PluginsContext } from '@dxos/app-framework';\nimport { createExtension, type Node } from '@dxos/app-graph';\n\nimport { HelpCapabilities } from './capabilities';\nimport { SHORTCUTS_DIALOG } from '../components';\nimport { HELP_PLUGIN } from '../meta';\nimport { HelpAction } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: HELP_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: HelpAction.Start._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.showHints = true;\n await dispatch(createIntent(HelpAction.Start));\n },\n properties: {\n label: ['open help tour', { ns: HELP_PLUGIN }],\n icon: 'ph--info--regular',\n keyBinding: {\n macos: 'shift+meta+/',\n // TODO(wittjosiah): Test on windows to see if it behaves the same as linux.\n windows: 'shift+ctrl+/',\n linux: 'shift+ctrl+?',\n },\n testId: 'helpPlugin.openHelp',\n },\n },\n {\n id: 'dxos.org/plugin/help/open-shortcuts',\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.showHints = true;\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: SHORTCUTS_DIALOG,\n options: {\n blockAlign: 'center',\n },\n }),\n );\n },\n properties: {\n label: ['open shortcuts label', { ns: HELP_PLUGIN }],\n icon: 'ph--keyboard--regular',\n keyBinding: {\n macos: 'meta+ctrl+/',\n },\n },\n },\n ],\n }),\n );\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,cAAcC,oBAAyC;AAC3F,SAASC,uBAAkC;AAO3C,IAAA,4BAAe,CAACC,YACdC,YACEC,aAAaC,iBACbC,gBAAgB;EACdC,IAAIC;EACJC,QAAQ,CAACC,SAA6BA,KAAKH,OAAO;EAClDI,SAAS,MAAM;IACb;MACEJ,IAAIK,WAAWC,MAAMC;MACrBC,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKf,QAAQgB,kBAAkBd,aAAae,gBAAgB;AAC7F,cAAMC,QAAQlB,QAAQgB,kBAAkBG,iBAAiBC,YAAY;AACrEF,cAAMG,YAAY;AAClB,cAAMN,SAASO,aAAaZ,WAAWC,KAAK,CAAA;MAC9C;MACAY,YAAY;QACVC,OAAO;UAAC;UAAkB;YAAEC,IAAInB;UAAY;;QAC5CoB,MAAM;QACNC,YAAY;UACVC,OAAO;;UAEPC,SAAS;UACTC,OAAO;QACT;QACAC,QAAQ;MACV;IACF;IACA;MACE1B,IAAI;MACJQ,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKf,QAAQgB,kBAAkBd,aAAae,gBAAgB;AAC7F,cAAMC,QAAQlB,QAAQgB,kBAAkBG,iBAAiBC,YAAY;AACrEF,cAAMG,YAAY;AAClB,cAAMN,SACJO,aAAaU,aAAaC,cAAc;UACtCC,MAAM;UACNC,SAASC;UACTC,SAAS;YACPC,YAAY;UACd;QACF,CAAA,CAAA;MAEJ;MACAf,YAAY;QACVC,OAAO;UAAC;UAAwB;YAAEC,IAAInB;UAAY;;QAClDoB,MAAM;QACNC,YAAY;UACVC,OAAO;QACT;MACF;IACF;;AAEJ,CAAA,CAAA;",
6
+ "names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "HELP_PLUGIN", "filter", "node", "actions", "HelpAction", "Start", "_tag", "data", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "state", "HelpCapabilities", "MutableState", "showHints", "createIntent", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "linux", "testId", "LayoutAction", "UpdateDialog", "part", "subject", "SHORTCUTS_DIALOG", "options", "blockAlign"]
7
7
  }
@@ -5,12 +5,130 @@ import {
5
5
  HELP_PLUGIN
6
6
  } from "./chunk-76XWX6N3.mjs";
7
7
 
8
+ // packages/plugins/plugin-help/src/components/Shortcuts/Key.tsx
9
+ import React from "react";
10
+ import { keySymbols } from "@dxos/keyboard";
11
+
12
+ // packages/plugins/plugin-help/src/components/Shortcuts/styles.ts
13
+ import { mx } from "@dxos/react-ui-theme";
14
+ var shortcutKey = mx("inline-flex min-is-[24px] bs-[24px] pli-0.5 justify-center items-center text-xs", "rounded bg-neutral-100 dark:bg-neutral-900");
15
+
16
+ // packages/plugins/plugin-help/src/components/Shortcuts/Key.tsx
17
+ var Key = ({ binding }) => {
18
+ return /* @__PURE__ */ React.createElement("span", {
19
+ role: "term",
20
+ className: "inline-flex gap-1",
21
+ "aria-label": binding,
22
+ id: binding
23
+ }, keySymbols(binding).map((c, i) => /* @__PURE__ */ React.createElement("span", {
24
+ key: i,
25
+ className: shortcutKey
26
+ }, c)));
27
+ };
28
+
29
+ // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsList.tsx
30
+ import React2, { Fragment } from "react";
31
+ import { Keyboard } from "@dxos/keyboard";
32
+ import { toLocalizedString, useTranslation } from "@dxos/react-ui";
33
+ import { mx as mx2 } from "@dxos/react-ui-theme";
34
+ var ShortcutsList = () => {
35
+ const { t } = useTranslation(HELP_PLUGIN);
36
+ const bindings = Keyboard.singleton.getBindings();
37
+ bindings.sort((a, b) => {
38
+ return toLocalizedString(a.data, t)?.toLowerCase().localeCompare(toLocalizedString(b.data, t)?.toLowerCase());
39
+ });
40
+ return /* @__PURE__ */ React2.createElement("dl", {
41
+ className: mx2("is-fit grid grid-cols-[min-content_minmax(12rem,1fr)] gap-2 mlb-4 text-subdued")
42
+ }, bindings.map((binding, i) => /* @__PURE__ */ React2.createElement(Fragment, {
43
+ key: i
44
+ }, /* @__PURE__ */ React2.createElement(Key, {
45
+ binding: binding.shortcut
46
+ }), /* @__PURE__ */ React2.createElement("span", {
47
+ role: "definition",
48
+ className: "mis-4",
49
+ "aria-labelledby": binding.shortcut
50
+ }, toLocalizedString(binding.data, t)))));
51
+ };
52
+
53
+ // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsDialog.tsx
54
+ import React3 from "react";
55
+ import { Button, Dialog, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
56
+ var SHORTCUTS_DIALOG = `${HELP_PLUGIN}/ShortcutsDialog`;
57
+ var ShortcutsDialogContent = () => {
58
+ const { t } = useTranslation2(HELP_PLUGIN);
59
+ return /* @__PURE__ */ React3.createElement(Dialog.Content, {
60
+ classNames: "p-0 bs-content max-bs-full md:max-is-[25rem] overflow-hidden"
61
+ }, /* @__PURE__ */ React3.createElement("div", {
62
+ role: "none",
63
+ className: "flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5"
64
+ }, /* @__PURE__ */ React3.createElement(Dialog.Title, null, t("shortcuts dialog title")), /* @__PURE__ */ React3.createElement(Dialog.Close, {
65
+ asChild: true
66
+ }, /* @__PURE__ */ React3.createElement(Button, {
67
+ density: "fine",
68
+ variant: "ghost",
69
+ autoFocus: true
70
+ }, /* @__PURE__ */ React3.createElement(Icon, {
71
+ icon: "ph--x--regular",
72
+ size: 3
73
+ })))), /* @__PURE__ */ React3.createElement("div", {
74
+ className: "flex items-center justify-center"
75
+ }, /* @__PURE__ */ React3.createElement(ShortcutsList, null)));
76
+ };
77
+
78
+ // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsHints.tsx
79
+ import React4 from "react";
80
+ import { Keyboard as Keyboard2 } from "@dxos/keyboard";
81
+ import { Button as Button2, Icon as Icon2, toLocalizedString as toLocalizedString2, useTranslation as useTranslation3 } from "@dxos/react-ui";
82
+ var Shortcut = ({ binding }) => {
83
+ const { t } = useTranslation3("os");
84
+ return /* @__PURE__ */ React4.createElement("div", {
85
+ role: "none",
86
+ className: "flex items-center gap-2 whitespace-nowrap"
87
+ }, /* @__PURE__ */ React4.createElement(Key, {
88
+ binding: binding.shortcut
89
+ }), /* @__PURE__ */ React4.createElement("span", {
90
+ className: "text-sm"
91
+ }, toLocalizedString2(binding.data, t)));
92
+ };
93
+ var ShortcutsHints = ({ onClose }) => {
94
+ const defaults = [
95
+ "meta+k",
96
+ "meta+/",
97
+ "meta+,"
98
+ ];
99
+ const bindings = Keyboard2.singleton.getBindings();
100
+ const hints = bindings.filter((binding) => defaults.includes(binding.shortcut));
101
+ return /* @__PURE__ */ React4.createElement("div", {
102
+ role: "none",
103
+ className: "flex overflow-hidden px-2 gap-4"
104
+ }, hints.map((binding) => /* @__PURE__ */ React4.createElement(Shortcut, {
105
+ key: binding.shortcut,
106
+ binding
107
+ })), onClose && /* @__PURE__ */ React4.createElement(Button2, {
108
+ variant: "ghost",
109
+ classNames: "p-0 cursor-pointer",
110
+ onClick: onClose
111
+ }, /* @__PURE__ */ React4.createElement(Icon2, {
112
+ icon: "ph--x--regular",
113
+ size: 4
114
+ })));
115
+ };
116
+
117
+ // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsSection.tsx
118
+ import React5 from "react";
119
+ import { descriptionText } from "@dxos/react-ui-theme";
120
+ var ShortcutsSection = () => {
121
+ return /* @__PURE__ */ React5.createElement("section", {
122
+ className: descriptionText
123
+ }, /* @__PURE__ */ React5.createElement(ShortcutsList, null));
124
+ };
125
+
8
126
  // packages/plugins/plugin-help/src/components/Tooltip/Tooltip.tsx
9
127
  import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
10
128
  import { CaretLeft, CaretRight, Circle, X } from "@phosphor-icons/react";
11
- import React, { forwardRef } from "react";
12
- import { Button } from "@dxos/react-ui";
13
- import { getSize, mx } from "@dxos/react-ui-theme";
129
+ import React6, { forwardRef } from "react";
130
+ import { Button as Button3 } from "@dxos/react-ui";
131
+ import { getSize, mx as mx3 } from "@dxos/react-ui-theme";
14
132
  var floaterProps = {
15
133
  styles: {
16
134
  // Arrow color is set by joyride.
@@ -31,32 +149,32 @@ var Tooltip = /* @__PURE__ */ forwardRef(({ step: { title, content }, index, siz
31
149
  const trapFocus = useFocusableGroup({
32
150
  tabBehavior: "limited-trap-focus"
33
151
  });
34
- return /* @__PURE__ */ React.createElement("div", {
152
+ return /* @__PURE__ */ React6.createElement("div", {
35
153
  className: "flex flex-col is-[15rem] min-bs-[10rem] overflow-hidden rounded-md shadow-xl bg-accentSurface text-inverse",
36
154
  role: "tooltip",
37
155
  "data-testid": "helpPlugin.tooltip",
38
156
  "data-step": index + 1,
39
157
  ...trapFocus,
40
158
  ref: forwardedRef
41
- }, /* @__PURE__ */ React.createElement("div", {
159
+ }, /* @__PURE__ */ React6.createElement("div", {
42
160
  className: "flex p-2"
43
- }, /* @__PURE__ */ React.createElement("h2", {
161
+ }, /* @__PURE__ */ React6.createElement("h2", {
44
162
  className: "grow pli-2 plb-1 text-lg font-medium text-inverse"
45
- }, title), /* @__PURE__ */ React.createElement(Button, {
163
+ }, title), /* @__PURE__ */ React6.createElement(Button3, {
46
164
  density: "fine",
47
165
  variant: "primary",
48
166
  onClick: closeProps.onClick,
49
167
  title: closeProps["aria-label"],
50
168
  "data-testid": "helpPlugin.tooltip.close"
51
- }, /* @__PURE__ */ React.createElement(X, {
169
+ }, /* @__PURE__ */ React6.createElement(X, {
52
170
  weight: "bold",
53
171
  className: getSize(4)
54
- }))), /* @__PURE__ */ React.createElement("div", {
172
+ }))), /* @__PURE__ */ React6.createElement("div", {
55
173
  className: "flex grow pli-4 mlb-2"
56
- }, content), /* @__PURE__ */ React.createElement("div", {
174
+ }, content), /* @__PURE__ */ React6.createElement("div", {
57
175
  className: "flex p-2 items-center justify-between",
58
176
  ...arrowGroup
59
- }, /* @__PURE__ */ React.createElement(Button, {
177
+ }, /* @__PURE__ */ React6.createElement(Button3, {
60
178
  variant: "primary",
61
179
  onClick: backProps.onClick,
62
180
  title: backProps["aria-label"],
@@ -64,39 +182,39 @@ var Tooltip = /* @__PURE__ */ forwardRef(({ step: { title, content }, index, siz
64
182
  !(index > 0 && backProps) && "invisible"
65
183
  ],
66
184
  "data-testid": "helpPlugin.tooltip.back"
67
- }, /* @__PURE__ */ React.createElement(CaretLeft, {
185
+ }, /* @__PURE__ */ React6.createElement(CaretLeft, {
68
186
  className: getSize(5)
69
- })), /* @__PURE__ */ React.createElement("div", {
187
+ })), /* @__PURE__ */ React6.createElement("div", {
70
188
  className: "flex grow gap-2 justify-center"
71
- }, /* @__PURE__ */ React.createElement("div", {
189
+ }, /* @__PURE__ */ React6.createElement("div", {
72
190
  className: "flex"
73
191
  }, Array.from({
74
192
  length: size
75
- }).map((_, i) => /* @__PURE__ */ React.createElement(Circle, {
193
+ }).map((_, i) => /* @__PURE__ */ React6.createElement(Circle, {
76
194
  key: i,
77
195
  weight: index === i ? "fill" : "regular",
78
- className: mx(getSize(2), "mli-1 cursor-pointer")
79
- })))), isLastStep ? /* @__PURE__ */ React.createElement(Button, {
196
+ className: mx3(getSize(2), "mli-1 cursor-pointer")
197
+ })))), isLastStep ? /* @__PURE__ */ React6.createElement(Button3, {
80
198
  variant: "primary",
81
199
  onClick: closeProps.onClick,
82
200
  title: closeProps["aria-label"],
83
201
  autoFocus: true,
84
202
  "data-testid": "helpPlugin.tooltip.finish"
85
- }, "Done") : /* @__PURE__ */ React.createElement(Button, {
203
+ }, "Done") : /* @__PURE__ */ React6.createElement(Button3, {
86
204
  variant: "primary",
87
205
  onClick: primaryProps.onClick,
88
206
  title: primaryProps["aria-label"],
89
207
  autoFocus: true,
90
208
  "data-testid": "helpPlugin.tooltip.next"
91
- }, /* @__PURE__ */ React.createElement(CaretRight, {
209
+ }, /* @__PURE__ */ React6.createElement(CaretRight, {
92
210
  className: getSize(6)
93
211
  }))));
94
212
  });
95
213
 
96
- // packages/plugins/plugin-help/src/components/HelpContextProvider/HelpContextProvider.tsx
97
- import React2, { useState, useEffect } from "react";
214
+ // packages/plugins/plugin-help/src/components/WelcomeTour/WelcomeTour.tsx
215
+ import React7, { useState, useEffect } from "react";
98
216
  import Joyride, { ACTIONS, EVENTS } from "react-joyride";
99
- import { usePluginManager, useCapability, Capabilities } from "@dxos/app-framework";
217
+ import { usePluginManager, useLayout } from "@dxos/app-framework";
100
218
  var addStepClass = (target) => {
101
219
  const element = typeof target === "string" ? document.querySelector(target) : target;
102
220
  if (element) {
@@ -138,9 +256,9 @@ var waitForTarget = async (step) => {
138
256
  });
139
257
  }
140
258
  };
141
- var HelpContextProvider = ({ children, steps: initialSteps, running: runningProp, onRunningChanged }) => {
259
+ var WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged }) => {
142
260
  const manager = usePluginManager();
143
- const layout = useCapability(Capabilities.Layout);
261
+ const layout = useLayout();
144
262
  const [running, setRunning] = useState(!!runningProp && !!getTarget(initialSteps[0]));
145
263
  const [stepIndex, _setStepIndex] = useState(0);
146
264
  const [steps, setSteps] = useState(initialSteps);
@@ -207,7 +325,7 @@ var HelpContextProvider = ({ children, steps: initialSteps, running: runningProp
207
325
  break;
208
326
  }
209
327
  };
210
- return /* @__PURE__ */ React2.createElement(HelpContext.Provider, {
328
+ return /* @__PURE__ */ React7.createElement(HelpContext.Provider, {
211
329
  value: {
212
330
  running: running && !paused,
213
331
  steps,
@@ -216,9 +334,9 @@ var HelpContextProvider = ({ children, steps: initialSteps, running: runningProp
216
334
  start: () => setRunningChanged(true),
217
335
  stop: () => setRunningChanged(false)
218
336
  }
219
- }, /* @__PURE__ */ React2.createElement("style", null, `.joyride-target {
337
+ }, /* @__PURE__ */ React7.createElement("style", null, `.joyride-target {
220
338
  --controls-opacity: 1;
221
- }`), /* @__PURE__ */ React2.createElement(Joyride, {
339
+ }`), /* @__PURE__ */ React7.createElement(Joyride, {
222
340
  continuous: true,
223
341
  steps,
224
342
  stepIndex,
@@ -226,136 +344,18 @@ var HelpContextProvider = ({ children, steps: initialSteps, running: runningProp
226
344
  callback,
227
345
  floaterProps,
228
346
  tooltipComponent: Tooltip
229
- }), children);
230
- };
231
-
232
- // packages/plugins/plugin-help/src/components/Shortcuts/Key.tsx
233
- import React3 from "react";
234
- import { keySymbols } from "@dxos/keyboard";
235
-
236
- // packages/plugins/plugin-help/src/components/Shortcuts/styles.ts
237
- import { mx as mx2 } from "@dxos/react-ui-theme";
238
- var shortcutKey = mx2("inline-flex min-is-[24px] bs-[24px] pli-0.5 justify-center items-center text-xs", "rounded bg-neutral-100 dark:bg-neutral-900");
239
-
240
- // packages/plugins/plugin-help/src/components/Shortcuts/Key.tsx
241
- var Key = ({ binding }) => {
242
- return /* @__PURE__ */ React3.createElement("span", {
243
- role: "term",
244
- className: "inline-flex gap-1",
245
- "aria-label": binding,
246
- id: binding
247
- }, keySymbols(binding).map((c, i) => /* @__PURE__ */ React3.createElement("span", {
248
- key: i,
249
- className: shortcutKey
250
- }, c)));
251
- };
252
-
253
- // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsList.tsx
254
- import React4, { Fragment } from "react";
255
- import { Keyboard } from "@dxos/keyboard";
256
- import { toLocalizedString, useTranslation } from "@dxos/react-ui";
257
- import { mx as mx3 } from "@dxos/react-ui-theme";
258
- var ShortcutsList = () => {
259
- const { t } = useTranslation(HELP_PLUGIN);
260
- const bindings = Keyboard.singleton.getBindings();
261
- bindings.sort((a, b) => {
262
- return toLocalizedString(a.data, t)?.toLowerCase().localeCompare(toLocalizedString(b.data, t)?.toLowerCase());
263
- });
264
- return /* @__PURE__ */ React4.createElement("dl", {
265
- className: mx3("is-fit grid grid-cols-[min-content_minmax(12rem,1fr)] gap-2 mlb-4 text-subdued")
266
- }, bindings.map((binding, i) => /* @__PURE__ */ React4.createElement(Fragment, {
267
- key: i
268
- }, /* @__PURE__ */ React4.createElement(Key, {
269
- binding: binding.shortcut
270
- }), /* @__PURE__ */ React4.createElement("span", {
271
- role: "definition",
272
- className: "mis-4",
273
- "aria-labelledby": binding.shortcut
274
- }, toLocalizedString(binding.data, t)))));
275
- };
276
-
277
- // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsDialog.tsx
278
- import React5 from "react";
279
- import { Button as Button2, Dialog, Icon, useTranslation as useTranslation2 } from "@dxos/react-ui";
280
- var SHORTCUTS_DIALOG = `${HELP_PLUGIN}/ShortcutsDialog`;
281
- var ShortcutsDialogContent = () => {
282
- const { t } = useTranslation2(HELP_PLUGIN);
283
- return /* @__PURE__ */ React5.createElement(Dialog.Content, {
284
- classNames: "p-0 bs-content max-bs-full md:max-is-[25rem] overflow-hidden"
285
- }, /* @__PURE__ */ React5.createElement("div", {
286
- role: "none",
287
- className: "flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5"
288
- }, /* @__PURE__ */ React5.createElement(Dialog.Title, null, t("shortcuts dialog title")), /* @__PURE__ */ React5.createElement(Dialog.Close, {
289
- asChild: true
290
- }, /* @__PURE__ */ React5.createElement(Button2, {
291
- density: "fine",
292
- variant: "ghost",
293
- autoFocus: true
294
- }, /* @__PURE__ */ React5.createElement(Icon, {
295
- icon: "ph--x--regular",
296
- size: 3
297
- })))), /* @__PURE__ */ React5.createElement("div", {
298
- className: "flex items-center justify-center"
299
- }, /* @__PURE__ */ React5.createElement(ShortcutsList, null)));
300
- };
301
-
302
- // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsHints.tsx
303
- import React6 from "react";
304
- import { Keyboard as Keyboard2 } from "@dxos/keyboard";
305
- import { Button as Button3, Icon as Icon2, toLocalizedString as toLocalizedString2, useTranslation as useTranslation3 } from "@dxos/react-ui";
306
- var Shortcut = ({ binding }) => {
307
- const { t } = useTranslation3("os");
308
- return /* @__PURE__ */ React6.createElement("div", {
309
- role: "none",
310
- className: "flex items-center gap-2 whitespace-nowrap"
311
- }, /* @__PURE__ */ React6.createElement(Key, {
312
- binding: binding.shortcut
313
- }), /* @__PURE__ */ React6.createElement("span", {
314
- className: "text-sm"
315
- }, toLocalizedString2(binding.data, t)));
316
- };
317
- var ShortcutsHints = ({ onClose }) => {
318
- const defaults = [
319
- "meta+k",
320
- "meta+/",
321
- "meta+,"
322
- ];
323
- const bindings = Keyboard2.singleton.getBindings();
324
- const hints = bindings.filter((binding) => defaults.includes(binding.shortcut));
325
- return /* @__PURE__ */ React6.createElement("div", {
326
- role: "none",
327
- className: "flex overflow-hidden px-2 gap-4"
328
- }, hints.map((binding) => /* @__PURE__ */ React6.createElement(Shortcut, {
329
- key: binding.shortcut,
330
- binding
331
- })), onClose && /* @__PURE__ */ React6.createElement(Button3, {
332
- variant: "ghost",
333
- classNames: "p-0 cursor-pointer",
334
- onClick: onClose
335
- }, /* @__PURE__ */ React6.createElement(Icon2, {
336
- icon: "ph--x--regular",
337
- size: 4
338
- })));
339
- };
340
-
341
- // packages/plugins/plugin-help/src/components/Shortcuts/ShortcutsSection.tsx
342
- import React7 from "react";
343
- import { descriptionText } from "@dxos/react-ui-theme";
344
- var ShortcutsSection = () => {
345
- return /* @__PURE__ */ React7.createElement("section", {
346
- className: descriptionText
347
- }, /* @__PURE__ */ React7.createElement(ShortcutsList, null));
347
+ }));
348
348
  };
349
349
 
350
350
  export {
351
- floaterProps,
352
- Tooltip,
353
- HelpContextProvider,
354
351
  Key,
355
352
  ShortcutsList,
356
353
  SHORTCUTS_DIALOG,
357
354
  ShortcutsDialogContent,
358
355
  ShortcutsHints,
359
- ShortcutsSection
356
+ ShortcutsSection,
357
+ floaterProps,
358
+ Tooltip,
359
+ WelcomeTour
360
360
  };
361
- //# sourceMappingURL=chunk-VNAN5GRY.mjs.map
361
+ //# sourceMappingURL=chunk-C7PCVS5K.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Shortcuts/Key.tsx", "../../../src/components/Shortcuts/styles.ts", "../../../src/components/Shortcuts/ShortcutsList.tsx", "../../../src/components/Shortcuts/ShortcutsDialog.tsx", "../../../src/components/Shortcuts/ShortcutsHints.tsx", "../../../src/components/Shortcuts/ShortcutsSection.tsx", "../../../src/components/Tooltip/Tooltip.tsx", "../../../src/components/WelcomeTour/WelcomeTour.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { keySymbols } from '@dxos/keyboard';\n\nimport { shortcutKey } from './styles';\n\nexport const Key = ({ binding }: { binding: string }) => {\n return (\n <span role='term' className='inline-flex gap-1' aria-label={binding} id={binding}>\n {keySymbols(binding).map((c, i) => (\n <span key={i} className={shortcutKey}>\n {c}\n </span>\n ))}\n </span>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const shortcutKey = mx(\n 'inline-flex min-is-[24px] bs-[24px] pli-0.5 justify-center items-center text-xs',\n 'rounded bg-neutral-100 dark:bg-neutral-900',\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment } from 'react';\n\nimport { Keyboard } from '@dxos/keyboard';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Key } from './Key';\nimport { HELP_PLUGIN } from '../../meta';\n\nexport const ShortcutsList = () => {\n const { t } = useTranslation(HELP_PLUGIN);\n const bindings = Keyboard.singleton.getBindings();\n\n // TODO(burdon): Get shortcuts from TextEditor.\n bindings.sort((a, b) => {\n return toLocalizedString(a.data, t)?.toLowerCase().localeCompare(toLocalizedString(b.data, t)?.toLowerCase());\n });\n\n return (\n <dl className={mx('is-fit grid grid-cols-[min-content_minmax(12rem,1fr)] gap-2 mlb-4 text-subdued')}>\n {bindings.map((binding, i) => (\n <Fragment key={i}>\n <Key binding={binding.shortcut} />\n <span role='definition' className='mis-4' aria-labelledby={binding.shortcut}>\n {toLocalizedString(binding.data, t)}\n </span>\n </Fragment>\n ))}\n </dl>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { ShortcutsList } from './ShortcutsList';\nimport { HELP_PLUGIN } from '../../meta';\n\nexport const SHORTCUTS_DIALOG = `${HELP_PLUGIN}/ShortcutsDialog`;\n\nexport const ShortcutsDialogContent = () => {\n const { t } = useTranslation(HELP_PLUGIN);\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[25rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title>{t('shortcuts dialog title')}</Dialog.Title>\n\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={3} />\n </Button>\n </Dialog.Close>\n </div>\n\n <div className='flex items-center justify-center'>\n <ShortcutsList />\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type KeyBinding, Keyboard } from '@dxos/keyboard';\nimport { Button, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { Key } from './Key';\n\nconst Shortcut = ({ binding }: { binding: KeyBinding }) => {\n const { t } = useTranslation('os');\n return (\n <div role='none' className='flex items-center gap-2 whitespace-nowrap'>\n <Key binding={binding.shortcut} />\n <span className='text-sm'>{toLocalizedString(binding.data, t)}</span>\n </div>\n );\n};\n\nexport const ShortcutsHints = ({ onClose }: { onClose?: () => void }) => {\n // TODO(burdon): Display by context/weight/cycle.\n const defaults = ['meta+k', 'meta+/', 'meta+,'];\n const bindings = Keyboard.singleton.getBindings();\n const hints = bindings.filter((binding) => defaults.includes(binding.shortcut));\n\n return (\n <div role='none' className='flex overflow-hidden px-2 gap-4'>\n {hints.map((binding) => (\n <Shortcut key={binding.shortcut} binding={binding} />\n ))}\n {onClose && (\n <Button variant='ghost' classNames='p-0 cursor-pointer' onClick={onClose}>\n <Icon icon='ph--x--regular' size={4} />\n </Button>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { descriptionText } from '@dxos/react-ui-theme';\n\nimport { ShortcutsList } from './ShortcutsList';\n\nexport const ShortcutsSection = () => {\n return (\n <section className={descriptionText}>\n <ShortcutsList />\n </section>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup, useFocusableGroup } from '@fluentui/react-tabster';\nimport { CaretLeft, CaretRight, Circle, X } from '@phosphor-icons/react';\nimport React, { forwardRef } from 'react';\n// TODO(thure): This needed to be imported in the package.json specifically to pacify TS2742. See if this is resolved with typescript@5.5.x.\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport _floater from 'react-floater';\nimport { type TooltipRenderProps, type Props } from 'react-joyride';\n// TODO(thure): This needed to be imported in the package.json specifically to pacify TS2742. See if this is resolved with typescript@5.5.x.\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport _typefest from 'type-fest';\n\nimport { Button } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\n// https://docs.react-joyride.com/styling\n// https://github.com/gilbarbara/react-floater\nexport const floaterProps: Props['floaterProps'] = {\n styles: {\n // Arrow color is set by joyride.\n arrow: {\n length: 8,\n spread: 16,\n },\n floater: {\n // TODO(burdon): Get tokens from theme.\n filter: 'drop-shadow(0 0 0.75rem rgba(0, 0, 0, 0.2))',\n },\n },\n};\n\n// TODO(burdon): Add info link to docs.\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipRenderProps>(\n ({ step: { title, content }, index, size, isLastStep, backProps, closeProps, primaryProps }, forwardedRef) => {\n const arrowGroup = useArrowNavigationGroup({ axis: 'horizontal' });\n const trapFocus = useFocusableGroup({ tabBehavior: 'limited-trap-focus' });\n\n return (\n <div\n className='flex flex-col is-[15rem] min-bs-[10rem] overflow-hidden rounded-md shadow-xl bg-accentSurface text-inverse'\n role='tooltip'\n data-testid='helpPlugin.tooltip'\n data-step={index + 1}\n {...trapFocus}\n ref={forwardedRef}\n >\n <div className='flex p-2'>\n <h2 className='grow pli-2 plb-1 text-lg font-medium text-inverse'>{title}</h2>\n <Button\n density='fine'\n variant='primary'\n onClick={closeProps.onClick}\n title={closeProps['aria-label']}\n data-testid='helpPlugin.tooltip.close'\n >\n <X weight='bold' className={getSize(4)} />\n </Button>\n </div>\n <div className='flex grow pli-4 mlb-2'>{content}</div>\n <div className='flex p-2 items-center justify-between' {...arrowGroup}>\n {\n <Button\n variant='primary'\n onClick={backProps.onClick}\n title={backProps['aria-label']}\n classNames={[!(index > 0 && backProps) && 'invisible']}\n data-testid='helpPlugin.tooltip.back'\n >\n <CaretLeft className={getSize(5)} />\n </Button>\n }\n <div className='flex grow gap-2 justify-center'>\n <div className='flex'>\n {Array.from({ length: size }).map((_, i) => (\n <Circle\n key={i}\n weight={index === i ? 'fill' : 'regular'}\n className={mx(getSize(2), 'mli-1 cursor-pointer')}\n />\n ))}\n </div>\n </div>\n {isLastStep ? (\n <Button\n variant='primary'\n onClick={closeProps.onClick}\n title={closeProps['aria-label']}\n autoFocus\n data-testid='helpPlugin.tooltip.finish'\n >\n Done\n </Button>\n ) : (\n <Button\n variant='primary'\n onClick={primaryProps.onClick}\n title={primaryProps['aria-label']}\n autoFocus\n data-testid='helpPlugin.tooltip.next'\n >\n <CaretRight className={getSize(6)} />\n </Button>\n )}\n </div>\n </div>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState, useEffect } from 'react';\nimport Joyride, { ACTIONS, EVENTS } from 'react-joyride';\n\nimport { usePluginManager, useLayout } from '@dxos/app-framework';\n\nimport { type Step, HelpContext } from '../../types';\nimport { floaterProps, Tooltip } from '../Tooltip';\n\nconst addStepClass = (target: string | HTMLElement) => {\n const element = typeof target === 'string' ? document.querySelector(target) : target;\n if (element) {\n element.classList.add('joyride-target');\n }\n};\n\nconst removeTargetClass = (target: string | HTMLElement) => {\n const element = typeof target === 'string' ? document.querySelector(target) : target;\n if (element) {\n element.classList.remove('joyride-target');\n }\n};\n\nconst getTarget = (step: Step) => {\n return typeof step.target === 'string' ? document.querySelector(step.target) : step.target;\n};\n\n/**\n * Wait for the target element to be in the document.\n */\nconst waitForTarget = async (step: Step) => {\n if (typeof step.target === 'string') {\n const target = step.target;\n const element = document.querySelector(target);\n if (element) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.addedNodes.length > 0) {\n const element = document.querySelector(target);\n if (element) {\n observer.disconnect();\n resolve();\n }\n }\n });\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n });\n }\n};\n\nexport type WelcomeTourProps = {\n steps: Step[];\n running?: boolean;\n onRunningChanged?: (state: boolean) => any;\n};\n\nexport const WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged }: WelcomeTourProps) => {\n const manager = usePluginManager();\n const layout = useLayout();\n const [running, setRunning] = useState(!!runningProp && !!getTarget(initialSteps[0]));\n const [stepIndex, _setStepIndex] = useState(0);\n const [steps, setSteps] = useState(initialSteps);\n\n const paused = layout.dialogOpen;\n\n const setStepIndex = (index: number) => {\n if (runningProp) {\n const step = steps[index];\n step?.before?.(manager.context);\n }\n _setStepIndex(index);\n };\n\n const setRunningChanged = (state: boolean) => {\n if (typeof runningProp !== 'undefined') {\n onRunningChanged?.(state);\n } else {\n if (state) {\n setStepIndex(0);\n setRunning(true);\n } else {\n setRunning(false);\n }\n }\n };\n\n useEffect(() => {\n const timeout = setTimeout(async () => {\n if (runningProp) {\n // This handles the case when the target is not yet in the document.\n // If the target is not in the document, when the joyride is turned on, it will not show the tooltip.\n await waitForTarget(steps[stepIndex]);\n setStepIndex(0);\n setRunning(true);\n } else if (typeof runningProp !== 'undefined') {\n setRunning(false);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [runningProp]);\n\n // https://docs.react-joyride.com/callback\n const callback: Joyride['callback'] = async (options) => {\n const { type, action, index, size } = options;\n switch (type) {\n case EVENTS.STEP_BEFORE:\n addStepClass(options.step.target);\n break;\n case EVENTS.TOUR_END:\n break;\n case EVENTS.STEP_AFTER:\n removeTargetClass(options.step.target);\n switch (action) {\n case ACTIONS.NEXT:\n if (index < size - 1) {\n setStepIndex(index + 1);\n }\n break;\n case ACTIONS.PREV:\n if (index > 0) {\n setStepIndex(index - 1);\n }\n break;\n case ACTIONS.CLOSE:\n setRunningChanged(false);\n setStepIndex(0);\n break;\n }\n break;\n }\n };\n\n return (\n <HelpContext.Provider\n value={{\n running: running && !paused,\n steps,\n setSteps,\n setIndex: setStepIndex,\n start: () => setRunningChanged(true),\n stop: () => setRunningChanged(false),\n }}\n >\n <style>\n {`.joyride-target {\n --controls-opacity: 1;\n }`}\n </style>\n <Joyride\n continuous={true}\n steps={steps}\n stepIndex={stepIndex}\n run={running && !paused}\n callback={callback}\n floaterProps={floaterProps}\n tooltipComponent={Tooltip}\n />\n </HelpContext.Provider>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "keySymbols", "mx", "shortcutKey", "mx", "Key", "binding", "span", "role", "className", "aria-label", "id", "keySymbols", "map", "c", "i", "key", "shortcutKey", "React", "Fragment", "Keyboard", "toLocalizedString", "useTranslation", "mx", "ShortcutsList", "t", "useTranslation", "HELP_PLUGIN", "bindings", "Keyboard", "singleton", "getBindings", "sort", "a", "b", "toLocalizedString", "data", "toLowerCase", "localeCompare", "React", "dl", "className", "mx", "map", "binding", "i", "Fragment", "key", "Key", "shortcut", "span", "role", "aria-labelledby", "React", "Button", "Dialog", "Icon", "useTranslation", "SHORTCUTS_DIALOG", "HELP_PLUGIN", "ShortcutsDialogContent", "t", "useTranslation", "React", "Dialog", "Content", "classNames", "div", "role", "className", "Title", "Close", "asChild", "Button", "density", "variant", "autoFocus", "Icon", "icon", "size", "ShortcutsList", "React", "Keyboard", "Button", "Icon", "toLocalizedString", "useTranslation", "Shortcut", "binding", "t", "useTranslation", "React", "div", "role", "className", "Key", "shortcut", "span", "toLocalizedString", "data", "ShortcutsHints", "onClose", "defaults", "bindings", "Keyboard", "singleton", "getBindings", "hints", "filter", "includes", "map", "key", "Button", "variant", "classNames", "onClick", "Icon", "icon", "size", "React", "descriptionText", "ShortcutsSection", "React", "section", "className", "descriptionText", "ShortcutsList", "useArrowNavigationGroup", "useFocusableGroup", "CaretLeft", "CaretRight", "Circle", "X", "React", "forwardRef", "Button", "getSize", "mx", "floaterProps", "styles", "arrow", "length", "spread", "floater", "filter", "Tooltip", "forwardRef", "step", "title", "content", "index", "size", "isLastStep", "backProps", "closeProps", "primaryProps", "forwardedRef", "arrowGroup", "useArrowNavigationGroup", "axis", "trapFocus", "useFocusableGroup", "tabBehavior", "React", "div", "className", "role", "data-testid", "data-step", "ref", "h2", "Button", "density", "variant", "onClick", "X", "weight", "getSize", "classNames", "CaretLeft", "Array", "from", "map", "_", "i", "Circle", "key", "mx", "autoFocus", "CaretRight", "React", "useState", "useEffect", "Joyride", "ACTIONS", "EVENTS", "usePluginManager", "useLayout", "addStepClass", "target", "element", "document", "querySelector", "classList", "add", "removeTargetClass", "remove", "getTarget", "step", "waitForTarget", "Promise", "resolve", "observer", "MutationObserver", "mutations", "forEach", "mutation", "addedNodes", "length", "disconnect", "observe", "body", "childList", "subtree", "WelcomeTour", "steps", "initialSteps", "running", "runningProp", "onRunningChanged", "manager", "usePluginManager", "layout", "useLayout", "setRunning", "useState", "stepIndex", "_setStepIndex", "setSteps", "paused", "dialogOpen", "setStepIndex", "index", "before", "context", "setRunningChanged", "state", "useEffect", "timeout", "setTimeout", "clearTimeout", "callback", "options", "type", "action", "size", "EVENTS", "STEP_BEFORE", "TOUR_END", "STEP_AFTER", "ACTIONS", "NEXT", "PREV", "CLOSE", "React", "HelpContext", "Provider", "value", "setIndex", "start", "stop", "style", "Joyride", "continuous", "run", "floaterProps", "tooltipComponent", "Tooltip"]
7
+ }
@@ -1,5 +1,4 @@
1
1
  import {
2
- HelpContextProvider,
3
2
  Key,
4
3
  SHORTCUTS_DIALOG,
5
4
  ShortcutsDialogContent,
@@ -7,8 +6,9 @@ import {
7
6
  ShortcutsList,
8
7
  ShortcutsSection,
9
8
  Tooltip,
9
+ WelcomeTour,
10
10
  floaterProps
11
- } from "./chunk-VNAN5GRY.mjs";
11
+ } from "./chunk-C7PCVS5K.mjs";
12
12
  import {
13
13
  HELP_ACTION,
14
14
  HelpAction,
@@ -24,9 +24,9 @@ import {
24
24
 
25
25
  // packages/plugins/plugin-help/src/capabilities/index.ts
26
26
  import { lazy } from "@dxos/app-framework";
27
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-G3FCDRBG.mjs"));
28
- var ReactContext = lazy(() => import("./react-context-SIW6XKOC.mjs"));
29
- var ReactSurface = lazy(() => import("./react-surface-TZZUXIVX.mjs"));
27
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-X4XWALX3.mjs"));
28
+ var ReactRoot = lazy(() => import("./react-root-4AV22UGT.mjs"));
29
+ var ReactSurface = lazy(() => import("./react-surface-7S3NUVZH.mjs"));
30
30
  var HelpState = lazy(() => import("./state-SLKOTRHH.mjs"));
31
31
 
32
32
  // packages/plugins/plugin-help/src/HelpPlugin.tsx
@@ -59,21 +59,24 @@ var HelpPlugin = ({ steps = [] }) => definePlugin(meta, [
59
59
  activate: () => contributes(Capabilities.Translations, translations_default)
60
60
  }),
61
61
  defineModule({
62
- id: `${meta.id}/module/react-context`,
62
+ id: `${meta.id}/module/react-root`,
63
63
  activatesOn: Events.Startup,
64
- activate: () => ReactContext(steps)
64
+ activate: () => ReactRoot(steps)
65
65
  }),
66
66
  defineModule({
67
67
  id: `${meta.id}/module/react-surface`,
68
- activatesOn: Events.Startup,
68
+ activatesOn: Events.SetupSurfaces,
69
69
  activate: ReactSurface
70
70
  }),
71
71
  defineModule({
72
72
  id: `${meta.id}/module/intent-resolver`,
73
73
  activatesOn: Events.SetupIntents,
74
- activate: (context) => contributes(Capabilities.IntentResolver, createResolver(HelpAction.Start, () => {
75
- const state = context.requestCapability(HelpCapabilities.MutableState);
76
- state.running = true;
74
+ activate: (context) => contributes(Capabilities.IntentResolver, createResolver({
75
+ intent: HelpAction.Start,
76
+ resolve: () => {
77
+ const state = context.requestCapability(HelpCapabilities.MutableState);
78
+ state.running = true;
79
+ }
77
80
  }))
78
81
  }),
79
82
  defineModule({
@@ -95,7 +98,6 @@ export {
95
98
  HelpAction,
96
99
  HelpCapabilities,
97
100
  HelpContext,
98
- HelpContextProvider,
99
101
  HelpPlugin,
100
102
  Key,
101
103
  SHORTCUTS_DIALOG,
@@ -104,6 +106,7 @@ export {
104
106
  ShortcutsList,
105
107
  ShortcutsSection,
106
108
  Tooltip,
109
+ WelcomeTour,
107
110
  floaterProps,
108
111
  meta,
109
112
  useHelp
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/capabilities/index.ts", "../../../src/HelpPlugin.tsx", "../../../src/translations.ts", "../../../src/hooks/useHelp.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const ReactContext = lazy(() => import('./react-context'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const HelpState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createResolver, defineModule, definePlugin, Events, contributes, Capabilities } from '@dxos/app-framework';\n\nimport { AppGraphBuilder, HelpState, ReactContext, ReactSurface } from './capabilities';\nimport { HelpCapabilities } from './capabilities/capabilities';\nimport { meta } from './meta';\nimport translations from './translations';\nimport { type Step, HelpAction } from './types';\n\nexport type HelpPluginOptions = { steps?: Step[] };\n\nexport const HelpPlugin = ({ steps = [] }: HelpPluginOptions) =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.Startup,\n activate: HelpState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/react-context`,\n activatesOn: Events.Startup,\n activate: () => ReactContext(steps),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.Startup,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: (context) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver(HelpAction.Start, () => {\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.running = true;\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HELP_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [HELP_PLUGIN]: {\n 'plugin name': 'Help',\n 'open help tour': 'Show welcome tour',\n 'open shortcuts label': 'Show shortcuts',\n 'shortcuts dialog title': 'Shortcuts',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { HelpContext } from '../types';\n\nexport const useHelp = () => {\n return useContext(HelpContext) ?? raise(new Error('Missing HelpContext'));\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,eAAeD,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,YAAYH,KAAK,MAAM,OAAO,sBAAA,CAAA;;;ACL3C,SAASI,gBAAgBC,cAAcC,cAAcC,QAAQC,aAAaC,oBAAoB;;;ACE9F,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,WAAAA,GAAc;QACb,eAAe;QACf,kBAAkB;QAClB,wBAAwB;QACxB,0BAA0B;MAC5B;IACF;EACF;;;;ADFK,IAAMC,aAAa,CAAC,EAAEC,QAAQ,CAAA,EAAE,MACrCC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAUC;EACZ,CAAA;EACAN,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOI;IACpBF,UAAU,MAAMG,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAX,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMO,aAAaf,KAAAA;EAC/B,CAAA;EACAG,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAUQ;EACZ,CAAA;EACAb,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOW;IACpBT,UAAU,CAACU,YACTP,YACEC,aAAaO,gBACbC,eAAeC,WAAWC,OAAO,MAAA;AAC/B,YAAMC,QAAQL,QAAQM,kBAAkBC,iBAAiBC,YAAY;AACrEH,YAAMI,UAAU;IAClB,CAAA,CAAA;EAEN,CAAA;EACAxB,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOsB;IACpBpB,UAAUqB;EACZ,CAAA;CACD;;;AEjDH,SAASC,kBAAkB;AAE3B,SAASC,aAAa;AAIf,IAAMC,UAAU,MAAA;AACrB,SAAOC,WAAWC,WAAAA,KAAgBC,MAAM,IAAIC,MAAM,qBAAA,CAAA;AACpD;",
6
- "names": ["lazy", "AppGraphBuilder", "lazy", "ReactContext", "ReactSurface", "HelpState", "createResolver", "defineModule", "definePlugin", "Events", "contributes", "Capabilities", "HELP_PLUGIN", "HelpPlugin", "steps", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "Startup", "activate", "HelpState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "ReactContext", "ReactSurface", "SetupIntents", "context", "IntentResolver", "createResolver", "HelpAction", "Start", "state", "requestCapability", "HelpCapabilities", "MutableState", "running", "SetupAppGraph", "AppGraphBuilder", "useContext", "raise", "useHelp", "useContext", "HelpContext", "raise", "Error"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const HelpState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createResolver, defineModule, definePlugin, Events, contributes, Capabilities } from '@dxos/app-framework';\n\nimport { AppGraphBuilder, HelpState, ReactRoot, ReactSurface } from './capabilities';\nimport { HelpCapabilities } from './capabilities/capabilities';\nimport { meta } from './meta';\nimport translations from './translations';\nimport { type Step, HelpAction } from './types';\n\nexport type HelpPluginOptions = { steps?: Step[] };\n\nexport const HelpPlugin = ({ steps = [] }: HelpPluginOptions) =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/state`,\n activatesOn: Events.Startup,\n activate: HelpState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, translations),\n }),\n defineModule({\n id: `${meta.id}/module/react-root`,\n activatesOn: Events.Startup,\n activate: () => ReactRoot(steps),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupSurfaces,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: (context) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: HelpAction.Start,\n resolve: () => {\n const state = context.requestCapability(HelpCapabilities.MutableState);\n state.running = true;\n },\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { HELP_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [HELP_PLUGIN]: {\n 'plugin name': 'Help',\n 'open help tour': 'Show welcome tour',\n 'open shortcuts label': 'Show shortcuts',\n 'shortcuts dialog title': 'Shortcuts',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { HelpContext } from '../types';\n\nexport const useHelp = () => {\n return useContext(HelpContext) ?? raise(new Error('Missing HelpContext'));\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,YAAYD,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,YAAYH,KAAK,MAAM,OAAO,sBAAA,CAAA;;;ACL3C,SAASI,gBAAgBC,cAAcC,cAAcC,QAAQC,aAAaC,oBAAoB;;;ACE9F,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,WAAAA,GAAc;QACb,eAAe;QACf,kBAAkB;QAClB,wBAAwB;QACxB,0BAA0B;MAC5B;IACF;EACF;;;;ADFK,IAAMC,aAAa,CAAC,EAAEC,QAAQ,CAAA,EAAE,MACrCC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAUC;EACZ,CAAA;EACAN,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOI;IACpBF,UAAU,MAAMG,YAAYC,aAAaC,cAAcC,oBAAAA;EACzD,CAAA;EACAX,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMO,UAAUf,KAAAA;EAC5B,CAAA;EACAG,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOU;IACpBR,UAAUS;EACZ,CAAA;EACAd,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOY;IACpBV,UAAU,CAACW,YACTR,YACEC,aAAaQ,gBACbC,eAAe;MACbC,QAAQC,WAAWC;MACnBC,SAAS,MAAA;AACP,cAAMC,QAAQP,QAAQQ,kBAAkBC,iBAAiBC,YAAY;AACrEH,cAAMI,UAAU;MAClB;IACF,CAAA,CAAA;EAEN,CAAA;EACA3B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOyB;IACpBvB,UAAUwB;EACZ,CAAA;CACD;;;AEpDH,SAASC,kBAAkB;AAE3B,SAASC,aAAa;AAIf,IAAMC,UAAU,MAAA;AACrB,SAAOC,WAAWC,WAAAA,KAAgBC,MAAM,IAAIC,MAAM,qBAAA,CAAA;AACpD;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "ReactRoot", "ReactSurface", "HelpState", "createResolver", "defineModule", "definePlugin", "Events", "contributes", "Capabilities", "HELP_PLUGIN", "HelpPlugin", "steps", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "Startup", "activate", "HelpState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "ReactRoot", "SetupSurfaces", "ReactSurface", "SetupIntents", "context", "IntentResolver", "createResolver", "intent", "HelpAction", "Start", "resolve", "state", "requestCapability", "HelpCapabilities", "MutableState", "running", "SetupAppGraph", "AppGraphBuilder", "useContext", "raise", "useHelp", "useContext", "HelpContext", "raise", "Error"]
7
7
  }