@eightyfourthousand/lib-editing 2026.6.5 → 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/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
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '@eightyfourthousand/lib-utils';
|
|
4
|
+
import { Loader2Icon, SlidersHorizontalIcon } from 'lucide-react';
|
|
5
|
+
import { forwardRef, useEffect, useImperativeHandle, useMemo, useState, } from 'react';
|
|
6
|
+
import { groupMentionResults, useMentionSearch, } from './useMentionSearch';
|
|
7
|
+
/**
|
|
8
|
+
* The `@` mention dropdown. The suggestion plugin supplies the typed `query`;
|
|
9
|
+
* this component owns the debounced search, keyboard navigation, and selection.
|
|
10
|
+
* Results are grouped by entity type (Notion-style) and scoped to the current
|
|
11
|
+
* work; keyboard navigation runs across the flattened, grouped order. The
|
|
12
|
+
* "Advanced" button hands off to a dedicated dialog that can search any work
|
|
13
|
+
* (a focusable field cannot live in this suggestion popup without closing it).
|
|
14
|
+
*/
|
|
15
|
+
const MentionList = forwardRef((props, ref) => {
|
|
16
|
+
const { results, loading } = useMentionSearch(props.query);
|
|
17
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
18
|
+
const openAdvanced = () => {
|
|
19
|
+
const { editor, range, query } = props;
|
|
20
|
+
const pos = range.from;
|
|
21
|
+
// Remove the `@…` trigger so the suggestion exits, then hand off to the
|
|
22
|
+
// stable overlay (which owns its own focus and work scope).
|
|
23
|
+
editor.chain().focus().deleteRange(range).run();
|
|
24
|
+
editor.storage.mention.openAdvanced?.({ pos, query });
|
|
25
|
+
};
|
|
26
|
+
const groups = useMemo(() => groupMentionResults(results), [results]);
|
|
27
|
+
// Flattened, grouped order — what selectedIndex and the arrow keys index into.
|
|
28
|
+
const ordered = useMemo(() => groups.flatMap((g) => g.items), [groups]);
|
|
29
|
+
const indexOf = useMemo(() => {
|
|
30
|
+
const map = new Map();
|
|
31
|
+
ordered.forEach((item, i) => map.set(item, i));
|
|
32
|
+
return map;
|
|
33
|
+
}, [ordered]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
setSelectedIndex(0);
|
|
36
|
+
}, [ordered]);
|
|
37
|
+
const selectItem = (index) => {
|
|
38
|
+
const item = ordered[index];
|
|
39
|
+
if (item) {
|
|
40
|
+
props.command(item);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
useImperativeHandle(ref, () => ({
|
|
44
|
+
onKeyDown: ({ event }) => {
|
|
45
|
+
if (ordered.length === 0) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
if (event.key === 'ArrowUp') {
|
|
49
|
+
setSelectedIndex((selectedIndex + ordered.length - 1) % ordered.length);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
if (event.key === 'ArrowDown') {
|
|
53
|
+
setSelectedIndex((selectedIndex + 1) % ordered.length);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
if (event.key === 'Enter') {
|
|
57
|
+
selectItem(selectedIndex);
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
},
|
|
62
|
+
}));
|
|
63
|
+
return (_jsxs("div", { className: "z-50 bg-popover flex flex-col rounded-md border shadow-md p-1 w-80", children: [_jsx("div", { className: "flex flex-col max-h-[280px] overflow-y-auto", children: ordered.length > 0 ? (groups.map((group) => (_jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "px-2 pt-2 pb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: group.label }), group.items.map((item) => {
|
|
64
|
+
const index = indexOf.get(item) ?? -1;
|
|
65
|
+
return (_jsxs("div", { className: cn('flex items-baseline gap-2 px-2 py-1.5 rounded-md cursor-pointer text-foreground hover:bg-muted', { 'bg-muted': index === selectedIndex }), onClick: () => props.command(item), children: [_jsx("span", { className: "shrink-0 font-medium text-sm text-accent", children: item.label }), item.text && (_jsx("span", { className: "text-sm truncate text-foreground", children: item.text }))] }, `${item.linkType}:${item.entity}`));
|
|
66
|
+
})] }, group.type)))) : (_jsx("div", { className: "flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground", children: loading ? (_jsxs(_Fragment, { children: [_jsx(Loader2Icon, { className: "size-4 animate-spin" }), "Searching\u2026"] })) : props.query.trim() ? ('No results') : ('Type to search entities…') })) }), _jsx("div", { className: "border-t mt-1 pt-1", children: _jsxs("button", { type: "button", className: "flex w-full items-center gap-2 px-2 py-1.5 rounded-md text-sm text-muted-foreground hover:bg-muted hover:text-foreground", onClick: openAdvanced, children: [_jsx(SlidersHorizontalIcon, { className: "size-4" }), "Advanced search\u2026"] }) })] }));
|
|
67
|
+
});
|
|
68
|
+
MentionList.displayName = 'MentionList';
|
|
69
|
+
export default MentionList;
|
|
70
|
+
//# sourceMappingURL=MentionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionList.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MentionLinkType } from './useMentionSearch';
|
|
2
|
+
/**
|
|
3
|
+
* Entity picker used inside the mention hover card (edit mode). Mirrors
|
|
4
|
+
* GlossarySearch: a debounced search input over the entity search. Results are
|
|
5
|
+
* grouped by entity type and scoped to a work (defaults to the current work,
|
|
6
|
+
* re-targetable via the toh field). Selecting a result reports its entity UUID,
|
|
7
|
+
* link type, and label.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MentionSearch: ({ initialQuery, autoFocus, onSelect, }: {
|
|
10
|
+
initialQuery?: string;
|
|
11
|
+
autoFocus?: boolean;
|
|
12
|
+
onSelect: (result: {
|
|
13
|
+
entity: string;
|
|
14
|
+
linkType: MentionLinkType;
|
|
15
|
+
label: string;
|
|
16
|
+
isSameWork: boolean;
|
|
17
|
+
}) => void;
|
|
18
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Input } from '@eightyfourthousand/design-system';
|
|
4
|
+
import { Loader2Icon } from 'lucide-react';
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { useNavigation } from '../../../shared';
|
|
7
|
+
import { groupMentionResults, useMentionSearch, } from './useMentionSearch';
|
|
8
|
+
/**
|
|
9
|
+
* Entity picker used inside the mention hover card (edit mode). Mirrors
|
|
10
|
+
* GlossarySearch: a debounced search input over the entity search. Results are
|
|
11
|
+
* grouped by entity type and scoped to a work (defaults to the current work,
|
|
12
|
+
* re-targetable via the toh field). Selecting a result reports its entity UUID,
|
|
13
|
+
* link type, and label.
|
|
14
|
+
*/
|
|
15
|
+
export const MentionSearch = ({ initialQuery = '', autoFocus = true, onSelect, }) => {
|
|
16
|
+
const { toh: navToh } = useNavigation();
|
|
17
|
+
const [query, setQuery] = useState(initialQuery);
|
|
18
|
+
const [toh, setToh] = useState(navToh ?? '');
|
|
19
|
+
const { results, loading } = useMentionSearch(query, toh);
|
|
20
|
+
const groups = groupMentionResults(results);
|
|
21
|
+
// A result is "same work" (in-panel navigation) only when it is a
|
|
22
|
+
// work-internal type AND the searched work is the current document's work.
|
|
23
|
+
const searchingCurrentWork = (toh.trim() || navToh) === navToh;
|
|
24
|
+
return (_jsxs("div", { className: "flex flex-col gap-2 w-72", children: [_jsxs("div", { className: "relative", children: [_jsx(Input, { autoFocus: autoFocus, placeholder: "Search works, passages, folios, glossary\u2026", value: query, onChange: (e) => setQuery(e.target.value) }), loading && (_jsx(Loader2Icon, { className: "absolute right-2 top-1/2 -translate-y-1/2 size-4 animate-spin text-muted-foreground" }))] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "shrink-0 text-xs text-muted-foreground", children: "Work" }), _jsx(Input, { placeholder: "toh\u2026", className: "h-7 text-xs", value: toh, onChange: (e) => setToh(e.target.value) })] }), _jsx("div", { className: "flex flex-col max-h-64 overflow-y-auto", children: groups.length > 0
|
|
25
|
+
? groups.map((group) => (_jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "px-2 pt-2 pb-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: group.label }), group.items.map((item) => (_jsxs("div", { className: "flex items-baseline gap-2 px-2 py-1.5 rounded-md cursor-pointer text-foreground hover:bg-muted", onClick: () => onSelect({
|
|
26
|
+
entity: item.entity,
|
|
27
|
+
linkType: item.linkType,
|
|
28
|
+
label: item.label,
|
|
29
|
+
isSameWork: item.linkType !== 'work' && searchingCurrentWork,
|
|
30
|
+
}), children: [_jsx("span", { className: "shrink-0 font-medium text-sm text-accent", children: item.label }), item.text && (_jsx("span", { className: "text-sm truncate text-foreground", children: item.text }))] }, `${item.linkType}:${item.entity}`)))] }, group.type)))
|
|
31
|
+
: query.trim() &&
|
|
32
|
+
!loading && (_jsx("div", { className: "px-3 py-2 text-sm text-muted-foreground", children: "No results" })) })] }));
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=MentionSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionSearch.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionSearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PluginKey } from '@tiptap/pm/state';
|
|
2
|
+
import { SuggestionOptions } from '@tiptap/suggestion';
|
|
3
|
+
import { MentionSearchResult } from './useMentionSearch';
|
|
4
|
+
export declare const mentionSuggestionPluginKey: PluginKey<any>;
|
|
5
|
+
/**
|
|
6
|
+
* `@`-triggered suggestion that inserts a Mention referencing a searched entity.
|
|
7
|
+
* Data is fetched inside <MentionList> (debounced lib-search); the items list is
|
|
8
|
+
* intentionally empty here since results are query-driven and async.
|
|
9
|
+
*/
|
|
10
|
+
export declare const mentionSuggestion: Omit<SuggestionOptions<MentionSearchResult>, 'editor'>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { PluginKey } from '@tiptap/pm/state';
|
|
2
|
+
import { ReactRenderer } from '@tiptap/react';
|
|
3
|
+
import tippy from 'tippy.js';
|
|
4
|
+
import MentionList from './MentionList';
|
|
5
|
+
export const mentionSuggestionPluginKey = new PluginKey('mentionSuggestion');
|
|
6
|
+
/**
|
|
7
|
+
* `@`-triggered suggestion that inserts a Mention referencing a searched entity.
|
|
8
|
+
* Data is fetched inside <MentionList> (debounced lib-search); the items list is
|
|
9
|
+
* intentionally empty here since results are query-driven and async.
|
|
10
|
+
*/
|
|
11
|
+
export const mentionSuggestion = {
|
|
12
|
+
char: '@',
|
|
13
|
+
pluginKey: mentionSuggestionPluginKey,
|
|
14
|
+
// Entity labels (work titles, glossary terms, etc.) contain spaces, so the
|
|
15
|
+
// query must survive them. Without this, the first space ends the match and
|
|
16
|
+
// closes the popup.
|
|
17
|
+
allowSpaces: true,
|
|
18
|
+
items: () => [],
|
|
19
|
+
command: ({ editor, range, props, }) => {
|
|
20
|
+
// Seed displayText with the picker label for immediate display. It is not
|
|
21
|
+
// persisted, so the canonical label resolves on load (e.g. folios render as
|
|
22
|
+
// "[F.x.y]"); a persisted override can be set via the mention hover card.
|
|
23
|
+
editor
|
|
24
|
+
.chain()
|
|
25
|
+
.focus()
|
|
26
|
+
.deleteRange(range)
|
|
27
|
+
.setMention(props.entity, props.linkType, props.label, props.linkType !== 'work')
|
|
28
|
+
.run();
|
|
29
|
+
},
|
|
30
|
+
render: () => {
|
|
31
|
+
let component;
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
let popup;
|
|
34
|
+
return {
|
|
35
|
+
onStart: (props) => {
|
|
36
|
+
component = new ReactRenderer(MentionList, {
|
|
37
|
+
props,
|
|
38
|
+
editor: props.editor,
|
|
39
|
+
});
|
|
40
|
+
// Use the live clientRect function so the popup tracks the caret from
|
|
41
|
+
// the first frame instead of anchoring to a stale snapshot.
|
|
42
|
+
const getReferenceClientRect = props.clientRect
|
|
43
|
+
? () => props.clientRect?.() ?? new DOMRect()
|
|
44
|
+
: null;
|
|
45
|
+
popup = tippy('body', {
|
|
46
|
+
getReferenceClientRect,
|
|
47
|
+
content: component.element,
|
|
48
|
+
showOnCreate: true,
|
|
49
|
+
interactive: true,
|
|
50
|
+
trigger: 'manual',
|
|
51
|
+
placement: 'bottom-start',
|
|
52
|
+
appendTo: () => document.body,
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
onUpdate(props) {
|
|
56
|
+
component.updateProps(props);
|
|
57
|
+
if (!props.clientRect) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
popup[0].setProps({
|
|
61
|
+
getReferenceClientRect: props.clientRect,
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
onKeyDown(props) {
|
|
65
|
+
if (props.event.key === 'Escape') {
|
|
66
|
+
popup[0].hide();
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
return component.ref?.onKeyDown(props) ?? false;
|
|
70
|
+
},
|
|
71
|
+
onExit() {
|
|
72
|
+
component.destroy();
|
|
73
|
+
popup[0].destroy();
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=MentionSuggestion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MentionSuggestion.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/MentionSuggestion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAmB,MAAM,UAAU,CAAC;AAC3C,OAAO,WAAkC,MAAM,eAAe,CAAC;AAG/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,IAAI,EAAE,GAAG;IACT,SAAS,EAAE,0BAA0B;IACrC,2EAA2E;IAC3E,4EAA4E;IAC5E,oBAAoB;IACpB,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;IACf,OAAO,EAAE,CAAC,EACR,MAAM,EACN,KAAK,EACL,KAAK,GAKN,EAAE,EAAE;QACH,0EAA0E;QAC1E,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,KAAK,CAAC;aAClB,UAAU,CACT,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,QAAQ,KAAK,MAAM,CAC1B;aACA,GAAG,EAAE,CAAC;IACX,CAAC;IACD,MAAM,EAAE,GAAG,EAAE;QACX,IAAI,SAGH,CAAC;QACF,8DAA8D;QAC9D,IAAI,KAAsB,CAAC;QAE3B,OAAO;YACL,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,SAAS,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE;oBACzC,KAAK;oBACL,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC,CAAC;gBAEH,sEAAsE;gBACtE,4DAA4D;gBAC5D,MAAM,sBAAsB,GAAG,KAAK,CAAC,UAAU;oBAC7C,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,OAAO,EAAE;oBAC7C,CAAC,CAAC,IAAI,CAAC;gBACT,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE;oBACpB,sBAAsB;oBACtB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,IAAI;oBACjB,OAAO,EAAE,QAAQ;oBACjB,SAAS,EAAE,cAAc;oBACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI;iBAC9B,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,KAAK;gBACZ,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAE7B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAChB,sBAAsB,EAAE,KAAK,CAAC,UAAU;iBACzC,CAAC,CAAC;YACL,CAAC;YAED,SAAS,CAAC,KAAK;gBACb,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAClD,CAAC;YAED,MAAM;gBACJ,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type MentionLinkType = 'work' | 'passage' | 'folio' | 'bibliography' | 'glossary';
|
|
2
|
+
export interface MentionSearchResult {
|
|
3
|
+
/** UUID of the linked entity (becomes the mention item's `entity`). */
|
|
4
|
+
entity: string;
|
|
5
|
+
linkType: MentionLinkType;
|
|
6
|
+
/** Short identifier shown as the primary label. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Secondary descriptive text shown beneath the label. */
|
|
9
|
+
text: string;
|
|
10
|
+
}
|
|
11
|
+
/** Display order and section headings for grouped mention results. */
|
|
12
|
+
export declare const MENTION_TYPE_ORDER: MentionLinkType[];
|
|
13
|
+
export declare const MENTION_TYPE_LABELS: Record<MentionLinkType, string>;
|
|
14
|
+
export interface MentionResultGroup {
|
|
15
|
+
type: MentionLinkType;
|
|
16
|
+
label: string;
|
|
17
|
+
items: MentionSearchResult[];
|
|
18
|
+
}
|
|
19
|
+
/** Group results by entity type, preserving the canonical section order. */
|
|
20
|
+
export declare const groupMentionResults: (results: MentionSearchResult[]) => MentionResultGroup[];
|
|
21
|
+
/**
|
|
22
|
+
* Debounced entity search backed by the top-level GraphQL `search` query
|
|
23
|
+
* (data-access `search_entities`). Returns mention candidates: other works
|
|
24
|
+
* (global) plus passages, folios, bibliographies, and glossary terms scoped to
|
|
25
|
+
* a work.
|
|
26
|
+
*
|
|
27
|
+
* The searched work defaults to the current work but can be re-targeted with a
|
|
28
|
+
* `toh` override. When the toh differs from the current work's, the known
|
|
29
|
+
* workUuid is dropped so the server resolves the work from the toh.
|
|
30
|
+
*/
|
|
31
|
+
export declare const useMentionSearch: (query: string, toh?: string) => {
|
|
32
|
+
results: MentionSearchResult[];
|
|
33
|
+
loading: boolean;
|
|
34
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { createGraphQLClient, searchEntities, } from '@eightyfourthousand/client-graphql';
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { useNavigation } from '../../../shared';
|
|
5
|
+
const DEBOUNCE_MS = 300;
|
|
6
|
+
/** Display order and section headings for grouped mention results. */
|
|
7
|
+
export const MENTION_TYPE_ORDER = [
|
|
8
|
+
'passage',
|
|
9
|
+
'folio',
|
|
10
|
+
'work',
|
|
11
|
+
'glossary',
|
|
12
|
+
'bibliography',
|
|
13
|
+
];
|
|
14
|
+
export const MENTION_TYPE_LABELS = {
|
|
15
|
+
work: 'Works',
|
|
16
|
+
passage: 'Passages',
|
|
17
|
+
folio: 'Folios',
|
|
18
|
+
bibliography: 'Bibliography',
|
|
19
|
+
glossary: 'Glossary',
|
|
20
|
+
};
|
|
21
|
+
/** Group results by entity type, preserving the canonical section order. */
|
|
22
|
+
export const groupMentionResults = (results) => MENTION_TYPE_ORDER.map((type) => ({
|
|
23
|
+
type,
|
|
24
|
+
label: MENTION_TYPE_LABELS[type],
|
|
25
|
+
items: results.filter((r) => r.linkType === type),
|
|
26
|
+
})).filter((group) => group.items.length > 0);
|
|
27
|
+
/**
|
|
28
|
+
* Debounced entity search backed by the top-level GraphQL `search` query
|
|
29
|
+
* (data-access `search_entities`). Returns mention candidates: other works
|
|
30
|
+
* (global) plus passages, folios, bibliographies, and glossary terms scoped to
|
|
31
|
+
* a work.
|
|
32
|
+
*
|
|
33
|
+
* The searched work defaults to the current work but can be re-targeted with a
|
|
34
|
+
* `toh` override. When the toh differs from the current work's, the known
|
|
35
|
+
* workUuid is dropped so the server resolves the work from the toh.
|
|
36
|
+
*/
|
|
37
|
+
export const useMentionSearch = (query, toh) => {
|
|
38
|
+
const { uuid: navWorkUuid, toh: navToh } = useNavigation();
|
|
39
|
+
const effectiveToh = (toh ?? navToh ?? '').trim() || undefined;
|
|
40
|
+
// Fast path: only pass the known workUuid when searching the current work.
|
|
41
|
+
// Otherwise let the toh resolve the target work server-side.
|
|
42
|
+
const workUuid = effectiveToh === navToh ? navWorkUuid : undefined;
|
|
43
|
+
const [results, setResults] = useState([]);
|
|
44
|
+
const [loading, setLoading] = useState(false);
|
|
45
|
+
const debounceRef = useRef(undefined);
|
|
46
|
+
const requestId = useRef(0);
|
|
47
|
+
const runSearch = useCallback(async (text) => {
|
|
48
|
+
if (!text.trim()) {
|
|
49
|
+
setResults([]);
|
|
50
|
+
setLoading(false);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const id = ++requestId.current;
|
|
54
|
+
setLoading(true);
|
|
55
|
+
const client = createGraphQLClient();
|
|
56
|
+
const matches = await searchEntities({
|
|
57
|
+
client,
|
|
58
|
+
query: text.trim(),
|
|
59
|
+
workUuid,
|
|
60
|
+
toh: effectiveToh,
|
|
61
|
+
// Top 5 per category (the SQL applies the limit per entity type).
|
|
62
|
+
limit: 5,
|
|
63
|
+
});
|
|
64
|
+
// Ignore out-of-order responses.
|
|
65
|
+
if (id !== requestId.current) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
setResults(matches.map((m) => ({
|
|
69
|
+
entity: m.uuid,
|
|
70
|
+
linkType: m.type,
|
|
71
|
+
label: m.label,
|
|
72
|
+
text: m.text,
|
|
73
|
+
})));
|
|
74
|
+
setLoading(false);
|
|
75
|
+
}, [workUuid, effectiveToh]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (debounceRef.current) {
|
|
78
|
+
clearTimeout(debounceRef.current);
|
|
79
|
+
}
|
|
80
|
+
debounceRef.current = setTimeout(() => runSearch(query), DEBOUNCE_MS);
|
|
81
|
+
return () => {
|
|
82
|
+
if (debounceRef.current) {
|
|
83
|
+
clearTimeout(debounceRef.current);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}, [query, runSearch]);
|
|
87
|
+
return { results, loading };
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=useMentionSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMentionSearch.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Mention/useMentionSearch.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EACL,mBAAmB,EACnB,cAAc,GACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,GAAG,GAAG,CAAC;AAmBxB,sEAAsE;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,SAAS;IACT,OAAO;IACP,MAAM;IACN,UAAU;IACV,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAoC;IAClE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,QAAQ;IACf,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;CACrB,CAAC;AAQF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAA8B,EACR,EAAE,CACxB,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI;IACJ,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC;CAClD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,GAAY,EAAE,EAAE;IAC9D,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC/D,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAwB,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAgC,SAAS,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAG,WAAW,CAC3B,KAAK,EAAE,IAAY,EAAE,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACnC,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;YAClB,QAAQ;YACR,GAAG,EAAE,YAAY;YACjB,kEAAkE;YAClE,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QAEH,iCAAiC;QACjC,IAAI,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,UAAU,CACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,MAAM,EAAE,CAAC,CAAC,IAAI;YACd,QAAQ,EAAE,CAAC,CAAC,IAAI;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CACJ,CAAC;QACF,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,QAAQ,EAAE,YAAY,CAAC,CACzB,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;QACtE,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Extension
|
|
1
|
+
import { Extension } from '@tiptap/core';
|
|
2
2
|
export const ParagraphIndent = Extension.create({
|
|
3
3
|
name: 'paragraphIndent',
|
|
4
4
|
addOptions() {
|
|
@@ -15,14 +15,9 @@ export const ParagraphIndent = Extension.create({
|
|
|
15
15
|
hasParagraphIndent: {
|
|
16
16
|
default: this.options.defaultHasParagraphIndent,
|
|
17
17
|
parseHTML: (element) => element.className.includes('conditional-indent'),
|
|
18
|
-
renderHTML: (attributes) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class: 'conditional-indent',
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
return mergeAttributes(attributes, { class: 'no-indent' });
|
|
25
|
-
},
|
|
18
|
+
renderHTML: (attributes) => attributes.hasParagraphIndent
|
|
19
|
+
? { class: 'conditional-indent' }
|
|
20
|
+
: { class: 'no-indent' },
|
|
26
21
|
},
|
|
27
22
|
},
|
|
28
23
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParagraphIndent.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/ParagraphIndent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"ParagraphIndent.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/ParagraphIndent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA2BzC,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAyB;IACtE,IAAI,EAAE,iBAAiB;IACvB,UAAU;QACR,OAAO;YACL,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,yBAAyB,EAAE,KAAK;SACjC,CAAC;IACJ,CAAC;IACD,mBAAmB;QACjB,OAAO;YACL;gBACE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;gBACzB,UAAU,EAAE;oBACV,kBAAkB,EAAE;wBAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB;wBAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CACrB,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC;wBAClD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,kBAAkB;4BAC3B,CAAC,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE;4BACjC,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;qBAC7B;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,WAAW;QACT,OAAO;YACL,kBAAkB,EAChB,GAAG,EAAE,CACL,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;qBACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAC9D;qBACA,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YACH,oBAAoB,EAClB,GAAG,EAAE,CACL,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACf,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;qBACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;qBACnE,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;YACH,qBAAqB,EACnB,GAAG,EAAE,CACL,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAClD,OAAO,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACvC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -32,18 +32,21 @@ export const PassageNodeSSR = Node.create({
|
|
|
32
32
|
label: {
|
|
33
33
|
default: null,
|
|
34
34
|
parseHTML: (element) => element.getAttribute('label'),
|
|
35
|
-
renderHTML: (attributes) =>
|
|
35
|
+
renderHTML: (attributes) => attributes.label ? { label: attributes.label } : {},
|
|
36
36
|
},
|
|
37
37
|
sort: {
|
|
38
38
|
default: 0,
|
|
39
39
|
parseHTML: (element) => element.getAttribute('sort'),
|
|
40
|
-
renderHTML: (attributes) =>
|
|
40
|
+
renderHTML: (attributes) => ({ sort: attributes.sort }),
|
|
41
41
|
},
|
|
42
|
+
// Internal editor state — never serialize to the public SSR markup.
|
|
42
43
|
alignments: {
|
|
43
44
|
default: {},
|
|
45
|
+
renderHTML: () => ({}),
|
|
44
46
|
},
|
|
45
47
|
references: {
|
|
46
48
|
default: [],
|
|
49
|
+
renderHTML: () => ({}),
|
|
47
50
|
},
|
|
48
51
|
};
|
|
49
52
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PassageNode.ssr.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Passage/PassageNode.ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AASnB,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,YAAY,GAAG,GAAmB,EAAE,CAAC;IACzC,KAAK;IACL;QACE,KAAK,EAAE,4BAA4B;QACnC,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,cAAc;QACtB,cAAc,EAAE,GAAG;QACnB,gBAAgB,EAAE,OAAO;QACzB,iBAAiB,EAAE,OAAO;QAC1B,KAAK,EAAE,oBAAoB;KAC5B;IACD,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,mDAAmD,EAAE,CAAC;CACrE,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,QAAQ;IAEjB,SAAS;QACP,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa;QACX,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;gBACrD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,
|
|
1
|
+
{"version":3,"file":"PassageNode.ssr.js","sourceRoot":"","sources":["../../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Passage/PassageNode.ssr.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,28 +10,19 @@ export const SmallCaps = Mark.create({
|
|
|
10
10
|
type: {
|
|
11
11
|
default: undefined,
|
|
12
12
|
parseHTML: (element) => element.getAttribute('data-type'),
|
|
13
|
-
renderHTML(attributes) {
|
|
14
|
-
return mergeAttributes(attributes, { 'data-type': attributes.type });
|
|
15
|
-
},
|
|
13
|
+
renderHTML: (attributes) => attributes.type ? { 'data-type': attributes.type } : {},
|
|
16
14
|
},
|
|
17
15
|
textStyle: {
|
|
18
16
|
default: undefined,
|
|
19
17
|
parseHTML: (element) => element.getAttribute('data-text-style'),
|
|
20
|
-
renderHTML(attributes)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
24
|
-
},
|
|
18
|
+
renderHTML: (attributes) => attributes.textStyle
|
|
19
|
+
? { 'data-text-style': attributes.textStyle }
|
|
20
|
+
: {},
|
|
25
21
|
},
|
|
26
22
|
lang: {
|
|
27
23
|
default: undefined,
|
|
28
24
|
parseHTML: (element) => element.getAttribute('data-lang'),
|
|
29
|
-
renderHTML(attributes) {
|
|
30
|
-
if (!attributes.lang) {
|
|
31
|
-
return attributes;
|
|
32
|
-
}
|
|
33
|
-
return mergeAttributes(attributes, { 'data-lang': attributes.lang });
|
|
34
|
-
},
|
|
25
|
+
renderHTML: (attributes) => attributes.lang ? { 'data-lang': attributes.lang } : {},
|
|
35
26
|
},
|
|
36
27
|
};
|
|
37
28
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmallCaps.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/SmallCaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAiCpC;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAmB;IACrD,IAAI,EAAE,WAAW;IACjB,aAAa;QACX,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACzD,UAAU,CAAC,UAAU
|
|
1
|
+
{"version":3,"file":"SmallCaps.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/SmallCaps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { mergeAttributes } from '@tiptap/react';
|
|
2
1
|
import { Subscript as TipTapSubscript } from '@tiptap/extension-subscript';
|
|
3
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
4
3
|
export const Subscript = TipTapSubscript.extend({
|
|
@@ -8,28 +7,19 @@ export const Subscript = TipTapSubscript.extend({
|
|
|
8
7
|
type: {
|
|
9
8
|
default: undefined,
|
|
10
9
|
parseHTML: (element) => element.getAttribute('data-type'),
|
|
11
|
-
renderHTML(attributes) {
|
|
12
|
-
return mergeAttributes(attributes, { 'data-type': attributes.type });
|
|
13
|
-
},
|
|
10
|
+
renderHTML: (attributes) => attributes.type ? { 'data-type': attributes.type } : {},
|
|
14
11
|
},
|
|
15
12
|
textStyle: {
|
|
16
13
|
default: undefined,
|
|
17
14
|
parseHTML: (element) => element.getAttribute('data-text-style'),
|
|
18
|
-
renderHTML(attributes)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
},
|
|
15
|
+
renderHTML: (attributes) => attributes.textStyle
|
|
16
|
+
? { 'data-text-style': attributes.textStyle }
|
|
17
|
+
: {},
|
|
23
18
|
},
|
|
24
19
|
lang: {
|
|
25
20
|
default: undefined,
|
|
26
21
|
parseHTML: (element) => element.getAttribute('data-lang'),
|
|
27
|
-
renderHTML(attributes) {
|
|
28
|
-
if (!attributes.lang) {
|
|
29
|
-
return attributes;
|
|
30
|
-
}
|
|
31
|
-
return mergeAttributes(attributes, { 'data-lang': attributes.lang });
|
|
32
|
-
},
|
|
22
|
+
renderHTML: (attributes) => attributes.lang ? { 'data-lang': attributes.lang } : {},
|
|
33
23
|
},
|
|
34
24
|
};
|
|
35
25
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Subscript.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Subscript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Subscript.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Subscript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC;IAC9C,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACzD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1D;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAC/D,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,SAAS;oBAClB,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,CAAC,SAAS,EAAE;oBAC7C,CAAC,CAAC,EAAE;aACT;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACzD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1D;SACF,CAAC;IACJ,CAAC;IACD,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,YAAY;gBACV,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACrE,CAAC,CAAC;YACJ,CAAC;YACD,eAAe;gBACb,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC5D,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxE,CAAC,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { mergeAttributes } from '@tiptap/react';
|
|
2
1
|
import { Superscript as TipTapSuperscript } from '@tiptap/extension-superscript';
|
|
3
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
4
3
|
export const Superscript = TipTapSuperscript.extend({
|
|
@@ -8,28 +7,19 @@ export const Superscript = TipTapSuperscript.extend({
|
|
|
8
7
|
type: {
|
|
9
8
|
default: undefined,
|
|
10
9
|
parseHTML: (element) => element.getAttribute('data-type'),
|
|
11
|
-
renderHTML(attributes) {
|
|
12
|
-
return mergeAttributes(attributes, { 'data-type': attributes.type });
|
|
13
|
-
},
|
|
10
|
+
renderHTML: (attributes) => attributes.type ? { 'data-type': attributes.type } : {},
|
|
14
11
|
},
|
|
15
12
|
textStyle: {
|
|
16
13
|
default: undefined,
|
|
17
14
|
parseHTML: (element) => element.getAttribute('data-text-style'),
|
|
18
|
-
renderHTML(attributes)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
22
|
-
},
|
|
15
|
+
renderHTML: (attributes) => attributes.textStyle
|
|
16
|
+
? { 'data-text-style': attributes.textStyle }
|
|
17
|
+
: {},
|
|
23
18
|
},
|
|
24
19
|
lang: {
|
|
25
20
|
default: undefined,
|
|
26
21
|
parseHTML: (element) => element.getAttribute('data-lang'),
|
|
27
|
-
renderHTML(attributes) {
|
|
28
|
-
if (!attributes.lang) {
|
|
29
|
-
return attributes;
|
|
30
|
-
}
|
|
31
|
-
return mergeAttributes(attributes, { 'data-lang': attributes.lang });
|
|
32
|
-
},
|
|
22
|
+
renderHTML: (attributes) => attributes.lang ? { 'data-lang': attributes.lang } : {},
|
|
33
23
|
},
|
|
34
24
|
};
|
|
35
25
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Superscript.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Superscript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Superscript.js","sourceRoot":"","sources":["../../../../../../../libs/lib-editing/src/lib/components/editor/extensions/Superscript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAClD,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACzD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1D;YACD,SAAS,EAAE;gBACT,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;gBAC/D,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,SAAS;oBAClB,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,CAAC,SAAS,EAAE;oBAC7C,CAAC,CAAC,EAAE;aACT;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACzD,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;aAC1D;SACF,CAAC;IACJ,CAAC;IACD,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,cAAc;gBACZ,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACrE,CAAC,CAAC;YACJ,CAAC;YACD,iBAAiB;gBACf,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;oBAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC5D,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxE,CAAC,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|