@dxos/react-ui-editor 0.4.4-main.2a45fa8 → 0.4.4-main.385c016

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 (30) hide show
  1. package/dist/lib/browser/index.mjs +147 -113
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +3 -2
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +3 -3
  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/hooks.stories.d.ts +1 -1
  10. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  11. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  12. package/dist/types/src/extensions/comments.d.ts +15 -7
  13. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  14. package/dist/types/src/extensions/cursor.d.ts +1 -1
  15. package/dist/types/src/extensions/cursor.d.ts.map +1 -1
  16. package/dist/types/src/hooks/useEditorView.d.ts +6 -4
  17. package/dist/types/src/hooks/useEditorView.d.ts.map +1 -1
  18. package/dist/types/src/hooks/useTextModel.d.ts +3 -0
  19. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  20. package/package.json +24 -24
  21. package/src/components/TextEditor/MarkdownEditor.stories.tsx +3 -2
  22. package/src/components/TextEditor/TextEditor.tsx +3 -3
  23. package/src/components/Toolbar/Toolbar.stories.tsx +4 -4
  24. package/src/extensions/autocomplete.ts +1 -1
  25. package/src/extensions/automerge/cursor.ts +15 -4
  26. package/src/extensions/automerge/defs.ts +0 -1
  27. package/src/extensions/comments.ts +111 -82
  28. package/src/extensions/cursor.ts +4 -2
  29. package/src/hooks/useEditorView.ts +13 -11
  30. package/src/hooks/useTextModel.ts +7 -7
@@ -12,7 +12,7 @@ import { EditorView as EditorView15 } from "@codemirror/view";
12
12
  import { useFocusableGroup } from "@fluentui/react-tabster";
13
13
  import defaultsDeep2 from "lodash.defaultsdeep";
14
14
  import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2 } from "react";
15
- import { log as log2 } from "@dxos/log";
15
+ import { log as log3 } from "@dxos/log";
16
16
  import { useThemeContext } from "@dxos/react-ui";
17
17
  import { focusRing } from "@dxos/react-ui-theme";
18
18
  import { isNotFalsy as isNotFalsy4 } from "@dxos/util";
@@ -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.
@@ -161,6 +163,8 @@ import { next as A4 } from "@dxos/automerge/automerge";
161
163
  // packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts
162
164
  import get from "lodash.get";
163
165
  import { next as A } from "@dxos/automerge/automerge";
