@dxos/react-ui-editor 0.4.4-main.2a45fa8 → 0.4.4-main.3a00f69

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.
@@ -31,7 +31,9 @@ var defaultCursorConverter = {
31
31
  var Cursor = class _Cursor {
32
32
  static {
33
33
  this.converter = Facet.define({
34
- combine: (providers) => providers[0] ?? defaultCursorConverter
34
+ combine: (providers) => {
35
+ return providers[0] ?? defaultCursorConverter;
36
+ }
35
37
  });
36
38
  }
37
39
  static {
@@ -130,7 +132,7 @@ var autocomplete = ({ onSearch }) => {
130
132
  // https://codemirror.net/examples/autocompletion
131
133
  // https://codemirror.net/docs/ref/#autocomplete.autocompletion
132
134
  autocompletion({
133
- activateOnTyping: true,
135
+ activateOnTyping: false,
134
136
  // closeOnBlur: false,
135
137
  // defaultKeymap: false,
136
138
  // TODO(burdon): Styles/fragments.
@@ -172,7 +174,11 @@ var cursorConverter = (handle, path) => ({
172
174
  if (typeof value === "string" && value.length <= pos) {
173
175
  return "end";
174
176
  }
175
- return A.getCursor(doc, path.slice(), pos);
177
+ try {
178
+ return A.getCursor(doc, path.slice(), pos);
179
+ } catch (err) {
180
+ return "";
181
+ }
176
182
  },
177
183
  fromCursor: (cursor) => {
178
184
  if (cursor === "") {
@@ -190,7 +196,11 @@ var cursorConverter = (handle, path) => ({
190
196
  return 0;
191
197
  }
192
198
  }
193
- return A.getCursorPosition(doc, path.slice(), cursor);
199
+ try {
200
+ return A.getCursorPosition(doc, path.slice(), cursor);
201
+ } catch (err) {
202
+ return 0;
203
+ }
194
204
  }
195
205
  });
196
206
 
@@ -1132,68 +1142,15 @@ var logChanges = (trs) => {
1132
1142
  };
1133
1143
 
1134
1144
  // packages/ui/react-ui-editor/src/extensions/comments.ts
1135
- var styles3 = EditorView6.baseTheme({
1136
- "&light .cm-comment, &light .cm-comment-current": {
1137
- mixBlendMode: "darken"
1138
- },
1139
- "&dark .cm-comment, &dark .cm-comment-current": {
1140
- mixBlendMode: "plus-lighter"
1141
- },
1142
- "&light .cm-comment": {
1143
- backgroundColor: getToken("extend.colors.yellow.50")
1144
- },
1145
- "&light .cm-comment-current": {
1146
- backgroundColor: getToken("extend.colors.yellow.100")
1147
- },
1148
- "&dark .cm-comment": {
1149
- color: getToken("extend.colors.yellow.50"),
1150
- backgroundColor: getToken("extend.colors.yellow.900")
1151
- },
1152
- "&dark .cm-comment-current": {
1153
- color: getToken("extend.colors.yellow.100"),
1154
- backgroundColor: getToken("extend.colors.yellow.950")
1155
- }
1156
- });
1157
- var commentMark = Decoration3.mark({
1158
- class: "cm-comment",
1159
- attributes: {
1160
- "data-testid": "cm-comment"
1161
- }
1162
- });
1163
- var commentCurrentMark = Decoration3.mark({
1164
- class: "cm-comment-current",
1165
- attributes: {
1166
- "data-testid": "cm-comment"
1167
- }
1145
+ var documentId = Facet3.define({
1146
+ combine: (values) => values[0]
1168
1147
  });
1169
- var focusComment = (view, id, center = true) => {
1170
- const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
1171
- if (!comment?.comment.cursor) {
1172
- return;
1173
- }
1174
- const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
1175
- if (range) {
1176
- view.dispatch({
1177
- selection: {
1178
- anchor: range.from
1179
- },
1180
- effects: [
1181
- //
1182
- EditorView6.scrollIntoView(range.from, center ? {
1183
- y: "center"
1184
- } : void 0),
1185
- setSelection.of({
1186
- current: id
1187
- })
1188
- ]
1189
- });
1190
- }
1191
- };
1192
1148
  var setComments = StateEffect2.define();
1193
1149
  var setSelection = StateEffect2.define();
1194
1150
  var setCommentState = StateEffect2.define();
1195
1151
  var commentsState = StateField3.define({
1196
- create: () => ({
1152
+ create: (state) => ({
1153
+ id: state.facet(documentId),
1197
1154
  comments: [],
1198
1155
  selection: {}
1199
1156
  }),
@@ -1206,7 +1163,8 @@ var commentsState = StateField3.define({
1206
1163
  };
1207
1164
  }
1208
1165
  if (effect.is(setComments)) {
1209
- const comments2 = effect.value.map((comment) => {
1166
+ const { comments: comments2 } = effect.value;
1167
+ const commentStates = comments2.map((comment) => {
1210
1168
  if (!comment.cursor) {
1211
1169
  return void 0;
1212
1170
  }
@@ -1218,7 +1176,7 @@ var commentsState = StateField3.define({
1218
1176
  }).filter(nonNullable);
1219
1177
  return {
1220
1178
  ...value,
1221
- comments: comments2
1179
+ comments: commentStates
1222
1180
  };
1223
1181
  }
1224
1182
  if (effect.is(setCommentState)) {
@@ -1228,6 +1186,40 @@ var commentsState = StateField3.define({
1228
1186
  return value;
1229
1187
  }
1230
1188
  });
1189
+ var styles3 = EditorView6.baseTheme({
1190
+ "&light .cm-comment, &light .cm-comment-current": {
1191
+ mixBlendMode: "darken"
1192
+ },
1193
+ "&dark .cm-comment, &dark .cm-comment-current": {
1194
+ mixBlendMode: "plus-lighter"
1195
+ },
1196
+ "&light .cm-comment": {
1197
+ backgroundColor: getToken("extend.colors.yellow.50")
1198
+ },
1199
+ "&light .cm-comment-current": {
1200
+ backgroundColor: getToken("extend.colors.yellow.100")
1201
+ },
1202
+ "&dark .cm-comment": {
1203
+ color: getToken("extend.colors.yellow.50"),
1204
+ backgroundColor: getToken("extend.colors.yellow.900")
1205
+ },
1206
+ "&dark .cm-comment-current": {
1207
+ color: getToken("extend.colors.yellow.100"),
1208
+ backgroundColor: getToken("extend.colors.yellow.950")
1209
+ }
1210
+ });
1211
+ var commentMark = Decoration3.mark({
1212
+ class: "cm-comment",
1213
+ attributes: {
1214
+ "data-testid": "cm-comment"
1215
+ }
1216
+ });
1217
+ var commentCurrentMark = Decoration3.mark({
1218
+ class: "cm-comment-current",
1219
+ attributes: {
1220
+ "data-testid": "cm-comment"
1221
+ }
1222
+ });
1231
1223
  var commentsDecorations = EditorView6.decorations.compute([
1232
1224
  commentsState
1233
1225
  ], (state) => {
@@ -1347,9 +1339,6 @@ var mapTrackedComment = (comment, changes) => ({
1347
1339
  var restoreCommentEffect = StateEffect2.define({
1348
1340
  map: mapTrackedComment
1349
1341
  });
1350
- var optionsFacet = Facet3.define({
1351
- combine: (providers) => providers[0]
1352
- });
1353
1342
  var createComment = (view) => {
1354
1343
  const options = view.state.facet(optionsFacet);
1355
1344
  const { from, to } = view.state.selection.main;
@@ -1388,11 +1377,15 @@ var createComment = (view) => {
1388
1377
  }
1389
1378
  return false;
1390
1379
  };
1380
+ var optionsFacet = Facet3.define({
1381
+ combine: (providers) => providers[0]
1382
+ });
1391
1383
  var comments = (options = {}) => {
1392
1384
  const { key: shortcut = "meta-'" } = options;
1393
1385
  const handleSelect = debounce((state) => options.onSelect?.(state), 200);
1394
1386
  return [
1395
1387
  optionsFacet.of(options),
1388
+ documentId.of(options.id),
1396
1389
  commentsState,
1397
1390
  commentsDecorations,
1398
1391
  styles3,
@@ -1494,6 +1487,7 @@ var comments = (options = {}) => {
1494
1487
  });
1495
1488
  handleSelect({
1496
1489
  selection,
1490
+ id: state.facet(documentId),
1497
1491
  comments: comments2.map(({ comment, range }) => ({
1498
1492
  comment,
1499
1493
  range,
@@ -1505,14 +1499,41 @@ var comments = (options = {}) => {
1505
1499
  options.onUpdate ? trackPastedComments(options.onUpdate) : []
1506
1500
  ];
1507
1501
  };
1508
- var useComments = (view, comments2 = []) => {
1502
+ var focusComment = (view, id, center = true) => {
1503
+ const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
1504
+ if (!comment?.comment.cursor) {
1505
+ return;
1506
+ }
1507
+ const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
1508
+ if (range) {
1509
+ view.dispatch({
1510
+ selection: {
1511
+ anchor: range.from
1512
+ },
1513
+ effects: [
1514
+ //
1515
+ EditorView6.scrollIntoView(range.from, center ? {
1516
+ y: "center"
1517
+ } : void 0),
1518
+ setSelection.of({
1519
+ current: id
1520
+ })
1521
+ ]
1522
+ });
1523
+ }
1524
+ };
1525
+ var useComments = (view, id, comments2 = []) => {
1509
1526
  useEffect(() => {
1510
1527
  if (view) {
1511
1528
  view.dispatch({
1512
- effects: setComments.of(comments2)
1529
+ effects: setComments.of({
1530
+ id,
1531
+ comments: comments2
1532
+ })
1513
1533
  });
1514
1534
  }
1515
1535
  }, [
1536
+ id,
1516
1537
  view,
1517
1538
  comments2
1518
1539
  ]);
@@ -4594,9 +4615,11 @@ import { invariant as invariant3 } from "@dxos/invariant";
4594
4615
  import { isAutomergeObject } from "@dxos/react-client/echo";
4595
4616
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
4596
4617
  var useTextModel = (props) => {
4597
- const { identity, space, text } = props;
4598
4618
  const [model, setModel] = useState5();
4599
- useEffect4(() => setModel(createModel(props)), [
4619
+ const { identity, space, text } = props;
4620
+ useEffect4(() => {
4621
+ setModel(createModel(props));
4622
+ }, [
4600
4623
  identity,
4601
4624
  space,
4602
4625
  text
@@ -4618,7 +4641,7 @@ var createModel = ({ space, identity, text }) => {
4618
4641
  }
4619
4642
  invariant3(isAutomergeObject(text), void 0, {
4620
4643
  F: __dxlog_file6,
4621
- L: 54,
4644
+ L: 60,
4622
4645
  S: void 0,
4623
4646
  A: [
4624
4647
  "isAutomergeObject(text)",