ocean-brain 0.3.3 → 0.3.4

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.
Files changed (34) hide show
  1. package/dist/mcp.js +151 -37
  2. package/package.json +1 -1
  3. package/server/client/dist/assets/{Calendar-DyXzs5M3.js → Calendar-Kjy1PX6L.js} +1 -1
  4. package/server/client/dist/assets/{Graph-C8K4PJOn.js → Graph-Bl5K2qUw.js} +1 -1
  5. package/server/client/dist/assets/{Image.es-CFTbON7k.js → Image.es-BQfyKc2-.js} +1 -1
  6. package/server/client/dist/assets/{ModalActionRow-Hg6MY61u.js → ModalActionRow-DyOb58KJ.js} +1 -1
  7. package/server/client/dist/assets/Note-BfGma2Qc.css +1 -0
  8. package/server/client/dist/assets/Note-DN_ko2M3.js +1 -0
  9. package/server/client/dist/assets/{Reminders-jFhljND4.js → Reminders-BK-Uv9Ps.js} +1 -1
  10. package/server/client/dist/assets/{Search-X6QIR_m2.js → Search-ClHeWvmI.js} +1 -1
  11. package/server/client/dist/assets/{SurfaceCard-BV6y4bCo.js → SurfaceCard-nZNf9lyE.js} +1 -1
  12. package/server/client/dist/assets/{Tag-Ba2Dw4gH.js → Tag-Dph4V_kl.js} +1 -1
  13. package/server/client/dist/assets/{TagNotes-BRJv6sDI.js → TagNotes-CxP5qHZj.js} +1 -1
  14. package/server/client/dist/assets/{Trash.es-CPtRLE0y.js → Trash.es-BGoN5q9L.js} +1 -1
  15. package/server/client/dist/assets/{image.api-Dsrx9S-G.js → image.api-0mMkElZk.js} +1 -1
  16. package/server/client/dist/assets/{index-DpqKngJz.js → index-6lIw6jYW.js} +1 -1
  17. package/server/client/dist/assets/{index-BglnLSet.js → index-Ba2XPRI8.js} +30 -30
  18. package/server/client/dist/assets/{index-CD2bFEqK.css → index-DL7pUwq2.css} +1 -1
  19. package/server/client/dist/assets/manage-image-Br_kKxbb.js +1 -0
  20. package/server/client/dist/assets/{manage-image-detail-Dv3xofpe.js → manage-image-detail-9DzqbiqI.js} +1 -1
  21. package/server/client/dist/assets/{mcp-BijQkpfY.js → mcp-C_So91eX.js} +1 -1
  22. package/server/client/dist/assets/{placeholder-MNsco0AT.js → placeholder-i-uNe71U.js} +2 -2
  23. package/server/client/dist/assets/{trash-CiFJm_PK.js → trash-Cg3nJ1m5.js} +1 -1
  24. package/server/client/dist/assets/{useReminderMutate-yJak8FzP.js → useReminderMutate-tNMwwRnx.js} +1 -1
  25. package/server/client/dist/index.html +2 -2
  26. package/server/dist/modules/blocknote.js +91 -19
  27. package/server/dist/modules/blocknote.js.map +1 -1
  28. package/server/dist/modules/note-tag-filter.js +22 -0
  29. package/server/dist/modules/note-tag-filter.js.map +1 -0
  30. package/server/dist/schema/note/index.js +31 -0
  31. package/server/dist/schema/note/index.js.map +1 -1
  32. package/server/client/dist/assets/Note-BbgZvrC3.js +0 -1
  33. package/server/client/dist/assets/Note-PEevDKBh.css +0 -1
  34. package/server/client/dist/assets/manage-image-C6Y_0M5H.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/schema/note/index.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport type { Request } from 'express';\n\nimport models from '~/models.js';\nimport { gql } from '~/modules/graphql.js';\nimport {\n getNoteCleanupPreview,\n listNoteCleanupCandidates\n} from '~/modules/note-cleanup.js';\nimport {\n captureNoteBaseline,\n createSnapshotMetaFromUserAgent,\n listNoteSnapshots,\n restoreNoteSnapshot\n} from '~/modules/note-snapshot.js';\nimport {\n listTrashedNotes,\n restoreTrashedNoteById,\n trashNoteById\n} from '~/modules/note-trash.js';\n\nimport type { Note, Prisma } from '~/models.js';\nimport type { Pagination, SearchFilter, NoteInput } from '~/types/index.js';\n\nexport const noteType = gql`\n input PaginationInput {\n limit: Int!\n offset: Int!\n }\n\n input SearchFilterInput {\n query: String!\n sortBy: String\n sortOrder: String\n pinnedFirst: Boolean\n }\n\n input DateRangeInput {\n start: String!\n end: String!\n }\n\n enum NoteLayout {\n narrow\n wide\n full\n }\n\n input NoteInput {\n title: String\n content: String\n layout: NoteLayout\n }\n\n input NoteOrderInput {\n id: ID!\n order: Int!\n }\n\n type Tag {\n id: ID!\n name: String!\n createdAt: String!\n updatedAt: String!\n }\n\n type Note {\n id: ID!\n title: String!\n content: String!\n contentAsMarkdown: String!\n createdAt: String!\n updatedAt: String!\n pinned: Boolean!\n order: Int!\n layout: NoteLayout!\n tags: [Tag!]!\n }\n\n type Notes {\n totalCount: Int!\n notes: [Note!]!\n }\n\n type NoteCleanupBackReference {\n id: ID!\n title: String!\n }\n\n type NoteCleanupCandidate {\n id: ID!\n title: String!\n updatedAt: String!\n pinned: Boolean!\n tagNames: [String!]!\n reminderCount: Int!\n backReferenceCount: Int!\n matchedTerms: [String!]!\n reasons: [String!]!\n requiresForce: Boolean!\n forceReasons: [String!]!\n }\n\n type NoteCleanupPreview {\n id: ID!\n title: String!\n updatedAt: String!\n pinned: Boolean!\n tagNames: [String!]!\n reminderCount: Int!\n backReferences: [NoteCleanupBackReference!]!\n orphanedTagNames: [String!]!\n requiresForce: Boolean!\n forceReasons: [String!]!\n }\n\n type NoteSnapshotMeta {\n entrypoint: String\n label: String\n }\n\n type NoteSnapshot {\n id: ID!\n title: String!\n createdAt: String!\n meta: NoteSnapshotMeta!\n }\n\n type DeletedNote {\n id: ID!\n title: String!\n createdAt: String!\n updatedAt: String!\n deletedAt: String!\n pinned: Boolean!\n order: Int!\n layout: NoteLayout!\n tagNames: [String!]!\n }\n\n type DeletedNotes {\n totalCount: Int!\n notes: [DeletedNote!]!\n }\n`;\n\nexport const noteQuery = gql`\n type GraphNode {\n id: ID!\n title: String!\n connections: Int!\n }\n\n type GraphLink {\n source: ID!\n target: ID!\n }\n\n type NoteGraph {\n nodes: [GraphNode!]!\n links: [GraphLink!]!\n }\n\n type Query {\n allNotes(searchFilter: SearchFilterInput, pagination: PaginationInput): Notes!\n tagNotes(searchFilter: SearchFilterInput, pagination: PaginationInput): Notes!\n notesInDateRange(dateRange: DateRangeInput): [Note!]!\n pinnedNotes: [Note!]!\n imageNotes(src: String!): [Note!]!\n backReferences(id: ID!): [Note]!\n note(id: ID!): Note!\n noteCleanupCandidates(query: String, pagination: PaginationInput): [NoteCleanupCandidate!]!\n noteCleanupPreview(id: ID!): NoteCleanupPreview\n noteSnapshots(id: ID!, limit: Int): [NoteSnapshot!]!\n trashedNotes(pagination: PaginationInput): DeletedNotes!\n noteGraph: NoteGraph!\n }\n`;\n\nexport const noteMutation = gql`\n type Mutation {\n createNote(note: NoteInput!): Note!\n updateNote(id: ID!, note: NoteInput!, editSessionId: String): Note!\n deleteNote(id: ID!): Boolean!\n restoreNoteSnapshot(id: ID!): Note!\n restoreTrashedNote(id: ID!): Note!\n pinNote(id: ID!, pinned: Boolean!): Note!\n reorderNotes(notes: [NoteOrderInput!]!): [Note!]!\n }\n`;\n\nexport const noteTypeDefs = `\n ${noteType}\n ${noteQuery}\n ${noteMutation}\n`;\n\ninterface BlockNote<T = unknown> {\n id: string;\n type: string;\n props: T;\n content?: BlockNote<T>[];\n children?: BlockNote<T>[];\n}\n\nconst extractBlocksByType = <T>(type: string, dataArray: BlockNote[]): BlockNote<T>[] => {\n let result: BlockNote[] = [];\n\n for (const data of dataArray) {\n if (data.type === type) {\n result.push(data);\n }\n\n if (data.children && data.children.length > 0) {\n result = result.concat(extractBlocksByType(type, data.children));\n }\n\n if (data.content && data.content.length > 0) {\n for (const contentItem of data.content) {\n if (contentItem.type === type) {\n result.push(contentItem);\n }\n }\n }\n }\n\n return result as unknown as BlockNote<T>[];\n};\n\nexport const noteResolvers: IResolvers = {\n Query: {\n allNotes: async (_, {\n searchFilter,\n pagination\n }: {\n searchFilter: SearchFilter;\n pagination: Pagination;\n }) => {\n const queryItems = searchFilter.query.split(' ');\n const included = queryItems\n .filter((item: string) => !item.startsWith('-'))\n .map((word: string) => `%${word}%`);\n const excluded = queryItems\n .filter((item: string) => item.startsWith('-'))\n .map((item: string) => item.slice(1))\n .map((word: string) => `%${word}%`);\n\n const where: Prisma.NoteWhereInput = {\n AND: [\n ...included.map((keyword: string) => ({\n OR: [\n { title: { contains: keyword } },\n { content: { contains: keyword } }\n ]\n })),\n ...excluded.map((keyword: string) => ({\n NOT: {\n OR: [\n { title: { contains: keyword } },\n { content: { contains: keyword } }\n ]\n }\n }))\n ]\n };\n\n const sortBy = searchFilter.sortBy || 'updatedAt';\n const sortOrder = searchFilter.sortOrder || 'desc';\n const pinnedFirst = searchFilter.pinnedFirst || false;\n\n const orderBy: Prisma.NoteOrderByWithRelationInput[] = [];\n\n if (pinnedFirst) {\n orderBy.push({ pinned: 'desc' });\n }\n\n if (sortBy === 'createdAt') {\n orderBy.push({ createdAt: sortOrder as 'asc' | 'desc' });\n } else {\n orderBy.push({ updatedAt: sortOrder as 'asc' | 'desc' });\n }\n\n const $notes = models.note.findMany({\n orderBy,\n where,\n take: Number(pagination.limit),\n skip: Number(pagination.offset)\n });\n return {\n totalCount: models.note.count({ where }),\n notes: $notes\n };\n },\n notesInDateRange: async (_, { dateRange }: {\n dateRange: {\n start: string;\n end: string;\n };\n }) => {\n const where: Prisma.NoteWhereInput = {\n OR: [\n {\n updatedAt: {\n gte: new Date(dateRange.start),\n lte: new Date(dateRange.end)\n }\n },\n {\n createdAt: {\n gte: new Date(dateRange.start),\n lte: new Date(dateRange.end)\n }\n }\n ]\n };\n\n const $notes = await models.note.findMany({\n orderBy: { createdAt: 'asc' },\n where\n });\n\n return $notes;\n },\n tagNotes: async (_, {\n searchFilter,\n pagination\n }: {\n searchFilter: SearchFilter;\n pagination: Pagination;\n }) => {\n const where: Prisma.NoteWhereInput = { tags: { some: { id: Number(searchFilter.query) } } };\n\n const $notes = models.note.findMany({\n orderBy: { updatedAt: 'desc' },\n where,\n take: Number(pagination.limit),\n skip: Number(pagination.offset)\n });\n return {\n totalCount: models.note.count({ where }),\n notes: $notes\n };\n },\n pinnedNotes: async () => models.note.findMany({\n orderBy: [\n { order: 'asc' },\n { updatedAt: 'desc' }\n ],\n where: { pinned: true }\n }),\n imageNotes: async (_, { src }) => models.note.findMany({\n orderBy: { updatedAt: 'desc' },\n where: { content: { contains: src } }\n }),\n backReferences: async (_, { id }: Note) => {\n return models.note.findMany({\n orderBy: [\n { pinned: 'desc' },\n { updatedAt: 'desc' }\n ],\n where: { content: { contains: `reference\",\"props\":{\"id\":\"${id}\"` } }\n });\n },\n note: async (_, { id }: Note) => {\n const $note = await models.note.findUnique({ where: { id: Number(id) } });\n if (!$note) {\n throw 'NOT FOUND';\n }\n if ($note.content) {\n const blocks = extractBlocksByType<{\n id: string;\n title: string;\n }>('reference', JSON.parse($note.content));\n if (blocks.length > 0) {\n const referenceIds = blocks.map(block => Number(block.props.id));\n const $references = await models.note.findMany({ where: { id: { in: referenceIds } } });\n const newContent = $references.reduce<string>((acc: string, $reference: Note) => {\n const reference = blocks.find(block => Number(block.props.id) === $reference.id);\n if (reference && reference.props.title !== $reference.title) {\n return acc.replace(\n `reference\",\"props\":{\"id\":\"${reference.props.id}\",\"title\":\"${reference.props.title}\"`,\n `reference\",\"props\":{\"id\":\"${$reference.id}\",\"title\":\"${$reference.title}\"`\n );\n }\n return acc;\n }, $note.content);\n if (newContent !== $note.content) {\n try {\n JSON.parse(newContent);\n return await models.note.update({\n where: { id: $note.id },\n data: { content: newContent }\n });\n } catch {\n // Keep the stored content unchanged if the synchronized payload becomes invalid.\n }\n }\n }\n }\n return $note;\n },\n noteCleanupCandidates: async (_, {\n query,\n pagination = {\n limit: 20,\n offset: 0\n }\n }: {\n query?: string;\n pagination: Pagination;\n }) => {\n const result = await listNoteCleanupCandidates({\n keywords: query\n ? query.split(/[,\\s]+/).map((keyword) => keyword.trim()).filter(Boolean)\n : undefined,\n limit: Number(pagination.limit),\n offset: Number(pagination.offset)\n });\n\n return result.notes;\n },\n noteCleanupPreview: async (_, { id }: { id: string }) => {\n return getNoteCleanupPreview(Number(id));\n },\n noteSnapshots: async (_, {\n id,\n limit = 5\n }: {\n id: string;\n limit?: number;\n }) => {\n return listNoteSnapshots(Number(id), Number(limit));\n },\n trashedNotes: async (_, {\n pagination = {\n limit: 25,\n offset: 0\n }\n }: {\n pagination: Pagination;\n }) => {\n return listTrashedNotes({\n limit: Number(pagination.limit),\n offset: Number(pagination.offset)\n });\n },\n noteGraph: async () => {\n const $notes = await models.note.findMany({\n select: {\n id: true,\n title: true,\n content: true\n }\n });\n\n const nodes: Array<{ id: string; title: string; connections: number }> = [];\n const links: Array<{ source: string; target: string }> = [];\n const connectionCount: Record<string, number> = {};\n const linkSet = new Set<string>();\n\n // Extract all references from each note\n for (const $note of $notes) {\n if ($note.content) {\n try {\n const blocks = extractBlocksByType<{ id: string }>('reference', JSON.parse($note.content));\n for (const block of blocks) {\n const targetId = block.props.id;\n // Avoid self-references and duplicate links\n if (targetId && String($note.id) !== targetId) {\n const linkKey = `${$note.id}-${targetId}`;\n const reverseLinkKey = `${targetId}-${$note.id}`;\n if (!linkSet.has(linkKey) && !linkSet.has(reverseLinkKey)) {\n linkSet.add(linkKey);\n links.push({\n source: String($note.id),\n target: targetId\n });\n // Count connections for both nodes\n connectionCount[String($note.id)] = (connectionCount[String($note.id)] || 0) + 1;\n connectionCount[targetId] = (connectionCount[targetId] || 0) + 1;\n }\n }\n }\n } catch {\n // Skip notes with invalid JSON content\n }\n }\n }\n\n // Build nodes array with connection counts\n for (const $note of $notes) {\n nodes.push({\n id: String($note.id),\n title: $note.title || 'Untitled',\n connections: connectionCount[String($note.id)] || 0\n });\n }\n\n return {\n nodes,\n links\n };\n }\n },\n Mutation: {\n createNote: async (_, { note }: { note: NoteInput }) => {\n const PLACEHOLDER_PREFIX = '{%';\n const PLACEHOLDER_SUFFIX = '%}';\n\n const replacePlaceholder = async (content: string) => {\n const placeholders = content.matchAll(new RegExp(`${PLACEHOLDER_PREFIX}([^}]+)${PLACEHOLDER_SUFFIX}`, 'g'));\n const $placeholders = await models.placeholder.findMany({\n select: {\n template: true,\n replacement: true\n },\n where: { template: { in: Array.from(new Set(Array.from(placeholders, p => p[1]))) } }\n });\n\n for (const $placeholder of $placeholders) {\n content = content.replace(new RegExp(`${PLACEHOLDER_PREFIX}${$placeholder.template}${PLACEHOLDER_SUFFIX}`, 'g'), $placeholder.replacement);\n }\n return content;\n };\n\n const replacedTitle = await replacePlaceholder(note.title);\n const replacedContent = await replacePlaceholder(note.content);\n\n const $note = await models.note.create({\n data: {\n title: replacedTitle,\n content: replacedContent,\n ...(note.layout && { layout: note.layout })\n }\n });\n if (note.content) {\n const blocks = extractBlocksByType<{ id: string }>(\n 'tag',\n JSON.parse(note.content)\n );\n\n return await models.note.update({\n where: { id: $note.id },\n data: { tags: { set: blocks.map(block => ({ id: Number(block.props.id) })) } }\n });\n }\n\n return $note;\n },\n updateNote: async (_, {\n id,\n note,\n editSessionId\n }: {\n id: number;\n note: NoteInput;\n editSessionId?: string;\n }, context: {\n req?: Request;\n }) => {\n const userAgentHeader = context.req?.headers['user-agent'];\n const userAgent = Array.isArray(userAgentHeader) ? userAgentHeader[0] : userAgentHeader;\n let blocks: BlockNote<{ id: string }>[] = [];\n\n if (note.content) {\n blocks = extractBlocksByType<{ id: string }>(\n 'tag',\n JSON.parse(note.content)\n );\n }\n\n await captureNoteBaseline({\n noteId: Number(id),\n ...(editSessionId ? { editSessionId } : {}),\n meta: createSnapshotMetaFromUserAgent(userAgent)\n });\n\n const $note = await models.note.update({\n where: { id: Number(id) },\n data: {\n ...note,\n ...(note.content ? { tags: { set: blocks.map(block => ({ id: Number(block.props.id) })) } } : {})\n }\n });\n return $note;\n },\n deleteNote: async (_, { id }: Note) => {\n const trashedNote = await trashNoteById(Number(id));\n\n if (!trashedNote) {\n throw 'NOT FOUND';\n }\n\n return true;\n },\n restoreNoteSnapshot: async (_, { id }: { id: string }, context: {\n req?: Request;\n }) => {\n const userAgentHeader = context.req?.headers['user-agent'];\n const userAgent = Array.isArray(userAgentHeader) ? userAgentHeader[0] : userAgentHeader;\n const note = await restoreNoteSnapshot(Number(id), { meta: createSnapshotMetaFromUserAgent(userAgent) });\n\n if (!note) {\n throw 'NOT FOUND';\n }\n\n return note;\n },\n restoreTrashedNote: async (_, { id }: { id: string }) => {\n const note = await restoreTrashedNoteById(Number(id));\n\n if (!note) {\n throw 'NOT FOUND';\n }\n\n return note;\n },\n pinNote: (_, { id, pinned }: Note) => models.note.update({\n where: { id: Number(id) },\n data: { pinned: Boolean(pinned) }\n }),\n reorderNotes: async (_, { notes }: { notes: Array<{ id: string; order: number }> }) => {\n const updatePromises = notes.map(({ id, order }) =>\n models.note.update({\n where: { id: Number(id) },\n data: { order }\n })\n );\n return await Promise.all(updatePromises);\n }\n },\n Note: {\n tags: async (note: Note) => await models.tag.findMany({ where: { notes: { some: { id: note.id } } } }),\n contentAsMarkdown: async (note: Note) => {\n const { blocksToMarkdown } = await import('~/modules/blocknote.js');\n return blocksToMarkdown(note.content);\n }\n }\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/schema/note/index.ts"],"sourcesContent":["import type { IResolvers } from '@graphql-tools/utils';\nimport type { Request } from 'express';\n\nimport models from '~/models.js';\nimport { gql } from '~/modules/graphql.js';\nimport {\n getNoteCleanupPreview,\n listNoteCleanupCandidates\n} from '~/modules/note-cleanup.js';\nimport {\n captureNoteBaseline,\n createSnapshotMetaFromUserAgent,\n listNoteSnapshots,\n restoreNoteSnapshot\n} from '~/modules/note-snapshot.js';\nimport {\n listTrashedNotes,\n restoreTrashedNoteById,\n trashNoteById\n} from '~/modules/note-trash.js';\nimport { buildNoteTagNamesWhere, normalizeNoteTagNames, type NoteTagMatchMode } from '~/modules/note-tag-filter.js';\n\nimport type { Note, Prisma } from '~/models.js';\nimport type { Pagination, SearchFilter, NoteInput } from '~/types/index.js';\n\nexport const noteType = gql`\n input PaginationInput {\n limit: Int!\n offset: Int!\n }\n\n input SearchFilterInput {\n query: String!\n sortBy: String\n sortOrder: String\n pinnedFirst: Boolean\n }\n\n input DateRangeInput {\n start: String!\n end: String!\n }\n\n enum NoteLayout {\n narrow\n wide\n full\n }\n\n enum TagMatchMode {\n and\n or\n }\n\n input NoteInput {\n title: String\n content: String\n layout: NoteLayout\n }\n\n input NoteOrderInput {\n id: ID!\n order: Int!\n }\n\n type Tag {\n id: ID!\n name: String!\n createdAt: String!\n updatedAt: String!\n }\n\n type Note {\n id: ID!\n title: String!\n content: String!\n contentAsMarkdown: String!\n createdAt: String!\n updatedAt: String!\n pinned: Boolean!\n order: Int!\n layout: NoteLayout!\n tags: [Tag!]!\n }\n\n type Notes {\n totalCount: Int!\n notes: [Note!]!\n }\n\n type NoteCleanupBackReference {\n id: ID!\n title: String!\n }\n\n type NoteCleanupCandidate {\n id: ID!\n title: String!\n updatedAt: String!\n pinned: Boolean!\n tagNames: [String!]!\n reminderCount: Int!\n backReferenceCount: Int!\n matchedTerms: [String!]!\n reasons: [String!]!\n requiresForce: Boolean!\n forceReasons: [String!]!\n }\n\n type NoteCleanupPreview {\n id: ID!\n title: String!\n updatedAt: String!\n pinned: Boolean!\n tagNames: [String!]!\n reminderCount: Int!\n backReferences: [NoteCleanupBackReference!]!\n orphanedTagNames: [String!]!\n requiresForce: Boolean!\n forceReasons: [String!]!\n }\n\n type NoteSnapshotMeta {\n entrypoint: String\n label: String\n }\n\n type NoteSnapshot {\n id: ID!\n title: String!\n createdAt: String!\n meta: NoteSnapshotMeta!\n }\n\n type DeletedNote {\n id: ID!\n title: String!\n createdAt: String!\n updatedAt: String!\n deletedAt: String!\n pinned: Boolean!\n order: Int!\n layout: NoteLayout!\n tagNames: [String!]!\n }\n\n type DeletedNotes {\n totalCount: Int!\n notes: [DeletedNote!]!\n }\n`;\n\nexport const noteQuery = gql`\n type GraphNode {\n id: ID!\n title: String!\n connections: Int!\n }\n\n type GraphLink {\n source: ID!\n target: ID!\n }\n\n type NoteGraph {\n nodes: [GraphNode!]!\n links: [GraphLink!]!\n }\n\n type Query {\n allNotes(searchFilter: SearchFilterInput, pagination: PaginationInput): Notes!\n tagNotes(searchFilter: SearchFilterInput, pagination: PaginationInput): Notes!\n notesByTagNames(tagNames: [String!]!, mode: TagMatchMode!, pagination: PaginationInput): Notes!\n notesInDateRange(dateRange: DateRangeInput): [Note!]!\n pinnedNotes: [Note!]!\n imageNotes(src: String!): [Note!]!\n backReferences(id: ID!): [Note]!\n note(id: ID!): Note!\n noteCleanupCandidates(query: String, pagination: PaginationInput): [NoteCleanupCandidate!]!\n noteCleanupPreview(id: ID!): NoteCleanupPreview\n noteSnapshots(id: ID!, limit: Int): [NoteSnapshot!]!\n trashedNotes(pagination: PaginationInput): DeletedNotes!\n noteGraph: NoteGraph!\n }\n`;\n\nexport const noteMutation = gql`\n type Mutation {\n createNote(note: NoteInput!): Note!\n updateNote(id: ID!, note: NoteInput!, editSessionId: String): Note!\n deleteNote(id: ID!): Boolean!\n restoreNoteSnapshot(id: ID!): Note!\n restoreTrashedNote(id: ID!): Note!\n pinNote(id: ID!, pinned: Boolean!): Note!\n reorderNotes(notes: [NoteOrderInput!]!): [Note!]!\n }\n`;\n\nexport const noteTypeDefs = `\n ${noteType}\n ${noteQuery}\n ${noteMutation}\n`;\n\ninterface BlockNote<T = unknown> {\n id: string;\n type: string;\n props: T;\n content?: BlockNote<T>[];\n children?: BlockNote<T>[];\n}\n\nconst extractBlocksByType = <T>(type: string, dataArray: BlockNote[]): BlockNote<T>[] => {\n let result: BlockNote[] = [];\n\n for (const data of dataArray) {\n if (data.type === type) {\n result.push(data);\n }\n\n if (data.children && data.children.length > 0) {\n result = result.concat(extractBlocksByType(type, data.children));\n }\n\n if (data.content && data.content.length > 0) {\n for (const contentItem of data.content) {\n if (contentItem.type === type) {\n result.push(contentItem);\n }\n }\n }\n }\n\n return result as unknown as BlockNote<T>[];\n};\n\nexport const noteResolvers: IResolvers = {\n Query: {\n allNotes: async (_, {\n searchFilter,\n pagination\n }: {\n searchFilter: SearchFilter;\n pagination: Pagination;\n }) => {\n const queryItems = searchFilter.query.split(' ');\n const included = queryItems\n .filter((item: string) => !item.startsWith('-'))\n .map((word: string) => `%${word}%`);\n const excluded = queryItems\n .filter((item: string) => item.startsWith('-'))\n .map((item: string) => item.slice(1))\n .map((word: string) => `%${word}%`);\n\n const where: Prisma.NoteWhereInput = {\n AND: [\n ...included.map((keyword: string) => ({\n OR: [\n { title: { contains: keyword } },\n { content: { contains: keyword } }\n ]\n })),\n ...excluded.map((keyword: string) => ({\n NOT: {\n OR: [\n { title: { contains: keyword } },\n { content: { contains: keyword } }\n ]\n }\n }))\n ]\n };\n\n const sortBy = searchFilter.sortBy || 'updatedAt';\n const sortOrder = searchFilter.sortOrder || 'desc';\n const pinnedFirst = searchFilter.pinnedFirst || false;\n\n const orderBy: Prisma.NoteOrderByWithRelationInput[] = [];\n\n if (pinnedFirst) {\n orderBy.push({ pinned: 'desc' });\n }\n\n if (sortBy === 'createdAt') {\n orderBy.push({ createdAt: sortOrder as 'asc' | 'desc' });\n } else {\n orderBy.push({ updatedAt: sortOrder as 'asc' | 'desc' });\n }\n\n const $notes = models.note.findMany({\n orderBy,\n where,\n take: Number(pagination.limit),\n skip: Number(pagination.offset)\n });\n return {\n totalCount: models.note.count({ where }),\n notes: $notes\n };\n },\n notesInDateRange: async (_, { dateRange }: {\n dateRange: {\n start: string;\n end: string;\n };\n }) => {\n const where: Prisma.NoteWhereInput = {\n OR: [\n {\n updatedAt: {\n gte: new Date(dateRange.start),\n lte: new Date(dateRange.end)\n }\n },\n {\n createdAt: {\n gte: new Date(dateRange.start),\n lte: new Date(dateRange.end)\n }\n }\n ]\n };\n\n const $notes = await models.note.findMany({\n orderBy: { createdAt: 'asc' },\n where\n });\n\n return $notes;\n },\n tagNotes: async (_, {\n searchFilter,\n pagination\n }: {\n searchFilter: SearchFilter;\n pagination: Pagination;\n }) => {\n const where: Prisma.NoteWhereInput = { tags: { some: { id: Number(searchFilter.query) } } };\n\n const $notes = models.note.findMany({\n orderBy: { updatedAt: 'desc' },\n where,\n take: Number(pagination.limit),\n skip: Number(pagination.offset)\n });\n return {\n totalCount: models.note.count({ where }),\n notes: $notes\n };\n },\n notesByTagNames: async (_, {\n tagNames,\n mode,\n pagination\n }: {\n tagNames: string[];\n mode: NoteTagMatchMode;\n pagination: Pagination;\n }) => {\n const normalizedTagNames = normalizeNoteTagNames(tagNames);\n\n if (normalizedTagNames.length === 0) {\n return {\n totalCount: 0,\n notes: []\n };\n }\n\n const where = buildNoteTagNamesWhere(normalizedTagNames, mode);\n\n const $notes = models.note.findMany({\n orderBy: { updatedAt: 'desc' },\n where,\n take: Number(pagination.limit),\n skip: Number(pagination.offset)\n });\n\n return {\n totalCount: models.note.count({ where }),\n notes: $notes\n };\n },\n pinnedNotes: async () => models.note.findMany({\n orderBy: [\n { order: 'asc' },\n { updatedAt: 'desc' }\n ],\n where: { pinned: true }\n }),\n imageNotes: async (_, { src }) => models.note.findMany({\n orderBy: { updatedAt: 'desc' },\n where: { content: { contains: src } }\n }),\n backReferences: async (_, { id }: Note) => {\n return models.note.findMany({\n orderBy: [\n { pinned: 'desc' },\n { updatedAt: 'desc' }\n ],\n where: { content: { contains: `reference\",\"props\":{\"id\":\"${id}\"` } }\n });\n },\n note: async (_, { id }: Note) => {\n const $note = await models.note.findUnique({ where: { id: Number(id) } });\n if (!$note) {\n throw 'NOT FOUND';\n }\n if ($note.content) {\n const blocks = extractBlocksByType<{\n id: string;\n title: string;\n }>('reference', JSON.parse($note.content));\n if (blocks.length > 0) {\n const referenceIds = blocks.map(block => Number(block.props.id));\n const $references = await models.note.findMany({ where: { id: { in: referenceIds } } });\n const newContent = $references.reduce<string>((acc: string, $reference: Note) => {\n const reference = blocks.find(block => Number(block.props.id) === $reference.id);\n if (reference && reference.props.title !== $reference.title) {\n return acc.replace(\n `reference\",\"props\":{\"id\":\"${reference.props.id}\",\"title\":\"${reference.props.title}\"`,\n `reference\",\"props\":{\"id\":\"${$reference.id}\",\"title\":\"${$reference.title}\"`\n );\n }\n return acc;\n }, $note.content);\n if (newContent !== $note.content) {\n try {\n JSON.parse(newContent);\n return await models.note.update({\n where: { id: $note.id },\n data: { content: newContent }\n });\n } catch {\n // Keep the stored content unchanged if the synchronized payload becomes invalid.\n }\n }\n }\n }\n return $note;\n },\n noteCleanupCandidates: async (_, {\n query,\n pagination = {\n limit: 20,\n offset: 0\n }\n }: {\n query?: string;\n pagination: Pagination;\n }) => {\n const result = await listNoteCleanupCandidates({\n keywords: query\n ? query.split(/[,\\s]+/).map((keyword) => keyword.trim()).filter(Boolean)\n : undefined,\n limit: Number(pagination.limit),\n offset: Number(pagination.offset)\n });\n\n return result.notes;\n },\n noteCleanupPreview: async (_, { id }: { id: string }) => {\n return getNoteCleanupPreview(Number(id));\n },\n noteSnapshots: async (_, {\n id,\n limit = 5\n }: {\n id: string;\n limit?: number;\n }) => {\n return listNoteSnapshots(Number(id), Number(limit));\n },\n trashedNotes: async (_, {\n pagination = {\n limit: 25,\n offset: 0\n }\n }: {\n pagination: Pagination;\n }) => {\n return listTrashedNotes({\n limit: Number(pagination.limit),\n offset: Number(pagination.offset)\n });\n },\n noteGraph: async () => {\n const $notes = await models.note.findMany({\n select: {\n id: true,\n title: true,\n content: true\n }\n });\n\n const nodes: Array<{ id: string; title: string; connections: number }> = [];\n const links: Array<{ source: string; target: string }> = [];\n const connectionCount: Record<string, number> = {};\n const linkSet = new Set<string>();\n\n // Extract all references from each note\n for (const $note of $notes) {\n if ($note.content) {\n try {\n const blocks = extractBlocksByType<{ id: string }>('reference', JSON.parse($note.content));\n for (const block of blocks) {\n const targetId = block.props.id;\n // Avoid self-references and duplicate links\n if (targetId && String($note.id) !== targetId) {\n const linkKey = `${$note.id}-${targetId}`;\n const reverseLinkKey = `${targetId}-${$note.id}`;\n if (!linkSet.has(linkKey) && !linkSet.has(reverseLinkKey)) {\n linkSet.add(linkKey);\n links.push({\n source: String($note.id),\n target: targetId\n });\n // Count connections for both nodes\n connectionCount[String($note.id)] = (connectionCount[String($note.id)] || 0) + 1;\n connectionCount[targetId] = (connectionCount[targetId] || 0) + 1;\n }\n }\n }\n } catch {\n // Skip notes with invalid JSON content\n }\n }\n }\n\n // Build nodes array with connection counts\n for (const $note of $notes) {\n nodes.push({\n id: String($note.id),\n title: $note.title || 'Untitled',\n connections: connectionCount[String($note.id)] || 0\n });\n }\n\n return {\n nodes,\n links\n };\n }\n },\n Mutation: {\n createNote: async (_, { note }: { note: NoteInput }) => {\n const PLACEHOLDER_PREFIX = '{%';\n const PLACEHOLDER_SUFFIX = '%}';\n\n const replacePlaceholder = async (content: string) => {\n const placeholders = content.matchAll(new RegExp(`${PLACEHOLDER_PREFIX}([^}]+)${PLACEHOLDER_SUFFIX}`, 'g'));\n const $placeholders = await models.placeholder.findMany({\n select: {\n template: true,\n replacement: true\n },\n where: { template: { in: Array.from(new Set(Array.from(placeholders, p => p[1]))) } }\n });\n\n for (const $placeholder of $placeholders) {\n content = content.replace(new RegExp(`${PLACEHOLDER_PREFIX}${$placeholder.template}${PLACEHOLDER_SUFFIX}`, 'g'), $placeholder.replacement);\n }\n return content;\n };\n\n const replacedTitle = await replacePlaceholder(note.title);\n const replacedContent = await replacePlaceholder(note.content);\n\n const $note = await models.note.create({\n data: {\n title: replacedTitle,\n content: replacedContent,\n ...(note.layout && { layout: note.layout })\n }\n });\n if (note.content) {\n const blocks = extractBlocksByType<{ id: string }>(\n 'tag',\n JSON.parse(note.content)\n );\n\n return await models.note.update({\n where: { id: $note.id },\n data: { tags: { set: blocks.map(block => ({ id: Number(block.props.id) })) } }\n });\n }\n\n return $note;\n },\n updateNote: async (_, {\n id,\n note,\n editSessionId\n }: {\n id: number;\n note: NoteInput;\n editSessionId?: string;\n }, context: {\n req?: Request;\n }) => {\n const userAgentHeader = context.req?.headers['user-agent'];\n const userAgent = Array.isArray(userAgentHeader) ? userAgentHeader[0] : userAgentHeader;\n let blocks: BlockNote<{ id: string }>[] = [];\n\n if (note.content) {\n blocks = extractBlocksByType<{ id: string }>(\n 'tag',\n JSON.parse(note.content)\n );\n }\n\n await captureNoteBaseline({\n noteId: Number(id),\n ...(editSessionId ? { editSessionId } : {}),\n meta: createSnapshotMetaFromUserAgent(userAgent)\n });\n\n const $note = await models.note.update({\n where: { id: Number(id) },\n data: {\n ...note,\n ...(note.content ? { tags: { set: blocks.map(block => ({ id: Number(block.props.id) })) } } : {})\n }\n });\n return $note;\n },\n deleteNote: async (_, { id }: Note) => {\n const trashedNote = await trashNoteById(Number(id));\n\n if (!trashedNote) {\n throw 'NOT FOUND';\n }\n\n return true;\n },\n restoreNoteSnapshot: async (_, { id }: { id: string }, context: {\n req?: Request;\n }) => {\n const userAgentHeader = context.req?.headers['user-agent'];\n const userAgent = Array.isArray(userAgentHeader) ? userAgentHeader[0] : userAgentHeader;\n const note = await restoreNoteSnapshot(Number(id), { meta: createSnapshotMetaFromUserAgent(userAgent) });\n\n if (!note) {\n throw 'NOT FOUND';\n }\n\n return note;\n },\n restoreTrashedNote: async (_, { id }: { id: string }) => {\n const note = await restoreTrashedNoteById(Number(id));\n\n if (!note) {\n throw 'NOT FOUND';\n }\n\n return note;\n },\n pinNote: (_, { id, pinned }: Note) => models.note.update({\n where: { id: Number(id) },\n data: { pinned: Boolean(pinned) }\n }),\n reorderNotes: async (_, { notes }: { notes: Array<{ id: string; order: number }> }) => {\n const updatePromises = notes.map(({ id, order }) =>\n models.note.update({\n where: { id: Number(id) },\n data: { order }\n })\n );\n return await Promise.all(updatePromises);\n }\n },\n Note: {\n tags: async (note: Note) => await models.tag.findMany({ where: { notes: { some: { id: note.id } } } }),\n contentAsMarkdown: async (note: Note) => {\n const { blocksToMarkdown } = await import('~/modules/blocknote.js');\n return blocksToMarkdown(note.content);\n }\n }\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- import{j as e,U as G,y as me,v as ue,i as P,k as he,X as pe,F as xe}from"./note-vendor-BofYbzmZ.js";import{p as W,T as u,c as R,t as J,I as fe,q as C,M as j,B as k,J as X,K as ge,u as ye,O as be,U as ve,V as je,d as w,W as ee,L as Y,N as z,G as Ne,X as te,Y as we,z as Me,Z as Ce,r as Ae,_ as Z,$ as Re,a0 as Se,a1 as ke,a2 as F,g as Ee,a3 as Te,k as He,D as ae,m as se,Q as O,P as U,n as $,j as Le,i as H,a4 as Ve,a5 as De,a6 as Ze,a7 as Fe,a8 as Ie,a9 as _}from"./index-BglnLSet.js";import{a}from"./graph-vendor-CUxe67Lr.js";import{u as Oe}from"./image.api-Dsrx9S-G.js";import{V as $e,a2 as Pe,a3 as Ye,A as ze}from"./note-core-BCgMq5QA.js";import{M as ne,n as Ue}from"./ModalActionRow-Hg6MY61u.js";import{u as Be,R as qe}from"./useReminderMutate-yJak8FzP.js";const _e=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M216.49,79.52l-56-56A12,12,0,0,0,152,20H56A20,20,0,0,0,36,40V216a20,20,0,0,0,20,20H200a20,20,0,0,0,20-20V88A12,12,0,0,0,216.49,79.52ZM160,57l23,23H160ZM60,212V44h76V92a12,12,0,0,0,12,12h48V212Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M208,88H152V32Z",opacity:"0.2"}),a.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM152,88V44l44,44Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M212.24,83.76l-56-56A6,6,0,0,0,152,26H56A14,14,0,0,0,42,40V216a14,14,0,0,0,14,14H200a14,14,0,0,0,14-14V88A6,6,0,0,0,212.24,83.76ZM158,46.48,193.52,82H158ZM200,218H56a2,2,0,0,1-2-2V40a2,2,0,0,1,2-2h90V88a6,6,0,0,0,6,6h50V216A2,2,0,0,1,200,218Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M210.83,85.17l-56-56A4,4,0,0,0,152,28H56A12,12,0,0,0,44,40V216a12,12,0,0,0,12,12H200a12,12,0,0,0,12-12V88A4,4,0,0,0,210.83,85.17ZM156,41.65,198.34,84H156ZM200,220H56a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h92V88a4,4,0,0,0,4,4h52V216A4,4,0,0,1,200,220Z"}))]]),Qe=new Map([["bold",a.createElement(a.Fragment,null,a.createElement("path",{d:"M87.5,151.52l64-64a12,12,0,0,1,17,17l-64,64a12,12,0,0,1-17-17Zm131-114a60.08,60.08,0,0,0-84.87,0L103.51,67.61a12,12,0,0,0,17,17l30.07-30.06a36,36,0,0,1,50.93,50.92L171.4,135.52a12,12,0,1,0,17,17l30.08-30.06A60.09,60.09,0,0,0,218.45,37.55ZM135.52,171.4l-30.07,30.08a36,36,0,0,1-50.92-50.93l30.06-30.07a12,12,0,0,0-17-17L37.55,133.58a60,60,0,0,0,84.88,84.87l30.06-30.07a12,12,0,0,0-17-17Z"}))],["duotone",a.createElement(a.Fragment,null,a.createElement("path",{d:"M209.94,113.94l-96,96a48,48,0,0,1-67.88-67.88l96-96a48,48,0,0,1,67.88,67.88Z",opacity:"0.2"}),a.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["fill",a.createElement(a.Fragment,null,a.createElement("path",{d:"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM144.56,173.66l-21.45,21.45a44,44,0,0,1-62.22-62.22l21.45-21.46a8,8,0,0,1,11.32,11.31L72.2,144.2a28,28,0,0,0,39.6,39.6l21.45-21.46a8,8,0,0,1,11.31,11.32Zm-34.9-16a8,8,0,0,1-11.32-11.32l48-48a8,8,0,0,1,11.32,11.32Zm85.45-34.55-21.45,21.45a8,8,0,0,1-11.32-11.31L183.8,111.8a28,28,0,0,0-39.6-39.6L122.74,93.66a8,8,0,0,1-11.31-11.32l21.46-21.45a44,44,0,0,1,62.22,62.22Z"}))],["light",a.createElement(a.Fragment,null,a.createElement("path",{d:"M164.25,91.75a6,6,0,0,1,0,8.49l-64,64a6,6,0,0,1-8.49-8.48l64-64A6,6,0,0,1,164.25,91.75ZM214.2,41.8a54.07,54.07,0,0,0-76.38,0L107.75,71.85a6,6,0,0,0,8.49,8.49l30.07-30.06a42,42,0,0,1,59.41,59.41l-30.08,30.07a6,6,0,1,0,8.49,8.49l30.07-30.07A54,54,0,0,0,214.2,41.8ZM139.76,175.64l-30.07,30.08a42,42,0,0,1-59.41-59.41l30.06-30.07a6,6,0,0,0-8.49-8.49l-30,30.07a54,54,0,0,0,76.38,76.39l30.07-30.08a6,6,0,0,0-8.49-8.49Z"}))],["regular",a.createElement(a.Fragment,null,a.createElement("path",{d:"M165.66,90.34a8,8,0,0,1,0,11.32l-64,64a8,8,0,0,1-11.32-11.32l64-64A8,8,0,0,1,165.66,90.34ZM215.6,40.4a56,56,0,0,0-79.2,0L106.34,70.45a8,8,0,0,0,11.32,11.32l30.06-30a40,40,0,0,1,56.57,56.56l-30.07,30.06a8,8,0,0,0,11.31,11.32L215.6,119.6a56,56,0,0,0,0-79.2ZM138.34,174.22l-30.06,30.06a40,40,0,1,1-56.56-56.57l30.05-30.05a8,8,0,0,0-11.32-11.32L40.4,136.4a56,56,0,0,0,79.2,79.2l30.06-30.07a8,8,0,0,0-11.32-11.31Z"}))],["thin",a.createElement(a.Fragment,null,a.createElement("path",{d:"M162.84,93.16a4,4,0,0,1,0,5.66l-64,64a4,4,0,0,1-5.66-5.66l64-64A4,4,0,0,1,162.84,93.16Zm49.95-49.95a52.07,52.07,0,0,0-73.56,0L109.17,73.27a4,4,0,0,0,5.65,5.66l30.07-30.06a44,44,0,0,1,62.24,62.24l-30.07,30.06a4,4,0,0,0,5.66,5.66l30.07-30.06A52.07,52.07,0,0,0,212.79,43.21ZM141.17,177.06l-30.06,30.07a44,44,0,0,1-62.24-62.24l30.06-30.06a4,4,0,0,0-5.66-5.66L43.21,139.23a52,52,0,0,0,73.56,73.56l30.06-30.07a4,4,0,1,0-5.66-5.66Z"}))]]),re=a.forwardRef((t,n)=>a.createElement(W,{ref:n,...t,weights:_e}));re.displayName="FileIcon";const Ke=re,le=a.forwardRef((t,n)=>a.createElement(W,{ref:n,...t,weights:Qe}));le.displayName="LinkSimpleIcon";const Ge=le;function B({icon:t,title:n,className:r}){return e.jsxs("div",{className:R("flex items-center gap-2",r),children:[e.jsx("div",{className:"flex h-3.5 w-3.5 shrink-0 items-center justify-center text-current",children:t}),e.jsx(u,{as:"span",variant:"label",weight:"semibold",className:"text-current",children:n})]})}function We({title:t,description:n,selected:r=!1,onClick:l,children:o}){return e.jsxs("button",{type:"button","aria-pressed":r,className:`focus-ring-soft flex w-full items-start justify-between gap-3 p-3 text-left transition-colors sm:p-4 ${r?"surface-floating bg-elevated":"rounded-[14px] border border-border-subtle bg-transparent hover:border-border-secondary hover:bg-hover-subtle"}`,onClick:l,children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(u,{as:"div",variant:"body",weight:"semibold",tone:r?"default":"secondary",children:t}),e.jsx(u,{as:"div",variant:"meta",weight:"medium",tone:r?"secondary":"tertiary",className:"mt-1",children:n})]}),o?e.jsx("div",{className:"shrink-0",children:o}):null]})}const Je=t=>{const{data:n}=J({queryKey:C.notes.backReferences(t.noteId),async queryFn(){const r=await fe(t.noteId);if(r.type==="error")throw r;return r.backReferences}});return t.render(n)},Xe=[{value:"narrow",label:"Narrow",description:"Optimized for reading long-form content"},{value:"wide",label:"Wide",description:"Balanced width suitable for most content"},{value:"full",label:"Full Width",description:"Maximize screen space utilization"}];function et({isOpen:t,onClose:n,onSave:r,currentLayout:l="wide"}){const[o,i]=a.useState(l);a.useEffect(()=>{t&&i(l)},[t,l]);const s=()=>{r(o),n()};return e.jsxs(j,{isOpen:t,onClose:n,children:[e.jsx(j.Header,{title:"Layout Settings",onClose:n}),e.jsx(j.Body,{children:e.jsx("div",{className:"flex flex-col gap-3 sm:gap-4",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(u,{as:"div",variant:"body",weight:"semibold",tone:"secondary",children:"Note layout"}),e.jsx("div",{className:"flex flex-col gap-2",children:Xe.map(c=>e.jsx(We,{title:c.label,description:c.description,selected:o===c.value,onClick:()=>i(c.value)},c.value))})]})})}),e.jsx(j.Footer,{children:e.jsxs(ne,{children:[e.jsx(k,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),e.jsx(k,{variant:"primary",size:"sm",onClick:s,children:"Apply"})]})})]})}const tt=(t,n)=>t||(n==="mobile"?"Mobile browser":n==="mcp"?"MCP":"Web browser");function at({isOpen:t,noteId:n,onClose:r,onRestored:l}){const o=X(),i=ge(),s=ye({queryKey:C.notes.snapshots(n),queryFn:async()=>{const m=await be(n);if(m.type==="error")throw m;return m.noteSnapshots},enabled:t}),c=ve({mutationFn:je,onSuccess:async m=>{if(m.type==="error"){o(m.errors[0].message);return}await Promise.all([i.invalidateQueries({queryKey:C.notes.detail(n),exact:!0}),i.invalidateQueries({queryKey:C.notes.listAll(),exact:!1}),i.invalidateQueries({queryKey:C.notes.tagListAll(),exact:!1}),i.invalidateQueries({queryKey:C.notes.pinned(),exact:!0}),i.invalidateQueries({queryKey:C.notes.backReferences(n),exact:!0}),i.invalidateQueries({queryKey:C.notes.snapshots(n),exact:!1})]),o("Previous version restored."),l?.(m.restoreNoteSnapshot),r()}});return e.jsxs(j,{isOpen:t,onClose:r,children:[e.jsx(j.Header,{title:"Restore Previous Version",onClose:r}),e.jsx(j.Body,{children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx(u,{as:"p",variant:"meta",tone:"secondary",children:"Choose a previous snapshot to restore this note back to that state."}),s.isLoading&&e.jsx(u,{as:"div",variant:"meta",tone:"secondary",children:"Loading previous versions..."}),!s.isLoading&&s.data?.length===0&&e.jsx(u,{as:"div",variant:"meta",tone:"secondary",className:"rounded-[14px] border border-border-subtle bg-hover-subtle/50 px-4 py-3",children:"A recovery snapshot will appear after the first edit in a session and older ones are cleaned up automatically."}),!s.isLoading&&s.data&&s.data.length>0&&e.jsx("div",{className:"flex flex-col gap-2",children:s.data.map(m=>e.jsx("div",{className:"surface-base p-3",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs(u,{as:"p",variant:"body",weight:"semibold",children:["Before ",tt(m.meta.label,m.meta.entrypoint)," edit"]}),e.jsx(u,{as:"p",variant:"meta",truncate:!0,tone:"secondary",children:m.title}),e.jsx(u,{as:"p",variant:"label",tone:"tertiary",children:w(m.createdAt).format("YYYY-MM-DD HH:mm:ss")})]}),e.jsx(k,{size:"sm",isLoading:c.isPending,onClick:()=>c.mutate(m.id),children:"Restore"})]})},m.id))})]})})]})}const st="_Reference_6yru9_1",nt={Reference:st},rt=ee.bind(nt),lt=G({type:"reference",propSchema:{id:{default:""},title:{default:"Unknown"}},content:"none"},{render:t=>e.jsx("span",{className:rt("Reference"),children:e.jsx(Y,{to:z,params:{id:t.inlineContent.props.id},children:e.jsxs("span",{children:["[",t.inlineContent.props.title,"]"]})})})}),ot="_Tag_16liq_1",it={Tag:ot},ct=ee.bind(it),dt=G({type:"tag",propSchema:{id:{default:""},tag:{default:"@Unknown"}},content:"none"},{render:t=>e.jsx("span",{className:ct("Tag"),children:e.jsx(Y,{to:Ne,params:{id:t.inlineContent.props.id},search:{page:1},children:e.jsx("span",{children:t.inlineContent.props.tag})})})}),mt=()=>{const t=ue(),[n,r]=a.useState([]),l={1:"pl-3",2:"pl-[26px]",3:"pl-[40px]",4:"pl-[54px]",5:"pl-[68px]",6:"pl-[82px]"};a.useEffect(()=>{const s=()=>{const m=t.document,M=[],y=N=>{for(const g of N){if(g.type==="heading"){const p=g,E=p.props.level||1,T=p.content?.map(S=>S.text||"").join("")||"";T.trim()&&M.push({id:g.id,level:E,text:T})}g.children&&Array.isArray(g.children)&&y(g.children)}};y(m),r(M)};s();const c=t.onChange?.(s);return()=>{c&&c()}},[t]);const o=s=>{t.setTextCursorPosition(s);const c=document.querySelector(`[data-id="${s}"]`);c&&c.scrollIntoView({behavior:"smooth",block:"center"})},i=e.jsx(B,{icon:e.jsx(te,{className:"h-3.5 w-3.5"}),title:"Table of Contents",className:"text-fg-tertiary"});return n.length===0?e.jsxs("div",{className:"surface-base w-full p-4",children:[i,e.jsx(u,{as:"p",variant:"meta",tone:"secondary",className:"mt-2",children:"Add headings to your document to generate a table of contents"})]}):e.jsxs("div",{className:"surface-base w-full p-4",children:[e.jsx("div",{className:"mb-2",children:i}),e.jsx("nav",{className:"space-y-0.5",children:n.map(s=>{const c=s.level===1;return e.jsxs("button",{type:"button",onClick:()=>o(s.id),className:R("focus-ring-soft","flex","w-full","items-center","gap-2","rounded-[10px]","px-2.5","py-1.5",l[s.level]??"pl-2.5","text-left","transition-colors","hover:bg-hover-subtle",c?"text-fg-default":"text-fg-secondary"),children:[e.jsxs(u,{as:"span",variant:"label",weight:"medium",tone:"tertiary",className:"min-w-[1.5rem]",children:["H",s.level]}),e.jsx(u,{as:"span",variant:"body",weight:c?"semibold":"medium",className:"line-clamp-2 text-current",children:s.text})]},s.id)})})]})},ut=me({type:"tableOfContents",propSchema:{},content:"none"},{render:()=>e.jsx(mt,{})})(),ht=$e.create({inlineContentSpecs:{...Ye,tag:dt,reference:lt},blockSpecs:{...Pe,tableOfContents:ut}}),pt=({editor:t})=>e.jsx(P,{triggerCharacter:"/",getItems:async n=>ze([...he(t).filter(r=>r.title!=="Audio"&&r.title!=="Video"&&r.title!=="File"),{title:"Table of Contents",subtext:"Insert a table of contents based on headings",onItemClick:()=>{t.insertBlocks([{type:"tableOfContents"}],t.getTextCursorPosition().block,"after")},aliases:["toc","table of contents","contents","outline","index"],group:"Other",icon:e.jsx(te,{})}],n)}),xt=({onClick:t})=>e.jsx(P,{triggerCharacter:"[",getItems:async n=>{const r=await we({query:n,limit:5});if(r.type==="error")return[];const{notes:l}=r.allNotes;return l.map(o=>({title:o.title,onItemClick:()=>t({type:"reference",props:{id:o.id,title:o.title}})}))}}),ft=({onClick:t})=>e.jsx(P,{triggerCharacter:"@",getItems:async n=>{const r=await Me({query:n,limit:5});if(r.type==="error")return[];const{tags:l}=r.allTags,o=l.some(s=>s.name!==`@${n}`),i=[{title:"Add a new tag",onItemClick:async()=>{const s=await Ce({name:"@"+n});if(s.type==="error")return;const{id:c,name:m}=s.createTag;t({type:"tag",props:{id:c,tag:m}})}}];return l.length===0?i:l.map(s=>({title:s.name,onItemClick:()=>t({type:"tag",props:{id:s.id,tag:s.name}})})).concat(n&&o?i:[])}});async function gt(t){return new Promise((n,r)=>{const l=new FileReader;l.readAsDataURL(t),l.onload=()=>n(l.result),l.onerror=o=>r(o)})}const yt=a.forwardRef(({content:t,editable:n,onChange:r},l)=>{const{theme:o}=Ae(s=>s),i=pe({schema:ht,initialContent:t&&JSON.parse(t)||void 0,uploadFile:async s=>Oe({base64:await gt(s)})},[]);return a.useImperativeHandle(l,()=>({getContent:()=>JSON.stringify(i.document)})),e.jsxs(xe,{slashMenu:!1,theme:o,editor:i,editable:n,onChange:r,children:[e.jsx(pt,{editor:i}),e.jsx(xt,{onClick:s=>{i.insertInlineContent([s," "])}}),e.jsx(ft,{onClick:s=>{i.insertInlineContent([s," "])}})]})}),Q={low:{active:"border-border-secondary bg-elevated text-fg-default",inactive:"border-transparent bg-transparent text-fg-muted hover:bg-hover-subtle"},medium:{active:"border-border-secondary bg-elevated text-fg-default",inactive:"border-transparent bg-transparent text-fg-muted hover:bg-hover-subtle"},high:{active:"border-border-secondary bg-elevated text-fg-default",inactive:"border-transparent bg-transparent text-fg-muted hover:bg-hover-subtle"}};function bt({isOpen:t,onClose:n,onSave:r,reminder:l,mode:o}){const[i,s]=a.useState(new Date),[c,m]=a.useState("medium"),[M,y]=a.useState("");a.useEffect(()=>{t&&o==="edit"&&l?(s(new Date(Number(l.reminderDate))),m(l.priority||"medium"),y(l.content||"")):t&&o==="create"&&(s(new Date),m("medium"),y(""))},[t,o,l]);const N=()=>{r(i,c,M||void 0),n()},g=p=>c===p?Q[p].active:Q[p].inactive;return e.jsxs(j,{isOpen:t,onClose:n,children:[e.jsx(j.Header,{title:o==="create"?"Create Reminder":"Edit Reminder",onClose:n}),e.jsx(j.Body,{children:e.jsxs("div",{className:"flex flex-col gap-3 sm:gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Z,{children:"Date & Time"}),e.jsx(Re,{type:"datetime-local",size:"sm",value:w(i).format("YYYY-MM-DDTHH:mm"),onChange:p=>s(new Date(p.target.value))})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Z,{children:"Content"}),e.jsx(Se,{size:"sm",placeholder:"Enter reminder content (optional)",value:M,onChange:p=>y(p.target.value)})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(Z,{children:"Priority"}),e.jsxs(ke,{type:"single",value:c,onValueChange:p=>p&&m(p),className:"gap-1.5 border-none rounded-[14px] bg-muted/70 p-1 sm:gap-2",children:[e.jsx(F,{value:"low",className:`flex-1 rounded-[10px] border ${g("low")}`,children:e.jsx(u,{as:"span",weight:"medium",className:"text-current",children:"Low"})}),e.jsx(F,{value:"medium",className:`flex-1 rounded-[10px] border ${g("medium")}`,children:e.jsx(u,{as:"span",weight:"medium",className:"text-current",children:"Medium"})}),e.jsx(F,{value:"high",className:`flex-1 rounded-[10px] border ${g("high")}`,children:e.jsx(u,{as:"span",weight:"medium",className:"text-current",children:"High"})})]})]})]})}),e.jsx(j.Footer,{children:e.jsxs(ne,{children:[e.jsx(k,{variant:"ghost",size:"sm",onClick:n,children:"Cancel"}),e.jsx(k,{variant:"primary",size:"sm",onClick:N,children:o==="create"?"Create":"Save"})]})})]})}function vt({noteId:t}){const[n,r]=a.useState(!1),[l,o]=a.useState(!1),[i,s]=a.useState("create"),[c,m]=a.useState(void 0),{onCreate:M,onUpdate:y,onDelete:N}=Be(),g=()=>{s("create"),m(void 0),o(!0)},p=x=>{s("edit"),m(x),o(!0)},E=(x,f,d)=>{i==="create"?M(t,x,f,()=>{o(!1)},d):i==="edit"&&c&&y(c.id,t,{reminderDate:x,priority:f,content:d},()=>{o(!1)})},T=x=>{y(x.id,t,{completed:!x.completed})},S=x=>{const f=w(Number(x)),d=w();return f.isSame(d,"day")?`Today at ${f.format("HH:mm")}`:f.isSame(d.add(1,"day"),"day")?`Tomorrow at ${f.format("HH:mm")}`:f.format("YYYY-MM-DD HH:mm")},V=x=>{const f=w(Number(x)),d=w(),v=f.diff(d,"hour");return v<=6?"high":v<=24?"medium":"low"},L=x=>{const f=w(Number(x)),d=w(),v=f.diff(d,"hour"),A=f.diff(d,"minute")%60;return v<0||A<0?"Overdue":v===0?`${A}m remaining`:`${v}h ${A}m remaining`};return e.jsxs("div",{className:"surface-base mb-5 p-4",children:[e.jsxs("div",{className:R("flex items-center justify-between",!n&&"mb-3"),children:[e.jsx("button",{type:"button",onClick:()=>r(!n),className:"focus-ring-soft flex items-center gap-2 rounded-[10px] px-2 py-1.5 text-fg-tertiary transition-colors hover:bg-hover-subtle hover:text-fg-default",children:e.jsx(B,{icon:n?e.jsx(Ee,{size:12}):e.jsx(Te,{size:12}),title:"Reminders"})}),!n&&e.jsxs(k,{size:"sm",variant:"ghost",onClick:g,children:[e.jsx(Ue,{className:"w-3 h-3"}),e.jsx(u,{as:"span",variant:"label",className:"hidden sm:inline",children:"Add"})]})]}),!n&&e.jsx(qe,{noteId:t,searchParams:{offset:0,limit:9999},render:({reminders:x,totalCount:f})=>e.jsx("div",{className:"flex flex-col gap-2",children:x.length===0?e.jsx(u,{as:"p",variant:"meta",tone:"secondary",className:"py-3 text-center",children:f===0?"No reminders yet":"All reminders complete"}):e.jsx("div",{className:"flex flex-col",children:x.map(d=>{const v=d.priority||V(d.reminderDate),A=L(d.reminderDate),D=A==="Overdue";return e.jsxs("div",{className:R("flex items-center gap-2.5 px-2 py-1.5"),children:[e.jsx(He,{checked:d.completed,onChange:()=>T(d),size:"sm"}),e.jsx(u,{as:"div",variant:"body",weight:"medium",className:R("truncate flex-1 min-w-0",d.completed&&"line-through opacity-40"),children:d.content||S(d.reminderDate)}),e.jsxs("div",{className:R("shrink-0 flex items-center gap-1",d.completed&&"opacity-40"),children:[d.content&&e.jsx(u,{as:"span",variant:"meta",tone:"secondary",children:S(d.reminderDate)}),!d.completed&&e.jsx(u,{as:"span",variant:"label",weight:"medium",tone:D||v==="high"?"error":"tertiary",className:R(d.content&&'before:content-["·"] before:mr-1'),children:A})]}),e.jsx(ae,{button:e.jsxs("button",{type:"button",className:"focus-ring-soft inline-flex h-8 w-8 items-center justify-center rounded-[10px] text-fg-secondary outline-none transition-colors hover:bg-hover-subtle hover:text-fg-default",children:[e.jsx(se,{size:16,className:"text-current"}),e.jsx("span",{className:"sr-only",children:"Reminder actions"})]}),items:[{name:"Edit",onClick:()=>p(d)},{name:"Delete",onClick:()=>N(d.id,t)}]})]},d.id)})})})}),e.jsx(bt,{isOpen:l,onClose:()=>o(!1),onSave:E,reminder:c,mode:i})]})}const oe=Le(z),K=t=>w(Number(t)).format("YYYY-MM-DD HH:mm:ss"),I=()=>typeof globalThis.crypto?.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,jt={narrow:"max-w-[640px]",wide:"max-w-[896px]",full:"max-w-full px-4"},Nt=e.jsx(U,{title:"Loading note",variant:"none",children:e.jsxs("main",{className:"mx-auto max-w-[896px]",children:[e.jsx(H,{className:"mb-8",height:"66px"}),e.jsx(H,{className:"ml-12 mb-8",height:"150px"}),e.jsx(H,{className:"mb-5",height:"80px"}),e.jsx(H,{height:"80px"})]})});function wt({id:t}){const n=X(),r=oe.useNavigate(),l=a.useRef(null),o=a.useRef(null),i=a.useRef(I()),{data:s}=J({queryKey:C.notes.detail(t),queryFn:async()=>{const h=await Ve(t);if(h.type==="error")throw h;return h.note},gcTime:0}),[c,m]=a.useState(s.title),[M,y]=a.useState(()=>K(s.updatedAt)),[N,g]=a.useState(s.pinned),[p,E]=a.useState(s.layout||"wide"),[T,S]=a.useState(!1),[V,L]=a.useState(!1),[x,f]=De(1e3);a.useEffect(()=>{m(s.title),g(s.pinned),E(s.layout||"wide"),y(K(s.updatedAt))},[s.layout,s.pinned,s.title,s.updatedAt]),a.useEffect(()=>{i.current=I()},[t]);const d=async({title:h="",content:b=""})=>{f(async()=>{const q=await _({id:t,title:h,content:b,editSessionId:i.current});if(q.type==="error"){n(q.errors[0].message);return}m(h),y(w().format("YYYY-MM-DD HH:mm:ss"))})},v=()=>{d({title:c,content:l.current?.getContent()})},A=h=>{m(h),d({title:h,content:l.current?.getContent()})},D=async h=>{const b=await _({id:t,layout:h,editSessionId:i.current});if(b.type==="error"){n(b.errors[0].message);return}E(h),n("Layout has been updated.")},{onCreate:ie,onDelete:ce,onPinned:de}=Ze();return e.jsx(U,{title:c,variant:"none",children:e.jsxs("main",{className:R("mx-auto",jt[p]),children:[e.jsx("div",{className:"surface-floating sticky top-20 z-[1001] mb-7 px-5 pt-4 pb-3.5",children:e.jsxs("div",{className:"flex flex-col gap-3.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-5",children:[e.jsxs("div",{className:"min-w-0 flex-1 pt-0.5",children:[e.jsx(u,{as:"div",variant:"micro",weight:"semibold",tracking:"widest",transform:"uppercase",tone:"tertiary",className:"mb-1.5",children:"Thought in progress"}),e.jsx("input",{ref:o,placeholder:"Title",className:"text-heading sm:text-display w-full bg-transparent font-semibold leading-[1.25] tracking-[-0.02em] outline-none",type:"text",value:c,onChange:h=>A(h.target.value)})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsx(ae,{button:e.jsxs("button",{type:"button",className:"focus-ring-soft inline-flex h-9 w-9 items-center justify-center rounded-[12px] border border-transparent bg-transparent text-fg-tertiary outline-none transition-colors hover:border-border-subtle hover:bg-hover-subtle hover:text-fg-default",children:[e.jsx(se,{className:"h-5 w-5"}),e.jsx("span",{className:"sr-only",children:"Note actions"})]}),items:[{name:N?"Unpin":"Pin",onClick:()=>de(t,N,()=>{g(h=>!h)})},{name:"Change layout",onClick:()=>S(!0)},{type:"separator"},{name:"Clone this note",onClick:()=>ie(o.current?.value||"untitled",l.current?.getContent()||"",p)},{name:"Restore previous version",onClick:()=>L(!0)},{type:"separator"},{name:"Delete",onClick:()=>ce(t,()=>{r({to:Fe,search:{page:1}})})}]}),e.jsx(k,{size:"sm",variant:"subtle",isLoading:x,onClick:v,children:"Save"})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-2.5 gap-y-1.5 border-t border-border-subtle/80 pt-3",children:[N&&e.jsxs(u,{as:"span",variant:"label",weight:"medium",tone:"secondary",className:"inline-flex items-center gap-1.5",children:[e.jsx(Ie,{className:"h-3 w-3",weight:"fill"}),"Pinned"]}),N&&e.jsx("span",{className:"h-1 w-1 rounded-full bg-border-secondary"}),e.jsxs(u,{as:"span",variant:"label",weight:"medium",tone:"secondary",children:["Last saved ",M]})]})]})}),e.jsx(yt,{ref:l,content:s.content,onChange:v},`${t}:${s.updatedAt}`),e.jsx(O,{fallback:e.jsx(H,{className:"mb-5",height:"80px"}),errorTitle:"Failed to load reminders",errorDescription:"Retry loading reminder details for this note.",renderError:({error:h,retry:b})=>e.jsx($,{title:"Failed to load reminders",description:"Retry loading reminder details for this note.",error:h,onRetry:b,showBackAction:!1,showHomeAction:!1}),children:e.jsx(vt,{noteId:t})}),e.jsx(O,{fallback:e.jsx(H,{height:"80px"}),errorTitle:"Failed to load back references",errorDescription:"Retry loading notes that link back here.",renderError:({error:h,retry:b})=>e.jsx($,{title:"Failed to load back references",description:"Retry loading notes that link back here.",error:h,onRetry:b,showBackAction:!1,showHomeAction:!1}),children:e.jsx(Je,{noteId:t,render:h=>h&&h.length>0&&e.jsxs("div",{className:"surface-base p-4",children:[e.jsx(B,{icon:e.jsx(Ge,{className:"h-3.5 w-3.5"}),title:"Back References",className:"mb-3 text-fg-tertiary"}),e.jsx("ul",{className:"flex flex-col",children:h.map(b=>e.jsx("li",{children:e.jsxs(Y,{to:z,params:{id:b.id},className:"flex items-center gap-2 rounded-[10px] px-2.5 py-1.5 text-fg-secondary transition-colors hover:bg-hover-subtle hover:text-fg-default",children:[e.jsx(Ke,{className:"h-3.5 w-3.5 shrink-0 text-fg-tertiary"}),e.jsx(u,{as:"span",variant:"body",weight:"medium",className:"text-current",children:b.title})]})},b.id))})]})})}),e.jsx(et,{isOpen:T,onClose:()=>S(!1),onSave:D,currentLayout:p}),e.jsx(at,{isOpen:V,noteId:t,onClose:()=>L(!1),onRestored:()=>{i.current=I()}})]})})}function Tt(){const{id:t}=oe.useParams();if(!t)throw new Error("Note id is required.");return e.jsx(O,{fallback:Nt,errorTitle:"Failed to load note",errorDescription:"Retry loading the note editor.",resetKeys:[t],renderError:({error:n,retry:r})=>e.jsx(U,{title:"Note",variant:"none",children:e.jsx($,{title:"Failed to load note",description:"Retry loading the note editor.",error:n,onRetry:r})}),children:e.jsx(wt,{id:t},t)})}export{Tt as default};
@@ -1 +0,0 @@
1
- ._Reference_6yru9_1{display:inline-flex;align-items:center;font-size:.75rem;font-weight:600;padding:2px 10px;border-radius:9999px;background:color-mix(in srgb,var(--elevated) 72%,var(--hover-subtle));border:1px solid var(--border-subtle);color:var(--fg-secondary);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._Reference_6yru9_1:hover{background:var(--elevated);border-color:var(--border-secondary);color:var(--fg-default)}html.dark ._Reference_6yru9_1{background:color-mix(in srgb,var(--elevated) 82%,var(--hover-subtle))}._Tag_16liq_1{display:inline-flex;align-items:center;font-size:.75rem;font-weight:600;padding:2px 10px;border-radius:9999px;background:var(--emphasis);border:1px solid var(--border-secondary);color:var(--fg-secondary);transition:background-color .15s ease,border-color .15s ease,color .15s ease}._Tag_16liq_1 a{color:inherit;text-decoration:none!important}._Tag_16liq_1:hover{background:var(--hover-subtle);border-color:var(--border-secondary);color:var(--fg-default)}html.dark ._Tag_16liq_1{background:var(--emphasis)}
@@ -1 +0,0 @@
1
- import{j as e}from"./note-vendor-BofYbzmZ.js";import{t as v,q as x,ak as w,K as E,A,U as b,Q as T,P as o,E as _,L as G,al as M,T as R,B as S,l as P,i as l,j as k,ad as q}from"./index-BglnLSet.js";import"./graph-vendor-CUxe67Lr.js";import{I as K}from"./Image-ZxF459sC.js";import{S as f}from"./SurfaceCard-BV6y4bCo.js";import{f as L,d as Q}from"./image.api-Dsrx9S-G.js";import{c as C,n as D}from"./Trash.es-CPtRLE0y.js";import"./note-core-BCgMq5QA.js";const U=r=>{const{data:d}=v({queryKey:x.images.list(r.searchParams),async queryFn(){const i=await L({offset:r.searchParams.offset,limit:r.searchParams.limit});if(i.type==="error")throw i;return i.allImages}});return r.render(d)},W=240,B=20,F=4,m=192,g=k(q),Z=()=>{const r=w(),d=E(),i=g.useNavigate(),{page:c}=g.useSearch(),{containerRef:p,limit:n}=A({minItemWidth:W,gap:B,rows:F}),j=b({mutationFn:Q,onSuccess:s=>{if(s.type==="error")throw s;d.invalidateQueries({queryKey:x.images.listAll(),exact:!1})}}),y=async s=>{await r("Are you really sure?")&&j.mutate(s)},I=s=>s===1?"1 reference":`${s} references`;return e.jsx("div",{ref:p,children:e.jsx(T,{fallback:e.jsx(o,{title:"Images",variant:"default",heading:e.jsx(l,{width:136,height:24,className:"rounded-full"}),description:e.jsx(l,{width:232,height:16,className:"rounded-full"}),children:e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx("div",{className:"grid-auto-cards grid gap-4",children:Array.from({length:3},(s,t)=>e.jsxs(f,{flush:!0,children:[e.jsx("div",{className:"flex items-center justify-center bg-muted/25 p-3",style:{height:m},children:e.jsx(l,{width:"100%",height:m-24,className:"rounded-[12px]"})}),e.jsxs("div",{className:"flex items-center justify-between gap-3 border-t border-border-subtle px-3 py-2.5",children:[e.jsx(l,{width:92,height:14,className:"rounded-full"}),e.jsx(l,{width:32,height:32,className:"rounded-[12px]"})]})]},t))})})}),errorTitle:"Failed to load images",errorDescription:"Retry loading uploaded image metadata",resetKeys:[c,n],children:e.jsx(U,{searchParams:{offset:(c-1)*n,limit:n},render:({images:s,totalCount:t})=>{const u=t>0?`Images (${t})`:void 0,h="Review and manage the images you uploaded inside notes";return s.length===0?e.jsx(o,{title:"Images",variant:"default",heading:u,description:h,children:e.jsx(_,{title:"There are no images",description:"Upload an image in any note and it will appear here"})}):e.jsx(o,{title:"Images",variant:"default",heading:u,description:h,children:e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx("div",{className:"grid-auto-cards grid gap-4",children:s.map(a=>e.jsxs(f,{flush:!0,children:[e.jsx(G,{to:M,params:{id:a.id},className:"focus-ring-soft block overflow-hidden rounded-t-[18px] outline-none",children:e.jsx("div",{className:"flex items-center justify-center bg-muted/25 p-3",style:{height:m},children:e.jsx(K,{className:"h-full w-full rounded-[12px] object-contain transition-transform duration-200 hover:scale-[1.02]",src:a.url,alt:a.id})})}),e.jsxs("div",{className:"flex items-center justify-between gap-3 border-t border-border-subtle px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2 text-fg-secondary",children:[e.jsx(C,{className:"h-3.5 w-3.5 shrink-0 text-fg-tertiary"}),e.jsx(R,{as:"span",variant:"meta",weight:"medium",tone:"secondary",className:"truncate",children:I(a.referenceCount)})]}),e.jsx(S,{variant:"ghost",size:"icon-sm",disabled:a.referenceCount>0,onClick:()=>y(a.id),children:e.jsx(D,{className:"h-4 w-4"})})]})]},a.id))}),t&&n<t&&e.jsx(P,{page:c,last:Math.ceil(t/n),onChange:a=>{i({search:N=>({...N,page:a})})}})]})})}})})})};export{Z as default};