feat(tracker): Gantt chart for the issue tracker#10992
Open
MichaelUray wants to merge 1 commit into
hcengineering:develophcengineering/platform:developfrom
MichaelUray:feat/gantt-consolidatedMichaelUray/huly-platform:feat/gantt-consolidatedCopy head branch name to clipboard
Open
feat(tracker): Gantt chart for the issue tracker#10992MichaelUray wants to merge 1 commit intohcengineering:develophcengineering/platform:developfrom MichaelUray:feat/gantt-consolidatedMichaelUray/huly-platform:feat/gantt-consolidatedCopy head branch name to clipboard
MichaelUray wants to merge 1 commit into
hcengineering:develophcengineering/platform:developfrom
MichaelUray:feat/gantt-consolidatedMichaelUray/huly-platform:feat/gantt-consolidatedCopy head branch name to clipboard
Conversation
Adds a Gantt viewlet to the Tracker, plus the filter/search rework the Gantt toolbar shares with the List and Kanban viewlets. Scope, roughly in the order the feature grew: * Read-only Gantt viewlet: time-scale canvas, sidebar columns, today marker, zoom levels (day/week/month/quarter), jump-to-start/end/date navigation and per-viewlet view options. * Editable bars: drag to move, resize handles for start/due date, drag on an unscheduled row to schedule it, optional confirm prompts and permission/conflict handling on commit. * Dependencies: FS/SS/FF/SF relations with lag, dependency editor and arrows, cascade shifting with cycle detection, and critical-path plus slack computation. A dependency shift raises a server-side notification for the affected assignees. * Visual polish: bar labels (left/inside/right), quick-info popover, milestone markers, deadline markers, non-working-day shading and keyboard-shortcut help. * Tier 2: undo/redo, saved views, bulk selection and bulk drag, auto-scheduling with manual pinning. * Tier 3: row virtualization for large projects. * Tier 4: mobile (read-only) layout, tree view with hierarchy breadcrumbs and a predecessor column. * Filter and search rework: inline filter chips with an overflow popover, an advanced search input with field prefixes routed to an Elasticsearch query_string branch, search scope and match-highlight view-option toggles, and a zero-hit empty state. * Bar coloring by status/priority/assignee/component/milestone, overdue and blocked overlays, and sub-issue progress fill. * Gantt toolbar export to PNG and to PDF. Both re-render the chart from the Gantt's own row model into a stand-alone SVG and rasterise that, so the output does not depend on the current scroll position or on rows that virtualization has not mounted; the PDF embeds the same raster as a real file download, not a browser print. Plus a fullscreen toggle. All of it lives in the Gantt toolbar only. * Responsive toolbar: the lifted toolbar measures the width it gets and collapses whole control tiers into a "…" popover, least important first, so Fullscreen and More-actions stay reachable from 390 px upwards. This needs one opt-in flag on the shared header component (`Header`/`SpaceHeader` `shrinkSearch`), which swaps which button group is the row's shrink target; it defaults to false, so no other header consumer changes behaviour. New runtime dependencies in plugins/tracker-resources, all MIT licensed: * @tanstack/svelte-virtual - row virtualization for sidebar and canvas * jspdf - wraps the exported chart raster into the PDF download Locales: en, de and ru carry the full set of new strings. The other locales are mostly unchanged and fall back to English at runtime; the few new keys they do define are still English placeholders. Translating those is left to native speakers. This consolidates the previously separate pull requests hcengineering#10853, hcengineering#10854, hcengineering#10855, hcengineering#10856, hcengineering#10857, hcengineering#10858, hcengineering#10859, hcengineering#10872 and hcengineering#10873 into a single change, as requested on hcengineering#10853, so the whole feature can be reviewed and tested in one place. The review feedback given on hcengineering#10853 is included. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
This was referenced Jul 24, 2026
Closed
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.
This consolidates the Gantt series — #10853, #10854, #10855, #10856, #10857, #10858, #10859, #10872 and #10873 — into a single pull request, as requested on #10853, so the whole feature can be reviewed and tested in one place. It contains the series plus the fixes made during consolidation.
What it adds
A Gantt viewlet for the Tracker: time-scale canvas with day/week/month/quarter zoom, sidebar columns, today marker and jump navigation; editable bars (drag, resize, schedule an unscheduled row) with confirm prompts and permission/conflict handling; FS/SS/FF/SF dependencies with lag, a dependency editor, cascade shifting with cycle detection, and critical-path plus slack; visual polish (bar labels, quick-info popover, milestone and deadline markers, non-working-day shading, shortcut help); undo/redo, saved views, bulk select and bulk drag, auto-scheduling with manual pinning; row virtualization for large projects; a read-only mobile layout, tree view with hierarchy breadcrumbs and a predecessor column; bar coloring by status/priority/assignee/component/milestone with overdue and blocked overlays and sub-issue progress fill; PNG and PDF export plus a fullscreen toggle, both confined to the Gantt toolbar. A dependency shift raises a server-side notification for the affected assignees; the trigger resolves the sender, the shifted issues and their metadata server-side and scopes everything to the request's own space.
Shared infrastructure changes (outside
plugins/tracker*)packages/ui— an opt-inshrinkSearchflag onHeader/SpaceHeaderthat swaps which button group is the header row's shrink target, so the Gantt toolbar can collapse control tiers into a "…" overflow popover instead of overflowing its row. Defaults tofalse; no other header consumer changes behaviour. Plus a few new icons.packages/theme— the two CSS rules that opt-in flag drives.plugins/view-resources,plugins/view,plugins/view-assets— the filter/search rework shared with List and Kanban: inline filter chips with an overflow popover, an advanced search input with field prefixes, search-scope and match-highlight view options, and a zero-hit empty state.foundations/server/packages/elastic— aquery_stringbranch used by the field-prefixed search; the existing non-field path is unchanged.packages/presentation,packages/importer,plugins/card-resources,models/server-tracker— small follow-on adjustments for the above.New runtime dependencies
Both in
plugins/tracker-resources, both MIT:@tanstack/svelte-virtual(row virtualization) andjspdf(PDF export). Export re-renders the chart from the data model into an SVG rather than capturing the DOM; the PDF is paginated into bounded pages so large charts stay within the browser canvas and jsPDF size limits.Locales
en,deandrucarry the full set of new strings, and a unit test enforces ICU placeholder parity across all locale files. Other locales fall back to English at runtime; the few new keys they define are still English placeholders, left to native speakers.Testing
Full CI is green on a fork mirror of this head —
build,svelte-check, unittest,formatting,docker-build,uitest,uitest-pg,uitest-workspaces,uitest-qms.Beyond CI, the feature went through several manual review rounds and a security pass. Those found defects that green unit tests did not — a toolbar that overflowed its own header row, dependency arrows capturing resize handles, a sidebar column left stale by a Svelte reactivity gap, a PDF export that exceeded the browser canvas and jsPDF page-size limits on large charts, the Gantt toolbar's fullscreen control sitting under the workbench mini-sidebar at phone widths, and a dependency-shift notification that trusted client-supplied metadata — all fixed here. E2E coverage asserts toolbar reachability at 1920, 1600 and 390 px with
toBeInViewport({ ratio: 1 })and real clicks (with an explicit overlap check at phone width), and covers the PNG and PDF downloads including a%PDF-magic-byte check.