@clevertask/scribe 0.1.0 → 0.1.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 (37) hide show
  1. package/README.md +60 -16
  2. package/dist/{BarMenu-BDtEfu-R.js → BarMenu-DaKIz3zZ.js} +1 -1
  3. package/dist/assets/index.css +1 -1
  4. package/dist/components/Menu/BarMenu.js +2 -2
  5. package/dist/components/Menu/BubbleMenu.js +78 -74
  6. package/dist/components/Menu/Mobile/ListOptionBar.js +1 -1
  7. package/dist/components/Scribe/extension/emoji/suggest.js +1 -1
  8. package/dist/components/Scribe/extension/extension-link.js +1 -1
  9. package/dist/components/Scribe/extension/extension-markdown-paste.js +2 -2
  10. package/dist/components/Scribe/extension/extension-selectedText.js +1 -1
  11. package/dist/components/Scribe/extension/index.d.ts +16 -2
  12. package/dist/components/Scribe/extension/index.d.ts.map +1 -1
  13. package/dist/components/Scribe/extension/index.js +2655 -2580
  14. package/dist/components/Scribe/extension/slashCommand/SlashCommandList.js +1616 -1618
  15. package/dist/components/Scribe/extension/slashCommand/index.js +2 -2
  16. package/dist/components/Scribe/extension/slashCommand/renderItems.js +1 -1
  17. package/dist/components/Scribe/extension/tableOfContents.d.ts +48 -0
  18. package/dist/components/Scribe/extension/tableOfContents.d.ts.map +1 -0
  19. package/dist/components/Scribe/extension/tableOfContents.js +180 -0
  20. package/dist/components/Scribe/index.d.ts +12 -0
  21. package/dist/components/Scribe/index.d.ts.map +1 -1
  22. package/dist/components/Scribe/index.js +108 -65
  23. package/dist/{extension-link-D3eyOFkn.js → extension-link-Ch_T7WWG.js} +1 -1
  24. package/dist/{index-hHvpW2H6.js → index-BiBV5TQx.js} +1287 -1250
  25. package/dist/{index-FY_iYS6i.js → index-CqzMmrnw.js} +1 -1
  26. package/dist/{index-PJNQPLn5.js → index-DxF-1P4n.js} +196 -203
  27. package/dist/index-V-gN11Y9.js +249 -0
  28. package/dist/main.js +1 -1
  29. package/dist/{markdown-to-html-BwS08CTi.js → markdown-to-html-pL7ckd-m.js} +14 -14
  30. package/dist/purify.es-exIQuqhb.js +595 -0
  31. package/dist/utils/create-scribe-editor.js +3 -3
  32. package/dist/utils/html-to-markdown.js +226 -306
  33. package/dist/utils/index.js +1 -1
  34. package/dist/utils/markdown-to-html.js +2 -2
  35. package/package.json +30 -30
  36. package/dist/index-DZylq4Bc.js +0 -232
  37. package/dist/purify.es-BPDBzHtc.js +0 -552
