Skip to content

Instantly share code, notes, and snippets.

View easylogic's full-sized avatar
๐Ÿ˜€
happy coding

jinho park easylogic

๐Ÿ˜€
happy coding
View GitHub Profile
@easylogic
easylogic / extension-design-and-implementation.md
Created December 5, 2025 09:37
extension-design-and-implementation
@easylogic
easylogic / transaction-integration.md
Created December 5, 2025 09:03
transaction-integration

Model Transaction Integration with DataStore Lock & Overlay

This document explains how @barocss/model transactions integrate with DataStore's lock system and transactional overlay.

Overview

When a model transaction is executed via transaction(editor, ops).commit(), it orchestrates DataStore's lock and overlay systems to ensure atomic, concurrent-safe operations.

Complete Flow

@easylogic
easylogic / selection-algorithm.md
Created December 1, 2025 10:16
selection-algorithm

Selection ์ฒ˜๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐœ์š”

์ด ๋ฌธ์„œ๋Š” Editor์˜ Model๊ณผ DOM ๊ฐ„ Selection ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํ…์ŠคํŠธ ๋…ธ๋“œ ๋ถ„ํ• , offset ๋งคํ•‘, selection ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. ํ…์ŠคํŠธ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜

1.1 Model ๋ ˆ๋ฒจ ํ…์ŠคํŠธ ํ‘œํ˜„

@easylogic
easylogic / replaceText-mark-transformation.md
Last active November 25, 2025 06:18
replaceText-mark-transformation

replaceText์˜ ๋ฐ์ดํ„ฐ์™€ Mark ๋ณ€ํ™˜ ๊ด€๊ณ„

๊ฐœ์š”

RangeOperations.replaceText() ๋ฉ”์„œ๋“œ๋Š” ํ…์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๊ต์ฒดํ•  ๋•Œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ชจ๋“  marks๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ํ…์ŠคํŠธ ๊ต์ฒด ์ž‘์—…์ด marks์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…

์šฉ์–ด ์ •์˜

@easylogic
easylogic / input-rendering-race-condition.md
Created November 24, 2025 08:27
input-rendering-race-condition

์ž…๋ ฅ ์ค‘ ๋ Œ๋”๋ง๊ณผ Selection ๋ณ€๊ฒฝ์˜ Race Condition ํ•ด๊ฒฐ

๋ฌธ์ œ ์ƒํ™ฉ

Race Condition ๋ฐœ์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค

์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ค‘:
1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM์— ํ…์ŠคํŠธ ๋ณ€๊ฒฝ ์ ์šฉ (contentEditable)
 โ†“
@easylogic
easylogic / editor-view-dom-spec.md
Created November 20, 2025 04:11
editor-view-dom-spec

editor-view-dom ์ŠคํŽ™ ๋ฌธ์„œ

๋ณธ ๋ฌธ์„œ๋Š” @barocss/editor-view-dom ํŒจํ‚ค์ง€์˜ ๊ธฐ์ˆ  ์ŠคํŽ™์ด๋‹ค. ๊ตฌํ˜„๊ณผ ํ…Œ์ŠคํŠธ๋Š” ๋ณธ ๋ฌธ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

๋ชฉ์ฐจ

  1. ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”
  2. ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ
  3. renderer-dom ํ†ตํ•ฉ
  4. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‹œ์Šคํ…œ
@easylogic
easylogic / renderer-dom-spec.md
Created November 20, 2025 03:47
renderer-dom-spec
@easylogic
easylogic / react-style-reconciliation.md
Created November 19, 2025 13:38
react-style-reconciliation

React-style Reconciliation ์š”์•ฝ

1. ์ „์ฒด ํ๋ฆ„

๋‹จ๊ณ„ Render Phase (renderFiberNode) Commit Phase (commitFiberNode) ๊ฒฐ๊ณผ
DOM ์ค€๋น„ Fiber ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ Text/Host DOM ์ƒ์„ฑ๋งŒ ์ˆ˜ํ–‰ (๋ถ€๋ชจ์— ์‚ฝ์ž…ํ•˜์ง€ ์•Š์Œ) effectTag(PLACEMENT/UPDATE/DELETION)์— ๋”ฐ๋ผ ์‹ค์ œ DOM ์‚ฝ์ž…/์žฌ๋ฐฐ์น˜/์ œ๊ฑฐ React completeWork + commitMutationEffects์™€ ๋™์ผ
์ˆœ์„œ ๊ฒฐ์ • Fiber child/sibling ๋งํฌ๋งŒ ๊ตฌ์„ฑ getHostSibling์œผ๋กœ ๋‹ค์Œ ํ˜•์ œ DOM ์ฐพ์€ ๋’ค insertBefore DOM ์ˆœ์„œ ์•ˆ์ •
์†์„ฑ/์Šคํƒ€์ผ ์„ค์ •ํ•˜์ง€ ์•Š์Œ dom.updateAttributes / dom.updateStyles๊ฐ€ diff๋ฅผ ๊ณ„์‚ฐํ•ด Insert/Update/Delete ์ˆ˜ํ–‰ React commitUpdate์™€ ๋™์ผ
ํ…์ŠคํŠธ Text node ์ƒ์„ฑ๋งŒ handleVNodeTextProperty๊ฐ€ ์ตœ์ข… ํ…์ŠคํŠธ ์ปค๋ฐ‹ Text-only VNode ์ฒ˜๋ฆฌ
@easylogic
easylogic / dual-mode-rendering-strategy-paper.md
Created November 12, 2025 07:48
dual-mode-rendering-strategy-paper

