@pstdio/ui 0.3.0 → 0.3.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.
@@ -8,7 +8,7 @@ export default meta;
8
8
  export declare const Overview: {
9
9
  render: () => import("react/jsx-runtime").JSX.Element;
10
10
  };
11
- export declare const BackgroundForegroundPermutations: {
11
+ export declare const SurfaceCompositions: {
12
12
  name: string;
13
13
  render: () => import("react/jsx-runtime").JSX.Element;
14
14
  };
package/dist/rich-text.js CHANGED
@@ -34,9 +34,9 @@ function re(o, e, n, a = Ye, c = Xe) {
34
34
  e.style.opacity = "0", e.style.transform = "translate(-10000px, -10000px)";
35
35
  return;
36
36
  }
37
- const s = e.getBoundingClientRect(), f = n.getBoundingClientRect(), u = l.getBoundingClientRect();
38
- let p = o.top - a, h = o.left - c;
39
- p < u.top && (p += s.height + o.height + a * 2), h + s.width > u.right && (h = u.right - s.width - c), p -= f.top, h -= f.left, e.style.opacity = "1", e.style.transform = `translate(${h}px, ${p}px)`;
37
+ const s = e.getBoundingClientRect(), m = n.getBoundingClientRect(), f = l.getBoundingClientRect();
38
+ let u = o.top - a, p = o.left - c;
39
+ u < f.top && (u += s.height + o.height + a * 2), p + s.width > f.right && (p = f.right - s.width - c), u -= m.top, p -= m.left, e.style.opacity = "1", e.style.transform = `translate(${p}px, ${u}px)`;
40
40
  }
