Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
e27ce5a
docs(exploration): research pages editor interface improvements
crs48 May 28, 2026
d034aad
fix(editor): add heading markdown backspace semantics
crs48 May 28, 2026
6770621
fix(editor): restore custom heading commands
crs48 May 28, 2026
21af140
feat(electron): improve page editor focus surface
crs48 May 28, 2026
8f46a94
fix(editor): restore custom block toolbar commands
crs48 May 28, 2026
ff92023
fix(editor): prevent ready callback render loop
crs48 May 28, 2026
a032701
feat(electron): add page editor focus targets
crs48 May 28, 2026
2c167ca
fix(editor): add blockquote markdown backspace semantics
crs48 May 28, 2026
6f878e2
fix(editor): add list markdown backspace semantics
crs48 May 28, 2026
f6529bd
fix(editor): add code fence backspace semantics
crs48 May 28, 2026
6c2bbce
feat(editor): add toolbar surface policy
crs48 May 28, 2026
f76929f
test(crypto): stabilize shared-load performance checks
crs48 May 28, 2026
d87a2f6
feat(editor): use accessible toolbar icons
crs48 May 28, 2026
33f6004
feat(editor): add markdown import export bridge
crs48 May 31, 2026
c822989
feat(editor): normalize markdown clipboard content
crs48 May 31, 2026
4b25fee
feat(editor): codify markdown token editing contract
crs48 May 31, 2026
93b8a7c
feat(editor): serialize xnet embeds as markdown
crs48 May 31, 2026
d6eb95c
fix(editor): relax inline markdown mark boundaries
crs48 May 31, 2026
6e9c92f
feat(editor): add explicit editor content modes
crs48 May 31, 2026
e9377cd
feat(editor): preserve authored xnet markdown
crs48 May 31, 2026
fe212f5
feat(data): centralize embed registry policy
crs48 May 31, 2026
aa94928
feat(editor): add generic rich link cards
crs48 May 31, 2026
b071f69
feat(editor): declare embed renderer modes
crs48 May 31, 2026
3a1fd51
feat(editor): improve database embed selection
crs48 May 31, 2026
6935bd5
feat(editor): add page embed blocks
crs48 May 31, 2026
1c2214d
test(editor): cover blocked embed origins
crs48 May 31, 2026
e18e0f8
docs(exploration): record embed smoke verification
crs48 May 31, 2026
9ff6734
docs(exploration): record full editor test pass
crs48 May 31, 2026
fec1604
feat(canvas): add static page previews
crs48 May 31, 2026
0e4bf38
test(canvas): budget many page card islands
crs48 May 31, 2026
8d647fe
fix(canvas): protect inline editor toolbar interactions
crs48 May 31, 2026
74562c6
feat(editor): add shared editor surface wrapper
crs48 May 31, 2026
80cd8d3
test(editor): cover toolbar click stability
crs48 May 31, 2026
3a5b01d
docs(exploration): record editor surface browser smoke
crs48 May 31, 2026
1881801
feat(pages): focus editor body from title
crs48 May 31, 2026
8b77e71
fix(editor): label editor surfaces and toolbars
crs48 May 31, 2026
ebf5413
fix(editor): add crash-safe editor surface fallback
crs48 May 31, 2026
01d0f94
feat(editor): complete toolbar command interactions
crs48 May 31, 2026
02b0556
feat(pages): return focus to title from empty body
crs48 May 31, 2026
b37740f
test(editor): verify focused canvas toolbar visibility
crs48 May 31, 2026
9b4a84e
test(editor): cover slash command insert handlers
crs48 May 31, 2026
645bf84
test(editor): cover YouTube paste auto embed
crs48 May 31, 2026
912902b
feat(editor): enforce embed iframe policy
crs48 May 31, 2026
ecbfefb
test(editor): cover database embed view modes
crs48 May 31, 2026
d842fb9
docs(exploration): record embed policy browser smoke
crs48 May 31, 2026
ee3fff7
feat(editor): wire page reference navigation
crs48 May 31, 2026
ba55134
feat(editor): make smart references editable
crs48 May 31, 2026
46df71c
test(editor): cover slash menu trigger filtering
crs48 May 31, 2026
2251281
fix(editor): improve caret selection contrast
crs48 May 31, 2026
c6782c3
feat(canvas): use compact embed renderers
crs48 May 31, 2026
7cca57b
test(editor): preserve custom embeds on reload
crs48 May 31, 2026
2c50c48
test(editor): cover structured task extraction
crs48 May 31, 2026
9a5483d
perf(editor): lazy mount media iframes
crs48 May 31, 2026
172f5ea
fix(editor): mount visible lazy embeds
crs48 May 31, 2026
918c89c
test(editor): bound large markdown performance
crs48 May 31, 2026
a946189
test(editor): bound large document typing
crs48 May 31, 2026
f18872c
test(editor): scope selection decorations
crs48 May 31, 2026
fd66996
test(editor): bound persisted page mount
crs48 May 31, 2026
36c4f70
test(editor): cover collaborative page editing
crs48 May 31, 2026
e589aed
docs(editor): record rollout validation checkpoint
crs48 May 31, 2026
bb41890
feat(editor): add rollout fallback switch
crs48 May 31, 2026
c8178dd
feat(editor): improve toolbar discoverability
crs48 May 31, 2026
164472f
feat(editor): show toolbar shortcut tooltips
crs48 May 31, 2026
fe9c0ba
feat(editor): replace link prompt with toolbar popover
crs48 May 31, 2026
88be8a2
feat(editor): add reference toolbar popover
crs48 May 31, 2026
43120e6
feat(editor): add database toolbar popover
crs48 May 31, 2026
24fb73d
feat(editor): add media toolbar popover
crs48 May 31, 2026
fb8d2fd
test(editor): cover slash menu escape behavior
crs48 May 31, 2026
8e458ae
feat(editor): route link shortcut to toolbar popover
crs48 May 31, 2026
44b93ef
feat(editor): add promptless slash setup cards
crs48 Jun 1, 2026
08112c4
feat(editor): add database reference chips
crs48 Jun 1, 2026
9dbeaa8
feat(editor): add document compatibility loader
crs48 Jun 1, 2026
df179f8
test(canvas): stabilize electron page smoke
crs48 Jun 1, 2026
29d4834
test(editor): lock new page rollout mode
crs48 Jun 1, 2026
7f61949
docs(editor): mark all pages rollout validated
crs48 Jun 1, 2026
8b22431
docs(exploration): mark pages editor exploration complete
crs48 Jun 1, 2026
3f9d99f
feat(editor): improve inline markdown cursor boundaries
crs48 Jun 1, 2026
dbbeeae
fix(editor): unwrap inline markdown delimiters on delete
crs48 Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
.vscode/
*.swp
*.swo
.playwright-cli/
.playwright-mcp/