ContentEditable ๊ธฐ๋ฐ˜ ์—๋””ํ„ฐ์˜ ์ด์ค‘ ๋ชจ๋“œ ๋ Œ๋”๋ง ์ „๋žต: View ๋ชจ๋“œ์™€ Edit ๋ชจ๋“œ์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ Per-Character Rendering

Abstract

๋ณธ ๋…ผ๋ฌธ์€ ContentEditable ๊ธฐ๋ฐ˜ ์—๋””ํ„ฐ์—์„œ View ๋ชจ๋“œ์™€ Edit ๋ชจ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ์ด์ค‘ ๋ชจ๋“œ ๋ Œ๋”๋ง ์ „๋žต์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“œ ๊ฒฐ์ •์€ Model Range๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ด๋Š” ๋ Œ๋”๋ง๋œ DOM ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ˜„์žฌ inline-text๊ฐ€ View ๋ชจ๋“œ์ธ์ง€ Edit ๋ชจ๋“œ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ Œ๋”๋ง ์ดํ›„ DOM์—์„œ ์ž์œ ๋กญ๊ฒŒ ์ปค์„œ๋ฅผ ์˜ฎ๊ฒจ๋„ Model Range๊ฐ€ ๋™์ผํ•˜๋ฉด ๋ชจ๋ธ์€ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. Edit ๋ชจ๋“œ์—์„œ๋Š” ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•œ inline-text๋ฅผ ๋ฌธ์ž ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ Œ๋”๋งํ•จ์œผ๋กœ์จ, mark์™€ decorator๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”๊ฐ€๋˜์–ด๋„ ํ…์ŠคํŠธ ์ž…๋ ฅ์ด ๊นจ์ง€์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. View ๋ชจ๋“œ์—์„œ๋Š” ๊ธฐ์กด์˜ run ๋‹จ์œ„ ๋ Œ๋”๋ง์„ ์œ ์ง€ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. MutationObserver ๊ธฐ๋ฐ˜ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ์™€ ๋ Œ๋”๋ง ์ œ์–ด ์ „๋žต์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €/๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ ์ฐจ์ด์— ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, IME ์ž…๋ ฅ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ MutationObserver๊ฐ€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ(selection ๋Œ€์ƒ)์—๋งŒ ๋ฐ˜์‘ํ•˜๊ณ  ์™ธ๋ถ€ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ DOM ๋ณ€๊ฒฝ์€ ๋ฌด์‹œํ•˜์—ฌ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋น„์ „: ๋ณธ ๋…ผ๋ฌธ์—์„œ ์ œ์•ˆํ•˜๋Š” ์ „๋žต์€ ์™„์ „ํ•œ AI ๊ธฐ๋ฐ˜ ์—๋””ํ„ฐ์˜ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋™์•ˆ AI๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ mark์™€ decorator๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์ž๋™ ์™„์„ฑ, ๋ฌธ๋ฒ• ๊ต์ •, ์Šคํƒ€์ผ ์ œ์•ˆ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด๋„ ์–ด๋–ค ํŽธ์ง‘ ์ž‘์—… ์ค‘์—์„œ๋„ ๋ Œ๋”๋ง์ด ๊นจ์ง€์ง€ ์•Š๊ณ , ๊ธ€์ž ์ž…๋ ฅ๋„ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ์™„์ „ํ•œ ์—๋””ํ„ฐ ๊ฒฝํ—˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Keywords: ContentEditable, Text Editor, Rendering Strategy, Selection Preservation, IME Compatibility, AI-Powered E

@easylogic
easylogic / text-node-pool-selection-preservation.md
Created November 11, 2025 08:57
text-node-pool-selection-preservation

Text Node Pool์„ ํ†ตํ•œ ContentEditable Selection ๋ณด์กด ๊ธฐ๋ฒ•

Abstract

ContentEditable ๊ธฐ๋ฐ˜ ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” DOM ์—…๋ฐ์ดํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ Selection ๊ฐ์ฒด๋ฅผ ๋ถˆ์•ˆ์ •ํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋ณธ ๋…ผ๋ฌธ์—์„œ๋Š” sid(System ID) ๊ธฐ๋ฐ˜ Text Node Pool ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ Selection์ด ์ฐธ์กฐํ•˜๋Š” Text Node๋ฅผ ๋ณด์กดํ•จ์œผ๋กœ์จ ํŽธ์ง‘ ์ค‘ Selection์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์ œ์•ˆํ•œ๋‹ค.

์ด ๊ธฐ๋ฒ•์€ DOM ๋ณ€ํ™˜/๋ณต์›(Model Position โ†” DOM Position)๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ, ํŽธ์ง‘ ์ค‘ Reconciler๊ฐ€ DOM์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ sid ๊ธฐ์ค€์œผ๋กœ Text Node Pool์„ ๊ด€๋ฆฌํ•˜์—ฌ Selection์ด ์žˆ๋Š” Text Node๋ฅผ ์ •ํ™•ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. sid๋Š” ๋ชจ๋ธ์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ด๋ฏ€๋กœ, ๊ฐ™์€ sid๋ฅผ ๊ฐ€์ง„ Text Node๋Š” ๊ฐ™์€ ๋ชจ๋ธ ๋…ธ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด O(n * m)์—์„œ O(n)์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ํ•œ๋‹ค. Mark/Decorator ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ์—๋„ ์‹ค์ œ Text Node๋Š” ๋ณด์กดํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € Selection์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

Keywords: ContentEditable, Selection Preservation, Text Node Pool, sid-based Pool, Virtual DOM Reconciliation, Rich Text Editor, Real-time Editing