4879 Commits
Author SHA1 Message Date
Martín Lucas Golini 0bebfc6167 Merge branch 'develop' eepp-5.0.0 2026-10-08 00:25:32 -03:00
Martín Lucas Golini 9d8ec467cf Modernize UI Editor with isolated previews and UIApplication
- Reimplement previews using nested UISceneNodes with isolated styles
  and resources.
- Preserve live XML/CSS editing, unsaved buffer previews, external file
  watching, and project resource loading.
- Use UIApplication for initialization, font resolution, and offscreen
  rendering support.
- Enable Breeze by default, add a menu toggle, and replace
  --use-app-theme with --disable-app-theme.
- Automatically preserve declared project viewport dimensions, with
  an optional override to use the preview split size.
- Support embedded HTML documents inside WebView XML elements.
- Fix fading window shadows and shutdown with visible modal dialogs.
- Update documentation and add regression coverage.
2026-10-07 14:02:56 -03:00
Martín Lucas Golini 66d2c9d4d2 eproc: improve startup memory collection and tab navigation
Publish the base process snapshot without waiting for PSS collection.
Leave Family Memory blank until startup accounting completes.

- Derive PSS policy from saved column visibility before startup.
- Collect Linux startup PSS with four temporary workers and seed the cache.
- Apply completed samples only to matching process identities without
  advancing performance history or aging ended processes.
- Preserve live cache entries while memory columns are hidden and
  invalidate entries on PID reuse.
- Share table-state parsing and validation; remove unused migrations.
- Add next-tab and previous-tab commands with Mod+Tab and Mod+Shift+Tab.
- Remember and restore each tab's last focused widget.
- Add coverage for startup collection, cache lifetime, saved visibility,
  and asynchronous family-memory updates.
2026-10-07 02:27:25 -03:00
Martín Lucas Golini f4f9f5a9eb Fix MSVC build. 2026-10-07 01:46:51 -03:00
Martín Lucas Golini 8a3fbb6719 Replace select() with poll()/WSAPoll() in SocketSelector
SocketSelector used fd_set + select() on every platform. On POSIX,
descriptors >= FD_SETSIZE (1024) were rejected and only logged, so a
UI inspector listener or client opened that high was never serviced.
On Windows, the selector held at most 64 sockets (Winsock's default
FD_SETSIZE).

SocketSelector:
- Use a shared pollfd implementation on every platform: poll() on
  POSIX and WSAPoll() on Windows. This removes both FD_SETSIZE limits.
  Store descriptors in a SmallVector<pollfd, 16>, which covers the
  inspector's peak without heap allocations.
- Report POLLIN | POLLERR | POLLHUP as ready to match select()'s read
  readiness, so a peer disconnect still triggers the receive() that
  discovers it. Windows reports a graceful shutdown as POLLHUP.
- Treat negative timeouts as an immediate check instead of an infinite
  wait.
- Clear revents when poll() fails, so isReady() never reports readiness
  left over from an earlier wait.
- An empty selector sleeps for a finite timeout and returns false;
  with an infinite timeout it returns immediately. WSAPoll() rejects
  empty sets, and nothing could ever become ready anyway.
- Remove sockets by swapping with the last entry instead of shifting.
- Raise the Winsock target to Vista (0x0600), the minimum for WSAPoll().

UI inspector:
- Stop watching the listener while the 16-client limit is reached. A
  pending connection kept it readable, so every wait() returned
  immediately and the network thread spun.

Tests:
- Add SocketSelector tests for listener and data readiness, removal,
  duplicate adds, disconnect readiness, negative timeouts and empty
  selectors, plus a POSIX run with every descriptor above FD_SETSIZE.
- Add HighFileDescriptorReservation, shared with
  Http.tcpConnectTimeoutHandlesFdAboveFdSetSize. It raises the soft
  RLIMIT_NOFILE when needed, so the high-fd tests run under common
  defaults (1024 on Linux, 256 on macOS) instead of being skipped.
- Fix UIHTML.AttributeSelectorsMatchWidgetIds on Windows: it compared
  c_str() of a temporary that was destroyed before the check.
- Fix UIHTML.StylesheetsDoNotPaintRawTextNodes on Windows: read the
  frame before display(), because Windows drivers don't preserve the
  back buffer after a buffer swap.
