@dxos/plugin-script 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b

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 (213) hide show
  1. package/dist/lib/browser/{AutomationPanel-RFQAQ7NF.mjs → AutomationPanel-OOIRJFPJ.mjs} +3 -3
  2. package/dist/lib/browser/ScriptContainer-T2AOMDT3.mjs +685 -0
  3. package/dist/lib/browser/ScriptContainer-T2AOMDT3.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-C7VBULMK.mjs → chunk-5BU5ERNU.mjs} +3 -3
  5. package/dist/lib/browser/chunk-5BU5ERNU.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-REL2R7SB.mjs +52 -0
  7. package/dist/lib/browser/chunk-REL2R7SB.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-4UTRJLQ3.mjs → chunk-SDHKTS6H.mjs} +2 -51
  9. package/dist/lib/browser/{chunk-4UTRJLQ3.mjs.map → chunk-SDHKTS6H.mjs.map} +4 -4
  10. package/dist/lib/browser/chunk-SIOGRRPF.mjs +224 -0
  11. package/dist/lib/browser/chunk-SIOGRRPF.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-K7KY6YMG.mjs → chunk-SJ4J527G.mjs} +2 -2
  13. package/dist/lib/browser/chunk-XPGBHZ3L.mjs +40 -0
  14. package/dist/lib/browser/chunk-XPGBHZ3L.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ZM6T4HPR.mjs +15 -0
  16. package/dist/lib/browser/chunk-ZM6T4HPR.mjs.map +7 -0
  17. package/dist/lib/browser/compiler-HT53ILG7.mjs +84 -0
  18. package/dist/lib/browser/compiler-HT53ILG7.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +112 -288
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs +42 -0
  22. package/dist/lib/browser/intent-resolver-YPHT6HDZ.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-GAWVYTJ5.mjs +67 -0
  25. package/dist/lib/browser/react-surface-GAWVYTJ5.mjs.map +7 -0
  26. package/dist/lib/browser/settings-YQQEU3DF.mjs +24 -0
  27. package/dist/lib/browser/settings-YQQEU3DF.mjs.map +7 -0
  28. package/dist/lib/browser/types.mjs +6 -4
  29. package/dist/lib/node/{AutomationPanel-5CJEF4MI.cjs → AutomationPanel-EPRDDR3A.cjs} +8 -8
  30. package/dist/lib/node/ScriptContainer-BV56I4OL.cjs +689 -0
  31. package/dist/lib/node/ScriptContainer-BV56I4OL.cjs.map +7 -0
  32. package/dist/lib/node/chunk-5V3XGLTR.cjs +252 -0
  33. package/dist/lib/node/chunk-5V3XGLTR.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-PK3OQP5L.cjs → chunk-6VKZJ4MH.cjs} +26 -11
  35. package/dist/lib/node/chunk-6VKZJ4MH.cjs.map +7 -0
  36. package/dist/lib/node/{meta.cjs → chunk-A2DI2G4D.cjs} +12 -8
  37. package/dist/lib/node/chunk-A2DI2G4D.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-4INUJLXL.cjs → chunk-DQRAVZM7.cjs} +6 -6
  39. package/dist/lib/node/{chunk-6LYX73ZT.cjs → chunk-EFTZN5X7.cjs} +7 -7
  40. package/dist/lib/node/chunk-EFTZN5X7.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-WPP65EYS.cjs → chunk-T4TXCRN5.cjs} +6 -44
  42. package/dist/lib/node/chunk-T4TXCRN5.cjs.map +7 -0
  43. package/dist/lib/node/chunk-TJ4BTPOS.cjs +64 -0
  44. package/dist/lib/node/chunk-TJ4BTPOS.cjs.map +7 -0
  45. package/dist/lib/node/compiler-457ZR24G.cjs +104 -0
  46. package/dist/lib/node/compiler-457ZR24G.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +105 -276
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-SUAPE7H3.cjs +56 -0
  50. package/dist/lib/node/intent-resolver-SUAPE7H3.cjs.map +7 -0
  51. package/dist/lib/node/meta.json +1 -1
  52. package/dist/lib/node/react-surface-OMBMSFZT.cjs +86 -0
  53. package/dist/lib/node/react-surface-OMBMSFZT.cjs.map +7 -0
  54. package/dist/lib/node/settings-NGHDYAVK.cjs +38 -0
  55. package/dist/lib/node/settings-NGHDYAVK.cjs.map +7 -0
  56. package/dist/lib/node/types.cjs +6 -4
  57. package/dist/lib/node/types.cjs.map +2 -2
  58. package/dist/lib/node-esm/{AutomationPanel-7Y6REBNJ.mjs → AutomationPanel-DMLAGQS5.mjs} +3 -3
  59. package/dist/lib/node-esm/ScriptContainer-3S5VHJVR.mjs +686 -0
  60. package/dist/lib/node-esm/ScriptContainer-3S5VHJVR.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-675XSDRN.mjs +16 -0
  62. package/dist/lib/node-esm/chunk-675XSDRN.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-SLTZMY34.mjs → chunk-BHP545D7.mjs} +3 -3
  64. package/dist/lib/node-esm/chunk-BHP545D7.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-4SRPREUK.mjs → chunk-G76M6O46.mjs} +2 -51
  66. package/dist/lib/node-esm/{chunk-4SRPREUK.mjs.map → chunk-G76M6O46.mjs.map} +4 -4
  67. package/dist/lib/node-esm/chunk-JHGOPQVO.mjs +41 -0
  68. package/dist/lib/node-esm/chunk-JHGOPQVO.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs +54 -0
  70. package/dist/lib/node-esm/chunk-JJZYWSD7.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-XPIKUBGS.mjs +225 -0
  72. package/dist/lib/node-esm/chunk-XPIKUBGS.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-OFYGBUNI.mjs → chunk-XUWS7OTK.mjs} +2 -2
  74. package/dist/lib/node-esm/compiler-PEARFTFR.mjs +85 -0
  75. package/dist/lib/node-esm/compiler-PEARFTFR.mjs.map +7 -0
  76. package/dist/lib/node-esm/index.mjs +112 -288
  77. package/dist/lib/node-esm/index.mjs.map +4 -4
  78. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs +43 -0
  79. package/dist/lib/node-esm/intent-resolver-SZJXQ3CW.mjs.map +7 -0
  80. package/dist/lib/node-esm/meta.json +1 -1
  81. package/dist/lib/node-esm/react-surface-J7NLV2V4.mjs +68 -0
  82. package/dist/lib/node-esm/react-surface-J7NLV2V4.mjs.map +7 -0
  83. package/dist/lib/node-esm/settings-XGXDY4NI.mjs +25 -0
  84. package/dist/lib/node-esm/settings-XGXDY4NI.mjs.map +7 -0
  85. package/dist/lib/node-esm/types.mjs +6 -4
  86. package/dist/types/src/ScriptPlugin.d.ts +1 -3
  87. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  89. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  90. package/dist/types/src/capabilities/compiler.d.ts +4 -0
  91. package/dist/types/src/capabilities/compiler.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/index.d.ts +6 -0
  93. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  95. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  97. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/settings.d.ts +4 -0
  99. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  100. package/dist/types/src/components/ScriptContainer.d.ts +10 -2
  101. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  102. package/dist/types/src/components/ScriptSettings/ScriptSettings.d.ts.map +1 -1
  103. package/dist/types/src/components/ScriptSettingsPanel.d.ts.map +1 -1
  104. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +11 -0
  105. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -0
  106. package/dist/types/src/components/{Toolbar/Toolbar.stories.d.ts → ScriptToolbar/ScriptToolbar.stories.d.ts} +1 -1
  107. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.stories.d.ts.map +1 -0
  108. package/dist/types/src/components/ScriptToolbar/deploy.d.ts +48 -0
  109. package/dist/types/src/components/ScriptToolbar/deploy.d.ts.map +1 -0
  110. package/dist/types/src/components/ScriptToolbar/format.d.ts +25 -0
  111. package/dist/types/src/components/ScriptToolbar/format.d.ts.map +1 -0
  112. package/dist/types/src/components/ScriptToolbar/index.d.ts +2 -0
  113. package/dist/types/src/components/ScriptToolbar/index.d.ts.map +1 -0
  114. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts +31 -0
  115. package/dist/types/src/components/ScriptToolbar/templateSelect.d.ts.map +1 -0
  116. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts +14 -0
  117. package/dist/types/src/components/ScriptToolbar/useToolbarAction.d.ts.map +1 -0
  118. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts +10 -0
  119. package/dist/types/src/components/ScriptToolbar/useToolbarState.d.ts.map +1 -0
  120. package/dist/types/src/components/ScriptToolbar/view.d.ts +33 -0
  121. package/dist/types/src/components/ScriptToolbar/view.d.ts.map +1 -0
  122. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts +4 -2
  123. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  124. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/index.d.ts +1 -1
  126. package/dist/types/src/components/index.d.ts.map +1 -1
  127. package/dist/types/src/index.d.ts +2 -4
  128. package/dist/types/src/index.d.ts.map +1 -1
  129. package/dist/types/src/meta.d.ts +1 -2
  130. package/dist/types/src/meta.d.ts.map +1 -1
  131. package/dist/types/src/templates/email.d.ts +2 -1
  132. package/dist/types/src/templates/email.d.ts.map +1 -1
  133. package/dist/types/src/{templates.d.ts → templates/index.d.ts} +1 -1
  134. package/dist/types/src/templates/index.d.ts.map +1 -0
  135. package/dist/types/src/translations.d.ts +91 -0
  136. package/dist/types/src/translations.d.ts.map +1 -1
  137. package/dist/types/src/types.d.ts +14 -6
  138. package/dist/types/src/types.d.ts.map +1 -1
  139. package/dist/types/tsconfig.tsbuildinfo +1 -1
  140. package/package.json +44 -46
  141. package/src/ScriptPlugin.tsx +63 -91
  142. package/src/bundler/bundler.test.ts +2 -2
  143. package/src/capabilities/capabilities.ts +12 -0
  144. package/src/capabilities/compiler.ts +33 -0
  145. package/src/capabilities/index.ts +12 -0
  146. package/src/capabilities/intent-resolver.ts +43 -0
  147. package/src/capabilities/react-surface.tsx +54 -0
  148. package/src/capabilities/settings.ts +14 -0
  149. package/src/components/ScriptContainer.tsx +64 -9
  150. package/src/components/ScriptSettings/ScriptSettings.tsx +25 -1
  151. package/src/components/ScriptSettingsPanel.tsx +124 -50
  152. package/src/components/{Toolbar/Toolbar.stories.tsx → ScriptToolbar/ScriptToolbar.stories.tsx} +2 -2
  153. package/src/components/ScriptToolbar/ScriptToolbar.tsx +51 -0
  154. package/src/components/ScriptToolbar/deploy.ts +157 -0
  155. package/src/components/ScriptToolbar/format.ts +47 -0
  156. package/src/components/{Toolbar → ScriptToolbar}/index.ts +1 -1
  157. package/src/components/ScriptToolbar/templateSelect.ts +64 -0
  158. package/src/components/ScriptToolbar/useToolbarAction.ts +54 -0
  159. package/src/components/ScriptToolbar/useToolbarState.ts +16 -0
  160. package/src/components/ScriptToolbar/view.ts +52 -0
  161. package/src/components/TypescriptEditor/TypescriptEditor.stories.tsx +2 -0
  162. package/src/components/TypescriptEditor/TypescriptEditor.tsx +73 -8
  163. package/src/index.ts +2 -6
  164. package/src/meta.ts +1 -1
  165. package/src/templates/email.ts +26 -23
  166. package/src/{templates.ts → templates/index.ts} +5 -5
  167. package/src/translations.ts +21 -0
  168. package/src/types.ts +19 -18
  169. package/dist/lib/browser/ScriptContainer-GDVBWFI7.mjs +0 -415
  170. package/dist/lib/browser/ScriptContainer-GDVBWFI7.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-C7VBULMK.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-RQA3EB5K.mjs +0 -26
  173. package/dist/lib/browser/chunk-RQA3EB5K.mjs.map +0 -7
  174. package/dist/lib/browser/meta.mjs +0 -9
  175. package/dist/lib/browser/meta.mjs.map +0 -7
  176. package/dist/lib/node/ScriptContainer-YWXXNLG6.cjs +0 -426
  177. package/dist/lib/node/ScriptContainer-YWXXNLG6.cjs.map +0 -7
  178. package/dist/lib/node/chunk-6LYX73ZT.cjs.map +0 -7
  179. package/dist/lib/node/chunk-PK3OQP5L.cjs.map +0 -7
  180. package/dist/lib/node/chunk-WPP65EYS.cjs.map +0 -7
  181. package/dist/lib/node/meta.cjs.map +0 -7
  182. package/dist/lib/node-esm/ScriptContainer-BG2PHKEH.mjs +0 -416
  183. package/dist/lib/node-esm/ScriptContainer-BG2PHKEH.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-H6BBLQ5Q.mjs +0 -27
  185. package/dist/lib/node-esm/chunk-H6BBLQ5Q.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-SLTZMY34.mjs.map +0 -7
  187. package/dist/lib/node-esm/meta.mjs +0 -10
  188. package/dist/lib/node-esm/meta.mjs.map +0 -7
  189. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts +0 -12
  190. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +0 -1
  191. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +0 -6
  192. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +0 -1
  193. package/dist/types/src/components/ScriptBlock/index.d.ts +0 -2
  194. package/dist/types/src/components/ScriptBlock/index.d.ts.map +0 -1
  195. package/dist/types/src/components/ScriptEditor.d.ts +0 -9
  196. package/dist/types/src/components/ScriptEditor.d.ts.map +0 -1
  197. package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -23
  198. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
  199. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +0 -1
  200. package/dist/types/src/components/Toolbar/index.d.ts +0 -2
  201. package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
  202. package/dist/types/src/templates.d.ts.map +0 -1
  203. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +0 -55
  204. package/src/components/ScriptBlock/ScriptBlock.tsx +0 -102
  205. package/src/components/ScriptBlock/index.ts +0 -5
  206. package/src/components/ScriptEditor.tsx +0 -193
  207. package/src/components/Toolbar/Toolbar.tsx +0 -177
  208. /package/dist/lib/browser/{AutomationPanel-RFQAQ7NF.mjs.map → AutomationPanel-OOIRJFPJ.mjs.map} +0 -0
  209. /package/dist/lib/browser/{chunk-K7KY6YMG.mjs.map → chunk-SJ4J527G.mjs.map} +0 -0
  210. /package/dist/lib/node/{AutomationPanel-5CJEF4MI.cjs.map → AutomationPanel-EPRDDR3A.cjs.map} +0 -0
  211. /package/dist/lib/node/{chunk-4INUJLXL.cjs.map → chunk-DQRAVZM7.cjs.map} +0 -0
  212. /package/dist/lib/node-esm/{AutomationPanel-7Y6REBNJ.mjs.map → AutomationPanel-DMLAGQS5.mjs.map} +0 -0
  213. /package/dist/lib/node-esm/{chunk-OFYGBUNI.mjs.map → chunk-XUWS7OTK.mjs.map} +0 -0
