@lemoncat7/dsh-knowledge 2.2.9 → 2.2.13-next.12
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/README.md +3 -3
- package/docs/architecture.md +6 -2
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +42 -0
- package/lib/api.js.map +1 -1
- package/lib/client.js +22 -22
- package/lib/client.js.map +2 -2
- package/lib/domain.d.ts +15 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/local-provider.d.ts +11 -2
- package/lib/local-provider.d.ts.map +1 -1
- package/lib/local-provider.js +71 -0
- package/lib/local-provider.js.map +1 -1
- package/lib/management-proxy.js +1 -1
- package/lib/management-proxy.js.map +1 -1
- package/lib/notes/domain.d.ts +10 -0
- package/lib/notes/domain.d.ts.map +1 -1
- package/lib/notes/domain.js.map +1 -1
- package/lib/notes/store.d.ts +15 -1
- package/lib/notes/store.d.ts.map +1 -1
- package/lib/notes/store.js +277 -28
- package/lib/notes/store.js.map +1 -1
- package/lib/provider.d.ts +10 -2
- package/lib/provider.d.ts.map +1 -1
- package/lib/remote-provider.d.ts +10 -2
- package/lib/remote-provider.d.ts.map +1 -1
- package/lib/remote-provider.js +27 -0
- package/lib/remote-provider.js.map +1 -1
- package/lib/theme-bridge.js +7 -7
- package/lib/theme-bridge.js.map +1 -1
- package/lib/tool-authorization.js +11 -16
- package/lib/tool-authorization.js.map +1 -1
- package/lib/web-note-editor-chrome.d.ts +17 -0
- package/lib/web-note-editor-chrome.d.ts.map +1 -0
- package/lib/web-note-editor-chrome.js +38 -0
- package/lib/web-note-editor-chrome.js.map +1 -0
- package/lib/web-note-editor-find.d.ts +17 -0
- package/lib/web-note-editor-find.d.ts.map +1 -0
- package/lib/web-note-editor-find.js +225 -0
- package/lib/web-note-editor-find.js.map +1 -0
- package/lib/web-note-editor-outline.d.ts +15 -0
- package/lib/web-note-editor-outline.d.ts.map +1 -0
- package/lib/web-note-editor-outline.js +169 -0
- package/lib/web-note-editor-outline.js.map +1 -0
- package/lib/web-note-editor-search.d.ts +30 -0
- package/lib/web-note-editor-search.d.ts.map +1 -0
- package/lib/web-note-editor-search.js +143 -0
- package/lib/web-note-editor-search.js.map +1 -0
- package/lib/web-note-editor-selection.d.ts +15 -0
- package/lib/web-note-editor-selection.d.ts.map +1 -0
- package/lib/web-note-editor-selection.js +255 -0
- package/lib/web-note-editor-selection.js.map +1 -0
- package/lib/web-note-editor.d.ts +7 -0
- package/lib/web-note-editor.d.ts.map +1 -1
- package/lib/web-note-editor.js +36 -6
- package/lib/web-note-editor.js.map +1 -1
- package/lib/web-note-history.d.ts +28 -0
- package/lib/web-note-history.d.ts.map +1 -0
- package/lib/web-note-history.js +163 -0
- package/lib/web-note-history.js.map +1 -0
- package/lib/web-workspace-effects.d.ts.map +1 -1
- package/lib/web-workspace-effects.js +1 -2
- package/lib/web-workspace-effects.js.map +1 -1
- package/lib/web.d.ts.map +1 -1
- package/lib/web.js +4 -0
- package/lib/web.js.map +1 -1
- package/package.json +1 -1
- package/web/api-client.js +94 -0
- package/web/app.js +344 -235
- package/web/host-theme.js +63 -0
- package/web/index.html +1 -0
- package/web/note-editor.js +70 -70
- package/web/note-history.js +1 -0
- package/web/styles.css +374 -154
- package/web/ui-primitives.js +77 -0
- package/web/workspace-effects.js +1 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
function control(label, ariaLabel, onClick) {
|
|
2
|
+
const button = document.createElement('button');
|
|
3
|
+
button.type = 'button';
|
|
4
|
+
button.className = 'notes-selection-control';
|
|
5
|
+
button.textContent = label;
|
|
6
|
+
button.setAttribute('aria-label', ariaLabel);
|
|
7
|
+
button.addEventListener('pointerdown', event => event.preventDefault());
|
|
8
|
+
button.addEventListener('click', onClick);
|
|
9
|
+
return button;
|
|
10
|
+
}
|
|
11
|
+
function safeLink(value) {
|
|
12
|
+
const href = value.trim();
|
|
13
|
+
if (!href)
|
|
14
|
+
return '';
|
|
15
|
+
if (/^(https?:\/\/|mailto:|\/|#)/i.test(href))
|
|
16
|
+
return href;
|
|
17
|
+
if (/^[\w.-]+\.[a-z]{2,}(?:[/?#].*)?$/i.test(href))
|
|
18
|
+
return `https://${href}`;
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
export function createNoteSelectionMenu(options) {
|
|
22
|
+
const { editor, frame, scrollHost } = options;
|
|
23
|
+
const menu = document.createElement('div');
|
|
24
|
+
menu.className = 'notes-selection-menu';
|
|
25
|
+
menu.setAttribute('role', 'toolbar');
|
|
26
|
+
menu.setAttribute('aria-label', '所选文字格式');
|
|
27
|
+
menu.hidden = true;
|
|
28
|
+
const primary = document.createElement('div');
|
|
29
|
+
primary.className = 'notes-selection-primary';
|
|
30
|
+
const blockToggle = control('正文', '更改段落格式', () => {
|
|
31
|
+
const expanded = blockToggle.getAttribute('aria-expanded') !== 'true';
|
|
32
|
+
blockToggle.setAttribute('aria-expanded', String(expanded));
|
|
33
|
+
blockMenu.hidden = !expanded;
|
|
34
|
+
linkForm.hidden = true;
|
|
35
|
+
positionMenu();
|
|
36
|
+
});
|
|
37
|
+
blockToggle.classList.add('notes-selection-block-toggle');
|
|
38
|
+
blockToggle.setAttribute('aria-haspopup', 'menu');
|
|
39
|
+
blockToggle.setAttribute('aria-expanded', 'false');
|
|
40
|
+
const markActions = [
|
|
41
|
+
{ label: 'B', active: () => editor.isActive('bold'), run: () => { editor.chain().focus().toggleBold().run(); } },
|
|
42
|
+
{ label: 'I', active: () => editor.isActive('italic'), run: () => { editor.chain().focus().toggleItalic().run(); } },
|
|
43
|
+
{ label: 'U', active: () => editor.isActive('underline'), run: () => { editor.chain().focus().toggleUnderline().run(); } },
|
|
44
|
+
{ label: 'S', active: () => editor.isActive('strike'), run: () => { editor.chain().focus().toggleStrike().run(); } },
|
|
45
|
+
{ label: '</>', active: () => editor.isActive('code'), run: () => { editor.chain().focus().toggleCode().run(); } },
|
|
46
|
+
];
|
|
47
|
+
const markLabels = ['加粗', '斜体', '下划线', '删除线', '行内代码'];
|
|
48
|
+
const markButtons = markActions.map((action, index) => {
|
|
49
|
+
const button = control(action.label, markLabels[index] ?? action.label, () => {
|
|
50
|
+
action.run();
|
|
51
|
+
refreshActiveStates();
|
|
52
|
+
});
|
|
53
|
+
button.classList.add('notes-selection-mark');
|
|
54
|
+
return button;
|
|
55
|
+
});
|
|
56
|
+
const linkToggle = control('链接', '添加或编辑链接', () => {
|
|
57
|
+
blockMenu.hidden = true;
|
|
58
|
+
blockToggle.setAttribute('aria-expanded', 'false');
|
|
59
|
+
linkForm.hidden = false;
|
|
60
|
+
const href = editor.getAttributes('link').href;
|
|
61
|
+
linkInput.value = typeof href === 'string' ? href : '';
|
|
62
|
+
linkError.textContent = '';
|
|
63
|
+
positionMenu();
|
|
64
|
+
window.requestAnimationFrame(() => { linkInput.focus(); linkInput.select(); });
|
|
65
|
+
});
|
|
66
|
+
const copyButton = control('复制', '复制所选文字', () => {
|
|
67
|
+
const { from, to } = editor.state.selection;
|
|
68
|
+
const text = editor.state.doc.textBetween(from, to, ' ');
|
|
69
|
+
void navigator.clipboard?.writeText(text).catch(() => { });
|
|
70
|
+
});
|
|
71
|
+
primary.append(blockToggle, ...markButtons, linkToggle, copyButton);
|
|
72
|
+
const blockMenu = document.createElement('div');
|
|
73
|
+
blockMenu.className = 'notes-selection-block-menu';
|
|
74
|
+
blockMenu.setAttribute('role', 'menu');
|
|
75
|
+
blockMenu.hidden = true;
|
|
76
|
+
const blockActions = [
|
|
77
|
+
{ label: '正文', active: () => editor.isActive('paragraph'), run: () => { editor.chain().focus().setParagraph().run(); } },
|
|
78
|
+
{ label: '标题 1', active: () => editor.isActive('heading', { level: 1 }), run: () => { editor.chain().focus().toggleHeading({ level: 1 }).run(); } },
|
|
79
|
+
{ label: '标题 2', active: () => editor.isActive('heading', { level: 2 }), run: () => { editor.chain().focus().toggleHeading({ level: 2 }).run(); } },
|
|
80
|
+
{ label: '标题 3', active: () => editor.isActive('heading', { level: 3 }), run: () => { editor.chain().focus().toggleHeading({ level: 3 }).run(); } },
|
|
81
|
+
{ label: '项目符号', active: () => editor.isActive('bulletList'), run: () => { editor.chain().focus().toggleBulletList().run(); } },
|
|
82
|
+
{ label: '编号列表', active: () => editor.isActive('orderedList'), run: () => { editor.chain().focus().toggleOrderedList().run(); } },
|
|
83
|
+
{ label: '引用', active: () => editor.isActive('blockquote'), run: () => { editor.chain().focus().toggleBlockquote().run(); } },
|
|
84
|
+
{ label: '代码块', active: () => editor.isActive('codeBlock'), run: () => { editor.chain().focus().toggleCodeBlock().run(); } },
|
|
85
|
+
];
|
|
86
|
+
const blockButtons = blockActions.map(action => {
|
|
87
|
+
const button = control(action.label, action.label, () => {
|
|
88
|
+
action.run();
|
|
89
|
+
blockMenu.hidden = true;
|
|
90
|
+
blockToggle.setAttribute('aria-expanded', 'false');
|
|
91
|
+
refreshActiveStates();
|
|
92
|
+
schedulePosition();
|
|
93
|
+
});
|
|
94
|
+
button.setAttribute('role', 'menuitemradio');
|
|
95
|
+
blockMenu.append(button);
|
|
96
|
+
return button;
|
|
97
|
+
});
|
|
98
|
+
const linkForm = document.createElement('form');
|
|
99
|
+
linkForm.className = 'notes-selection-link-form';
|
|
100
|
+
linkForm.hidden = true;
|
|
101
|
+
const linkInput = document.createElement('input');
|
|
102
|
+
linkInput.type = 'text';
|
|
103
|
+
linkInput.inputMode = 'url';
|
|
104
|
+
linkInput.className = 'notes-selection-link-input';
|
|
105
|
+
linkInput.placeholder = 'https://example.com';
|
|
106
|
+
linkInput.setAttribute('aria-label', '链接地址');
|
|
107
|
+
linkInput.autocomplete = 'off';
|
|
108
|
+
const applyLink = control('应用', '应用链接', () => submitLink());
|
|
109
|
+
const removeLink = control('移除', '移除链接', () => {
|
|
110
|
+
editor.chain().focus().extendMarkRange('link').unsetLink().run();
|
|
111
|
+
linkForm.hidden = true;
|
|
112
|
+
refreshActiveStates();
|
|
113
|
+
});
|
|
114
|
+
const linkError = document.createElement('span');
|
|
115
|
+
linkError.className = 'notes-selection-link-error';
|
|
116
|
+
linkError.setAttribute('role', 'alert');
|
|
117
|
+
linkForm.append(linkInput, applyLink, removeLink, linkError);
|
|
118
|
+
linkForm.addEventListener('submit', event => {
|
|
119
|
+
event.preventDefault();
|
|
120
|
+
submitLink();
|
|
121
|
+
});
|
|
122
|
+
menu.append(primary, blockMenu, linkForm);
|
|
123
|
+
frame.append(menu);
|
|
124
|
+
let positionFrame;
|
|
125
|
+
let scrollTimer;
|
|
126
|
+
function currentBlockLabel() {
|
|
127
|
+
if (editor.isActive('heading', { level: 1 }))
|
|
128
|
+
return '标题 1';
|
|
129
|
+
if (editor.isActive('heading', { level: 2 }))
|
|
130
|
+
return '标题 2';
|
|
131
|
+
if (editor.isActive('heading', { level: 3 }))
|
|
132
|
+
return '标题 3';
|
|
133
|
+
if (editor.isActive('bulletList'))
|
|
134
|
+
return '项目符号';
|
|
135
|
+
if (editor.isActive('orderedList'))
|
|
136
|
+
return '编号列表';
|
|
137
|
+
if (editor.isActive('blockquote'))
|
|
138
|
+
return '引用';
|
|
139
|
+
if (editor.isActive('codeBlock'))
|
|
140
|
+
return '代码块';
|
|
141
|
+
return '正文';
|
|
142
|
+
}
|
|
143
|
+
function refreshActiveStates() {
|
|
144
|
+
blockToggle.textContent = currentBlockLabel();
|
|
145
|
+
markButtons.forEach((button, index) => button.setAttribute('aria-pressed', String(markActions[index]?.active() ?? false)));
|
|
146
|
+
blockButtons.forEach((button, index) => button.setAttribute('aria-checked', String(blockActions[index]?.active() ?? false)));
|
|
147
|
+
linkToggle.setAttribute('aria-pressed', String(editor.isActive('link')));
|
|
148
|
+
}
|
|
149
|
+
function submitLink() {
|
|
150
|
+
const href = safeLink(linkInput.value);
|
|
151
|
+
if (href === null) {
|
|
152
|
+
linkError.textContent = '请输入有效的网页或邮件地址。';
|
|
153
|
+
linkInput.focus();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (href)
|
|
157
|
+
editor.chain().focus().extendMarkRange('link').setLink({ href }).run();
|
|
158
|
+
else
|
|
159
|
+
editor.chain().focus().extendMarkRange('link').unsetLink().run();
|
|
160
|
+
linkError.textContent = '';
|
|
161
|
+
linkForm.hidden = true;
|
|
162
|
+
refreshActiveStates();
|
|
163
|
+
}
|
|
164
|
+
function shouldShow() {
|
|
165
|
+
if (editor.isDestroyed || options.findIsOpen())
|
|
166
|
+
return false;
|
|
167
|
+
const { from, to, empty } = editor.state.selection;
|
|
168
|
+
if (empty || !editor.isFocused)
|
|
169
|
+
return false;
|
|
170
|
+
return Boolean(editor.state.doc.textBetween(from, to, ' ').trim());
|
|
171
|
+
}
|
|
172
|
+
function positionMenu() {
|
|
173
|
+
positionFrame = undefined;
|
|
174
|
+
if (menu.hidden || editor.isDestroyed)
|
|
175
|
+
return;
|
|
176
|
+
if (window.matchMedia('(max-width: 760px)').matches) {
|
|
177
|
+
menu.dataset.placement = 'bottom';
|
|
178
|
+
menu.style.left = 'max(8px, env(safe-area-inset-left))';
|
|
179
|
+
menu.style.right = 'max(8px, env(safe-area-inset-right))';
|
|
180
|
+
menu.style.bottom = 'max(8px, env(safe-area-inset-bottom))';
|
|
181
|
+
menu.style.top = 'auto';
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
menu.style.right = '';
|
|
185
|
+
menu.style.bottom = '';
|
|
186
|
+
const { from, to } = editor.state.selection;
|
|
187
|
+
const start = editor.view.coordsAtPos(from);
|
|
188
|
+
const end = editor.view.coordsAtPos(to);
|
|
189
|
+
const rect = menu.getBoundingClientRect();
|
|
190
|
+
const margin = 8;
|
|
191
|
+
const center = (Math.min(start.left, end.left) + Math.max(start.right, end.right)) / 2;
|
|
192
|
+
const left = Math.max(margin, Math.min(window.innerWidth - rect.width - margin, center - rect.width / 2));
|
|
193
|
+
let top = Math.min(start.top, end.top) - rect.height - 9;
|
|
194
|
+
menu.dataset.placement = 'top';
|
|
195
|
+
if (top < margin) {
|
|
196
|
+
top = Math.max(start.bottom, end.bottom) + 9;
|
|
197
|
+
menu.dataset.placement = 'bottom';
|
|
198
|
+
}
|
|
199
|
+
menu.style.left = `${Math.round(left)}px`;
|
|
200
|
+
menu.style.top = `${Math.round(top)}px`;
|
|
201
|
+
}
|
|
202
|
+
function schedulePosition() {
|
|
203
|
+
if (positionFrame !== undefined)
|
|
204
|
+
window.cancelAnimationFrame(positionFrame);
|
|
205
|
+
positionFrame = window.requestAnimationFrame(positionMenu);
|
|
206
|
+
}
|
|
207
|
+
function refresh() {
|
|
208
|
+
if (!shouldShow()) {
|
|
209
|
+
hide();
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
menu.hidden = false;
|
|
213
|
+
refreshActiveStates();
|
|
214
|
+
schedulePosition();
|
|
215
|
+
}
|
|
216
|
+
function hide() {
|
|
217
|
+
menu.hidden = true;
|
|
218
|
+
blockMenu.hidden = true;
|
|
219
|
+
linkForm.hidden = true;
|
|
220
|
+
blockToggle.setAttribute('aria-expanded', 'false');
|
|
221
|
+
linkError.textContent = '';
|
|
222
|
+
}
|
|
223
|
+
function onScroll() {
|
|
224
|
+
hide();
|
|
225
|
+
if (scrollTimer !== undefined)
|
|
226
|
+
window.clearTimeout(scrollTimer);
|
|
227
|
+
scrollTimer = window.setTimeout(refresh, 90);
|
|
228
|
+
}
|
|
229
|
+
function onOutsidePointer(event) {
|
|
230
|
+
if (!menu.hidden && !menu.contains(event.target) && !editor.view.dom.contains(event.target))
|
|
231
|
+
hide();
|
|
232
|
+
}
|
|
233
|
+
editor.on('selectionUpdate', refresh);
|
|
234
|
+
editor.on('transaction', refresh);
|
|
235
|
+
scrollHost.addEventListener('scroll', onScroll, { passive: true });
|
|
236
|
+
window.addEventListener('resize', schedulePosition, { passive: true });
|
|
237
|
+
document.addEventListener('pointerdown', onOutsidePointer);
|
|
238
|
+
return {
|
|
239
|
+
refresh,
|
|
240
|
+
hide,
|
|
241
|
+
destroy: () => {
|
|
242
|
+
editor.off('selectionUpdate', refresh);
|
|
243
|
+
editor.off('transaction', refresh);
|
|
244
|
+
scrollHost.removeEventListener('scroll', onScroll);
|
|
245
|
+
window.removeEventListener('resize', schedulePosition);
|
|
246
|
+
document.removeEventListener('pointerdown', onOutsidePointer);
|
|
247
|
+
if (positionFrame !== undefined)
|
|
248
|
+
window.cancelAnimationFrame(positionFrame);
|
|
249
|
+
if (scrollTimer !== undefined)
|
|
250
|
+
window.clearTimeout(scrollTimer);
|
|
251
|
+
menu.remove();
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=web-note-editor-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-note-editor-selection.js","sourceRoot":"","sources":["../src/web-note-editor-selection.ts"],"names":[],"mappings":"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"}
|
package/lib/web-note-editor.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { type JSONContent } from '@tiptap/core';
|
|
2
2
|
export interface MarkdownEditorOptions {
|
|
3
3
|
host: HTMLElement;
|
|
4
|
+
frame?: HTMLElement;
|
|
5
|
+
scrollHost?: HTMLElement;
|
|
6
|
+
outlineHost?: HTMLElement;
|
|
7
|
+
findButton?: HTMLButtonElement | null;
|
|
8
|
+
outlineButton?: HTMLButtonElement | null;
|
|
4
9
|
markdown: string;
|
|
5
10
|
label: string;
|
|
6
11
|
onChange(markdown: string): void;
|
|
@@ -10,6 +15,8 @@ export interface MarkdownEditorHandle {
|
|
|
10
15
|
getMarkdown(): string;
|
|
11
16
|
focus(): void;
|
|
12
17
|
insertMarkdown(markdown: string): void;
|
|
18
|
+
openFind(): void;
|
|
19
|
+
toggleOutline(): void;
|
|
13
20
|
destroy(): void;
|
|
14
21
|
}
|
|
15
22
|
export interface PlainTextEditorOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-note-editor.d.ts","sourceRoot":"","sources":["../src/web-note-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"web-note-editor.d.ts","sourceRoot":"","sources":["../src/web-note-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAcvD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,WAAW,CAAA;IACjB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACxC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,MAAM,IAAI,IAAI,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,IAAI,MAAM,CAAA;IACrB,KAAK,IAAI,IAAI,CAAA;IACb,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,IAAI,IAAI,CAAA;IAChB,aAAa,IAAI,IAAI,CAAA;IACrB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,IAAI,IAAI,CAAA;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,IAAI,IAAI,CAAA;IACb,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA2EzF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAgC5F;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAQ7D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAInE"}
|
package/lib/web-note-editor.js
CHANGED
|
@@ -6,9 +6,11 @@ import { TableKit } from '@tiptap/extension-table';
|
|
|
6
6
|
import TaskItem from '@tiptap/extension-task-item';
|
|
7
7
|
import TaskList from '@tiptap/extension-task-list';
|
|
8
8
|
import Text from '@tiptap/extension-text';
|
|
9
|
-
import { UndoRedo } from '@tiptap/extensions';
|
|
9
|
+
import { Placeholder, UndoRedo } from '@tiptap/extensions';
|
|
10
10
|
import { Markdown } from '@tiptap/markdown';
|
|
11
11
|
import StarterKit from '@tiptap/starter-kit';
|
|
12
|
+
import { createNoteEditorChrome } from './web-note-editor-chrome.js';
|
|
13
|
+
import { NoteSearch } from './web-note-editor-search.js';
|
|
12
14
|
/**
|
|
13
15
|
* Mount a Markdown-native rich text editor into the notes workspace.
|
|
14
16
|
*
|
|
@@ -17,6 +19,7 @@ import StarterKit from '@tiptap/starter-kit';
|
|
|
17
19
|
* independent from the surrounding vanilla DOM renderer.
|
|
18
20
|
*/
|
|
19
21
|
export function createMarkdownEditor(options) {
|
|
22
|
+
let chrome;
|
|
20
23
|
const editor = new Editor({
|
|
21
24
|
element: options.host,
|
|
22
25
|
content: options.markdown,
|
|
@@ -30,6 +33,8 @@ export function createMarkdownEditor(options) {
|
|
|
30
33
|
},
|
|
31
34
|
}),
|
|
32
35
|
Markdown,
|
|
36
|
+
NoteSearch,
|
|
37
|
+
Placeholder.configure({ placeholder: '输入正文,或使用 Markdown 快捷语法…' }),
|
|
33
38
|
Image.configure({ allowBase64: false, inline: false }),
|
|
34
39
|
TableKit.configure({ table: { resizable: false } }),
|
|
35
40
|
TaskList,
|
|
@@ -44,15 +49,34 @@ export function createMarkdownEditor(options) {
|
|
|
44
49
|
spellcheck: 'false',
|
|
45
50
|
},
|
|
46
51
|
handleKeyDown: (_view, event) => {
|
|
47
|
-
if (!(event.metaKey || event.ctrlKey)
|
|
52
|
+
if (!(event.metaKey || event.ctrlKey))
|
|
48
53
|
return false;
|
|
49
|
-
event.
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
const key = event.key.toLocaleLowerCase();
|
|
55
|
+
if (key === 's') {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
options.onSave();
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
if (key === 'f') {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
chrome?.openFind();
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
52
66
|
},
|
|
53
67
|
},
|
|
54
68
|
onUpdate: ({ editor: current }) => options.onChange(current.getMarkdown()),
|
|
55
69
|
});
|
|
70
|
+
if (options.frame && options.scrollHost && options.outlineHost) {
|
|
71
|
+
chrome = createNoteEditorChrome({
|
|
72
|
+
editor,
|
|
73
|
+
frame: options.frame,
|
|
74
|
+
scrollHost: options.scrollHost,
|
|
75
|
+
outlineHost: options.outlineHost,
|
|
76
|
+
...(options.findButton !== undefined ? { findButton: options.findButton } : {}),
|
|
77
|
+
...(options.outlineButton !== undefined ? { outlineButton: options.outlineButton } : {}),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
56
80
|
return {
|
|
57
81
|
getMarkdown: () => editor.getMarkdown(),
|
|
58
82
|
focus: () => editor.commands.focus(),
|
|
@@ -60,7 +84,13 @@ export function createMarkdownEditor(options) {
|
|
|
60
84
|
editor.commands.insertContent(markdown, { contentType: 'markdown' });
|
|
61
85
|
editor.commands.focus();
|
|
62
86
|
},
|
|
63
|
-
|
|
87
|
+
openFind: () => chrome?.openFind(),
|
|
88
|
+
toggleOutline: () => chrome?.toggleOutline(),
|
|
89
|
+
destroy: () => {
|
|
90
|
+
chrome?.destroy();
|
|
91
|
+
chrome = undefined;
|
|
92
|
+
editor.destroy();
|
|
93
|
+
},
|
|
64
94
|
};
|
|
65
95
|
}
|
|
66
96
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-note-editor.js","sourceRoot":"","sources":["../src/web-note-editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,cAAc,CAAA;AACvD,OAAO,QAAQ,MAAM,4BAA4B,CAAA;AACjD,OAAO,KAAK,MAAM,yBAAyB,CAAA;AAC3C,OAAO,SAAS,MAAM,6BAA6B,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,QAAQ,MAAM,6BAA6B,CAAA;AAClD,OAAO,QAAQ,MAAM,6BAA6B,CAAA;AAClD,OAAO,IAAI,MAAM,wBAAwB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"web-note-editor.js","sourceRoot":"","sources":["../src/web-note-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface NoteHistoryItem {
|
|
2
|
+
noteId: string;
|
|
3
|
+
version: number;
|
|
4
|
+
name: string;
|
|
5
|
+
mediaType: string | null;
|
|
6
|
+
size: number;
|
|
7
|
+
sha256: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
}
|
|
10
|
+
interface NoteHistoryViewOptions {
|
|
11
|
+
versions: NoteHistoryItem[];
|
|
12
|
+
currentVersion: number;
|
|
13
|
+
currentContent: string;
|
|
14
|
+
loadContent(version: NoteHistoryItem, signal: AbortSignal): Promise<string>;
|
|
15
|
+
renderPreview(content: string): HTMLElement;
|
|
16
|
+
renderDiff(historical: string, current: string): HTMLElement;
|
|
17
|
+
formatDate(value: string): string;
|
|
18
|
+
formatBytes(value: number): string;
|
|
19
|
+
onRestore(version: NoteHistoryItem, content: string): Promise<void>;
|
|
20
|
+
onError(error: unknown): void;
|
|
21
|
+
}
|
|
22
|
+
export interface NoteHistoryView {
|
|
23
|
+
element: HTMLElement;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
}
|
|
26
|
+
export declare function createNoteHistoryView(options: NoteHistoryViewOptions): NoteHistoryView;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=web-note-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-note-history.d.ts","sourceRoot":"","sources":["../src/web-note-history.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,eAAe,EAAE,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3E,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAAA;IAC3C,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAAA;IAC5D,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAClC,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAA;IACpB,OAAO,IAAI,IAAI,CAAA;CAChB;AAWD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CA+JtF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
const CONTENT_CACHE_LIMIT = 4;
|
|
2
|
+
function node(tag, className = '', text = '') {
|
|
3
|
+
const element = document.createElement(tag);
|
|
4
|
+
if (className)
|
|
5
|
+
element.className = className;
|
|
6
|
+
if (text)
|
|
7
|
+
element.textContent = text;
|
|
8
|
+
return element;
|
|
9
|
+
}
|
|
10
|
+
export function createNoteHistoryView(options) {
|
|
11
|
+
const root = node('div', 'note-history-workspace');
|
|
12
|
+
let mode = 'preview';
|
|
13
|
+
let selected = options.versions[0];
|
|
14
|
+
let selectedContent = '';
|
|
15
|
+
let contentLoaded = false;
|
|
16
|
+
let request = 0;
|
|
17
|
+
let controller;
|
|
18
|
+
let destroyed = false;
|
|
19
|
+
const cache = new Map();
|
|
20
|
+
const timeline = node('nav', 'note-history-timeline');
|
|
21
|
+
timeline.setAttribute('aria-label', '页面历史版本');
|
|
22
|
+
const timelineHeading = node('div', 'note-history-timeline-heading');
|
|
23
|
+
timelineHeading.append(node('strong', '', '保存记录'), node('span', '', `最近 ${options.versions.length} 个版本`));
|
|
24
|
+
const versionList = node('div', 'note-history-version-list');
|
|
25
|
+
timeline.append(timelineHeading, versionList);
|
|
26
|
+
const detail = node('section', 'note-history-detail');
|
|
27
|
+
detail.setAttribute('aria-live', 'polite');
|
|
28
|
+
const detailHeader = node('header', 'note-history-detail-header');
|
|
29
|
+
const detailCopy = node('div', 'note-history-detail-copy');
|
|
30
|
+
const detailTitle = node('strong');
|
|
31
|
+
const detailMeta = node('span');
|
|
32
|
+
detailCopy.append(detailTitle, detailMeta);
|
|
33
|
+
const detailActions = node('div', 'note-history-detail-actions');
|
|
34
|
+
const previewButton = modeButton('内容预览', 'preview');
|
|
35
|
+
const diffButton = modeButton('与当前比较', 'diff');
|
|
36
|
+
const restoreButton = node('button', 'button primary small', '恢复为新版本');
|
|
37
|
+
restoreButton.type = 'button';
|
|
38
|
+
detailActions.append(previewButton, diffButton, restoreButton);
|
|
39
|
+
detailHeader.append(detailCopy, detailActions);
|
|
40
|
+
const content = node('div', 'note-history-content');
|
|
41
|
+
detail.append(detailHeader, content);
|
|
42
|
+
root.append(timeline, detail);
|
|
43
|
+
function modeButton(label, value) {
|
|
44
|
+
const button = node('button', 'note-history-mode', label);
|
|
45
|
+
button.type = 'button';
|
|
46
|
+
button.dataset.mode = value;
|
|
47
|
+
button.setAttribute('aria-pressed', String(mode === value));
|
|
48
|
+
button.addEventListener('click', () => {
|
|
49
|
+
mode = value;
|
|
50
|
+
syncMode();
|
|
51
|
+
renderSelectedContent();
|
|
52
|
+
});
|
|
53
|
+
return button;
|
|
54
|
+
}
|
|
55
|
+
function syncMode() {
|
|
56
|
+
previewButton.setAttribute('aria-pressed', String(mode === 'preview'));
|
|
57
|
+
diffButton.setAttribute('aria-pressed', String(mode === 'diff'));
|
|
58
|
+
}
|
|
59
|
+
function putCache(version, value) {
|
|
60
|
+
cache.delete(version);
|
|
61
|
+
cache.set(version, value);
|
|
62
|
+
while (cache.size > CONTENT_CACHE_LIMIT) {
|
|
63
|
+
const oldest = cache.keys().next().value;
|
|
64
|
+
if (oldest === undefined)
|
|
65
|
+
break;
|
|
66
|
+
cache.delete(oldest);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function syncVersionButtons() {
|
|
70
|
+
for (const button of versionList.querySelectorAll('[data-note-version]')) {
|
|
71
|
+
const active = Number(button.dataset.noteVersion) === selected?.version;
|
|
72
|
+
button.setAttribute('aria-current', active ? 'true' : 'false');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function syncDetailHeader() {
|
|
76
|
+
if (!selected)
|
|
77
|
+
return;
|
|
78
|
+
const current = selected.version === options.currentVersion;
|
|
79
|
+
detailTitle.textContent = `版本 ${selected.version}${current ? ' · 当前' : ''}`;
|
|
80
|
+
detailMeta.textContent = `${options.formatDate(selected.createdAt)} · ${options.formatBytes(selected.size)}`;
|
|
81
|
+
const sameContent = contentLoaded && selectedContent === options.currentContent;
|
|
82
|
+
restoreButton.disabled = current || !contentLoaded || sameContent;
|
|
83
|
+
restoreButton.textContent = current ? '当前版本' : sameContent ? '内容相同' : '恢复为新版本';
|
|
84
|
+
}
|
|
85
|
+
function renderSelectedContent() {
|
|
86
|
+
if (!contentLoaded) {
|
|
87
|
+
content.replaceChildren(node('div', 'note-history-loading', '正在读取版本内容…'));
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
content.replaceChildren(mode === 'preview'
|
|
91
|
+
? options.renderPreview(selectedContent)
|
|
92
|
+
: options.renderDiff(selectedContent, options.currentContent));
|
|
93
|
+
}
|
|
94
|
+
async function selectVersion(version) {
|
|
95
|
+
selected = version;
|
|
96
|
+
selectedContent = '';
|
|
97
|
+
contentLoaded = false;
|
|
98
|
+
syncVersionButtons();
|
|
99
|
+
syncDetailHeader();
|
|
100
|
+
renderSelectedContent();
|
|
101
|
+
const currentRequest = ++request;
|
|
102
|
+
controller?.abort();
|
|
103
|
+
controller = new AbortController();
|
|
104
|
+
try {
|
|
105
|
+
const cached = cache.get(version.version);
|
|
106
|
+
const loaded = cached ?? await options.loadContent(version, controller.signal);
|
|
107
|
+
if (destroyed || currentRequest !== request)
|
|
108
|
+
return;
|
|
109
|
+
selectedContent = loaded;
|
|
110
|
+
contentLoaded = true;
|
|
111
|
+
putCache(version.version, loaded);
|
|
112
|
+
syncDetailHeader();
|
|
113
|
+
renderSelectedContent();
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (destroyed || currentRequest !== request || (error instanceof DOMException && error.name === 'AbortError'))
|
|
117
|
+
return;
|
|
118
|
+
content.replaceChildren(node('div', 'note-history-error', '无法读取这个历史版本。'));
|
|
119
|
+
options.onError(error);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
for (const version of options.versions) {
|
|
123
|
+
const current = version.version === options.currentVersion;
|
|
124
|
+
const button = node('button', 'note-history-version');
|
|
125
|
+
button.type = 'button';
|
|
126
|
+
button.dataset.noteVersion = String(version.version);
|
|
127
|
+
button.append(node('strong', '', `版本 ${version.version}${current ? ' · 当前' : ''}`), node('span', '', options.formatDate(version.createdAt)), node('small', '', options.formatBytes(version.size)));
|
|
128
|
+
button.addEventListener('click', () => { void selectVersion(version); });
|
|
129
|
+
versionList.append(button);
|
|
130
|
+
}
|
|
131
|
+
restoreButton.addEventListener('click', async () => {
|
|
132
|
+
if (!selected || !contentLoaded || restoreButton.disabled)
|
|
133
|
+
return;
|
|
134
|
+
restoreButton.disabled = true;
|
|
135
|
+
restoreButton.setAttribute('aria-busy', 'true');
|
|
136
|
+
restoreButton.textContent = '正在恢复…';
|
|
137
|
+
try {
|
|
138
|
+
await options.onRestore(selected, selectedContent);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (!destroyed) {
|
|
142
|
+
restoreButton.disabled = false;
|
|
143
|
+
restoreButton.removeAttribute('aria-busy');
|
|
144
|
+
syncDetailHeader();
|
|
145
|
+
options.onError(error);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (selected)
|
|
150
|
+
void selectVersion(selected);
|
|
151
|
+
else
|
|
152
|
+
content.replaceChildren(node('div', 'note-history-error', '还没有可查看的保存记录。'));
|
|
153
|
+
return {
|
|
154
|
+
element: root,
|
|
155
|
+
destroy: () => {
|
|
156
|
+
destroyed = true;
|
|
157
|
+
request += 1;
|
|
158
|
+
controller?.abort();
|
|
159
|
+
cache.clear();
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=web-note-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-note-history.js","sourceRoot":"","sources":["../src/web-note-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-workspace-effects.d.ts","sourceRoot":"","sources":["../src/web-workspace-effects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-workspace-effects.d.ts","sourceRoot":"","sources":["../src/web-workspace-effects.ts"],"names":[],"mappings":"AAuDA,UAAU,mBAAmB;IAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC,OAAO,IAAI,IAAI,CAAA;CAChB;AAQD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;KAC1C;CACF;AAiRD,iBAAS,OAAO,CAAC,IAAI,GAAE,UAAqB,GAAG,IAAI,CAOlD;AAED,iBAAS,OAAO,IAAI,IAAI,CA0BvB;AAKD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA"}
|