Skip to content

Diagramming power-up#14720

Open
spmp wants to merge 1 commit intotoeverything:canaryfrom
spmp:feature/advanced-diagramming-capability-merged
Open

Diagramming power-up#14720
spmp wants to merge 1 commit intotoeverything:canaryfrom
spmp:feature/advanced-diagramming-capability-merged

Conversation

@spmp
Copy link
Copy Markdown

@spmp spmp commented Mar 25, 2026

Diagramming power-up - Drawio like diagramming native to AFFiNE

I built this to make AFFiNE edgeless viable for my day-to-day diagramming workflow (draw.io-like use cases) without switching tools for text, structure, and export/import.

I know this is a large change set and that reviewing it will require real effort. I want to explicitly acknowledge that up front.

Please see #14471 for a detailed view.

image

What this PR adds

  • Grid and snapping improvements
    • Grid toggle in zoom menu
    • Snap-to-grid and snap-to-guides toggles
    • Adjustable grid size
    • Connector endpoint dragging snaps to grid
  • Connector enhancements
    • Rounded connector style
    • Segment/waypoint behavior improvements
    • Waypoint add/clear/subsumption
    • Connector jumps
    • Better continuity of connector style defaults
  • Shape and editing upgrades
    • Shape browser + expanded shape libraries/categories
    • Edge nodes + edge-node connector creation
    • Dotted stroke style, palettes, gradients
    • Properties panel improvements (geometry/style/endpoints/radius/aspect lock)
    • Flip behavior and connector/anchor preservation
  • Advanced diagram structures
    • Container/collapsible behavior
    • Mindmap hierarchical visibility behavior
  • Frame and export/import
    • Frame sizing variants
    • PNG metadata embed/detect/import flow
    • Frame export and related page export support
    • Page export to MD and HTML include PNG's with metadata, import from MD reinstates Frames

Validation status

I’ve run extensive test work across unit/integration/e2e while building this and tracked feature coverage + known failures in the related GitHub discussion thread (including rerun notes and failing cases).

There are still failures in the broader suite; some appear to reproduce on upstream/canary as baseline instability, not only from this branch.

Maintainer expectations

I understand this is not a “quick review” PR.
If you’re open to it, I can do whatever reduces your review burden:

  • split this into smaller PRs in the order you prefer,
  • produce a tighter changelog by subsystem,
  • isolate high-confidence, low-risk slices first,
  • run additional targeted validation you request and post results.

I’m committed to working through review feedback with you, including iterative follow-up PRs until this is in a shape you’re comfortable with.

Vibe AF

Almost entirely vibe coded with Claude and Codex

Enjoy

🤗

@spmp spmp requested a review from a team as a code owner March 25, 2026 01:55
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Mar 25, 2026

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 25, 2026

Important

Review skipped

Too many files!

This PR contains 232 files, which is 82 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f24c7291-ab8b-467d-9111-069511fd7ed6

📥 Commits

Reviewing files that changed from the base of the PR and between 166372c and 794dfad.