@@ -9,6 +9,7 @@ import React, { useMemo } from 'react';
9
9
 
10
10
  import { createDocAccessor, createObject } from '@dxos/react-client/echo';
11
11
  import { createDataExtensions } from '@dxos/react-ui-editor';
12
+ import { withTheme } from '@dxos/storybook-utils';
12
13
 
13
14
  import { TypescriptEditor } from './TypescriptEditor';
14
15
  import { templates } from '../../templates';
@@ -37,6 +38,7 @@ const meta: Meta = {
37
38
  title: 'plugins/plugin-script/TypescriptEditor',
38
39
  component: TypescriptEditor,
39
40
  render: DefaultStory,
41
+ decorators: [withTheme],
40
42
  };
41
43
 
42
44
  export default meta;
@@ -3,18 +3,26 @@
3
3
  //
4
4
 
5
5
  import { javascript } from '@codemirror/lang-javascript';
6
+ import { defaultHighlightStyle } from '@codemirror/language';
7
+ import { Prec } from '@codemirror/state';
8
+ import { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';
9
+ import { keymap } from '@codemirror/view';
10
+ import { tags } from '@lezer/highlight';
6
11
  import { type VirtualTypeScriptEnvironment } from '@typescript/vfs';
7
- import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';
12
+ import { continueKeymap } from '@valtown/codemirror-continue';
13
+ import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover, type HoverInfo } from '@valtown/codemirror-ts';
8
14
  import React from 'react';
