quoin-editor 0.4.2 → 1.0.1

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 (231) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/MIGRATION.md +233 -0
  3. package/README.md +78 -716
  4. package/dist/ai.cjs +1148 -0
  5. package/dist/ai.cjs.map +1 -0
  6. package/dist/ai.d.cts +68 -0
  7. package/dist/ai.d.ts +68 -0
  8. package/dist/ai.js +1148 -0
  9. package/dist/ai.js.map +1 -0
  10. package/dist/catalogue.cjs +59 -0
  11. package/dist/catalogue.cjs.map +1 -0
  12. package/dist/catalogue.d.cts +39 -0
  13. package/dist/catalogue.d.ts +39 -0
  14. package/dist/catalogue.js +59 -0
  15. package/dist/catalogue.js.map +1 -0
  16. package/dist/chunk-26Q4LSIU.js +100 -0
  17. package/dist/chunk-26Q4LSIU.js.map +1 -0
  18. package/dist/chunk-56C7GCKO.cjs +1385 -0
  19. package/dist/chunk-56C7GCKO.cjs.map +1 -0
  20. package/dist/chunk-5M4QG3ZC.cjs +3303 -0
  21. package/dist/chunk-5M4QG3ZC.cjs.map +1 -0
  22. package/dist/chunk-5R3ISX4A.cjs +6643 -0
  23. package/dist/chunk-5R3ISX4A.cjs.map +1 -0
  24. package/dist/chunk-62WKUAQY.js +3335 -0
  25. package/dist/chunk-62WKUAQY.js.map +1 -0
  26. package/dist/chunk-6LMS5J3Y.js +320 -0
  27. package/dist/chunk-6LMS5J3Y.js.map +1 -0
  28. package/dist/chunk-6PKVJZQV.cjs +100 -0
  29. package/dist/chunk-6PKVJZQV.cjs.map +1 -0
  30. package/dist/chunk-6YSGUAVW.js +376 -0
  31. package/dist/chunk-6YSGUAVW.js.map +1 -0
  32. package/dist/chunk-75C6PX2L.cjs +239 -0
  33. package/dist/chunk-75C6PX2L.cjs.map +1 -0
  34. package/dist/chunk-A4IJSJKL.js +598 -0
  35. package/dist/chunk-A4IJSJKL.js.map +1 -0
  36. package/dist/chunk-BTBHHBVR.cjs +3335 -0
  37. package/dist/chunk-BTBHHBVR.cjs.map +1 -0
  38. package/dist/chunk-CLTHD5GO.cjs +34 -0
  39. package/dist/chunk-CLTHD5GO.cjs.map +1 -0
  40. package/dist/chunk-EH5KXQXY.cjs +62 -0
  41. package/dist/chunk-EH5KXQXY.cjs.map +1 -0
  42. package/dist/chunk-ESMAW4NK.cjs +184 -0
  43. package/dist/chunk-ESMAW4NK.cjs.map +1 -0
  44. package/dist/chunk-EYFCOV3T.cjs +30 -0
  45. package/dist/chunk-EYFCOV3T.cjs.map +1 -0
  46. package/dist/chunk-F5V3IEEE.cjs +326 -0
  47. package/dist/chunk-F5V3IEEE.cjs.map +1 -0
  48. package/dist/chunk-GPIDU3GN.js +239 -0
  49. package/dist/chunk-GPIDU3GN.js.map +1 -0
  50. package/dist/chunk-HOIDJEVI.cjs +4063 -0
  51. package/dist/chunk-HOIDJEVI.cjs.map +1 -0
  52. package/dist/chunk-JJ3RASQS.cjs +706 -0
  53. package/dist/chunk-JJ3RASQS.cjs.map +1 -0
  54. package/dist/chunk-LE3F7WIP.js +6643 -0
  55. package/dist/chunk-LE3F7WIP.js.map +1 -0
  56. package/dist/chunk-LE5XMIFJ.cjs +14 -0
  57. package/dist/chunk-LE5XMIFJ.cjs.map +1 -0
  58. package/dist/chunk-LMAEPFTX.js +30 -0
  59. package/dist/chunk-LMAEPFTX.js.map +1 -0
  60. package/dist/chunk-LV6EYPJO.js +34 -0
  61. package/dist/chunk-LV6EYPJO.js.map +1 -0
  62. package/dist/chunk-MLRAVUFG.cjs +376 -0
  63. package/dist/chunk-MLRAVUFG.cjs.map +1 -0
  64. package/dist/chunk-MQUCCSWG.js +14 -0
  65. package/dist/chunk-MQUCCSWG.js.map +1 -0
  66. package/dist/chunk-O4Z2WMFF.js +62 -0
  67. package/dist/chunk-O4Z2WMFF.js.map +1 -0
  68. package/dist/chunk-OCCKQHCY.js +25 -0
  69. package/dist/chunk-OCCKQHCY.js.map +1 -0
  70. package/dist/chunk-PGSS4IOS.js +706 -0
  71. package/dist/chunk-PGSS4IOS.js.map +1 -0
  72. package/dist/chunk-PIWRSX7U.js +562 -0
  73. package/dist/chunk-PIWRSX7U.js.map +1 -0
  74. package/dist/chunk-PX6LZMH4.cjs +598 -0
  75. package/dist/chunk-PX6LZMH4.cjs.map +1 -0
  76. package/dist/chunk-QXG3HWDS.js +184 -0
  77. package/dist/chunk-QXG3HWDS.js.map +1 -0
  78. package/dist/chunk-RQW3P3GH.js +504 -0
  79. package/dist/chunk-RQW3P3GH.js.map +1 -0
  80. package/dist/chunk-SSIRYUCK.js +3303 -0
  81. package/dist/chunk-SSIRYUCK.js.map +1 -0
  82. package/dist/chunk-UBNG5YCG.js +326 -0
  83. package/dist/chunk-UBNG5YCG.js.map +1 -0
  84. package/dist/chunk-UCXLRRWY.js +1385 -0
  85. package/dist/chunk-UCXLRRWY.js.map +1 -0
  86. package/dist/chunk-UDAVVEFC.cjs +562 -0
  87. package/dist/chunk-UDAVVEFC.cjs.map +1 -0
  88. package/dist/chunk-UPSLDTLT.js +4063 -0
  89. package/dist/chunk-UPSLDTLT.js.map +1 -0
  90. package/dist/chunk-UWNZG2SD.cjs +25 -0
  91. package/dist/chunk-UWNZG2SD.cjs.map +1 -0
  92. package/dist/chunk-V3KLMSRO.cjs +504 -0
  93. package/dist/chunk-V3KLMSRO.cjs.map +1 -0
  94. package/dist/chunk-VACTAZWS.cjs +249 -0
  95. package/dist/chunk-VACTAZWS.cjs.map +1 -0
  96. package/dist/chunk-WMN6566P.js +249 -0
  97. package/dist/chunk-WMN6566P.js.map +1 -0
  98. package/dist/chunk-XX5FTPJR.cjs +320 -0
  99. package/dist/chunk-XX5FTPJR.cjs.map +1 -0
  100. package/dist/comments.cjs +1008 -0
  101. package/dist/comments.cjs.map +1 -0
  102. package/dist/comments.d.cts +93 -0
  103. package/dist/comments.d.ts +93 -0
  104. package/dist/comments.js +1008 -0
  105. package/dist/comments.js.map +1 -0
  106. package/dist/diff.cjs +346 -0
  107. package/dist/diff.cjs.map +1 -0
  108. package/dist/diff.d.cts +67 -0
  109. package/dist/diff.d.ts +67 -0
  110. package/dist/diff.js +346 -0
  111. package/dist/diff.js.map +1 -0
  112. package/dist/docx.cjs +874 -0
  113. package/dist/docx.cjs.map +1 -0
  114. package/dist/docx.d.cts +33 -0
  115. package/dist/docx.d.ts +33 -0
  116. package/dist/docx.js +874 -0
  117. package/dist/docx.js.map +1 -0
  118. package/dist/embed-provider-jXwlRmnp.d.cts +19 -0
  119. package/dist/embed-provider-jXwlRmnp.d.ts +19 -0
  120. package/dist/embed.cjs +17 -0
  121. package/dist/embed.cjs.map +1 -0
  122. package/dist/embed.d.cts +56 -0
  123. package/dist/embed.d.ts +56 -0
  124. package/dist/embed.js +17 -0
  125. package/dist/embed.js.map +1 -0
  126. package/dist/emoji-data.cjs +1968 -0
  127. package/dist/emoji-data.cjs.map +1 -0
  128. package/dist/emoji-data.js +1968 -0
  129. package/dist/emoji-data.js.map +1 -0
  130. package/dist/emoji-extension-CmPlRssm.d.ts +46 -0
  131. package/dist/emoji-extension-zJ6F7hW8.d.cts +46 -0
  132. package/dist/emoji.cjs +18 -0
  133. package/dist/emoji.cjs.map +1 -0
  134. package/dist/emoji.d.cts +31 -0
  135. package/dist/emoji.d.ts +31 -0
  136. package/dist/emoji.js +18 -0
  137. package/dist/emoji.js.map +1 -0
  138. package/dist/engine.cjs +119 -0
  139. package/dist/engine.cjs.map +1 -0
  140. package/dist/engine.d.cts +144 -0
  141. package/dist/engine.d.ts +144 -0
  142. package/dist/engine.js +119 -0
  143. package/dist/engine.js.map +1 -0
  144. package/dist/find-extension-BcRyE9K4.d.cts +41 -0
  145. package/dist/find-extension-CmFehyul.d.ts +41 -0
  146. package/dist/find.cjs +20 -0
  147. package/dist/find.cjs.map +1 -0
  148. package/dist/find.d.cts +44 -0
  149. package/dist/find.d.ts +44 -0
  150. package/dist/find.js +20 -0
  151. package/dist/find.js.map +1 -0
  152. package/dist/headless.cjs +151 -518
  153. package/dist/headless.cjs.map +1 -1
  154. package/dist/headless.d.cts +102 -69
  155. package/dist/headless.d.ts +102 -69
  156. package/dist/headless.js +149 -467
  157. package/dist/headless.js.map +1 -1
  158. package/dist/index-CFPmCee4.d.cts +68 -0
  159. package/dist/index-DiCGV60d.d.ts +68 -0
  160. package/dist/index.cjs +183 -2753
  161. package/dist/index.cjs.map +1 -1
  162. package/dist/index.d.cts +345 -253
  163. package/dist/index.d.ts +345 -253
  164. package/dist/index.js +168 -2696
  165. package/dist/index.js.map +1 -1
  166. package/dist/math.cjs +18 -0
  167. package/dist/math.cjs.map +1 -0
  168. package/dist/math.d.cts +49 -0
  169. package/dist/math.d.ts +49 -0
  170. package/dist/math.js +18 -0
  171. package/dist/math.js.map +1 -0
  172. package/dist/mention.cjs +18 -0
  173. package/dist/mention.cjs.map +1 -0
  174. package/dist/mention.d.cts +50 -0
  175. package/dist/mention.d.ts +50 -0
  176. package/dist/mention.js +18 -0
  177. package/dist/mention.js.map +1 -0
  178. package/dist/presence.cjs +562 -0
  179. package/dist/presence.cjs.map +1 -0
  180. package/dist/presence.d.cts +30 -0
  181. package/dist/presence.d.ts +30 -0
  182. package/dist/presence.js +562 -0
  183. package/dist/presence.js.map +1 -0
  184. package/dist/registry-CWBOSAHm.d.cts +121 -0
  185. package/dist/registry-CWBOSAHm.d.ts +121 -0
  186. package/dist/stats-extension-DisOEbbI.d.ts +40 -0
  187. package/dist/stats-extension-Dt1lgP3m.d.cts +40 -0
  188. package/dist/stats.cjs +19 -0
  189. package/dist/stats.cjs.map +1 -0
  190. package/dist/stats.d.cts +19 -0
  191. package/dist/stats.d.ts +19 -0
  192. package/dist/stats.js +19 -0
  193. package/dist/stats.js.map +1 -0
  194. package/dist/styles.css +1 -1
  195. package/dist/table-extension-BTMJnT7J.d.ts +57 -0
  196. package/dist/table-extension-DxZz3jqp.d.cts +57 -0
  197. package/dist/table.cjs +50 -0
  198. package/dist/table.cjs.map +1 -0
  199. package/dist/table.d.cts +57 -0
  200. package/dist/table.d.ts +57 -0
  201. package/dist/table.js +50 -0
  202. package/dist/table.js.map +1 -0
  203. package/dist/to-html-C5t7xyaM.d.ts +21 -0
  204. package/dist/to-html-CNCITCln.d.cts +21 -0
  205. package/dist/toc-extension-CR9U-l6j.d.ts +25 -0
  206. package/dist/toc-extension-DGHywOBv.d.cts +25 -0
  207. package/dist/toc.cjs +18 -0
  208. package/dist/toc.cjs.map +1 -0
  209. package/dist/toc.d.cts +24 -0
  210. package/dist/toc.d.ts +24 -0
  211. package/dist/toc.js +18 -0
  212. package/dist/toc.js.map +1 -0
  213. package/dist/types-C6_QkXzy.d.ts +358 -0
  214. package/dist/types-CJ7Gq3GX.d.cts +358 -0
  215. package/dist/types-DULc8wwg.d.cts +120 -0
  216. package/dist/types-DULc8wwg.d.ts +120 -0
  217. package/dist/view-controller-BD1KwYfE.d.cts +105 -0
  218. package/dist/view-controller-y4cb60ue.d.ts +105 -0
  219. package/dist/view.cjs +23 -0
  220. package/dist/view.cjs.map +1 -0
  221. package/dist/view.d.cts +40 -0
  222. package/dist/view.d.ts +40 -0
  223. package/dist/view.js +23 -0
  224. package/dist/view.js.map +1 -0
  225. package/dist/yjs.cjs +864 -0
  226. package/dist/yjs.cjs.map +1 -0
  227. package/dist/yjs.d.cts +22 -0
  228. package/dist/yjs.d.ts +22 -0
  229. package/dist/yjs.js +864 -0
  230. package/dist/yjs.js.map +1 -0
  231. package/package.json +217 -18