2026-10-07 01:07:03 -03:00
Martín Lucas Golini be17af3da0 Fix CSS selector backtracking, union style dependencies and bind libeepp calls directly
Selector matching (Selectors Level 4 §17.3):
- Retry other candidates for descendant and general-sibling combinators
  instead of rejecting after the first failed path. Checkpoints use a
  fixed array of one entry per checkpoint-saving rule (16 on the stack,
  32/64 in out-of-line helpers, heap beyond), with failure pruning so
  exhausted searches stop early.
- Handle <html> as a style-sheet parent boundary whose siblings stay
  visible: failed parent steps at an <html> with element siblings retry
  instead of rejecting, and a ~ candidate that is such an <html> resumes
  its search without a checkpoint.
- Reject the subject before sizing storage for long selectors.

Style dependencies:
- getRelatedElements() now returns the union of tracked elements over
  every matching path, so state changes on any eligible ancestor or
  sibling restyle the subject. Strategies are chosen per selector:
  immediate exit, fixed-prefix walk, single candidate scan (with a
  shared suffix for ~ candidates), an ancestor-path DP, and a memoized
  collector. All are linear and allocation-free for common selectors.

Other fixes:
- Exclude raw text nodes from matched author styles; their widget
  backgrounds painted over glyphs drawn by the parent rich text.
- Report widget ids from getPropertyString() so [id=...] selectors match.
- Add StyleSheetSelectorRule::hasAnyPseudoClasses() and
  UIStyle::getRelatedWidgets() (inline, ABI-compatible additions).

Build:
- Link libeepp with -Wl,-Bsymbolic-functions on Linux, BSD and Haiku so
  internal calls skip the PLT (11,314 -> 619 PLT entries). Measured:
  Markdown load -25%, selector matching -11%, attribute matching -14%.

Tests and benchmarks:
- Regression tests for backtracking, <html> boundaries, subscription
  union and cleanup, operation-count bounds, long selectors and id
  attribute selectors, plus a differential test against an exhaustive
  reference matcher.
- Add Benchmark.CSSSelectorCombinators and Benchmark.CSSStateDependencies
  and create all benchmark windows hidden.
2026-10-07 00:03:22 -03:00
Martín Lucas Golini b2ce5097cd Fix emscripten build. 2026-10-06 01:48:04 -03:00
Martín Lucas Golini d49fe3fdc8 Add date and time pickers with calendar popups and HTML mappings
- Add CalendarDate, TimeOfDay, LocalDateTime and DateRange with Gregorian
  arithmetic, locale-aware formatting/parsing, ISO serialization and Unix
  timestamp conversions with explicit UTC offsets.
- Add UIDateTimeEdit, UIDatePicker, UITimePicker, UIDateTimePicker and
  standalone UICalendar, with XML/CSS registration and data binding.
- Support segmented keyboard editing, numeric entry, ISO paste, configurable
  steps, bounds, empty values and independent seconds/milliseconds display.
  Default time display to hours and minutes while preserving stored precision.
- Add day/month/year calendar navigation and a combined date-time popup with
  time steppers, live configuration updates and scoped event connections.
- Add Breeze and fallback theme styles with CSS-defined SVG icons, dp sizing,
  font-aware calendar dimensions and muted read-only/disabled controls.
- Map HTML date, time and datetime-local inputs to native controls with strict
  value sanitization, min/max/step/required/readonly/disabled handling,
  constraint validation and normalized form serialization.
- Provide private light HTML control defaults and intrinsic temporal sizing;
  prevent author CSS from styling anonymous implementation parts.
- Share popup placement and visibility helpers across pickers, dropdowns and
  trigger/cursor menus while retaining cascading-menu placement rules.
- Fix fractional grid wrapping and input cursor bubbling over child buttons;
  notify and refresh styles when editing permission changes.
- Reduce CSS registration allocations with string_view parameters and
  heterogeneous name lookup; inline frequently used node and CSS getters.
- Align CodeEditor default font sizing with text widgets without overriding
  application preferences.
- Add HTML form margin defaults and update the affected rendering baseline.
- Upgrade Windows ecode nightly builds to Ubuntu 24.04 and newer MinGW.
- Add picker documentation, an example and regression coverage for date math,
  locales, editing, popup placement/lifetime, HTML controls and pixel density
