feat(tracker): Gantt — #6 tier-3 virtualization (large-project performance)#10858
Closed
MichaelUray wants to merge 282 commits into
hcengineering:develophcengineering/platform:developfrom
MichaelUray:feat/gantt-upstream-pr6-tier3-virtualizationMichaelUray/huly-platform:feat/gantt-upstream-pr6-tier3-virtualizationCopy head branch name to clipboard
Closed
feat(tracker): Gantt — #6 tier-3 virtualization (large-project performance)#10858MichaelUray wants to merge 282 commits intohcengineering:develophcengineering/platform:developfrom MichaelUray:feat/gantt-upstream-pr6-tier3-virtualizationMichaelUray/huly-platform:feat/gantt-upstream-pr6-tier3-virtualizationCopy head branch name to clipboard
MichaelUray wants to merge 282 commits into
hcengineering:develophcengineering/platform:developfrom
MichaelUray:feat/gantt-upstream-pr6-tier3-virtualizationMichaelUray/huly-platform:feat/gantt-upstream-pr6-tier3-virtualizationCopy head branch name to clipboard
Conversation
This was referenced May 18, 2026
Closed
|
Connected to Huly®: UBERF-16448 |
…comments
Strips reviewer-attribution markers ('review-N <date>') from source-code
comments. Comments are kept and rephrased as 'review note' so the noted
constraint or hidden invariant survives, only the internal attribution
is dropped.
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…onents
Resolve four pre-existing eslint errors that block the CI formatting job:
- GanttCanvas.svelte: split the milestone null-guard into nested {#if}
blocks (prefer-optional-chain) — a naive optional chain would bypass
the strict null check when range is null.
- GanttCanvas.svelte / GanttSidebar.svelte: convert void-returning
short-circuit handlers to block-body arrows (no-confusing-void-expression).
- layout.test.ts: drop the non-null assertion in favour of optional
chaining on the assertion (no-non-null-assertion).
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…sitions Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…mping Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…t/tooltip) Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…permission map Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ize overlay Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ttView Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ocus) Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…both dates Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
The drag-controller reducer only accepted mousedown-bar from hover-bar state, but no DOM event ever transitioned idle → hover-bar (we never wired the mouseenter-bar event from GanttBar to the reducer). The hover state was dead code, and the first mousedown on a freshly-rendered bar was silently dropped — Playwright integration test surfaced this. Fix: reduceFromIdle accepts mousedown-bar directly with the same edge-discriminator logic as reduceFromHover. Real users always go through hover-bar first (mouseenter fires before mousedown), but synthetic event dispatch and re-render edge cases can skip it. Adds 2 tests: - mousedown-bar from idle → dragging-body - mousedown-bar (edge=left) from idle → resizing-left Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…sion 1. Context menu is too tall (~19 entries from auto-resolved Huly actions). Restructured via includedActions allow-list to 9 curated entries that make sense for a Gantt bar: - Open (Edit issue) - Status / Priority / Assignee (existing actionPopup submenus, ›) - Set start date / Set due date - Copy issue ID / URL - Duplicate / Delete Component, Milestone, Labels, SubIssue, SetParent, Relations, Move-to-project and time-report stay accessible from the standard List/Kanban menu but are hidden from Gantt's right-click. 2. Unscheduled-drag-grip in the sidebar shared pointerdown with the canvas pan handler. Pan would start before the grip's mousedown|stopPropagation fired, swallowing the drag. Extended onCanvasPanStart exclusion: now also bails on .sidebar-cell, .drag-grip, .resize-handle. The grip's pointerdown no longer triggers a stray pan. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…w (de)serialization Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…line comments Strips internal-tracking phrases from source-code comments (Tier-N Item M, Tier-N #M, v121.NN, per Tier-N spec, leftover internal review markers). Comments themselves are preserved — only the attribution labels are dropped. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…Phase 3a Pure-logic computeVisibleRowRange returns the visible row index range plus top/bottom spacer heights for a uniform-row-height virtual list. Stages the data path the sidebar renderer will adopt in a follow-up to handle 1000+ rows under the new column system without breaking the canvas scroll coupling. 10 unit tests cover edge cases (empty list, top/bottom edges, overflow, rubber-band scroll, zero rowHeight). Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…s virtualization as the virtualization library (~50 KB minified, Apache-2.0). Headless virtualizer will drive a single Y-viewport manager that the Gantt sidebar, canvas, and dependency-arrow layer all subscribe to so the three layers stay scroll-synced without re-implementing fixed-row-height math in each component. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…rtualization Pure-logic Y-axis virtualization surface (computeYViewport, rowIndexToY, yToRowIndex, sliceVisibleRows) — mirrors the runtime virtualizer's decisions so the sidebar + canvas + dependency layer can be tested deterministically without a browser. Supersedes Phase 3a's computeVisibleRowRange() helper as the single source of truth for visible-range + spacer math. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
… y-viewport Pure-logic classifyArrowVisibility() + clippedEndpointPx() helpers tell the dependency layer which arrows to render in full, which to clip at the viewport edge with an off-screen indicator, and which to cull. Both endpoints on the same off-edge side → none. Endpoints straddling opposite edges → both-off (arrow path still crosses the viewport). Single-pixel overlap with bounds counts as visible. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Synthetic sweep over 100 / 50 scroll positions on a generated 1000 / 5000 row dataset. Budgets are loose (500 ms / 1500 ms) so the test doesn't flake under rush parallel test execution; actual runtime is single-digit ms on modern CPUs. The gate exists to flag catastrophic regressions (10× slowdown) in the pure-logic virtualization path. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…te, sidebar-virtualization) Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…line comments Strips internal-tracking phrases from source-code comments (Tier-N Item M, Tier-N #M, v121.NN, per Tier-N spec, leftover internal review markers). Comments themselves are preserved — only the attribution labels are dropped. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
MichaelUray
force-pushed
the
feat/gantt-upstream-pr6-tier3-virtualization
branch
from
July 9, 2026 07:45
13379bf to
9d5a2be
Compare
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live in the Gantt toolbar only. New runtime dependencies in plugins/tracker-resources, all MIT licensed: * @tanstack/svelte-virtual - row virtualization for sidebar and canvas * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live in the Gantt toolbar only. New runtime dependencies in plugins/tracker-resources, all MIT licensed: * @tanstack/svelte-virtual - row virtualization for sidebar and canvas * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live in the Gantt toolbar only. New runtime dependencies in plugins/tracker-resources, all MIT licensed: * @tanstack/svelte-virtual - row virtualization for sidebar and canvas * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live in the Gantt toolbar only. New runtime dependencies in plugins/tracker-resources, all MIT licensed: * @tanstack/svelte-virtual - row virtualization for sidebar and canvas * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live 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 * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live 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 * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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 (via the browser print dialog) and a fullscreen toggle. Both live 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 * html2canvas - rasterizes the Gantt SVG for the PNG export * jspdf - wraps that raster into the PDF export 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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 23, 2026
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>
MichaelUray
added a commit
to MichaelUray/huly-platform
that referenced
this pull request
Jul 24, 2026
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>
Contributor
Author
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.
Summary
Vertical virtualization for the Gantt y-axis: only the rows within (or near) the visible viewport are mounted, and the dependency-arrow layer skips arrows whose endpoints both lie outside the viewport. Uses
@tanstack/svelte-virtualas the foundation. Designed so projects with thousands of issues stay smooth — Jest performance gates assert that the y-viewport manager scales to 1 000 and 5 000 rows.What's in this PR (+7 incremental commits)
depsadd@tanstack/svelte-virtualtotracker-resourcestest1 000 + 5 000-row y-viewport perf gateschoreremove dead Gantt lib files (filter-predicate, oldsidebar-virtualization)chorescrub internal tier/version markers from inline commentsStack overview
…pr1-schema…pr2-readonly…pr3a-edit…pr3b-deps-cascade-cp…pr4-polish…pr5-tier2…pr6-tier3-virtualization…pr7-tier4MichaelUray:feat/gantt-sectionMarked as draft to signal stack dependency on PR1 → PR5.
How to review
→ Fork compare: PR5...PR6 — 7 commits, 6 files
Reading order:
y-viewportmanager — the new moduley-viewport.test.ts— the perf gates explain the design constraintsTesting
y-viewport.test.ts.DCO
All commits are
Signed-off-by.