* Project Devlog ** 13.15.5-alpha.1 [2026-01-05] gz: 2820 / 2.75 KB (+2), br: 2577 / 2.52 KB (+4), min: 6818 / 6.66 KB (-8) - fix: use Viewport.size for selection loop (matches original safety check) ** 13.15.4-alpha.1 [2026-01-05] gz: 2818 / 2.75 KB (+3), br: 2573 / 2.51 KB (+2), min: 6826 / 6.67 KB (2) - fix: reset maxCol on multiline insert (Enter key) ** 13.15.3-alpha.1 [2026-01-05] gz: 2815 / 2.75 KB (+1), br: 2571 / 2.51 KB (0), min: 6824 / 6.66 KB (0) - fix: update extensions to use Mode.cellHeight instead of Mode.cssCell - fix(statusline.js 1.0.1): remove premature render() call that crashed before viewport init - fix(elementals.js 1.0.1): use Mode.cellHeight instead of Mode.lineHeight ** 13.15.2-alpha.1 [2026-01-05] gz: 2814 / 2.75 KB (-4), br: 2571 / 2.51 KB (-2), min: 6824 / 6.66 KB (-2) - test: add test confirming Enter resets maxCol for vertical navigation ** 13.15.1-alpha.1 [2026-01-05] gz: 2818 / 2.75 KB (+5), br: 2574 / 2.51 KB (+2), min: 6826 / 6.67 KB (3) - fix: Shift+Tab without selection now unindents instead of inserting spaces ** 13.15.0-alpha.1 [2026-01-05] gz: 2813 / 2.75 KB (+27), br: 2572 / 2.51 KB (+22), min: 6823 / 6.66 KB (104) - perf: cache getBoundingClientRect, compute cursor position mathematically - rename cssCell to cellHeight, add Mode.cellWidth ** 13.14.11-alpha.1 [2026-01-05] gz: 2786 / 2.72 KB (+4), br: 2551 / 2.49 KB (+7), min: 6719 / 6.56 KB (1) - pass delta as param to render() instead of closure ** 13.14.10-alpha.1 [2026-01-05] gz: 2782 / 2.72 KB (-3), br: 2544 / 2.48 KB (-2), min: 6718 / 6.56 KB (-3) - inline left variable in indent() ** 13.14.9-alpha.1 [2026-1-5] gz: 2792 / 2.73 KB (0), br: 2550 / 2.49 KB (0), min: 6740 / 6.58 KB (0) *** refactor - shorten JSDoc comments, 512 โ†’ 494 lines ** 13.14.8-alpha.1 [2026-1-5] gz: 2792 / 2.73 KB (-7), br: 2550 / 2.49 KB (-10), min: 6740 / 6.58 KB (-51) *** refactor - consolidate DOM queries into single map pattern ** 13.14.7-alpha.1 [2026-1-5] gz+min: 2798 bytes / 2.73 KB (0), min: 6791 bytes / 6.63 KB (-7) *** refactor - refactor key handling guard pattern ** 13.14.6-alpha.1 [2026-1-5] gz+min: 2798 bytes / 2.73 KB (-1), min: 6798 bytes / 6.64 KB (-2) *** refactor - remove unnecessary else in Selection.lines getter ** 13.14.5-alpha.1 [2026-1-5] gz+min: 2799 bytes / 2.73 KB (-1), min: 6800 bytes / 6.64 KB (-1) *** refactor - collapse moveWord conditions from 3 to 2 ** 13.14.4-alpha.1 [2026-1-5] gz+min: 2800 bytes / 2.73 KB (0), min: 6801 bytes / 6.64 KB (0) *** refactor - inline BuffeeConfig typedef into constructor JSDoc ** 13.14.3-alpha.1 [2026-1-5] gz+min: 2800 bytes / 2.73 KB (0), min: 6801 bytes / 6.64 KB (-4) *** refactor - inline len variable in moveCol ** 13.14.2-alpha.1 [2026-1-4] gz+min: 2800 bytes / 2.73 KB (+2), min: 6805 bytes / 6.65 KB (-9) *** refactor - extract resize function for initial sizing and ResizeObserver ** 13.14.1-alpha.1 [2026-1-4] gz+min: 2798 bytes / 2.73 KB (-5), min: 6814 bytes / 6.65 KB (-4) *** refactor - inline expandTabs in Model.text setter ** 13.14.0-alpha.1 [2026-1-4] gz+min: 2802 bytes / 2.74 KB (-42), min: 6818 bytes / 6.66 KB (-116) *** breaking - remove Viewport.contentOffset, have highlights.js compute it directly ** 13.13.1-alpha.1 [2026-1-4] gz+min: 2845 bytes / 2.78 KB (-8), min: 6934 bytes / 6.77 KB (+61) *** refactor - inline copy function into clipboard event listeners ** 13.13.0-alpha.1 [2026-1-4] gz+min: 2854 bytes / 2.79 KB (0), min: 6873 bytes / 6.71 KB (+2) *** breaking - merge renderDelta + renderGutter + render into renderAll - replace public this.renderDelta with this.renderAll ** 13.12.2-alpha.1 [2026-1-4] gz+min: 2854 bytes / 2.79 KB (-9), min: 6871 bytes / 6.71 KB (-17) *** refactor - remove size guard in Viewport.set, renderDelta(0) is no-op ** 13.12.1-alpha.1 [2026-1-4] gz+min: 2863 bytes / 2.80 KB (+2), min: 6888 bytes / 6.73 KB (-4) *** refactor - combine renderGutter + render into renderWithGutter ** 13.12.0-alpha.1 [2026-1-4] gz+min: 2861 bytes / 2.79 KB (-8), min: 6892 bytes / 6.73 KB (-18) *** breaking - remove public this.renderGutter, keep as internal const ** 13.11.0-alpha.1 [2026-1-4] gz+min: 2869 bytes / 2.80 KB (-4), min: 6910 bytes / 6.75 KB (-55) *** breaking - remove Viewport.scrollTo(), merge into Viewport.set(start, size?) ** 13.10.0-alpha.1 [2026-1-4] gz+min: 2873 bytes / 2.81 KB (-4), min: 6965 bytes / 6.80 KB (-1) *** breaking - Viewport.set() now takes 0-indexed start (was 1-indexed) ** 13.9.2-alpha.1 [2026-1-4] gz+min: 2877 bytes / 2.81 KB (-5), min: 6966 bytes / 6.80 KB (+5) *** perf - scrollTo() calls render(), avoid double-render at call sites ** 13.9.1-alpha.1 [2026-1-4] gz+min: 2882 bytes / 2.81 KB (-13), min: 6961 bytes / 6.80 KB *** refactor - inline sizeSelection() at single usage site ** 13.9.0-alpha.1 [2026-1-4] gz+min: 2895 bytes / 2.83 KB (-16), min: 6979 bytes / 6.82 KB *** refactor - remove Viewport.scroll(), use scrollTo() instead ** 13.8.0-alpha.1 [2026-1-4] gz+min: 2911 bytes / 2.84 KB (-14), min: 7018 bytes / 6.85 KB *** refactor - remove Viewport.autoFit, inline !rows at usage ** 13.7.4-alpha.1 [2026-1-4] gz+min: 2925 bytes / 2.86 KB (+3), min: 7050 bytes / 6.88 KB *** refactor - early return for read-only mode before computing direction ** 13.7.3-alpha.1 [2026-1-4] gz+min: 2922 bytes / 2.85 KB (-2), min: 7050 bytes / 6.88 KB *** refactor - simplify Selection.lines single-row case with ternary ** 13.7.2-alpha.1 [2026-1-4] gz+min: 2924 bytes / 2.86 KB (-3), min: 7055 bytes / 6.89 KB *** refactor - hoist common code in Model.add() ** 13.7.1-alpha.1 [2026-1-4] gz+min: 2927 bytes / 2.86 KB (-8), min: 7114 bytes / 6.95 KB *** perf - simplify resize() by removing size check guard ** 13.7.0-alpha.1 [2026-1-4] gz+min: 2935 bytes / 2.87 KB (+23), min: 7133 bytes / 6.97 KB *** perf - partition renderGutter() from render() - add scrollTo() for absolute viewport positioning, scroll() for relative - inline gutterCols at point of usage ** 13.6.0-alpha.1 [2026-1-4] gz+min: 2912 bytes / 2.84 KB (-5), min: 7061 bytes / 6.90 KB *** perf - partition renderDelta() from render(), remove Viewport.delta property ** 13.5.4-alpha.1 [2026-1-4] gz+min: 2917 bytes / 2.85 KB (+10), min: 7090 bytes / 6.92 KB *** perf - optimize for hotpath not including Viewport.delta changes ** 13.5.3-alpha.1 [2026-1-4] gz+min: 2907 bytes / 2.84 KB (+7), min: 7074 bytes / 6.91 KB *** refactor - indent(n) takes spaces count, negative for unindent ** 13.5.2-alpha.1 [2026-1-4] gz+min: 2900 bytes / 2.83 KB (+1), min: 7095 bytes / 6.93 KB *** refactor - combine indent() and unindent() into single indent(add) function ** 13.5.1-alpha.1 [2026-1-4] gz+min: 2899 bytes / 2.83 KB (-16), min: 7141 bytes / 6.97 KB *** refactor - move originalLineCount from Model to StatusLine extension ** 13.5.0-alpha.1 [2026-1-4] gz+min: 2915 bytes / 2.85 KB (-35), min: 7202 bytes / 7.03 KB *** refactor - move byteCount from Model to StatusLine extension ** 13.4.6-alpha.1 [2026-1-4] gz+min: 2950 bytes / 2.88 KB (-7), min: 7265 bytes / 7.09 KB *** refactor - indent() use if block instead of early return ** 13.4.5-alpha.1 [2026-1-4] gz+min: 2957 bytes / 2.89 KB (-50), min: 7271 bytes / 7.10 KB *** refactor - simplify unindent() using regex to count leading spaces ** 13.4.4-alpha.1 [2026-1-4] gz+min: 3007 bytes / 2.94 KB (-11), min: 7373 bytes / 7.20 KB *** refactor - capture and reset Viewport.delta upfront in render ** 13.4.3-alpha.1 [2026-1-4] gz+min: 3018 bytes / 2.95 KB (-5), min: 7368 bytes / 7.20 KB *** refactor - selection loop now iterates absolute row, sizeSelection computes viewport index ** 13.4.2-alpha.1 [2026-1-4] gz+min: 3023 bytes / 2.95 KB (-2), min: 7374 bytes / 7.20 KB *** refactor - factor out render() in arrow key selection collapse handler ** 13.4.1-alpha.1 [2026-1-4] gz+min: 3025 bytes / 2.95 KB (+1), min: 7378 bytes / 7.21 KB *** refactor - consolidate cmd/alt arrow key handlers ** 13.4.0-alpha.1 [2026-1-4] gz+min: 3024 bytes / 2.95 KB (-19), min: 7441 bytes / 7.27 KB *** refactor - consolidate moveCursorStartOfLine/moveCursorEndOfLine into moveLineEdge(toEnd) *** fix - smart-home now uses head.col instead of tail.col for position check ** 13.3.2-alpha.1 [2026-1-4] gz+min: 3043 bytes / 2.97 KB (-21), min: 7520 bytes / 7.34 KB *** refactor - simplify autoFit ResizeObserver, fix potential missed initial render ** 13.3.1-alpha.1 [2026-1-4] gz+min: 3078 bytes / 3.00 KB (+13), min: 7564 bytes / 7.39 KB *** perf - precompute step function in moveWord ** 13.3.0-alpha.1 [2026-1-4] gz+min: 3065 bytes / 2.99 KB (-31), min: 7560 bytes / 7.38 KB *** refactor - remove Selection.newLine, now handled entirely by Selection.insert ** 13.2.4-alpha.1 [2026-1-3] gz+min: 3096 bytes / 3.02 KB (-7), min: 7644 bytes / 7.46 KB *** refactor - consolidate setting cursor left to one place ** 13.2.3-alpha.1 [2026-1-2] gz+min: 3103 bytes / 3.03 KB (+6), min: 7678 bytes / 7.50 KB *** perf - compute selection loop bounds instead of continue ** 13.2.2-alpha.1 [2026-1-1] gz+min: 3097 bytes / 3.02 KB (0), min: 7659 bytes / 7.48 KB *** refactor - homogenously initialize elements of viewportLayers ** 13.2.1-alpha.1 [2025-12-31] gz+min: 3097 bytes / 3.02 KB (+5), min: 7661 bytes / 7.48 KB *** refactor - 1-liner to get css paramaters ** 13.2.0-alpha.1 [2025-12-31] gz+min: 3091 bytes / 3.02 KB (+16), min: 7675 bytes / 7.50 KB *** perf - render only if NoOp delete ** 13.1.1-alpha.1 [2025-12-31] gz+min: 3091 bytes / 3.02 KB (+16), min: 7675 bytes / 7.50 KB *** refactor - consolidate high level behavior of moveRow, moveCol ** 13.1.0-alpha.1 [2025-12-31] gz+min: 3075 bytes / 3.00 KB (+5), min: 7779 bytes / 7.60 KB *** perf - render only if non NoOp moveRow, moveCol ** 13.0.0-alpha.1 [2025-12-31] gz+min: 3070 bytes / 3.00 KB (-6), min: 7759 bytes / 7.58 KB *** breaking - Selection.ordered/unordered replaced with Selection.bounds(ordered) - bounds(1) = ordered [start, end], bounds() = unordered [head, tail] ** 12.14.3-alpha.1 [2025-12-30] gz+min: 3076 bytes / 3.00 KB (+5), min: 7799 bytes / 7.62 KB *** fix - hide cursor when scrolled outside viewport (was showing at wrong row) ** 12.14.2-alpha.1 [2025-12-30] gz+min: 3071 bytes / 3.00 KB (+6), min: 7775 bytes / 7.59 KB *** fix - Backspace/Enter/Tab now respect Mode.interactive (was bypassing read-only check) ** 12.14.1-alpha.1 [2025-12-30] gz+min: 3065 bytes / 2.99 KB (-2), min: 7757 bytes / 7.58 KB *** refactor - remove unnecessary default value from insert(s, skipRender = false) ** 12.14.0-alpha.1 [2025-12-30] gz+min: 3067 bytes / 3.00 KB (-24), min: 7760 bytes / 7.58 KB *** refactor - remove unused Model.splice and Model.delete methods ** 12.13.1-alpha.1 [2025-12-30] gz+min: 3094 bytes / 3.02 KB (0), min: 7844 bytes / 7.66 KB (-65) *** refactor - simplify Model.del: unified single/multi-line branches into 2 lines ** 12.13.0-alpha.1 [2025-12-30] gz+min: 3094 bytes / 3.02 KB (-5), min: 7909 bytes / 7.72 KB *** refactor - rename Model._insert to Model.add, Model._delete to Model.del - extensions updated: history.js, syntax.js, undotree.js, _template.js ** 12.12.1-alpha.1 [2025-12-30] gz+min: 3099 bytes / 3.03 KB (+2), min: 7941 bytes / 7.75 KB *** fix - renderHooks now receive correct Viewport.delta (was always 0 after reset) ** 12.12.0-alpha.1 [2025-12-30] gz+min: 3097 bytes / 3.02 KB (-10), min: 7935 bytes / 7.75 KB *** refactor - _insert and _delete moved from Buffee to Model (Model._insert, Model._delete) - removes const self = this from constructor - extensions updated: history.js, syntax.js, undotree.js now wrap Model methods ** 12.11.0-alpha.1 [2025-12-30] gz+min: 3110 bytes / 3.04 KB (-50), min: 7923 bytes / 7.74 KB *** refactor - _insert API changed from text-based to array-based: _insert(row, col, lines[]) - caller splits string before calling, eliminates split inside _insert ** 12.10.0-alpha.1 [2025-12-30] gz+min: 3160 bytes / 3.09 KB (-21), min: 8084 bytes / 7.89 KB *** refactor - _delete API changed from text-based to position-based: _delete(row, col, endRow, endCol) - eliminates text.split('\n') overhead in delete operations ** 12.9.0-alpha.1 [2025-12-30] gz+min: 3181 bytes / 3.11 KB (+4), min: 8241 bytes / 8.05 KB *** fix - forward selection off-by-1: Selection.lines now includes head character for forward selections - fixes single-line and multi-line forward selection clipboard copy ** 12.8.7-alpha.1 [2025-12-30] gz+min: 3177 bytes / 3.10 KB (0), min: 8215 bytes / 8.02 KB *** fix - clipboard copy/cut broken (.direct() should be .select(), regression from c815ea2) ** 12.8.6-alpha.1 [2025-12-30] gz+min: 3177 bytes / 3.10 KB (-7), min: 8215 bytes / 8.02 KB *** refactor - inline gutterDigits into gutterCols (only used in one place) ** 12.8.5-alpha.1 [2025-12-30] gz+min: 3184 bytes / 3.11 KB (-1), min: 8260 bytes / 8.07 KB *** fix - arrow key after selection caused TypeError (boolean array index needs | 0) - reverts 74e0a9f which incorrectly assumed boolean coerces to number for array index ** 12.8.4-alpha.1 [2025-12-30] gz+min: 3185 bytes / 3.11 KB (+14), min: 8256 bytes / 8.06 KB *** refactor - move gutterDigits and gutterCols to computed properties on Viewport - remove lastGutterDigits cache (browsers optimize same-value style sets) ** 12.8.3-alpha.1 [2025-12-30] gz+min: 3171 bytes / 3.10 KB (+2), min: 8191 bytes / 8.00 KB *** fix - selection not rendering on partial last row (use displayLines instead of size) ** 12.8.2-alpha.1 [2025-12-30] gz+min: 3169 bytes / 3.09 KB (-21), min: 8183 bytes / 7.99 KB *** fix - selection rendering was O(selection size) instead of O(viewport size) - consolidated 3 separate sizeSelection calls into single loop over viewport ** 12.8.1-alpha.1 [2025-12-30] gz+min: 3190 bytes / 3.12 KB (0), min: 8291 bytes / 8.10 KB *** style - standardize on single quotes throughout codebase ** 12.8.0-alpha.1 [2025-12-30] gz+min: 3192 bytes / 3.12 KB (-18), min: 8400 bytes / 8.20 KB *** refactor - combine moveWord and moveBackWord into one function with direction param ** 12.7.25-alpha.1 [2025-12-30] gz+min: 3210 bytes / 3.13 KB (0), min: 8503 bytes / 8.30 KB *** refactor - replace isSpace/isWord functions with regex constants ** 12.7.24-alpha.1 [2025-12-30] gz+min: 3210 bytes / 3.13 KB (-6), min: 8475 bytes / 8.28 KB *** refactor - inline $textLayer and $selectionLayer ** 12.7.23-alpha.1 [2025-12-30] gz+min: 3216 bytes / 3.14 KB (+9), min: 8483 bytes / 8.28 KB *** refactor - rename sel to dir for clarity ** 12.7.22-alpha.1 [2025-12-29] gz+min: 3207 bytes / 3.13 KB (-8), min: 8483 bytes / 8.28 KB *** refactor - combine isSelection and isForwardSelection into dir ** 12.7.21-alpha.1 [2025-12-29] gz+min: 3.15 KB (0), min: 8.42 KB (0) *** refactor - remove unnecessary | 0 from boolean array index (-2 bytes gzip) ** 12.7.20-alpha.1 [2025-12-29] gz+min: 3.16 KB (0), min: 8.42 KB (0) *** refactor - use shorter event param name (-14 bytes gzip) ** 12.7.19-alpha.1 [2025-12-29] gz+min: 3.15 KB (-0.01), min: 8.42 KB (+0.02) *** refactor - add handler map for meta and special keys ** 12.7.18-alpha.1 [2025-12-29] gz+min: 3.16 KB (-0.00), min: 8.40 KB (0) *** refactor - consolidate 'Escape' keypress with other NoOps ** 12.7.17-alpha.1 [2025-12-29] gz+min: 3.16 KB (-0.00), min: 8.40 KB (-0.01) *** fix - move end/start of line should work on Windows ** 12.7.16-alpha.1 [2025-12-29] gz+min: 3.17 KB (-0.00), min: 8.41 KB (-0.07) *** refactor - combine undo/redo handlers into one ** 12.7.15-alpha.1 [2025-12-29] gz+min: 3.17 KB (-0.00), min: 8.48 KB (-0.03) *** refactor - use countdown loops for viewport rebuild ** 12.7.14-alpha.1 [2025-12-29] gz+min: 3.17 KB (+0.01), min: 8.50 KB (+0.03) *** fix - frag() was calling itself instead of createDocumentFragment ** 12.7.13-alpha.1 [2025-12-29] gz+min: 3.16 KB (-0.01), min: 8.47 KB (-0.02) *** refactor - convert _insert, _delete, render from function to arrow functions ** 12.7.12-alpha.1 [2025-12-29] gz+min: 3.17 KB (-0.01), min: 8.49 KB (-0.21) *** refactor - add cmd/k/key/sh aliases for event properties in keydown handler ** 12.7.11-alpha.1 [2025-12-29] gz+min: 3.18 KB (-0.00), min: 8.71 KB (-0.08) *** refactor - add frag() alias for document.createDocumentFragment() ** 12.7.10-alpha.1 [2025-12-29] gz+min: 3.18 KB (-0.01), min: 8.77 KB (-0.02) *** refactor - simplify Mode.interactive comparisons (< instead of === or !==) ** 12.7.9-alpha.1 [2025-12-28] gz+min: 3.19 KB (-0.02), min: 8.79 KB (-0.11) *** refactor - golf horizontal scroll logic ** 12.7.8-alpha.1 [2025-12-28] gz+min: 3.21 KB (-0.00), min: 8.91 KB (-0.01) *** refactor - remove final exports on _ by making buffee._insert, and buffee._delete available ** 12.7.7-alpha.1 [2025-12-28] gz+min: 3.21 KB (-0.02), min: 8.92 KB (-0.05) *** refactor - remove appendLines from buffee, delegate to extensions to define ** 12.7.6-alpha.1 [2025-12-28] gz+min: 3.23 KB (-0.00), min: 8.97 KB (+0.01) *** refactor - move renderHook export to Mode.renderhooks ** 12.7.5-alpha.1 [2025-12-28] gz+min: 3.23 KB (-0.01), min: 8.97 KB (-0.02) *** refactor - replace head/tail export with Selection.unordered ** 12.7.4-alpha.1 [2025-12-28] gz+min: 3.24 KB (-0.00), min: 8.98 KB (-0.01) *** refactor - move some props on _ to this.Selection and this.Viewport ** 12.7.3-alpha.1 [2025-12-28] gz+min: 3.24 KB (-0.01), min: 8.98 KB (-0.01) *** refactor - let extensions query for DOM elements instead of exporting them ** 12.7.2-alpha.1 [2025-12-28] gz+min: 3.25 KB (+0.00), min: 8.99 KB (-0.09) *** refactor - move lineHeight into Mode ** 12.7.1-alpha.1 [2025-12-24] gz+min: 3.25 KB (-0.00), min: 9.08 KB (-0.01) *** refactor - make FrameCount a field on Mode ** 12.7.0-alpha.1 [2025-12-24] gz+min: 3.26 KB (+0.00), min: 9.09 KB (+0.10) *** refactor - make render a prototype function ** 12.6.6-alpha.1 [2025-12-24] gz+min: 3.25 KB (-0.00), min: 8.99 KB (-0.03) *** refactor - declare $clamp as lambda util ** 12.6.5-alpha.1 [2025-12-24] gz+min: 3.26 KB (0), min: 9.02 KB (-0.02) *** refactor - query against $parent container unconditionally ** 12.6.4-alpha.1 [2025-12-24] gz+min: 3.26 KB (-0.01), min: 9.04 KB (-0.03) *** refactor - set line height for lines, gutter, selection in a loop ** 12.6.3-alpha.1 [2025-12-24] gz+min: 3.27 KB (-0.01), min: 9.07 KB (-0.03) *** refactor - remove $selections, prune #sizeSelections ** 12.6.2-alpha.1 [2025-12-24] gz+min: 3.28 KB (+0.00), min: 9.09 KB (+0.03) *** refactor - encode update lambda for each of lines, selections, gutters in definition map ** 12.6.1-alpha.1 [2025-12-24] gz+min: 3.28 KB (-0.00), min: 9.07 KB (-0.03) *** refactor - loop over selections, lines, gutters logic ** 12.6.0-alpha.1 [2025-12-24] gz+min: 3.29 KB (-0.03), min: 9.09 KB (-0.05) *** refactor - style the selection with child css selector, avoids setting class in code ** 12.5.0-alpha.1 [2025-12-24] gz+min: 3.31 KB (+0.00), min: 9.14 KB (0) *** perf - cache the children of lines and gutters ** 12.4.0-alpha.1 [2025-12-24] gz+min: 3.31 KB (-0.00), min: 9.14 KB (+0.02) *** refactor - add selection to their own layer ** 12.3.4-alpha.1 [2025-12-24] gz+min: 3.31 KB (-0.06), min: 9.12 KB (-0.13) *** golf ** 12.3.3-alpha.1 [2025-12-24] gz+min: 3.37 KB (-0.02), min: 9.25 KB (-0.07) *** golf - moveWord, moveBackword ** 12.3.2-alpha.1 [2025-12-24] gz+min: 3.39 KB (-0.01), min: 9.32 KB (-0.04) *** golf - collapse branches ** 12.3.1-alpha.1 [2025-12-24] gz+min: 3.40 KB (-0.00), min: 9.35 KB (-0.04) *** golf - simplify loop to find unindentation spaces ** 12.3.0-alpha.1 [2025-12-24] gz+min: 3.40 KB (-0.10), min: 9.38 KB (-0.23) *** breaking - remove `callbacks` config option and `frameCallbacks` internal pattern - BuffeeStatusLine now decorator: `BuffeeStatusLine(new Buffee(el))` - add `editor._.frameCount` getter for render count tracking ** 12.2.3-alpha.1 [2025-12-24] gz+min: 3.50 KB (+0.01), min: 9.56 KB (-0.01) *** perf - cache #isSpace, #isWord regex ** 12.2.2-alpha.1 [2025-12-24] gz+min: 3.48 KB (+0.00), min: 9.57 KB (+0.00) *** golf - export _insert, _delete to extensions instead of renaming as insert, delete ** 12.2.1-alpha.1 [2025-12-24] gz+min: 3.48 KB (-0.00), min: 9.57 KB (-0.01) *** golf - render function doesn't need to return this ** 12.2.0-alpha.1 [2025-12-24] gz+min: 3.48 KB (-0.08), min: 9.58 KB (-0.25) *** extensions / rendering hooks - consolidate renderHooks from object with 3 arrays to single array - hooks receive (container, viewport, rebuilt) where rebuilt = Viewport.delta - remove onContainerRebuild, onRenderContent, onRenderComplete ** 12.1.1-alpha.1 [2025-12-24] gz+min: 3.54 KB (-0.03), min: 9.78 KB (-0.04) *** golf - optimize branch checks in insert method ** 12.1.0-alpha.1 [2025-12-24] gz+min: 3.56 KB (-0.02), min: 9.82 KB (-0.07) *** golf - always keep cursor visible, just hide off screen for read-only ** 12.0.0-alpha.1 [2025-12-24] gz+min: 3.58 KB (0), min: 9.90 KB (0) *** breaking - refactor to decorator pattern for extensions - remove editor.use() method from core - consolidate internal API into editor._ object - access internals via: const { render, insert, delete: del } = editor._ - extensions are pure functions: BuffeeHistory(editor) returns editor ** 11.2.2-alpha.1 [2025-12-22] gz+min: 3.62 KB (+0.00), min: 10.05 KB (+0.00) *** golf - inline isHorizontal and edgeIndex, only 2 vars: arrowCode, direction ** 11.2.1-alpha.1 [2025-12-22] gz+min: 3.62 KB (-0.01), min: 10.04 KB (-0.02) *** golf - bitwise ops: n >> 31 | 1 for sign, n % 2 for horizontal ** 11.2.0-alpha.1 [2025-12-22] gz+min: 3.64 KB (0), min: 10.06 KB (-0.21) *** golf - arrow key encoding with arrowMap, Math.sign, Math.abs ** 11.1.6-alpha.1 [2025-12-21] gz+min: 3.64 KB (+0.01), min: 10.27 KB (-0.07) *** refactor - Cache Object.entries(callbacks || {}) ** 11.1.5-alpha.1 [2025-12-21] gz+min: 3.63 KB (-0.05), min: 10.34 KB (-0.15) *** refactor - always get first render to set gutter size ** 11.1.4-alpha.1 [2025-12-21] gz+min: 3.64 KB (-0.04), min: 10.37 KB (-0.12) *** refactor - prune legacy helper to split lines ** 11.1.3-alpha.1 [2025-12-21] gz+min: 3.68 KB (-0.06), min: 10.49 KB (-0.19) *** refactor - remove #iosSetCursorAndRender to ios extension ** 11.1.2-alpha.1 [2025-12-21] gz+min: 3.74 KB (0), min: 10.68 KB (-0.05) *** golf - refactor shared logic between readonly and non-readonly renders ** 11.1.1-alpha.1 [2025-12-21] gz+min: 3.74 KB (-0.01), min: 10.73 KB (-0.03) *** golf - collapse branches with tab key pressed ** 11.1.0-alpha.1 [2025-12-21] gz+min: 3.74 KB (-0.01), min: 10.75 KB (-0.00) *** golf - destructure config values in params ** 11.0.8-alpha.1 [2025-12-21] gz+min: 3.75 KB (+0.01), min: 10.76 KB (+0.01) *** fix - cursor position after multi-char selection replacement ** 11.0.7-alpha.1 [2025-12-21] gz+min: 3.75 KB (-0.03), min: 10.75 KB (-0.05) *** breaking - move `interactive` property to `Mode.interactive` - add `Mode` namespace for mode-related settings ** 11.0.6-alpha.1 [2025-12-21] gz+min: 3.78 KB (+0.00), min: 10.79 KB (+0.05) *** breaking - remove _internals object, expose internal API via editor._ - editor._.head, editor._.tail (getters for cursor state) - editor._._insert, editor._._delete (wrappable primitives) - editor._.render, editor._.renderHooks - editor._.$e, editor._.$l, editor._.$textLayer - editor._.contentOffset, editor._.appendLines *** fix - fix stale cursor references in history extensions - fix atomic undo for selection replacement ** 11.0.5-alpha.1 [2025-12-21] gz+min: 3.78 KB (-0.49), min: 10.74 KB (-1.85) *** breaking - extract history (undo/redo) to opt-in extension - by default, editors have no undo/redo - enable with BuffeeHistory(editor) - remove History object from core entirely - make _insert/_delete standalone functions via _internals - history extension creates editor.History when loaded *** perf - add fast path for single-char inserts (skip split) - return split array from _insert for caller reuse - single keystrokes now do 0 splits instead of 2 ** 10.0.4-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.58 KB (0) *** refactor - use CSS variable for status bar padding ** 10.0.3-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.58 KB (0) *** fix - add font-size to status bar for consistent sizing ** 10.0.2-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.58 KB (0) *** refactor - extract z-index values to --buffee-z-* CSS variables - remove redundant properties (background-color, visibility, etc.) - simplify font-family to monospace ** 10.0.1-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.58 KB (0) *** refactor - remove redundant visibility:visible from selection CSS ** 10.0.0-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.58 KB (+0.04) *** breaking - rename all CSS classes from wb-* to buffee-* - rename root class from .wb to .buffee - rename CSS variables from --wb-* to --buffee-* ** 9.0.4-alpha.1 [2025-12-21] gz+min: 4.27 KB (0), min: 12.54 KB (0) *** docs - clarify required/optional elements in template.html ** 9.0.3-alpha.1 [2025-12-21] gz+min: 4.28 KB (+0.00), min: 12.56 KB (+0.00) *** breaking - rename config options: viewportRows โ†’ rows, viewportCols โ†’ cols - remove showGutter config option (now determined by template) ** 9.0.2-alpha.1 [2025-12-21] gz+min: 4.28 KB (+0.00), min: 12.56 KB (+0.00) *** refactor - rename legacy vbuf parameter to editor in all extensions ** 9.0.1-alpha.1 [2025-12-20] gz+min: 4.28 KB (+0.00), min: 12.56 KB (+0.00) *** refactor - user terminology of "digits" to refer to min digits, digit spaces, digit padding in gutter ** 9.0.0-alpha.1 [2025-12-20] gz+min: 4.27 KB (+0.00), min: 12.55 KB (+0.08) *** refactor - make gutter optional, depending on user template ** 8.8.14-alpha.1 [2025-12-20] gz+min: 4.27 KB (-0.01), min: 12.48 KB (-0.01) *** perf - only render delta of gutter lines ** 8.8.13-alpha.1 [2025-12-20] gz+min: 4.27 KB (+0.02), min: 12.49 KB (+0.08) *** refactor - make auto-fit a property on Viewport ** 8.8.12-alpha.1 [2025-12-20] gz+min: 4.25 KB (-0.00), min: 12.41 KB (-0.03) *** perf - don't toggle visiblity and just change width of selection ** 8.8.11-alpha.1 [2025-12-20] gz+min: 4.25 KB (-0.01), min: 12.44 KB (-0.04) *** refactor - streamline #sizeSelection helper call ** 8.8.10-alpha.1 [2025-12-20] gz+min: 4.26 KB (-0.01), min: 12.48 KB (-0.14) *** refactor - add sizeSelection helper for selection styling ** 8.8.9-alpha.1 [2025-12-20] gz+min: 4.25 KB (-0.02), min: 12.47 KB (-0.18) *** perf - hide selections and update line contents in single pass ** 8.8.8-alpha.1 [2025-12-20] gz+min: 4.26 KB (-0.02), min: 12.64 KB (-0.05) *** perf - render selections and line containers in single pass ** 8.8.7-alpha.1 [2025-12-20] gz+min: 4.29 KB (+0.01), min: 12.72 KB (+0.04) *** refactor - add lastDisplayLines with frame ** 8.8.6-alpha.1 [2025-12-20] gz+min: 4.28 KB (-0.01), min: 12.68 KB (-0.02) *** golf - golf gutter logic in render ** 8.8.5-alpha.1 [2025-12-20] gz+min: 4.29 KB (-0.04), min: 12.70 KB (-0.07) *** refactor - always render an extra line for autoFitViewport ** 8.8.4-alpha.1 [2025-12-20] gz+min: 4.33 KB (-0.00), min: 12.77 KB (-0.00) *** golf - use ?? operator ** 8.8.3-alpha.1 [2025-12-20] gz+min: 4.34 KB (0), min: 12.77 KB (0) *** refactor - consistently name DOM objects with $ ** 8.8.2-alpha.1 [2025-12-20] gz+min: 4.34 KB (+0.01), min: 12.77 KB (-0.14) *** refactor - re-org initialize code ** 8.8.1-alpha.1 [2025-12-20] gz+min: 4.33 KB (-0.05), min: 12.91 KB (-0.16) *** refactor - consolidate indentation and expandtab into single Mode.spaces setting ** 8.8.0-alpha.1 [2025-12-20] gz+min: 4.37 KB (-0.04), min: 13.07 KB (-0.06) *** refactor - expose Mode object ** 8.7.8-alpha.1 [2025-12-20] gz+min: 4.41 KB (-0.00), min: 13.13 KB (-0.02) *** golf ** 8.7.7-alpha.1 [2025-12-20] gz+min: 4.42 KB (+0.00), min: 13.15 KB (-0.01) *** golf - combine handling " " and other key inserts into one branch ** 8.7.6-alpha.1 [2025-12-20] gz+min: 4.44 KB (+0.03), min: 13.25 KB (+0.08) *** perf - cache indentation string ** 8.7.5-alpha.1 [2025-12-20] gz+min: 4.41 KB (-0.00), min: 13.17 KB (-0.00) *** golf - #addSelections method ** 8.7.4-alpha.1 [2025-12-20] gz+min: 4.41 KB (-0.00), min: 13.17 KB (-0.01) *** golf ** 8.7.3-alpha.1 [2025-12-20] gz+min: 4.42 KB (-0.00), min: 13.18 KB (-0.04) *** golf ** 8.7.2-alpha.1 [2025-12-20] gz+min: 4.44 KB (+0.00), min: 13.23 KB (-0.05) *** golf - use regex in moveCursorStartOfLine ** 8.7.1-alpha.1 [2025-12-20] gz+min: 4.44 KB (-0.04), min: 13.27 KB (-0.09) *** golf - prune deadbranches ** 8.7.0-alpha.1 [2025-12-20] gz+min: 4.50 KB (-0.02), min: 13.36 KB (-0.06) *** refactor - refactor CSS for selection to css file ** 8.6.0-alpha.1 [2025-12-20] gz+min: 4.53 KB (+0.01), min: 13.42 KB (-0.01) *** fix - when moving left to end of previous row, move to phantom newline position ** 8.4.0-alpha.1 [2025-12-20] gz+min: 4.53 KB (+0.01), min: 13.44 KB (0) *** fix - off-by-1 bug with cut, copy, delete, replace, insert, selection, should be everything left of cursor. ** 8.3.0-alpha.1 [2025-12-20] *** fix - copy and cut not working ** 8.2.8-alpha.1 [2025-12-20] gz+min: 4.58 KB (+0.01), min: 13.50 KB (0) *** fix - remove tabfocus outline on editor ** 8.2.7-alpha.1 [2025-12-20] gz+min: 4.58 KB (+0.01), min: 13.50 KB (-0.01) *** fix - gutter width should be based on viewport lines, not model ** 8.2.6-alpha.1 [2025-12-20] *** refactor - isolate blockquote, semantically, the the text lines ** 8.2.5-alpha.1 [2025-12-20] gz+min: 4.59 KB (+0.01), min: 13.50 KB (-0.03) *** refactor - flatten html structure ** 8.2.4-alpha.1 [2025-12-20] gz+min: 4.60 KB (+0.01), min: 13.53 KB (0) *** fix - suppress outline around editor focus ** 8.2.3-alpha.1 [2025-12-20] gz+min: 4.60 KB (+0.04), min: 13.53 KB (+0.09) *** fix - behavior of buffee height when inside container ** 8.2.2-alpha.1 [2025-12-20] gz+min: 4.57 KB (+0.03), min: 13.45 KB (+0.02) *** fix - viewportRows explictly specified takes precedence over flexbox autoheight ** 8.2.1-alpha.1 [2025-12-20] gz+min: 4.55 KB (+0.01), min: 13.43 KB (0) *** fix - height calculation on buffee should not care about status line anymore ** 8.2.0-alpha.1 [2025-12-20] gz+min: 4.57 KB (+0.01), min: 13.45 KB (0) *** refactor - new parentNode dom structure is required ** 8.1.0-alpha.1 [2025-12-20] gz+min: 4.58 KB (+0.03), min: 13.52 KB (+0.03) *** refactor - separate parentNode from blockquote for optional status line placement ** 8.0.6-alpha.1 [2025-12-19] gz+min: 4.55 KB (+0.02), min: 13.42 KB (+0.03) *** status line - make spacing off elements more consistent ** 8.0.5-alpha.1 [2025-12-19] gz+min: 4.56 KB (+0.02), min: 13.49 KB (+0.03) *** feature - client can customize status line's coordinate with custom HTML for row/col to be slotted ** 8.0.0-alpha.1 [2025-12-19] gz+min: 4.55 KB (+0.01), min: 13.57 KB (-0.04) *** config - omit showStatusLine. be smart and infer ** 7.8.1-alpha.1 [2025-12-20] gz+min: 4.55 KB (+0.00), min: 13.54 KB (-0.07) *** fix - gutter width not set on first render (always set inline style) ** 7.8.0-alpha.1 [2025-12-19] gz+min: 4.56 KB (+0.01), min: 13.61 KB (0) *** fix - viewport was manually scrollable iff partially rendered last row in auto-fit. ** 7.7.9-alpha.1 [2025-12-19] gz+min: 4.56 KB (-0.00), min: 13.61 KB (-0.06) *** config - simplify setting css in buffee ** 7.7.8-alpha.1 [2025-12-19] gz+min: 4.57 KB (-0.00), min: 13.66 KB (-0.03) *** config - remove advanced config ** 7.7.7-alpha.1 [2025-12-19] *** config - gutter-padding and gutter-size is delegated to stylesheet ** 7.7.6-alpha.1 [2025-12-19] *** config - autoFitViewport is enabled if viewportRow config option is omitted or set to 0 ** 7.7.5-alpha.1 [2025-12-19] *** fix - during selection, status bar showed column of selction tail, not cursor (selection head) ** 7.7.4-alpha.1 *** refactor superfluous variable ** 7.7.3-alpha.1 [2025-12-19] gz+min: 4.62 KB (-0.08), min: 13.65 KB (-0.19) *** refactor - cleanup Viewport#scroll ** 7.7.2-alpha.1 [2025-12-19] *** fix - add missing height for .wb-selection in CSS (was removed when delegating lineHeight to CSS) ** 7.7.1-alpha.1 [2025-12-18] gz+min: 4.75 KB (+0.01), min: 13.86 KB (-0.11) *** refactor(config) - carve out gutter padding to CSS variable ** 7.7.0-alpha.1 [2025-12-18] gz+min: 4.75 KB (+0.01), min: 13.86 KB (-0.11) *** refactor(config) - carve lineHeight out of config, retrieve from css variable ** 7.6.9-alpha.1 [2025-12-18] gz+min: 4.75 KB (-0.00), min: 13.97 KB (-0.05) *** internals - omit getting layer element and delegate to extension to query ** 7.6.8-alpha.1 [2025-12-18] gz+min: 4.77 KB (-0.04), min: 14.02 KB (-0.14) *** refactor - carve z-index out of buffee and delegate to client HTML ** 7.6.7-alpha.1 [2025-12-18] gz+min: 4.82 KB (-0.02), min: 14.17 KB (-0.12) *** refactor - delegate restructuring layers DOM to HTML templating ** 7.6.6-alpha.1 [2025-12-18] gz+min: 4.84 KB (-0.08), min: 14.29 KB (-0.27) *** refactor - prune static css in buffee.js to style.css ** 7.6.5-alpha.1 [2025-12-18] gz+min: 4.94 KB (-0.05), min: 14.56 KB (-0.10) *** config - remove primary, secondary color param. specify in stylesheet ** 7.6.4-alpha.1 [2025-12-18] *** refactor - removed old logging code during indent ** 7.6.3-alpha.1 [2025-12-18] *** config - make zIndexText, zIndexCursor, zIndexElements options under config.advanced ** 7.6.2-alpha.1 [2025-12-18] *** golf - [0,0,0].map to create document fragments - const Viewport = ... ; this.Viewport = Viewport, can be done in 1 line *** refactor - prune performance profiling code ** 7.5.0-alpha.1 [2025-12-18] *** config - new `interactivity` flag: -1 read-only, 0 navigation, 1 normal ** 7.4.1-alpha.1 [2025-12-18] *** refactor - remove #appendLineAtEnd used for ultra-high-capacity logger - privatize #appendLines API. Refactor File Loader extensions. Fixed read-only.html sample. ** 7.3.0-alpha.1 [2025-12-18] *** refactor - include necessary flexbox styles in style.css so user doesn't have to specify ** 7.2.0-alpha.1 [2025-12-18] *** refactor - auto-row unless viewportRow specified ** 7.1.0-alpha.1 [2025-12-18] *** refactor - normalize name of viewport row/col config. initialViewportSize->viewportRow, columns->viewportCols ** 7.0.0-alpha.1 [2025-12-18] *** refactor - move some config options to advanced ** 6.1.3-alpha.1 [2025-12-18] *** feature - Add rightScrollBuffer config (default 2ch) to ensure cursor visible at line ends ** 6.1.2-alpha.1 [2025-12-18] *** refactor - Extract structural CSS to style.css (colors defined by user) - Remove redundant overflowX from buffee.js (now in style.css) ** 6.1.1-alpha.1 [2025-12-18] *** fix - Keep grid fixed, snapping to left edge of viewport, rather than relative to cursor which may advance less than 1ch ** 6.1.0-alpha.1 [2025-12-18] *** feature - Scroll viewport horizontally on long lines ** 6.0.2-alpha.1 [2025-12-18] *** docs - Document font requirements: some monospace fonts (Monaco) have inaccurate `ch` values causing cursor drift - Recommended fonts: Menlo, Consolas, generic `monospace` ** 6.0.1-alpha.1 [2025-12-17] *** feature - autoFitViewport: automatically size viewport to container height with ResizeObserver ** 6.0.0-alpha.1 [2025-12-17] *** refactor - render text in separate layer ($textLayer). cursor and element layers appended immediately. ** 5.7.2-alpha.1 [2025-12-17] *** refactor - API for explicit registration of extensions ** 5.7.1-alpha.1 [2025-12-16] *** feature - layered rendering. rewrite tui extension (legacy) as elementals extension. ** 5.7.0-alpha.1 [2025-12-16] *** feature - different color for cursor/head from rest of selection ** 5.6.9-alpha.1 [2025-12-16] *** fix - softtabs when loading or pasting buffer with tab character ** 5.6.8-alpha.1 [2025-12-16] *** optimization - only add/remove selection containers equal to delta in number of lines of viewport ** 5.6.7-alpha.1 [2025-12-16] *** Fix/Refactor - Make selection absolute instead of viewport relative. Now handles larger selection. ** 5.6.6-alpha.1 [2025-12-16] *** Fix - Gutter >9 shouldn't resize when going from 9->10 line file ** 5.6.5-alpha.1 [2025-12-16] *** Fix - Include phantom new line in selections ** 5.6.4-alpha.1 [2025-12-16] *** Fix - "up" "right" on empty file caused viewport to scroll negative ** 5.6.3-alpha.1 [2025-12-16] *** Fix - Handle viewport scroll down when "move forward word" ** 5.6.2-alpha.1 [2025-12-16] *** Fix - Handle viewport scroll when "move back word" ** 5.6.1-alpha.1 [2025-12-16] *** Feat - Coallase atomic inserts/delete that are not spanning a new line is a single undo ** 5.6.0-alpha.1 [2025-12-16] *** Feat - Add History API and undo/redo ** 5.5.9-alpha.1 [2025-12-16] *** Optimization - avoid a redundant render when new line ** 5.5.8-alpha.1 [2025-12-16] *** Optimization - Update indentation in status bar only when indentation set ** 5.5.7-alpha.1 [2025-12-16] *** Fix - Resize gutter size when downshifting ** 5.5.6-alpha.1 [2025-12-16] *** Refactor - carve out chunkloader as extension ** 5.5.5-alpha.1 [2025-12-16] *** Refactor - carve out treesitter as extension ** 5.5.3-alpha.1 [2025-12-16] *** Refactor - Add API for extensions, carve out TUI. ** 5.5.2-alpha.1 [2025-12-16] *** Refactor - Add JSDoc ** 5.5.1-alpha.1 [2025-12-16] *** ๐Ÿ”ง API Changes - TUI: add #addScrollbox API for scrollbox element ** 5.5.0-alpha.1 [2025-12-16] *** ๐Ÿ”ง API Changes - TUI: add #addPrompt API for prompt element ** 5.4.2-alpha.1 [2025-12-16] *** ๐Ÿ”ง API Changes - TUI: hide #addElement, expose #addButton. Add button variant with border. ** 5.4.0-alpha.1 [2025-12-16] *** ๐Ÿ”ง API Changes - TUI: Removed getElements() and getElementAt(), replaced with elements property (raw array, not a copy) - TUI: Combined highlightAll() and unhighlightAll() into setHighlight(enabled) ** 5.3.1-alpha.1 [2025-12-14] *** โœจ New features - Demo TUI: layout for file navigator to demo tui buttons, file loader *** ๐Ÿž Bug Fixes - TUI: Highlight state was reset when activating elements; now uses global highlight state ** 5.3.0-alpha.1 [2025-12-12] *** โœจ New features - TUI API: api to activate current element, triggering user callback ** 5.2.0-alpha.1 [2025-12-11] *** โœจ New features - Prototype TUI API: Add nextElement method, can tab to next element ** 5.1.0-alpha.1 [2025-12-9] *** โœจ New features - Prototype TUI API: support multiple buttons on a row ** 5.0.0-alpha.1 [2025-12-3] *** โœจ New Features - Prototype TUI API to add button elements and have them highlighted ** 4.1.0-alpha.1 [2025-10-10] *** โœจ New Features - Ability to hide status line ** 4.0.0-alpha.1 [2025-10-10] *** โœจ New Features - Ability to hide gutter ** 3.1.0-alpha.1 [2025-10-10] *** โœจ New Features - Ability to set a custom logger. ** 3.0.0-alpha.1 [2025-10-10] *** โœจ New Features - Ultra-high-capacity mode supports billion line files ** 2.3.0-alpha.1 [2025-10-1] *** โœจ API - Accept a configuration object for instantion ** 2.2.5-alpha.1 [2025-10-1] *** ๐Ÿž Bug Fixes - Editor was falsely initialized to a selection - Head cursor of one editor instance was entangled with another instance ** 2.2.4-alpha.1 [2025-10-1] *** ๐Ÿž Bug Fixes - Unindent did not work with cursor. Related, w/ selection the unindent should consume spaces right of head/tail cursor first then move cursor only if there is no spaces left to consume ** 2.2.3-alpha.1 [2025-10-1] *** ๐Ÿž Bug Fixes - create selection and select until beginning/end of line was not working - create selection and select until next/prev word was not working ** 2.2.1-alpha.1 [2025-10-1] *** โœจ New Features - support moving to back word with option (MacOS) / alt (windows) + arrow left ** 2.2.0-alpha.1 [2025-10-1] *** โœจ New Features - support moving to next word with option (MacOS) / alt (windows) + arrow right ** 2.1.3-alpha.1 [2025-10-1] *** ๐Ÿž Bug Fixes - prevent browser scroll when press space key ** 2.1.2-alpha.1 [2025-09-30] *** ๐Ÿž Bug Fixes - position iOS touch cursor to the previous most meaningful coordinates ** 2.1.1-alpha.1 [2025-09-30] *** ๐Ÿž Bug Fixes - Prevent iOS viewport scrolling to the "sink" used to accept iOS keyboard input ** 2.1.0-alpha.1 [2025-09-30] *** โœจiOS Support - Support tap to set cursor ** 2.0.0-alpha.1 [2025-09-30] *** โœจiOS Support - Launch iOS keyboard and handles backspace, new line, characters *** ๐Ÿ˜ถ Known issues - Emoji glyphs are wider than 1ch and lines with emojis misaligned ** 1.0.0-alpha.1 [2025-09-29] *** โœจ New Features - Clipboard `โŒ˜ + V` paste and `โŒ˜ + C` copy - Maximizes browser compatibility using 'copy'/'paste' event instead of keypress listener - standard security - copy required