9
15
 
10
- import { useThemeContext } from '@dxos/react-ui';
16
+ import { type ThemeMode, useThemeContext } from '@dxos/react-ui';
11
17
  import {
12
18
  autocomplete,
13
19
  createBasicExtensions,
14
20
  createThemeExtensions,
15
21
  editorFullWidth,
16
- editorGutter,
22
+ type EditorInputMode,
17
23
  editorMonospace,
24
+ EditorView,
25
+ folding,
18
26
  InputModeExtensions,
19
27
  useTextEditor,
20
28
  type UseTextEditorProps,
@@ -23,7 +31,9 @@ import { nonNullable } from '@dxos/util';
23
31
 
24
32
  export type TypescriptEditorProps = {
25
33
  id: string;
34
+ inputMode?: EditorInputMode;
26
35
  env?: VirtualTypeScriptEnvironment;
36
+ toolbar?: boolean;
27
37
  } & Pick<UseTextEditorProps, 'className' | 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;
28
38
 
29
39
  export const TypescriptEditor = ({
@@ -34,6 +44,8 @@ export const TypescriptEditor = ({
34
44
  extensions,
35
45
  scrollTo,
36
46
  selection,
47
+ toolbar,
48
+ inputMode = 'vscode',
37
49
  }: TypescriptEditorProps) => {
38
50
  const { themeMode } = useThemeContext();
39
51
  const { parentRef, focusAttributes } = useTextEditor(
@@ -56,24 +68,77 @@ export const TypescriptEditor = ({
56
68
  content: { className: editorFullWidth },
57
69
  },
58
70
  }),
59
- editorGutter,
71
+ // NOTE: Not using default editor gutter because folding for code works best right beside text.
72
+ EditorView.theme({
73
+ '.cm-gutters': {
74
+ // Match margin from content.
75
+ marginTop: '16px',
76
+ },
77
+ }),
78
+ InputModeExtensions[inputMode],
79
+ folding(),
80
+ // Continues block comments when you hit Enter.
81
+ Prec.high(keymap.of(continueKeymap)),
60
82
  // TODO(burdon): Factor out.
61
83
  [
62
84
  editorMonospace,
63
85
  javascript({ typescript: true }),
64
86
  // https://github.com/val-town/codemirror-ts
65
87
  autocomplete({ override: env ? [tsAutocomplete()] : [] }),
66
- env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],
67
- InputModeExtensions.vscode,
88
+ env
89
+ ? [
90
+ tsFacet.of({ env, path: `/src/${id}.ts` }),
91
+ tsSync(),
92
+ tsLinter(),
93
+ tsHover({ renderTooltip: createTooltipRenderer(themeMode) }),
94
+ ]
95
+ : [],
68
96
  ],
69
97
  ].filter(nonNullable),
70
98
  selection,
71
99
  scrollTo,
72
100
  }),