@@ -1,5 +1,5 @@
1
- import "../../../../index-hHvpW2H6.js";
2
- import { S as o, s as e } from "../../../../index-DZylq4Bc.js";
1
+ import "../../../../index-BiBV5TQx.js";
2
+ import { a as o, s as e } from "../../../../index-V-gN11Y9.js";
3
3
  export {
4
4
  o as SlashCommand,
5
5
  e as slashMenuPluginKey
@@ -1,4 +1,4 @@
1
- import { R as o } from "../../../../index-PJNQPLn5.js";
1
+ import { R as o } from "../../../../index-DxF-1P4n.js";
2
2
  import { t as s } from "../../../../tippy.esm-DLHdsnfG.js";
3
3
  import { getPopupMountTarget as a } from "../getPopupMountTarget.js";
4
4
  import { SlashCommandList as l } from "./SlashCommandList.js";
@@ -0,0 +1,48 @@
1
+ import { Editor, Extension } from "@tiptap/core";
2
+ import { Node as TiptapNode } from "@tiptap/pm/model";
3
+ export declare const SCRIBE_TABLE_OF_CONTENTS_META = "scribeTableOfContents";
4
+ type ScrollParent = HTMLElement | Window;
5
+ export type ScribeTableOfContentsItem = {
6
+ dom: HTMLElement;
7
+ editor: Editor;
8
+ id: string;
9
+ isActive: boolean;
10
+ isScrolledOver: boolean;
11
+ itemIndex: number;
12
+ level: number;
13
+ node: TiptapNode;
14
+ originalLevel: number;
15
+ pos: number;
16
+ textContent: string;
17
+ };
18
+ export type ScribeTableOfContentsChangeHandler = (items: ScribeTableOfContentsItem[], isCreate?: boolean) => void;
19
+ export type ScribeTableOfContentsScrollTarget = ScribeTableOfContentsItem | string;
20
+ type ScribeTableOfContentsOptions = {
21
+ anchorTypes: string[];
22
+ onUpdate?: ScribeTableOfContentsChangeHandler;
23
+ };
24
+ type ScribeTableOfContentsStorage = {
25
+ anchors: HTMLElement[];
26
+ content: ScribeTableOfContentsItem[];
27
+ hasCreated: boolean;
28
+ lastSignature: string;
29
+ rafId: number | null;
30
+ refresh: () => void;
31
+ scheduleRefresh: () => void;
32
+ scrollHandler: () => void;
33
+ scrollParent: ScrollParent | null;
34
+ updateScrollParent: () => void;
35
+ };
36
+ declare module "@tiptap/core" {
37
+ interface Commands<ReturnType> {
38
+ scribeTableOfContents: {
39
+ updateScribeTableOfContents: () => ReturnType;
40
+ };
41
+ }
42
+ interface Storage {
43
+ scribeTableOfContents: ScribeTableOfContentsStorage;
44
+ }
45
+ }
46
+ export declare const ScribeTableOfContents: Extension<ScribeTableOfContentsOptions, ScribeTableOfContentsStorage>;
47
+ export {};
48
+ //# sourceMappingURL=tableOfContents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tableOfContents.d.ts","sourceRoot":"","sources":["../../../../lib/components/Scribe/extension/tableOfContents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGtD,eAAO,MAAM,6BAA6B,0BAA0B,CAAC;AAErE,KAAK,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAOzC,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,CAC/C,KAAK,EAAE,yBAAyB,EAAE,EAClC,QAAQ,CAAC,EAAE,OAAO,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,iCAAiC,GAAG,yBAAyB,GAAG,MAAM,CAAC;AAEnF,KAAK,4BAA4B,GAAG;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,kCAAkC,CAAC;CAC/C,CAAC;AAEF,KAAK,4BAA4B,GAAG;IAClC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAmPF,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,qBAAqB,EAAE;YACrB,2BAA2B,EAAE,MAAM,UAAU,CAAC;SAC/C,CAAC;KACH;IAED,UAAU,OAAO;QACf,qBAAqB,EAAE,4BAA4B,CAAC;KACrD;CACF;AAED,eAAO,MAAM,qBAAqB,uEA8JhC,CAAC"}
@@ -0,0 +1,180 @@
1
+ import { P as g, a as f, b as p } from "../../../index-BiBV5TQx.js";
2
+ const c = "scribeTableOfContents", v = new g("scribeTableOfContents"), w = (e) => e.trim().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "heading", C = (e, t) => {
3
+ const n = t[t.length - 1], s = [...t].reverse().find((r) => r.originalLevel <= e.node.attrs.level)?.level || 1;
4
+ return e.node.attrs.level > (n?.originalLevel || 1) ? (n?.level || 1) + 1 : e.node.attrs.level < (n?.originalLevel || 1) ? s : n?.level || 1;
5
+ }, S = (e) => (e[e.length - 1]?.itemIndex || 0) + 1, T = (e, t, n) => {
6
+ if (e.textContent.length === 0)
7
+ return null;
8
+ const o = w(e.textContent), s = (t.get(o) || 0) + 1, r = s === 1 ? o : `${o}-${s}`;
9
+ return t.set(o, s), n === r ? n : r;
10
+ }, d = (e, t) => {
11
+ const n = e.tr, o = /* @__PURE__ */ new Map();
12
+ let s = !1;
13
+ return e.doc.descendants((r, a) => {
14
+ if (!t.includes(r.type.name))
15
+ return;
16
+ const i = r.attrs["data-toc-id"], l = T(r, o, i);
17
+ i !== l && (n.setNodeMarkup(a, void 0, {
18
+ ...r.attrs,
19
+ "data-toc-id": l
20
+ }), s = !0);
21
+ }), s ? n.setMeta(c, !0).setMeta("addToHistory", !1) : null;
22
+ }, b = (e) => {
23
+ const { overflowY: t } = window.getComputedStyle(e);
24
+ return /(auto|scroll|overlay)/.test(t) && e.scrollHeight > e.clientHeight;
25
+ }, m = (e) => {
26
+ let t = e.parentElement;
27
+ for (; t; ) {
28
+ if (b(t))
29
+ return t;
30
+ t = t.parentElement;
31
+ }
32
+ return window;
33
+ }, H = (e) => typeof Window < "u" && e instanceof Window, O = (e) => H(e) ? 32 : e.getBoundingClientRect().top + 32, I = (e, t) => {
34
+ const n = e.view.nodeDOM(t);
35
+ return n instanceof HTMLElement ? n : null;
36
+ }, x = (e, t) => {
37
+ const n = [];
38
+ return e.state.doc.descendants((o, s) => {
39
+ !t.includes(o.type.name) || o.textContent.length === 0 || n.push({ node: o, pos: s });
40
+ }), n;
41
+ }, y = (e, t) => {
42
+ if (!t)
43
+ return e;
44
+ const n = O(t), o = /* @__PURE__ */ new Set();
45
+ let s = null;
46
+ return e.forEach((r) => {
47
+ r.dom.getBoundingClientRect().top <= n && (s = r.id, o.add(r.id));
48
+ }), e.map((r) => ({
49
+ ...r,
50
+ isActive: r.id === s,
51
+ isScrolledOver: o.has(r.id)
52
+ }));
53
+ }, A = (e, t, n) => {
54
+ const o = x(e, t), s = [];
55
+ return o.forEach((r) => {
56
+ const a = r.node.attrs["data-toc-id"], i = I(e, r.pos);
57
+ if (!a || !i)
58
+ return;
59
+ const l = Number(r.node.attrs.level) || 1, u = C(r, s), h = S(s);
60
+ s.push({
61
+ dom: i,
62
+ editor: e,
63
+ id: a,
64
+ isActive: !1,
65
+ isScrolledOver: !1,
66
+ itemIndex: h,
67
+ level: u,
68
+ node: r.node,
69
+ originalLevel: l,
70
+ pos: r.pos,
71
+ textContent: r.node.textContent
72
+ });
73
+ }), y(s, n);
74
+ }, L = (e) => JSON.stringify(
75
+ e.map((t) => ({
76
+ id: t.id,
77
+ isActive: t.isActive,
78
+ isScrolledOver: t.isScrolledOver,
79
+ itemIndex: t.itemIndex,
80
+ level: t.level,
81
+ originalLevel: t.originalLevel,
82
+ pos: t.pos,
83
+ textContent: t.textContent
84
+ }))
85
+ ), P = (e, t, n) => {
86
+ const o = L(n), s = !e.hasCreated;
87
+ e.anchors = n.map((r) => r.dom), e.content = n, !(!s && o === e.lastSignature) && (e.hasCreated = !0, e.lastSignature = o, t.onUpdate?.(n, s));
88
+ }, M = f.create({
89
+ name: "scribeTableOfContents",
90
+ addOptions() {
91
+ return {
92
+ anchorTypes: ["heading"]
93
+ };
94
+ },
95
+ addStorage() {
96
+ return {
97
+ anchors: [],
98
+ content: [],
99
+ hasCreated: !1,
100
+ lastSignature: "",
101
+ rafId: null,
102
+ refresh: () => null,
103
+ scheduleRefresh: () => null,
104
+ scrollHandler: () => null,
105
+ scrollParent: null,
106
+ updateScrollParent: () => null
107
+ };
108
+ },
109
+ addGlobalAttributes() {
110
+ return [
111
+ {
112
+ types: this.options.anchorTypes,
113
+ attributes: {
114
+ "data-toc-id": {
115
+ default: null,
116
+ renderHTML: (e) => {
117
+ const t = e["data-toc-id"];
118
+ return t ? { "data-toc-id": t } : {};
119
+ },
120
+ parseHTML: (e) => e.getAttribute("data-toc-id")
121
+ }
122
+ }
123
+ }
124
+ ];
125
+ },
126
+ addCommands() {
127
+ return {
128
+ updateScribeTableOfContents: () => ({ dispatch: e }) => (e && this.storage.refresh(), !0)
129
+ };
130
+ },
131
+ addProseMirrorPlugins() {
132
+ return [
133
+ new p({
134
+ key: v,
135
+ appendTransaction: (e, t, n) => typeof window > "u" || e.some(
136
+ (s) => s.getMeta(c) || s.getMeta("composition")
137
+ ) || !e.some((s) => s.docChanged) ? null : d(n, this.options.anchorTypes)
138
+ })
139
+ ];
140
+ },
141
+ onCreate() {
142
+ if (typeof window > "u" || !this.editor.view)
143
+ return;
144
+ this.storage.scrollHandler = () => {
145
+ this.storage.refresh();
146
+ }, this.storage.updateScrollParent = () => {
147
+ const t = m(this.editor.view.dom);
148
+ this.storage.scrollParent !== t && (this.storage.scrollParent?.removeEventListener("scroll", this.storage.scrollHandler), this.storage.scrollParent = t, this.storage.scrollParent.addEventListener("scroll", this.storage.scrollHandler));
149
+ }, this.storage.refresh = () => {
150
+ if (this.editor.isDestroyed)
151
+ return;
152
+ this.storage.updateScrollParent();
153
+ const t = A(
154
+ this.editor,
155
+ this.options.anchorTypes,
156
+ this.storage.scrollParent
157
+ );
158
+ P(this.storage, this.options, t);
159
+ }, this.storage.scheduleRefresh = () => {
160
+ this.storage.rafId !== null && window.cancelAnimationFrame(this.storage.rafId), this.storage.rafId = window.requestAnimationFrame(() => {
161
+ this.storage.rafId = null, this.storage.refresh();
162
+ });
163
+ };
164
+ const e = d(
165
+ this.editor.state,
166
+ this.options.anchorTypes
167
+ );
168
+ e && this.editor.view.dispatch(e), this.storage.scheduleRefresh();
169
+ },
170
+ onTransaction({ transaction: e }) {
171
+ e.docChanged && this.storage.scheduleRefresh();
172
+ },
173
+ onDestroy() {
174
+ typeof window < "u" && this.storage.rafId !== null && window.cancelAnimationFrame(this.storage.rafId), this.storage.scrollParent?.removeEventListener("scroll", this.storage.scrollHandler);
175
+ }
176
+ });
177
+ export {
178
+ c as SCRIBE_TABLE_OF_CONTENTS_META,
179
+ M as ScribeTableOfContents
180
+ };
@@ -1,7 +1,9 @@
1
1
  import "katex/dist/katex.css";
2
2
  import { ClassValue } from "clsx";
3
+ import type { ScribeTableOfContentsChangeHandler, ScribeTableOfContentsScrollTarget } from "./extension/tableOfContents";
3
4
  import { Content, Editor, Extension, JSONContent, UseEditorOptions } from "@tiptap/react";
4
5
  import { KeyboardEventHandler } from "react";
6
+ export type { ScribeTableOfContentsChangeHandler, ScribeTableOfContentsItem, ScribeTableOfContentsScrollTarget, } from "./extension/tableOfContents";
5
7
  export type ScribeOnChangeContents = {
6
8
  jsonContent: Content;
7
9
  htmlContent: Content;
@@ -12,10 +14,16 @@ export interface ScribeRef {
12
14
  resetContent: () => void;
13
15
  getContent: (contentType: "html" | "json" | "markdown") => string | JSONContent | undefined;
14
16
  setContent: (content: Content) => void;
17
+ /** @experimental The table of contents API may change while we stabilize this behavior. */
18
+ scrollToTableOfContentsItem: (target: ScribeTableOfContentsScrollTarget) => void;
15
19
  editor: Editor;
16
20
  }
17
21
  export interface ScribeProps {
18
22
  onContentChange?: (content: ScribeOnChangeContents) => void;
23
+ /**
24
+ * @deprecated Controlled content updates are being phased out. Prefer
25
+ * `ScribeRef.setContent` for programmatic updates after mount.
26
+ */
19
27
  content?: string;
20
28
  editable?: boolean;
21
29
  autoFocus?: boolean;
@@ -30,6 +38,10 @@ export interface ScribeProps {
30
38
  mainContainerClassName?: ClassValue;
31
39
  onKeyDown?: KeyboardEventHandler;
32
40
  mobile?: boolean;
41
+ /** @experimental Enables Scribe's app-owned table-of-contents API. */
42
+ enableTableOfContents?: boolean;
43
+ /** @experimental Receives the current table-of-contents items when they change. */
44
+ onTableOfContentsChange?: ScribeTableOfContentsChangeHandler;
33
45
  }
34
46
  export declare const Scribe: import("react").ForwardRefExoticComponent<ScribeProps & import("react").RefAttributes<ScribeRef>>;
35
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/components/Scribe/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAGxC,OAAO,EACL,OAAO,EACP,MAAM,EAGN,SAAS,EACT,WAAW,EACX,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,oBAAoB,EAKrB,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,KAAK,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5F,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACzC,sBAAsB,CAAC,EAAE,UAAU,CAAC;IACpC,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACzC,sBAAsB,CAAC,EAAE,UAAU,CAAC;IACpC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,MAAM,mGAkIjB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/components/Scribe/index.tsx"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAIxC,OAAO,KAAK,EACV,kCAAkC,EAElC,iCAAiC,EAClC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,EACP,MAAM,EAGN,SAAS,EACT,WAAW,EACX,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,oBAAoB,EAMrB,MAAM,OAAO,CAAC;AAGf,YAAY,EACV,kCAAkC,EAClC,yBAAyB,EACzB,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,KAAK,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IAC5F,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,2FAA2F;IAC3F,2BAA2B,EAAE,CAAC,MAAM,EAAE,iCAAiC,KAAK,IAAI,CAAC;IACjF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC5D;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACzC,sBAAsB,CAAC,EAAE,UAAU,CAAC;IACpC,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACzC,sBAAsB,CAAC,EAAE,UAAU,CAAC;IACpC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mFAAmF;IACnF,uBAAuB,CAAC,EAAE,kCAAkC,CAAC;CAC9D;AAED,eAAO,MAAM,MAAM,mGAyMjB,CAAC"}
@@ -1,109 +1,152 @@
1
- import { jsxs as E, jsx as n } from "react/jsx-runtime";
2
- import { B as P, c } from "../../BarMenu-BDtEfu-R.js";
3
- import { html2md as g } from "../../utils/html-to-markdown.js";
4
- import "../../markdown-to-html-BwS08CTi.js";
5
- import "../../purify.es-BPDBzHtc.js";
6
- import { E as k } from "../../index-hHvpW2H6.js";
7
- import { initExtensions as O } from "./extension/index.js";
8
- import { E as T } from "../../index-PJNQPLn5.js";
9
- import { forwardRef as J, useCallback as r, useState as D, useImperativeHandle as F, useEffect as i } from "react";
10
- import { ListOptionBar as I } from "../Menu/Mobile/ListOptionBar.js";
11
- import '../../assets/index.css';const X = J((l, h) => {
1
+ import { jsxs as x, jsx as a } from "react/jsx-runtime";
2
+ import { B as A, c as b } from "../../BarMenu-DaKIz3zZ.js";
3
+ import { html2md as I } from "../../utils/html-to-markdown.js";
4
+ import "../../markdown-to-html-pL7ckd-m.js";
5
+ import "../../purify.es-exIQuqhb.js";
6
+ import { E as F } from "../../index-BiBV5TQx.js";
7
+ import { initExtensions as J } from "./extension/index.js";
8
+ import { SCRIBE_TABLE_OF_CONTENTS_META as U } from "./extension/tableOfContents.js";
9
+ import { E as V } from "../../index-DxF-1P4n.js";
10
+ import { forwardRef as K, useRef as E, useEffect as c, useCallback as r, useState as q, useImperativeHandle as G } from "react";
11
+ import { ListOptionBar as Q } from "../Menu/Mobile/ListOptionBar.js";
12
+ import '../../assets/index.css';const it = K((h, B) => {
12
13
  const {
13
- autoFocus: d = !1,
14
- content: p,
14
+ autoFocus: g = !1,
15
+ content: i,
15
16
  editable: o = !0,
16
- editorProps: u,
17
- extensions: y,
18
- onContentChange: a,
19
- showBarMenu: x = !0,
20
- editorContentStyle: N,
21
- editorContentClassName: w,
22
- mainContainerStyle: S,
23
- mainContainerClassName: j,
24
- onKeyDown: v,
25
- externalEditor: B,
26
- mobile: M
27
- } = l, m = r(
28
- ({ editor: e }) => {
29
- const s = e.getHTML(), H = e.getJSON(), L = !o;
30
- a && a({
31
- jsonContent: e.isEmpty ? "" : H,
32
- htmlContent: e.isEmpty ? "" : s,
33
- markdownContent: e.isEmpty ? "" : g(s),
34
- source: L ? "programmatic" : "user"
17
+ editorProps: d,
18
+ extensions: L,
19
+ onContentChange: l,
20
+ showBarMenu: R = !0,
21
+ editorContentStyle: j,
22
+ editorContentClassName: H,
23
+ mainContainerStyle: P,
24
+ mainContainerClassName: k,
25
+ onKeyDown: _,
26
+ externalEditor: T,
27
+ mobile: D,
28
+ onTableOfContentsChange: f
29
+ } = h, O = E(!T && i !== void 0), y = E([]), M = E(f);
30
+ c(() => {
31
+ M.current = f;
32
+ }, [f]);
33
+ const z = r(
34
+ (e, s) => {
35
+ y.current = e, M.current?.(e, s);
36
+ },
37
+ []
38
+ ), u = r(
39
+ ({ editor: e, transaction: s }) => {
40
+ if (s.getMeta(U))
41
+ return;
42
+ const n = e.getHTML(), m = e.getJSON(), p = !o;
43
+ l && l({
44
+ jsonContent: e.isEmpty ? "" : m,
45
+ htmlContent: e.isEmpty ? "" : n,
46
+ markdownContent: e.isEmpty ? "" : I(n),
47
+ source: p ? "programmatic" : "user"
35
48
  });
36
49
  },
37
- [o, a]
38
- ), [t] = D(() => B ?? new k({
39
- ...u,
50
+ [o, l]
51
+ ), [t] = q(() => T ?? new F({
52
+ ...d,
53
+ content: i ?? d?.content,
40
54
  editable: o,
41
- extensions: [...O(l), ...y ?? []],
55
+ extensions: [
56
+ ...J({
57
+ ...h,
58
+ onTableOfContentsChange: z
59
+ }),
60
+ ...L ?? []
61
+ ],
42
62
  editorProps: {
43
63
  attributes: {
44
64
  class: "scribe"
45
65
  },
46
- ...u?.editorProps
66
+ ...d?.editorProps
47
67
  }
48
- })), f = r(() => {
68
+ })), v = r(() => {
49
69
  t.commands.setContent("");
50
- }, [t]), C = r(
70
+ }, [t]), w = r(
51
71
  (e) => {
52
72
  const s = {
53
73
  html: () => t.getHTML(),
54
74
  json: () => t.getJSON(),
55
- markdown: () => g(t.getHTML())
75
+ markdown: () => I(t.getHTML())
56
76
  };
57
77
  return t.isEmpty ? "" : s[e]?.();
58
78
  },
59
79
  [t]
60
- ), b = r(
80
+ ), N = r(
61
81
  (e) => {
62
82
  t.commands.setContent(e);
63
83
  },
64
84
  [t]
85
+ ), S = r(
86
+ (e) => {
87
+ const s = typeof e == "string" ? e : e.id, n = y.current.find((C) => C.id === s) ?? (typeof e == "string" ? void 0 : e);
88
+ if (!n || t.isDestroyed)
89
+ return;
90
+ const m = t.view.nodeDOM(n.pos), p = m instanceof HTMLElement ? m : n.dom;
91
+ if (t.isEditable) {
92
+ const C = Math.max(
93
+ 0,
94
+ Math.min(n.pos + n.node.nodeSize - 1, t.state.doc.content.size)
95
+ );
96
+ t.commands.focus(C, { scrollIntoView: !1 });
97
+ }
98
+ p.scrollIntoView({ behavior: "smooth", block: "start" });
99
+ },
100
+ [t]
65
101
  );
66
- return F(h, () => ({
67
- resetContent: f,
68
- setContent: b,
69
- getContent: C,
102
+ return G(B, () => ({
103
+ resetContent: v,
104
+ setContent: N,
105
+ getContent: w,
106
+ scrollToTableOfContentsItem: S,
70
107
  editor: t
71
- }), [t, C, f, b]), i(() => {
72
- t.commands.setContent(p || "");
73
- }, [p, t]), i(() => {
108
+ }), [t, w, v, S, N]), c(() => {
109
+ if (i !== void 0) {
110
+ if (O.current) {
111
+ O.current = !1;
112
+ return;
113
+ }
114
+ t.commands.setContent(i, { emitUpdate: !1 });
115
+ }
116
+ }, [i, t]), c(() => {
74
117
  t.setEditable(!!o);
75
- }, [o, t]), i(() => (t.off("update"), t.on("update", m), () => {
76
- t.off("update", m);
77
- }), [t, m]), i(() => {
78
- d && t.commands.focus("end");
79
- }, [d, t]), /* @__PURE__ */ E(
118
+ }, [o, t]), c(() => (t.off("update"), t.on("update", u), () => {
119
+ t.off("update", u);
120
+ }), [t, u]), c(() => {
121
+ g && t.commands.focus("end");
122
+ }, [g, t]), /* @__PURE__ */ x(
80
123
  "div",
81
124
  {
82
- className: c("scribe-wrapper", "scribe-root", j),
125
+ className: b("scribe-wrapper", "scribe-root", k),
83
126
  "data-scribe-root": !0,
84
- style: S,
127
+ style: P,
85
128
  children: [
86
- /* @__PURE__ */ E("div", { className: c("scribe-frame", o && "scribe-frame--editable"), children: [
87
- t && x ? /* @__PURE__ */ n(P, { editor: t }) : null,
88
- /* @__PURE__ */ n(
129
+ /* @__PURE__ */ x("div", { className: b("scribe-frame", o && "scribe-frame--editable"), children: [
130
+ t && R ? /* @__PURE__ */ a(A, { editor: t }) : null,
131
+ /* @__PURE__ */ a(
89
132
  "div",
90
133
  {
91
- className: c(
134
+ className: b(
92
135
  "scribe-content",
93
136
  o && "scribe-content--editable",
94
- w
137
+ H
95
138
  ),
96
- style: N,
97
- children: /* @__PURE__ */ n(T, { editor: t, onKeyDown: v })
139
+ style: j,
140
+ children: /* @__PURE__ */ a(V, { editor: t, onKeyDown: _ })
98
141
  }
99
142
  ),
100
- M ? /* @__PURE__ */ n(I, { editor: t }) : null
143
+ D ? /* @__PURE__ */ a(Q, { editor: t }) : null
101
144
  ] }),
102
- /* @__PURE__ */ n("div", { className: "scribe-popup-root", "data-scribe-popup-root": !0 })
145
+ /* @__PURE__ */ a("div", { className: "scribe-popup-root", "data-scribe-popup-root": !0 })
103
146
  ]
104
147
  }
105
148
  );
106
149
  });
107
150
  export {
108
- X as Scribe
151
+ it as Scribe
109
152
  };
@@ -1,4 +1,4 @@
1
- import { M as Pe, m as Ne, h as le, b as qt, P as Jt, i as Ie, j as we, l as ve, n as He, o as xe } from "./index-hHvpW2H6.js";
1
+ import { M as Pe, m as Ne, h as le, b as qt, P as Jt, i as Ie, j as we, l as ve, n as He, o as xe } from "./index-BiBV5TQx.js";
2
2
  const Ue = "aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3nd0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0axi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2", De = "ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2", zt = "numeric", Wt = "ascii", Ft = "alpha", K = "asciinumeric", F = "alphanumeric", Kt = "domain", ge = "emoji", Me = "scheme", je = "slashscheme", xt = "whitespace";
3
3
  function Be(t, n) {
4
4
  return t in n || (n[t] = []), n[t];