2026-10-06 01:13:44 -03:00
Martín Lucas Golini 0d33723caf Fix Windows tests. Added portability requirement to unit-tests.md. 2026-10-05 01:25:44 -03:00
Martín Lucas Golini e9f074b1d2 Fix baseline alignment when rendering mixed rich-text fonts + Fix image diff button hit-testing and native pixel sizing
- Compensate for the difference between font ascent used by RichText layout
  and the character-size baseline used by Text rendering. Cache the natural
  baseline in each text span while preserving background and selection boxes.

- Add pixel-level coverage for proportional and monospace fonts at matching
  and different sizes, with default and explicit line heights. Refresh the
  affected rendering reference images.

- Keep diff view select buttons last in the child list so lazily created
  image viewers cannot intercept their clicks.

- Display source images and generated diffs at native pixel dimensions,
  independent of UI density, scaling down only to fit the viewport. Avoid
  rounding twice at fractional densities.

- Add regression coverage for mode switching and sizing at densities
  1, 1.5, and 2. Use portable temporary paths.
2026-10-05 00:57:39 -03:00
Martín Lucas Golini 98e9213f4d Add local Markdown navigation and persistent ecode previews and fix terminal selection bounds and vertical auto-scroll
- Follow local Markdown links relative to each document, including
  relative file:// paths, with configurable handling and async loading.
- Add validated subtree navigation interceptors and custom link flows.
- Introduce UIScrollableMarkdownView with XML support and scroll reset
  after successful navigation.
- Add opt-in Back/Forward history, localized context menu actions, and
  mod+[ / mod+] shortcuts; enable history in ecode previews.
- Restore preview tabs between sessions and preserve live editor binding
  and unsaved source content when navigating back.
- Refresh the README around eepp's GUI framework and document the new APIs.
- Remove the fixed Markdown code font size and add regression coverage
- Clamp selection coordinates independently so horizontal dragging preserves
  the selected row. Use the mouse event's Y coordinate against the terminal's
  vertical bounds, including padding, and retain unclamped coordinates during
  periodic updates outside the window.
2026-10-05 00:12:07 -03:00
Martín Lucas Golini 003c6c5691 Merge branch 'develop' of github.com:SpartanJ/eepp into develop 2026-10-04 18:08:05 -03:00
Martín Lucas Golini 4b6f4081dd Fix remote branch checkout naming and tracking
- Preserve nested branch names when removing the remote prefix.
- Create and check out local branches with explicit upstream tracking.
- Avoid marking tracked branches as local only.
- Cache the resulting local branch name after checkout.
- Add regression coverage for nested names, custom names, and checkout failures
2026-10-04 18:07:49 -03:00
Martín Lucas Golini 4f268d1cd0 Fix filesystem events for files added to project root
Recognize the canonical root path with or without a trailing slash so
root-level add and move events can find their parent node.

Add regression tests for root-level file and directory additions and
moving a file into the project from outside the tree.
2026-10-04 00:02:42 -03:00
Martín Lucas Golini 387c83da8d Use much smaller chunks and hope for the best. 2026-10-02 20:09:53 -03:00
Martín Lucas Golini 4102c69eb3 Add dev boostrap script. 2026-10-02 11:06:31 -03:00
Martín Lucas Golini 29b7d10766 Improve splitting logic to upload the dev artifact. 2026-10-02 09:41:42 -03:00
Martín Lucas Golini b4290f288d Try again. 2026-10-02 01:16:05 -03:00
Martín Lucas Golini 30ae16666a Try fix arm64 build. 2026-10-02 00:54:56 -03:00
Martín Lucas Golini 8ff06ba3c4 Try to split the artifacts when package is bigger than 400MB. 2026-10-02 00:46:52 -03:00
Martín Lucas Golini da5de53fb1 Linux CI fix. 2026-10-02 00:01:25 -03:00
Martín Lucas Golini 2c8b9c2dc0 Build a eepp-dev-linux-x86_64 package (this will contain all build objects and binaries, allowing to just downloading this and make changes directly without having to recompile the whole thing). 2026-10-01 23:33:01 -03:00
Martín Lucas Golini af273c08a4 Avoid redundant layout invalidation from inline fragment sizing
Track when the formatting owner assigns fragment bounds and suppress
layout feedback from text-node and inline-span size changes. Preserve
size events and invalidation from callback-driven text or style changes.

Add regression coverage for content reuse and table sizing after size
callbacks. Preserve class sizes and existing member offsets.

