@dxos/react-ui-editor 0.3.11-main.ec7a2b3 → 0.3.11-main.ee2b64c

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 (185) hide show
  1. package/dist/lib/browser/index.mjs +1702 -1100
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +13 -15
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +14 -6
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +1 -1
  9. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/{yjs.stories.d.ts → hooks.stories.d.ts} +13 -2
  11. package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -0
  12. package/dist/types/src/components/Toolbar/Toolbar.d.ts +25 -0
  13. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  14. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +23 -0
  15. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
  16. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  17. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  18. package/dist/types/src/components/index.d.ts +1 -0
  19. package/dist/types/src/components/index.d.ts.map +1 -1
  20. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
  21. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  22. package/dist/types/src/extensions/automerge/automerge.spec.d.ts +2 -0
  23. package/dist/types/src/extensions/automerge/automerge.spec.d.ts.map +1 -0
  24. package/dist/types/src/extensions/automerge/automerge.test.d.ts +2 -0
  25. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +1 -0
  26. package/dist/types/src/extensions/automerge/defs.d.ts +9 -11
  27. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  28. package/dist/types/src/extensions/automerge/index.d.ts +0 -1
  29. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -1
  30. package/dist/types/src/extensions/automerge/semaphore.d.ts +8 -12
  31. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -1
  32. package/dist/types/src/extensions/automerge/update-automerge.d.ts +2 -2
  33. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  34. package/dist/types/src/extensions/awareness.d.ts +2 -2
  35. package/dist/types/src/extensions/awareness.d.ts.map +1 -1
  36. package/dist/types/src/extensions/basic.d.ts +4 -5
  37. package/dist/types/src/extensions/basic.d.ts.map +1 -1
  38. package/dist/types/src/extensions/comments.d.ts +35 -18
  39. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  40. package/dist/types/src/extensions/cursor.d.ts +3 -3
  41. package/dist/types/src/extensions/cursor.d.ts.map +1 -1
  42. package/dist/types/src/extensions/index.d.ts +1 -7
  43. package/dist/types/src/extensions/index.d.ts.map +1 -1
  44. package/dist/types/src/extensions/markdown/bundle.d.ts +3 -6
  45. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  46. package/dist/types/src/extensions/markdown/code.d.ts.map +1 -0
  47. package/dist/types/src/extensions/markdown/formatting.d.ts +13 -0
  48. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -0
  49. package/dist/types/src/extensions/markdown/heading.d.ts +6 -0
  50. package/dist/types/src/extensions/markdown/heading.d.ts.map +1 -0
  51. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  52. package/dist/types/src/extensions/markdown/hr.d.ts.map +1 -0
  53. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -0
  54. package/dist/types/src/extensions/markdown/index.d.ts +8 -0
  55. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -1
  56. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -0
  57. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -0
  58. package/dist/types/src/extensions/markdown/tasklist.d.ts.map +1 -0
  59. package/dist/types/src/extensions/mention.d.ts.map +1 -1
  60. package/dist/types/src/extensions/outliner.d.ts +4 -0
  61. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  62. package/dist/types/src/hooks/awareness-provider.d.ts +7 -4
  63. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -1
  64. package/dist/types/src/hooks/defs.d.ts +25 -0
  65. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  66. package/dist/types/src/hooks/index.d.ts +4 -2
  67. package/dist/types/src/hooks/index.d.ts.map +1 -1
  68. package/dist/types/src/hooks/useActionHandler.d.ts +4 -0
  69. package/dist/types/src/hooks/useActionHandler.d.ts.map +1 -0
  70. package/dist/types/src/hooks/useEditorView.d.ts +17 -0
  71. package/dist/types/src/hooks/useEditorView.d.ts.map +1 -0
  72. package/dist/types/src/hooks/useTextEditor.d.ts +39 -0
  73. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
  74. package/dist/types/src/hooks/useTextModel.d.ts +14 -27
  75. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  76. package/dist/types/src/index.d.ts +1 -1
  77. package/dist/types/src/index.d.ts.map +1 -1
  78. package/dist/types/src/styles/markdown.d.ts +2 -2
  79. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  80. package/dist/types/src/themes/default.d.ts.map +1 -1
  81. package/dist/types/src/util.d.ts +2 -0
  82. package/dist/types/src/util.d.ts.map +1 -1
  83. package/package.json +48 -38
  84. package/src/components/TextEditor/MarkdownEditor.stories.tsx +73 -82
  85. package/src/components/TextEditor/TextEditor.tsx +111 -75
  86. package/src/components/TextEditor/automerge.stories.tsx +1 -2
  87. package/src/components/TextEditor/hooks.stories.tsx +106 -0
  88. package/src/components/Toolbar/Toolbar.stories.tsx +90 -0
  89. package/src/components/Toolbar/Toolbar.tsx +166 -0
  90. package/src/components/Toolbar/index.ts +5 -0
  91. package/src/components/index.ts +1 -0
  92. package/src/extensions/autocomplete.ts +6 -3
  93. package/src/extensions/automerge/automerge.spec.tsx +76 -0
  94. package/src/extensions/automerge/automerge.test.ts +13 -0
  95. package/src/extensions/automerge/automerge.ts +54 -45
  96. package/src/extensions/automerge/cursor.ts +3 -3
  97. package/src/extensions/automerge/defs.ts +13 -34
  98. package/src/extensions/automerge/index.ts +0 -1
  99. package/src/extensions/automerge/semaphore.ts +33 -32
  100. package/src/extensions/automerge/update-automerge.ts +14 -8
  101. package/src/extensions/automerge/update-codemirror.ts +5 -5
  102. package/src/extensions/awareness.ts +22 -18
  103. package/src/extensions/basic.ts +17 -10
  104. package/src/extensions/blast.ts +4 -1
  105. package/src/extensions/comments.ts +327 -166
  106. package/src/extensions/cursor.ts +7 -3
  107. package/src/extensions/index.ts +1 -7
  108. package/src/extensions/markdown/bundle.ts +23 -28
  109. package/src/extensions/markdown/code.ts +150 -0
  110. package/src/extensions/markdown/formatting.ts +188 -0
  111. package/src/extensions/markdown/heading.ts +59 -0
  112. package/src/extensions/markdown/highlight.ts +9 -15
  113. package/src/extensions/markdown/hr.ts +71 -0
  114. package/src/extensions/markdown/index.ts +8 -0
  115. package/src/extensions/{link.ts → markdown/link.ts} +16 -7
  116. package/src/extensions/markdown/tasklist.ts +110 -0
  117. package/src/extensions/mention.ts +9 -2
  118. package/src/extensions/outliner.ts +12 -0
  119. package/src/hooks/awareness-provider.ts +24 -20
  120. package/src/hooks/defs.ts +42 -0
  121. package/src/hooks/index.ts +5 -2
  122. package/src/hooks/useActionHandler.ts +62 -0
  123. package/src/hooks/useEditorView.ts +29 -0
  124. package/src/hooks/useTextEditor.ts +153 -0
  125. package/src/hooks/useTextModel.ts +66 -56
  126. package/src/index.ts +1 -1
  127. package/src/styles/markdown.ts +9 -10
  128. package/src/themes/default.ts +11 -8
  129. package/src/util.ts +26 -3
  130. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts +0 -12
  131. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +0 -1
  132. package/dist/types/src/components/TextEditor/comments.stories.d.ts +0 -26
  133. package/dist/types/src/components/TextEditor/comments.stories.d.ts.map +0 -1
  134. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +0 -1
  135. package/dist/types/src/extensions/code.d.ts.map +0 -1
  136. package/dist/types/src/extensions/hr.d.ts.map +0 -1
  137. package/dist/types/src/extensions/image.d.ts.map +0 -1
  138. package/dist/types/src/extensions/link.d.ts.map +0 -1
  139. package/dist/types/src/extensions/table.d.ts.map +0 -1
  140. package/dist/types/src/extensions/tasklist.d.ts.map +0 -1
  141. package/dist/types/src/extensions/yjs/cursor.d.ts +0 -4
  142. package/dist/types/src/extensions/yjs/cursor.d.ts.map +0 -1
  143. package/dist/types/src/extensions/yjs/index.d.ts +0 -2
  144. package/dist/types/src/extensions/yjs/index.d.ts.map +0 -1
  145. package/dist/types/src/extensions/yjs/yjs.d.ts +0 -4
  146. package/dist/types/src/extensions/yjs/yjs.d.ts.map +0 -1
  147. package/dist/types/src/extensions/yjs/yjs.test.d.ts +0 -2
  148. package/dist/types/src/extensions/yjs/yjs.test.d.ts.map +0 -1
  149. package/dist/types/src/hooks/automerge.d.ts +0 -3
  150. package/dist/types/src/hooks/automerge.d.ts.map +0 -1
  151. package/dist/types/src/hooks/yjs.d.ts +0 -27
  152. package/dist/types/src/hooks/yjs.d.ts.map +0 -1
  153. package/dist/types/src/testing/index.d.ts +0 -3
  154. package/dist/types/src/testing/index.d.ts.map +0 -1
  155. package/dist/types/src/testing/proto/gen/schema.d.ts +0 -15
  156. package/dist/types/src/testing/proto/gen/schema.d.ts.map +0 -1
  157. package/dist/types/src/testing/proto/index.d.ts +0 -2
  158. package/dist/types/src/testing/proto/index.d.ts.map +0 -1
  159. package/dist/types/src/testing/replicator.d.ts +0 -45
  160. package/dist/types/src/testing/replicator.d.ts.map +0 -1
  161. package/src/components/TextEditor/codemirror.stories.ts +0 -115
  162. package/src/components/TextEditor/comments.stories.tsx +0 -315
  163. package/src/components/TextEditor/yjs.stories.tsx +0 -56
  164. package/src/extensions/code.ts +0 -106
  165. package/src/extensions/hr.ts +0 -73
  166. package/src/extensions/tasklist.ts +0 -119
  167. package/src/extensions/yjs/cursor.ts +0 -22
  168. package/src/extensions/yjs/index.ts +0 -5
  169. package/src/extensions/yjs/yjs.test.ts +0 -35
  170. package/src/extensions/yjs/yjs.ts +0 -16
  171. package/src/hooks/automerge.ts +0 -52
  172. package/src/hooks/yjs.ts +0 -156
  173. package/src/testing/index.ts +0 -6
  174. package/src/testing/proto/gen/schema.ts +0 -49
  175. package/src/testing/proto/index.ts +0 -5
  176. package/src/testing/proto/schema.proto +0 -15
  177. package/src/testing/replicator.ts +0 -184
  178. /package/dist/types/src/extensions/{code.d.ts → markdown/code.d.ts} +0 -0
  179. /package/dist/types/src/extensions/{hr.d.ts → markdown/hr.d.ts} +0 -0
  180. /package/dist/types/src/extensions/{image.d.ts → markdown/image.d.ts} +0 -0
  181. /package/dist/types/src/extensions/{link.d.ts → markdown/link.d.ts} +0 -0
  182. /package/dist/types/src/extensions/{table.d.ts → markdown/table.d.ts} +0 -0
  183. /package/dist/types/src/extensions/{tasklist.d.ts → markdown/tasklist.d.ts} +0 -0
  184. /package/src/extensions/{image.ts → markdown/image.ts} +0 -0
  185. /package/src/extensions/{table.ts → markdown/table.ts} +0 -0