41
41
  const Qe = -4, Ze = {
42
42
  bullet: "Bulleted List",
@@ -70,7 +70,7 @@ function ot({
70
70
  isToolbarActive: n,
71
71
  setIsToolbarActive: a
72
72
  }) {
73
- const c = G(null), [l, s] = k("paragraph"), [f, u] = k(!1), [p, h] = k(!1), [d, M] = k(!1), g = G(() => {
73
+ const c = G(null), [l, s] = k("paragraph"), [m, f] = k(!1), [u, p] = k(!1), [d, M] = k(!1), h = G(() => {
74
74
  }), I = (r) => {
75
75
  if (l !== r) {
76
76
  o.update(() => {
@@ -90,29 +90,29 @@ function ot({
90
90
  }, v = () => {
91
91
  const r = U();
92
92
  if (!J(r)) return;
93
- u(r.hasFormat("bold")), h(r.hasFormat("italic")), M(r.hasFormat("underline"));
93
+ f(r.hasFormat("bold")), p(r.hasFormat("italic")), M(r.hasFormat("underline"));
94
94
  const i = tt(r.anchor.getNode());
95
95
  i && s(i);
96
96
  };
97
- return g.current = () => {
98
- const r = U(), i = c.current, b = window.getSelection();
97
+ return h.current = () => {
98
+ const r = U(), i = c.current, g = window.getSelection();
99
99
  if (i === null)
100
100
  return;
101
- const m = o.getRootElement();
102
- if (r !== null && J(r) && !r.isCollapsed() && b !== null && !b.isCollapsed && m !== null && m.contains(b.anchorNode) && o.isEditable()) {
103
- const x = b.getRangeAt(0).getBoundingClientRect();
101
+ const b = o.getRootElement();
102
+ if (r !== null && J(r) && !r.isCollapsed() && g !== null && !g.isCollapsed && b?.contains(g.anchorNode) && o.isEditable()) {
103
+ const x = g.getRangeAt(0).getBoundingClientRect();
104
104
  if (x) {
105
105
  const L = new DOMRect(x.left, x.bottom, 0, 0);
106
106
  re(L, i, e, Qe);
107
107
  }
108
108
  a(!0);
109
109
  } else
110
- m !== null && re(null, i, e), a(!1);
110
+ b !== null && re(null, i, e), a(!1);
111
111
  return v(), !0;
112
112
  }, q(() => {
113
113
  const r = e.parentElement, i = () => {
114
114
  o.getEditorState().read(() => {
115
- g.current();
115
+ h.current();
116
116
  });
117
117
  };
118
118
  return window.addEventListener("resize", i), r && r.addEventListener("scroll", i), () => {
@@ -122,16 +122,16 @@ function ot({
122
122
  editorState: r
123
123
  }) => {
124
124
  r.read(() => {
125
- g.current();
125
+ h.current();
126
126
  });
127
- }), o.registerCommand(Ne, (r) => (g.current(), !1), Ae), o.registerCommand(Oe, (r) => {
127
+ }), o.registerCommand(Ne, (r) => (h.current(), !1), Ae), o.registerCommand(Oe, (r) => {
128
128
  const i = U();
129
- return J(i) && g.current(), !1;
129
+ return J(i) && h.current(), !1;
130
130
  }, Fe)), [o]), /* @__PURE__ */ t("div", { ref: c, className: `floating-text-format-toolbar ${n ? "active" : ""}`, children: /* @__PURE__ */ K(Q, { direction: "row", gap: "0.5", alignItems: "center", children: [
131
- /* @__PURE__ */ t(z, { content: "Bold", children: /* @__PURE__ */ t(D, { "data-active": f || void 0, onClick: () => {
131
+ /* @__PURE__ */ t(z, { content: "Bold", children: /* @__PURE__ */ t(D, { "data-active": m || void 0, onClick: () => {
132
132
  o.dispatchCommand(ee, "bold");
133
133
  }, variant: "ghost", "aria-label": "Bold", size: "xs", children: /* @__PURE__ */ t(W, { fontWeight: "bold", fontSize: ".75rem", children: "B" }) }) }),
134
- /* @__PURE__ */ t(z, { content: "Italic", children: /* @__PURE__ */ t(D, { "data-active": p || void 0, onClick: () => {
134
+ /* @__PURE__ */ t(z, { content: "Italic", children: /* @__PURE__ */ t(D, { "data-active": u || void 0, onClick: () => {
135
135
  o.dispatchCommand(ee, "italic");
136
136
  }, variant: "ghost", "aria-label": "Italic", size: "xs", children: /* @__PURE__ */ t(W, { fontStyle: "italic", fontSize: ".75rem", children: "I" }) }) }),
137
137
  /* @__PURE__ */ t(z, { content: "Underline", children: /* @__PURE__ */ t(D, { "data-active": d || void 0, onClick: () => {
@@ -219,26 +219,26 @@ function Ot(o) {
219
219
  wsParams: c,
220
220
  userName: l,
221
221
  userColor: s,
222
- placeholder: f
222
+ placeholder: m
223
223
  } = o;
224
- let u;
225
- e[0] !== c ? (u = c === void 0 ? {} : c, e[0] = c, e[1] = u) : u = e[1];
226
- const p = u, h = l === void 0 ? "Anonymous" : l, d = s === void 0 ? "#30bced" : s, M = G(null), [g, I] = k(null), [P, $] = k(!1), [v] = k(lt);
224
+ let f;
225
+ e[0] !== c ? (f = c === void 0 ? {} : c, e[0] = c, e[1] = f) : f = e[1];
226
+ const u = f, p = l === void 0 ? "Anonymous" : l, d = s === void 0 ? "#30bced" : s, M = G(null), [h, I] = k(null), [P, $] = k(!1), [v] = k(lt);
227
227
  let r;
228
- e[2] !== v || e[3] !== n || e[4] !== p || e[5] !== a ? (r = () => {
228
+ e[2] !== v || e[3] !== n || e[4] !== u || e[5] !== a ? (r = () => {
229
229
  const V = new we(a, n, v, {
230
- params: p,
230
+ params: u,
231
231
  connect: !1
232
232
  });
233
233
  return V.on("sync", (X) => {
234
234
  X && $(!0);
235
235
  }), V;
236
- }, e[2] = v, e[3] = n, e[4] = p, e[5] = a, e[6] = r) : r = e[6];
236
+ }, e[2] = v, e[3] = n, e[4] = u, e[5] = a, e[6] = r) : r = e[6];
237
237
  const [i] = k(r);
238
- let b, m;
239
- e[7] !== i ? (b = () => (i.connect(), () => {
238
+ let g, b;
239
+ e[7] !== i ? (g = () => (i.connect(), () => {
240
240
  i.disconnect();
241
- }), m = [i], e[7] = i, e[8] = b, e[9] = m) : (b = e[8], m = e[9]), q(b, m);
241
+ }), b = [i], e[7] = i, e[8] = g, e[9] = b) : (g = e[8], b = e[9]), q(g, b);
242
242
  let x, L;
243
243
  e[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (x = () => {
244
244
  I(M.current);
@@ -257,17 +257,17 @@ function Ot(o) {
257
257
  e[13] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (B = /* @__PURE__ */ t(it, {}), e[13] = B) : B = e[13];
258
258
  const H = i;
259
259
  let _;
260
- e[14] !== v || e[15] !== n || e[16] !== H || e[17] !== d || e[18] !== h ? (_ = /* @__PURE__ */ t(Se, { id: n, doc: v, provider: H, __shouldBootstrapUnsafe: !1, username: h, cursorColor: d }), e[14] = v, e[15] = n, e[16] = H, e[17] = d, e[18] = h, e[19] = _) : _ = e[19];
260
+ e[14] !== v || e[15] !== n || e[16] !== H || e[17] !== d || e[18] !== p ? (_ = /* @__PURE__ */ t(Se, { id: n, doc: v, provider: H, __shouldBootstrapUnsafe: !1, username: p, cursorColor: d }), e[14] = v, e[15] = n, e[16] = H, e[17] = d, e[18] = p, e[19] = _) : _ = e[19];
261
261
  let N, A, O, S, w;
262
262
  e[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (N = /* @__PURE__ */ t(he, {}), A = /* @__PURE__ */ t(ge, {}), O = /* @__PURE__ */ t(pe, {}), S = /* @__PURE__ */ t(se, {}), w = /* @__PURE__ */ t(ce, {}), e[20] = N, e[21] = A, e[22] = O, e[23] = S, e[24] = w) : (N = e[20], A = e[21], O = e[22], S = e[23], w = e[24]);
263
263
  let R;
264
264
  e[25] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (R = /* @__PURE__ */ t(de, { fullWidth: !1 }), e[25] = R) : R = e[25];
265
265
  let C;
266
- e[26] !== f || e[27] !== P ? (C = P && f ? /* @__PURE__ */ t(me, { position: "absolute", top: "0", color: "fg.muted", pointerEvents: "none", userSelect: "none", textStyle: "paragraph/M/regular", children: f }) : null, e[26] = f, e[27] = P, e[28] = C) : C = e[28];
266
+ e[26] !== m || e[27] !== P ? (C = P && m ? /* @__PURE__ */ t(me, { position: "absolute", top: "0", color: "fg.muted", pointerEvents: "none", userSelect: "none", textStyle: "paragraph/M/regular", children: m }) : null, e[26] = m, e[27] = P, e[28] = C) : C = e[28];
267
267
  let T;
268
268
  e[29] !== C ? (T = /* @__PURE__ */ t(be, { contentEditable: R, placeholder: C, ErrorBoundary: ue }), e[29] = C, e[30] = T) : T = e[30];
269
269
  let y;
270
- e[31] !== g ? (y = g ? /* @__PURE__ */ t(xe, { anchorElem: g }) : null, e[31] = g, e[32] = y) : y = e[32];
270
+ e[31] !== h ? (y = h ? /* @__PURE__ */ t(xe, { anchorElem: h }) : null, e[31] = h, e[32] = y) : y = e[32];
271
271
  let F;
272
272
  return e[33] !== _ || e[34] !== T || e[35] !== y ? (F = /* @__PURE__ */ K(te, { ref: M, className: "rich-text", justifyContent: "space-between", width: "100%", maxWidth: "100%", height: "100%", position: "relative", direction: "column", overflow: "visible", children: [
273
273
  B,
@@ -296,32 +296,32 @@ function Ft(o) {
296
296
  defaultState: c,
297
297
  isEditable: l,
298
298
  placeholder: s,
299
- onChange: f
300
- } = o, u = n === void 0 ? !1 : n, p = a === void 0 ? !1 : a, h = c === void 0 ? "" : c, d = l === void 0 ? !1 : l;
299
+ onChange: m
300
+ } = o, f = n === void 0 ? !1 : n, u = a === void 0 ? !1 : a, p = c === void 0 ? "" : c, d = l === void 0 ? !1 : l;
301
301
  let M;
302
- e[0] !== h ? (M = Te(h), e[0] = h, e[1] = M) : M = e[1];
302
+ e[0] !== p ? (M = Te(p), e[0] = p, e[1] = M) : M = e[1];
303
303
  const {
304
- frontmatter: g,
304
+ frontmatter: h,
305
305
  body: I
306
- } = M, P = d && !!f, $ = G(null), [v, r] = k(null);
307
- let i, b;
306
+ } = M, P = d && !!m, $ = G(null), [v, r] = k(null);
307
+ let i, g;
308
308
  e[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (i = () => {
309
309
  r($.current);
310
- }, b = [], e[2] = i, e[3] = b) : (i = e[2], b = e[3]), q(i, b);
311
- let m;
312
- e[4] !== I ? (m = () => Ue(I, oe, void 0, !1), e[4] = I, e[5] = m) : m = e[5];
310
+ }, g = [], e[2] = i, e[3] = g) : (i = e[2], g = e[3]), q(i, g);
311
+ let b;
312
+ e[4] !== I ? (b = () => Ue(I, oe, void 0, !1), e[4] = I, e[5] = b) : b = e[5];
313
313
  let x;
314
- e[6] !== d || e[7] !== m ? (x = {
314
+ e[6] !== d || e[7] !== b ? (x = {
315
315
  namespace: "MARKDOWN_EDITOR",
316
316
  nodes: ae,
317
- editorState: m,
317
+ editorState: b,
318
318
  onError: at,
319
319
  editable: d,
320
320
  theme: le
321
- }, e[6] = d, e[7] = m, e[8] = x) : x = e[8];
321
+ }, e[6] = d, e[7] = b, e[8] = x) : x = e[8];
322
322
  const L = x;
323
323
  let E;
324
- e[9] !== u ? (E = u ? /* @__PURE__ */ t(Ve, {}) : null, e[9] = u, e[10] = E) : E = e[10];
324
+ e[9] !== f ? (E = f ? /* @__PURE__ */ t(Ve, {}) : null, e[9] = f, e[10] = E) : E = e[10];
325
325
  let j, B, H, _, N, A;
326
326
  e[11] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (j = /* @__PURE__ */ t(Ke, {}), B = /* @__PURE__ */ t(he, {}), H = /* @__PURE__ */ t(ge, {}), _ = /* @__PURE__ */ t(pe, {}), N = /* @__PURE__ */ t(se, {}), A = /* @__PURE__ */ t(ce, {}), e[11] = j, e[12] = B, e[13] = H, e[14] = _, e[15] = N, e[16] = A) : (j = e[11], B = e[12], H = e[13], _ = e[14], N = e[15], A = e[16]);
327
327
  let O;
@@ -333,16 +333,16 @@ function Ft(o) {
333
333
  let R;
334
334
  e[22] !== v || e[23] !== d ? (R = d && v ? /* @__PURE__ */ t(xe, { anchorElem: v }) : null, e[22] = v, e[23] = d, e[24] = R) : R = e[24];
335
335
  let C;
336
- e[25] !== g || e[26] !== f || e[27] !== P ? (C = P ? /* @__PURE__ */ t(Ge, { ignoreSelectionChange: !0, ignoreHistoryMergeTagChange: !1, onChange: (V) => {
336
+ e[25] !== h || e[26] !== m || e[27] !== P ? (C = P ? /* @__PURE__ */ t(Ge, { ignoreSelectionChange: !0, ignoreHistoryMergeTagChange: !1, onChange: (V) => {
337
337
  V.read(() => {
338
338
  const X = ze(), Ce = qe(oe, X);
339
- f?.(g + Ce);
339
+ m?.(h + Ce);
340
340
  });
341
- } }) : null, e[25] = g, e[26] = f, e[27] = P, e[28] = C) : C = e[28];
341
+ } }) : null, e[25] = h, e[26] = m, e[27] = P, e[28] = C) : C = e[28];
342
342
  let T;
343
343
  e[29] !== d ? (T = /* @__PURE__ */ t(ye, { isEditable: d }), e[29] = d, e[30] = T) : T = e[30];
344
344
  let y;
345
- e[31] !== p ? (y = p && /* @__PURE__ */ t(Ee, {}), e[31] = p, e[32] = y) : y = e[32];
345
+ e[31] !== u ? (y = u && /* @__PURE__ */ t(Ee, {}), e[31] = u, e[32] = y) : y = e[32];
346
346
  let F;
347
347
  return e[33] !== L || e[34] !== w || e[35] !== R || e[36] !== C || e[37] !== T || e[38] !== y || e[39] !== E ? (F = /* @__PURE__ */ t(te, { ref: $, className: "rich-text", justifyContent: "space-between", width: "100%", maxWidth: "100%", height: "100%", position: "relative", direction: "column", overflow: "visible", children: /* @__PURE__ */ K(fe, { initialConfig: L, children: [
348
348
  E,
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text.js","sources":["../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/collaborative-markdown-editor/awareness-cursors.tsx","../src/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.tsx","../src/components/rich-text/markdown-editor/markdown-editor.tsx","../src/components/rich-text/utils/inferResourceType.ts","../src/components/rich-text/utils/mediaType.ts"],"sourcesContent":["const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n let top = targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n $isListNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, $isHeadingNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n $isRootOrShadowRoot,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n FORMAT_TEXT_COMMAND,\n type LexicalEditor,\n type LexicalNode,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { List, ListOrdered } from \"lucide-react\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"../../../../tooltip\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nconst blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as keyof typeof blockTypeToBlockName) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nconst resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<keyof typeof blockTypeToBlockName>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createParagraphNode());\n });\n };\n\n const formatBulletList = () => {\n if (blockType !== \"bullet\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n\n // Show floating toolbar when there's a non-collapsed text selection\n if (\n selection !== null &&\n $isRangeSelection(selection) &&\n !selection.isCollapsed() &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP);\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem);\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (_payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <div ref={editorRef} className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n {/* Text formatting buttons */}\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n }}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n }}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\");\n }}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n\n {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\n\n {/* Heading buttons */}\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h1\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h2\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h3\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n\n {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\n\n {/* List buttons */}\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={formatBulletList}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={formatNumberedList}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n </div>\n );\n}\n\nfunction useFloatingTextToolbar(editor: LexicalEditor, anchorElem: HTMLElement): React.JSX.Element | null {\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n anchorElem,\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingTextToolbar(editor, anchorElem);\n}\n","/**\n * Injects CSS for Yjs awareness cursor rendering in the collaborative editor.\n * @lexical/yjs injects cursor elements with data-* attributes; this styles them.\n */\nexport function AwarenessCursorsCSS() {\n return (\n <style>\n {`\n .collaboration-cursor-container {\n position: relative;\n display: inline;\n }\n\n .collaboration-cursor-caret {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n pointer-events: none;\n }\n\n .collaboration-cursor-label {\n position: absolute;\n top: -18px;\n left: -2px;\n padding: 1px 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 16px;\n white-space: nowrap;\n border-radius: 4px 4px 4px 0;\n color: #fff;\n pointer-events: none;\n user-select: none;\n }\n\n .collaboration-cursor-selection {\n position: absolute;\n pointer-events: none;\n opacity: 0.25;\n }\n `}\n </style>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { LexicalCollaboration } from \"@lexical/react/LexicalCollaborationContext\";\nimport { CollaborationPluginV2__EXPERIMENTAL } from \"@lexical/react/LexicalCollaborationPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport type { Provider } from \"@lexical/yjs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { WebsocketProvider } from \"y-websocket\";\nimport * as Y from \"yjs\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { AwarenessCursorsCSS } from \"./awareness-cursors\";\n\nexport interface CollaborativeMarkdownEditorProps {\n roomId: string;\n wsUrl: string;\n wsParams?: Record<string, string>;\n userName?: string;\n userColor?: string;\n placeholder?: string;\n}\n\nexport function CollaborativeMarkdownEditor(props: CollaborativeMarkdownEditorProps) {\n const { roomId, wsUrl, wsParams = {}, userName = \"Anonymous\", userColor = \"#30bced\", placeholder } = props;\n\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n const [synced, setSynced] = useState(false);\n\n // Keep collaborative state stable for the component lifetime.\n const [doc] = useState(() => new Y.Doc());\n const [provider] = useState(() => {\n const nextProvider = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n nextProvider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return nextProvider;\n });\n\n // Manage provider connect/disconnect lifecycle\n useEffect(() => {\n provider.connect();\n\n return () => {\n provider.disconnect();\n };\n }, [provider]);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"COLLABORATIVE_EDITOR\",\n nodes: editorNodes,\n editorState: null,\n onError: (error: Error) => console.error(error),\n editable: true,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <AwarenessCursorsCSS />\n\n <LexicalComposer initialConfig={initialConfig}>\n <LexicalCollaboration>\n <CollaborationPluginV2__EXPERIMENTAL\n id={roomId}\n doc={doc}\n provider={provider as unknown as Provider}\n __shouldBootstrapUnsafe={false}\n username={userName}\n cursorColor={userColor}\n />\n <LinkPlugin />\n <ListPlugin />\n <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\n color=\"fg.muted\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n textStyle=\"paragraph/M/regular\"\n >\n {placeholder}\n </Box>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n </LexicalCollaboration>\n </LexicalComposer>\n </Flex>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { $convertFromMarkdownString, $convertToMarkdownString } from \"@lexical/markdown\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const { autoFocus = false, debug = false, defaultState = \"\", isEditable = false, placeholder, onChange } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n return $convertFromMarkdownString(body, editorTransformers, undefined, false);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <LexicalComposer initialConfig={initialConfig}>\n {autoFocus ? <AutoFocusPlugin /> : null}\n <HistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} padding=\"sm\" />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"720px\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState) => {\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = $convertToMarkdownString(editorTransformers, root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </Flex>\n );\n}\n","import type { ResourceType } from \"../types\";\n\nexport function inferResourceTypeFromMediaType(mediaType: string) {\n const normalized = mediaType.toLowerCase().trim();\n if (!normalized) return \"text\";\n\n if (normalized.startsWith(\"image/\")) return \"image\";\n if (normalized === \"application/pdf\") return \"pdf\";\n if (normalized === \"text/markdown\") return \"markdown\";\n if (normalized === \"text/csv\" || normalized === \"text/tab-separated-values\") return \"table\";\n if (normalized === \"application/json\") return \"json\";\n if (normalized.startsWith(\"text/\")) return \"text\";\n if (normalized.startsWith(\"application/\")) return \"text\";\n\n const fallback: ResourceType = \"text\";\n return fallback;\n}\n","const extensionToMediaType: Record<string, string> = {\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n mp4: \"video/mp4\",\n mov: \"video/quicktime\",\n ts: \"text/typescript\",\n tsx: \"text/typescript\",\n js: \"text/javascript\",\n jsx: \"text/javascript\",\n sql: \"text/x-sql\",\n yml: \"text/yaml\",\n yaml: \"text/yaml\",\n};\n\nexport function mediaTypeFromPath(path: string) {\n const cleaned = path.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = cleaned.split(\".\").pop()?.toLowerCase();\n if (!ext) return null;\n return extensionToMediaType[ext] ?? null;\n}\n"],"names":["VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","anchorElem","verticalGap","horizontalOffset","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","top","left","height","width","right","GAP","blockTypeToBlockName","bullet","check","code","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","anchorNode","getKey","$findMatchingParent","node","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","FloatingTextToolbar","editor","isToolbarActive","setIsToolbarActive","editorRef","useRef","blockType","setBlockType","useState","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","updateFloatingToolbarRef","formatHeading","headingSize","update","selection","$getSelection","$setBlocksType","$createHeadingNode","$createParagraphNode","formatBulletList","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","formatNumberedList","INSERT_ORDERED_LIST_COMMAND","updateToolbar","$isRangeSelection","hasFormat","nextBlockType","anchor","getNode","current","editorElem","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","useEffect","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Stack","jsx","Tooltip","IconButton","FORMAT_TEXT_COMMAND","Text","borderLeft","borderColor","List","ListOrdered","useFloatingTextToolbar","$","_c","t0","t1","createPortal","FloatingTextFormatToolbarPlugin","document","body","useLexicalComposerContext","AwarenessCursorsCSS","Symbol","for","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","t2","placeholder","t3","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp","t4","nextProvider","WebsocketProvider","params","connect","on","isSynced","provider","t5","t6","disconnect","t7","t8","t9","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","t10","t11","t12","CollaborationPluginV2__EXPERIMENTAL","t13","t14","t15","t16","t17","LinkPlugin","ListPlugin","HorizontalRulePlugin","ImportCodeBlocksPlugin","EquationPlugin","t18","ContentEditable","t19","Box","t20","RichTextPlugin","LexicalErrorBoundary","t21","t22","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","MarkdownEditor","autoFocus","debug","defaultState","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","Boolean","$convertFromMarkdownString","editorTransformers","AutoFocusPlugin","HistoryPlugin","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","t23","inferResourceTypeFromMediaType","mediaType","normalized","toLowerCase","trim","startsWith","extensionToMediaType","csv","tsv","json","md","markdown","txt","pdf","png","jpg","jpeg","gif","svg","webp","mp4","mov","ts","tsx","js","sql","yml","yaml","mediaTypeFromPath","path","ext","split","pop"],"mappings":"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"}
1
+ {"version":3,"file":"rich-text.js","sources":["../src/components/rich-text/shared/plugins/LinkEditorPlugin/utils/setFloatingElemPos.ts","../src/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/FloatingTextFormatToolbarPlugin.tsx","../src/components/rich-text/collaborative-markdown-editor/awareness-cursors.tsx","../src/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.tsx","../src/components/rich-text/markdown-editor/markdown-editor.tsx","../src/components/rich-text/utils/inferResourceType.ts","../src/components/rich-text/utils/mediaType.ts"],"sourcesContent":["const VERTICAL_GAP = 10;\nconst HORIZONTAL_OFFSET = 5;\n\nexport function setFloatingElemPos(\n targetRect: DOMRect | null,\n floatingElem: HTMLElement,\n anchorElem: HTMLElement,\n verticalGap: number = VERTICAL_GAP,\n horizontalOffset: number = HORIZONTAL_OFFSET,\n): void {\n const scrollerElem = anchorElem.parentElement;\n\n if (targetRect === null || !scrollerElem) {\n floatingElem.style.opacity = \"0\";\n floatingElem.style.transform = \"translate(-10000px, -10000px)\";\n return;\n }\n\n const floatingElemRect = floatingElem.getBoundingClientRect();\n const anchorElementRect = anchorElem.getBoundingClientRect();\n const editorScrollerRect = scrollerElem.getBoundingClientRect();\n\n let top = targetRect.top - verticalGap;\n let left = targetRect.left - horizontalOffset;\n\n if (top < editorScrollerRect.top) {\n top += floatingElemRect.height + targetRect.height + verticalGap * 2;\n }\n\n if (left + floatingElemRect.width > editorScrollerRect.right) {\n left = editorScrollerRect.right - floatingElemRect.width - horizontalOffset;\n }\n\n top -= anchorElementRect.top;\n left -= anchorElementRect.left;\n\n floatingElem.style.opacity = \"1\";\n floatingElem.style.transform = `translate(${left}px, ${top}px)`;\n}\n","import \"./FloatingTextFormatToolbarPlugin.css\";\n\nimport { IconButton, Stack, Text } from \"@chakra-ui/react\";\nimport {\n $isListNode,\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n} from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createHeadingNode, $isHeadingNode, type HeadingTagType } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport { $findMatchingParent, mergeRegister } from \"@lexical/utils\";\nimport {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n $isRootOrShadowRoot,\n CLICK_COMMAND,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_HIGH,\n FORMAT_TEXT_COMMAND,\n type LexicalEditor,\n type LexicalNode,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport { List, ListOrdered } from \"lucide-react\";\nimport type React from \"react\";\nimport { type Dispatch, useEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Tooltip } from \"../../../../tooltip\";\nimport { setFloatingElemPos } from \"../LinkEditorPlugin/utils/setFloatingElemPos\";\n\n// Increase the vertical gap (negative places it below the selection) to avoid overlap\nconst GAP = -4;\n\nconst blockTypeToBlockName = {\n bullet: \"Bulleted List\",\n check: \"Check List\",\n code: \"Code Block\",\n h1: \"Heading 1\",\n h2: \"Heading 2\",\n h3: \"Heading 3\",\n h4: \"Heading 4\",\n h5: \"Heading 5\",\n h6: \"Heading 6\",\n number: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n};\n\nconst toKnownBlockType = (type: string) => {\n return type in blockTypeToBlockName ? (type as keyof typeof blockTypeToBlockName) : null;\n};\n\nconst findSelectionElement = (anchorNode: LexicalNode) => {\n const rootMatch =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, (node) => {\n const parent = node.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n return rootMatch ?? anchorNode.getTopLevelElementOrThrow();\n};\n\nconst resolveBlockTypeFromAnchor = (anchorNode: LexicalNode) => {\n const element = findSelectionElement(anchorNode);\n\n if ($isListNode(element)) {\n return element.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const parentList = $findMatchingParent(anchorNode, (node) => $isListNode(node));\n if (parentList !== null && $isListNode(parentList)) {\n return parentList.getListType() as keyof typeof blockTypeToBlockName;\n }\n\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\n return toKnownBlockType(type);\n};\n\nfunction FloatingTextToolbar({\n editor,\n anchorElem,\n isToolbarActive,\n setIsToolbarActive,\n}: {\n editor: LexicalEditor;\n anchorElem: HTMLElement;\n isToolbarActive: boolean;\n setIsToolbarActive: Dispatch<boolean>;\n}): React.JSX.Element {\n const editorRef = useRef<HTMLDivElement | null>(null);\n const [blockType, setBlockType] = useState<keyof typeof blockTypeToBlockName>(\"paragraph\");\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const updateFloatingToolbarRef = useRef<() => boolean | undefined>(() => undefined);\n\n const formatHeading = (headingSize: HeadingTagType) => {\n if (blockType !== headingSize) {\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createHeadingNode(headingSize));\n });\n return;\n }\n\n editor.update(() => {\n const selection = $getSelection();\n $setBlocksType(selection, () => $createParagraphNode());\n });\n };\n\n const formatBulletList = () => {\n if (blockType !== \"bullet\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"number\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n const updateToolbar = () => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) return;\n\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n\n const nextBlockType = resolveBlockTypeFromAnchor(selection.anchor.getNode());\n if (nextBlockType) {\n setBlockType(nextBlockType);\n }\n };\n\n updateFloatingToolbarRef.current = () => {\n const selection = $getSelection();\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n\n // Show floating toolbar when there's a non-collapsed text selection\n if (\n selection !== null &&\n $isRangeSelection(selection) &&\n !selection.isCollapsed() &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement?.contains(nativeSelection.anchorNode) &&\n editor.isEditable()\n ) {\n const domRect: DOMRect | undefined = nativeSelection.getRangeAt(0).getBoundingClientRect();\n\n if (domRect) {\n // Anchor to the bottom of the selection to avoid overlap with tall selections\n const bottomRect = new DOMRect(domRect.left, domRect.bottom, 0, 0);\n setFloatingElemPos(bottomRect, editorElem, anchorElem, GAP);\n }\n\n setIsToolbarActive(true);\n } else {\n if (rootElement !== null) {\n setFloatingElemPos(null, editorElem, anchorElem);\n }\n setIsToolbarActive(false);\n }\n\n updateToolbar();\n\n return true;\n };\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateFloatingToolbarRef.current();\n });\n };\n\n window.addEventListener(\"resize\", update);\n\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [anchorElem, editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateFloatingToolbarRef.current();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload) => {\n updateFloatingToolbarRef.current();\n return false;\n },\n COMMAND_PRIORITY_CRITICAL,\n ),\n editor.registerCommand(\n CLICK_COMMAND,\n (_payload) => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n updateFloatingToolbarRef.current();\n }\n return false;\n },\n COMMAND_PRIORITY_HIGH,\n ),\n );\n }, [editor]);\n\n return (\n <div ref={editorRef} className={`floating-text-format-toolbar ${isToolbarActive ? \"active\" : \"\"}`}>\n <Stack direction=\"row\" gap=\"0.5\" alignItems=\"center\">\n {/* Text formatting buttons */}\n <Tooltip content=\"Bold\">\n <IconButton\n data-active={isBold || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n }}\n variant=\"ghost\"\n aria-label=\"Bold\"\n size=\"xs\"\n >\n <Text fontWeight=\"bold\" fontSize=\".75rem\">\n B\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Italic\">\n <IconButton\n data-active={isItalic || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n }}\n variant=\"ghost\"\n aria-label=\"Italic\"\n size=\"xs\"\n >\n <Text fontStyle=\"italic\" fontSize=\".75rem\">\n I\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Underline\">\n <IconButton\n data-active={isUnderline || undefined}\n onClick={() => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\");\n }}\n variant=\"ghost\"\n aria-label=\"Underline\"\n size=\"xs\"\n >\n <Text textDecoration=\"underline\" fontSize=\".75rem\">\n U\n </Text>\n </IconButton>\n </Tooltip>\n\n {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\n\n {/* Heading buttons */}\n <Tooltip content=\"Heading 1\">\n <IconButton\n data-active={blockType === \"h1\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 1\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h1\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H1\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 2\">\n <IconButton\n data-active={blockType === \"h2\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 2\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h2\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H2\n </Text>\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Heading 3\">\n <IconButton\n data-active={blockType === \"h3\" || undefined}\n variant=\"ghost\"\n aria-label=\"Heading 3\"\n size=\"xs\"\n onClick={() => {\n formatHeading(\"h3\");\n }}\n >\n <Text fontWeight=\"thin\" fontSize=\".8rem\">\n H3\n </Text>\n </IconButton>\n </Tooltip>\n\n {/* Separator */}\n <Stack as=\"span\" height=\"1rem\" mx=\"0.5\">\n <span\n style={{\n borderLeft: \"1px solid\",\n height: \"100%\",\n borderColor: \"var(--chakra-colors-border-muted)\",\n }}\n />\n </Stack>\n\n {/* List buttons */}\n <Tooltip content=\"Bulleted List\">\n <IconButton\n data-active={blockType === \"bullet\" || undefined}\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n size=\"xs\"\n onClick={formatBulletList}\n >\n <List size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Numbered List\">\n <IconButton\n data-active={blockType === \"number\" || undefined}\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n size=\"xs\"\n onClick={formatNumberedList}\n >\n <ListOrdered size={14} />\n </IconButton>\n </Tooltip>\n </Stack>\n </div>\n );\n}\n\nfunction useFloatingTextToolbar(editor: LexicalEditor, anchorElem: HTMLElement): React.JSX.Element | null {\n const [isToolbarActive, setIsToolbarActive] = useState(false);\n\n return createPortal(\n <FloatingTextToolbar\n editor={editor}\n anchorElem={anchorElem}\n isToolbarActive={isToolbarActive}\n setIsToolbarActive={setIsToolbarActive}\n />,\n anchorElem,\n );\n}\n\nexport function FloatingTextFormatToolbarPlugin({\n anchorElem = document.body,\n}: {\n anchorElem?: HTMLElement;\n}): React.JSX.Element | null {\n const [editor] = useLexicalComposerContext();\n return useFloatingTextToolbar(editor, anchorElem);\n}\n","/**\n * Injects CSS for Yjs awareness cursor rendering in the collaborative editor.\n * @lexical/yjs injects cursor elements with data-* attributes; this styles them.\n */\nexport function AwarenessCursorsCSS() {\n return (\n <style>\n {`\n .collaboration-cursor-container {\n position: relative;\n display: inline;\n }\n\n .collaboration-cursor-caret {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n pointer-events: none;\n }\n\n .collaboration-cursor-label {\n position: absolute;\n top: -18px;\n left: -2px;\n padding: 1px 6px;\n font-size: 11px;\n font-weight: 600;\n line-height: 16px;\n white-space: nowrap;\n border-radius: 4px 4px 4px 0;\n color: #fff;\n pointer-events: none;\n user-select: none;\n }\n\n .collaboration-cursor-selection {\n position: absolute;\n pointer-events: none;\n opacity: 0.25;\n }\n `}\n </style>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { LexicalCollaboration } from \"@lexical/react/LexicalCollaborationContext\";\nimport { CollaborationPluginV2__EXPERIMENTAL } from \"@lexical/react/LexicalCollaborationPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport type { Provider } from \"@lexical/yjs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { WebsocketProvider } from \"y-websocket\";\nimport * as Y from \"yjs\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme } from \"../shared/editor-config\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport { AwarenessCursorsCSS } from \"./awareness-cursors\";\n\nexport interface CollaborativeMarkdownEditorProps {\n roomId: string;\n wsUrl: string;\n wsParams?: Record<string, string>;\n userName?: string;\n userColor?: string;\n placeholder?: string;\n}\n\nexport function CollaborativeMarkdownEditor(props: CollaborativeMarkdownEditorProps) {\n const { roomId, wsUrl, wsParams = {}, userName = \"Anonymous\", userColor = \"#30bced\", placeholder } = props;\n\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n const [synced, setSynced] = useState(false);\n\n // Keep collaborative state stable for the component lifetime.\n const [doc] = useState(() => new Y.Doc());\n const [provider] = useState(() => {\n const nextProvider = new WebsocketProvider(wsUrl, roomId, doc, { params: wsParams, connect: false });\n\n nextProvider.on(\"sync\", (isSynced: boolean) => {\n if (isSynced) setSynced(true);\n });\n\n return nextProvider;\n });\n\n // Manage provider connect/disconnect lifecycle\n useEffect(() => {\n provider.connect();\n\n return () => {\n provider.disconnect();\n };\n }, [provider]);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"COLLABORATIVE_EDITOR\",\n nodes: editorNodes,\n editorState: null,\n onError: (error: Error) => console.error(error),\n editable: true,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <AwarenessCursorsCSS />\n\n <LexicalComposer initialConfig={initialConfig}>\n <LexicalCollaboration>\n <CollaborationPluginV2__EXPERIMENTAL\n id={roomId}\n doc={doc}\n provider={provider as unknown as Provider}\n __shouldBootstrapUnsafe={false}\n username={userName}\n cursorColor={userColor}\n />\n <LinkPlugin />\n <ListPlugin />\n <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} />}\n placeholder={\n synced && placeholder ? (\n <Box\n position=\"absolute\"\n top=\"0\"\n color=\"fg.muted\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n textStyle=\"paragraph/M/regular\"\n >\n {placeholder}\n </Box>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n </LexicalCollaboration>\n </LexicalComposer>\n </Flex>\n );\n}\n","import \"../theme/rich-text-theme.css\";\n\nimport { Box, Flex } from \"@chakra-ui/react\";\nimport { $convertFromMarkdownString, $convertToMarkdownString } from \"@lexical/markdown\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { HorizontalRulePlugin } from \"@lexical/react/LexicalHorizontalRulePlugin\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { $getRoot } from \"lexical\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ContentEditable } from \"../shared/components/content-editable\";\nimport { editorNodes, editorTheme, editorTransformers } from \"../shared/editor-config\";\nimport { ImportCodeBlocksPlugin } from \"../shared/plugins/CodePlugin/CodeBlockPlugin\";\nimport { EquationPlugin } from \"../shared/plugins/EquationPlugin/EquationPlugin\";\nimport { FloatingTextFormatToolbarPlugin } from \"../shared/plugins/FloatingTextFormatToolbarPlugin\";\nimport ToggleEditablePlugin from \"../shared/plugins/ToggleEditablePlugin\";\nimport { TreeViewPlugin } from \"../shared/plugins/TreeViewPlugin/TreeViewPlugin\";\nimport { splitFrontmatter } from \"../utils/markdown\";\n\nexport interface MarkdownEditorProps {\n autoFocus?: boolean;\n debug?: boolean;\n defaultState: string;\n isEditable?: boolean;\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nexport function MarkdownEditor(props: MarkdownEditorProps) {\n const { autoFocus = false, debug = false, defaultState = \"\", isEditable = false, placeholder, onChange } = props;\n const { frontmatter, body } = splitFrontmatter(defaultState);\n const shouldTrackChanges = isEditable && Boolean(onChange);\n const editorContainerRef = useRef<HTMLDivElement>(null);\n const [floatingToolbarAnchorElem, setFloatingToolbarAnchorElem] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n setFloatingToolbarAnchorElem(editorContainerRef.current);\n }, []);\n\n const initialConfig = {\n namespace: \"MARKDOWN_EDITOR\",\n nodes: editorNodes,\n editorState: () => {\n return $convertFromMarkdownString(body, editorTransformers, undefined, false);\n },\n onError: (error: Error) => console.error(error),\n editable: isEditable,\n theme: editorTheme,\n };\n\n return (\n <Flex\n ref={editorContainerRef}\n className=\"rich-text\"\n justifyContent=\"space-between\"\n width=\"100%\"\n maxWidth=\"100%\"\n height=\"100%\"\n position=\"relative\"\n direction=\"column\"\n overflow=\"visible\"\n >\n <LexicalComposer initialConfig={initialConfig}>\n {autoFocus ? <AutoFocusPlugin /> : null}\n <HistoryPlugin />\n <LinkPlugin />\n <ListPlugin />\n <HorizontalRulePlugin />\n <ImportCodeBlocksPlugin />\n <EquationPlugin />\n <RichTextPlugin\n contentEditable={<ContentEditable fullWidth={false} padding=\"sm\" />}\n placeholder={\n placeholder ? (\n <Flex\n position=\"absolute\"\n padding=\"sm\"\n top=\"0\"\n left=\"0\"\n right=\"0\"\n pointerEvents=\"none\"\n userSelect=\"none\"\n justifyContent=\"center\"\n >\n <Box width=\"100%\" maxWidth=\"720px\" color=\"fg.muted\" textStyle=\"paragraph/M/regular\">\n {placeholder}\n </Box>\n </Flex>\n ) : null\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n {isEditable && floatingToolbarAnchorElem ? (\n <FloatingTextFormatToolbarPlugin anchorElem={floatingToolbarAnchorElem} />\n ) : null}\n {shouldTrackChanges ? (\n <OnChangePlugin\n ignoreSelectionChange\n ignoreHistoryMergeTagChange={false}\n onChange={(editorState) => {\n editorState.read(() => {\n const root = $getRoot();\n const markdownBody = $convertToMarkdownString(editorTransformers, root);\n onChange?.(frontmatter + markdownBody);\n });\n }}\n />\n ) : null}\n <ToggleEditablePlugin isEditable={isEditable} />\n {debug && <TreeViewPlugin />}\n </LexicalComposer>\n </Flex>\n );\n}\n","import type { ResourceType } from \"../types\";\n\nexport function inferResourceTypeFromMediaType(mediaType: string) {\n const normalized = mediaType.toLowerCase().trim();\n if (!normalized) return \"text\";\n\n if (normalized.startsWith(\"image/\")) return \"image\";\n if (normalized === \"application/pdf\") return \"pdf\";\n if (normalized === \"text/markdown\") return \"markdown\";\n if (normalized === \"text/csv\" || normalized === \"text/tab-separated-values\") return \"table\";\n if (normalized === \"application/json\") return \"json\";\n if (normalized.startsWith(\"text/\")) return \"text\";\n if (normalized.startsWith(\"application/\")) return \"text\";\n\n const fallback: ResourceType = \"text\";\n return fallback;\n}\n","const extensionToMediaType: Record<string, string> = {\n csv: \"text/csv\",\n tsv: \"text/tab-separated-values\",\n json: \"application/json\",\n md: \"text/markdown\",\n markdown: \"text/markdown\",\n txt: \"text/plain\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n mp4: \"video/mp4\",\n mov: \"video/quicktime\",\n ts: \"text/typescript\",\n tsx: \"text/typescript\",\n js: \"text/javascript\",\n jsx: \"text/javascript\",\n sql: \"text/x-sql\",\n yml: \"text/yaml\",\n yaml: \"text/yaml\",\n};\n\nexport function mediaTypeFromPath(path: string) {\n const cleaned = path.split(\"?\")[0]?.split(\"#\")[0] ?? \"\";\n const ext = cleaned.split(\".\").pop()?.toLowerCase();\n if (!ext) return null;\n return extensionToMediaType[ext] ?? null;\n}\n"],"names":["VERTICAL_GAP","HORIZONTAL_OFFSET","setFloatingElemPos","targetRect","floatingElem","anchorElem","verticalGap","horizontalOffset","scrollerElem","parentElement","style","opacity","transform","floatingElemRect","getBoundingClientRect","anchorElementRect","editorScrollerRect","top","left","height","width","right","GAP","blockTypeToBlockName","bullet","check","code","h1","h2","h3","h4","h5","h6","number","paragraph","quote","toKnownBlockType","type","findSelectionElement","anchorNode","getKey","$findMatchingParent","node","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","resolveBlockTypeFromAnchor","element","$isListNode","getListType","parentList","$isHeadingNode","getTag","getType","FloatingTextToolbar","editor","isToolbarActive","setIsToolbarActive","editorRef","useRef","blockType","setBlockType","useState","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","updateFloatingToolbarRef","formatHeading","headingSize","update","selection","$getSelection","$setBlocksType","$createHeadingNode","$createParagraphNode","formatBulletList","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","formatNumberedList","INSERT_ORDERED_LIST_COMMAND","updateToolbar","$isRangeSelection","hasFormat","nextBlockType","anchor","getNode","current","editorElem","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","contains","isEditable","domRect","getRangeAt","bottomRect","DOMRect","bottom","useEffect","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","COMMAND_PRIORITY_CRITICAL","CLICK_COMMAND","COMMAND_PRIORITY_HIGH","Stack","jsx","Tooltip","IconButton","FORMAT_TEXT_COMMAND","Text","borderLeft","borderColor","List","ListOrdered","useFloatingTextToolbar","$","_c","t0","t1","createPortal","FloatingTextFormatToolbarPlugin","document","body","useLexicalComposerContext","AwarenessCursorsCSS","Symbol","for","CollaborativeMarkdownEditor","props","roomId","wsUrl","wsParams","userName","userColor","t2","placeholder","t3","editorContainerRef","floatingToolbarAnchorElem","setFloatingToolbarAnchorElem","synced","setSynced","doc","_temp","t4","nextProvider","WebsocketProvider","params","connect","on","isSynced","provider","t5","t6","disconnect","t7","t8","t9","namespace","nodes","editorNodes","onError","_temp2","editable","theme","editorTheme","initialConfig","t10","t11","t12","CollaborationPluginV2__EXPERIMENTAL","t13","t14","t15","t16","t17","LinkPlugin","ListPlugin","HorizontalRulePlugin","ImportCodeBlocksPlugin","EquationPlugin","t18","ContentEditable","t19","Box","t20","RichTextPlugin","LexicalErrorBoundary","t21","t22","Flex","LexicalComposer","jsxs","LexicalCollaboration","error","console","Y","Doc","MarkdownEditor","autoFocus","debug","defaultState","onChange","splitFrontmatter","frontmatter","shouldTrackChanges","Boolean","$convertFromMarkdownString","editorTransformers","AutoFocusPlugin","HistoryPlugin","OnChangePlugin","root","$getRoot","markdownBody","$convertToMarkdownString","ToggleEditablePlugin","TreeViewPlugin","t23","inferResourceTypeFromMediaType","mediaType","normalized","toLowerCase","trim","startsWith","extensionToMediaType","csv","tsv","json","md","markdown","txt","pdf","png","jpg","jpeg","gif","svg","webp","mp4","mov","ts","tsx","js","sql","yml","yaml","mediaTypeFromPath","path","ext","split","pop"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pstdio/ui",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/pufflyai/prompt-studio"
@@ -95,7 +95,7 @@
95
95
  "react": "19.2.4",
96
96
  "react-dom": "19.2.4",
97
97
  "storybook": "^10.1.9",
98
- "typescript": "~5.9.3",
98
+ "typescript": "^5.9.3",
99
99
  "vite": "^7.2.4",
100
100
  "vite-plugin-dts": "^4.5.4",
101
101
  "vite-plugin-externalize-deps": "^0.8.0",