Adjust browser toolbar padding and remove the URL bar's right margin.
2026-10-01 01:41:18 -03:00
Martín Lucas Golini e4801afab9 Reduce rich-text rebuilds and normalize browser addresses
- Reuse unchanged inline content and fragment lookups.
- Share plain-text min/max intrinsic measurements without copying
  existing shaped layout state.
- Preserve content invalidation during active measurements.
- Default URL bar and CLI addresses to HTTPS while preserving
  explicit URLs and local file paths.
- Fix Windows header macro conflicts and eproc signal declarations.
- Add regression coverage for reuse, rewrapping, and invalidation
2026-10-01 00:45:25 -03:00
Martín Lucas Golini ddc9112f13 Reduce redundant HTML table layout work. Add browser shortcuts and keybinding inspection.
- Skip dirty-descendant scans for leaf layouts during document construction.
- Treat table-assigned cell sizes as computed output, avoiding repeated measurement and intrinsic-size invalidation.
- Defer descendant changes until table traversal completes, preserving content updates and propagating completed intrinsic contributions.
- Add regressions for dirty-root coalescing, cell measurement, nested table reflow, and content changes during size events.
- Register tab, address-bar, reload, and history navigation commands in ui_html
- Route toolbar actions through the registered commands
- Add read-only ui.keybindings queries for scenes and supported widgets
- Extend the inspector CLI, documentation, and regression tests
2026-09-30 23:53:18 -03:00
Martín Lucas Golini e03dd32f68 Remove small delay when closing the eterm window. 2026-09-30 19:04:12 -03:00
Martín Lucas Golini e8c592f2b5 Ups forgot to update the test. 2026-09-30 13:50:37 -03:00
Martín Lucas Golini 2613ec0921 Fix remaining DPI inconsistencies and expand regression coverage
Correct checkbox and radio autosizing, submenu padding, scrollbar skin
sizing, and nested menu-bar popup coordinates.

Preserve resolved stroke widths through CSS serialization and transitions,
including HTML's special px scaling.

Add high-density regressions for these fixes and the preceding DPI cleanup
commits, covering padding and margin setters, widget defaults, dialog
dimensions, table padding, editor spacing, and diff gutters.
2026-09-30 12:19:40 -03:00
Martín Lucas Golini d04a6ad279 Fix cursor jump when clicking a scrolled editor split
Preserve the viewport when restoring a pane's selection on mouse focus,
so click hit testing uses the visible text. Keep scrolling to the restored
cursor for keyboard and programmatic focus changes.

Refs SpartanJ/ecode#958
2026-09-30 11:18:58 -03:00
Martín Lucas Golini fcded81a7f More pixel density errors fixed. 2026-09-30 10:24:06 -03:00
Martín Lucas Golini cd16932ba9 A bunch of minor bug fixes related to incorrect pixel density usage in different widget types. Optimized drainAsyncResourceMainThreadQueue to avoid in most common cases heap-allocating and to correctly call functions in the right UISceneNode context. 2026-09-30 02:01:33 -03:00
Martín Lucas Golini f8f5627f77 Add clipboard change events and configurable split tab bars in eterm and fixed scrolling tests.
- Translate SDL2 and SDL3 clipboard updates into ClipboardChanged events.
- Expose Unknown, Self, and External clipboard ownership metadata.
- Add regression tests for event dispatch and ownership defaults.
- Add a persisted eterm setting controlling tab bars in split panes.
- Fixed both scrolling tests. SDL2 starts text input automatically on desktop, so the first Space waited for a text event the key-only test never sent.
2026-09-29 19:38:19 -03:00
Martín Lucas Golini a8eb1834eb Add tabbed HTML browsing and extend eepp navigation and input support
eepp framework:
- Add shared cookie jars to UISceneNode and UIWebView, plus versioned
  CookieManager persistence, domain clearing, and locking in hasCookie().
- Follow HTTP 303 redirects and merge same-host redirect cookies as
  name/value pairs without forwarding Set-Cookie attributes.
- Include Cookie headers in document cache keys while preserving static
  resource reuse as cookies change.
- Submit HTML forms with an empty action to the current document URL.
- Extend NavigationRequest with source, mouse buttons, modifiers, and
  navigation target; anchors forward this context to the scene.
- Emit OnLinkOpenRequested for middle-click, platform-modifier click,
  and explicit new-tab requests, with current-view fallback if unhandled.
- Install the WebView navigation interceptor during construction.
- Dispatch middle clicks to the hovered node without moving keyboard focus.
- Add the clicked target to ContextMenuEvent so applications can extend
  context menus through existing events.
