@dxos/react-ui-editor 0.3.11-main.3f845e1 → 0.3.11-main.5a4849d

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 (113) hide show
  1. package/dist/lib/browser/index.mjs +197 -163
  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 +0 -3
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +2 -2
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +3 -0
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/index.d.ts +0 -2
  11. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  12. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
  13. package/dist/types/src/extensions/basic.d.ts.map +1 -0
  14. package/dist/types/src/extensions/blast.d.ts.map +1 -0
  15. package/dist/types/src/extensions/code.d.ts.map +1 -0
  16. package/dist/types/src/{components/TextEditor/extensions → extensions}/comments.d.ts +4 -2
  17. package/dist/types/src/extensions/comments.d.ts.map +1 -0
  18. package/dist/types/src/extensions/hr.d.ts.map +1 -0
  19. package/dist/types/src/extensions/image.d.ts.map +1 -0
  20. package/dist/types/src/{components/TextEditor/extensions → extensions}/index.d.ts +0 -1
  21. package/dist/types/src/extensions/index.d.ts.map +1 -0
  22. package/dist/types/src/{components/TextEditor/extensions → extensions}/link.d.ts +1 -0
  23. package/dist/types/src/extensions/link.d.ts.map +1 -0
  24. package/dist/types/src/extensions/listener.d.ts +10 -0
  25. package/dist/types/src/extensions/listener.d.ts.map +1 -0
  26. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
  27. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
  28. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
  29. package/dist/types/src/extensions/mention.d.ts.map +1 -0
  30. package/dist/types/src/extensions/mermaid.d.ts.map +1 -0
  31. package/dist/types/src/extensions/table.d.ts.map +1 -0
  32. package/dist/types/src/extensions/tasklist.d.ts.map +1 -0
  33. package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
  34. package/dist/types/src/extensions/util.d.ts.map +1 -0
  35. package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -1
  36. package/dist/types/src/hooks/useTextModel.d.ts +1 -1
  37. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  38. package/dist/types/src/index.d.ts +2 -0
  39. package/dist/types/src/index.d.ts.map +1 -1
  40. package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +1 -1
  41. package/dist/types/src/themes/default.d.ts.map +1 -0
  42. package/dist/types/src/themes/index.d.ts.map +1 -0
  43. package/package.json +21 -21
  44. package/src/components/TextEditor/MarkdownEditor.stories.tsx +11 -13
  45. package/src/components/TextEditor/TextEditor.stories.tsx +14 -1
  46. package/src/components/TextEditor/TextEditor.tsx +6 -6
  47. package/src/components/TextEditor/index.ts +0 -3
  48. package/src/{components/TextEditor/extensions → extensions}/code.ts +1 -1
  49. package/src/{components/TextEditor/extensions → extensions}/comments.ts +27 -10
  50. package/src/{components/TextEditor/extensions → extensions}/hr.ts +1 -1
  51. package/src/{components/TextEditor/extensions → extensions}/index.ts +0 -1
  52. package/src/{components/TextEditor/extensions → extensions}/link.ts +66 -10
  53. package/src/extensions/listener.ts +35 -0
  54. package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +1 -1
  55. package/src/{components/TextEditor/extensions → extensions}/typewriter.ts +1 -1
  56. package/src/hooks/automerge/plugin.ts +3 -5
  57. package/src/hooks/useTextModel.ts +5 -4
  58. package/src/index.ts +2 -0
  59. package/src/{components/TextEditor/themes → themes}/default.ts +1 -1
  60. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
  61. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
  62. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
  63. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
  64. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
  65. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +0 -1
  66. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
  67. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
  68. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
  69. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +0 -9
  70. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
  71. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
  72. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
  73. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
  74. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
  75. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +0 -1
  76. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
  77. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
  78. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +0 -12
  79. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +0 -1
  80. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +0 -1
  81. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +0 -1
  82. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
  83. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
  84. package/src/components/TextEditor/extensions/listener.ts +0 -23
  85. package/src/components/TextEditor/extensions/tooltip.ts +0 -61
  86. /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
  87. /package/dist/types/src/{components/TextEditor/extensions → extensions}/basic.d.ts +0 -0
  88. /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
  89. /package/dist/types/src/{components/TextEditor/extensions → extensions}/code.d.ts +0 -0
  90. /package/dist/types/src/{components/TextEditor/extensions → extensions}/hr.d.ts +0 -0
  91. /package/dist/types/src/{components/TextEditor/extensions → extensions}/image.d.ts +0 -0
  92. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/bundle.d.ts +0 -0
  93. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -0
  94. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/index.d.ts +0 -0
  95. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
  96. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mermaid.d.ts +0 -0
  97. /package/dist/types/src/{components/TextEditor/extensions → extensions}/table.d.ts +0 -0
  98. /package/dist/types/src/{components/TextEditor/extensions → extensions}/tasklist.d.ts +0 -0
  99. /package/dist/types/src/{components/TextEditor/extensions → extensions}/typewriter.d.ts +0 -0
  100. /package/dist/types/src/{components/TextEditor/extensions → extensions}/util.d.ts +0 -0
  101. /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
  102. /package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +0 -0
  103. /package/src/{components/TextEditor/extensions → extensions}/basic.ts +0 -0
  104. /package/src/{components/TextEditor/extensions → extensions}/blast.ts +0 -0
  105. /package/src/{components/TextEditor/extensions → extensions}/image.ts +0 -0
  106. /package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +0 -0
  107. /package/src/{components/TextEditor/extensions → extensions}/markdown/index.ts +0 -0
  108. /package/src/{components/TextEditor/extensions → extensions}/mention.ts +0 -0
  109. /package/src/{components/TextEditor/extensions → extensions}/mermaid.ts +0 -0
  110. /package/src/{components/TextEditor/extensions → extensions}/table.ts +0 -0
  111. /package/src/{components/TextEditor/extensions → extensions}/tasklist.ts +0 -0
  112. /package/src/{components/TextEditor/extensions → extensions}/util.ts +0 -0
  113. /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