73
- [id, extensions, themeMode, selection, scrollTo],
101
+ [id, extensions, themeMode, inputMode, selection, scrollTo],
102
+ );
103
+
104
+ return (
105
+ <div ref={parentRef} data-toolbar={toolbar ? 'enabled' : 'disabled'} className={className} {...focusAttributes} />
74
106
  );
107
+ };
108
+
109
+ const createTooltipRenderer = (themeMode: ThemeMode) => {
110
+ const theme = themeMode === 'dark' ? oneDarkHighlightStyle : defaultHighlightStyle;
111
+
112
+ const classFromKind = (_kind: string) => {
113
+ // E.g., localName, methodName, parameterName, etc.
114
+ const kind = _kind.endsWith('Name') ? 'name' : _kind;
115
+ const validTag = kind in tags;
116
+ if (!validTag) {
117
+ return '';
118
+ }
119
+
120
+ const tag = tags[kind as keyof typeof tags];
121
+ if (typeof tag === 'function') {
122
+ return '';
123
+ }
124
+
125
+ return theme.style([tag]) ?? '';
126
+ };
127
+
128
+ return (info: HoverInfo) => {
129
+ const div = document.createElement('div');
130
+ div.className = 'p-1 rounded border border-separator bg-base xs:max-w-80 max-w-lg';
131
+
132
+ if (info.quickInfo?.displayParts) {
133
+ for (const part of info.quickInfo.displayParts) {
134
+ const span = div.appendChild(document.createElement('span'));
135
+ span.className = classFromKind(part.kind);
136
+ span.innerText = part.text;
137
+ }
138
+ }
75
139
 
76
- return <div ref={parentRef} className={className} {...focusAttributes} />;
140
+ return { dom: div };
141
+ };
77
142
  };
