843986d5c2
feat(database-view): admin UI and create-database slash command
...
Adds two new entry points around the bridge-backed database view:
- /database admin modal to manage fields (field-admin-modal)
- slash command to create a database from the editor
(create-database-modal + create-database-slash)
Wires the new components into the editor slash menu and the
database-view module index.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 09:54:06 +00:00
23a85267bf
feat(acadenice): add sync blocks for cross-page content sharing — R4.2
...
Implements Notion-style sync blocks: a Tiptap node whose content is shared
across N pages. Editing via the Hocuspocus overlay propagates to all instances
via Yjs collab + SSE broadcast (EventEmitter2 bus).
Server: DB migration, NestJS module (CRUD + BFS cycle detection + broadcast),
Hocuspocus persistence extension extended for sync-block-* docs, 3 new RBAC
permissions (sync_blocks:create/edit/delete), seeded to Admin/Editor/Member.
Client: SyncBlockExtension (Tiptap node), SyncBlockNodeView (NodeView +
Mantine Modal overlay + SSE hook), /sync-block slash command, service client.
Tests: 32 server Jest + 18 client Vitest, all green.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 11:40:12 +02:00
4cf04080cf
fix(acadenice): resolve test suite failures across R3 sub-blocks (Patch 017)
...
- Convert 17 server spec files from vitest to Jest (vi -> jest globals)
- Add jest.mock stubs for ESM-only prosemirror/html and collaboration modules
- Fix Zod v4 strict UUID validation failures in test fixtures (version byte [1-8] required)
- Add JwtAuthGuard.overrideGuard in all controller specs that lacked it
- Fix jest.Mock type inference (ReturnType<typeof jest.fn> -> jest.Mock) to prevent 'never' arg errors
- Delete vitest.config.ts (CJS), keep vitest.config.mts (ESM-compatible) on client
- Add global mocks for @excalidraw/excalidraw and @/main.tsx in client test-setup
- Result: client 38/38 suites 313/313 tests, server acadenice 21/21 suites 210/210 tests, 0 TS errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 10:36:19 +02:00
614533f228
feat(acadenice): add page templates system for R3.6 (65 tests, Patch 014)
...
- DB migration: acadenice_template table (JSONB content, is_built_in, is_workspace_default, usage_count)
- 3 new permissions: templates:read|create|manage — catalogue goes to 26
- NestJS AcadeniceTemplatesModule: TemplateService (CRUD + instantiate + setDefault), TemplateSeedService (5 built-ins), TemplatesController (7 endpoints)
- Built-in seed: Meeting Note, Project Brief, Daily Standup, Weekly Review, Empty Page — clone-then-edit pattern
- Frontend: templates-admin gallery (TemplatesPage /settings/templates, TemplateGallery, TemplateCard, TemplateForm)
- Frontend: TemplatePickerModal — opened via "New page from template" sidebar dropdown + /template slash command (custom DOM event)
- i18n: 39 keys FR + EN
- Tests: 40 backend (22 service + 18 controller) + 25 frontend (9 client + 9 page + 7 card) = 65 tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 02:12:58 +02:00
9be979ee90
feat(acadenice): add dual editor (WYSIWYG + markdown source) for R3.4
...
Custom bidirectional markdown converter (no new deps) with full round-trip
support for database-view, wikilink, mention nodes. DualEditor component wraps
PageEditor with a toolbar toggle (WYSIWYG<->markdown), lossy-switch modal, and
localStorage persistence per page. 77 tests covering 24 round-trip cases + 4
custom nodes + 9 edge cases. i18n FR+EN.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 01:18:29 +02:00
4e2af88144
feat(acadenice): add custom slash commands system for R3.3
...
Workspace admins can declare dynamic /keyword commands via settings UI
without recompile. Five action types: insert-template, insert-table,
embed-url, run-webhook, insert-snippet. Webhook security: HTTPS-only,
ACADENICE_WEBHOOK_ALLOWLIST allowlist, 10s timeout, no redirects, 1MB cap.
New permission slash_commands:manage added to catalogue (23 perms) and
seeded to Owner + Admin roles.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 01:06:11 +02:00
2fc310a2f2
feat(acadenice): add bidirectional backlinks + wikilinks for R3.2
...
- Migration: acadenice_backlink table (source/target/link_type/excerpt/workspace)
with 3 indexes and UNIQUE(source,target,type) constraint. Up+down.
- Backend module AcadeniceBacklinksModule:
BacklinkParserService: walks Tiptap JSON, extracts wikilinks/mentions/databaseView.
BacklinkIndexerService: idempotent delete-then-insert per page save.
BacklinkService: permission-aware query (space_members / public visibility).
BacklinksController: GET /api/acadenice/pages/:pageId/backlinks (JWT auth).
PageContentUpdatedListener: OnEvent handler for collab saves -> async reindex.
Tests: 16 Vitest specs (parser/indexer/service/controller).
- PersistenceExtension patch: emits ACADENICE_PAGE_CONTENT_UPDATED_EVENT after
each collab onStoreDocument (fire-and-forget, no impact on save path).
- CoreModule patch: imports AcadeniceBacklinksModule.
- Frontend WikilinkExtension: Tiptap inline atom node, [[Title]] / [[Title|alias]],
Suggestion popup (reuses mention pattern + floating-ui), ReactNodeView with
broken-link state, insertWikilink command.
Tests: 9 Vitest specs (schema/attrs/commands/HTML parse+render).
- LinkedReferencesPanel: React Query useBacklinks(pageId, staleTime=30s),
accordion grouped by link_type, excerpt preview, navigate to source page.
Tests: 7 Vitest specs (loading/error/empty/render/navigate/groups).
- extensions.ts patch: + WikilinkExtension in mainExtensions[].
- full-editor.tsx patch: + LinkedReferencesPanel below editor (Divider + panel).
- i18n: 11 keys added in en-US and fr-FR (backlinks.* + wikilink.*).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:51:02 +02:00
71c2abad8a
feat(client): add database-view Tiptap extension for R3.1.c
...
- Tiptap Node extension (database-view) with attrs tableId/viewId/viewType/bridgeUrl
- NodeViewWrapper dispatches on viewType: grid/table -> TableRenderer, other -> PlaceholderRenderer
- TableRenderer (HTML table, TanStack Table v8 migration-ready - dep not yet installed)
- InsertDatabaseModal (Mantine, 2-step: table -> view selection)
- useDatabaseRealtimeUpdates SSE hook (EventSource + exponential backoff + React Query invalidation)
- bridge-client.ts (axios wrapper, per-origin singleton, cookie Bearer passthrough)
- Slash command /database registered in menu-items CommandGroups
- DatabaseViewExtension wired in mainExtensions array
- i18n: 22 keys added in en-US and fr-FR
- 41 Vitest tests across 5 suites (extension schema, component dispatch, renderer states, modal steps, SSE hook)
Upstream patches: extensions.ts (+2 lines), menu-items.ts (+4 lines), 2 translation files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:07:33 +02:00
Philip Okugbe
dbe6c2d6ba
feat: A11y fixes ( #2148 )
2026-05-04 21:21:37 +01:00
Sarthak Chaturvedi
1d2486455f
fix: prevent browser tab fallback in editor ( #2123 )
2026-05-01 13:58:51 +01:00
Philip Okugbe
09c69d7a0f
feat: properly preserve table width ( #2143 )
2026-05-01 00:49:31 +01:00
Peter Tripp
b16f1e5a55
fix: ctrl-k behavior on macOS ( #2052 )
...
* Improve cmd-k / ctrl-k behavior
Use cmd-k on macOS/iOS for search and keep ctrl-k everywhere else.
Fixes a bug where ctrl-k on macOS, which cuts to the end of the line,
was also triggering the search prompt.
* comment submit: cmd-enter (mac) / ctrl-enter (win/linux)
2026-05-01 00:36:40 +01:00
Philip Okugbe
24be90b95f
fix: duplicate PDF uploads ( #2139 )
2026-04-29 10:01:47 +01:00
Philipinho
66c70c0e76
fix print
2026-04-14 00:40:17 +01:00
Philip Okugbe
bd68e47e03
feat(ee): page verification workflow ( #2102 )
...
* feat: page verification workflow
* feat: refactor page-verification
* sync
* fix type
* fix
* fix
* notification icon
* use full word
* accept .license file
* - update templates
- update migration and notification
* fix copy
* update audit labels
* sync
* add space name
2026-04-13 20:20:34 +01:00
Philip Okugbe
d42091ccb1
feat: favorites ( #2103 )
...
* feat: favorites and templates(ee)
* rename migrations
* fix sidebar
* cleanup tabs
* fix
* turn off templates
* cleanup
* uuid validation
2026-04-12 22:06:25 +01:00
Philip Okugbe
57efb91bd3
feat(ee): ai chat ( #2098 )
...
* feat: ai chat
* feat: ai chat
* sync
* cleanup
* view space button
2026-04-10 19:23:47 +01:00
Philip Okugbe
895c1817ae
feat: bug fixes ( #2084 )
...
* handle enter in inline code
* fix: duplicate comment cache
* track link nodes (backlinks)
* fix en-US translation
* fix internal a-links
* overrides
* 0.71.1
2026-04-05 13:45:36 +01:00
Philip Okugbe
879aa2c3d8
feat: page update notifications ( #2074 )
...
* feat: watchers notification and email preferences
* fix: email copy
* digests
* clean up
* fix
* clean up
* move backlinks queue-up to history processor
* fix
* fix keys
* feat: group notifications
* filter
* adjust email digest window
2026-03-31 16:03:59 +01:00
Philip Okugbe
a062f7a165
fix: enhance confluence importer ( #2072 )
...
* fix placeholder
* min resize dimensions
* fix media links
* fix
2026-03-30 13:16:40 +01:00
Philipinho
5cea30cc5c
fix markdown paste
2026-03-29 16:11:21 +01:00
Philip Okugbe
412962204c
fix: editor fixes ( #2067 )
...
* autojoiner
* fix marked
* return clipboardTextSerializer as markdown
* fix clipboardTextSerializer for single lines
* cleanup two preceeding spaces in ordered lists item
* fix extra paragraph in task list
* don't zip sinple page exports
2026-03-29 02:19:09 +01:00
Olivier Lambert
a42ac3d450
fix: strip trailing whitespace-only paragraphs from pasted content ( #2050 )
2026-03-28 22:26:47 +00:00
Philip Okugbe
3829b6cbef
feat(ee): viewer comments ( #2060 )
2026-03-28 19:32:52 +00:00
Philipinho
859f16740b
tooltip portal
2026-03-28 19:19:00 +00:00
Philip Okugbe
7981ef462e
feat(editor): audio and PDF nodes ( #2064 )
...
* use local resizable
* feat: aduio
* support audio imports
* feat: use confluence real file names
* cleanup
* error handling
* hide notice
* add audio
* fix pulse
* Fix import and export
* unify pulse
* hide in readonly mode
* keywords
* keyword
* translations
* better sort
* feat: PDF embed
* cleanup
* remove audio menu
* open active
* hide focus on readonly mode
* increase iframe default dimension
2026-03-28 17:33:29 +00:00
Philip Okugbe
fa4872e89e
fix(deps): package updates ( #2041 )
...
* update
* overrides
* override
* fix page update mutation
* fix
* cleanup
* loader
* fix excalidraw package
* override
* fix regex
2026-03-25 10:07:01 +00:00
Philipinho
2678c4e279
fix
2026-03-16 00:32:30 +00:00
Philipinho
b0bde4b375
feat: replace link popover with dedicated bubble menu
2026-03-16 00:26:03 +00:00
Philipinho
724e37d5b7
revert
2026-03-15 23:03:32 +00:00
Philip Okugbe
7520c329d0
fix notion importer ( #2027 )
...
* fix notion importer
* fix link selector on mobile
2026-03-15 22:06:40 +00:00
Philip Okugbe
89b94e5d19
feat: refactor link menu ( #2025 )
...
* link markview - WIP
* WIP
* feat: refactor links
* cleanup
2026-03-15 17:08:59 +00:00
Philip Okugbe
1fdee33206
feat(editor): add auto-save and unsaved changes protection for diagrams ( #2011 )
...
* feat(editor): add auto-save and unsaved changes protection for diagrams
* 30 seconds
2026-03-13 17:58:29 +00:00
Philip Okugbe
7b69727a30
fix shared page mention view for non-logged in users ( #2008 )
2026-03-11 19:25:27 +00:00
Philipinho
fcffa3dfa0
fix media
2026-03-04 12:08:08 +00:00
Philip Okugbe
bea1637519
fix: image fallback regression ( #1989 )
...
* fix: image fallback regression
* fix image preview on upload
* fix image loading
2026-03-04 11:51:43 +00:00
Olivier Lambert
f5d794220e
fix: resolve keystroke input being swallowed after link in Firefox ( #1922 )
...
* fix: resolve keystroke input being swallowed after link in Firefox
In Firefox, when the cursor is at the right boundary of a link mark,
contenteditable inserts new text inside the <a> element. ProseMirror
then rejects the DOM mutation because the link mark has inclusive: false,
causing keystrokes to be silently swallowed. Unlike Chrome, Firefox also
does not fire ProseMirror's handleTextInput callback in this state.
This adds a ProseMirror plugin that intercepts printable character
keydowns at link mark boundaries and programmatically inserts the text
without the link mark, bypassing Firefox's native contenteditable
behavior entirely.
Fixes #1773
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: resolve keystroke input being swallowed before a link in Firefox
Extend the linkBoundaryInput plugin to also handle the left boundary
of links, where the cursor is just before a link (e.g. at the start
of a line). Firefox inserts text inside the <a> element in this case
too, causing ProseMirror to reject the mutation.
Fixes #1748
2026-03-03 17:19:03 +00:00
faruk-agentiqus
a3c1c6cccd
fix(editor): disable slash and emoji menus inside code blocks ( #1897 )
...
The slash command menu (/) and emoji menu (:) were incorrectly
triggering when typing inside code blocks, breaking keyboard
navigation and confusing users who type paths like /work or
symbols like := in their code.
Added an `allow` function to both SlashCommand and EmojiCommand
extensions that checks if the cursor is inside a code block and
disables the menu accordingly.
Closes #1730
2026-03-03 16:51:00 +00:00
Philipinho
568dd4c321
fix headings
2026-03-03 14:17:51 +00:00
Philipinho
9f4728e279
fix
2026-03-03 00:08:20 +00:00
Philip Okugbe
a3fd79dae8
fix: spreadsheets paste ( #1982 )
2026-03-02 17:37:56 +00:00
Philipinho
cf43e2b4fe
feat: enhance embed resizer
2026-03-02 02:45:13 +00:00
Philipinho
614baf153b
fix: show resize handle if node is selected
2026-03-02 01:57:06 +00:00
Philipinho
d5e4b8bb59
fix ui
2026-03-01 20:58:04 +00:00
Philip Okugbe
60848ea903
feat(ee): mcp ( #1976 )
...
* feat: MCP
* sync
* sync
2026-03-01 18:37:39 +00:00
Philip Okugbe
2309d1434b
feat: support cross-space page mentions ( #1979 )
2026-03-01 17:14:10 +00:00
Philip Okugbe
fc0997fd90
feat: editor attachment paste handling ( #1975 )
...
* reupload attachments if uploaded to a different page
* use image dimensions on paste/DnD
* tooltips withinPortal:false
* isolating attribute
2026-02-28 01:24:19 +00:00
Philipinho
df64de5306
fix focus
2026-02-27 01:38:43 +00:00
Philip Okugbe
ea44468fad
feat: editor inline status node ( #1973 )
...
* inline status node
* fix alignment
* fix
* typed storage
* fix math block popup on select all
2026-02-27 01:34:03 +00:00
Philip Okugbe
59e945562d
feat(ee): page-level access/permissions ( #1971 )
...
* Add page_hierarchy table
* feat(ee): page-level permissions
* pagination
* rename migration
fixes
* fix
* tabs
* fix theme
* cleanup
* sync
* page permissions notification
* other fixes
* sharing disbled
* fix column nodes
* toggle error handling
2026-02-26 19:49:10 +00:00