@@ -5,7 +5,18 @@ import { Doc, YText, YXmlFragment } from "@dxos/text-model";
5
5
  // packages/ui/react-ui-editor/src/components/TextEditor/index.ts
6
6
  import { tags as tags2 } from "@lezer/highlight";
7
7
 
8
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/autocomplete.ts
8
+ // packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
9
+ import { EditorState as EditorState2 } from "@codemirror/state";
10
+ import { EditorView as EditorView12 } from "@codemirror/view";
11
+ import { useFocusableGroup } from "@fluentui/react-tabster";
12
+ import { vim } from "@replit/codemirror-vim";
13
+ import defaultsDeep2 from "lodash.defaultsdeep";
14
+ import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useState as useState2 } from "react";
15
+ import { generateName } from "@dxos/display-name";
16
+ import { useThemeContext } from "@dxos/react-ui";
17
+ import { getColorForValue, inputSurface, mx as mx3 } from "@dxos/react-ui-theme";
18
+
19
+ // packages/ui/react-ui-editor/src/extensions/autocomplete.ts
9
20
  import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
10
21
  import { keymap } from "@codemirror/view";
11
22
  var autocomplete = ({ onSearch }) => {
@@ -38,7 +49,7 @@ var autocomplete = ({ onSearch }) => {
38
49
  ];
39
50
  };
40
51
 
41
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/basic.ts
52
+ // packages/ui/react-ui-editor/src/extensions/basic.ts
42
53
  import { closeBrackets } from "@codemirror/autocomplete";
43
54
  import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language";
44
55
  import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
@@ -55,11 +66,11 @@ var basicBundle = ({ readonly, themeMode, placeholder: _placeholder }) => [
55
66
  themeMode === "dark" ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle)
56
67
  ].filter(Boolean);
57
68
 
58
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/blast.ts
69
+ // packages/ui/react-ui-editor/src/extensions/blast.ts
59
70
  import { EditorView as EditorView2, keymap as keymap2 } from "@codemirror/view";
60
71
  import defaultsDeep from "lodash.defaultsdeep";
61
72
  import { invariant } from "@dxos/invariant";
