Releases: toeverything/blocksuite
0.4.1
🐛 Bugfixes
- fix:
page.root
broken (#1276)
Full Changelog: https://github.com/toeverything/blocksuite/compare/@blocksuite/[email protected]...@blocksuite/[email protected]
0.4.0
Announcing BlockSuite 0.4.0
💠 We are excited to announce the release of BlockSuite 0.4.0! This new version is shipped in AFFiNE Alpha "Downhills". With 484 pull requests merged and 15 new contributors involved, BlockSuite has evolved significantly over this period.
📦 Blocks & UI Components
- The DragHandle component is supported (#543 #572 #592 #593 #742 #698) by @himself65 @fundon. This allows for convenient reordering of blocks.
- The BlockHub component is supported (#731 #773 #915 #1092 #1108 #1112 #1173) by @thorseraq. This makes it easy to insert blocks from a visible positioned popup.
- The SlashMenu component is supported (#571 #791 #917 #1072 #1202 #1191) by @lawvs. This provides Notion-like quick menu when pressing the
/
key. - The new
affine:surface
block flavour (#517 #664 #716 #721 #739 #740 #774 #775 #797 #809) is added by @doodlewind @himself65. This is a singleton block type that contains whiteboard elements and is always displayed at the top-level inside the page. - The new ShapeElement is supported (#790 #808 #1104) by @doodlewind @alt1o. This is a supported element type inside the phasor surface renderer.
- The new
affine:database
block flavour (#770 #831 #909 #913 #920 #959 #960 #961) is added by @himself65 (experimental). This is the foundation of view transforming. - The indenting of multiple blocks is supported (#1093) by @Innei.
- The bracket autocomplete for native range selected text is supported (#630) by @lawvs.
- The block level selection can be kept during scroll (#1003), supported by @fundon.
- The new EdgelessToolbar component is supported (#923) by @thorseraq. This ships with the default edgeless UI container.
🏗️ Architecture & Editor Infra
- The class-based block model is replaced by zod-based schema (#859 #868) by @himself65. This allows for more declarative and block definition.
- The block-specific methods are abstracted into
BlockService
(#856 #857) by @himself65. This provides composable ways defining block methods. - The new
addBlockByFlavour
API is supported (#628) by @himself65. This allows for adding blocks in a type-safe way. - The feature flag mechanism is supported (#658 #690 #695) This allows for enabling or disabling feature at runtime, and also makes the single-master development possible by merging immature features into master but opt-out by default.
- The
BlockTag
entity is supported (#734) by @himself65. This enables attaching group-able tags onto blocks. - The new
virgo
package is added (#912 #932 #943 #944 #948 #974 #1243) by @Flrande. This is a tiny rich-text editing component we designed to replace Quill in the future. - The new
phasor
package is added (#546 #552 #806 #890 #891) by @doodlewind. This is a canvas-based renderer designed for optimized whiteboard content rendering. - The new
global
package is added (#618) by @himself65. This allows for better cross-package typing and reusability of common utils.
📚 Misc
- Image blob uploading support (#735 #786 #918 #1188).
- HMR support in playground (#621 #1050).
- URL-based markdown import in playground (#825).
- Adaptive height support for QuickFormatBar (#777).
- YDoc binary exporting support in playground (#509).
- Mode switch support in edgeless mode (#514).
- Markdown import support for image and code block (#544).
- Markdown export support for del and underline format (#651).
- Ctrl-enter hotkey support (#821).
- CSS debug menu support (#901).
- Debug log support (#710 #928).
- New
SimpleAffineEditor
pre-configured editor component (#811). - Use random room by-default in playground (#594).
- New BlockSuite logo (#966 #1119).
🧹 Refactoring
- The
affine:group
block flavour is renamed toaffine:frame
(#520). - The
SelectionController
is replaced byMouseModeController
(#745). - The
AwarenessAdapter
is replaced byAwarenessStore
(#780). - The
Signal.fromEvent
is replaced bySignal.disposableListener
(#1114). - The
IndexedDBBlobProvider
is replaced byDuplexBlobProvider
(#866). - The
affine:shape
block flavour is removed (#804). - The disposable callbacks are replaced by
DisposableGroup
(#760). - The
PrelimText
type is removed (#1146). - The
page
field inText
is removed (#1146).
🙌 New Contributors
- @zoulamZero made their first contribution in #584
- @fi3ework made their first contribution in #587
- @AkaraChen made their first contribution in #596
- @fundon made their first contribution in #607
- @pengx17 made their first contribution in #673
- @Innei made their first contribution in #569
- @jackeydou made their first contribution in #701
- @pionxzh made their first contribution in #712
- @SteinsHead made their first contribution in #718
- @pingren made their first contribution in #798
- @co-decode made their first contribution in #1013
- @Agility6 made their first contribution in #1068
- @gotjoshua made their first contribution in #1131
- @lzlme made their first contribution in #1199
- @zqran made their first contribution in #1262
🐛 Detailed Bugfixes
- fix: incorrect code block short ligatures (#511)
- fix: add a minimum limit on the drag-and-drop width of images (#513)
- fix: unexpected behaviour of markdown shortcut when creating code block and inline code (#512)
- fix: code block language does not keep after refreshing page (#516)
- fix: when image size too large, option operation should show inside (#515)
- fix: remove css files (#523)
- fix: keep image meta fields in clipboard (#519)
- fix: remove css import (#524)
- fix: indent operation in rich text (#528)
- fix: select all with hot key at the start of the line (#537)
- fix: paste at the start of line (#540)
- fix: use
animationend
event (#541) - fix: toast dom not removed (#542)
- fix: update block cache when mouse move (#549)
- fix: phasor ts config (#550)
- fix: indent should not work under some block (#553)
- fix: cursor lose outside container (#555)
- fix: export HTML or Markdown format lost (#547)
- fix: drag handle appear in edgeless mode (#557)
- fix: delete selected content on cut (#548)
- fix: drag position in list block (#563)
- fix(playground): split room in different version (#568)
- fix: block shouldn't highlighted when not dragging (#578)
- fix: cleanup drag handle (#579)
- fix: multi-line title size after undo/redo (#584)
- fix: use flex in children container (#586)
- fix: native selection (#588)
- fix: move drag handle outside blocks (#598)
- fix: keep cursor to title when deleting at the start of the first block (#580)
- fix: hide drag handle on wheel (#604)
- fix: image rect (#606)
- fix: remove unused detection (#614)
- fix:
captureSync
on creating code block & filter hotkey listener (#597) - fix: move drag handle when resize window (#622)
- fix: code block unexpectedly get focus (#631)
- fix: keep code block option popup open on hover (#634)
- fix: use manual shallow copy on
DOMRect
(#643) - fix: optimize
isForward
detection inSelectionManager
(#640) - fix: delete code block when selected (#637)
- fix: return the correct delta result in
sliceToDelta
(#635) - fix: import
@blocksuite/blocks
cause ts error in other monorepos (#654) - fix: drag handle behavior in Firefox browser (#656)
- fix: parse inline html into single paragraph (#659)
- fix(blocks): set supressWarning to true of quill-cursors (#661)
- fix: query code block container when loading (#666)
- fix: global types unreachable in downstream package (#668)
- fix: blot types (#665)
- fix: type
SurfaceBlockModel
(#672) - fix: peer cursor updates sometimes does not emit "change" event (#673)
- fix: blob import with cors header (#678)
- fix: cant reach the last block in nesting (#677)
- fix: collect wrong BaseBlockModel[] at _block() (#681)
- fix: line number for wrapped lines (#680)
- fix: adapting parent index of blocks to binarySearchBlockEditingState (#685)
- fix: should check that parentIndex is not undefined (#688)
- fix: use
Partial
in defaultFlags (#691) - fix: disable hotkey format and redo/undo in readonly mode (#693)
- fix: undo/redo is unavailable in title (#701)
- fix: revert .nvmrc (#705)
- fix: bring children to father model (#707)
- fix: handle children when delete a block (#708)
- fix: delete selected text on enter (#712)
- fix: hide mock line element properly (#713)
- fix: should keep first line format when pasted into a new line (#715)
- fix: should not create link in readonly mode (#719)
- fix: incorrect comparison in
assertEquals
(#725) - fix: uniform event handler outside of rich text (#724)
- fix: click bottom should add a new paragraph block (#727)
- fix: flaky test case with raw enter press (#730)
- fix: surface history with transact origin (#746)
- fix: indicator lifecycle on direct opening edgeless mode (#748)
- fix: use
requestAnimationFrame
(#751) - fix: replace text when paste to a block (#718)
- fix(global): compatibility with cjs (#767)
- fix: block hub subscribe (#769)
- fix: edgeless selection rect index over block hub (#781)
- fix: reuse comparePoint to decide dragging direction during nat...
0.3.1
What's Changed
- fix: placeholder in default title by @himself65 in #494
- fix: height in title by @himself65 in #495
- fix: double check nullable by @darkskygit in #499
- feat: run store testing if package change by @darkskygit in #498
- refactor: flatten line start backspace by @lawvs in #479
Full Changelog: https://github.com/toeverything/blocksuite/compare/@blocksuite/[email protected]...@blocksuite/[email protected]
0.3.0
Announcing BlockSuite 0.3.0
💠 We are excited to announce the release of BlockSuite 0.3.0! This new version is shipped in AFFiNE Alpha "Abbey Wood", and it comes with lots of new features:
🌈 APIs & Data Persistence
- New
Workspace
,Page
, andSpace
entities support by @doodlewind - New
BlobStorage
binary persistence support by @darkskygit @doodlewind @Austaras - IndexedDB-based doc persistence support by @doodlewind @colelawrence
- New
WorkspaceMeta
support by @doodlewind - Async
BlockService
support by @himself65 @doodlewind - Block version validation by @doodlewind
- Proxy-based Yjs binding (experimental) by @himself65
📦 New Blocks & UI Components
- Image block - The
affine:embed
block type, created by @DiamondThree - Code block - The
affine:code
block type, created by @thorseraq - Divider block - The
affine:divider
block type, created by @JimmFly - Shape block (experimental) - The
affine:shape
block type, created by @himself65 - Inline text style popup component - The
FormatQuickBar
component, created by @lawvs - Read-only mode support by @QiShaoXuan
🛠️ Integration & DX
- The
@blocksuite/react
hooks package and Next integration example by @himself65 - Base64-based playground URL sharing support by @himself65
- ESM support by @doodlewind @himself65 @lawvs
- Next SSR support for
@blocksuite/store
by @himself65 @doodlewind - Side-by-side debugging support by @himself65 @doodlewind
- New playground UI based on Shoelace by @doodlewind
- Vercel and Cloudflare Page support by @doodlewind @darkskygit
- Automated nightly release and CodeQL checks by @himself65
- E2E test trace support by @lawvs
- README about basic APIs by @doodlewind
🙌 New Contributors
Thank @himself65 @Austaras @linonetwo @LuciNyan @Flrande @donaldxdonald @septs for their contributions!