[1.7.0] - 2026-10-27
Added
-
Navigation completion callbacks. Adds top-level
options.onCompletetosetStartDate(), the range-fitting methods,goToPixelAnim(),goToDateAnim()andsettleDateBounds(). Successful immediate and already-at-target navigation requests also complete asynchronously after the final viewport draw, with one callback for combined pan and zoom. Replacement navigation and interruptions cancel pending completion. See navigation completion for method details and cancellation rules. -
Built-in card presets. Adds the portrait-based
title-only,title-subtitle,label,image-textandimage-onlypresets, pluspill, a landscape extension with a circular thumbnail, rounded ends and a single-line title. Pill width fits its content up to 360 pixels; symmetric 14-pixel header/subheader padding keeps text clear of the rounded ends with or without an image. Text margins and the image’s right margin default to zero so block padding controls the spacing. All support the normal style overrides. See the preset guide. -
Card-layout inheritance.
Timeline.registerCardLayout()acceptsextendsto reuse a registered layout’s rendering and measurement hooks while overriding individual hooks or normal, hover and active defaults. Extensions capture their parent’s hooks and defaults at registration and have their own layout-specific style overrides. See extending a layout. -
Clearing configuration overrides. Adds
Histropedia.UNSET, also available as a named export, to remove overrides through timeline, article, lane, chart and time-band option/style setters. Dot paths and sparse object patches restore the applicable default or inherited value, or remove properties with no fallback. Extended layouts can also remove inherited style declarations during registration. See clearing overrides. -
Connector line and arrow styling. Adds
connectorLine.color,dashandlineCap, plus independentarrow.visibleandarrow.colorcontrols. Colours can follow the current article state, and arrows can inherit the line colour. Setting line thickness to zero allows arrow-only connectors. See connector styling. -
Article auto width. Article styles accept
width: 'auto'with an optionalmaxWidthcap. Width follows text and layout spacing rather than image resolution; the resolved width controls wrapping, drawing, image decode targets, geometry and viewport fitting. Custom layouts can supply their own width measurements through the existing hook, with the shared cap applied afterwards. Numeric widths remain unaffected bymaxWidth. -
Shared article sizing. Portrait and landscape support automatic or numeric card and text-block heights, multi-line subtitles, block background colours and
image.visible. Within fixed-height cards, automatic text blocks allocate complete lines with title priority, reserving a subtitle line when both fit; numeric blocks keep their requested allocation and can clip overflowing text. Portrait images use the remaining height while preserving their width and cropping when necessary; automatic landscape height uses a stable thumbnail footprint. See article sizing. -
Text-block padding. Header and subheader blocks accept a single padding number for all sides or a
{ top, right, bottom, left }object, defaulting to zero. Padding contributes to automatic sizing and wrapping, insets text inside fixed blocks, and is included in block backgrounds. Empty automatic blocks still collapse. -
Per-side image margins.
image.marginaccepts a{ top, right, bottom, left }object in both built-in layouts, alongside the existing numeric shorthand for equal spacing. Individual sides apply to rendering, sizing, image decode targets and interaction styles. -
Pinch zoom momentum. Touchscreen pinches glide after release with both zoom and midpoint pan velocity, enabled by default. Configure zoom inertia with
zoom.pinchMomentumand pan inertia withpan.momentum, with independent activation and velocity/friction settings. Momentum respects zoom/date bounds, supports repeated pinches and stops for taps, holds, deliberate pans, cancellation, wheel input orsetZoom(). Inertia emitszoomevents afterzoom-pinch-end;timeline-state-changefollows the completed glide. Touchpad input keeps its existing momentum behaviour.
Changed
-
Consistent image height caps.
image.maxHeightnow applies to every image shape in portrait and landscape, including automatic square/circle portrait images and fixed-height landscape thumbnails. Numeric card heights remain unchanged. Raise the cap if an image previously exceeded it and should retain its size; default landscape thumbnails are unaffected. -
Navigation callback timing. Existing nested
animation.complete, flatcompleteand positionalzoomToAnim()callbacks remain supported, but now follow the asynchronous, final-draw and cancellation contract above.onCompletetakes precedence when both callback forms are supplied. -
Article sizing compatibility. A shared numeric card height now constrains portrait, and landscape honours explicitly configured block heights, subtitle line limits and block colours. Zero-height blocks disable their text. Automatic text allocation uses full font ascent/descent, and subtitle line spacing defaults to 14 pixels. Use layout-specific overrides when different values are intentional. See sizing migration.
-
Landscape image margin.
image.marginnow also separates the thumbnail from the text column on its right. With the default 4-pixel margin and a visible image, fixed-width cards have 4 fewer pixels available for text, which can cause earlier wrapping. -
Landscape star overlay. Showing the star no longer reserves a separate part of the text column or changes wrapping. As in portrait, the star overlays the card content; use text margins or padding if additional clearance is needed.
-
Active subtitle background. The default dark active subtitle fill now belongs to portrait’s registered layout defaults instead of the global article defaults. Custom layouts that relied on the global fill must declare it explicitly or extend portrait.
-
Redraw performance. Reduces repeated density-selection scans, per-article default/style resolution and width validation during stacking. Geometry checks avoid serialized cache keys, and card fade/movement frames avoid unnecessary restacking.
Fixed
-
Article priority. Selected articles always take priority over starred articles, and starred articles over normal articles, with descending rank within each tier. Density filtering and the effective-rank sorter use explicit tiers instead of fixed rank boosts, so large ranks and small rank differences work correctly.
-
Article text truncation. Titles and subtitles fill the final visible line with as much text as fits, including part of a long word. Oversized single-word text is ellipsized rather than compressed to fit. Truncation measures the ellipsis together with the text and preserves grapheme clusters where
Intl.Segmenteris available. -
Card-layout alias defaults. Aliases without their own registered defaults now use the target layout’s registered styles, so an alias of landscape receives its dimensions and styling. Timeline and lane layout-specific overrides still use the selected alias name.
-
Small-card star hit areas. Both built-in layouts constrain the star’s size and interaction box to the card bounds, keeping compact cards’ star hit areas inside the card.
-
Moving pinch anchor. Simultaneous pinch zoom and pan now preserve the date under the moving finger midpoint.
-
Pinch-to-pan handoff. Small movements during staggered finger releases no longer shift or fling the viewport. Intentional one-finger panning resumes without a jump.
Documentation & Internal
-
Guides, examples and typings. Adds article-sizing, navigation-completion and override-removal guides; expands custom-layout, connector and gesture documentation; and adds auto-width, sizing, inheritance and preset demo scenarios. Public TypeScript definitions cover the new APIs and options.
-
Repeatable performance comparisons. Adds seeded navigation and input benchmarks, JSON result export/import, workload validation and baseline compatibility checks. Git revision builds use a common production recipe for commit comparisons without switching the checkout. Adds v1.6.1 and v1.6.2 demo comparison bundles. See the benchmark guide.
-
Touchscreen diagnostics. Adds a local pinch recorder with downloadable pointer, frame and viewport traces, plus a physical-device testing guide.
[1.6.2] - 2026-09-23
Fixed
-
BCE article range fitting.
fitArticleRange()andfitArticles()now fit stored article dates without applyingshiftBceDatesa second time. Animated and immediate fits place BCE periods at the same dates as the articles. -
Parent-decade boundary handoff. Parent label intervals now share the precision range boundaries, placing
1–9at year 1 CE and handing sticky context from9–1 BCEto1–9, then10s, at the correct era and decade boundaries. -
Short-decade parent labels. Parent date labels show the shortened boundary decades as
9–1 BCEand1–9instead of1s BCEand1s, retaining the configured BCE suffix. The BCE precision demo now enables parent labels. -
BCE coarse precision boundaries. Decades group historical tens digits (29 through 20 BCE, 19 through 10 BCE, etc.) consistently with either
shiftBceDatessetting. Boundary buckets contain 9 through 1 BCE and 1 through 9 CE, without crossing eras. BCE million- and billion-year precisions resolve containing historical periods rather than ranges starting at the supplied year. Century, millennium, and other CE behaviour are preserved. The BCE precision boundaries demo exercises both input encodings and all coarse precisions.
[1.6.1] - 2026-09-05
Fixed
- Infer time precision from date parts. Fixed date-parts objects containing time components defaulting to day precision. When
precisionis omitted, precision is inferred from the smallest supplied time component; date-only values still default to day precision. An explicitly suppliedprecisionalways takes precedence.
- Automatic height fitting after option changes. Updating reserved vertical space with
timeline.setOption(...), including parent date-label visibility or height, now refits stacked articles before redrawing when auto-fit is enabled. No manualfitToHeight()call is needed.
[1.6.0] - 2026-09-04
Added
- Opt-in sub-day zoom. Extends the timeline scale through hours, minutes, seconds, and milliseconds using the new
ZOOM_HOUR,ZOOM_MINUTE,ZOOM_SECOND, andZOOM_MILLISECONDlevels. Existing timelines retain day-level minimum zoom by default; setzoom.minimumbelow0to opt in. Adaptive major and clock-style minor labels remain readable through scale transitions, ranked density filtering uses time-anchored binary regions, split day/millisecond coordinates preserve precision even at billion-year dates, and chart geometry remains stable with extremely distant offscreen points. - Millisecond date precision. Extends
Dmy, articles, time bands, chart points, viewport bounds, and saved timeline state with optionalhour,minute,second, andmillisecondfields. Adds matching precision constants and legacy numeric values, precision-aware exclusive range boundaries, time arithmetic and formatting helpers, and compact data keys for sub-day values while preserving date-only serialization. - Canonical date-time navigation strings.
initialDate, date bounds,setStartDate(...),setCentreDate(...),goToDateAnim(...), andfitDateRange(...)now accept timezone-free strings in the formyear[-month[-day]][T| ]hour[:minute[:second[.SSS]]], including BCE and deep-year values. Timezone suffixes and fractions finer than milliseconds remain unsupported. - Sticky major date labels. Adds
style.dateLabel.major.stickywith configurable activation and left-edge offset. The default"auto"mode enables sticking only at the month and finer scales where persistent context is useful. When sticking is enabled, the current major label remains visible at the left edge and is pushed out as the next major interval arrives. - Parent context date labels. Adds an optional, default-off
style.dateLabel.parentrow for persistent higher-level calendar context without changing existing major or minor labels. The row supports scale-level selection, reserved height, font and colour styling, BCE and deep-time labels, and sticky interval transitions. - Configurable main-line fills. Adds
style.mainLine.color, accepting either a CSS colour string or a top-to-bottom gradient object, with a safe fallback for malformed gradient values. - State-aware date indicators. Adds
style.mainLine.dateIndicatorsfor rectangle or circle indicators with configurable size, colour, and opacity. Base, density-hidden, and active states can be styled independently, including resolving colours from the corresponding article state. - Configurable chart series palette. Adds
chart.seriesColorsfor replacing the colours assigned cyclically to chart series without an explicit or shared series colour, including runtime updates throughtimeline.setOption(...). - Current article style helper. Adds
Article#getCurrentStyle()so custom card layouts can retrieve the fully merged style for the current normal, hover, active, or active-hover state without relying on internal methods or duplicating state-selection logic.
Changed
- Article style inheritance. Registered card-layout styles now act as defaults instead of overriding explicitly configured timeline or lane styles. Article styles resolve from base defaults through layout defaults, timeline, lane, and article overrides, with layout-specific values applied after generic values within each scope. This may change rendering where the same property was previously defined by both a registered layout and timeline or lane configuration.
- Default timeline palette. Replaces the previous main-line gradient with a neutral solid fill and refines the default main-line, article-card, and density-hidden indicator colours for clearer visual hierarchy. The previous gradient remains available through
style.mainLine.color. - Chart grid-line defaults. Moves the canonical timeline-wide chart grid-line configuration to
chart.defaultStyle.gridLine, alongside the other chart visual defaults. Chart-levelstyle.gridLinecontinues to override the timeline default.
Deprecated
- Top-level chart grid-line option.
chart.gridLineis deprecated in favour ofchart.defaultStyle.gridLine. Constructor options and runtimesetOption(...)updates continue to accept the old location, emit a deprecation warning, and migrate it to the canonical style path; canonical values win when both forms are supplied.
Removed
- Previously undocumented date-indicator toggle. Removes
style.mainLine.showDateIndicators, which was included in the public TypeScript definitions but not documented in the guides. Usestyle.mainLine.dateIndicators.visibleand the new indicator style options instead.
Fixed
- Offscreen chart geometry. Pre-clips line segments and area polygons to chart plot bounds before Canvas rasterization, preventing rendering loss from extremely distant coordinates at sub-day zoom while preserving viewport-edge interpolation and null gaps.
Dmyprecision retention. Object-form construction and date arithmetic retain a suppliedprecisionproperty without changing existing enumeration or JSON output.- Mutable
Dmycalculations.Dmy#getDayOfYear()now recalculates from the instance’s writable calendar fields instead of returning a stale cached value after mutation. - Pixel-snapped article connectors. Aligns vertical connector strokes and arrowheads to the same device-pixel, CSS-pixel, or unsnapped mode used by their article cards, including correct alignment for different line widths.
- Card-layout star interaction boxes. Defines
getIconBox()around the rectangular star hover/click area only. Built-in layouts now returnleft,top,width, andheight, while their renderers derive pixel-snapped centre and radius values locally; previously released drawing fields remain optional deprecated type properties for compatibility. - Chart grid-line defaults. Uses a one-pixel default thickness for both major and minor grid lines, and synchronizes the documented minor-line visibility and spacing defaults with the runtime. Runtime updates made through the deprecated
chart.gridLinealias now also re-resolve existing charts through its canonical path.
Documentation & Internal
- Sub-day and date-label guidance. Expands the README and date-precision guide with sub-day fields, precision boundaries, navigation strings, zoom configuration, adaptive markers, density behaviour, main-line styling, and state-aware date indicators; adds a dedicated parent-context label guide and runnable sub-day demo.
- Custom card-layout reference. Adds a complete guide to
Timeline.registerCardLayout(...), including registry timing, rendering and measurement hooks, selection precedence, aliases, caching, JavaScript, TypeScript, and UMD usage. - Public typings. Extends TypeScript coverage for date/time values, sub-day constants and precision, main-line fills, date indicators, sticky and parent labels, adaptive marker spacing, navigation inputs, date bounds, and the existing article pixel-snapping modes.
- Demo and regression tooling. Adds v1.4.0, v1.5.0, and v1.5.1 comparison bundles, sub-day scenarios, and a line/area chart selector for the performance demo, with expanded rendering, viewport, density, date-label, chart, and type regression coverage.
[1.5.1] - 2026-07-28
Fixed
- Elastic date-bound dragging. Prevents the viewport from jumping when a pinch gesture returns to a single-pointer drag while elastic date bounds are active.
- Responsive demos. Keeps demo timelines fitted to mobile viewport sizes, including embedded and type-check examples.
Documentation & Internal
- Date-bounds demo coverage. Adds and registers an elastic date-bounds scenario with regression coverage for the scenario runner.
- Development dependency maintenance. Refreshes compatible transitive tooling dependencies, including the patched PostCSS release.
[1.5.0] - 2026-07-14
Added
- Timeline charts. Adds a visual line-chart layer that shares the timeline date scale, with initial chart data via
options.chart.data, runtime loading and removal APIs (loadCharts(...),loadLaneCharts(...),removeChart(...),clearCharts()), configurable chart areas, y-scale options, styling, multiple series, data gaps, and lane-scoped charts that render inside lane bodies. - Date bounds. Adds
options.boundswith optionalminDate,maxDate, andoverflowsettings so the visible viewport can be constrained by date range. Programmatic viewport changes, panning, momentum, wheel zoom, and pinch zoom now respect configured bounds. - Per-timeline debug overlays. Adds
options.debugOverlays.densityRegions, disabled by default, to draw non-interactive vertical guides at the current article-density region boundaries. Visual overlays are independent from the global logging-onlyHistropedia.setDebug()mode.
Changed
- String option selectors. Date precision, article density, and auto-stacking range constants now resolve to descriptive strings such as
"month","all", and"screen". Engine and article defaults now use these string values directly. - Start-date navigation options.
timeline.setStartDate(date, options)now accepts an options object with left-onlypaddingand ananimationobject matchingtimeline.fitDateRange(...). The legacy numericpixelOffsetargument still works with a deprecation warning. - Timeline state-change timing. Emits
timeline-state-changeonly after meaningful timeline interactions settle, such as completed viewport drags, zoom gestures, animations, and article drags, so expensive save handlers are not called on every movement frame.
Deprecated
- Numeric option selectors. Legacy numeric values for date precision, article density, and auto-stacking range remain supported for backwards compatibility but are deprecated in favour of their descriptive string equivalents.
- Legacy date animation API.
timeline.goToDateAnim(...)is deprecated in favour oftimeline.setStartDate(date, { padding, animation: { active: true, ... } }).
Fixed
- Article removal state changes.
timeline.removeArticleById(...)now emitstimeline-state-changewhen an article is removed. - Date input normalization. Methods that normalize dates through
getDmyFromInput(...), includingtimeline.setStartDate(...), now accept plain{ year, month?, day? }objects, default missingmonthanddayvalues to1, and apply BCE shifting without mutating the caller’s date object. - Animated day-range fitting. Keeps
timeline.fitDateRange(...)zoom animation smooth for short day-level ranges by preserving fractional day spans during intermediate zoom calculations. - Browser-zoomed notched wheel input. Detects browser zoom-scaled mouse-wheel deltas so smooth discrete wheel zoom animation still runs when the page is zoomed.
- Discrete wheel zoom restacking. Restacks articles when a smooth discrete wheel zoom animation settles, preventing overlaps after a single notched wheel action.
[1.4.0] - 2026-05-08
Added
- Multi-lane timelines. Adds
options.lane,ArticleData.lane,timeline.loadLanes(...),timeline.loadLaneArticles(...), and a newLaneruntime API, enabling events to be organised into separate horizontal lanes while sharing a single bottom timeline axis. Maintainstimeline.articlesas a flat array for backwards compatibility. - Lane rendering and layout. Introduces DOM-based lane backgrounds and titles with CSS-first styling (inline styles only when explicitly set). Supports per-lane article option overrides (e.g. default styles), and handles density grouping, row stacking, and baseline scaling independently within each lane.
- Lane layout controls. Adds options for lane header visibility, top gap, height weighting, and period-line baseline/anchor spacing.
- Lane visibility and reordering APIs. Adds lane hide/show helpers and convenience methods on both
timelineandLanefor reordering by index, relative position, or adjacent step. - Timeline pan momentum. Adds configurable momentum after viewport drag release via
options.pan.momentum, with controls for enabling, velocity sampling, friction, stop velocity, and maximum duration. - Discrete wheel zoom animation. Adds
options.zoom.discreteWheelAnimation, enabled by default for notched mouse-wheel input, providing smooth animated zoom transitions that preserve the cursor anchor while repeated wheel input continues the zoom fluidly. - Date range fitting API. Adds
timeline.fitDateRange(start, end, options)to zoom and position the timeline so a supplied date range fits the viewport. Accepts eitherDmyinstances or plain{ year, month?, day? }inputs, treats year-only and month-only dates as full periods for fit calculations, supports symmetric or per-side horizontal padding, and can optionally animate zoom and pan together. - Article range fitting APIs. Adds
timeline.fitArticleRange(article, options)to fit a single article’s full period, andtimeline.fitArticles(options)to fit all currently unfiltered article cards into the viewport. - Responsive baseline distance. Adds responsive baseline settings under
article.distanceToBaseline, withvalueas the static fallback andresponsive.byCardLayoutproviding per-card-layout ratios and bounds. Responsive distances are chosen from the resolved default card layout; unmatched layouts usevalue. - Article card layout breakpoints. Adds ordered
article.cardLayoutBreakpointsfor height-based layout overrides, including defaults that switch low-height timelines tolandscapewhenportraitcards would be unusable. - Article pixel snapping control. Adds
article.rendering.pixelSnapwithdevice,css, andnonemodes so article rendering can trade crisp device-pixel alignment for smoother subpixel motion when needed. - Public
TimeBandexports. Exposes theTimeBandconstructor as bothHistropedia.TimeBandon the default export and a direct named ESM export. This brings it in line with other main classes such asTimelineandArticle, and enables advanced prototype-based extensions.
Changed
- Package distribution metadata and typings. Aligns package entry points and named exports, declares supported Node.js versions, limits published package contents to runtime essentials, and fills missing index typings for package consumers.
- Default wheel zoom responsiveness. Increases the default
options.zoom.wheelStepfrom0.1to0.2so wheel zooming feels more responsive out of the box.
Deprecated
- Legacy baseline option.
article.distanceToMainLineis deprecated in favour ofarticle.distanceToBaseline.value. The old option name still maps through as an explicit numeric override for backwards compatibility, includinglane.article.distanceToMainLine.
Fixed
- False double-click detection. Tightens click tracking so
article-dblclickandtimeline-dblclickonly fire after two completed clicks on the same target, clears pending click state when touch input turns into a pinch, and suppresses legacy synthetic mouse events that could make a single tap register twice. - Compatibility wrapper for article.activated(). Maintains functionality of article method removed in v1.3.0 by triggering
article-clickevent. - Occluded article hover states. Prevents articles from entering hover styles when the pointer is over another DOM element stacked above the timeline, while preserving window-level drag tracking beyond the canvas edge.
- Timeline item ID matching. Compares article and lane IDs without implicit type coercion so values such as
1and"1"are treated as distinct IDs. - Boolean article opacity values. Normalizes boolean opacity values to numeric values, which occurred
- Article pixel jitter during slow pans. Stabilizes article rendering by using a shared snapped origin for card internals, aligning connector endpoints to the rendered card position, and snapping portrait and landscape card geometry to the active device-pixel grid by default.
Documentation & Internal
- Lane docs and demo coverage. Adds lane examples to the README, demo scenarios, public type fixtures, and unit tests, and updates the type-check script so the verification pipeline passes consistently.
[1.3.3] - 2026-02-04
Fixed
- Time Band opacity bleed. Resets the canvas
globalAlphaat the start of each Time Band draw so the overlay does not inherit the last rendered article’s fade opacity when it has no image.
[1.3.2] - 2026-01-25
Fixed
- Legacy event handler
thiscontext. Preserves the timeline instance asthisinside legacy event handlers (onSave,onArticleClick,onArticleDoubleClick,onRedraw) to maintain backward compatibility with code that relies onthisreferring to the timeline.
[1.3.1] - 2025-12-18
Fixed
- HiDPI shadows. Aligns shadow dimensions with the canvas DPR to keep shadows constant size and offset according to CSS pixels for high-density displays.
- Card border toggles. Prevents
landscapecards from drawing borders when the border width is set to 0. This was defaulting to 1px if not set, or keeping previously set value if individual articles differed. - Card height refresh. Recalculates card height when border width changes to fix misalignment of the bottom of the article card.
[1.3.0] - 2025-12-04
Added
- Time Bands overlay API. Introduces a schema and styling model that mirrors article layouts, configured through
options.timeBandand adjustable post-init withsetOption/setStyleso bands share the same visibility, alignment, and reserved-space controls as articles. - Pluggable article card layouts. A new feature to draw articles using different layouts, which can then be adjusted as before using the style options. Launches with two built-in options:
portrait(the layout used before this release) and the newlandscapelayout. Layouts can have style options specific to the layout, which override normal style options. Choose layout usingoptions.article.defaultCardLayout, or for individual articles callarticle.setCardLayout. Developers can register their own custom layouts, giving them full control over the rendering and click area. - EventManager. Debuts a dedicated event surface that registers via
options.onor the timeline.onhelper, spanning 18 events such astimeline-render-start,timeline-render-end,timeline-click,timeline-state-change,article-activated, pointer enter/leave/move, zoom, wheel, pinch, and viewport drag notifications, plus.offfor unsubscribing. - Rendering and UX options. Provides
options.canvasfor DPR-aware high definition canvases, cursor configuration, toggles for date indicators and article connectors, marker extension controls, and new article style options such as image shape. - Logger and debug toggles. Ships a centralized
Histropedia.LoggerplusHistropedia.enableDebug/setDebughelpers so developers can turn on deprecation warnings and internal diagnostics during development. - Article data defaults.
options.article.defaultDataprovides a way to set defaults for any fields when loading article data. - TypeScript definitions. Coverage now spans image options, dragging vicinities, article data (
Dmyhelpers and function properties),PointerEventpayloads, deprecated handler types, easing options, and more so the full API stays consumable in TypeScript projects.
Changed
- Image loading pipeline. Uses a byte-aware cache, safe eviction ordering, dynamic queue prioritization,
fetchPriorityhints, visible-only enqueueing, aborts for out-of-range requests, and addscreateImageBitmapsupport so decoded bitmaps can flow directly into canvas draws. - Pointer and tween engine. Runs entirely on vanilla pointer/tween utilities (no jQuery), bringing smooth trackpad zoom, unified pointer/touch handling, and new animation helpers for article moves, fades, pans, and zoom transitions.
- Event naming and payloads. Aligns with the new
EventManagerby standardizingPointerEventpayloads, routing background clicks throughtimeline-click, renamingarticle-double-clicktoarticle-dblclick, and mapping every legacy hook onto the modern event names for backwards compatibility. - Text and layout calculations. Hardens via memoized helpers, a binary-search
ellipsizeroutine, and a new font watcher that forces text measurement cache invalidation on load to eliminate fixing on placeholder font sizes.
Deprecated
All scheduled for removal in v2.0.0
- Legacy timeline event handlers.
onRedrawnow maps totimeline-render-end/timeline-render-start, whileonSavemaps totimeline-state-change. - Legacy Article event handlers.
onArticleClickandonArticleDoubleClickare replaced byarticle-select/article-clickandarticle-dblclickevents from theEventManager. These options will be removed in 2.0.0. - Deprecated style option.
maxImageHeightarticle style option is superceded byimage.maxHeightto work alongside other new image style options. - Deprecated article default option.
periodLine.defaultHidearticle option is superceded by the new generic defaults setting usingdefaultData.hidePeriodLine.
Removed
- jQuery dependencies. Removes every jQuery dependency (DOM size helpers, mousewheel, animation shims, dummy nodes) for a completely dependency free bundle.
- Legacy handlers and pub/sub. Removes legacy click, double-click, and background click handlers plus the old pub/sub implementation after migrating to the
EventManager. - Unused modules. Removes unused storage modules and legacy helper functions.
Fixed
- Drag release handling. Keeps dragging state from sticking when users release the mouse or touch outside the browser window or an embedded iframe so interactions always complete cleanly.
- Font loading. Prevents squashed text when custom fonts were still loading during timeline init by waiting for the new font watcher to confirm real fonts before caching text measurements.
- Article sorting with string IDs. Fixed stable sort order for articles with string
idvalues when their ranks are equal by properly handling string comparison in the fallback sorting logic.
Security
- Adds URL sanitization and configurable image sanitizer options so external article imagery cannot inject unsafe URLs.
- Hardens the deep merge helper against prototype pollution, ensures branding links open with
noopener/noreferrer, and documents the threat model inSECURITY.md. - Patches npm audit findings and refreshes all dev dependencies to eliminate known vulnerabilities.
Documentation & Internal
- Event documentation. Documents the expanded event surface in a new guide, simplifies the README, and adds explicit license information so the API reference stays accurate.
- Demo tooling. Adds a version selector, previous release support, restored legacy widths, and performance scenarios so regressions are easy to compare between releases.
- Distribution pipeline. Introduces ES Module and UMD bundles, overhauls the bundler/dev asset pipeline, and adds a build test HTML file to verify outputs.
- Source restructuring. Moves code into service-specific folders, splits helpers, simplifies the font watcher, and reorganizes article defaults and engines for maintainability.
- Tooling and automation. Adds ESLint with auto-fix hooks, Husky/pre-commit automation, new testing scripts, updated Vitest packages, and commit automation for consistent CI runs.
- Debugging and performance infrastructure. Adds logger toggles, a scenario runner, a performance demo with small or large image modes, non-fullscreen test scenarios, and versioned demos to aid regression testing.
Note: All notable changes to this project are documented here, starting from v1.3.0 onward.