# Build artifacts
Expand Down
4 changes: 3 additions & 1 deletion apps/electron/src/main/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,9 @@ async function createWindow() {
if (process.env.NODE_ENV === 'development') {
const port = process.env.VITE_PORT || '5177'
mainWindow.loadURL(`http://localhost:${port}`)
mainWindow.webContents.openDevTools()
if (process.env.XNET_TEST_BYPASS !== 'true') {
mainWindow.webContents.openDevTools()
}
} else {
mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { TaskMentionSuggestion } from '@xnetjs/editor/react'
import { useCanvasThemeTokens } from '@xnetjs/canvas'
import { PageSchema } from '@xnetjs/data'
import {
RichTextEditor,
EditorSurface,
buildTaskMentionSuggestions,
useFileDownload,
useFileUpload,
Expand All @@ -28,7 +28,7 @@ type CanvasInlinePageSurfaceProps = {
onSourceNodeMutated?: () => void
}

type EditorExtensions = NonNullable<React.ComponentProps<typeof RichTextEditor>['extensions']>
type EditorExtensions = NonNullable<React.ComponentProps<typeof EditorSurface>['extensions']>

function useStableTitle(
initialTitle: string,
Expand Down Expand Up @@ -189,11 +189,12 @@ export function CanvasInlinePageSurface({
Loading page surface...
</div>
) : (
<RichTextEditor
<EditorSurface
surfaceMode="canvas-inline"
ydoc={doc}
field="content"
placeholder={variant === 'note' ? 'Write a note...' : 'Start writing...'}
showToolbar={false}
showToolbar={true}
toolbarMode="desktop"
className="min-h-full [&_.ProseMirror]:select-text [&_[contenteditable='true']]:select-text"
awareness={awareness ?? undefined}
Expand Down
Loading
Loading