idea-manager 2.2.0 → 2.3.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/.next/build-manifest.json +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +2 -2
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/api/advisor-actions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/archive/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/filesystem/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/filesystem/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/global-advisor/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/global-memo/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/maintenance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/advisor/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/apply-distribute/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/auto-distribute/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/brainstorm/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/git-sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/[taskId]/chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/[taskId]/prompt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/[taskId]/refine/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/reorder/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/[subId]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/[id]/sub-projects/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/move/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/version/route_client-reference-manifest.js +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +2 -2
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/page.js +7 -7
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/projects/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +4 -4
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +2 -2
- package/.next/static/chunks/app/{page-92e516361aff0ece.js → page-16b10bcc10c22811.js} +8 -8
- package/package.json +1 -1
- package/src/components/task/NoteEditor.tsx +63 -2
- /package/.next/static/{hhAzw58XbAFfL_Ly5sk13 → E6_zErdSfG_2YXZzHtQ34}/_buildManifest.js +0 -0
- /package/.next/static/{hhAzw58XbAFfL_Ly5sk13 → E6_zErdSfG_2YXZzHtQ34}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "idea-manager",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "AI-powered idea & task manager for developers. Brainstorm → structured tasks → AI agent execution. CodeMirror editor with slash commands, MCP Server, Claude/Gemini/Codex support. Local-first SQLite, cross-PC Git sync.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"idea-manager",
|
|
@@ -3,12 +3,72 @@
|
|
|
3
3
|
import { forwardRef, useMemo, useRef } from 'react';
|
|
4
4
|
import CodeMirror, { type ReactCodeMirrorRef } from '@uiw/react-codemirror';
|
|
5
5
|
import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
|
|
6
|
-
import { EditorView, Decoration, keymap, ViewPlugin, WidgetType } from '@codemirror/view';
|
|
7
|
-
import { EditorState, StateEffect, StateField, Prec } from '@codemirror/state';
|
|
6
|
+
import { EditorView, Decoration, keymap, ViewPlugin, WidgetType, type DecorationSet } from '@codemirror/view';
|
|
7
|
+
import { EditorState, StateEffect, StateField, Prec, RangeSetBuilder } from '@codemirror/state';
|
|
8
8
|
import { HighlightStyle, syntaxHighlighting } from '@codemirror/language';
|
|
9
9
|
import { autocompletion, type CompletionContext, type CompletionResult } from '@codemirror/autocomplete';
|
|
10
10
|
import { tags as t } from '@lezer/highlight';
|
|
11
11
|
|
|
12
|
+
// ─────────────────────────────────────────────────────────────
|
|
13
|
+
// Arrow ligatures: visually replace -> => <- etc. with unicode
|
|
14
|
+
// arrows. The actual document text is unchanged.
|
|
15
|
+
// ─────────────────────────────────────────────────────────────
|
|
16
|
+
// Map of arrow text → unicode, longest patterns first to prevent partial matches.
|
|
17
|
+
const LIGATURE_MAP: Record<string, string> = {
|
|
18
|
+
'<-->': '⟷', '<=>': '⇔',
|
|
19
|
+
'-->': '⟶', '<--': '⟵', '==>': '⟹', '<==': '⟸', '<->': '↔',
|
|
20
|
+
'=>': '⇒', '->': '→', '<-': '←',
|
|
21
|
+
};
|
|
22
|
+
const LIGATURE_RE = new RegExp(
|
|
23
|
+
Object.keys(LIGATURE_MAP)
|
|
24
|
+
.sort((a, b) => b.length - a.length)
|
|
25
|
+
.map(k => k.replace(/[-<>=]/g, '\\$&'))
|
|
26
|
+
.join('|'),
|
|
27
|
+
'g',
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
class LigatureWidget extends WidgetType {
|
|
31
|
+
constructor(public readonly ch: string) { super(); }
|
|
32
|
+
eq(other: LigatureWidget) { return other.ch === this.ch; }
|
|
33
|
+
toDOM() {
|
|
34
|
+
const span = document.createElement('span');
|
|
35
|
+
span.textContent = this.ch;
|
|
36
|
+
span.className = 'cm-ligature';
|
|
37
|
+
span.style.color = 'hsl(var(--primary))';
|
|
38
|
+
return span;
|
|
39
|
+
}
|
|
40
|
+
ignoreEvent() { return true; }
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function buildLigatureDecorations(view: EditorView): DecorationSet {
|
|
44
|
+
const builder = new RangeSetBuilder<Decoration>();
|
|
45
|
+
const doc = view.state.doc;
|
|
46
|
+
for (let i = 1; i <= doc.lines; i++) {
|
|
47
|
+
const line = doc.line(i);
|
|
48
|
+
LIGATURE_RE.lastIndex = 0;
|
|
49
|
+
let m: RegExpExecArray | null;
|
|
50
|
+
while ((m = LIGATURE_RE.exec(line.text)) !== null) {
|
|
51
|
+
const ch = LIGATURE_MAP[m[0]];
|
|
52
|
+
if (!ch) continue;
|
|
53
|
+
const from = line.from + m.index;
|
|
54
|
+
const to = from + m[0].length;
|
|
55
|
+
builder.add(from, to, Decoration.replace({ widget: new LigatureWidget(ch) }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return builder.finish();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const ligaturePlugin = ViewPlugin.fromClass(
|
|
62
|
+
class {
|
|
63
|
+
decorations: DecorationSet;
|
|
64
|
+
constructor(view: EditorView) { this.decorations = buildLigatureDecorations(view); }
|
|
65
|
+
update(u: { docChanged: boolean; view: EditorView }) {
|
|
66
|
+
if (u.docChanged) this.decorations = buildLigatureDecorations(u.view);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{ decorations: (v) => v.decorations },
|
|
70
|
+
);
|
|
71
|
+
|
|
12
72
|
// ─────────────────────────────────────────────────────────────
|
|
13
73
|
// Ghost-text state: a decoration widget after the cursor.
|
|
14
74
|
// ─────────────────────────────────────────────────────────────
|
|
@@ -451,6 +511,7 @@ const NoteEditor = forwardRef<ReactCodeMirrorRef, NoteEditorProps>(function Note
|
|
|
451
511
|
const extensions = useMemo(() => [
|
|
452
512
|
markdown({ base: markdownLanguage }),
|
|
453
513
|
syntaxHighlighting(mdHighlight),
|
|
514
|
+
ligaturePlugin,
|
|
454
515
|
autocompletion({
|
|
455
516
|
override: [slashCompletion],
|
|
456
517
|
defaultKeymap: true,
|
|
File without changes
|
|
File without changes
|