- Parse HTML titles, emit TitleEvent, and fix onTitleChanged's payload cast.
- Load declared favicons through the shared image cache, emit
  OnFaviconChanged, and ignore responses from superseded navigation.
- Add optional UITabWidgetSplitter tab-bar visibility while split;
  keep it disabled by default and respect explicitly hidden tab bars.
- Add Space/Shift+Space scrolling and viewport-sized Page Up/Down steps
  to UIScrollView, shared by WebView and Markdown content.
- Implement setEnableDefaultKeybindings() and preserve text-input
  priority through normal bubbling without control-type checks.
- Report inserted UICodeEditor text as handled.
- Add UITextView::onFontColorChanged() and synchronize password-mask color.
- Support validated left, middle, and right clicks in the inspector
  server and Python client.

ui_html example:
- Use UITabWidgetSplitter for tabs and user-controlled splits.
- Share cookies and the resource cache across tabs; persist cookies
  between sessions and open new tabs blank.
- Add Inspect, Clear Domain Cookies, Clear All Cookies, and contextual
  Open Link in New Tab actions through menu event subscriptions.
- Open requested links in background tabs and synchronize navigation UI.
- Use document titles and 16dp favicons for tabs, cap width at 200dp,
  and truncate long titles with ellipsis.
- Enable tab-bar visibility across split panes.
- Fixed: the selection rectangle now uses the visible password symbols instead of the original text.

Update HTML compatibility and inspector documentation and add regression
coverage for persistence, redirects, cache isolation, navigation, menus,
titles, favicons, password colors, split visibility, and scrolling.
2026-09-29 18:58:51 -03:00
Martín Lucas Golini a090d1a666 Fix CSS state rollback for transient properties. eproc: add keyboard navigation between search and process views, fix Send Signal menu events.
Store native and inherited fallback values outside local styles, then restore them when state rules stop matching. Handle indexed properties across overlapping states and retain a serialized value when an inherited source disappears. Add rollback regression tests and update the CSS documentation

Focus and select the first process row when pressing Down in the search input. Pressing Up from the first row returns focus to search in both table and tree views.
2026-09-29 14:56:01 -03:00
Martín Lucas Golini 3dada4857a Slight improvements to the macOS icons. Fix CI. 2026-09-29 02:03:55 -03:00
Martín Lucas Golini 850f33c336 Polish app icon sizing and bump eepp and ecode versions
Generate size-aware macOS icons and separate runtime Dock PNGs for ee,
ecode, eterm, eeiv, and eproc. Keep shared PNGs sized for small Linux
icons, and package ecode's macOS runtime icon.

Bump eepp to 5.0.0 (Kittima-attā) and ecode to 0.9.0 (Yanta-lekhā).
2026-09-29 01:02:07 -03:00
Martín Lucas Golini 6e665c533d docs: reorganize agent files and improve UI onboarding
- Rename .agent to .agents and update plan references
- Add an articles index and clearer links to the UI inspector
- Correct the UI introduction’s CSS inheritance guidance and add an example workflow
- Add F11 visual inspection to the hello-world example and enlarge its window to fit
- Remove the old Kitty keyboard plan and TODO.md
2026-09-28 19:59:10 -03:00
Martín Lucas Golini ee0d9378ad Expand UI documentation and refine link context menus
Add guides for native UI authoring, layouts, application CSS, and HTML
compatibility. Update the CSS reference, rename article files consistently,
and point README links to the local guides.

Add Copy Link for HTML and Markdown anchors when no text is selected.
Resolve relative links against the document URI before copying, and cover
Markdown and WebView behavior with tests.