78
143
 
79
144
  export default TypescriptEditor;
package/src/index.ts CHANGED
@@ -2,13 +2,9 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { ScriptPlugin } from './ScriptPlugin';
6
-
7
- export default ScriptPlugin;
8
-
9
5
  export * from './bundler';
10
- export * from './compiler';
6
+ export { ScriptCapabilities } from './capabilities';
11
7
  export * from './components';
12
- export * from './types';
8
+ export * from './meta';
13
9
 
14
10
  export * from './ScriptPlugin';
package/src/meta.ts CHANGED
@@ -6,7 +6,7 @@ import { type PluginMeta } from '@dxos/app-framework';
6
6
 
7
7
  export const SCRIPT_PLUGIN = 'dxos.org/plugin/script';
8
8
 
9
- export default {
9
+ export const meta = {
10
10
  id: SCRIPT_PLUGIN,
11
11
  name: 'Scripts',
12
12
  description: 'Distributed functions.',
@@ -3,7 +3,8 @@
3
3
  //
4
4
 
5
5
  /**
6
- * Stores a message into ECHO Mailbox object.
6
+ * Appends a message to the end of a Document configured through a trigger.
7
+ * Trigger must have a targetDocumentId field set in Meta.
7
8
  */
8
9
  export default async ({
9
10
  event: {
@@ -11,28 +12,30 @@ export default async ({
11
12
  },
12
13
  context: { space },
13
14
  }: any) => {
14
- const {
15
- data: {
16
- objects: [message],
17
- },
18
- } = await request.json();
15
+ const { data, trigger } = (await request.json()) as RequestPayload;
19
16
 
20
- const mailbox = await space.crud.query({ __typename: 'dxos.org/type/MailboxType' }).first();
21
- if (!mailbox) {
22
- return new Response('Mailbox not found.', { status: 500 });
23
- }
17
+ const documentId = trigger.meta.targetDocumentId;
18
+ const document = await space.db.query({ id: documentId }, { format: 'plain' }).first();
24
19
 
25
- await space.crud.push(
26
- { id: mailbox.id },
27
- {
28
- sender: { email: message.from },
29
- timestamp: new Date(message.created).toISOString(),
30
- text: message.body,
31
- properties: {
32
- subject: message.subject,
33
- to: [{ email: message.to }],
34
- },
35
- },
36
- );
37
- return new Response(JSON.stringify(message));
20
+ const contentId = document.content['/'].split(':')[3];
21
+ const documentContent = await space.db.query({ id: contentId }, { format: 'plain' }).first();
22
+ const modifiedContent = [
23
+ documentContent.content,
24
+ '',
25
+ '---',
26
+ `**From:** ${data.from}`,
27
+ `**Subject:** ${data.subject}`,
28
+ `**Date:** ${data.created}`,
29
+ '',
30
+ data.body,
31
+ ].join('\n');
32
+
33
+ await space.db.update({ id: contentId }, { content: modifiedContent });
34
+
35
+ return new Response(JSON.stringify({ success: true }));
36
+ };
37
+
38
+ type RequestPayload = {
39
+ data: { from: string; subject: string; created: string; body: string };
40
+ trigger: { meta: { targetDocumentId: string } };
38
41
  };
@@ -3,15 +3,15 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import chat from './templates/chat.ts?raw';
6
+ import chat from './chat.ts?raw';
7
7
  // @ts-ignore
8
- import chess from './templates/chess.ts?raw';
8
+ import chess from './chess.ts?raw';
9
9
  // @ts-ignore
10
- import echo from './templates/echo.ts?raw';
10
+ import echo from './echo.ts?raw';
11
11
  // @ts-ignore
12
- import email from './templates/email.ts?raw';
12
+ import email from './email.ts?raw';
13
13
  // @ts-ignore
14
- import forex from './templates/forex.ts?raw';
14
+ import forex from './forex.ts?raw';
15
15
 
16
16
  const removeHeader = (str: string) => str.split('\n').slice(4).join('\n');
17
17
 
@@ -2,11 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { ScriptType } from '@dxos/functions';
6
+
5
7
  import { SCRIPT_PLUGIN } from './meta';
6
8
 
7
9
  export default [
8
10
  {
9
11
  'en-US': {
12
+ [ScriptType.typename]: {
13
+ 'typename label': 'Script',
14
+ },
10
15
  [SCRIPT_PLUGIN]: {
11
16
  'plugin name': 'Scripts',
12
17
  'object title placeholder': 'New script',
@@ -27,6 +32,22 @@ export default [
27
32
  'function url label': 'Invocation URL',
28
33
  'function binding label': 'Function binding',
29
34
  'function binding placeholder': 'BINDING',
35
+ 'script publish settings label': 'Publishing',
36
+ 'script publish settings description': 'Scripts can be shared publicly as Github gists.',
37
+ 'no github token label': 'This space has no Github access token available.',
38
+ 'open token manager label': 'Open Token Manager',
39
+ 'publish label': 'Publish',
40
+ 'publishing label': 'Publishing',
41
+ 'editor input mode label': 'Editor input mode',
42
+ 'select editor input mode placeholder': 'Select editor input mode…',
43
+ 'settings editor input mode default label': 'Default',
44
+ 'settings editor input mode vim label': 'Vim',
45
+ 'settings editor input mode vscode label': 'VS Code',
46
+ 'view group label': 'View',
47
+ 'view editor label': 'Editor',
48
+ 'view split label': 'Split',
49
+ 'view debug label': 'Debug',
50
+ 'template select group label': 'Select template',
30
51
  },
31
52
  },
32
53
  },
package/src/types.ts CHANGED
@@ -2,37 +2,38 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import type {
6
- IntentResolverProvides,
7
- MetadataRecordsProvides,
8
- SettingsProvides,
9
- SurfaceProvides,
10
- TranslationsProvides,
11
- } from '@dxos/app-framework';
5
+ import { TitleAnnotationId } from '@effect/schema/AST';
6
+
7
+ import { SpaceSchema } from '@dxos/client/echo';
12
8
  import { S } from '@dxos/echo-schema';
13
9
  import { ScriptType } from '@dxos/functions';
14
- import { type SchemaProvides } from '@dxos/plugin-space';
10
+ import { EditorInputMode } from '@dxos/react-ui-editor';
15
11
 
16
12
  import { SCRIPT_PLUGIN } from './meta';
17
13
 
18
14
  export namespace ScriptAction {
19
15
  const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;
20
16
 
17
+ export const CreateScriptSchema = S.Struct({
18
+ name: S.optional(S.String),
19
+ // TODO(wittjosiah): Placeholder annotation?
20
+ gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),
21
+ });
22
+
23
+ export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;
24
+
21
25
  export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {
22
- input: S.Struct({
23
- name: S.optional(S.String),
24
- }),
26
+ input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),
25
27
  output: S.Struct({
26
28
  object: ScriptType,
27
29
  }),
28
30
  }) {}
29
31
  }
30
32
 
31
- export type ScriptSettingsProps = {};
33
+ export const ScriptSettingsSchema = S.mutable(
34
+ S.Struct({
35
+ editorInputMode: EditorInputMode,
36
+ }),
37
+ );
32
38
 
33
- export type ScriptPluginProvides = IntentResolverProvides &
34
- MetadataRecordsProvides &
35
- SchemaProvides &
36
- SettingsProvides<ScriptSettingsProps> &
37
- SurfaceProvides &
38
- TranslationsProvides;
39
+ export type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;