Open
Conversation
…ate picker, context menu submenus, locale, cell editor registry, datetime editor Benchmark suite: BenchmarkRunner, measureMultiRun, computeStats, measureThroughput — 6 metrics across 1K/10K/100K row datasets. Text measurement and word-wrap: TextMeasureCache extended with measureEmHeight, getWrappedLines (word-boundary + char fallback), countWrappedLines, measureWrappedHeight. ColumnDef.wrapText option. CellTextLayer renders multi-line wrapped text. Auto row height: RowStore auto/manual height separation with manual-always-wins priority. LayoutEngine.setRowHeightsBatch() for O(n) batch updates. CellTypeRenderer.measureHeight() and RenderLayer.measureHeights() protocols. AutoRowSizeManager with viewport-first sync measurement and requestIdleCallback async sweep. Dirty tracking (per-row and global), scroll compensation to prevent visual jumps when off-screen heights change. Column stretch: ColumnStretchManager with 'all' and 'last' modes. Container resize observation via ResizeObserver. Manual resize exclusion, frozen column handling, minWidth enforcement. Date picker: DatePickerOverlay — pure-DOM calendar widget positioned below target cell. Month/year navigation, day grid, keyboard nav (arrows, Enter, Escape, Tab), Today button. ARIA role=dialog. Grid scroll and outside click close the picker. Context menu submenus: ContextMenuItem.submenu for recursive nesting. Chevron indicator, hover delay (200ms/150ms), ArrowRight/Left keyboard navigation. Empty menu prevention via recursive hasVisibleChildren check. Locale system: SpreadsheetLocale interface with EN and RU packs. resolveLocale() merges partial locales over English defaults. Runtime switching via setLocale(). Covers context menu, date picker, datetime picker, filter panel, accessibility, aggregates. Cell editor registry: CellEditor interface (open/close/destroy lifecycle), CellEditorRegistry with priority-sorted resolution. DatePickerEditor adapter wraps DatePickerOverlay. InlineEditor as fallback. Engine delegates editor lifecycle via registry. DateTimeEditor: combined calendar + hour/minute spin controls for 'datetime' columns. Commits ISO YYYY-MM-DDTHH:mm. Tab cycles calendar/hour/minute sections. Now button, theme-aware, locale-aware. Demo page overhaul: sidebar layout with Display, Data, Views, Import/Export, Collaboration sections. Feature toggles, badges, 1K default rows with 1M toggle. All features demonstrated. Tests: 1708 unit tests (77 files), 13 E2E Playwright tests. README, CHANGELOG, CONTRIBUTING updated.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Auto row height, column stretch, date picker, context menu submenus, locale, cell editor registry, datetime editor.
Changes
Benchmark suite: BenchmarkRunner, measureMultiRun, computeStats, measureThroughput — 6 metrics across 1K/10K/100K datasets.
Text measurement + word-wrap: TextMeasureCache extended with getWrappedLines (word-boundary + char fallback), measureWrappedHeight. ColumnDef.wrapText option. CellTextLayer renders multi-line wrapped text.
Auto row height: RowStore auto/manual separation (manual wins). LayoutEngine.setRowHeightsBatch() for O(n) batch. AutoRowSizeManager: viewport-first sync + requestIdleCallback async sweep. Dirty tracking, scroll compensation.
Column stretch: ColumnStretchManager with 'all' and 'last' modes. ResizeObserver. Manual resize exclusion, frozen column handling.
Date picker: DatePickerOverlay — pure-DOM calendar, keyboard nav, ARIA role=dialog.
Context menu submenus: ContextMenuItem.submenu for recursive nesting. Chevron, hover delay, keyboard nav. Empty menu prevention.
Locale system: EN/RU packs, resolveLocale(), runtime switching.
Cell editor registry: CellEditor interface, CellEditorRegistry with priority resolution. DatePickerEditor adapter. InlineEditor fallback.
DateTimeEditor: Calendar + hour/minute spin controls for 'datetime' columns. ISO YYYY-MM-DDTHH:mm commit. Tab cycling, Now button.
Demo overhaul: Sidebar layout, all features demonstrated, 1K default / 1M toggle.
Tests