ocean-brain 0.4.2 → 0.6.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/dist/mcp.js +660 -31
- package/package.json +2 -1
- package/server/client/dist/assets/{Calendar-DI0PhQTq.js → Calendar-BytW4PeT.js} +1 -1
- package/server/client/dist/assets/Callout-9sJgGNRb.js +1 -0
- package/server/client/dist/assets/Graph-o5u-NzrA.js +1 -0
- package/server/client/dist/assets/{Image-DlJ4MDo3.js → Image-DxWhlIDG.js} +1 -1
- package/server/client/dist/assets/{Image.es-COwqkQuh.js → Image.es-B0LL3pb7.js} +1 -1
- package/server/client/dist/assets/Note-CYoYzZNu.js +21 -0
- package/server/client/dist/assets/{Plus.es-KeV96R_e.js → Plus.es-DpxzgRtY.js} +1 -1
- package/server/client/dist/assets/Reminders-DAepTZg1.js +1 -0
- package/server/client/dist/assets/Search-6KH7An44.js +1 -0
- package/server/client/dist/assets/{SurfaceCard-CHjcCuqZ.js → SurfaceCard-EMs50xSF.js} +1 -1
- package/server/client/dist/assets/Tag-C89j8x56.js +1 -0
- package/server/client/dist/assets/TagNotes-BTbu-f6v.js +1 -0
- package/server/client/dist/assets/{Trash.es-BqRTZPrI.js → Trash.es-C5x35NKF.js} +1 -1
- package/server/client/dist/assets/ViewNotes-DPEuki3y.js +1 -0
- package/server/client/dist/assets/Views-BGkuNhVd.js +1 -0
- package/server/client/dist/assets/{image.api-CMdQbCyN.js → image.api-DRhRQ0Gf.js} +1 -1
- package/server/client/dist/assets/{index-D2gRB1ig.css → index-Cd81UxEh.css} +1 -1
- package/server/client/dist/assets/index-DYlYUrjH.js +327 -0
- package/server/client/dist/assets/index-DswSFFMb.js +1 -0
- package/server/client/dist/assets/manage-image-C6sHhWnI.js +1 -0
- package/server/client/dist/assets/manage-image-detail-CJkfybR9.js +1 -0
- package/server/client/dist/assets/{mcp-DqGLZv90.js → mcp-piouFDNm.js} +1 -1
- package/server/client/dist/assets/note-core-Z6kqulGB.js +180 -0
- package/server/client/dist/assets/note-vendor-i1M2FSI2.js +54 -0
- package/server/client/dist/assets/{placeholder-BXLtvdtN.js → placeholder-DGz3CHej.js} +4 -4
- package/server/client/dist/assets/properties-CM4khczg.js +1 -0
- package/server/client/dist/assets/trash-C2lItz-b.js +1 -0
- package/server/client/dist/assets/{useReminderMutate-v1EXqM90.js → useReminderMutate-DHjDDHKg.js} +1 -1
- package/server/client/dist/assets/view-dashboard-C17WsdL7.js +99 -0
- package/server/client/dist/index.html +4 -4
- package/server/dist/features/note/graphql/note.field.resolver.js +16 -1
- package/server/dist/features/note/graphql/note.field.resolver.js.map +1 -1
- package/server/dist/features/note/graphql/note.mutation.resolver.js +192 -36
- package/server/dist/features/note/graphql/note.mutation.resolver.js.map +1 -1
- package/server/dist/features/note/graphql/note.query.resolver.js +88 -76
- package/server/dist/features/note/graphql/note.query.resolver.js.map +1 -1
- package/server/dist/features/note/graphql/note.resolver.js +3 -2
- package/server/dist/features/note/graphql/note.resolver.js.map +1 -1
- package/server/dist/features/note/graphql/note.type-defs.js +104 -1
- package/server/dist/features/note/graphql/note.type-defs.js.map +1 -1
- package/server/dist/features/note/http/mcp.js +394 -1
- package/server/dist/features/note/http/mcp.js.map +1 -1
- package/server/dist/features/note/services/cleanup.js +4 -3
- package/server/dist/features/note/services/cleanup.js.map +1 -1
- package/server/dist/features/note/services/content-blocks.js +113 -0
- package/server/dist/features/note/services/content-blocks.js.map +1 -0
- package/server/dist/features/note/services/markdown-intent-write.js +478 -0
- package/server/dist/features/note/services/markdown-intent-write.js.map +1 -0
- package/server/dist/features/note/services/markdown-patch.js +601 -0
- package/server/dist/features/note/services/markdown-patch.js.map +1 -0
- package/server/dist/features/note/services/properties.js +874 -0
- package/server/dist/features/note/services/properties.js.map +1 -0
- package/server/dist/features/note/services/search.js +10 -29
- package/server/dist/features/note/services/search.js.map +1 -1
- package/server/dist/features/note/services/snapshot.js +260 -18
- package/server/dist/features/note/services/snapshot.js.map +1 -1
- package/server/dist/features/note/services/trash.js +70 -2
- package/server/dist/features/note/services/trash.js.map +1 -1
- package/server/dist/features/note/services/write-conflict.js +87 -0
- package/server/dist/features/note/services/write-conflict.js.map +1 -0
- package/server/dist/features/note/services/write.js +121 -0
- package/server/dist/features/note/services/write.js.map +1 -0
- package/server/dist/features/view/graphql/view.query.resolver.js +31 -1
- package/server/dist/features/view/graphql/view.query.resolver.js.map +1 -1
- package/server/dist/features/view/graphql/view.type-defs.js +57 -1
- package/server/dist/features/view/graphql/view.type-defs.js.map +1 -1
- package/server/dist/features/view/services/workspace.js +367 -43
- package/server/dist/features/view/services/workspace.js.map +1 -1
- package/server/dist/modules/blocknote-tree.js +41 -0
- package/server/dist/modules/blocknote-tree.js.map +1 -0
- package/server/dist/modules/blocknote.js +47 -2
- package/server/dist/modules/blocknote.js.map +1 -1
- package/server/dist/modules/error-handler.js +7 -4
- package/server/dist/modules/error-handler.js.map +1 -1
- package/server/dist/modules/recovery-retention.js +2 -2
- package/server/dist/modules/recovery-retention.js.map +1 -1
- package/server/dist/routes/mcp.js +21 -1
- package/server/dist/routes/mcp.js.map +1 -1
- package/server/prisma/migrations/20260527073000_0017_note_properties/migration.sql +105 -0
- package/server/prisma/migrations/20260531073000_0018_view_query/migration.sql +3 -0
- package/server/prisma/schema.prisma +226 -130
- package/server/client/dist/assets/Callout-BAqbXI0L.js +0 -1
- package/server/client/dist/assets/Graph-Dhuog4tc.js +0 -1
- package/server/client/dist/assets/Note-ChUWU3Su.js +0 -21
- package/server/client/dist/assets/Reminders-D7MCTNxb.js +0 -1
- package/server/client/dist/assets/Search-B-fwTr5y.js +0 -1
- package/server/client/dist/assets/Tag-BbV2z-Db.js +0 -1
- package/server/client/dist/assets/TagNotes-2HKF09Jm.js +0 -1
- package/server/client/dist/assets/ViewNotes-TfM3Uzbp.js +0 -1
- package/server/client/dist/assets/Views-CUwtnfa8.js +0 -1
- package/server/client/dist/assets/index-B4l2UvuC.js +0 -232
- package/server/client/dist/assets/index-zhxZjg7V.js +0 -1
- package/server/client/dist/assets/manage-image-DdXb5Bkj.js +0 -1
- package/server/client/dist/assets/manage-image-detail-CrrXCQIX.js +0 -1
- package/server/client/dist/assets/note-core-GgFcksAF.js +0 -178
- package/server/client/dist/assets/note-vendor-B0t5F04o.js +0 -54
- package/server/client/dist/assets/trash-3eUAjFRh.js +0 -1
- package/server/client/dist/assets/view-dashboard-T6gmohr-.js +0 -90
- package/server/dist/features/note/graphql/note.graphql.shared.js +0 -23
- package/server/dist/features/note/graphql/note.graphql.shared.js.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
-- CreateTable
|
|
2
|
+
CREATE TABLE "PropertyDefinition" (
|
|
3
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
4
|
+
"key" TEXT NOT NULL,
|
|
5
|
+
"name" TEXT NOT NULL,
|
|
6
|
+
"valueType" TEXT NOT NULL,
|
|
7
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
8
|
+
"updatedAt" DATETIME NOT NULL
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
-- CreateTable
|
|
12
|
+
CREATE TABLE "PropertyOption" (
|
|
13
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
14
|
+
"propertyDefinitionId" INTEGER NOT NULL,
|
|
15
|
+
"label" TEXT NOT NULL,
|
|
16
|
+
"value" TEXT NOT NULL,
|
|
17
|
+
"color" TEXT,
|
|
18
|
+
"order" INTEGER NOT NULL DEFAULT 0,
|
|
19
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
+
"updatedAt" DATETIME NOT NULL,
|
|
21
|
+
CONSTRAINT "PropertyOption_propertyDefinitionId_fkey" FOREIGN KEY ("propertyDefinitionId") REFERENCES "PropertyDefinition" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
-- CreateTable
|
|
25
|
+
CREATE TABLE "NoteProperty" (
|
|
26
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
27
|
+
"noteId" INTEGER NOT NULL,
|
|
28
|
+
"propertyDefinitionId" INTEGER NOT NULL,
|
|
29
|
+
"optionId" INTEGER,
|
|
30
|
+
"textValue" TEXT,
|
|
31
|
+
"textValueNormalized" TEXT,
|
|
32
|
+
"numberValue" REAL,
|
|
33
|
+
"dateValue" DATETIME,
|
|
34
|
+
"boolValue" BOOLEAN,
|
|
35
|
+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
36
|
+
"updatedAt" DATETIME NOT NULL,
|
|
37
|
+
CONSTRAINT "NoteProperty_noteId_fkey" FOREIGN KEY ("noteId") REFERENCES "Note" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
38
|
+
CONSTRAINT "NoteProperty_propertyDefinitionId_fkey" FOREIGN KEY ("propertyDefinitionId") REFERENCES "PropertyDefinition" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
39
|
+
CONSTRAINT "NoteProperty_optionId_fkey" FOREIGN KEY ("optionId") REFERENCES "PropertyOption" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
-- CreateTable
|
|
43
|
+
CREATE TABLE "DeletedNoteProperty" (
|
|
44
|
+
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
|
45
|
+
"deletedNoteId" INTEGER NOT NULL,
|
|
46
|
+
"key" TEXT NOT NULL,
|
|
47
|
+
"name" TEXT NOT NULL,
|
|
48
|
+
"valueType" TEXT NOT NULL,
|
|
49
|
+
"textValue" TEXT,
|
|
50
|
+
"textValueNormalized" TEXT,
|
|
51
|
+
"numberValue" REAL,
|
|
52
|
+
"dateValue" DATETIME,
|
|
53
|
+
"boolValue" BOOLEAN,
|
|
54
|
+
"optionValue" TEXT,
|
|
55
|
+
"optionLabel" TEXT,
|
|
56
|
+
"optionColor" TEXT,
|
|
57
|
+
"createdAt" DATETIME NOT NULL,
|
|
58
|
+
"updatedAt" DATETIME NOT NULL,
|
|
59
|
+
CONSTRAINT "DeletedNoteProperty_deletedNoteId_fkey" FOREIGN KEY ("deletedNoteId") REFERENCES "DeletedNote" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
-- CreateIndex
|
|
63
|
+
CREATE UNIQUE INDEX "PropertyDefinition_key_key" ON "PropertyDefinition"("key");
|
|
64
|
+
|
|
65
|
+
-- CreateIndex
|
|
66
|
+
CREATE UNIQUE INDEX "PropertyOption_propertyDefinitionId_value_key" ON "PropertyOption"("propertyDefinitionId", "value");
|
|
67
|
+
|
|
68
|
+
-- CreateIndex
|
|
69
|
+
CREATE INDEX "PropertyOption_propertyDefinitionId_order_idx" ON "PropertyOption"("propertyDefinitionId", "order");
|
|
70
|
+
|
|
71
|
+
-- CreateIndex
|
|
72
|
+
CREATE UNIQUE INDEX "NoteProperty_noteId_propertyDefinitionId_key" ON "NoteProperty"("noteId", "propertyDefinitionId");
|
|
73
|
+
|
|
74
|
+
-- CreateIndex
|
|
75
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "noteId");
|
|
76
|
+
|
|
77
|
+
-- CreateIndex
|
|
78
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_textValueNormalized_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "textValueNormalized", "noteId");
|
|
79
|
+
|
|
80
|
+
-- CreateIndex
|
|
81
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_numberValue_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "numberValue", "noteId");
|
|
82
|
+
|
|
83
|
+
-- CreateIndex
|
|
84
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_dateValue_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "dateValue", "noteId");
|
|
85
|
+
|
|
86
|
+
-- CreateIndex
|
|
87
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_boolValue_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "boolValue", "noteId");
|
|
88
|
+
|
|
89
|
+
-- CreateIndex
|
|
90
|
+
CREATE INDEX "NoteProperty_propertyDefinitionId_optionId_noteId_idx" ON "NoteProperty"("propertyDefinitionId", "optionId", "noteId");
|
|
91
|
+
|
|
92
|
+
-- CreateIndex
|
|
93
|
+
CREATE UNIQUE INDEX "DeletedNoteProperty_deletedNoteId_key_key" ON "DeletedNoteProperty"("deletedNoteId", "key");
|
|
94
|
+
|
|
95
|
+
-- CreateIndex
|
|
96
|
+
CREATE INDEX "DeletedNoteProperty_deletedNoteId_idx" ON "DeletedNoteProperty"("deletedNoteId");
|
|
97
|
+
|
|
98
|
+
-- CreateIndex
|
|
99
|
+
CREATE INDEX "Note_updatedAt_id_idx" ON "Note"("updatedAt", "id");
|
|
100
|
+
|
|
101
|
+
-- CreateIndex
|
|
102
|
+
CREATE INDEX "Note_createdAt_id_idx" ON "Note"("createdAt", "id");
|
|
103
|
+
|
|
104
|
+
-- CreateIndex
|
|
105
|
+
CREATE INDEX "Note_pinned_updatedAt_id_idx" ON "Note"("pinned", "updatedAt", "id");
|
|
@@ -1,197 +1,293 @@
|
|
|
1
1
|
generator client {
|
|
2
|
-
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
datasource db {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
provider = "sqlite"
|
|
7
|
+
url = env("DATABASE_URL")
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
model Cache {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
id Int @id @default(autoincrement())
|
|
12
|
+
key String @unique
|
|
13
|
+
value String
|
|
14
|
+
createdAt DateTime @default(now())
|
|
15
|
+
updatedAt DateTime @updatedAt
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
model McpToken {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
id Int @id @default(autoincrement())
|
|
20
|
+
tokenHash String
|
|
21
|
+
createdAt DateTime @default(now())
|
|
22
|
+
lastUsedAt DateTime?
|
|
23
|
+
revokedAt DateTime?
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
@@index([revokedAt, createdAt])
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
model Note {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
id Int @id @default(autoincrement())
|
|
30
|
+
title String
|
|
31
|
+
content String
|
|
32
|
+
searchableText String @default("")
|
|
33
|
+
searchableTextVersion Int @default(0)
|
|
34
|
+
createdAt DateTime @default(now())
|
|
35
|
+
updatedAt DateTime @updatedAt
|
|
36
|
+
pinned Boolean @default(false)
|
|
37
|
+
order Int @default(0)
|
|
38
|
+
layout NoteLayout @default(wide)
|
|
39
|
+
tags Tag[] @relation("NoteToTag")
|
|
40
|
+
reminders Reminder[] @relation("NoteToReminder")
|
|
41
|
+
snapshots NoteSnapshot[]
|
|
42
|
+
properties NoteProperty[]
|
|
43
|
+
|
|
44
|
+
@@index([updatedAt, id])
|
|
45
|
+
@@index([createdAt, id])
|
|
46
|
+
@@index([pinned, updatedAt, id])
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
model PropertyDefinition {
|
|
50
|
+
id Int @id @default(autoincrement())
|
|
51
|
+
key String @unique
|
|
52
|
+
name String
|
|
53
|
+
valueType PropertyValueType
|
|
54
|
+
createdAt DateTime @default(now())
|
|
55
|
+
updatedAt DateTime @updatedAt
|
|
56
|
+
options PropertyOption[]
|
|
57
|
+
properties NoteProperty[]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
model PropertyOption {
|
|
61
|
+
id Int @id @default(autoincrement())
|
|
62
|
+
propertyDefinitionId Int
|
|
63
|
+
definition PropertyDefinition @relation(fields: [propertyDefinitionId], references: [id], onDelete: Cascade)
|
|
64
|
+
label String
|
|
65
|
+
value String
|
|
66
|
+
color String?
|
|
67
|
+
order Int @default(0)
|
|
68
|
+
properties NoteProperty[]
|
|
69
|
+
createdAt DateTime @default(now())
|
|
70
|
+
updatedAt DateTime @updatedAt
|
|
71
|
+
|
|
72
|
+
@@unique([propertyDefinitionId, value])
|
|
73
|
+
@@index([propertyDefinitionId, order])
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
model NoteProperty {
|
|
77
|
+
id Int @id @default(autoincrement())
|
|
78
|
+
noteId Int
|
|
79
|
+
propertyDefinitionId Int
|
|
80
|
+
note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
|
|
81
|
+
definition PropertyDefinition @relation(fields: [propertyDefinitionId], references: [id], onDelete: Cascade)
|
|
82
|
+
optionId Int?
|
|
83
|
+
option PropertyOption? @relation(fields: [optionId], references: [id], onDelete: SetNull)
|
|
84
|
+
textValue String?
|
|
85
|
+
textValueNormalized String?
|
|
86
|
+
numberValue Float?
|
|
87
|
+
dateValue DateTime?
|
|
88
|
+
boolValue Boolean?
|
|
89
|
+
createdAt DateTime @default(now())
|
|
90
|
+
updatedAt DateTime @updatedAt
|
|
91
|
+
|
|
92
|
+
@@unique([noteId, propertyDefinitionId])
|
|
93
|
+
@@index([propertyDefinitionId, noteId])
|
|
94
|
+
@@index([propertyDefinitionId, textValueNormalized, noteId])
|
|
95
|
+
@@index([propertyDefinitionId, numberValue, noteId])
|
|
96
|
+
@@index([propertyDefinitionId, dateValue, noteId])
|
|
97
|
+
@@index([propertyDefinitionId, boolValue, noteId])
|
|
98
|
+
@@index([propertyDefinitionId, optionId, noteId])
|
|
42
99
|
}
|
|
43
100
|
|
|
44
101
|
model NoteSnapshot {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
102
|
+
id Int @id @default(autoincrement())
|
|
103
|
+
noteId Int
|
|
104
|
+
note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
|
|
105
|
+
title String
|
|
106
|
+
payload String
|
|
107
|
+
editSessionId String?
|
|
108
|
+
meta String?
|
|
109
|
+
createdAt DateTime @default(now())
|
|
53
110
|
|
|
54
|
-
|
|
55
|
-
|
|
111
|
+
@@unique([noteId, editSessionId])
|
|
112
|
+
@@index([noteId, createdAt])
|
|
56
113
|
}
|
|
57
114
|
|
|
58
115
|
model DeletedNote {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
116
|
+
id Int @id
|
|
117
|
+
title String
|
|
118
|
+
content String
|
|
119
|
+
createdAt DateTime
|
|
120
|
+
updatedAt DateTime
|
|
121
|
+
deletedAt DateTime @default(now())
|
|
122
|
+
pinned Boolean @default(false)
|
|
123
|
+
order Int @default(0)
|
|
124
|
+
layout NoteLayout @default(wide)
|
|
125
|
+
tags DeletedNoteTag[]
|
|
126
|
+
reminders DeletedReminder[]
|
|
127
|
+
properties DeletedNoteProperty[]
|
|
128
|
+
|
|
129
|
+
@@index([deletedAt, updatedAt])
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
model DeletedNoteProperty {
|
|
133
|
+
id Int @id @default(autoincrement())
|
|
134
|
+
deletedNoteId Int
|
|
135
|
+
deletedNote DeletedNote @relation(fields: [deletedNoteId], references: [id], onDelete: Cascade)
|
|
136
|
+
key String
|
|
137
|
+
name String
|
|
138
|
+
valueType PropertyValueType
|
|
139
|
+
textValue String?
|
|
140
|
+
textValueNormalized String?
|
|
141
|
+
numberValue Float?
|
|
142
|
+
dateValue DateTime?
|
|
143
|
+
boolValue Boolean?
|
|
144
|
+
optionValue String?
|
|
145
|
+
optionLabel String?
|
|
146
|
+
optionColor String?
|
|
147
|
+
createdAt DateTime
|
|
148
|
+
updatedAt DateTime
|
|
70
149
|
|
|
71
|
-
|
|
150
|
+
@@unique([deletedNoteId, key])
|
|
151
|
+
@@index([deletedNoteId])
|
|
72
152
|
}
|
|
73
153
|
|
|
74
154
|
model DeletedNoteTag {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
155
|
+
id Int @id @default(autoincrement())
|
|
156
|
+
deletedNoteId Int
|
|
157
|
+
deletedNote DeletedNote @relation(fields: [deletedNoteId], references: [id], onDelete: Cascade)
|
|
158
|
+
name String
|
|
79
159
|
|
|
80
|
-
|
|
160
|
+
@@index([deletedNoteId])
|
|
81
161
|
}
|
|
82
162
|
|
|
83
163
|
model DeletedReminder {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
164
|
+
id Int @id @default(autoincrement())
|
|
165
|
+
deletedNoteId Int
|
|
166
|
+
deletedNote DeletedNote @relation(fields: [deletedNoteId], references: [id], onDelete: Cascade)
|
|
167
|
+
originalId Int?
|
|
168
|
+
reminderDate DateTime
|
|
169
|
+
completed Boolean @default(false)
|
|
170
|
+
priority ReminderPriority @default(medium)
|
|
171
|
+
content String?
|
|
172
|
+
createdAt DateTime
|
|
173
|
+
updatedAt DateTime
|
|
94
174
|
|
|
95
|
-
|
|
175
|
+
@@index([deletedNoteId])
|
|
96
176
|
}
|
|
97
177
|
|
|
98
178
|
model Image {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
179
|
+
id Int @id @default(autoincrement())
|
|
180
|
+
url String
|
|
181
|
+
hash String @unique
|
|
182
|
+
createdAt DateTime @default(now())
|
|
183
|
+
updatedAt DateTime @updatedAt
|
|
104
184
|
}
|
|
105
185
|
|
|
106
186
|
model Tag {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
187
|
+
id Int @id @default(autoincrement())
|
|
188
|
+
name String @unique
|
|
189
|
+
createdAt DateTime @default(now())
|
|
190
|
+
updatedAt DateTime @updatedAt
|
|
191
|
+
notes Note[] @relation("NoteToTag")
|
|
112
192
|
}
|
|
113
193
|
|
|
114
194
|
enum ReminderPriority {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
195
|
+
low
|
|
196
|
+
medium
|
|
197
|
+
high
|
|
118
198
|
}
|
|
119
199
|
|
|
120
200
|
enum NoteLayout {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
201
|
+
narrow
|
|
202
|
+
wide
|
|
203
|
+
full
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
enum PropertyValueType {
|
|
207
|
+
text
|
|
208
|
+
url
|
|
209
|
+
number
|
|
210
|
+
date
|
|
211
|
+
boolean
|
|
212
|
+
select
|
|
124
213
|
}
|
|
125
214
|
|
|
126
215
|
model Reminder {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
216
|
+
id Int @id @default(autoincrement())
|
|
217
|
+
noteId Int
|
|
218
|
+
note Note @relation("NoteToReminder", fields: [noteId], references: [id], onDelete: Cascade)
|
|
219
|
+
reminderDate DateTime
|
|
220
|
+
completed Boolean @default(false)
|
|
221
|
+
priority ReminderPriority @default(medium)
|
|
222
|
+
content String?
|
|
223
|
+
createdAt DateTime @default(now())
|
|
224
|
+
updatedAt DateTime @updatedAt
|
|
136
225
|
}
|
|
137
226
|
|
|
138
227
|
model Placeholder {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
228
|
+
id Int @id @default(autoincrement())
|
|
229
|
+
name String @unique
|
|
230
|
+
template String
|
|
231
|
+
replacement String
|
|
232
|
+
createdAt DateTime @default(now())
|
|
233
|
+
updatedAt DateTime @updatedAt
|
|
145
234
|
}
|
|
146
235
|
|
|
147
236
|
model ViewWorkspace {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
237
|
+
id Int @id
|
|
238
|
+
activeTabId Int?
|
|
239
|
+
activeTab ViewTab? @relation("ActiveViewTab", fields: [activeTabId], references: [id], onDelete: SetNull)
|
|
240
|
+
createdAt DateTime @default(now())
|
|
241
|
+
updatedAt DateTime @updatedAt
|
|
153
242
|
}
|
|
154
243
|
|
|
155
244
|
model ViewTab {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
245
|
+
id Int @id @default(autoincrement())
|
|
246
|
+
title String
|
|
247
|
+
order Int @default(0)
|
|
248
|
+
createdAt DateTime @default(now())
|
|
249
|
+
updatedAt DateTime @updatedAt
|
|
250
|
+
sections ViewSection[]
|
|
251
|
+
activeWorkspaces ViewWorkspace[] @relation("ActiveViewTab")
|
|
163
252
|
|
|
164
|
-
|
|
253
|
+
@@index([order, createdAt])
|
|
165
254
|
}
|
|
166
255
|
|
|
167
256
|
model ViewSection {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
257
|
+
id Int @id @default(autoincrement())
|
|
258
|
+
tabId Int
|
|
259
|
+
tab ViewTab @relation(fields: [tabId], references: [id], onDelete: Cascade)
|
|
260
|
+
title String
|
|
261
|
+
displayType ViewDisplayType @default(list)
|
|
262
|
+
query String?
|
|
263
|
+
mode ViewTagMatchMode @default(and)
|
|
264
|
+
limit Int @default(5)
|
|
265
|
+
order Int @default(0)
|
|
266
|
+
createdAt DateTime @default(now())
|
|
267
|
+
updatedAt DateTime @updatedAt
|
|
268
|
+
tags ViewSectionTag[]
|
|
178
269
|
|
|
179
|
-
|
|
270
|
+
@@index([tabId, order, createdAt])
|
|
180
271
|
}
|
|
181
272
|
|
|
182
273
|
model ViewSectionTag {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
274
|
+
id Int @id @default(autoincrement())
|
|
275
|
+
sectionId Int
|
|
276
|
+
section ViewSection @relation(fields: [sectionId], references: [id], onDelete: Cascade)
|
|
277
|
+
name String
|
|
278
|
+
order Int @default(0)
|
|
279
|
+
createdAt DateTime @default(now())
|
|
280
|
+
updatedAt DateTime @updatedAt
|
|
190
281
|
|
|
191
|
-
|
|
282
|
+
@@index([sectionId, order, createdAt])
|
|
192
283
|
}
|
|
193
284
|
|
|
194
285
|
enum ViewTagMatchMode {
|
|
195
|
-
|
|
196
|
-
|
|
286
|
+
and
|
|
287
|
+
or
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
enum ViewDisplayType {
|
|
291
|
+
list
|
|
292
|
+
calendar
|
|
197
293
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as r}from"./note-vendor-B0t5F04o.js";import{p as n,T as l}from"./index-B4l2UvuC.js";import{a as e}from"./graph-vendor-CUxe67Lr.js";const o=new Map([["bold",e.createElement(e.Fragment,null,e.createElement("path",{d:"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z"}))],["duotone",e.createElement(e.Fragment,null,e.createElement("path",{d:"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z",opacity:"0.2"}),e.createElement("path",{d:"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z"}))],["fill",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z"}))],["light",e.createElement(e.Fragment,null,e.createElement("path",{d:"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z"}))],["regular",e.createElement(e.Fragment,null,e.createElement("path",{d:"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z"}))],["thin",e.createElement(e.Fragment,null,e.createElement("path",{d:"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z"}))]]),m=e.forwardRef((a,t)=>e.createElement(n,{ref:t,...a,weights:o}));m.displayName="InfoIcon";const c=m,d=({children:a,className:t=""})=>r.jsxs("div",{className:`flex items-center gap-2.5 rounded-[12px] border border-border-subtle bg-hover-subtle/50 px-4 py-3 ${t}`,children:[r.jsx(c,{className:"h-4 w-4 shrink-0 text-fg-tertiary"}),r.jsx(l,{as:"div",variant:"meta",weight:"medium",tone:"secondary",children:a})]});export{d as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./note-vendor-B0t5F04o.js";import{$ as _,P as C,a2 as U,i as G,a3 as Y,a4 as J,a5 as X,a6 as ee,q as ne,N as te,F as re,T as N,a7 as oe}from"./index-B4l2UvuC.js";import{a as i,F as se}from"./graph-vendor-CUxe67Lr.js";import"./note-core-GgFcksAF.js";const ae=s=>{let a=0;for(let r=0;r<s.length;r++)a+=s.charCodeAt(r);return a},ie={background:"#f4f6f8",nodeHub:"#2c2f36",nodeSelected:"#111318",nodeConnected:"#636b76",nodeDefault:["#d6dbe1","#c8ced6","#b7bec7","#a7afb9"],nodeDimmed:["rgba(214,219,225,0.28)","rgba(200,206,214,0.24)","rgba(183,190,199,0.24)","rgba(167,175,185,0.2)"],nodeHubDimmed:"rgba(44,47,54,0.16)",nodeStroke:"#eef1f4",nodeSelectedStroke:"#a6b0bc",labelBackground:"rgba(246,248,250,0.92)",labelText:"#222831",labelFontFamily:"Pretendard Variable, Pretendard, system-ui, sans-serif",linkIdle:"rgba(99, 107, 117, 0.34)",linkConnected:"#68717c",linkDimmed:"rgba(127, 136, 146, 0.12)",legendHub:"#2c2f36"},le={background:"#121316",nodeHub:"#d6dce3",nodeSelected:"#eef1f5",nodeConnected:"#9099a4",nodeDefault:["#343a43","#2d333c","#262c35","#20262f"],nodeDimmed:["rgba(52,58,67,0.28)","rgba(45,51,60,0.24)","rgba(38,44,53,0.22)","rgba(32,38,47,0.2)"],nodeHubDimmed:"rgba(214,220,227,0.16)",nodeStroke:"#171c23",nodeSelectedStroke:"#7f8a97",labelBackground:"rgba(16,18,22,0.9)",labelText:"#eef2f6",labelFontFamily:"Pretendard Variable, Pretendard, system-ui, sans-serif",linkIdle:"rgba(118, 127, 138, 0.42)",linkConnected:"#a2abb6",linkDimmed:"rgba(118, 127, 138, 0.1)",legendHub:"#d6dce3"};function D(s){return s==="dark"?le:ie}function de(s,a){const r=D(s),{connections:g,colorIndex:y,selectedNodeId:d,nodeId:b,isConnected:c}=a,h=d===b;return d!==null&&!h&&!c?g>3?r.nodeHubDimmed:r.nodeDimmed[y%r.nodeDimmed.length]:h?r.nodeSelected:c?r.nodeConnected:g>3?r.nodeHub:r.nodeDefault[y%r.nodeDefault.length]}function ce(s,a){const r=D(s);return a.selectedNodeId!==null&&!a.isConnected?r.linkDimmed:a.isConnected?r.linkConnected:r.linkIdle}function ue(s,a){const r=D(s);return`${a.emphasize?"700":"400"} ${a.fontSize}px ${r.labelFontFamily}`}function z(s){return s<=1?3.5:s<=3?4.5:s<=6?5.5:Math.min(7,5.5+Math.sqrt(s)*.5)}const fe=t.jsx(C,{title:"Knowledge Graph",description:t.jsx(G,{width:184,height:16,className:"rounded-full"}),children:t.jsx("div",{className:"flex h-[600px] items-center justify-center",children:t.jsx(G,{width:"100%",height:"100%"})})});function he(){const s=Y(),a=i.useRef(null),r=i.useRef(null),[g,y]=i.useState({width:800,height:600}),[d,b]=i.useState(null),{theme:c}=J(e=>e),h=D(c),v=i.useRef(h);v.current=h;const{data:w}=X({queryKey:ne.notes.graph(),queryFn:async()=>{const e=await ee();if(e.type==="error")throw e;return e.noteGraph}}),l=i.useMemo(()=>{if(w.nodes.length===0)return null;const e=w.nodes.filter(o=>o.connections>0);if(e.length===0)return null;const n=new Set(e.map(o=>o.id));return{nodes:e,links:w.links.filter(o=>n.has(o.source)&&n.has(o.target))}},[w]);i.useEffect(()=>{if(!l)return;const e=()=>{if(!a.current)return;const n=a.current.getBoundingClientRect();y({width:n.width,height:Math.max(600,window.innerHeight-150)})};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[l]),i.useEffect(()=>{if(!l||!r.current)return;const e=window.setTimeout(()=>{r.current?.zoomToFit(400,50)},500);return()=>window.clearTimeout(e)},[l]);const R=i.useRef(d);R.current=d;const B=i.useCallback(e=>{if(R.current===e.id){s({to:te,params:{id:e.id}});return}b(e.id)},[s]),L=i.useCallback(()=>{b(null)},[]),K=i.useCallback(e=>{a.current&&(a.current.style.cursor=e?"pointer":"default")},[]),I=i.useRef(!1),$=i.useCallback(()=>{I.current||(I.current=!0,r.current?.enableZoomInteraction(!1))},[]),q=i.useCallback(()=>{I.current=!1,r.current?.enableZoomInteraction(!0)},[]),H=i.useRef(new Map),A=i.useMemo(()=>{const e=new Map;if(l)for(const n of l.links)e.has(n.source)||e.set(n.source,new Set),e.has(n.target)||e.set(n.target,new Set),e.get(n.source)?.add(n.target),e.get(n.target)?.add(n.source);return e},[l]);H.current=A;const O=i.useCallback((e,n,o)=>{const u=v.current,f=d,p=H.current,m=z(e.connections),x=e.x||0,S=e.y||0,k=f===e.id,T=f?p.get(f)?.has(e.id)??!1:!1,V=f!==null&&!k&&!T,W=ae(e.id);if(n.beginPath(),n.arc(x,S,m,0,Math.PI*2),n.fillStyle=de(c,{connections:e.connections,colorIndex:W,selectedNodeId:f,nodeId:e.id,isConnected:T}),n.fill(),V)return;n.strokeStyle=u.nodeStroke,n.lineWidth=(k?2:1)/o,n.stroke(),k&&(n.beginPath(),n.arc(x,S,m+2/o,0,Math.PI*2),n.strokeStyle=u.nodeSelectedStroke,n.lineWidth=1.5/o,n.stroke());const Q=T&&e.connections>=4;if(k||Q||o>2.5){const P=e.title||"Untitled",E=Math.max(10/o,2.5);n.font=ue(c,{fontSize:E,emphasize:k}),n.textAlign="center",n.textBaseline="top";const M=n.measureText(P).width,j=2/o,F=S+m+3/o;n.fillStyle=u.labelBackground,n.fillRect(x-M/2-j,F,M+j*2,E+j*2),n.fillStyle=u.labelText,n.fillText(P,x,F+j)}},[d,c]),Z=i.useCallback((e,n,o)=>{const u=d,f=e.source,p=e.target,m=u?f.id===u||p.id===u:!1;n.beginPath(),n.moveTo(f.x||0,f.y||0),n.lineTo(p.x||0,p.y||0),n.strokeStyle=ce(c,{selectedNodeId:u,isConnected:m}),n.lineWidth=m?2/o:.5/o,n.stroke()},[d,c]);return l?t.jsx(C,{title:"Knowledge Graph",description:`${l.nodes.length} linked notes, ${l.links.length} connections`,children:t.jsxs("div",{ref:a,className:"surface-base graph-canvas relative overflow-hidden",style:{"--graph-bg":h.background},children:[d&&(()=>{const e=l.nodes.find(n=>n.id===d);return e?t.jsxs("div",{className:"surface-floating absolute top-3 left-3 z-10 flex items-center gap-2 px-3 py-2",children:[t.jsx(N,{as:"span",variant:"meta",weight:"semibold",truncate:!0,className:"max-w-48",children:e.title}),t.jsxs(N,{as:"span",variant:"label",tone:"tertiary",children:[e.connections," links"]}),t.jsx("button",{type:"button",onClick:()=>b(null),className:"focus-ring-soft ml-1 flex h-6 w-6 cursor-pointer items-center justify-center rounded-[8px] text-fg-tertiary transition-colors hover:bg-hover-subtle hover:text-fg-default","aria-label":"Deselect node",children:t.jsx(oe,{className:"h-3.5 w-3.5"})})]}):null})(),t.jsxs("div",{className:"surface-floating absolute top-3 right-3 z-10 flex flex-col gap-1.5 px-3 py-2.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"legend-dot h-2.5 w-2.5 shrink-0 rounded-full",style:{"--legend-color":h.legendHub}}),t.jsx(N,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:"Hub notes (4+ connections)"})]}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"legend-dot h-2.5 w-2.5 shrink-0 rounded-full",style:{"--legend-color":h.nodeConnected}}),t.jsx(N,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:"Connected notes"})]})]}),t.jsx(se,{ref:r,graphData:l,width:g.width,height:g.height,nodeId:"id",nodeLabel:"",nodeCanvasObject:O,nodePointerAreaPaint:(e,n,o)=>{o.beginPath(),o.arc(e.x||0,e.y||0,Math.max(z(e.connections)+4,10),0,2*Math.PI),o.fillStyle=n,o.fill()},linkCanvasObject:Z,linkCanvasObjectMode:()=>"replace",linkDirectionalParticles:0,onNodeClick:B,onNodeHover:K,onBackgroundClick:L,onNodeDrag:$,onNodeDragEnd:q,warmupTicks:30,cooldownTicks:80,d3AlphaDecay:.05,d3VelocityDecay:.3,enableZoomInteraction:!0,enablePanInteraction:!0,minZoom:.3,maxZoom:5})]})}):t.jsx(C,{title:"Knowledge Graph",description:"0 linked notes, 0 connections",children:t.jsx(re,{title:"No constellations yet",description:"Link your notes together and watch your own starry sky unfold"})})}function ke(){return t.jsx(_,{fallback:fe,errorTitle:"Failed to load graph",errorDescription:"Retry loading your linked note constellation",renderError:({error:s,retry:a})=>t.jsx(C,{title:"Knowledge Graph",children:t.jsx(U,{title:"Failed to load graph",description:"Retry loading your linked note constellation",error:s,onRetry:a})}),children:t.jsx(he,{})})}export{ke as default};
|