166
+ import { log } from "@dxos/log";
167
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
164
168
  var cursorConverter = (handle, path) => ({
165
169
  // TODO(burdon): Handle assoc to associate with a previous character.
166
170
  toCursor: (pos) => {
@@ -172,7 +176,17 @@ var cursorConverter = (handle, path) => ({
172
176
  if (typeof value === "string" && value.length <= pos) {
173
177
  return "end";
174
178
  }
175
- return A.getCursor(doc, path.slice(), pos);
179
+ try {
180
+ return A.getCursor(doc, path.slice(), pos);
181
+ } catch (err) {
182
+ log.catch(err, void 0, {
183
+ F: __dxlog_file,
184
+ L: 31,
185
+ S: void 0,
186
+ C: (f, a) => f(...a)
187
+ });
188
+ return "";
189
+ }
176
190
  },
177
191
  fromCursor: (cursor) => {
178
192
  if (cursor === "") {
@@ -190,7 +204,17 @@ var cursorConverter = (handle, path) => ({
190
204
  return 0;
191
205
  }
192
206
  }
193
- return A.getCursorPosition(doc, path.slice(), cursor);
207
+ try {
208
+ return A.getCursorPosition(doc, path.slice(), cursor);
209
+ } catch (err) {
210
+ log.catch(err, void 0, {
211
+ F: __dxlog_file,
212
+ L: 59,
213
+ S: void 0,
214
+ C: (f, a) => f(...a)
215
+ });
216
+ return 0;
217
+ }
194
218
  }
195
219
  });
196
220
 
@@ -708,7 +732,7 @@ var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping =
708
732
  import { EditorView as EditorView5, keymap as keymap2 } from "@codemirror/view";
709
733
  import defaultsDeep from "lodash.defaultsdeep";
710
734
  import { invariant } from "@dxos/invariant";
711
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
735
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
712
736
  var defaultOptions = {
713
737
  effect: 2,
714
738
  maxParticles: 200,
@@ -835,7 +859,7 @@ var Blaster = class {
835
859
  }
836
860
  initialize() {
837
861
  invariant(!this._canvas && !this._ctx, void 0, {
838
- F: __dxlog_file,
862
+ F: __dxlog_file2,
839
863
  L: 141,
840
864
  S: this,
841
865
  A: [
@@ -872,7 +896,7 @@ var Blaster = class {
872
896
  }
873
897
  start() {
874
898
  invariant(this._canvas && this._ctx, void 0, {
875
- F: __dxlog_file,
899
+ F: __dxlog_file2,
876
900
  L: 180,
877
901
  S: this,
878
902
  A: [
@@ -1097,14 +1121,14 @@ var editorFillLayoutEditor = "min-bs-full";
1097
1121
  var editorHalfViewportOverscrollContent = "after:block after:min-bs-[50dvh] after:pointer-events-none";
1098
1122
 
1099
1123
  // packages/ui/react-ui-editor/src/util.ts
1100
- import { log } from "@dxos/log";
1101
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util.ts";
1124
+ import { log as log2 } from "@dxos/log";
1125
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util.ts";
1102
1126
  var callbackWrapper = (fn) => (...args) => {
1103
1127
  try {
1104
1128
  return fn(...args);
1105
1129
  } catch (err) {
1106
- log.catch(err, void 0, {
1107
- F: __dxlog_file2,
1130
+ log2.catch(err, void 0, {
1131
+ F: __dxlog_file3,
1108
1132
  L: 18,
1109
1133
  S: void 0,
1110
1134
  C: (f, a) => f(...a)
@@ -1132,68 +1156,15 @@ var logChanges = (trs) => {
1132
1156
  };
1133
1157
 
1134
1158
  // 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
- }
1159
+ var documentId = Facet3.define({
1160
+ combine: (values) => values[0]
1156
1161
  });
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
- }
1168
- });
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
1162
  var setComments = StateEffect2.define();
1193
1163
  var setSelection = StateEffect2.define();
1194
1164
  var setCommentState = StateEffect2.define();
1195
1165
  var commentsState = StateField3.define({
1196
- create: () => ({
1166
+ create: (state) => ({
1167
+ id: state.facet(documentId),
1197
1168
  comments: [],
1198
1169
  selection: {}
1199
1170
  }),
@@ -1206,7 +1177,8 @@ var commentsState = StateField3.define({
1206
1177
  };
1207
1178
  }
1208
1179
  if (effect.is(setComments)) {
1209
- const comments2 = effect.value.map((comment) => {
1180
+ const { comments: comments2 } = effect.value;
1181
+ const commentStates = comments2.map((comment) => {
1210
1182
  if (!comment.cursor) {
1211
1183
  return void 0;
1212
1184
  }
@@ -1218,7 +1190,7 @@ var commentsState = StateField3.define({
1218
1190
  }).filter(nonNullable);
1219
1191
  return {
1220
1192
  ...value,
1221
- comments: comments2
1193
+ comments: commentStates
1222
1194
  };
1223
1195
  }
1224
1196
  if (effect.is(setCommentState)) {
@@ -1228,6 +1200,40 @@ var commentsState = StateField3.define({
1228
1200
  return value;
1229
1201
  }
1230
1202
  });
1203
+ var styles3 = EditorView6.baseTheme({
1204
+ "&light .cm-comment, &light .cm-comment-current": {
1205
+ mixBlendMode: "darken"
1206
+ },
1207
+ "&dark .cm-comment, &dark .cm-comment-current": {
1208
+ mixBlendMode: "plus-lighter"
1209
+ },
1210
+ "&light .cm-comment": {
1211
+ backgroundColor: getToken("extend.colors.yellow.50")
1212
+ },
1213
+ "&light .cm-comment-current": {
1214
+ backgroundColor: getToken("extend.colors.yellow.100")
1215
+ },
1216
+ "&dark .cm-comment": {
1217
+ color: getToken("extend.colors.yellow.50"),
1218
+ backgroundColor: getToken("extend.colors.yellow.900")
1219
+ },
1220
+ "&dark .cm-comment-current": {
1221
+ color: getToken("extend.colors.yellow.100"),
1222
+ backgroundColor: getToken("extend.colors.yellow.950")
1223
+ }
1224
+ });
1225
+ var commentMark = Decoration3.mark({
1226
+ class: "cm-comment",
1227
+ attributes: {
1228
+ "data-testid": "cm-comment"
1229
+ }
1230
+ });
1231
+ var commentCurrentMark = Decoration3.mark({
1232
+ class: "cm-comment-current",
1233
+ attributes: {
1234
+ "data-testid": "cm-comment"
1235
+ }
1236
+ });
1231
1237
  var commentsDecorations = EditorView6.decorations.compute([
1232
1238
  commentsState
1233
1239
  ], (state) => {
@@ -1347,9 +1353,6 @@ var mapTrackedComment = (comment, changes) => ({
1347
1353
  var restoreCommentEffect = StateEffect2.define({
1348
1354
  map: mapTrackedComment
1349
1355
  });
1350
- var optionsFacet = Facet3.define({
1351
- combine: (providers) => providers[0]
1352
- });
1353
1356
  var createComment = (view) => {
1354
1357
  const options = view.state.facet(optionsFacet);
1355
1358
  const { from, to } = view.state.selection.main;
@@ -1388,11 +1391,15 @@ var createComment = (view) => {
1388
1391
  }
1389
1392
  return false;
1390
1393
  };
1394
+ var optionsFacet = Facet3.define({
1395
+ combine: (providers) => providers[0]
1396
+ });
1391
1397
  var comments = (options = {}) => {
1392
1398
  const { key: shortcut = "meta-'" } = options;
1393
1399
  const handleSelect = debounce((state) => options.onSelect?.(state), 200);
1394
1400
  return [
1395
1401
  optionsFacet.of(options),
1402
+ documentId.of(options.id),
1396
1403
  commentsState,
1397
1404
  commentsDecorations,
1398
1405
  styles3,
@@ -1494,6 +1501,7 @@ var comments = (options = {}) => {
1494
1501
  });
1495
1502
  handleSelect({
1496
1503
  selection,
1504
+ id: state.facet(documentId),
1497
1505
  comments: comments2.map(({ comment, range }) => ({
1498
1506
  comment,
1499
1507
  range,
@@ -1505,14 +1513,41 @@ var comments = (options = {}) => {
1505
1513
  options.onUpdate ? trackPastedComments(options.onUpdate) : []
1506
1514
  ];
1507
1515
  };
1508
- var useComments = (view, comments2 = []) => {
1516
+ var focusComment = (view, id, center = true) => {
1517
+ const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
1518
+ if (!comment?.comment.cursor) {
1519
+ return;
1520
+ }
1521
+ const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
1522
+ if (range) {
1523
+ view.dispatch({
1524
+ selection: {
1525
+ anchor: range.from
1526
+ },
1527
+ effects: [
1528
+ //
1529
+ EditorView6.scrollIntoView(range.from, center ? {
1530
+ y: "center"
1531
+ } : void 0),
1532
+ setSelection.of({
1533
+ current: id
1534
+ })
1535
+ ]
1536
+ });
1537
+ }
1538
+ };
1539
+ var useComments = (view, id, comments2 = []) => {
1509
1540
  useEffect(() => {
1510
1541
  if (view) {
1511
1542
  view.dispatch({
1512
- effects: setComments.of(comments2)
1543
+ effects: setComments.of({
1544
+ id,
1545
+ comments: comments2
1546
+ })
1513
1547
  });
1514
1548
  }
1515
1549
  }, [
1550
+ id,
1516
1551
  view,
1517
1552
  comments2
1518
1553
  ]);
@@ -3871,7 +3906,7 @@ var codeTheme = {
3871
3906
  };
3872
3907
 
3873
3908
  // packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
3874
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
3909
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
3875
3910
  var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
3876
3911
  const tabsterDOMAttribute = useFocusableGroup({
3877
3912
  tabBehavior: "limited"
@@ -3908,8 +3943,8 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
3908
3943
  extensions: [
3909
3944
  // TODO(burdon): Doesn't catch errors in keymap functions.
3910
3945
  EditorView15.exceptionSink.of((err) => {
3911
- log2.catch(err, void 0, {
3912
- F: __dxlog_file3,
3946
+ log3.catch(err, void 0, {
3947
+ F: __dxlog_file4,
3913
3948
  L: 112,
3914
3949
  S: void 0,
3915
3950
  C: (f, a) => f(...a)
@@ -4311,8 +4346,8 @@ var Toolbar = {
4311
4346
  import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
4312
4347
  import { Context as Context2 } from "@dxos/context";
4313
4348
  import { invariant as invariant2 } from "@dxos/invariant";
4314
- import { log as log3 } from "@dxos/log";
4315
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/awareness-provider.ts";
4349
+ import { log as log4 } from "@dxos/log";
4350
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/awareness-provider.ts";
4316
4351
  var DEBOUNCE_INTERVAL = 100;
4317
4352
  var SpaceAwarenessProvider = class {
4318
4353
  constructor(params) {
@@ -4349,10 +4384,10 @@ var SpaceAwarenessProvider = class {
4349
4384
  void this._space.postMessage(this._channel, {
4350
4385
  kind: "query"
4351
4386
  }).catch((err) => {
4352
- log3.debug("failed to query awareness", {
4387
+ log4.debug("failed to query awareness", {
4353
4388
  err
4354
4389
  }, {
4355
- F: __dxlog_file4,
4390
+ F: __dxlog_file5,
4356
4391
  L: 89,
4357
4392
  S: this,
4358
4393
  C: (f, a) => f(...a)
@@ -4369,7 +4404,7 @@ var SpaceAwarenessProvider = class {
4369
4404
  }
4370
4405
  update(position) {
4371
4406
  invariant2(this._postTask, void 0, {
4372
- F: __dxlog_file4,
4407
+ F: __dxlog_file5,
4373
4408
  L: 104,
4374
4409
  S: this,
4375
4410
  A: [
@@ -4386,7 +4421,7 @@ var SpaceAwarenessProvider = class {
4386
4421
  }
4387
4422
  _handleQueryMessage() {
4388
4423
  invariant2(this._postTask, void 0, {
4389
- F: __dxlog_file4,
4424
+ F: __dxlog_file5,
4390
4425
  L: 115,
4391
4426
  S: this,
4392
4427
  A: [
@@ -4398,7 +4433,7 @@ var SpaceAwarenessProvider = class {
4398
4433
  }
4399
4434
  _handlePostMessage(message) {
4400
4435
  invariant2(message.kind === "post", void 0, {
4401
- F: __dxlog_file4,
4436
+ F: __dxlog_file5,
4402
4437
  L: 120,
4403
4438
  S: this,
4404
4439
  A: [
@@ -4467,28 +4502,36 @@ var useActionHandler = (view) => {
4467
4502
  };
4468
4503
 
4469
4504
  // packages/ui/react-ui-editor/src/hooks/useEditorView.ts
4470
- import { useState as useState3 } from "react";
4471
- var useEditorView = () => {
4472
- const [view, setView] = useState3(null);
4505
+ import { useRef as useRef2, useState as useState3 } from "react";
4506
+ var useEditorView = (id) => {
4507
+ const editorRef = useRef2(null);
4508
+ const [prev, setPrev] = useState3([
4509
+ null,
4510
+ ""
4511
+ ]);
4512
+ if (prev[0] !== editorRef.current) {
4513
+ setPrev([
4514
+ editorRef.current,
4515
+ id
4516
+ ]);
4517
+ }
4473
4518
  return [
4474
- (ref) => {
4475
- setView(ref);
4476
- },
4477
- view
4519
+ editorRef,
4520
+ prev[1] !== id
4478
4521
  ];
4479
4522
  };
4480
4523
 
4481
4524
  // packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
4482
4525
  import { EditorSelection as EditorSelection2, EditorState as EditorState3 } from "@codemirror/state";
4483
4526
  import { EditorView as EditorView16 } from "@codemirror/view";
4484
- import { useEffect as useEffect3, useRef as useRef2, useState as useState4 } from "react";
4485
- import { log as log4 } from "@dxos/log";
4527
+ import { useEffect as useEffect3, useRef as useRef3, useState as useState4 } from "react";
4528
+ import { log as log5 } from "@dxos/log";
4486
4529
  import { isNotFalsy as isNotFalsy5 } from "@dxos/util";
4487
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
4530
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
4488
4531
  var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions } = {}) => {
4489
- const onUpdate = useRef2();
4532
+ const onUpdate = useRef3();
4490
4533
  const [view, setView] = useState4();
4491
- const parentRef = useRef2(null);
4534
+ const parentRef = useRef3(null);
4492
4535
  useEffect3(() => {
4493
4536
  if (parentRef.current) {
4494
4537
  const state = EditorState3.create({
@@ -4497,8 +4540,8 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
4497
4540
  extensions: [
4498
4541
  // TODO(burdon): Doesn't catch errors in keymap functions.
4499
4542
  EditorView16.exceptionSink.of((err) => {
4500
- log4.catch(err, void 0, {
4501
- F: __dxlog_file5,
4543
+ log5.catch(err, void 0, {
4544
+ F: __dxlog_file6,
4502
4545
  L: 57,
4503
4546
  S: void 0,
4504
4547
  C: (f, a) => f(...a)
@@ -4587,22 +4630,13 @@ var createThemeExtensions = ({ theme, themeMode, slots } = {}) => {
4587
4630
 
4588
4631
  // packages/ui/react-ui-editor/src/hooks/useTextModel.ts
4589
4632
  import get4 from "lodash.get";
4590
- import { useEffect as useEffect4, useState as useState5 } from "react";
4633
+ import { useState as useState5, useMemo as useMemo2 } from "react";
4591
4634
  import { generateName } from "@dxos/display-name";
4592
4635
  import { getRawDoc } from "@dxos/echo-schema";
4593
4636
  import { invariant as invariant3 } from "@dxos/invariant";
4594
4637
  import { isAutomergeObject } from "@dxos/react-client/echo";
4595
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
4596
- var useTextModel = (props) => {
4597
- const { identity, space, text } = props;
4598
- const [model, setModel] = useState5();
4599
- useEffect4(() => setModel(createModel(props)), [
4600
- identity,
4601
- space,
4602
- text
4603
- ]);
4604
- return model;
4605
- };
4638
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
4639
+ var useTextModel = (props) => useMemo2(() => createModel(props), Object.values(props));
4606
4640
  var useInMemoryTextModel = ({ id, defaultContent }) => {
4607
4641
  const [content, setContent] = useState5(defaultContent ?? "");
4608
4642
  return {
@@ -4617,7 +4651,7 @@ var createModel = ({ space, identity, text }) => {
4617
4651
  return void 0;
4618
4652
  }
4619
4653
  invariant3(isAutomergeObject(text), void 0, {
4620
- F: __dxlog_file6,
4654
+ F: __dxlog_file7,
4621
4655
  L: 54,
4622
4656
  S: void 0,
4623
4657
  A: [