62
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/extensions/blast.ts";
73
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
63
74
  var defaultOptions = {
64
75
  effect: 2,
65
76
  maxParticles: 200,
@@ -365,7 +376,7 @@ var random = (min, max) => {
365
376
  return min + ~~(Math.random() * (max - min + 1));
366
377
  };
367
378
 
368
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/code.ts
379
+ // packages/ui/react-ui-editor/src/extensions/code.ts
369
380
  import { ViewPlugin, EditorView as EditorView3, Decoration } from "@codemirror/view";
370
381
  import get from "lodash.get";
371
382
  import { mx as mx2 } from "@dxos/react-ui-theme";
@@ -416,7 +427,7 @@ var blockquote = mx("pl-1 mr-1 border-is-4 border-primary-500/70 dark:border-pri
416
427
  import { tailwindConfig } from "@dxos/react-ui-theme";
417
428
  var tokens = tailwindConfig({}).theme;
418
429
 
419
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/code.ts
430
+ // packages/ui/react-ui-editor/src/extensions/code.ts
420
431
  var CODE_REGEX = /```[\s\S]*?```/gs;
421
432
  var styles = EditorView3.baseTheme({
422
433
  "& .cm-codeblock": {
@@ -487,18 +498,19 @@ var code2 = () => {
487
498
  ];
488
499
  };
489
500
 
490
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/comments.ts
501
+ // packages/ui/react-ui-editor/src/extensions/comments.ts
491
502
  import { StateEffect as StateEffect2, StateField as StateField3 } from "@codemirror/state";
492
503
  import { hoverTooltip, keymap as keymap3, Decoration as Decoration2, EditorView as EditorView4, MatchDecorator, ViewPlugin as ViewPlugin3, WidgetType } from "@codemirror/view";
504
+ import get3 from "lodash.get";
493
505
  import sortBy from "lodash.sortby";
494
506
  import { debounce } from "@dxos/async";
495
507
  import { invariant as invariant3 } from "@dxos/invariant";
496
508
  import { log as log3 } from "@dxos/log";
497
509
  import { nonNullable } from "@dxos/util";
498
510
 
499
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/util.ts
511
+ // packages/ui/react-ui-editor/src/extensions/util.ts
500
512
  import { log } from "@dxos/log";
501
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/extensions/util.ts";
513
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/util.ts";
502
514
  var callbackWrapper = (fn) => (...args) => {
503
515
  try {
504
516
  return fn(...args);
@@ -743,15 +755,15 @@ var automergePlugin = (handle, path) => {
743
755
  });
744
756
  const semaphore = new PatchSemaphore(stateField);
745
757
  const viewPlugin = ViewPlugin2.fromClass(class AutomergeCodemirrorViewPlugin {
746
- constructor(view) {
758
+ constructor(_view) {
759
+ this._view = _view;
747
760
  this._handleChange = () => {
748
761
  this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
749
762
  };
750
- this._view = view;
751
763
  handle.addListener("change", this._handleChange);
752
764
  }
753
765
  update(update4) {
754
- if (update4.transactions.length > 0 && update4.transactions.some((t) => !isReconcileTx(t))) {
766
+ if (update4.transactions.length > 0 && update4.transactions.some((tr) => !isReconcileTx(tr))) {
755
767
  queueMicrotask(() => {
756
768
  this._view.state.facet(semaphoreFacet).reconcile(handle, this._view);
757
769
  });
@@ -966,13 +978,22 @@ var createYjsModel = ({ identity, space, text }) => {
966
978
  ].join(":");
967
979
  },
968
980
  getRangeFromCursor: (cursor) => {
981
+ invariant2(text.doc, void 0, {
982
+ F: __dxlog_file4,
983
+ L: 113,
984
+ S: void 0,
985
+ A: [
986
+ "text.doc",
987
+ ""
988
+ ]
989
+ });
969
990
  const parts = cursor.split(":");
970
991
  const from = Y.createAbsolutePositionFromRelativePosition(Y.decodeRelativePosition(stringToArray(parts[0])), text.doc);
971
992
  const to = Y.createAbsolutePositionFromRelativePosition(Y.decodeRelativePosition(stringToArray(parts[1])), text.doc);
972
- return {
993
+ return from && to ? {
973
994
  from: from.index,
974
995
  to: to.index
975
- };
996
+ } : void 0;
976
997
  },
977
998
  extension: [
978
999
  yCollab(text.content, provider?.awareness),
@@ -1008,8 +1029,8 @@ var createAutomergeModel = ({ identity, text }) => {
1008
1029
  return model;
1009
1030
  };
1010
1031
 
1011
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/comments.ts
1012
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/extensions/comments.ts";
1032
+ // packages/ui/react-ui-editor/src/extensions/comments.ts
1033
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
1013
1034
  var styles2 = EditorView4.baseTheme({
1014
1035
  "& .cm-bookmark": {
1015
1036
  cursor: "pointer",
@@ -1021,10 +1042,10 @@ var styles2 = EditorView4.baseTheme({
1021
1042
  backgroundColor: "orange"
1022
1043
  },
1023
1044
  "& .cm-comment": {
1024
- backgroundColor: "yellow"
1045
+ backgroundColor: get3(tokens, "extend.colors.yellow.50")
1025
1046
  },
1026
1047
  "& .cm-comment-active": {
1027
- backgroundColor: "orange"
1048
+ backgroundColor: get3(tokens, "extend.colors.yellow.100")
1028
1049
  }
1029
1050
  });
1030
1051
  var marks = {
@@ -1035,6 +1056,21 @@ var marks = {
1035
1056
  class: "cm-comment-active"
1036
1057
  })
1037
1058
  };
1059
+ var setFocus = (view, thread) => {
1060
+ const range = view.state.field(commentsStateField).ranges.find((range2) => range2.id === thread);
1061
+ if (!range) {
1062
+ return;
1063
+ }
1064
+ view.dispatch({
1065
+ effects: setSelection.of({
1066
+ active: thread
1067
+ }),
1068
+ selection: {
1069
+ anchor: range.from
1070
+ },
1071
+ scrollIntoView: true
1072
+ });
1073
+ };
1038
1074
  var setCommentRange = StateEffect2.define();
1039
1075
  var setSelection = StateEffect2.define();
1040
1076
  var setCommentState = StateEffect2.define();
@@ -1054,11 +1090,11 @@ var commentsStateField = StateField3.define({
1054
1090
  const { model, comments: comments2 } = effect.value;
1055
1091
  const ranges = comments2.map((comment) => {
1056
1092
  const range = model.getRangeFromCursor(comment.cursor);
1057
- return {
1093
+ return range && {
1058
1094
  ...comment,
1059
1095
  ...range
1060
1096
  };
1061
- });
1097
+ }).filter(nonNullable);
1062
1098
  return {
1063
1099
  ...value,
1064
1100
  ranges
@@ -1099,7 +1135,7 @@ var BookmarkWidget = class extends WidgetType {
1099
1135
  this._handleClick = _handleClick;
1100
1136
  invariant3(this._id, void 0, {
1101
1137
  F: __dxlog_file5,
1102
- L: 150,
1138
+ L: 167,
1103
1139
  S: this,
1104
1140
  A: [
1105
1141
  "this._id",
@@ -1125,7 +1161,7 @@ var comments = (options = {}) => {
1125
1161
  const createCommentThread = (view) => {
1126
1162
  invariant3(options.onCreate, void 0, {
1127
1163
  F: __dxlog_file5,
1128
- L: 204,
1164
+ L: 221,
1129
1165
  S: void 0,
1130
1166
  A: [
1131
1167
  "options.onCreate",
@@ -1207,7 +1243,7 @@ var comments = (options = {}) => {
1207
1243
  options.onCreate ? keymap3.of([
1208
1244
  {
1209
1245
  key: options?.key ?? "meta-'",
1210
- run: createCommentThread
1246
+ run: callbackWrapper(createCommentThread)
1211
1247
  }
1212
1248
  ]) : [],
1213
1249
  //
@@ -1251,7 +1287,7 @@ var comments = (options = {}) => {
1251
1287
  changes.iterChanges((from, to, from2, to2) => {
1252
1288
  invariant3(model, void 0, {
1253
1289
  F: __dxlog_file5,
1254
- L: 333,
1290
+ L: 350,
1255
1291
  S: void 0,
1256
1292
  A: [
1257
1293
  "model",
@@ -1261,12 +1297,12 @@ var comments = (options = {}) => {
1261
1297
  ranges.forEach((range) => {
1262
1298
  if (from2 === to2) {
1263
1299
  const newRange = model.getRangeFromCursor(range.cursor);
1264
- if (newRange.to - newRange.from === 0) {
1300
+ if (!newRange || newRange.to - newRange.from === 0) {
1265
1301
  log3.info("deleted comment", {
1266
1302
  thread: range.id
1267
1303
  }, {
1268
1304
  F: __dxlog_file5,
1269
- L: 339,
1305
+ L: 356,
1270
1306
  S: void 0,
1271
1307
  C: (f, a) => f(...a)
1272
1308
  });
@@ -1323,14 +1359,14 @@ var comments = (options = {}) => {
1323
1359
  ];
1324
1360
  };
1325
1361
 
1326
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/hr.ts
1362
+ // packages/ui/react-ui-editor/src/extensions/hr.ts
1327
1363
  import { Decoration as Decoration3, EditorView as EditorView5, MatchDecorator as MatchDecorator2, ViewPlugin as ViewPlugin4, WidgetType as WidgetType2 } from "@codemirror/view";
1328
- import get3 from "lodash.get";
1364
+ import get4 from "lodash.get";
1329
1365
  var styles3 = EditorView5.baseTheme({
1330
1366
  "& .cm-hr": {
1331
1367
  // TODO(burdon): ???
1332
1368
  // Note that block-level decorations should not have vertical margins,
1333
- borderBottom: `1px solid ${get3(tokens, "extend.colors.neutral.200")}`
1369
+ borderBottom: `1px solid ${get4(tokens, "extend.colors.neutral.200")}`
1334
1370
  }
1335
1371
  });
1336
1372
  var HorizontalRuleWidget = class extends WidgetType2 {
@@ -1371,7 +1407,7 @@ var hr = () => [
1371
1407
  })
1372
1408
  ];
1373
1409
 
1374
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/image.ts
1410
+ // packages/ui/react-ui-editor/src/extensions/image.ts
1375
1411
  import { syntaxTree } from "@codemirror/language";
1376
1412
  import { RangeSetBuilder, StateField as StateField4 } from "@codemirror/state";
1377
1413
  import { Decoration as Decoration4, EditorView as EditorView6, WidgetType as WidgetType3 } from "@codemirror/view";
@@ -1419,16 +1455,67 @@ var ImageWidget = class extends WidgetType3 {
1419
1455
  }
1420
1456
  };
1421
1457
 
1422
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/link.ts
1458
+ // packages/ui/react-ui-editor/src/extensions/link.ts
1423
1459
  import { syntaxTree as syntaxTree2 } from "@codemirror/language";
1424
1460
  import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField5 } from "@codemirror/state";
1425
- import { Decoration as Decoration5, EditorView as EditorView7, WidgetType as WidgetType4 } from "@codemirror/view";
1461
+ import { Decoration as Decoration5, EditorView as EditorView7, WidgetType as WidgetType4, hoverTooltip as hoverTooltip2 } from "@codemirror/view";
1462
+ import { tooltipContent } from "@dxos/react-ui-theme";
1463
+ var markdownLinkRegexp = /\[([^\]]+)]\(([^)]+)\)/;
1426
1464
  var link = (options = {}) => {
1427
- return StateField5.define({
1428
- create: (state) => update2(state, options),
1429
- update: (_, tr) => update2(tr.state, options),
1430
- provide: (field) => EditorView7.decorations.from(field)
1431
- });
1465
+ const extensions = [
1466
+ StateField5.define({
1467
+ create: (state) => update2(state, options),
1468
+ update: (_, tr) => update2(tr.state, options),
1469
+ provide: (field) => EditorView7.decorations.from(field)
1470
+ })
1471
+ ];
1472
+ if (options.onHover) {
1473
+ extensions.push(
1474
+ // https://codemirror.net/examples/tooltip
1475
+ // https://codemirror.net/docs/ref/#view.hoverTooltip
1476
+ // https://github.com/codemirror/view/blob/main/src/tooltip.ts
1477
+ hoverTooltip2((view, pos) => {
1478
+ const { from, text } = view.state.doc.lineAt(pos);
1479
+ const p = pos - from;
1480
+ let idx = 0;
1481
+ let match;
1482
+ do {
1483
+ match = text.substring(idx).match(markdownLinkRegexp);
1484
+ if (!match) {
1485
+ match = void 0;
1486
+ break;
1487
+ }
1488
+ idx = text.indexOf(match[0]);
1489
+ if (p >= idx && p < idx + match[0].length) {
1490
+ break;
1491
+ }
1492
+ idx += match[0].length;
1493
+ } while (true);
1494
+ if (!match) {
1495
+ return null;
1496
+ }
1497
+ const [, , url] = match ?? [];
1498
+ return {
1499
+ pos: idx + from,
1500
+ end: idx + from + match[0].length,
1501
+ above: true,
1502
+ create: () => {
1503
+ const el = document.createElement("div");
1504
+ el.className = tooltipContent({}, "pli-2 plb-1");
1505
+ options.onHover(el, url);
1506
+ return {
1507
+ dom: el,
1508
+ offset: {
1509
+ x: 0,
1510
+ y: 4
1511
+ }
1512
+ };
1513
+ }
1514
+ };
1515
+ })
1516
+ );
1517
+ }
1518
+ return extensions;
1432
1519
  };
1433
1520
  var LinkButton = class extends WidgetType4 {
1434
1521
  constructor(_pos, _url, _onAttach) {
@@ -1447,14 +1534,13 @@ var LinkButton = class extends WidgetType4 {
1447
1534
  }
1448
1535
  };
1449
1536
  var LinkText = class extends WidgetType4 {
1450
- constructor(_pos, _text, _url) {
1537
+ constructor(_text, _url) {
1451
1538
  super();
1452
- this._pos = _pos;
1453
1539
  this._text = _text;
1454
1540
  this._url = _url;
1455
1541
  }
1456
1542
  eq(other) {
1457
- return this._pos === other._pos && this._url === other._url;
1543
+ return this._url === other._url;
1458
1544
  }
1459
1545
  toDOM(view) {
1460
1546
  const link2 = document.createElement("a");
@@ -1468,7 +1554,7 @@ var LinkText = class extends WidgetType4 {
1468
1554
  link2.onclick = () => {
1469
1555
  view.dispatch({
1470
1556
  selection: {
1471
- anchor: this._pos
1557
+ anchor: view.posAtDOM(link2)
1472
1558
  }
1473
1559
  });
1474
1560
  };
@@ -1491,7 +1577,7 @@ var update2 = (state, options) => {
1491
1577
  }
1492
1578
  if (state.readOnly || cursor < node.from || cursor > node.to) {
1493
1579
  builder.add(node.from, node.to, Decoration5.replace({
1494
- widget: new LinkText(node.from, text, options.link ? url : void 0)
1580
+ widget: new LinkText(text, options.link ? url : void 0)
1495
1581
  }));
1496
1582
  }
1497
1583
  if (options.onRender) {
@@ -1506,21 +1592,21 @@ var update2 = (state, options) => {
1506
1592
  return builder.finish();
1507
1593
  };
1508
1594
 
1509
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/listener.ts
1510
- import { StateField as StateField6 } from "@codemirror/state";
1511
- var listener = ({ onChange }) => {
1512
- return StateField6.define({
1513
- create: () => null,
1514
- update: (_value, transaction) => {
1515
- if (transaction.docChanged && onChange) {
1516
- onChange(transaction.newDoc.toString());
1517
- }
1518
- return null;
1519
- }
1520
- });
1595
+ // packages/ui/react-ui-editor/src/extensions/listener.ts
1596
+ import { EditorView as EditorView8 } from "@codemirror/view";
1597
+ var listener = ({ onFocus, onChange }) => {
1598
+ const extensions = [];
1599
+ onFocus && extensions.push(EditorView8.focusChangeEffect.of((_, focused) => {
1600
+ onFocus(focused);
1601
+ return null;
1602
+ }));
1603
+ onChange && extensions.push(EditorView8.updateListener.of((update4) => {
1604
+ onChange(update4.state.doc.toString());
1605
+ }));
1606
+ return extensions;
1521
1607
  };
1522
1608
 
1523
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/markdown/bundle.ts
1609
+ // packages/ui/react-ui-editor/src/extensions/markdown/bundle.ts
1524
1610
  import { closeBrackets as closeBrackets2, closeBracketsKeymap } from "@codemirror/autocomplete";
1525
1611
  import { history, historyKeymap, indentWithTab, standardKeymap } from "@codemirror/commands";
1526
1612
  import { markdownLanguage as markdownLanguage2, markdown } from "@codemirror/lang-markdown";
@@ -1529,14 +1615,14 @@ import { languages } from "@codemirror/language-data";
1529
1615
  import { searchKeymap } from "@codemirror/search";
1530
1616
  import { EditorState } from "@codemirror/state";
1531
1617
  import { oneDarkHighlightStyle as oneDarkHighlightStyle2 } from "@codemirror/theme-one-dark";
1532
- import { crosshairCursor, drawSelection as drawSelection2, dropCursor, EditorView as EditorView8, highlightActiveLine, keymap as keymap4, placeholder as placeholder2 } from "@codemirror/view";
1618
+ import { crosshairCursor, drawSelection as drawSelection2, dropCursor, EditorView as EditorView9, highlightActiveLine, keymap as keymap4, placeholder as placeholder2 } from "@codemirror/view";
1533
1619
 
1534
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/markdown/highlight.ts
1620
+ // packages/ui/react-ui-editor/src/extensions/markdown/highlight.ts
1535
1621
  import { markdownLanguage } from "@codemirror/lang-markdown";
1536
1622
  import { HighlightStyle } from "@codemirror/language";
1537
1623
  import { tags, styleTags, Tag } from "@lezer/highlight";
1538
1624
  import { Table } from "@lezer/markdown";
1539
- import get4 from "lodash.get";
1625
+ import get5 from "lodash.get";
1540
1626
  var markdownTags = {
1541
1627
  Blockquote: Tag.define(),
1542
1628
  CodeMark: Tag.define(),
@@ -1722,17 +1808,17 @@ var markdownHighlightStyle = (readonly) => {
1722
1808
  ], {
1723
1809
  scope: markdownLanguage,
1724
1810
  all: {
1725
- fontFamily: get4(tokens, "fontFamily.body", []).join(",")
1811
+ fontFamily: get5(tokens, "fontFamily.body", []).join(",")
1726
1812
  }
1727
1813
  });
1728
1814
  };
1729
1815
 
1730
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/markdown/bundle.ts
1816
+ // packages/ui/react-ui-editor/src/extensions/markdown/bundle.ts
1731
1817
  var markdownBundle = ({ readonly, themeMode, placeholder: _placeholder }) => {
1732
1818
  return [
1733
1819
  EditorState.allowMultipleSelections.of(true),
1734
1820
  EditorState.tabSize.of(2),
1735
- EditorView8.lineWrapping,
1821
+ EditorView9.lineWrapping,
1736
1822
  customKeymap(),
1737
1823
  bracketMatching2(),
1738
1824
  closeBrackets2(),
@@ -1780,7 +1866,7 @@ var customKeymap = () => keymap4.of([
1780
1866
  ...searchKeymap
1781
1867
  ]);
1782
1868
 
1783
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/mention.ts
1869
+ // packages/ui/react-ui-editor/src/extensions/mention.ts
1784
1870
  import { autocompletion as autocompletion2 } from "@codemirror/autocomplete";
1785
1871
  var mention = ({ onSearch }) => {
1786
1872
  return autocompletion2({
@@ -1803,20 +1889,20 @@ var mention = ({ onSearch }) => {
1803
1889
  });
1804
1890
  };
1805
1891
 
1806
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/mermaid.ts
1892
+ // packages/ui/react-ui-editor/src/extensions/mermaid.ts
1807
1893
  var mermaid = () => {
1808
1894
  return [];
1809
1895
  };
1810
1896
 
1811
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/table.ts
1897
+ // packages/ui/react-ui-editor/src/extensions/table.ts
1812
1898
  import { syntaxTree as syntaxTree3 } from "@codemirror/language";
1813
- import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField7 } from "@codemirror/state";
1814
- import { Decoration as Decoration6, EditorView as EditorView9, WidgetType as WidgetType5 } from "@codemirror/view";
1899
+ import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField6 } from "@codemirror/state";
1900
+ import { Decoration as Decoration6, EditorView as EditorView10, WidgetType as WidgetType5 } from "@codemirror/view";
1815
1901
  var table = (options = {}) => {
1816
- return StateField7.define({
1902
+ return StateField6.define({
1817
1903
  create: (state) => update3(state, options),
1818
1904
  update: (_, tr) => update3(tr.state, options),
1819
- provide: (field) => EditorView9.decorations.from(field)
1905
+ provide: (field) => EditorView10.decorations.from(field)
1820
1906
  });
1821
1907
  };
1822
1908
  var update3 = (state, options) => {
@@ -1904,9 +1990,9 @@ var TableWidget = class extends WidgetType5 {
1904
1990
  }
1905
1991
  };
1906
1992
 
1907
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/tasklist.ts
1908
- import { EditorView as EditorView10, Decoration as Decoration7, WidgetType as WidgetType6, MatchDecorator as MatchDecorator3, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
1909
- var styles4 = EditorView10.baseTheme({
1993
+ // packages/ui/react-ui-editor/src/extensions/tasklist.ts
1994
+ import { EditorView as EditorView11, Decoration as Decoration7, WidgetType as WidgetType6, MatchDecorator as MatchDecorator3, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
1995
+ var styles4 = EditorView11.baseTheme({
1910
1996
  "& .cm-task-item": {
1911
1997
  paddingLeft: "4px",
1912
1998
  paddingRight: "8px"
@@ -1979,7 +2065,7 @@ var tasklist = (options = {}) => {
1979
2065
  }
1980
2066
  }, {
1981
2067
  decorations: (value) => value.tasks,
1982
- provide: (plugin) => EditorView10.atomicRanges.of((view) => {
2068
+ provide: (plugin) => EditorView11.atomicRanges.of((view) => {
1983
2069
  return view.plugin(plugin)?.tasks || Decoration7.none;
1984
2070
  })
1985
2071
  });
@@ -1989,51 +2075,7 @@ var tasklist = (options = {}) => {
1989
2075
  ];
1990
2076
  };
1991
2077
 
1992
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/tooltip.ts
1993
- import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
1994
- import { tooltipContent } from "@dxos/react-ui-theme";
1995
- var markdownLinkRegexp = /\[([^\]]+)]\(([^)]+)\)/;
1996
- var tooltip = ({ onHover, regexp = markdownLinkRegexp }) => hoverTooltip2((view, pos) => {
1997
- const { from, text } = view.state.doc.lineAt(pos);
1998
- const p = pos - from;
1999
- let idx = 0;
2000
- let match;
2001
- do {
2002
- match = text.substring(idx).match(regexp);
2003
- if (!match) {
2004
- match = void 0;
2005
- break;
2006
- }
2007
- idx = text.indexOf(match[0]);
2008
- if (p >= idx && p < idx + match[0].length) {
2009
- break;
2010
- }
2011
- idx += match[0].length;
2012
- } while (true);
2013
- if (!match) {
2014
- return null;
2015
- }
2016
- const [, , url] = match ?? [];
2017
- return {
2018
- pos: idx + from,
2019
- end: idx + from + match[0].length,
2020
- above: true,
2021
- create: () => {
2022
- const el = document.createElement("div");
2023
- el.className = tooltipContent({}, "pli-2 plb-1");
2024
- onHover(el, url);
2025
- return {
2026
- dom: el,
2027
- offset: {
2028
- x: 0,
2029
- y: 4
2030
- }
2031
- };
2032
- }
2033
- };
2034
- });
2035
-
2036
- // packages/ui/react-ui-editor/src/components/TextEditor/extensions/typewriter.ts
2078
+ // packages/ui/react-ui-editor/src/extensions/typewriter.ts
2037
2079
  import { keymap as keymap5 } from "@codemirror/view";
2038
2080
  var defaultItems = [
2039
2081
  "hello world!",
@@ -2090,8 +2132,8 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
2090
2132
  ];
2091
2133
  };
2092
2134
 
2093
- // packages/ui/react-ui-editor/src/components/TextEditor/themes/default.ts
2094
- import get5 from "lodash.get";
2135
+ // packages/ui/react-ui-editor/src/themes/default.ts
2136
+ import get6 from "lodash.get";
2095
2137
  var defaultTheme = {
2096
2138
  //
2097
2139
  // Main layout:
@@ -2122,7 +2164,7 @@ var defaultTheme = {
2122
2164
  },
2123
2165
  "& .cm-scroller": {
2124
2166
  overflow: "visible",
2125
- fontFamily: get5(tokens, "fontFamily.mono", []).join(",")
2167
+ fontFamily: get6(tokens, "fontFamily.mono", []).join(",")
2126
2168
  },
2127
2169
  "& .cm-content": {
2128
2170
  padding: 0,
@@ -2130,11 +2172,11 @@ var defaultTheme = {
2130
2172
  fontSize: "16px"
2131
2173
  },
2132
2174
  "&light .cm-content": {
2133
- color: get5(tokens, "extend.colors.neutral.900", "black"),
2175
+ color: get6(tokens, "extend.colors.neutral.900", "black"),
2134
2176
  caretColor: "black"
2135
2177
  },
2136
2178
  "&dark .cm-content": {
2137
- color: get5(tokens, "extend.colors.neutral.100", "white"),
2179
+ color: get6(tokens, "extend.colors.neutral.100", "white"),
2138
2180
  caretColor: "white"
2139
2181
  },
2140
2182
  //
@@ -2162,25 +2204,25 @@ var defaultTheme = {
2162
2204
  // Selection
2163
2205
  //
2164
2206
  "&light .cm-selectionBackground": {
2165
- background: get5(tokens, "extend.colors.primary.100")
2207
+ background: get6(tokens, "extend.colors.primary.100")
2166
2208
  },
2167
2209
  "&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground": {
2168
- background: get5(tokens, "extend.colors.primary.200")
2210
+ background: get6(tokens, "extend.colors.primary.200")
2169
2211
  },
2170
2212
  "&dark .cm-selectionBackground": {
2171
- background: get5(tokens, "extend.colors.primary.700")
2213
+ background: get6(tokens, "extend.colors.primary.700")
2172
2214
  },
2173
2215
  "&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground": {
2174
- background: get5(tokens, "extend.colors.primary.600")
2216
+ background: get6(tokens, "extend.colors.primary.600")
2175
2217
  },
2176
2218
  //
2177
2219
  // Search
2178
2220
  //
2179
2221
  "&light .cm-searchMatch": {
2180
- backgroundColor: get5(tokens, "extend.colors.yellow.100")
2222
+ backgroundColor: get6(tokens, "extend.colors.yellow.100")
2181
2223
  },
2182
2224
  "&dark .cm-searchMatch": {
2183
- backgroundColor: get5(tokens, "extend.colors.yellow.700")
2225
+ backgroundColor: get6(tokens, "extend.colors.yellow.700")
2184
2226
  },
2185
2227
  //
2186
2228
  // collaboration
@@ -2213,12 +2255,12 @@ var defaultTheme = {
2213
2255
  // link
2214
2256
  //
2215
2257
  "& .cm-link": {
2216
- color: get5(tokens, "extend.colors.primary.500"),
2258
+ color: get6(tokens, "extend.colors.primary.500"),
2217
2259
  textDecorationLine: "underline",
2218
2260
  textDecorationThickness: "1px",
2219
2261
  textUnderlineOffset: "2px",
2220
2262
  borderRadius: ".125rem",
2221
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2263
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2222
2264
  },
2223
2265
  //
2224
2266
  // tooltip
@@ -2240,7 +2282,7 @@ var defaultTheme = {
2240
2282
  display: "none"
2241
2283
  },
2242
2284
  "& .cm-completionLabel": {
2243
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2285
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2244
2286
  },
2245
2287
  "& .cm-completionMatchedText": {
2246
2288
  textDecoration: "none"
@@ -2256,15 +2298,15 @@ var defaultTheme = {
2256
2298
  // table
2257
2299
  //
2258
2300
  "& .cm-table *": {
2259
- fontFamily: `${get5(tokens, "fontFamily.mono", []).join(",")} !important`,
2301
+ fontFamily: `${get6(tokens, "fontFamily.mono", []).join(",")} !important`,
2260
2302
  textDecoration: "none !important"
2261
2303
  },
2262
2304
  "& .cm-table-head": {
2263
2305
  padding: "2px 16px 2px 0px",
2264
- borderBottom: `1px solid ${get5(tokens, "extend.colors.neutral.500")}`,
2306
+ borderBottom: `1px solid ${get6(tokens, "extend.colors.neutral.500")}`,
2265
2307
  fontWeight: 100,
2266
2308
  textAlign: "left",
2267
- color: get5(tokens, "extend.colors.neutral.500")
2309
+ color: get6(tokens, "extend.colors.neutral.500")
2268
2310
  },
2269
2311
  "& .cm-table-cell": {
2270
2312
  padding: "2px 16px 2px 0px"
@@ -2279,8 +2321,8 @@ var defaultTheme = {
2279
2321
  // font size
2280
2322
  // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.
2281
2323
  //
2282
- ...Object.keys(get5(tokens, "extend.fontSize", {})).reduce((acc, fontSize) => {
2283
- const height = get5(tokens, [
2324
+ ...Object.keys(get6(tokens, "extend.fontSize", {})).reduce((acc, fontSize) => {
2325
+ const height = get6(tokens, [
2284
2326
  "extend",
2285
2327
  "fontSize",
2286
2328
  fontSize,
@@ -2315,23 +2357,23 @@ var defaultTheme = {
2315
2357
  * </div
2316
2358
  */
2317
2359
  "& .cm-panels": {
2318
- border: `1px solid ${get5(tokens, "extend.colors.neutral.200")}`
2360
+ border: `1px solid ${get6(tokens, "extend.colors.neutral.200")}`
2319
2361
  },
2320
2362
  "& .cm-panel": {
2321
- background: get5(tokens, "extend.colors.neutral.50"),
2322
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2363
+ background: get6(tokens, "extend.colors.neutral.50"),
2364
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2323
2365
  },
2324
2366
  "& .cm-button": {
2325
2367
  margin: "4px",
2326
- fontFamily: get5(tokens, "fontFamily.body", []).join(","),
2327
- background: get5(tokens, "extend.colors.neutral.100"),
2368
+ fontFamily: get6(tokens, "fontFamily.body", []).join(","),
2369
+ background: get6(tokens, "extend.colors.neutral.100"),
2328
2370
  backgroundImage: "none",
2329
2371
  border: "none",
2330
2372
  "&:hover": {
2331
- background: get5(tokens, "extend.colors.neutral.200")
2373
+ background: get6(tokens, "extend.colors.neutral.200")
2332
2374
  },
2333
2375
  "&:active": {
2334
- background: get5(tokens, "extend.colors.neutral.300"),
2376
+ background: get6(tokens, "extend.colors.neutral.300"),
2335
2377
  backgroundImage: "none"
2336
2378
  }
2337
2379
  },
@@ -2341,42 +2383,33 @@ var defaultTheme = {
2341
2383
  };
2342
2384
  var textTheme = {
2343
2385
  "& .cm-scroller": {
2344
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2386
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2345
2387
  },
2346
2388
  "& .cm-placeholder": {
2347
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2389
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2348
2390
  }
2349
2391
  };
2350
2392
  var markdownTheme = {
2351
2393
  // NOTE: Must leave base font family as is (i.e., monospace) due to fenced code blocks.
2352
2394
  "& .cm-placeholder": {
2353
- fontFamily: get5(tokens, "fontFamily.body", []).join(",")
2395
+ fontFamily: get6(tokens, "fontFamily.body", []).join(",")
2354
2396
  }
2355
2397
  };
2356
2398
  var codeTheme = {
2357
2399
  "& .cm-scroller": {
2358
- fontFamily: get5(tokens, "fontFamily.mono", []).join(",")
2400
+ fontFamily: get6(tokens, "fontFamily.mono", []).join(",")
2359
2401
  },
2360
2402
  "& .cm-placeholder": {
2361
- fontFamily: get5(tokens, "fontFamily.mono", []).join(",")
2403
+ fontFamily: get6(tokens, "fontFamily.mono", []).join(",")
2362
2404
  }
2363
2405
  };
2364
2406
 
2365
2407
  // packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
2366
- import { EditorState as EditorState2 } from "@codemirror/state";
2367
- import { EditorView as EditorView11 } from "@codemirror/view";
2368
- import { useFocusableGroup } from "@fluentui/react-tabster";
2369
- import { vim } from "@replit/codemirror-vim";
2370
- import defaultsDeep2 from "lodash.defaultsdeep";
2371
- import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useState as useState2 } from "react";
2372
- import { generateName } from "@dxos/display-name";
2373
- import { useThemeContext } from "@dxos/react-ui";
2374
- import { getColorForValue, inputSurface, mx as mx3 } from "@dxos/react-ui-theme";
2375
2408
  var EditorModes = [
2376
2409
  "default",
2377
2410
  "vim"
2378
2411
  ];
2379
- var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, comments: comments2, readonly, editorMode, extensions = [], slots = defaultSlots }, forwardedRef) => {
2412
+ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, comments: comments2, extensions = [], editorMode, slots = defaultSlots }, forwardedRef) => {
2380
2413
  const { themeMode } = useThemeContext();
2381
2414
  const tabsterDOMAttribute = useFocusableGroup({
2382
2415
  tabBehavior: "limited"
@@ -2438,9 +2471,9 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, comments: comments2, r
2438
2471
  editorMode === "vim" && vim(),
2439
2472
  // Theme.
2440
2473
  // TODO(burdon): Make theme configurable.
2441
- EditorView11.baseTheme(defaultTheme),
2442
- EditorView11.theme(slots?.editor?.theme ?? {}),
2443
- EditorView11.darkTheme.of(themeMode === "dark"),
2474
+ EditorView12.baseTheme(defaultTheme),
2475
+ EditorView12.theme(slots?.editor?.theme ?? {}),
2476
+ EditorView12.darkTheme.of(themeMode === "dark"),
2444
2477
  // Storage and replication.
2445
2478
  model.extension,
2446
2479
  // Custom.
@@ -2450,7 +2483,7 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, comments: comments2, r
2450
2483
  view?.destroy();
2451
2484
  setEditor({
2452
2485
  state: state2,
2453
- view: new EditorView11({
2486
+ view: new EditorView12({
2454
2487
  state: state2,
2455
2488
  parent: root
2456
2489
  })
@@ -2579,11 +2612,12 @@ export {
2579
2612
  mermaid,
2580
2613
  modelState,
2581
2614
  setCommentRange,
2615
+ setFocus,
2616
+ setSelection,
2582
2617
  table,
2583
2618
  tags2 as tags,
2584
2619
  tasklist,
2585
2620
  textTheme,
2586
- tooltip,
2587
2621
  typewriter,
2588
2622
  useTextModel
2589
2623
  };