@dxos/plugin-help 0.7.5-labs.e27f9b9 → 0.7.5-main.2567c87

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 (45) hide show
  1. package/dist/lib/browser/{app-graph-builder-X4XWALX3.mjs → app-graph-builder-G3FCDRBG.mjs} +5 -8
  2. package/dist/lib/browser/{app-graph-builder-X4XWALX3.mjs.map → app-graph-builder-G3FCDRBG.mjs.map} +3 -3
  3. package/dist/lib/browser/{chunk-C7PCVS5K.mjs → chunk-VNAN5GRY.mjs} +151 -151
  4. package/dist/lib/browser/chunk-VNAN5GRY.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +12 -15
  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-root-4AV22UGT.mjs → react-context-SIW6XKOC.mjs} +9 -9
  9. package/dist/lib/browser/react-context-SIW6XKOC.mjs.map +7 -0
  10. package/dist/lib/browser/{react-surface-7S3NUVZH.mjs → react-surface-TZZUXIVX.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 +30 -29
  15. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/{react-root.d.ts → react-context.d.ts} +3 -2
  17. package/dist/types/src/capabilities/react-context.d.ts.map +1 -0
  18. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.d.ts +9 -0
  19. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.d.ts.map +1 -0
  20. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.stories.d.ts +10 -0
  21. package/dist/types/src/components/HelpContextProvider/HelpContextProvider.stories.d.ts.map +1 -0
  22. package/dist/types/src/components/HelpContextProvider/index.d.ts +2 -0
  23. package/dist/types/src/components/HelpContextProvider/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/package.json +19 -19
  27. package/src/HelpPlugin.tsx +7 -10
  28. package/src/capabilities/app-graph-builder.ts +1 -9
  29. package/src/capabilities/index.ts +1 -1
  30. package/src/capabilities/{react-root.tsx → react-context.tsx} +7 -5
  31. package/src/components/{WelcomeTour/WelcomeTour.stories.tsx → HelpContextProvider/HelpContextProvider.stories.tsx} +8 -9
  32. package/src/components/{WelcomeTour/WelcomeTour.tsx → HelpContextProvider/HelpContextProvider.tsx} +13 -7
  33. package/src/components/HelpContextProvider/index.ts +5 -0
  34. package/src/components/index.ts +1 -1
  35. package/dist/lib/browser/chunk-C7PCVS5K.mjs.map +0 -7
  36. package/dist/lib/browser/react-root-4AV22UGT.mjs.map +0 -7
  37. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  38. package/dist/types/src/components/WelcomeTour/WelcomeTour.d.ts +0 -9
  39. package/dist/types/src/components/WelcomeTour/WelcomeTour.d.ts.map +0 -1
  40. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts +0 -10
  41. package/dist/types/src/components/WelcomeTour/WelcomeTour.stories.d.ts.map +0 -1
  42. package/dist/types/src/components/WelcomeTour/index.d.ts +0 -2
  43. package/dist/types/src/components/WelcomeTour/index.d.ts.map +0 -1
  44. package/src/components/WelcomeTour/index.ts +0 -5
  45. /package/dist/lib/browser/{react-surface-7S3NUVZH.mjs.map → react-surface-TZZUXIVX.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SHORTCUTS_DIALOG
3
- } from "./chunk-C7PCVS5K.mjs";
3
+ } from "./chunk-VNAN5GRY.mjs";
4
4
  import {
5
5
  HelpAction
6
6
  } from "./chunk-24E4WRKH.mjs";
@@ -49,12 +49,9 @@ 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.UpdateDialog, {
53
- part: "dialog",
54
- subject: SHORTCUTS_DIALOG,
55
- options: {
56
- blockAlign: "center"
57
- }
52
+ await dispatch?.(createIntent(LayoutAction.SetLayout, {
53
+ element: "dialog",
54
+ component: SHORTCUTS_DIALOG
58
55
  }));
59
56
  },
60
57
  properties: {
@@ -75,4 +72,4 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
75
72
  export {
76
73
  app_graph_builder_default as default
77
74
  };
78
- //# sourceMappingURL=app-graph-builder-X4XWALX3.mjs.map
75
+ //# sourceMappingURL=app-graph-builder-G3FCDRBG.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(\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"]
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"]
7
7
  }