@@ -4,17 +4,17 @@
4
4
  // Ref: https://github.com/automerge/automerge-codemirror
5
5
  //
6
6
 
7
- import { type EditorState, type StateField, type Text, type Transaction } from '@codemirror/state';
7
+ import { type EditorState, type StateField, type Transaction, type Text } from '@codemirror/state';
8
8
 
9
- import { next as am, type Heads } from '@dxos/automerge/automerge';
9
+ import { next as A, type Heads } from '@dxos/automerge/automerge';
10
10
 
11
- import { type IDocHandle, type Value } from './defs';
11
+ import { type IDocHandle, type State } from './defs';
12
12
 
13
13
  export const updateAutomerge = (
14
- field: StateField<Value>,
14
+ field: StateField<State>,
15
15
  handle: IDocHandle,
16
16
  transactions: Transaction[],
17
- state: EditorState,
17
+ state: EditorState, // TODO(burdon): Just pass in the state field value?
18
18
  ): Heads | undefined => {
19
19
  const { lastHeads, path } = state.field(field);
20
20
 
@@ -31,12 +31,18 @@ export const updateAutomerge = (
31
31
  return undefined;
32
32
  }
33
33
 
34
- const newHeads = handle.changeAt(lastHeads, (doc: am.Doc<unknown>) => {
34
+ const newHeads = handle.changeAt(lastHeads, (doc: A.Doc<unknown>) => {
35
+ const invertedTransactions: { from: number; del: number; insert: Text }[] = [];
35
36
  for (const tr of transactions) {
36
- tr.changes.iterChanges((fromA: number, toA: number, _fromB: number, _toB: number, inserted: Text) => {
37
- am.splice(doc, path, fromA, toA - fromA, inserted.toString());
37
+ tr.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {
38
+ invertedTransactions.push({ from: fromA, del: toA - fromA, insert });
38
39
  });
39
40
  }
41
+
42
+ // TODO(burdon): Hack to apply in reverse order to properly apply range.
43
+ invertedTransactions.reverse().forEach(({ from, del, insert }) => {
44
+ A.splice(doc, path.slice(), from, del, insert.toString());
45
+ });
40
46
  });
41
47
 
42
48
  return newHeads ?? undefined;
@@ -16,7 +16,7 @@ import {
16
16
  type SpliceTextPatch,
17
17
  } from '@dxos/automerge/automerge';
18
18
 
19
- import { reconcileAnnotationType } from './defs';
19
+ import { reconcileAnnotation } from './defs';
20
20
 
21
21
  export const updateCodeMirror = (view: EditorView, selection: EditorSelection, target: Prop[], patches: Patch[]) => {
22
22
  for (const patch of patches) {
@@ -26,14 +26,14 @@ export const updateCodeMirror = (view: EditorView, selection: EditorSelection, t
26
26
  selection = selection.map(changeSet, 1);
27
27
  view.dispatch({
28
28
  changes: changeSet,
29
- annotations: reconcileAnnotationType.of({}),
29
+ annotations: reconcileAnnotation.of(false),
30
30
  });
31
31
  }
32
32
  }
33
33
 
34
34
  view.dispatch({
35
35
  selection,
36
- annotations: reconcileAnnotationType.of({}),
36
+ annotations: reconcileAnnotation.of(false),
37
37
  });
38
38
  };
39
39
 
@@ -57,7 +57,7 @@ const handleInsert = (target: Prop[], patch: InsertPatch): Array<ChangeSpec> =>
57
57
  return [];
58
58
  }
59
59
 
60
- const text = patch.values.map((v) => (v ? v.toString() : '')).join('');
60
+ const text = patch.values.map((value) => (value ? value.toString() : '')).join('');
61
61
  return [{ from: index, to: index, insert: text }];
62
62
  };
63
63
 
@@ -88,7 +88,7 @@ const handlePut = (target: Prop[], patch: PutPatch, state: EditorState): Array<C
88
88
 
89
89
  const length = state.doc.length;
90
90
  if (typeof patch.value !== 'string') {
91
- return []; // TODO(dmaretskyi): How to handle non string values?
91
+ return []; // TODO(dmaretskyi): How to handle non-string values?
92
92
  }
93
93
 
94
94
  return [{ from: 0, to: length, insert: patch.value as any }];
@@ -24,8 +24,8 @@ export interface AwarenessProvider {
24
24
  open(): void;
25
25
  close(): void;
26
26
 
27
- update(position: AwarenessPosition | undefined): void;
28
27
  getRemoteStates(): AwarenessState[];
28
+ update(position: AwarenessPosition | undefined): void;
29
29
  }
30
30
 
31
31
  const dummyProvider: AwarenessProvider = {
@@ -34,11 +34,11 @@ const dummyProvider: AwarenessProvider = {
34
34
  open: () => {},
35
35
  close: () => {},
36
36
 
37
- update: () => {},
38
37
  getRemoteStates: () => [],
38
+ update: () => {},
39
39
  };
40
40
 
41
- export const AwarenessProvider = Facet.define<AwarenessProvider, AwarenessProvider>({
41
+ export const awarenessProvider = Facet.define<AwarenessProvider, AwarenessProvider>({
42
42
  combine: (providers) => providers[0] ?? dummyProvider,
43
43
  });
44
44
 
@@ -66,10 +66,9 @@ export type AwarenessState = {
66
66
  /**
67
67
  * Extension provides presence information about other peers.
68
68
  */
69
- // TODO(burdon): Why provide default?
70
69
  export const awareness = (provider = dummyProvider): Extension => {
71
70
  return [
72
- AwarenessProvider.of(provider),
71
+ awarenessProvider.of(provider),
73
72
  ViewPlugin.fromClass(RemoteSelectionsDecorator, {
74
73
  decorations: (value) => value.decorations,
75
74
  }),
@@ -92,7 +91,7 @@ export class RemoteSelectionsDecorator implements PluginValue {
92
91
 
93
92
  constructor(view: EditorView) {
94
93
  this._cursorConverter = view.state.facet(Cursor.converter);
95
- this._provider = view.state.facet(AwarenessProvider);
94
+ this._provider = view.state.facet(awarenessProvider);
96
95
  this._provider.open();
97
96
  this._provider.remoteStateChange.on(this._ctx, () => {
98
97
  view.dispatch({ annotations: [RemoteSelectionChangedAnnotation.of([])] });
@@ -208,7 +207,10 @@ export class RemoteSelectionsDecorator implements PluginValue {
208
207
  }
209
208
 
210
209
  class RemoteCaretWidget extends WidgetType {
211
- constructor(private readonly _name: string, private readonly _color: string) {
210
+ constructor(
211
+ private readonly _name: string,
212
+ private readonly _color: string,
213
+ ) {
212
214
  super();
213
215
  }
214
216
 
@@ -265,39 +267,41 @@ const styles = EditorView.baseTheme({
265
267
  marginRight: '-1px',
266
268
  boxSizing: 'border-box',
267
269
  display: 'inline',
270
+ cursor: 'pointer',
268
271
  },
269
272
  '.cm-collab-selectionCaretDot': {
270
273
  borderRadius: '50%',
271
274
  position: 'absolute',
272
- width: '.4em',
273
- height: '.4em',
274
- top: '-.2em',
275
- left: '-.2em',
275
+ width: '.5em',
276
+ height: '.5em',
277
+ top: '-.25em',
278
+ left: '-.25em',
276
279
  backgroundColor: 'inherit',
277
280
  transition: 'transform .3s ease-in-out',
278
281
  boxSizing: 'border-box',
279
282
  },
280
283
  '.cm-collab-selectionCaret:hover > .cm-collab-selectionCaretDot': {
281
- transformOrigin: 'bottom center',
282
284
  transform: 'scale(0)',
285
+ transformOrigin: 'center',
283
286
  },
284
287
  '.cm-collab-selectionInfo': {
285
288
  position: 'absolute',
286
- top: '-1.05em',
287
- left: '-1px',
289
+ transform: 'translate(-50%, 0)',
290
+ top: '-20px',
291
+ left: 0,
288
292
  fontSize: '.75em',
289
- fontFamily: 'serif',
293
+ fontFamily: 'sans-serif',
290
294
  fontStyle: 'normal',
291
295
  fontWeight: 'normal',
292
296
  lineHeight: 'normal',
293
297
  userSelect: 'none',
294
298
  color: 'white',
295
- paddingLeft: '2px',
296
- paddingRight: '2px',
299
+ padding: '2px',
297
300
  zIndex: 101,
298
301
  transition: 'opacity .3s ease-in-out',
299
302
  backgroundColor: 'inherit',
300
- // these should be separate
303
+ borderRadius: '2px',
304
+ // These should be separate.
301
305
  opacity: 0,
302
306
  transitionDelay: '0s',
303
307
  whiteSpace: 'nowrap',
@@ -3,30 +3,37 @@
3
3
  //
4
4
 
5
5
  import { closeBrackets } from '@codemirror/autocomplete';
6
+ import { history } from '@codemirror/commands';
6
7
  import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';
7
8
  import { type Extension } from '@codemirror/state';
8
9
  import { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';
9
- import { drawSelection, EditorView, placeholder } from '@codemirror/view';
10
+ import { drawSelection, EditorView, highlightActiveLine, placeholder } from '@codemirror/view';
10
11
 
11
- import type { ThemeMode } from '@dxos/react-ui';
12
+ import { type ThemeMode } from '@dxos/react-ui';
13
+ import { isNotFalsy } from '@dxos/util';
14
+
15
+ import { type TextEditorProps } from '../components';
12
16
 
13
17
  export type BasicBundleOptions = {
14
- readonly?: boolean;
15
18
  themeMode?: ThemeMode;
16
- placeholder?: string;
17
- };
19
+ } & Pick<TextEditorProps, 'placeholder' | 'lineWrapping'>;
18
20
 
19
- export const basicBundle = ({ readonly, themeMode, placeholder: _placeholder }: BasicBundleOptions): Extension[] =>
21
+ export const createBasicBundle = ({
22
+ themeMode,
23
+ placeholder: _placeholder,
24
+ lineWrapping = true,
25
+ }: BasicBundleOptions = {}): Extension[] =>
20
26
  [
21
- EditorView.lineWrapping,
27
+ lineWrapping && EditorView.lineWrapping,
22
28
 
23
- // TODO(burdon): Compare with minimalSetup.
24
29
  // https://codemirror.net/docs/ref/#codemirror.minimalSetup
25
30
  bracketMatching(),
26
31
  closeBrackets(),
27
32
  drawSelection(),
33
+ highlightActiveLine(),
34
+ history(),
28
35
  _placeholder && placeholder(_placeholder),
29
36
 
30
- // TODO(burdon): Is this required?
37
+ // https://github.com/codemirror/theme-one-dark
31
38
  themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),
32
- ].filter(Boolean) as Extension[];
39
+ ].filter(isNotFalsy);
@@ -125,7 +125,10 @@ class Blaster {
125
125
 
126
126
  _lastPoint = { x: 0, y: 0 };
127
127
 
128
- constructor(private readonly _node: HTMLElement, private readonly _options: BlastOptions) {
128
+ constructor(
129
+ private readonly _node: HTMLElement,
130
+ private readonly _options: BlastOptions,
131
+ ) {
129
132
  this._effect = this._options.effect === 1 ? new Effect1(_options) : new Effect2(_options);
130
133
  }
131
134