⛔ Files ignored due to path filters (13)
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/edge-nodes.spec.ts/edge-nodes-cloud-anchors-follow-cloud-geometry-locations-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/frame.spec.ts/frame-frame-should-have-title-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/grid-menu.spec.ts/edgeless-grid-menu-toggles-grid-visibility-and-emits-event-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/grid-menu.spec.ts/edgeless-grid-menu-toggles-snap-settings-and-emits-events-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/last-props.spec.ts/apply-last-props-shapes-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/shape-browser.spec.ts/edgeless-shape-browser-panel-drawio-library-categories-appear-after-base-ordering-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/shape-dom.spec.ts/Shape-rendering-with-DOM-renderer-horizontal-flip-keeps-text-direction-for-all-known-shapes-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/shape-dom.spec.ts/Shape-rendering-with-DOM-renderer-vertical-flip-keeps-text-direction-for-all-known-shapes-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/tools.spec.ts/default-tool-block-drag-moving-1.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/tools.spec.ts/default-tool-block-drag-moving-2.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/tools.spec.ts/default-tool-block-drag-moving-3.png is excluded by !**/*.png
  • blocksuite/integration-test/src/__tests__/edgeless/__screenshots__/tools.spec.ts/default-tool-block-drag-moving-4.png is excluded by !**/*.png
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (232)
  • blocksuite/affine/all/package.json
  • blocksuite/affine/all/src/extensions/view.ts
  • blocksuite/affine/all/tsconfig.json
  • blocksuite/affine/blocks/code/src/code-block-service.ts
  • blocksuite/affine/blocks/frame/src/adapters/extension.ts
  • blocksuite/affine/blocks/frame/src/adapters/html.ts
  • blocksuite/affine/blocks/frame/src/adapters/markdown.ts
  • blocksuite/affine/blocks/frame/src/clipboard/create-elements.ts
  • blocksuite/affine/blocks/frame/src/frame-toolbar.ts
  • blocksuite/affine/blocks/frame/src/index.ts
  • blocksuite/affine/blocks/frame/src/metadata.ts
  • blocksuite/affine/blocks/frame/src/store.ts
  • blocksuite/affine/blocks/image/package.json
  • blocksuite/affine/blocks/image/src/utils.ts
  • blocksuite/affine/blocks/image/tsconfig.json
  • blocksuite/affine/blocks/note/src/components/edgeless-note-background.ts
  • blocksuite/affine/blocks/root/src/edgeless/clipboard/canvas.ts
  • blocksuite/affine/blocks/root/src/edgeless/clipboard/command.ts
  • blocksuite/affine/blocks/root/src/edgeless/configs/toolbar/more.ts
  • blocksuite/affine/blocks/root/src/edgeless/configs/toolbar/properties-modal.ts
  • blocksuite/affine/blocks/root/src/edgeless/edgeless-root-block.ts
  • blocksuite/affine/blocks/surface-ref/src/adapters/extension.ts
  • blocksuite/affine/blocks/surface-ref/src/adapters/html.ts
  • blocksuite/affine/blocks/surface-ref/src/adapters/markdown.ts
  • blocksuite/affine/blocks/surface-ref/src/configs/toolbar.ts
  • blocksuite/affine/blocks/surface-ref/src/icons.ts
  • blocksuite/affine/blocks/surface-ref/src/store.ts
  • blocksuite/affine/blocks/surface-ref/src/surface-ref-block.ts
  • blocksuite/affine/blocks/surface/src/adapters/markdown/markdown.ts
  • blocksuite/affine/blocks/surface/src/extensions/crud-extension.ts
  • blocksuite/affine/blocks/surface/src/extensions/edit-props-middleware-builder.ts
  • blocksuite/affine/blocks/surface/src/utils/get-bg-grip-gap.ts
  • blocksuite/affine/components/src/color-picker/color-panel.ts
  • blocksuite/affine/components/src/color-picker/icons.ts
  • blocksuite/affine/components/src/edgeless-line-styles-panel/line-styles-panel.ts
  • blocksuite/affine/components/src/edgeless-shape-color-picker/color-picker.ts
  • blocksuite/affine/gfx/brush/package.json
  • blocksuite/affine/gfx/brush/src/toolbar/components/pen/pen-menu.ts
  • blocksuite/affine/gfx/brush/tsconfig.json
  • blocksuite/affine/gfx/connector/package.json
  • blocksuite/affine/gfx/connector/src/__tests__/jumps.unit.spec.ts
  • blocksuite/affine/gfx/connector/src/__tests__/rounded-path.unit.spec.ts
  • blocksuite/affine/gfx/connector/src/__tests__/shape-flip.unit.spec.ts
  • blocksuite/affine/gfx/connector/src/__tests__/waypoints.unit.spec.ts
  • blocksuite/affine/gfx/connector/src/components/connector-handle.ts
  • blocksuite/affine/gfx/connector/src/connector-manager.ts
  • blocksuite/affine/gfx/connector/src/connector-tool.ts
  • blocksuite/affine/gfx/connector/src/connector-watcher.ts
  • blocksuite/affine/gfx/connector/src/fix.py
  • blocksuite/affine/gfx/connector/src/fix_types.py
  • blocksuite/affine/gfx/connector/src/index.ts
  • blocksuite/affine/gfx/connector/src/jump-calculator.ts
  • blocksuite/affine/gfx/connector/src/renderer/dom-renderer.ts
  • blocksuite/affine/gfx/connector/src/renderer/element-renderer.ts
  • blocksuite/affine/gfx/connector/src/renderer/utils.ts
  • blocksuite/affine/gfx/connector/src/text/edgeless-connector-label-editor.ts
  • blocksuite/affine/gfx/connector/src/text/text.ts
  • blocksuite/affine/gfx/connector/src/toolbar/config.ts
  • blocksuite/affine/gfx/connector/src/toolbar/connector-dense-menu.ts
  • blocksuite/affine/gfx/connector/src/toolbar/connector-menu.ts
  • blocksuite/affine/gfx/connector/src/toolbar/connector-tool-button.ts
  • blocksuite/affine/gfx/connector/src/toolbar/icons.ts
  • blocksuite/affine/gfx/connector/src/utils/__tests__/connector-segment.unit.spec.ts
  • blocksuite/affine/gfx/connector/src/utils/connector-segment.ts
  • blocksuite/affine/gfx/connector/src/view/view.ts
  • blocksuite/affine/gfx/connector/tsconfig.json
  • blocksuite/affine/gfx/connector/vitest.config.ts
  • blocksuite/affine/gfx/pointer/src/snap/snap-overlay.ts
  • blocksuite/affine/gfx/shape/package.json
  • blocksuite/affine/gfx/shape/src/__tests__/palette-memory.unit.spec.ts
  • blocksuite/affine/gfx/shape/src/__tests__/palettes.unit.spec.ts
  • blocksuite/affine/gfx/shape/src/__tests__/shape-browser-library.unit.spec.ts
  • blocksuite/affine/gfx/shape/src/components/shape-browser-panel.ts
  • blocksuite/affine/gfx/shape/src/draggable/index.ts
  • blocksuite/affine/gfx/shape/src/draggable/palette-memory.ts
  • blocksuite/affine/gfx/shape/src/draggable/palettes.ts
  • blocksuite/affine/gfx/shape/src/draggable/shape-menu.ts
  • blocksuite/affine/gfx/shape/src/draggable/shape-tool-button.ts
  • blocksuite/affine/gfx/shape/src/effects.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape-dom/index.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/actor.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/callout.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/cloud.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/cube.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/cylinder.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/data-storage.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/diamond.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/document.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/ellipse.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/hexagon.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/index.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/internal-storage.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/logic-and.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/logic-or.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/mindmap-branch.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/note.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/parallelogram.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/path-shape.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/paths.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/rect.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/stencil-shape.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/step.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/tape.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/trapezoid.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/triangle-right.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/triangle.ts
  • blocksuite/affine/gfx/shape/src/element-renderer/shape/utils.ts
  • blocksuite/affine/gfx/shape/src/element-view.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/index.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/library-catalog.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/library-stencils.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/stencil-map.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/stencil-utils.ts
  • blocksuite/affine/gfx/shape/src/imported-shapes/stencils.ts
  • blocksuite/affine/gfx/shape/src/index.ts
  • blocksuite/affine/gfx/shape/src/overlay/factory.ts
  • blocksuite/affine/gfx/shape/src/overlay/hexagon.ts
  • blocksuite/affine/gfx/shape/src/overlay/parallelogram.ts
  • blocksuite/affine/gfx/shape/src/overlay/path-shape.ts
  • blocksuite/affine/gfx/shape/src/overlay/shape-overlay.ts
  • blocksuite/affine/gfx/shape/src/overlay/stencil-shape.ts
  • blocksuite/affine/gfx/shape/src/overlay/step.ts
  • blocksuite/affine/gfx/shape/src/overlay/trapezoid.ts
  • blocksuite/affine/gfx/shape/src/overlay/triangle-right.ts
  • blocksuite/affine/gfx/shape/src/overlay/utils.ts
  • blocksuite/affine/gfx/shape/src/shape-tool.ts
  • blocksuite/affine/gfx/shape/src/text/edgeless-shape-text-editor.ts
  • blocksuite/affine/gfx/shape/src/toolbar/__tests__/shape-menu-config.unit.spec.ts
  • blocksuite/affine/gfx/shape/src/toolbar/config.ts
  • blocksuite/affine/gfx/shape/src/toolbar/icons.ts
  • blocksuite/affine/gfx/shape/src/toolbar/shape-menu-config.ts
  • blocksuite/affine/gfx/shape/vitest.config.ts
  • blocksuite/affine/gfx/template/src/toolbar/overlay-scrollbar.ts
  • blocksuite/affine/model/src/blocks/surface-ref/surface-ref-model.ts
  • blocksuite/affine/model/src/consts/connector.ts
  • blocksuite/affine/model/src/consts/index.ts
  • blocksuite/affine/model/src/consts/note.ts
  • blocksuite/affine/model/src/consts/shape.ts
  • blocksuite/affine/model/src/consts/text.ts
  • blocksuite/affine/model/src/elements/connector/connector.ts
  • blocksuite/affine/model/src/elements/connector/local-connector.ts
  • blocksuite/affine/model/src/elements/shape/api/actor.ts
  • blocksuite/affine/model/src/elements/shape/api/callout.ts
  • blocksuite/affine/model/src/elements/shape/api/cloud.ts
  • blocksuite/affine/model/src/elements/shape/api/cube.ts
  • blocksuite/affine/model/src/elements/shape/api/custom.ts
  • blocksuite/affine/model/src/elements/shape/api/cylinder.ts
  • blocksuite/affine/model/src/elements/shape/api/data-storage.ts
  • blocksuite/affine/model/src/elements/shape/api/document.ts
  • blocksuite/affine/model/src/elements/shape/api/hexagon.ts
  • blocksuite/affine/model/src/elements/shape/api/index.ts
  • blocksuite/affine/model/src/elements/shape/api/internal-storage.ts
  • blocksuite/affine/model/src/elements/shape/api/logic-and.ts
  • blocksuite/affine/model/src/elements/shape/api/logic-or.ts
  • blocksuite/affine/model/src/elements/shape/api/note.ts
  • blocksuite/affine/model/src/elements/shape/api/parallelogram.ts
  • blocksuite/affine/model/src/elements/shape/api/path-builders.ts
  • blocksuite/affine/model/src/elements/shape/api/polygon.ts
  • blocksuite/affine/model/src/elements/shape/api/step.ts
  • blocksuite/affine/model/src/elements/shape/api/tape.ts
  • blocksuite/affine/model/src/elements/shape/api/trapezoid.ts
  • blocksuite/affine/model/src/elements/shape/api/triangle-right.ts
  • blocksuite/affine/model/src/elements/shape/index.ts
  • blocksuite/affine/model/src/elements/shape/shape.ts
  • blocksuite/affine/shared/src/__tests__/utils/png-metadata.unit.spec.ts
  • blocksuite/affine/shared/src/services/edit-props-store.ts
  • blocksuite/affine/shared/src/types/index.ts
  • blocksuite/affine/shared/src/utils/index.ts
  • blocksuite/affine/shared/src/utils/png-metadata.ts
  • blocksuite/affine/shared/src/utils/zod-schema.ts
  • blocksuite/affine/widgets/edgeless-connector-anchors/package.json
  • blocksuite/affine/widgets/edgeless-connector-anchors/src/effects.ts
  • blocksuite/affine/widgets/edgeless-connector-anchors/src/index.ts
  • blocksuite/affine/widgets/edgeless-connector-anchors/src/view.ts
  • blocksuite/affine/widgets/edgeless-connector-anchors/tsconfig.json
  • blocksuite/affine/widgets/edgeless-selected-rect/src/edgeless-auto-complete.ts
  • blocksuite/affine/widgets/edgeless-selected-rect/src/edgeless-selected-rect.ts
  • blocksuite/affine/widgets/edgeless-selected-rect/src/effects.ts
  • blocksuite/affine/widgets/edgeless-selected-rect/src/flowchart-shape-panel.ts
  • blocksuite/affine/widgets/edgeless-selected-rect/src/mindmap-shape-panel.ts
  • blocksuite/affine/widgets/edgeless-selected-rect/src/utils.ts
  • blocksuite/affine/widgets/edgeless-toolbar/src/create-popper.ts
  • blocksuite/affine/widgets/edgeless-toolbar/src/edgeless-toolbar.ts
  • blocksuite/affine/widgets/edgeless-zoom-toolbar/src/effects.ts
  • blocksuite/affine/widgets/edgeless-zoom-toolbar/src/grid-menu.ts
  • blocksuite/affine/widgets/edgeless-zoom-toolbar/src/index.ts
  • blocksuite/affine/widgets/edgeless-zoom-toolbar/src/zoom-toolbar.ts
  • blocksuite/framework/global/src/gfx/bound.ts
  • blocksuite/framework/std/src/gfx/interactivity/resize/manager.ts
  • blocksuite/integration-test/src/__tests__/edgeless/edge-nodes.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/frame.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/gradient-fill.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/grid-menu.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/last-props.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/properties-panel.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/shape-browser.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/shape-dom.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/snap-overlay.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/stroke-style.spec.ts
  • blocksuite/integration-test/src/__tests__/edgeless/tools.spec.ts
  • packages/frontend/core/src/components/hooks/affine/use-export-page.ts
  • packages/frontend/core/src/desktop/dialogs/import/index.tsx
  • packages/frontend/core/src/modules/peek-view/view/modal-container.css.ts
  • packages/frontend/core/src/modules/peek-view/view/modal-container.tsx
  • tests/affine-local/e2e/blocksuite/toolbar.spec.ts
  • tests/blocksuite/e2e/edgeless/color-palettes.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/clipboard.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/connector-menu.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/connector.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/elbow.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/group.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/jumps.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/label.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/segment-dragging-spec.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/segment-dynamics.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/undo-redo.spec.ts
  • tests/blocksuite/e2e/edgeless/connector/waypoint-integration.spec.ts
  • tests/blocksuite/e2e/edgeless/containers.spec.ts
  • tests/blocksuite/e2e/edgeless/edge-nodes.spec.ts
  • tests/blocksuite/e2e/edgeless/export-import.spec.ts
  • tests/blocksuite/e2e/edgeless/flowchart.spec.ts
  • tests/blocksuite/e2e/edgeless/frame-sizing.spec.ts
  • tests/blocksuite/e2e/edgeless/grid-snapping.spec.ts
  • tests/blocksuite/e2e/edgeless/mindmap.spec.ts
  • tests/blocksuite/e2e/edgeless/properties-panel.spec.ts
  • tests/blocksuite/e2e/edgeless/shape-browser.spec.ts
  • tests/blocksuite/e2e/edgeless/shape-flip.spec.ts
  • tests/blocksuite/e2e/edgeless/shape-selection-flip.spec.ts
  • tests/blocksuite/e2e/utils/actions/edgeless.ts
  • tests/blocksuite/e2e/utils/asserts.ts
  • tools/utils/src/workspace.gen.ts
  • tsconfig.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@darkskygit