@@ -5,130 +5,12 @@ 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
-
126
8
  // packages/plugins/plugin-help/src/components/Tooltip/Tooltip.tsx
127
9
  import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
128
10
  import { CaretLeft, CaretRight, Circle, X } from "@phosphor-icons/react";
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";
11
+ import React, { forwardRef } from "react";
12
+ import { Button } from "@dxos/react-ui";
13
+ import { getSize, mx } from "@dxos/react-ui-theme";
132
14
  var floaterProps = {
133
15
  styles: {
134
16
  // Arrow color is set by joyride.
@@ -149,32 +31,32 @@ var Tooltip = /* @__PURE__ */ forwardRef(({ step: { title, content }, index, siz
149
31
  const trapFocus = useFocusableGroup({
150
32
  tabBehavior: "limited-trap-focus"
151
33
  });
152
- return /* @__PURE__ */ React6.createElement("div", {
34
+ return /* @__PURE__ */ React.createElement("div", {
153
35
  className: "flex flex-col is-[15rem] min-bs-[10rem] overflow-hidden rounded-md shadow-xl bg-accentSurface text-inverse",
154
36
  role: "tooltip",
155
37
  "data-testid": "helpPlugin.tooltip",
156
38
  "data-step": index + 1,
157
39
  ...trapFocus,
158
40
  ref: forwardedRef
159
- }, /* @__PURE__ */ React6.createElement("div", {
41
+ }, /* @__PURE__ */ React.createElement("div", {
160
42
  className: "flex p-2"
161
- }, /* @__PURE__ */ React6.createElement("h2", {
43
+ }, /* @__PURE__ */ React.createElement("h2", {
162
44
  className: "grow pli-2 plb-1 text-lg font-medium text-inverse"
163
- }, title), /* @__PURE__ */ React6.createElement(Button3, {
45
+ }, title), /* @__PURE__ */ React.createElement(Button, {
164
46
  density: "fine",
165
47
  variant: "primary",
166
48
  onClick: closeProps.onClick,
167
49
  title: closeProps["aria-label"],
168
50
  "data-testid": "helpPlugin.tooltip.close"
169
- }, /* @__PURE__ */ React6.createElement(X, {
51
+ }, /* @__PURE__ */ React.createElement(X, {
170
52
  weight: "bold",
171
53
  className: getSize(4)
172
- }))), /* @__PURE__ */ React6.createElement("div", {
54
+ }))), /* @__PURE__ */ React.createElement("div", {
173
55
  className: "flex grow pli-4 mlb-2"
174
- }, content), /* @__PURE__ */ React6.createElement("div", {
56
+ }, content), /* @__PURE__ */ React.createElement("div", {
175
57
  className: "flex p-2 items-center justify-between",
176
58
  ...arrowGroup
177
- }, /* @__PURE__ */ React6.createElement(Button3, {
59
+ }, /* @__PURE__ */ React.createElement(Button, {
178
60
  variant: "primary",
179
61
  onClick: backProps.onClick,
180
62
  title: backProps["aria-label"],
@@ -182,39 +64,39 @@ var Tooltip = /* @__PURE__ */ forwardRef(({ step: { title, content }, index, siz
182
64
  !(index > 0 && backProps) && "invisible"
183
65
  ],
184
66
  "data-testid": "helpPlugin.tooltip.back"
185
- }, /* @__PURE__ */ React6.createElement(CaretLeft, {
67
+ }, /* @__PURE__ */ React.createElement(CaretLeft, {
186
68
  className: getSize(5)
187
- })), /* @__PURE__ */ React6.createElement("div", {
69
+ })), /* @__PURE__ */ React.createElement("div", {
188
70
  className: "flex grow gap-2 justify-center"
189
- }, /* @__PURE__ */ React6.createElement("div", {
71
+ }, /* @__PURE__ */ React.createElement("div", {
190
72
  className: "flex"
191
73
  }, Array.from({
192
74
  length: size
193
- }).map((_, i) => /* @__PURE__ */ React6.createElement(Circle, {
75
+ }).map((_, i) => /* @__PURE__ */ React.createElement(Circle, {
194
76
  key: i,
195
77
  weight: index === i ? "fill" : "regular",
196
- className: mx3(getSize(2), "mli-1 cursor-pointer")
197
- })))), isLastStep ? /* @__PURE__ */ React6.createElement(Button3, {
78
+ className: mx(getSize(2), "mli-1 cursor-pointer")
79
+ })))), isLastStep ? /* @__PURE__ */ React.createElement(Button, {
198
80
  variant: "primary",
199
81
  onClick: closeProps.onClick,
200
82
  title: closeProps["aria-label"],
201
83
  autoFocus: true,
202
84
  "data-testid": "helpPlugin.tooltip.finish"
203
- }, "Done") : /* @__PURE__ */ React6.createElement(Button3, {
85
+ }, "Done") : /* @__PURE__ */ React.createElement(Button, {
204
86
  variant: "primary",
205
87
  onClick: primaryProps.onClick,
206
88
  title: primaryProps["aria-label"],
207
89
  autoFocus: true,
208
90
  "data-testid": "helpPlugin.tooltip.next"
209
- }, /* @__PURE__ */ React6.createElement(CaretRight, {
91
+ }, /* @__PURE__ */ React.createElement(CaretRight, {
210
92
  className: getSize(6)
211
93
  }))));
212
94
  });
213
95
 
214
- // packages/plugins/plugin-help/src/components/WelcomeTour/WelcomeTour.tsx
215
- import React7, { useState, useEffect } from "react";
96
+ // packages/plugins/plugin-help/src/components/HelpContextProvider/HelpContextProvider.tsx
97
+ import React2, { useState, useEffect } from "react";
216
98
  import Joyride, { ACTIONS, EVENTS } from "react-joyride";
217
- import { usePluginManager, useLayout } from "@dxos/app-framework";
99
+ import { usePluginManager, useCapability, Capabilities } from "@dxos/app-framework";
218
100
  var addStepClass = (target) => {
219
101
  const element = typeof target === "string" ? document.querySelector(target) : target;
220
102
  if (element) {
@@ -256,9 +138,9 @@ var waitForTarget = async (step) => {
256
138
  });
257
139
  }
258
140
  };
259
- var WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged }) => {
141
+ var HelpContextProvider = ({ children, steps: initialSteps, running: runningProp, onRunningChanged }) => {
260
142
  const manager = usePluginManager();
261
- const layout = useLayout();
143
+ const layout = useCapability(Capabilities.Layout);
262
144
  const [running, setRunning] = useState(!!runningProp && !!getTarget(initialSteps[0]));
263
145
  const [stepIndex, _setStepIndex] = useState(0);
264
146
  const [steps, setSteps] = useState(initialSteps);
@@ -325,7 +207,7 @@ var WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged
325
207
  break;
326
208
  }
327
209
  };
328
- return /* @__PURE__ */ React7.createElement(HelpContext.Provider, {
210
+ return /* @__PURE__ */ React2.createElement(HelpContext.Provider, {
329
211
  value: {
330
212
  running: running && !paused,
331
213
  steps,
@@ -334,9 +216,9 @@ var WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged
334
216
  start: () => setRunningChanged(true),
335
217
  stop: () => setRunningChanged(false)
336
218
  }
337
- }, /* @__PURE__ */ React7.createElement("style", null, `.joyride-target {
219
+ }, /* @__PURE__ */ React2.createElement("style", null, `.joyride-target {
338
220
  --controls-opacity: 1;
339
- }`), /* @__PURE__ */ React7.createElement(Joyride, {
221
+ }`), /* @__PURE__ */ React2.createElement(Joyride, {
340
222
  continuous: true,
341
223
  steps,
342
224
  stepIndex,
@@ -344,18 +226,136 @@ var WelcomeTour = ({ steps: initialSteps, running: runningProp, onRunningChanged
344
226
  callback,
345
227
  floaterProps,
346
228
  tooltipComponent: Tooltip
347
- }));
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));
348
348
  };
349
349
 
350
350
  export {
351
+ floaterProps,
352
+ Tooltip,
353
+ HelpContextProvider,
351
354
  Key,
352
355
  ShortcutsList,
353
356
  SHORTCUTS_DIALOG,
354
357
  ShortcutsDialogContent,
355
358
  ShortcutsHints,
356
- ShortcutsSection,
357
- floaterProps,
358
- Tooltip,
359
- WelcomeTour
359
+ ShortcutsSection
360
360
  };
361
- //# sourceMappingURL=chunk-C7PCVS5K.mjs.map
361
+ //# sourceMappingURL=chunk-VNAN5GRY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Tooltip/Tooltip.tsx", "../../../src/components/HelpContextProvider/HelpContextProvider.tsx", "../../../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"],
4
+ "sourcesContent": ["//\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, { type PropsWithChildren, useState, useEffect } from 'react';\nimport Joyride, { ACTIONS, EVENTS } from 'react-joyride';\n\nimport { usePluginManager, useCapability, Capabilities } 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 HelpContextProviderProps = PropsWithChildren<{\n steps: Step[];\n running?: boolean;\n onRunningChanged?: (state: boolean) => any;\n}>;\n\nexport const HelpContextProvider = ({\n children,\n steps: initialSteps,\n running: runningProp,\n onRunningChanged,\n}: HelpContextProviderProps) => {\n const manager = usePluginManager();\n const layout = useCapability(Capabilities.Layout);\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 {children}\n </HelpContext.Provider>\n );\n};\n", "//\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"],
5
+ "mappings": "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",
6
+ "names": ["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", "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", "useCapability", "Capabilities", "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", "HelpContextProvider", "children", "steps", "initialSteps", "running", "runningProp", "onRunningChanged", "manager", "usePluginManager", "layout", "useCapability", "Capabilities", "Layout", "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", "React", "keySymbols", "mx", "shortcutKey", "mx", "Key", "binding", "React", "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"]
7
+ }
@@ -1,4 +1,5 @@
1
1
  import {
2
+ HelpContextProvider,
2
3
  Key,
3
4
  SHORTCUTS_DIALOG,
4
5
  ShortcutsDialogContent,
@@ -6,9 +7,8 @@ import {
6
7
  ShortcutsList,
7
8
  ShortcutsSection,
8
9
  Tooltip,
9
- WelcomeTour,
10
10
  floaterProps
11
- } from "./chunk-C7PCVS5K.mjs";
11
+ } from "./chunk-VNAN5GRY.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-X4XWALX3.mjs"));
28
- var ReactRoot = lazy(() => import("./react-root-4AV22UGT.mjs"));
29
- var ReactSurface = lazy(() => import("./react-surface-7S3NUVZH.mjs"));
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"));
30
30
  var HelpState = lazy(() => import("./state-SLKOTRHH.mjs"));
31
31
 
32
32
  // packages/plugins/plugin-help/src/HelpPlugin.tsx
@@ -59,24 +59,21 @@ var HelpPlugin = ({ steps = [] }) => definePlugin(meta, [
59
59
  activate: () => contributes(Capabilities.Translations, translations_default)
60
60
  }),
61
61
  defineModule({
62
- id: `${meta.id}/module/react-root`,
62
+ id: `${meta.id}/module/react-context`,
63
63
  activatesOn: Events.Startup,
64
- activate: () => ReactRoot(steps)
64
+ activate: () => ReactContext(steps)
65
65
  }),
66
66
  defineModule({
67
67
  id: `${meta.id}/module/react-surface`,
68
- activatesOn: Events.SetupSurfaces,
68
+ activatesOn: Events.Startup,
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({
75
- intent: HelpAction.Start,
76
- resolve: () => {
77
- const state = context.requestCapability(HelpCapabilities.MutableState);
78
- state.running = true;
79
- }
74
+ activate: (context) => contributes(Capabilities.IntentResolver, createResolver(HelpAction.Start, () => {
75
+ const state = context.requestCapability(HelpCapabilities.MutableState);
76
+ state.running = true;
80
77
  }))
81
78
  }),
82
79
  defineModule({
@@ -98,6 +95,7 @@ export {
98
95
  HelpAction,
99
96
  HelpCapabilities,
100
97
  HelpContext,
98
+ HelpContextProvider,
101
99
  HelpPlugin,
102
100
  Key,
103
101
  SHORTCUTS_DIALOG,
@@ -106,7 +104,6 @@ export {
106
104
  ShortcutsList,
107
105
  ShortcutsSection,
108
106
  Tooltip,
109
- WelcomeTour,
110
107
  floaterProps,
111
108
  meta,
112
109
  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 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"]
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"]
7
7
  }