Fix layout width policy serialization to use the widget's width.
2026-09-28 19:20:34 -03:00
Martín Lucas Golini fd5a3718d4 Renamed UIStackLayout to UIFlowLayout throughout the engine and its usages, including the header and source files, XML tag, runtime type, widget factory, docs, and typed lookups. The layout behavior is unchanged. Separate UIStackWidget and debugger stack views retain their names. 2026-09-28 15:25:56 -03:00
Martín Lucas Golini 1b3227699f eproc: improve process names and performance charts
Extend truncated Linux process names from argv[0] when it safely matches
the kernel-provided name. Fill performance chart lines and show uptime
in readable days, hours, and minutes, with the new text ready for i18n.
2026-09-28 13:10:53 -03:00
Martín Lucas Golini 89512ce8b0 Fix MSVC Windows build. 2026-09-28 12:22:05 -03:00
Martín Lucas Golini 5db8d78725 - SocketSelector::isReady() (src/eepp/network/socketselector.cpp:111) no longer treats a Windows socket handle as an FD_SETSIZE index. That check prevented the inspector server from responding.
- Token generation (src/eepp/ui/tools/uiinspectorserver.cpp:67) now uses `BCryptGenRandom` on Windows, including for screenshot filenames.
- Split basic HTML defaults from document and form styles
- Load only structural defaults for Markdown views, leaving document colors and form-control styles to full HTML documents. Add Breeze styling for Markdown horizontal rules and HTML textareas.
2026-09-28 11:45:35 -03:00
Martín Lucas Golini 4073208e87 Fix HTML and Markdown text selection starting from unrelated drags
Require the initial mouse press to occur within the view’s selection tree, excluding scrollbars. This prevents scrollbar drags and drags from a code editor from starting text selection when the pointer enters the view.

Add regression coverage for both cases
2026-09-28 11:04:44 -03:00
Martín Lucas Golini 542075cca6 **fix(ui): prevent MSVC from generating UIInspector copy operations**
`UIInspector` owns move-only event connections. Explicitly delete its copy constructor and assignment operator so MSVC does not instantiate invalid copies of the handle maps. Restore the dense map implementation
2026-09-28 10:51:16 -03:00
Martín Lucas Golini 27bfbb4b3a * UIInspector now stores move-only event connections in a node-based map, avoiding the MSVC vector copy error.
* Batch results now initialize as a JSON object. The previous initialization created an array, causing both reported Linux and macOS test failures.
2026-09-28 10:10:44 -03:00
Martín Lucas Golini 4ffba20d07 feat(ui): add runtime inspector and fix HTML layout regressions
Add an opt-in TCP/NDJSON inspector for running eepp applications. It
provides authenticated, UI-thread-safe access to windows, scenes, and
widgets, including nested WebView documents. The v1 protocol supports
queries, trees, properties, focus, input actions, watches, screenshots,
and composed batches with result references and deferred execution.

Add a standard-library Python CLI, protocol documentation, build
entries, and integration tests. The listener remains disabled unless
explicitly enabled.

Fix HTML compatibility issues found while debugging NewsBlur:
- Let explicit flex minimums, including min-width: 0, replace the
  automatic content minimum.
- Measure flex lines against the container content box when padding
  and explicit dimensions are present.
- Keep promoted positioned descendants of hidden ancestors out of
  the paint list.
2026-09-28 01:15:39 -03:00
Martín Lucas Golini cfe7761880 fix(ui): clear shared dispatcher references when an embedded scene is destroyed
An embedded UI scene can leave the host event dispatcher pointing to it after teardown. With hidden windows starting the mouse at (0, 0), the next update can call onMouseLeave on the destroyed scene and crash.

Clear hover, focus, and mouse-down references before detaching the shared dispatcher.

Verified with 20 runs of UIWebView.DestroyWithPendingSubresourcesIsSafe and the full macOS release suite (1,310 tests).
2026-09-27 01:26:47 -03:00
Martín Lucas Golini 0bf8db4cf0 feat(ecode): add Zen Mode
Add a View menu toggle, keyboard shortcut, and --zen-mode option.
Hide the side panel, status bar, menu controls, tab bar, and document
info while Zen Mode is active, then restore configured visibility.
Add the menu label to all locale catalogs. Refs SpartanJ/ecode#964.

Test stability

test(ui): stabilize visual tests and Windows clipboard assertions

Initialize hidden SDL windows with an internal mouse position of (0, 0)
so desktop cursor hover cannot affect visual tests. Assert this in
complexLayout3 and normalize Windows clipboard line endings in the
Markdown selection test.
2026-09-27 00:47:29 -03:00
Martín Lucas Golini 1174e97911 Add optional filled areas to UI chart lines
Allow each LineSeries to fill down to the plot’s bottom edge, using a translucent version of its line color by default or a custom fill color. Render overlapping fills beneath the strokes, document the new API, and demonstrate it in the charts example. Add coverage for blending, data gaps, and toggling fills.
2026-09-26 23:59:19 -03:00
Martín Lucas Golini 2d7623c5fa Fix Windows build. 2026-09-26 23:30:00 -03:00