@@ -0,0 +1,562 @@
1
+ 'use client';"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
+
3
+
4
+ var _chunkLE5XMIFJcjs = require('./chunk-LE5XMIFJ.cjs');
5
+
6
+
7
+
8
+ var _chunkCLTHD5GOcjs = require('./chunk-CLTHD5GO.cjs');
9
+ require('./chunk-5R3ISX4A.cjs');
10
+
11
+
12
+
13
+
14
+
15
+ var _chunk5M4QG3ZCcjs = require('./chunk-5M4QG3ZC.cjs');
16
+
17
+
18
+ var _chunkEH5KXQXYcjs = require('./chunk-EH5KXQXY.cjs');
19
+
20
+
21
+
22
+
23
+
24
+ var _chunkMLRAVUFGcjs = require('./chunk-MLRAVUFG.cjs');
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+ var _chunkHOIDJEVIcjs = require('./chunk-HOIDJEVI.cjs');
38
+
39
+
40
+ var _chunkXX5FTPJRcjs = require('./chunk-XX5FTPJR.cjs');
41
+
42
+
43
+
44
+ var _chunkBTBHHBVRcjs = require('./chunk-BTBHHBVR.cjs');
45
+
46
+ // src/extensions/presence/PresenceAvatars.tsx
47
+ var _react = require('react');
48
+
49
+ // src/extensions/presence/follow-layout.ts
50
+ function followLayout(controller, root, place2) {
51
+ const view = root.ownerDocument.defaultView;
52
+ let frame = 0;
53
+ const update = () => place2(observer);
54
+ const later = () => {
55
+ view.cancelAnimationFrame(frame);
56
+ frame = view.requestAnimationFrame(update);
57
+ };
58
+ const observer = new ResizeObserver(later);
59
+ update();
60
+ observer.observe(root);
61
+ const unsubscribe = controller.editor.subscribe(later);
62
+ const fonts = root.ownerDocument.fonts;
63
+ const unlistenScroll = _chunk5M4QG3ZCcjs.listen.call(void 0, root, { scroll: update }, { capture: true, passive: true });
64
+ const unlistenFonts = fonts && _chunk5M4QG3ZCcjs.listen.call(void 0, fonts, { loadingdone: later });
65
+ return () => {
66
+ view.cancelAnimationFrame(frame);
67
+ unsubscribe();
68
+ observer.disconnect();
69
+ unlistenScroll();
70
+ _optionalChain([unlistenFonts, 'optionalCall', _ => _()]);
71
+ };
72
+ }
73
+
74
+ // src/extensions/presence/presence-plugin.ts
75
+ var presenceKey = _chunkHOIDJEVIcjs.createPluginKey.call(void 0, "presence");
76
+ var PRESENCE = "presence";
77
+ var samePeer = (a, b) => a.client === b.client && a.name === b.name && a.color === b.color && a.idle === b.idle && _chunkHOIDJEVIcjs.sameSelection.call(void 0, a.selection, b.selection);
78
+ var samePeers = (a, b) => _chunkBTBHHBVRcjs.sameItems.call(void 0, a, b, samePeer);
79
+ var NO_PEERS = [];
80
+ var presencePlugin = {
81
+ key: presenceKey,
82
+ init: () => NO_PEERS,
83
+ apply(tr, peers) {
84
+ const given = tr.getMeta(PRESENCE);
85
+ if (given !== void 0) return given;
86
+ if (!tr.docChanged) return peers;
87
+ let moved = false;
88
+ const next = peers.map((peer) => {
89
+ const selection = peer.selection && _chunkHOIDJEVIcjs.mapSelection.call(void 0, peer.selection, (pos) => tr.mapPos(pos, -1), tr.before.doc);
90
+ if (selection === peer.selection) return peer;
91
+ moved = true;
92
+ return { ...peer, selection };
93
+ });
94
+ return moved ? next : peers;
95
+ }
96
+ };
97
+
98
+ // src/extensions/presence/PresenceAvatars.tsx
99
+ var _jsxruntime = require('react/jsx-runtime');
100
+ var initials = (name) => name.trim().split(/\s+/).slice(0, 2).map((word) => _nullishCoalesce(_optionalChain([Array, 'access', _2 => _2.from, 'call', _3 => _3(word), 'access', _4 => _4[0], 'optionalAccess', _5 => _5.toUpperCase, 'call', _6 => _6()]), () => ( ""))).join("");
101
+ function groupsOf(state) {
102
+ const byBlock = /* @__PURE__ */ new Map();
103
+ for (const { client, name, color, selection } of _chunkHOIDJEVIcjs.getPluginState.call(void 0, state, presenceKey)) {
104
+ if (selection === null) continue;
105
+ const block = _chunkHOIDJEVIcjs.headBlockId.call(void 0, selection);
106
+ byBlock.set(block, [..._nullishCoalesce(byBlock.get(block), () => ( [])), { client, name, color }]);
107
+ }
108
+ return [...byBlock];
109
+ }
110
+ function place(controller, root, group) {
111
+ const shell = controller.blockElement(_nullishCoalesce(group.dataset.block, () => ( "")));
112
+ group.style.visibility = shell === void 0 ? "hidden" : "";
113
+ if (shell === void 0) return;
114
+ const top = shell.getBoundingClientRect().top - root.getBoundingClientRect().top - root.clientTop + root.scrollTop;
115
+ group.style.transform = `translateY(${top}px)`;
116
+ }
117
+ function PresenceAvatars({ controller, labels }) {
118
+ const groups = _chunk5M4QG3ZCcjs.useEditorState.call(void 0, controller, groupsOf, _chunkXX5FTPJRcjs.sameValue);
119
+ const box = _react.useRef.call(void 0, null);
120
+ _chunk5M4QG3ZCcjs.useIsomorphicLayoutEffect.call(void 0, () => {
121
+ const root = controller.root;
122
+ if (!root || box.current === null) return void 0;
123
+ const children = Array.from(box.current.children);
124
+ return followLayout(controller, root, () => children.forEach((group) => place(controller, root, group)));
125
+ }, [controller, groups]);
126
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: box, className: "quoin-presence-avatars", children: groups.map(([block, people]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
127
+ "div",
128
+ {
129
+ "data-block": block,
130
+ role: "img",
131
+ "aria-label": labels.here(people.map(({ name }) => name)),
132
+ className: "quoin-presence-group",
133
+ children: people.map(({ client, name, color }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
134
+ "span",
135
+ {
136
+ className: "quoin-presence-avatar",
137
+ style: color === void 0 ? void 0 : { "--quoin-presence": color },
138
+ children: initials(name)
139
+ },
140
+ client
141
+ ))
142
+ },
143
+ block
144
+ )) });
145
+ }
146
+
147
+ // src/extensions/presence/presence-decorations.ts
148
+ function tintOf(state, { color, selection }) {
149
+ if (_optionalChain([selection, 'optionalAccess', _7 => _7.kind]) !== "text") return [];
150
+ if (![selection.anchor, selection.head].every(({ block }) => state.doc.index.has(block))) return [];
151
+ const attrs = { class: "quoin-presence-selection" };
152
+ if (color !== void 0) attrs.style = `--quoin-presence:${color}`;
153
+ return _chunkHOIDJEVIcjs.markRanges.call(void 0, { ...state, selection }).map((range) => ({ kind: "inline", ...range, attrs }));
154
+ }
155
+ var drawn = /* @__PURE__ */ new WeakMap();
156
+ function peerDecorations(state, peer) {
157
+ const last = drawn.get(peer);
158
+ if (_optionalChain([last, 'optionalAccess', _8 => _8.doc]) === state.doc) return last.decorations;
159
+ const decorations = tintOf(state, peer);
160
+ drawn.set(peer, { doc: state.doc, decorations });
161
+ return decorations;
162
+ }
163
+ function presenceDecorations(state) {
164
+ return _chunkHOIDJEVIcjs.getPluginState.call(void 0, state, presenceKey).flatMap((peer) => peerDecorations(state, peer));
165
+ }
166
+
167
+ // src/extensions/presence/presence-labels.ts
168
+ var list = (names) => names.length < 2 ? names.join("") : `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}`;
169
+ var englishPresenceLabels = {
170
+ joined: (names) => `${list(names)} joined`,
171
+ left: (names) => `${list(names)} left`,
172
+ here: (names) => `${list(names)} ${names.length === 1 ? "is" : "are"} here`,
173
+ caret: (name) => name
174
+ };
175
+ function resolvePresenceLabels(overrides) {
176
+ const given = Object.entries(_nullishCoalesce(overrides, () => ( {}))).filter(([, value]) => value !== void 0);
177
+ return given.length === 0 ? englishPresenceLabels : { ...englishPresenceLabels, ...Object.fromEntries(given) };
178
+ }
179
+
180
+ // src/extensions/presence/presence-link.ts
181
+ var links = /* @__PURE__ */ new WeakMap();
182
+ function linkOf(editor) {
183
+ let link = links.get(editor);
184
+ if (link === void 0) {
185
+ link = { active: false, session: null, listeners: /* @__PURE__ */ new Set() };
186
+ links.set(editor, link);
187
+ }
188
+ return link;
189
+ }
190
+ function setActive(link, active) {
191
+ if (link.active === active) return;
192
+ link.active = active;
193
+ _optionalChain([link, 'access', _9 => _9.session, 'optionalAccess', _10 => _10.activeChanged, 'call', _11 => _11()]);
194
+ }
195
+
196
+ // src/yjs/awareness.ts
197
+ var _yjs = require('yjs'); var Y = _interopRequireWildcard(_yjs);
198
+ function awarePos(shared, pos) {
199
+ try {
200
+ return {
201
+ ...pos,
202
+ rel: Y.relativePositionToJSON(_chunkMLRAVUFGcjs.relative.call(void 0, shared.text, shared.layout, pos))
203
+ };
204
+ } catch (e) {
205
+ return pos;
206
+ }
207
+ }
208
+ function toAware(shared, selection) {
209
+ if (selection === null) return null;
210
+ if (selection.kind === "text") {
211
+ return {
212
+ anchor: awarePos(shared, selection.anchor),
213
+ head: awarePos(shared, selection.head)
214
+ };
215
+ }
216
+ const [anchor, head] = selection.kind === "node" ? [selection.block, selection.block] : [selection.anchor, selection.head];
217
+ return { anchor: { block: anchor }, head: { block: head } };
218
+ }
219
+ var blockOf = (doc, value) => typeof value.block === "string" && doc.index.has(value.block) ? value.block : null;
220
+ function textPos(shared, doc, value) {
221
+ if (shared !== null && value.rel !== void 0) {
222
+ try {
223
+ const found = _chunkMLRAVUFGcjs.absolute.call(void 0, shared.text, shared.layout, Y.createRelativePositionFromJSON(value.rel));
224
+ if (found !== null) return found;
225
+ } catch (e2) {
226
+ }
227
+ }
228
+ const { region, offset } = value;
229
+ const block = blockOf(doc, value);
230
+ const placed = typeof region === "string" && typeof offset === "number" && Number.isInteger(offset) && offset >= 0;
231
+ return placed && block !== null ? { block, region, offset } : null;
232
+ }
233
+ function fromAware(shared, doc, schema, value) {
234
+ if (!_chunkBTBHHBVRcjs.isRecord.call(void 0, value) || !_chunkBTBHHBVRcjs.isRecord.call(void 0, value.anchor) || !_chunkBTBHHBVRcjs.isRecord.call(void 0, value.head)) return null;
235
+ const { anchor, head } = value;
236
+ if (anchor.region === void 0 && head.region === void 0) {
237
+ const [from2, to2] = [blockOf(doc, anchor), blockOf(doc, head)];
238
+ if (from2 === null || to2 === null) return null;
239
+ return from2 === to2 ? _chunkHOIDJEVIcjs.nodeSelection.call(void 0, from2) : _chunkHOIDJEVIcjs.blockRangeSelection.call(void 0, from2, to2);
240
+ }
241
+ const [from, to] = [textPos(shared, doc, anchor), textPos(shared, doc, head)];
242
+ return from === null || to === null ? null : _chunkHOIDJEVIcjs.validateSelection.call(void 0, doc, schema, _chunkHOIDJEVIcjs.textSelection.call(void 0, from, to));
243
+ }
244
+
245
+ // src/extensions/presence/presence-session.ts
246
+ var THROTTLE_MS = 50;
247
+ var IDLE_MS = 2e3;
248
+ var COLOR = /^(#[\da-f]{3,8}|[a-z]+|(rgba?|hsla?|hwb|lab|lch|oklab|oklch)\([\d\s.,%/+-]*\))$/i;
249
+ var safeColor = (value) => typeof value === "string" && COLOR.test(value) ? value : void 0;
250
+ var userOf = (state) => {
251
+ const { user } = state;
252
+ return typeof user === "object" && user !== null && typeof user.name === "string" ? user : null;
253
+ };
254
+ var namedBy = /* @__PURE__ */ new WeakMap();
255
+ function startPresence(editor, collaboration, awareness, link, sharedOf2) {
256
+ const { doc, user } = collaboration;
257
+ const seen = /* @__PURE__ */ new Map();
258
+ let heard = false;
259
+ let writing = false;
260
+ let timer;
261
+ let dirty = false;
262
+ const bound = sharedOf2() !== null;
263
+ const put = (field, value) => {
264
+ if (!bound) return;
265
+ writing = true;
266
+ try {
267
+ awareness.setLocalStateField(field, value);
268
+ } finally {
269
+ writing = false;
270
+ }
271
+ };
272
+ const write = (selection) => put("selection", selection);
273
+ const tick = () => {
274
+ timer = void 0;
275
+ if (!dirty || !link.active) return;
276
+ dirty = false;
277
+ const shared = sharedOf2();
278
+ write(shared === null ? null : toAware(shared, editor.state.selection));
279
+ timer = setTimeout(tick, THROTTLE_MS);
280
+ };
281
+ const schedule = () => {
282
+ dirty = true;
283
+ timer ??= setTimeout(tick, 0);
284
+ };
285
+ const refresh = () => {
286
+ const before = _chunkHOIDJEVIcjs.getPluginState.call(void 0, editor.state, presenceKey);
287
+ const peers = [];
288
+ const joined = [];
289
+ const gone = new Set(seen.keys());
290
+ for (const [client, state] of awareness.getStates()) {
291
+ const found = client === awareness.clientID ? null : userOf(state);
292
+ if (found === null) continue;
293
+ gone.delete(client);
294
+ const key = JSON.stringify(_nullishCoalesce(state.selection, () => ( null)));
295
+ let known = seen.get(client);
296
+ if (known === void 0 && heard) joined.push({ client, name: found.name });
297
+ if (_optionalChain([known, 'optionalAccess', _12 => _12.key]) !== key) {
298
+ clearTimeout(_optionalChain([known, 'optionalAccess', _13 => _13.timer]));
299
+ const fresh = { name: found.name, key, idle: false };
300
+ fresh.timer = setTimeout(() => {
301
+ fresh.idle = true;
302
+ refresh();
303
+ }, IDLE_MS);
304
+ seen.set(client, known = fresh);
305
+ }
306
+ const selection = fromAware(sharedOf2(), editor.state.doc, editor.state.schema, state.selection);
307
+ const peer = { client, name: found.name, color: safeColor(found.color), selection, idle: known.idle };
308
+ peers.push(_nullishCoalesce(before.find((last) => samePeer(last, peer)), () => ( peer)));
309
+ }
310
+ const left = [...gone].map((client) => {
311
+ const { name, timer: idle } = seen.get(client);
312
+ clearTimeout(idle);
313
+ seen.delete(client);
314
+ return { client, name };
315
+ });
316
+ if (heard && joined.length + left.length > 0)
317
+ for (const listener of [...link.listeners]) listener({ joined, left });
318
+ heard = true;
319
+ if (samePeers(peers, before)) return;
320
+ editor.dispatch(_chunkMLRAVUFGcjs.sharedChange.call(void 0, editor, []).setMeta(PRESENCE, peers));
321
+ };
322
+ const changed = () => {
323
+ if (!writing) refresh();
324
+ };
325
+ const afterTransaction = (transaction) => {
326
+ if (!transaction.local && seen.size > 0) refresh();
327
+ };
328
+ const stopEditor = editor.subscribe((state, tr) => {
329
+ if (tr !== null && tr.origin !== "remote" && !_chunkHOIDJEVIcjs.sameSelection.call(void 0, tr.before.selection, state.selection)) schedule();
330
+ });
331
+ put("user", { name: user.name, color: user.color });
332
+ write(null);
333
+ awareness.on("change", changed);
334
+ doc.on("afterTransaction", afterTransaction);
335
+ refresh();
336
+ if (link.active) schedule();
337
+ const session = {
338
+ activeChanged() {
339
+ if (link.active) return schedule();
340
+ clearTimeout(timer);
341
+ timer = void 0;
342
+ write(null);
343
+ },
344
+ stop() {
345
+ awareness.off("change", changed);
346
+ doc.off("afterTransaction", afterTransaction);
347
+ stopEditor();
348
+ clearTimeout(timer);
349
+ for (const { timer: idle } of seen.values()) clearTimeout(idle);
350
+ write(null);
351
+ queueMicrotask(() => {
352
+ if (namedBy.get(awareness) === session) put("user", null);
353
+ });
354
+ }
355
+ };
356
+ if (bound) namedBy.set(awareness, session);
357
+ return session;
358
+ }
359
+
360
+ // src/extensions/presence/RemoteCarets.tsx
361
+
362
+
363
+ // src/extensions/presence/place-caret.ts
364
+ function caretBox(host, offset) {
365
+ const map = _chunk5M4QG3ZCcjs.domMapOf.call(void 0, host);
366
+ if (!map || !host.isConnected) return null;
367
+ const doc = host.ownerDocument;
368
+ const spans = [
369
+ [offset, offset, "start"],
370
+ [offset - 1, offset, "end"],
371
+ [offset, offset + 1, "start"]
372
+ ];
373
+ for (const [from, to, side] of spans) {
374
+ if (from < 0 || to > map.length) continue;
375
+ const range = doc.createRange();
376
+ const start = map.toDom(from, from === to ? -1 : 1);
377
+ const end = map.toDom(to, -1);
378
+ range.setStart(start.node, start.offset);
379
+ range.setEnd(end.node, end.offset);
380
+ const rects = range.getClientRects();
381
+ const rect = side === "end" ? rects[rects.length - 1] : rects[0];
382
+ if (rect === void 0) continue;
383
+ return new DOMRect(side === "end" ? rect.right : rect.left, rect.top, 0, rect.height);
384
+ }
385
+ const box = host.getBoundingClientRect();
386
+ return new DOMRect(box.left, box.top, 0, box.height);
387
+ }
388
+ function inside(box, area) {
389
+ return box.left >= area.left && box.left <= area.right && box.bottom > area.top && box.top < area.bottom;
390
+ }
391
+ function placeCaret(controller, root, caret, observer) {
392
+ const client = Number(caret.dataset.client);
393
+ const peer = _chunkHOIDJEVIcjs.getPluginState.call(void 0, controller.editor.state, presenceKey).find((one) => one.client === client);
394
+ const head = _optionalChain([peer, 'optionalAccess', _14 => _14.selection, 'optionalAccess', _15 => _15.kind]) === "text" ? peer.selection.head : null;
395
+ const host = head && controller.registry.get(head.block, head.region);
396
+ const box = host ? caretBox(host, head.offset) : null;
397
+ const areas = host ? _chunkLE5XMIFJcjs.clipBoxes.call(void 0, host, root) : [];
398
+ const shown = box !== null && areas.every((area) => inside(box, area));
399
+ caret.style.visibility = shown ? "" : "hidden";
400
+ if (!shown) return;
401
+ observer.observe(host);
402
+ const origin = root.getBoundingClientRect();
403
+ const scale = origin.width / root.offsetWidth || 1;
404
+ const left = (box.left - origin.left) / scale - root.clientLeft + root.scrollLeft;
405
+ const top = (box.top - origin.top) / scale - root.clientTop + root.scrollTop;
406
+ caret.style.transform = `translate(${left}px, ${top}px)`;
407
+ caret.style.height = `${box.height / scale}px`;
408
+ const cut = (past) => `${Math.max(...areas.map(past)) / scale + 1}px`;
409
+ caret.style.clipPath = areas[0] ? `inset(-99px ${cut((a) => box.left - a.right)} -99px ${cut((a) => a.left - box.left)})` : "";
410
+ }
411
+
412
+ // src/extensions/presence/RemoteCarets.tsx
413
+
414
+ var shownOf = (state) => _chunkHOIDJEVIcjs.getPluginState.call(void 0, state, presenceKey).flatMap(
415
+ ({ client, name, color, idle, selection }) => _optionalChain([selection, 'optionalAccess', _16 => _16.kind]) === "text" ? [{ client, name, color, idle }] : []
416
+ );
417
+ function RemoteCarets({ controller, labels }) {
418
+ const shown = _chunk5M4QG3ZCcjs.useEditorState.call(void 0, controller, shownOf, _chunkXX5FTPJRcjs.sameValue);
419
+ const box = _react.useRef.call(void 0, null);
420
+ _chunk5M4QG3ZCcjs.useIsomorphicLayoutEffect.call(void 0, () => {
421
+ const root = controller.root;
422
+ if (!root || box.current === null) return void 0;
423
+ const carets = Array.from(box.current.children);
424
+ return followLayout(controller, root, (observer) => carets.forEach((caret) => placeCaret(controller, root, caret, observer)));
425
+ }, [controller, shown]);
426
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: box, className: "quoin-presence-carets", "aria-hidden": "true", children: shown.map(({ client, name, color, idle }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
427
+ "div",
428
+ {
429
+ "data-client": client,
430
+ "data-idle": idle ? "" : void 0,
431
+ className: "quoin-presence-caret",
432
+ style: color === void 0 ? void 0 : { "--quoin-presence": color },
433
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "quoin-presence-name", children: labels.caret(name) })
434
+ },
435
+ client
436
+ )) });
437
+ }
438
+
439
+ // src/extensions/presence/use-presence-activity.ts
440
+
441
+ function usePresenceActivity(controller, link) {
442
+ _react.useEffect.call(void 0, () => {
443
+ const doc = _optionalChain([controller, 'access', _17 => _17.root, 'optionalAccess', _18 => _18.ownerDocument]);
444
+ if (!doc) return void 0;
445
+ let focused = _chunkCLTHD5GOcjs.ownsNode.call(void 0, controller, doc.activeElement);
446
+ const update = () => setActive(link, focused && !controller.readOnly);
447
+ const stopFocus = _chunkCLTHD5GOcjs.watchCanvasFocus.call(void 0, controller, doc, (inside2) => {
448
+ focused = inside2;
449
+ update();
450
+ });
451
+ const stopReadOnly = controller.subscribeReadOnly(update);
452
+ update();
453
+ return () => {
454
+ stopFocus();
455
+ stopReadOnly();
456
+ setActive(link, false);
457
+ };
458
+ }, [controller, link]);
459
+ }
460
+
461
+ // src/extensions/presence/use-presence-announcements.ts
462
+
463
+
464
+ // src/extensions/presence/presence-announcements.ts
465
+ var PRESENCE_ANNOUNCEMENT_MS = 3e3;
466
+ var GROUP_MS = 500;
467
+ function createPresenceAnnouncer(announce, labels) {
468
+ const people = /* @__PURE__ */ new Map();
469
+ let waiting = { joined: [], left: [] };
470
+ let group;
471
+ const flush = () => {
472
+ group = void 0;
473
+ const { joined, left } = waiting;
474
+ waiting = { joined: [], left: [] };
475
+ announce(
476
+ [joined.length > 0 && labels.joined(joined), left.length > 0 && labels.left(left)].filter(Boolean).join(". ")
477
+ );
478
+ };
479
+ const say = (known, kind) => {
480
+ known.said = kind;
481
+ known.at = Date.now();
482
+ waiting[kind].push(known.name);
483
+ group ??= setTimeout(flush, GROUP_MS);
484
+ };
485
+ const note = ({ client, name }, kind) => {
486
+ const known = people.get(client);
487
+ const wait = known === void 0 ? 0 : known.at + PRESENCE_ANNOUNCEMENT_MS - Date.now();
488
+ if (known === void 0 || wait <= 0) {
489
+ clearTimeout(_optionalChain([known, 'optionalAccess', _19 => _19.later]));
490
+ const fresh = _nullishCoalesce(known, () => ( { name, said: kind, at: 0 }));
491
+ people.set(client, fresh);
492
+ return say(fresh, kind);
493
+ }
494
+ clearTimeout(known.later);
495
+ known.later = kind === known.said ? void 0 : setTimeout(() => say(known, kind), wait);
496
+ };
497
+ return {
498
+ hear({ joined, left }) {
499
+ for (const person of joined) note(person, "joined");
500
+ for (const person of left) note(person, "left");
501
+ },
502
+ stop() {
503
+ clearTimeout(group);
504
+ for (const { later } of people.values()) clearTimeout(later);
505
+ }
506
+ };
507
+ }
508
+
509
+ // src/extensions/presence/use-presence-announcements.ts
510
+ function usePresenceAnnouncements(controller, link, labels) {
511
+ _react.useEffect.call(void 0, () => {
512
+ const announcer = createPresenceAnnouncer((message) => controller.announce(message), labels);
513
+ const listener = (change) => announcer.hear(change);
514
+ link.listeners.add(listener);
515
+ return () => {
516
+ link.listeners.delete(listener);
517
+ announcer.stop();
518
+ };
519
+ }, [controller, link, labels]);
520
+ }
521
+
522
+ // src/extensions/presence/presence-extension.tsx
523
+
524
+ var UNBOUND = "presenceExtension shares nothing without collaborationExtension.";
525
+ function presenceExtension(collaboration, options = {}) {
526
+ const { awareness } = collaboration;
527
+ if (awareness === void 0) throw new Error("presenceExtension needs yjsCollaboration({ awareness })");
528
+ const labels = resolvePresenceLabels(options.labels);
529
+ function Overlay({ controller }) {
530
+ const link = linkOf(controller.editor);
531
+ usePresenceActivity(controller, link);
532
+ usePresenceAnnouncements(controller, link, labels);
533
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
534
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, RemoteCarets, { controller, labels }),
535
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PresenceAvatars, { controller, labels })
536
+ ] });
537
+ }
538
+ const ui = { overlays: [Overlay] };
539
+ return _chunkHOIDJEVIcjs.defineExtension.call(void 0, {
540
+ name: "presence",
541
+ // Below the default, so the collaboration it reads has connected before it starts.
542
+ priority: 99,
543
+ plugins: [presencePlugin],
544
+ decorations: presenceDecorations,
545
+ onMount(editor) {
546
+ const link = linkOf(editor);
547
+ if (_chunkMLRAVUFGcjs.sharedOf.call(void 0, collaboration, editor) === null) _chunkEH5KXQXYcjs.devWarn.call(void 0, UNBOUND);
548
+ const session = startPresence(editor, collaboration, awareness, link, () => _chunkMLRAVUFGcjs.sharedOf.call(void 0, collaboration, editor));
549
+ link.session = session;
550
+ return () => {
551
+ session.stop();
552
+ if (link.session === session) link.session = null;
553
+ };
554
+ },
555
+ ui
556
+ });
557
+ }
558
+
559
+
560
+
561
+ exports.englishPresenceLabels = englishPresenceLabels; exports.presenceExtension = presenceExtension;
562
+ //# sourceMappingURL=presence.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["presence.cjs","../src/extensions/presence/PresenceAvatars.tsx","../src/extensions/presence/follow-layout.ts","../src/extensions/presence/presence-plugin.ts","../src/extensions/presence/presence-decorations.ts","../src/extensions/presence/presence-labels.ts","../src/extensions/presence/presence-link.ts","../src/yjs/awareness.ts","../src/extensions/presence/presence-session.ts","../src/extensions/presence/RemoteCarets.tsx","../src/extensions/presence/place-caret.ts","../src/extensions/presence/use-presence-activity.ts","../src/extensions/presence/use-presence-announcements.ts","../src/extensions/presence/presence-announcements.ts","../src/extensions/presence/presence-extension.tsx"],"names":["place","sharedOf","inside"],"mappings":"AAAA,+8BAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACA;AC7CA,8BAA2C;AD+C3C;AACA;AExCO,SAAS,YAAA,CACd,UAAA,EACA,IAAA,EACAA,MAAAA,EACY;AACZ,EAAA,MAAM,KAAA,EAAO,IAAA,CAAK,aAAA,CAAc,WAAA;AAChC,EAAA,IAAI,MAAA,EAAQ,CAAA;AACZ,EAAA,MAAM,OAAA,EAAS,CAAA,EAAA,GAAMA,MAAAA,CAAM,QAAQ,CAAA;AACnC,EAAA,MAAM,MAAA,EAAQ,CAAA,EAAA,GAAM;AAClB,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAC/B,IAAA,MAAA,EAAQ,IAAA,CAAK,qBAAA,CAAsB,MAAM,CAAA;AAAA,EAC3C,CAAA;AACA,EAAA,MAAM,SAAA,EAAW,IAAI,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,MAAA,CAAO,CAAA;AACP,EAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACrB,EAAA,MAAM,YAAA,EAAc,UAAA,CAAW,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AACrD,EAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,aAAA,CAAc,KAAA;AACjC,EAAA,MAAM,eAAA,EAAiB,sCAAA,IAAO,EAAM,EAAE,MAAA,EAAQ,OAAO,CAAA,EAAG,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AACxF,EAAA,MAAM,cAAA,EAAgB,MAAA,GAAS,sCAAA,KAAO,EAAO,EAAE,WAAA,EAAa,MAAM,CAAC,CAAA;AACnE,EAAA,OAAO,CAAA,EAAA,GAAM;AACX,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAC/B,IAAA,WAAA,CAAY,CAAA;AACZ,IAAA,QAAA,CAAS,UAAA,CAAW,CAAA;AACpB,IAAA,cAAA,CAAe,CAAA;AACf,oBAAA,aAAA,wBAAA,CAAgB,GAAA;AAAA,EAClB,CAAA;AACF;AFsCA;AACA;AG5DO,IAAM,YAAA,EAAc,+CAAA,UAA2C,CAAA;AAG/D,IAAM,SAAA,EAAW,UAAA;AAEjB,IAAM,SAAA,EAAW,CAAC,CAAA,EAAS,CAAA,EAAA,GAChC,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,GACf,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,KAAA,GACb,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,GACd,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,KAAA,GACb,6CAAA,CAAc,CAAE,SAAA,EAAW,CAAA,CAAE,SAAS,CAAA;AAEjC,IAAM,UAAA,EAAY,CAAC,CAAA,EAAoB,CAAA,EAAA,GAAgC,yCAAA,CAAU,EAAG,CAAA,EAAG,QAAQ,CAAA;AAEtG,IAAM,SAAA,EAA4B,CAAC,CAAA;AAI5B,IAAM,eAAA,EAA8C;AAAA,EACzD,GAAA,EAAK,WAAA;AAAA,EACL,IAAA,EAAM,CAAA,EAAA,GAAM,QAAA;AAAA,EACZ,KAAA,CAAM,EAAA,EAAI,KAAA,EAAO;AACf,IAAA,MAAM,MAAA,EAAQ,EAAA,CAAG,OAAA,CAAyB,QAAQ,CAAA;AAClD,IAAA,GAAA,CAAI,MAAA,IAAU,KAAA,CAAA,EAAW,OAAO,KAAA;AAChC,IAAA,GAAA,CAAI,CAAC,EAAA,CAAG,UAAA,EAAY,OAAO,KAAA;AAC3B,IAAA,IAAI,MAAA,EAAQ,KAAA;AACZ,IAAA,MAAM,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS;AAC/B,MAAA,MAAM,UAAA,EAAY,IAAA,CAAK,UAAA,GAAa,4CAAA,IAAa,CAAK,SAAA,EAAW,CAAC,GAAA,EAAA,GAAQ,EAAA,CAAG,MAAA,CAAO,GAAA,EAAK,CAAA,CAAE,CAAA,EAAG,EAAA,CAAG,MAAA,CAAO,GAAG,CAAA;AAC3G,MAAA,GAAA,CAAI,UAAA,IAAc,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA;AACzC,MAAA,MAAA,EAAQ,IAAA;AACR,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,UAAU,CAAA;AAAA,IAC9B,CAAC,CAAA;AACD,IAAA,OAAO,MAAA,EAAQ,KAAA,EAAO,KAAA;AAAA,EACxB;AACF,CAAA;AHiDA;AACA;AClCY,+CAAA;AArDZ,IAAM,SAAA,EAAW,CAAC,IAAA,EAAA,GAChB,IAAA,CACG,IAAA,CAAK,CAAA,CACL,KAAA,CAAM,KAAK,CAAA,CACX,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,GAAA,CAAI,CAAC,IAAA,EAAA,oCAAS,KAAA,qBAAM,IAAA,mBAAK,IAAI,CAAA,qBAAE,CAAC,CAAA,6BAAG,WAAA,mBAAY,GAAA,UAAK,IAAE,CAAA,CACtD,IAAA,CAAK,EAAE,CAAA;AAKZ,SAAS,QAAA,CAAS,KAAA,EAAsC;AACtD,EAAA,MAAM,QAAA,kBAAU,IAAI,GAAA,CAAuD,CAAA;AAC3E,EAAA,IAAA,CAAA,MAAW,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,UAAU,EAAA,GAAK,8CAAA,KAAe,EAAO,WAAW,CAAA,EAAG;AACnF,IAAA,GAAA,CAAI,UAAA,IAAc,IAAA,EAAM,QAAA;AACxB,IAAA,MAAM,MAAA,EAAQ,2CAAA,SAAqB,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,CAAC,oBAAI,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,UAAK,CAAC,GAAA,EAAI,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAC,CAAC,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,CAAC,GAAG,OAAO,CAAA;AACpB;AAEA,SAAS,KAAA,CAAM,UAAA,EAA4B,IAAA,EAAmB,KAAA,EAA0B;AACtF,EAAA,MAAM,MAAA,EAAQ,UAAA,CAAW,YAAA,kBAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,UAAS,IAAE,CAAA;AAC/D,EAAA,KAAA,CAAM,KAAA,CAAM,WAAA,EAAa,MAAA,IAAU,KAAA,EAAA,EAAY,SAAA,EAAW,EAAA;AAC1D,EAAA,GAAA,CAAI,MAAA,IAAU,KAAA,CAAA,EAAW,MAAA;AACzB,EAAA,MAAM,IAAA,EAAM,KAAA,CAAM,qBAAA,CAAsB,CAAA,CAAE,IAAA,EAAM,IAAA,CAAK,qBAAA,CAAsB,CAAA,CAAE,IAAA,EAAM,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,SAAA;AACzG,EAAA,KAAA,CAAM,KAAA,CAAM,UAAA,EAAY,CAAA,WAAA,EAAc,GAAG,CAAA,GAAA,CAAA;AAC3C;AAGO,SAAS,eAAA,CAAgB,EAAE,UAAA,EAAY,OAAO,CAAA,EAA2D;AAC9G,EAAA,MAAM,OAAA,EAAS,8CAAA,UAAe,EAAY,QAAA,EAAU,2BAAS,CAAA;AAC7D,EAAA,MAAM,IAAA,EAAM,2BAAA,IAA2B,CAAA;AAGvC,EAAA,yDAAA,CAA0B,EAAA,GAAM;AAC9B,IAAA,MAAM,KAAA,EAAO,UAAA,CAAW,IAAA;AACxB,IAAA,GAAA,CAAI,CAAC,KAAA,GAAQ,GAAA,CAAI,QAAA,IAAY,IAAA,EAAM,OAAO,KAAA,CAAA;AAC1C,IAAA,MAAM,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AAChD,IAAA,OAAO,YAAA,CAAa,UAAA,EAAY,IAAA,EAAM,CAAA,EAAA,GAAM,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAA,GAAU,KAAA,CAAM,UAAA,EAAY,IAAA,EAAM,KAAK,CAAC,CAAC,CAAA;AAAA,EACzG,CAAA,EAAG,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AAEvB,EAAA,uBACE,6BAAA,KAAC,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,SAAA,EAAU,wBAAA,EACtB,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,MAAM,CAAA,EAAA,mBACzB,6BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MAEC,YAAA,EAAY,KAAA;AAAA,MACZ,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,KAAK,CAAA,EAAA,GAAM,IAAI,CAAC,CAAA;AAAA,MACtD,SAAA,EAAU,sBAAA;AAAA,MAET,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAA,EAAA,mBACjC,6BAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO,MAAA,IAAU,KAAA,EAAA,EAAY,KAAA,EAAA,EAAa,EAAE,kBAAA,EAAoB,MAAM,CAAA;AAAA,UAErE,QAAA,EAAA,QAAA,CAAS,IAAI;AAAA,QAAA,CAAA;AAAA,QAJT;AAAA,MAKP,CACD;AAAA,IAAA,CAAA;AAAA,IAdI;AAAA,EAeP,CACD,EAAA,CACH,CAAA;AAEJ;ADsEA;AACA;AI9IA,SAAS,MAAA,CAAO,KAAA,EAAoB,EAAE,KAAA,EAAO,UAAU,CAAA,EAAgC;AACrF,EAAA,GAAA,iBAAI,SAAA,6BAAW,OAAA,IAAS,MAAA,EAAQ,OAAO,CAAC,CAAA;AACxC,EAAA,GAAA,CAAI,CAAC,CAAC,SAAA,CAAU,MAAA,EAAQ,SAAA,CAAU,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,EAAE,MAAM,CAAA,EAAA,GAAM,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,OAAO,CAAC,CAAA;AAClG,EAAA,MAAM,MAAA,EAAgC,EAAE,KAAA,EAAO,2BAA2B,CAAA;AAC1E,EAAA,GAAA,CAAI,MAAA,IAAU,KAAA,CAAA,EAAW,KAAA,CAAM,MAAA,EAAQ,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAA;AACS,EAAA;AAC3E;AAGiG;AAEjB;AACnD,EAAA;AACc,EAAA;AACH,EAAA;AACS,EAAA;AACxC,EAAA;AACT;AAG+E;AACjB,EAAA;AAC9D;AJ2IgE;AACA;AKzJvB;AAEY;AAClB,EAAA;AACF,EAAA;AACyB,EAAA;AACvC,EAAA;AACnB;AAG2F;AAC3B,EAAA;AACL,EAAA;AAC3D;ALwJgE;AACA;AMnKhB;AAEK;AACxB,EAAA;AACH,EAAA;AAC4B,IAAA;AAC5B,IAAA;AACxB,EAAA;AACO,EAAA;AACT;AAEqE;AACvC,EAAA;AACd,EAAA;AACc,kBAAA;AAC9B;ANmKgE;AACA;AOnM7C;AAuBmC;AAChD,EAAA;AACK,IAAA;AACF,MAAA;AACiD,MAAA;AACtD,IAAA;AACM,EAAA;AACC,IAAA;AACT,EAAA;AACF;AAE4F;AAC3D,EAAA;AACA,EAAA;AACtB,IAAA;AACoC,MAAA;AACJ,MAAA;AACvC,IAAA;AACF,EAAA;AAEyC,EAAA;AACiB,EAAA;AAC5D;AAGyB;AAG2E;AAClD,EAAA;AAC1C,IAAA;AACmD,MAAA;AAC1B,MAAA;AACrB,IAAA;AAER,IAAA;AACF,EAAA;AAC2B,EAAA;AACK,EAAA;AACoB,EAAA;AACU,EAAA;AAChE;AAGmH;AACpD,EAAA;AACpC,EAAA;AACqC,EAAA;AACL,IAAA;AACd,IAAA;AACE,IAAA;AAC7C,EAAA;AAC0D,EAAA;AACb,EAAA;AAC/C;APsKgE;AACA;AQxO5C;AACJ;AAGF;AAC4D;AAGV;AAC7C,EAAA;AAC2C,EAAA;AAC9D;AAGkD;AAehDC;AAEsB,EAAA;AACa,EAAA;AACvB,EAAA;AACE,EAAA;AACV,EAAA;AACQ,EAAA;AAGiB,EAAA;AAEkB,EAAA;AACjC,IAAA;AACF,IAAA;AACN,IAAA;AACuC,MAAA;AACzC,IAAA;AACU,MAAA;AACZ,IAAA;AACF,EAAA;AACgE,EAAA;AAC7C,EAAA;AACT,IAAA;AACoB,IAAA;AACpB,IAAA;AACgB,IAAA;AACoC,IAAA;AACxB,IAAA;AACtC,EAAA;AACuB,EAAA;AACb,IAAA;AACoB,IAAA;AAC9B,EAAA;AAEsB,EAAA;AACmC,IAAA;AAChC,IAAA;AACG,IAAA;AACM,IAAA;AACqB,IAAA;AACE,MAAA;AACjC,MAAA;AACF,MAAA;AACgC,MAAA;AACvB,MAAA;AAC6B,MAAA;AAChC,MAAA;AACG,QAAA;AACgC,QAAA;AAC1B,QAAA;AAChB,UAAA;AACL,UAAA;AACA,QAAA;AACsB,QAAA;AAClC,MAAA;AACqD,MAAA;AACK,MAAA;AAEA,MAAA;AAC5D,IAAA;AACuC,IAAA;AACQ,MAAA;AAC5B,MAAA;AACC,MAAA;AACI,MAAA;AACvB,IAAA;AAC0C,IAAA;AACc,MAAA;AACjD,IAAA;AACsB,IAAA;AAC6B,IAAA;AAC7D,EAAA;AACsB,EAAA;AACE,IAAA;AACxB,EAAA;AACyD,EAAA;AACN,IAAA;AACnD,EAAA;AACmD,EAAA;AACW,IAAA;AAC7D,EAAA;AAEiD,EAAA;AACxC,EAAA;AACoB,EAAA;AACa,EAAA;AACnC,EAAA;AACkB,EAAA;AACO,EAAA;AACf,IAAA;AACmB,MAAA;AACf,MAAA;AACV,MAAA;AACE,MAAA;AACZ,IAAA;AACO,IAAA;AAC0B,MAAA;AACa,MAAA;AACjC,MAAA;AACO,MAAA;AACwC,MAAA;AAChD,MAAA;AAEW,MAAA;AACqC,QAAA;AACzD,MAAA;AACH,IAAA;AACF,EAAA;AACyC,EAAA;AAClC,EAAA;AACT;AR8MgE;AACA;ASvWrB;ATyWqB;AACA;AUpWK;AAC1C,EAAA;AACa,EAAA;AACrB,EAAA;AACkC,EAAA;AACzB,IAAA;AACE,IAAA;AACE,IAAA;AAC9B,EAAA;AACsC,EAAA;AACH,IAAA;AACH,IAAA;AACoB,IAAA;AACtB,IAAA;AACW,IAAA;AACN,IAAA;AACE,IAAA;AACqB,IAAA;AAChC,IAAA;AACoC,IAAA;AAC9D,EAAA;AACuC,EAAA;AACY,EAAA;AACrD;AAEsD;AACU,EAAA;AAChE;AAaE;AAC0C,EAAA;AACW,EAAA;AACA,EAAA;AACS,EAAA;AACJ,EAAA;AACZ,EAAA;AACa,EAAA;AACrB,EAAA;AAC1B,EAAA;AACU,EAAA;AACoB,EAAA;AACO,EAAA;AACI,EAAA;AACS,EAAA;AACX,EAAA;AACT,EAAA;AACyC,EAAA;AACvB,EAAA;AAC9D;AVyVgE;AACA;ASjXtD;AA7B2B;AACtB,EAAA;AACb;AAM2G;AAChD,EAAA;AACpB,EAAA;AAEP,EAAA;AACN,IAAA;AACkB,IAAA;AACI,IAAA;AACa,IAAA;AACvC,EAAA;AAGK,EAAA;AAEpB,IAAA;AAAA,IAAA;AAEc,MAAA;AACU,MAAA;AACb,MAAA;AACsD,MAAA;AAEhD,MAAA;AAA0C,IAAA;AANrD,IAAA;AASX,EAAA;AAEJ;ATsYgE;AACA;AWtbtC;AAMgE;AACxE,EAAA;AACe,IAAA;AACZ,IAAA;AACmC,IAAA;AACQ,IAAA;AACPC,IAAAA;AACzCA,MAAAA;AACH,MAAA;AACR,IAAA;AACuD,IAAA;AACjD,IAAA;AACM,IAAA;AACD,MAAA;AACG,MAAA;AACQ,MAAA;AACvB,IAAA;AACmB,EAAA;AACvB;AXmbgE;AACA;AY5ctC;AZ8csC;AACA;Aa3cxB;AACvB;AAiBI;AACmB,EAAA;AACuB,EAAA;AACzD,EAAA;AACgB,EAAA;AACV,IAAA;AACiB,IAAA;AACQ,IAAA;AACjC,IAAA;AACoD,MAAA;AACpD,IAAA;AACF,EAAA;AAC0C,EAAA;AAC3B,IAAA;AACO,IAAA;AACS,IAAA;AACO,IAAA;AACtC,EAAA;AACuD,EAAA;AACtB,IAAA;AACmB,IAAA;AACZ,IAAA;AACX,MAAA;AACwB,MAAA;AACzB,MAAA;AACF,MAAA;AACxB,IAAA;AACwB,IAAA;AACmC,IAAA;AAC7D,EAAA;AACO,EAAA;AACkB,IAAA;AAC6B,MAAA;AACJ,MAAA;AAChD,IAAA;AACO,IAAA;AACa,MAAA;AACoC,MAAA;AACxD,IAAA;AACF,EAAA;AACF;Ab6bgE;AACA;AYrfuD;AACrG,EAAA;AACyC,IAAA;AACS,IAAA;AACrC,IAAA;AACd,IAAA;AACmB,MAAA;AACf,MAAA;AACjB,IAAA;AAC2B,EAAA;AAC/B;AZufgE;AACA;Acle1D;AArBU;AAY6F;AACrF,EAAA;AACuB,EAAA;AACM,EAAA;AACc,EAAA;AAC1B,IAAA;AACD,IAAA;AACa,IAAA;AAG7C,IAAA;AAAsD,sBAAA;AACb,sBAAA;AAC3C,IAAA;AAEJ,EAAA;AAC8C,EAAA;AACvB,EAAA;AACf,IAAA;AAAA;AAEI,IAAA;AACc,IAAA;AACX,IAAA;AACG,IAAA;AACY,MAAA;AAC4B,MAAA;AACD,MAAA;AACtC,MAAA;AACF,MAAA;AACE,QAAA;AACgC,QAAA;AAC/C,MAAA;AACF,IAAA;AACA,IAAA;AACD,EAAA;AACH;Ad6egE;AACA;AACA;AACA","file":"/home/runner/work/quoin-editor/quoin-editor/dist/presence.cjs"}
@@ -0,0 +1,30 @@
1
+ import { E as Extension } from './types-CJ7Gq3GX.cjs';
2
+ import { Y as YjsCollaboration } from './index-CFPmCee4.cjs';
3
+ import './types-DULc8wwg.cjs';
4
+ import 'yjs';
5
+
6
+ /** Every string presence shows or speaks. Names come as a list of the people meant, in the order they came. */
7
+ type PresenceLabels = {
8
+ /** Said through the live region when people open the document. */
9
+ joined(names: readonly string[]): string;
10
+ /** Said when people close it. */
11
+ left(names: readonly string[]): string;
12
+ /** The accessible name of the avatars beside a block, naming the people whose selection is in it. */
13
+ here(names: readonly string[]): string;
14
+ /** The text a collaborator's caret shows, given the name the collaborator gave. */
15
+ caret(name: string): string;
16
+ };
17
+ declare const englishPresenceLabels: PresenceLabels;
18
+
19
+ type PresenceOptions = {
20
+ /** Every string presence shows or speaks, English by default. A key left out stays English. */
21
+ labels?: Partial<PresenceLabels>;
22
+ };
23
+ /**
24
+ * Shows the collaborators that the awareness of `collaboration` knows: their selections tinted with their colour, their
25
+ * carets with their names, avatars beside the blocks they are in, and who joins and leaves through the live region.
26
+ * This editor's selection is shared while it is focused and editable.
27
+ */
28
+ declare function presenceExtension(collaboration: YjsCollaboration, options?: PresenceOptions): Extension;
29
+
30
+ export { type PresenceLabels, type PresenceOptions, englishPresenceLabels, presenceExtension };
@@ -0,0 +1,30 @@
1
+ import { E as Extension } from './types-C6_QkXzy.js';
2
+ import { Y as YjsCollaboration } from './index-DiCGV60d.js';
3
+ import './types-DULc8wwg.js';
4
+ import 'yjs';
5
+
6
+ /** Every string presence shows or speaks. Names come as a list of the people meant, in the order they came. */
7
+ type PresenceLabels = {
8
+ /** Said through the live region when people open the document. */
9
+ joined(names: readonly string[]): string;
10
+ /** Said when people close it. */
11
+ left(names: readonly string[]): string;
12
+ /** The accessible name of the avatars beside a block, naming the people whose selection is in it. */
13
+ here(names: readonly string[]): string;
14
+ /** The text a collaborator's caret shows, given the name the collaborator gave. */
15
+ caret(name: string): string;
16
+ };
17
+ declare const englishPresenceLabels: PresenceLabels;
18
+
19
+ type PresenceOptions = {
20
+ /** Every string presence shows or speaks, English by default. A key left out stays English. */
21
+ labels?: Partial<PresenceLabels>;
22
+ };
23
+ /**
24
+ * Shows the collaborators that the awareness of `collaboration` knows: their selections tinted with their colour, their
25
+ * carets with their names, avatars beside the blocks they are in, and who joins and leaves through the live region.
26
+ * This editor's selection is shared while it is focused and editable.
27
+ */
28
+ declare function presenceExtension(collaboration: YjsCollaboration, options?: PresenceOptions): Extension;
29
+
30
+ export { type PresenceLabels, type PresenceOptions, englishPresenceLabels, presenceExtension };