Copy link
Copy Markdown
Member

Nice feature enhancement, but I think this PR is too large, making it difficult to review
I suggest first splitting out some smaller, decoupled features and submitting them as separate PRs

Add connector routing/jumps, expanded shape libraries, grid and snap controls, properties panel improvements, and export/import coverage for edgeless workflows, with new integration and e2e tests.
@spmp spmp force-pushed the feature/advanced-diagramming-capability-merged branch from 758f76d to 794dfad Compare March 26, 2026 02:55
@github-actions github-actions bot added test Related to test cases app:core labels Mar 26, 2026
@spmp
Copy link
Copy Markdown
Author

spmp commented Mar 26, 2026

Thank you @darkskygit for taking the time to review and consider this PR.

I see that I must have n00bed the merge with canary as all merge edits were included in this PR.
I applied my changes to current canary and force pushed to give a more reasonable view on the changes.

I am happy to break into smaller PR's - it's some work and happy to do it if y'all are serious about considering this for inclusion.

I propose the following PR:

  1. Core diagramming: Shapes, connectors, colour palletes, context menus
  2. Grid and snapping addition to the zoom menu
  3. Frame sizing
  4. Import/export things.
  5. When done, all the additional shapes (so many!)

Keen to hear your thoughts.
Chur

@darkskygit
Copy link
Copy Markdown
Member

darkskygit commented Mar 26, 2026

Thank you @darkskygit for taking the time to review and consider this PR.

I see that I must have n00bed the merge with canary as all merge edits were included in this PR. I applied my changes to current canary and force pushed to give a more reasonable view on the changes.

I am happy to break into smaller PR's - it's some work and happy to do it if y'all are serious about considering this for inclusion.

I propose the following PR:

  1. Core diagramming: Shapes, connectors, colour palletes, context menus
  2. Grid and snapping addition to the zoom menu
  3. Frame sizing
  4. Import/export things.
  5. When done, all the additional shapes (so many!)

Keen to hear your thoughts. Chur

I think enhancing the connector is a great start.
Before submitting, you can run yarn dedup(if add or upgrade deps), yarn typeckeck, yarn affine i18n build, yarn lint, and yarn test locally to ensure there are no type errors and that tests pass.
Also, please sign the CLA and try to keep the PR small, which will help us review it better and merge it faster.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app:core test Related to test cases

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

3 participants