@eightyfourthousand/lib-editing 2026.6.4 → 2026.7.0
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.
- package/lib/components/editor/PaginationProvider.js +7 -39
- package/lib/components/editor/PaginationProvider.js.map +1 -1
- package/lib/components/editor/TranslationBuilder.js +0 -1
- package/lib/components/editor/TranslationBuilder.js.map +1 -1
- package/lib/components/editor/TranslationEditor.js +2 -1
- package/lib/components/editor/TranslationEditor.js.map +1 -1
- package/lib/components/editor/extensions/Abbreviation/Abbreviation.js +6 -0
- package/lib/components/editor/extensions/Abbreviation/Abbreviation.js.map +1 -1
- package/lib/components/editor/extensions/Bold.js +5 -15
- package/lib/components/editor/extensions/Bold.js.map +1 -1
- package/lib/components/editor/extensions/Foreign/Foreign.js +5 -3
- package/lib/components/editor/extensions/Foreign/Foreign.js.map +1 -1
- package/lib/components/editor/extensions/GlobalConfig.js +3 -0
- package/lib/components/editor/extensions/GlobalConfig.js.map +1 -1
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstanceNode.ssr.js +9 -2
- package/lib/components/editor/extensions/GlossaryInstance/GlossaryInstanceNode.ssr.js.map +1 -1
- package/lib/components/editor/extensions/Indent.js +2 -7
- package/lib/components/editor/extensions/Indent.js.map +1 -1
- package/lib/components/editor/extensions/InternalLink/InternalLink.ssr.js +12 -0
- package/lib/components/editor/extensions/InternalLink/InternalLink.ssr.js.map +1 -1
- package/lib/components/editor/extensions/Italic.js +5 -15
- package/lib/components/editor/extensions/Italic.js.map +1 -1
- package/lib/components/editor/extensions/LeadingSpace.js +2 -7
- package/lib/components/editor/extensions/LeadingSpace.js.map +1 -1
- package/lib/components/editor/extensions/Link/Link.ssr.js +11 -1
- package/lib/components/editor/extensions/Link/Link.ssr.js.map +1 -1
- package/lib/components/editor/extensions/List.js +11 -20
- package/lib/components/editor/extensions/List.js.map +1 -1
- package/lib/components/editor/extensions/Mantra/Mantra.js +5 -5
- package/lib/components/editor/extensions/Mantra/Mantra.js.map +1 -1
- package/lib/components/editor/extensions/Mention/Mention.d.ts +19 -2
- package/lib/components/editor/extensions/Mention/Mention.js +29 -2
- package/lib/components/editor/extensions/Mention/Mention.js.map +1 -1
- package/lib/components/editor/extensions/Mention/Mention.ssr.d.ts +1 -0
- package/lib/components/editor/extensions/Mention/Mention.ssr.js +15 -8
- package/lib/components/editor/extensions/Mention/Mention.ssr.js.map +1 -1
- package/lib/components/editor/extensions/Mention/MentionAdvancedOverlay.d.ts +12 -0
- package/lib/components/editor/extensions/Mention/MentionAdvancedOverlay.js +39 -0
- package/lib/components/editor/extensions/Mention/MentionAdvancedOverlay.js.map +1 -0
- package/lib/components/editor/extensions/Mention/MentionHoverContent.d.ts +7 -0
- package/lib/components/editor/extensions/Mention/MentionHoverContent.js +88 -45
- package/lib/components/editor/extensions/Mention/MentionHoverContent.js.map +1 -1
- package/lib/components/editor/extensions/Mention/MentionList.d.ts +15 -0
- package/lib/components/editor/extensions/Mention/MentionList.js +70 -0
- package/lib/components/editor/extensions/Mention/MentionList.js.map +1 -0
- package/lib/components/editor/extensions/Mention/MentionSearch.d.ts +18 -0
- package/lib/components/editor/extensions/Mention/MentionSearch.js +34 -0
- package/lib/components/editor/extensions/Mention/MentionSearch.js.map +1 -0
- package/lib/components/editor/extensions/Mention/MentionSuggestion.d.ts +10 -0
- package/lib/components/editor/extensions/Mention/MentionSuggestion.js +78 -0
- package/lib/components/editor/extensions/Mention/MentionSuggestion.js.map +1 -0
- package/lib/components/editor/extensions/Mention/useMentionSearch.d.ts +34 -0
- package/lib/components/editor/extensions/Mention/useMentionSearch.js +89 -0
- package/lib/components/editor/extensions/Mention/useMentionSearch.js.map +1 -0
- package/lib/components/editor/extensions/ParagraphIndent.js +4 -9
- package/lib/components/editor/extensions/ParagraphIndent.js.map +1 -1
- package/lib/components/editor/extensions/Passage/PassageNode.ssr.js +5 -2
- package/lib/components/editor/extensions/Passage/PassageNode.ssr.js.map +1 -1
- package/lib/components/editor/extensions/SmallCaps.js +5 -14
- package/lib/components/editor/extensions/SmallCaps.js.map +1 -1
- package/lib/components/editor/extensions/Subscript.js +5 -15
- package/lib/components/editor/extensions/Subscript.js.map +1 -1
- package/lib/components/editor/extensions/Superscript.js +5 -15
- package/lib/components/editor/extensions/Superscript.js.map +1 -1
- package/lib/components/editor/extensions/Underline.js +5 -15
- package/lib/components/editor/extensions/Underline.js.map +1 -1
- package/lib/components/editor/hooks/useBlockEditor.js +1 -0
- package/lib/components/editor/hooks/useBlockEditor.js.map +1 -1
- package/lib/components/editor/hooks/useTranslationExtensions.d.ts +1 -1
- package/lib/components/shared/bibliography/BibliographyList.js +1 -1
- package/lib/components/shared/bibliography/BibliographyList.js.map +1 -1
- package/lib/components/shared/glossary/GlossaryPaginationProvider.js +5 -8
- package/lib/components/shared/glossary/GlossaryPaginationProvider.js.map +1 -1
- package/lib/exporters/mention.js +1 -0
- package/lib/exporters/mention.js.map +1 -1
- package/lib/transformers/mention.js +2 -1
- package/lib/transformers/mention.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { BulletList, ListItem as TipTapListItem } from '@tiptap/extension-list';
|
|
2
|
-
import { mergeAttributes } from '@tiptap/core';
|
|
3
2
|
const ITEM_STYLE_TO_CLASS = {
|
|
4
3
|
none: 'list-none',
|
|
5
4
|
dots: 'list-[disc]',
|
|
@@ -30,13 +29,10 @@ export const List = BulletList.extend({
|
|
|
30
29
|
spacing: {
|
|
31
30
|
default: 'horizontal',
|
|
32
31
|
parseHTML: (element) => element.getAttribute('data-spacing'),
|
|
33
|
-
renderHTML(attributes) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
'ml-4',
|
|
38
|
-
});
|
|
39
|
-
},
|
|
32
|
+
renderHTML: (attributes) => ({
|
|
33
|
+
'data-spacing': attributes.spacing,
|
|
34
|
+
class: LIST_SPACING_TO_CLASS[attributes.spacing || 'horizontal'] || 'ml-4',
|
|
35
|
+
}),
|
|
40
36
|
},
|
|
41
37
|
nesting: {
|
|
42
38
|
default: undefined,
|
|
@@ -44,22 +40,17 @@ export const List = BulletList.extend({
|
|
|
44
40
|
const nesting = element.getAttribute('data-nesting');
|
|
45
41
|
return nesting ? parseInt(nesting, 10) : 0;
|
|
46
42
|
},
|
|
47
|
-
renderHTML(attributes)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
},
|
|
43
|
+
renderHTML: (attributes) => attributes.nesting != null
|
|
44
|
+
? { 'data-nesting': `${attributes.nesting}` }
|
|
45
|
+
: {},
|
|
52
46
|
},
|
|
53
47
|
itemStyle: {
|
|
54
48
|
default: 'none',
|
|
55
49
|
parseHTML: (element) => element.getAttribute('data-item-style'),
|
|
56
|
-
renderHTML(attributes) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
'list-none',
|
|
61
|
-
});
|
|
62
|
-
},
|
|
50
|
+
renderHTML: (attributes) => ({
|
|
51
|
+
'data-item-style': attributes.itemStyle,
|
|
52
|
+
class: ITEM_STYLE_TO_CLASS[attributes.itemStyle || 'none'] || 'list-none',
|
|
53
|
+
}),
|
|
63
54
|
},
|
|
64
55
|
};
|
|
65
56
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/List.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/List.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEhF,MAAM,mBAAmB,GAA8B;IACrD,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,oBAAoB;CAC9B,CAAC;AAEF,MAAM,qBAAqB,GAA8B;IACvD,UAAU,EAAE,MAAM;IAClB,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,8BAA8B;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;IACpC,UAAU;QACR,OAAO;YACL,YAAY,EAAE,UAAU;YACxB,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,KAAK;YACrB,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;IACD,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,OAAO,EAAE;gBACP,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;gBAC5D,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC3B,cAAc,EAAE,UAAU,CAAC,OAAO;oBAClC,KAAK,EACH,qBAAqB,CAAC,UAAU,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,MAAM;iBACtE,CAAC;aACH;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;oBACrB,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;oBACrD,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBACD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,OAAO,IAAI,IAAI;oBACxB,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE;oBAC7C,CAAC,CAAC,EAAE;aACT;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAC/D,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC3B,iBAAiB,EAAE,UAAU,CAAC,SAAS;oBACvC,KAAK,EACH,mBAAmB,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,WAAW;iBACrE,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
@@ -6,12 +6,15 @@ export const MantraMark = Mark.create({
|
|
|
6
6
|
return {
|
|
7
7
|
uuid: {
|
|
8
8
|
default: undefined,
|
|
9
|
+
renderHTML: (attributes) => attributes.uuid ? { uuid: attributes.uuid } : {},
|
|
9
10
|
},
|
|
10
11
|
type: {
|
|
11
12
|
default: 'mantra',
|
|
13
|
+
renderHTML: (attributes) => attributes.type ? { type: attributes.type } : {},
|
|
12
14
|
},
|
|
13
15
|
lang: {
|
|
14
16
|
default: 'Sa-Ltn',
|
|
17
|
+
renderHTML: (attributes) => attributes.lang ? { lang: attributes.lang } : {},
|
|
15
18
|
},
|
|
16
19
|
};
|
|
17
20
|
},
|
|
@@ -27,13 +30,10 @@ export const MantraMark = Mark.create({
|
|
|
27
30
|
},
|
|
28
31
|
];
|
|
29
32
|
},
|
|
30
|
-
renderHTML({ HTMLAttributes
|
|
31
|
-
const lang = mark.attrs.lang;
|
|
33
|
+
renderHTML({ HTMLAttributes }) {
|
|
32
34
|
return [
|
|
33
35
|
'span',
|
|
34
|
-
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes,
|
|
35
|
-
lang,
|
|
36
|
-
}),
|
|
36
|
+
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
|
|
37
37
|
0,
|
|
38
38
|
];
|
|
39
39
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mantra.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mantra/Mantra.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAgBpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAgB;IACnD,IAAI,EAAE,QAAQ;IACd,aAAa;QACX,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"Mantra.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mantra/Mantra.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAgBpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAgB;IACnD,IAAI,EAAE,QAAQ;IACd,aAAa;QACX,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aACnD;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aACnD;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aACnD;SACF,CAAC;IACJ,CAAC;IAED,UAAU;QACR,OAAO;YACL,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO;YACL;gBACE,GAAG,EAAE,qBAAqB;aAC3B;SACF,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,EAAE,cAAc,EAAE;QAC3B,OAAO;YACL,MAAM;YACN,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC;YAC5D,CAAC;SACF,CAAC;IACJ,CAAC;IAED,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,OAAO;YACL,SAAS,EACP,CAAC,IAA0B,EAAE,EAAE,CAC/B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACf,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC;YACH,YAAY,EACV,CAAC,IAA0B,EAAE,EAAE,CAC/B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBACpC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1D,CAAC;YACH,WAAW,EACT,GAAG,EAAE,CACL,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACf,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
/** Payload handed to the advanced mention picker overlay. */
|
|
2
|
+
export interface MentionAdvancedPayload {
|
|
3
|
+
/** Document position where the mention should be inserted. */
|
|
4
|
+
pos: number;
|
|
5
|
+
/** The text typed after `@`, used to seed the advanced search. */
|
|
6
|
+
query: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MentionStorage {
|
|
9
|
+
/**
|
|
10
|
+
* Registered by the stable MentionAdvancedOverlay; invoked by the `@`
|
|
11
|
+
* suggestion list's "Advanced" button to open the dedicated picker.
|
|
12
|
+
*/
|
|
13
|
+
openAdvanced?: (payload: MentionAdvancedPayload) => void;
|
|
14
|
+
}
|
|
1
15
|
declare module '@tiptap/core' {
|
|
2
16
|
interface Commands<ReturnType> {
|
|
3
17
|
mention: {
|
|
4
|
-
setMention: (entity: string, linkType: string) => ReturnType;
|
|
18
|
+
setMention: (entity: string, linkType: string, displayText?: string, isSameWork?: boolean) => ReturnType;
|
|
5
19
|
};
|
|
6
20
|
}
|
|
21
|
+
interface Storage {
|
|
22
|
+
mention: MentionStorage;
|
|
23
|
+
}
|
|
7
24
|
}
|
|
8
|
-
export declare const Mention: import("@tiptap/core").Node<
|
|
25
|
+
export declare const Mention: import("@tiptap/core").Node<unknown, MentionStorage>;
|
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import Suggestion from '@tiptap/suggestion';
|
|
2
3
|
import { registerEditorElement } from '../../util';
|
|
3
4
|
import { PANEL_FOR_SECTION, TAB_FOR_SECTION } from '../../../shared/types';
|
|
4
5
|
import { MentionSSR } from './Mention.ssr';
|
|
6
|
+
import { mentionSuggestion } from './MentionSuggestion';
|
|
5
7
|
export const Mention = MentionSSR.extend({
|
|
8
|
+
addStorage() {
|
|
9
|
+
return {
|
|
10
|
+
openAdvanced: undefined,
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
// `@`-triggered authoring lives only on the client extension so the SSR
|
|
14
|
+
// node (MentionSSR) stays free of editor-only plugins.
|
|
15
|
+
addProseMirrorPlugins() {
|
|
16
|
+
return [
|
|
17
|
+
...(this.parent?.() ?? []),
|
|
18
|
+
Suggestion({
|
|
19
|
+
editor: this.editor,
|
|
20
|
+
...mentionSuggestion,
|
|
21
|
+
}),
|
|
22
|
+
];
|
|
23
|
+
},
|
|
6
24
|
addNodeView() {
|
|
7
25
|
return (props) => {
|
|
8
26
|
const isEditable = props.editor.isEditable;
|
|
@@ -11,10 +29,14 @@ export const Mention = MentionSSR.extend({
|
|
|
11
29
|
const items = props.node.attrs.items || [];
|
|
12
30
|
items.forEach((item) => {
|
|
13
31
|
const anchor = document.createElement('a');
|
|
14
|
-
anchor.classList.add('mention-link'
|
|
32
|
+
anchor.classList.add('mention-link');
|
|
15
33
|
if (item.toh) {
|
|
16
34
|
anchor.setAttribute('data-toh', item.toh);
|
|
17
35
|
}
|
|
36
|
+
// `lang` drives the `[lang]` typography rules (e.g. italic work titles).
|
|
37
|
+
if (item.lang) {
|
|
38
|
+
anchor.setAttribute('lang', item.lang);
|
|
39
|
+
}
|
|
18
40
|
// Display priority: text (custom override) > displayText (dynamic) > entity UUID (fallback)
|
|
19
41
|
const displayText = item.text || item.displayText;
|
|
20
42
|
anchor.textContent =
|
|
@@ -93,7 +115,10 @@ export const Mention = MentionSSR.extend({
|
|
|
93
115
|
},
|
|
94
116
|
addCommands() {
|
|
95
117
|
return {
|
|
96
|
-
setMention: (entity, linkType) => ({ commands }) => {
|
|
118
|
+
setMention: (entity, linkType, displayText, isSameWork) => ({ commands }) => {
|
|
119
|
+
// `displayText` is a transient label for immediate in-session display
|
|
120
|
+
// — it is never persisted, so the canonical value resolves on load.
|
|
121
|
+
// A persisted override lives in `text` (set via the hover card).
|
|
97
122
|
return commands.insertContent({
|
|
98
123
|
type: this.name,
|
|
99
124
|
attrs: {
|
|
@@ -102,6 +127,8 @@ export const Mention = MentionSSR.extend({
|
|
|
102
127
|
uuid: uuidv4(),
|
|
103
128
|
entity,
|
|
104
129
|
linkType,
|
|
130
|
+
...(isSameWork ? { isSameWork: true } : {}),
|
|
131
|
+
...(displayText ? { displayText } : {}),
|
|
105
132
|
},
|
|
106
133
|
],
|
|
107
134
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mention.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/Mention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Mention.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/Mention.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Node, mergeAttributes } from '@tiptap/core';
|
|
2
|
-
import {
|
|
2
|
+
import { safeHref } from '@eightyfourthousand/lib-utils';
|
|
3
3
|
const isMentionItem = (value) => {
|
|
4
4
|
return !!value && typeof value === 'object';
|
|
5
5
|
};
|
|
@@ -23,6 +23,10 @@ export const MentionSSR = Node.create({
|
|
|
23
23
|
return {
|
|
24
24
|
items: {
|
|
25
25
|
default: [],
|
|
26
|
+
// `renderHTML` builds the mention's children from `node.attrs.items`;
|
|
27
|
+
// `rendered: false` stops the static SSR renderer from also serializing
|
|
28
|
+
// the raw array as `items="[object Object]"`. parseHTML is unaffected.
|
|
29
|
+
rendered: false,
|
|
26
30
|
parseHTML: (element) => {
|
|
27
31
|
const itemsAttr = element.getAttribute('data-items');
|
|
28
32
|
if (!itemsAttr)
|
|
@@ -47,20 +51,23 @@ export const MentionSSR = Node.create({
|
|
|
47
51
|
: [];
|
|
48
52
|
const children = items.map((item) => {
|
|
49
53
|
const label = item.text || item.displayText || '';
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
// Shared presentational attrs applied to every rendered variant. `lang`
|
|
55
|
+
// drives the `[lang]` typography rules (e.g. italic work titles).
|
|
56
|
+
const extraAttrs = {
|
|
57
|
+
...(item.toh ? { 'data-toh': item.toh } : {}),
|
|
58
|
+
...(item.lang ? { lang: item.lang } : {}),
|
|
59
|
+
};
|
|
53
60
|
if (!label || !item.entity || !item.linkType) {
|
|
54
61
|
return [
|
|
55
62
|
'span',
|
|
56
|
-
{ class:
|
|
63
|
+
{ class: 'mention-link', ...extraAttrs },
|
|
57
64
|
label,
|
|
58
65
|
];
|
|
59
66
|
}
|
|
60
67
|
const href = safeHref(`/entity/${item.linkType}/${item.entity}`);
|
|
61
68
|
const attrs = {
|
|
62
|
-
class: 'mention-link
|
|
63
|
-
...
|
|
69
|
+
class: 'mention-link',
|
|
70
|
+
...extraAttrs,
|
|
64
71
|
};
|
|
65
72
|
if (item.uuid)
|
|
66
73
|
attrs['uuid'] = item.uuid;
|
|
@@ -84,7 +91,7 @@ export const MentionSSR = Node.create({
|
|
|
84
91
|
else {
|
|
85
92
|
return [
|
|
86
93
|
'span',
|
|
87
|
-
{ class: 'mention-link
|
|
94
|
+
{ class: 'mention-link', ...extraAttrs },
|
|
88
95
|
label,
|
|
89
96
|
];
|
|
90
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mention.ssr.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/Mention.ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Mention.ssr.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/Mention.ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAmBzD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE;IAC7D,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAoB;IACvD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,wEAAwE;IACxE,2EAA2E;IAC3E,KAAK,EAAE,EAAE;IAET,UAAU;QACR,OAAO;YACL,cAAc,EAAE,EAAE;SACnB,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,EAAE;gBACX,sEAAsE;gBACtE,wEAAwE;gBACxE,uEAAuE;gBACvE,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;oBACrB,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;oBACrD,IAAI,CAAC,SAAS;wBAAE,OAAO,EAAE,CAAC;oBAC1B,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC/B,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,CAAC,EAAE,GAAG,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7B,MAAM,KAAK,GAAkB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;YAClD,wEAAwE;YACxE,kEAAkE;YAClE,MAAM,UAAU,GAA2B;gBACzC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC;YAEF,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7C,OAAO;oBACL,MAAM;oBACN,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE;oBACxC,KAAK;iBACK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,GAA2B;gBACpC,KAAK,EAAE,cAAc;gBACrB,GAAG,UAAU;aACd,CAAC;YACF,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ;gBAAE,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAExD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBACpB,KAAK,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;gBACjC,IAAI,IAAI,CAAC,OAAO;oBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;gBACvD,IAAI,IAAI,CAAC,OAAO;oBAAE,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1D,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBACrB,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;gBAC3B,KAAK,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,MAAM;oBACN,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE;oBACxC,KAAK;iBACK,CAAC;YACf,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAY,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM;YACN,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,EAAE;gBAC3D,KAAK,EAAE,mBAAmB;gBAC1B,WAAW,EAAE,SAAS;aACvB,CAAC;YACF,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Editor } from '@tiptap/core';
|
|
2
|
+
/**
|
|
3
|
+
* A single, stable React layer (mounted as a sibling of EditorContent) that
|
|
4
|
+
* hosts the advanced mention picker. The inline `@` dropdown cannot host a
|
|
5
|
+
* focusable work/toh field — focusing it closes the suggestion — so its
|
|
6
|
+
* "Advanced" button hands off to this dialog, which owns its own focus and is
|
|
7
|
+
* free to search any work. It inserts the chosen mention back at the position
|
|
8
|
+
* the `@` trigger occupied.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MentionAdvancedOverlay: ({ editor }: {
|
|
11
|
+
editor: Editor;
|
|
12
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@eightyfourthousand/design-system';
|
|
5
|
+
import { MentionSearch } from './MentionSearch';
|
|
6
|
+
const EDITOR_UPDATE_DELAY_MS = 50;
|
|
7
|
+
/**
|
|
8
|
+
* A single, stable React layer (mounted as a sibling of EditorContent) that
|
|
9
|
+
* hosts the advanced mention picker. The inline `@` dropdown cannot host a
|
|
10
|
+
* focusable work/toh field — focusing it closes the suggestion — so its
|
|
11
|
+
* "Advanced" button hands off to this dialog, which owns its own focus and is
|
|
12
|
+
* free to search any work. It inserts the chosen mention back at the position
|
|
13
|
+
* the `@` trigger occupied.
|
|
14
|
+
*/
|
|
15
|
+
export const MentionAdvancedOverlay = ({ editor }) => {
|
|
16
|
+
const [payload, setPayload] = useState(null);
|
|
17
|
+
// Register the openAdvanced callback the suggestion list calls.
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const storage = editor.storage.mention;
|
|
20
|
+
storage.openAdvanced = (next) => setPayload(next);
|
|
21
|
+
return () => {
|
|
22
|
+
storage.openAdvanced = undefined;
|
|
23
|
+
};
|
|
24
|
+
}, [editor]);
|
|
25
|
+
const close = () => setPayload(null);
|
|
26
|
+
return (_jsx(Dialog, { open: !!payload, onOpenChange: (open) => !open && close(), children: _jsxs(DialogContent, { className: "max-w-md", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Insert mention" }), _jsx(DialogDescription, { children: "Search any work for a passage, folio, glossary term, bibliography entry, or another work." })] }), payload && (_jsx(MentionSearch, { initialQuery: payload.query, onSelect: ({ entity, linkType, label, isSameWork }) => {
|
|
27
|
+
const { pos } = payload;
|
|
28
|
+
close();
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
editor
|
|
31
|
+
.chain()
|
|
32
|
+
.focus()
|
|
33
|
+
.setTextSelection(pos)
|
|
34
|
+
.setMention(entity, linkType, label, isSameWork)
|
|
35
|
+
.run();
|
|
36
|
+
}, EDITOR_UPDATE_DELAY_MS);
|
|
37
|
+
} }))] }) }));
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=MentionAdvancedOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionAdvancedOverlay.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionAdvancedOverlay.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAE,MAAM,EAAsB,EAAE,EAAE;IACvE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgC,IAAI,CAAC,CAAC;IAE5E,gEAAgE;IAChE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QACvC,OAAO,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,CACL,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,YAC/D,MAAC,aAAa,IAAC,SAAS,EAAC,UAAU,aACjC,MAAC,YAAY,eACX,KAAC,WAAW,iCAA6B,EACzC,KAAC,iBAAiB,4GAGE,IACP,EACd,OAAO,IAAI,CACV,KAAC,aAAa,IACZ,YAAY,EAAE,OAAO,CAAC,KAAK,EAC3B,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;wBACpD,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;wBACxB,KAAK,EAAE,CAAC;wBACR,UAAU,CAAC,GAAG,EAAE;4BACd,MAAM;iCACH,KAAK,EAAE;iCACP,KAAK,EAAE;iCACP,gBAAgB,CAAC,GAAG,CAAC;iCACrB,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;iCAC/C,GAAG,EAAE,CAAC;wBACX,CAAC,EAAE,sBAAsB,CAAC,CAAC;oBAC7B,CAAC,GACD,CACH,IACa,GACT,CACV,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { Editor } from '@tiptap/core';
|
|
2
|
+
/**
|
|
3
|
+
* Hover card for an existing mention. Editing is limited to a few actions:
|
|
4
|
+
* overriding the display text (the persisted `text` property), tagging a
|
|
5
|
+
* `work` mention's language (the `lang` property, which drives title
|
|
6
|
+
* typography), and deleting. Re-pointing a mention at a different entity is not
|
|
7
|
+
* supported — delete and re-insert instead.
|
|
8
|
+
*/
|
|
2
9
|
export declare const MentionHoverContent: ({ uuid, entityType, entity, editor, close, setHoverCardEditing, }: {
|
|
3
10
|
uuid: string;
|
|
4
11
|
entityType: string;
|
|
@@ -1,9 +1,24 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Button } from '@eightyfourthousand/design-system';
|
|
3
|
-
import { ChevronRightIcon,
|
|
3
|
+
import { CheckIcon, ChevronLeftIcon, ChevronRightIcon, LanguagesIcon, Trash2Icon, TypeIcon, XIcon, } from 'lucide-react';
|
|
4
4
|
import { useCallback, useState } from 'react';
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { HoverInputField } from '../HoverInputField';
|
|
6
|
+
/**
|
|
7
|
+
* Language options offered when tagging a `work` mention. The `lang` attribute
|
|
8
|
+
* drives the `[lang]` typography rules (italic titles, Tibetan font), so the
|
|
9
|
+
* full translation-language set is available.
|
|
10
|
+
*/
|
|
11
|
+
const LANG_OPTIONS = [
|
|
12
|
+
{ name: 'English', lang: 'en' },
|
|
13
|
+
{ name: 'Sanskrit', lang: 'Sa-Ltn' },
|
|
14
|
+
{ name: 'Wylie', lang: 'Bo-Ltn' },
|
|
15
|
+
{ name: 'Tibetan', lang: 'bo' },
|
|
16
|
+
{ name: 'Chinese', lang: 'zh' },
|
|
17
|
+
{ name: 'Japanese', lang: 'ja' },
|
|
18
|
+
{ name: 'Mongolian', lang: 'Mt-Ltn' },
|
|
19
|
+
{ name: 'Pali', lang: 'Pi-Ltn' },
|
|
20
|
+
{ name: 'Pinyin', lang: 'Zh-Ltn' },
|
|
21
|
+
];
|
|
7
22
|
/**
|
|
8
23
|
* Find a mention node in the document that contains an item with the given UUID.
|
|
9
24
|
*/
|
|
@@ -24,22 +39,61 @@ function findMentionNodeByItemUuid(editor, itemUuid) {
|
|
|
24
39
|
});
|
|
25
40
|
return result;
|
|
26
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Locate the mention node containing the item and apply an edit to it. The
|
|
44
|
+
* node is re-found by uuid at dispatch time, so positions are always fresh —
|
|
45
|
+
* no need to defer past the hover card closing.
|
|
46
|
+
*/
|
|
47
|
+
function withMentionNode(editor, itemUuid, fn) {
|
|
48
|
+
if (editor.isDestroyed) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const found = findMentionNodeByItemUuid(editor, itemUuid);
|
|
52
|
+
if (!found?.node) {
|
|
53
|
+
console.warn('Mention node not found in the document.');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
fn(found.pos, found.node);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Hover card for an existing mention. Editing is limited to a few actions:
|
|
60
|
+
* overriding the display text (the persisted `text` property), tagging a
|
|
61
|
+
* `work` mention's language (the `lang` property, which drives title
|
|
62
|
+
* typography), and deleting. Re-pointing a mention at a different entity is not
|
|
63
|
+
* supported — delete and re-insert instead.
|
|
64
|
+
*/
|
|
27
65
|
export const MentionHoverContent = ({ uuid, entityType, entity, editor, close, setHoverCardEditing, }) => {
|
|
28
|
-
const [
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
66
|
+
const [mode, setModeLocal] = useState('view');
|
|
67
|
+
// Snapshot the item once when the card opens — the custom override (`text`)
|
|
68
|
+
// pre-fills the rename field, and text/displayText drive the label shown.
|
|
69
|
+
const [item] = useState(() => {
|
|
70
|
+
const found = findMentionNodeByItemUuid(editor, uuid);
|
|
71
|
+
const items = found?.node?.attrs.items || [];
|
|
72
|
+
return items.find((i) => i.uuid === uuid);
|
|
73
|
+
});
|
|
74
|
+
const currentText = item?.text ?? '';
|
|
75
|
+
// Prefer the display text; fall back to the entity UUID only when unresolved.
|
|
76
|
+
const displayLabel = item?.text || item?.displayText || entity;
|
|
77
|
+
// Language tagging is only meaningful for work titles.
|
|
78
|
+
const isWork = entityType === 'work';
|
|
79
|
+
const setMode = useCallback((next) => {
|
|
80
|
+
setModeLocal(next);
|
|
81
|
+
setHoverCardEditing(next !== 'view');
|
|
32
82
|
}, [setHoverCardEditing]);
|
|
83
|
+
const mutateItem = useCallback((updater) => {
|
|
84
|
+
setMode('view');
|
|
85
|
+
close();
|
|
86
|
+
withMentionNode(editor, uuid, (pos, node) => {
|
|
87
|
+
const items = (node.attrs.items || []).map((item) => (item.uuid === uuid ? updater(item) : item));
|
|
88
|
+
const { tr } = editor.state;
|
|
89
|
+
tr.setNodeMarkup(pos, undefined, { ...node.attrs, items });
|
|
90
|
+
editor.view.dispatch(tr);
|
|
91
|
+
});
|
|
92
|
+
}, [editor, uuid, close, setMode]);
|
|
33
93
|
const deleteMention = useCallback(() => {
|
|
34
|
-
|
|
94
|
+
setMode('view');
|
|
35
95
|
close();
|
|
36
|
-
|
|
37
|
-
const found = findMentionNodeByItemUuid(editor, uuid);
|
|
38
|
-
if (!found || !found.node) {
|
|
39
|
-
console.warn('Mention node not found in the document.');
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const { pos, node } = found;
|
|
96
|
+
withMentionNode(editor, uuid, (pos, node) => {
|
|
43
97
|
const items = (node.attrs.items || []).filter((item) => item.uuid !== uuid);
|
|
44
98
|
const { tr } = editor.state;
|
|
45
99
|
if (items.length === 0) {
|
|
@@ -51,34 +105,23 @@ export const MentionHoverContent = ({ uuid, entityType, entity, editor, close, s
|
|
|
51
105
|
tr.setNodeMarkup(pos, undefined, { ...node.attrs, items });
|
|
52
106
|
}
|
|
53
107
|
editor.view.dispatch(tr);
|
|
54
|
-
}
|
|
55
|
-
}, [editor, uuid, close,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}, EDITOR_UPDATE_DELAY_MS);
|
|
73
|
-
}, [editor, uuid, close, setIsEditing]);
|
|
74
|
-
return (_jsx("div", { className: "flex justify-between gap-2 p-2 w-fit max-w-80", children: isEditing ? (_jsx(InternalLinkInput, { type: entityType, uuid: entity, onSubmit: (type, entityVal) => {
|
|
75
|
-
if (type && entityVal) {
|
|
76
|
-
updateMention(type, entityVal);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
deleteMention();
|
|
80
|
-
}
|
|
81
|
-
setIsEditing(false);
|
|
82
|
-
} })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-primary text-sm my-auto", children: entityType }), _jsx(ChevronRightIcon, { className: "my-auto size-4" }), _jsx("span", { className: "truncate text-muted-foreground text-sm my-auto", children: entity }), _jsx("span", { className: "flex-grow" }), _jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", onClick: () => setIsEditing(true), children: _jsx(PencilIcon, { className: "text-primary my-auto" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", onClick: deleteMention, children: _jsx(Trash2Icon, { className: "text-destructive my-auto" }) })] })) }));
|
|
108
|
+
});
|
|
109
|
+
}, [editor, uuid, close, setMode]);
|
|
110
|
+
// Set or clear the custom override label. Passing no value clears `text`,
|
|
111
|
+
// returning the mention to its dynamically resolved label.
|
|
112
|
+
const renameMention = useCallback((value) => {
|
|
113
|
+
mutateItem((item) => ({ ...item, text: value || undefined }));
|
|
114
|
+
}, [mutateItem]);
|
|
115
|
+
// Set or clear the mention's language tag. Passing no value clears `lang`.
|
|
116
|
+
const setLang = useCallback((lang) => {
|
|
117
|
+
mutateItem((item) => ({ ...item, lang: lang || undefined }));
|
|
118
|
+
}, [mutateItem]);
|
|
119
|
+
if (mode === 'rename') {
|
|
120
|
+
return (_jsx("div", { className: "flex justify-between gap-2 p-2 w-fit max-w-80", children: _jsx(HoverInputField, { type: "mention", attr: "text", valueRef: currentText, placeholder: "Custom label (leave empty to reset)\u2026", onSubmit: (value) => renameMention(value) }) }));
|
|
121
|
+
}
|
|
122
|
+
if (mode === 'lang') {
|
|
123
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5 p-1 w-40", children: [_jsxs("div", { className: "flex items-center gap-1 px-1 pb-1", children: [_jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", title: "Back", onClick: () => setMode('view'), children: _jsx(ChevronLeftIcon, { className: "text-primary" }) }), _jsx("span", { className: "text-primary text-sm my-auto", children: "Language" })] }), LANG_OPTIONS.map((option) => (_jsxs("div", { className: "flex items-center text-sm rounded-md hover:bg-muted text-foreground px-2 py-1.5 cursor-pointer", onClick: () => setLang(option.lang), children: [_jsx("span", { children: option.name }), _jsx("div", { className: "flex-1" }), item?.lang === option.lang && (_jsx(CheckIcon, { className: "size-3.5 ms-4" }))] }, option.lang))), item?.lang && (_jsxs(_Fragment, { children: [_jsx("div", { className: "h-px bg-border my-1" }), _jsxs("div", { className: "flex items-center text-sm rounded-md hover:bg-muted text-foreground px-2 py-1.5 cursor-pointer", onClick: () => setLang(undefined), children: [_jsx("span", { children: "Clear" }), _jsx("div", { className: "flex-1" }), _jsx(XIcon, { className: "size-3.5 ms-4" })] })] }))] }));
|
|
124
|
+
}
|
|
125
|
+
return (_jsxs("div", { className: "flex justify-between gap-2 p-2 w-fit max-w-80", children: [_jsx("span", { className: "text-primary text-sm my-auto", children: entityType }), _jsx(ChevronRightIcon, { className: "my-auto size-4" }), _jsx("span", { className: "truncate text-muted-foreground text-sm my-auto", children: displayLabel }), _jsx("span", { className: "flex-grow" }), isWork && (_jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", title: "Set language", onClick: () => setMode('lang'), children: _jsx(LanguagesIcon, { className: "text-primary my-auto" }) })), _jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", title: "Edit display text", onClick: () => setMode('rename'), children: _jsx(TypeIcon, { className: "text-primary my-auto" }) }), _jsx(Button, { variant: "ghost", size: "icon", className: "size-6 [&_svg]:size-4", title: "Remove mention", onClick: deleteMention, children: _jsx(Trash2Icon, { className: "text-destructive my-auto" }) })] }));
|
|
83
126
|
};
|
|
84
127
|
//# sourceMappingURL=MentionHoverContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MentionHoverContent.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionHoverContent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"MentionHoverContent.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionHoverContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SuggestionKeyDownProps, SuggestionProps } from '@tiptap/suggestion';
|
|
2
|
+
import { MentionSearchResult } from './useMentionSearch';
|
|
3
|
+
export interface MentionListHandle {
|
|
4
|
+
onKeyDown: (props: SuggestionKeyDownProps) => boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The `@` mention dropdown. The suggestion plugin supplies the typed `query`;
|
|
8
|
+
* this component owns the debounced search, keyboard navigation, and selection.
|
|
9
|
+
* Results are grouped by entity type (Notion-style) and scoped to the current
|
|
10
|
+
* work; keyboard navigation runs across the flattened, grouped order. The
|
|
11
|
+
* "Advanced" button hands off to a dedicated dialog that can search any work
|
|
12
|
+
* (a focusable field cannot live in this suggestion popup without closing it).
|
|
13
|
+
*/
|
|
14
|
+
declare const MentionList: import("react").ForwardRefExoticComponent<SuggestionProps<MentionSearchResult, any> & import("react").RefAttributes<MentionListHandle>>;
|
|
15
|
+
export default MentionList;
|