Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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)#10858
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

@MichaelUray

@MichaelUray MichaelUray commented May 18, 2026

Copy link
Copy Markdown
Contributor

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-virtual as 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)

  • deps add @tanstack/svelte-virtual to tracker-resources
  • Y-viewport manager for Gantt vertical virtualization
  • Sidebar-virtualization range helper (Phase 3a foundation reused here)
  • Classify dependency-arrow visibility against the y-viewport — skip arrows entirely off-screen
  • test 1 000 + 5 000-row y-viewport perf gates
  • chore remove dead Gantt lib files (filter-predicate, old sidebar-virtualization)
  • chore scrub internal tier/version markers from inline comments

Stack overview

# Branch Scope Status
PR1 …pr1-schema schema + version bump merged ✅
PR2 …pr2-readonly read-only viewlet draft
PR3a …pr3a-edit drag / resize / dnd draft
PR3b …pr3b-deps-cascade-cp dependencies + cascade + critical path draft
PR4 …pr4-polish polish draft
PR5 …pr5-tier2 undo, saved views, bulk, auto-scheduling draft
PR6 …pr6-tier3-virtualization this PR — virtualization draft
PR7 …pr7-tier4 mobile + tree + predecessor col + visual deps + notifications draft
Docs (huly-docs#70) MichaelUray:feat/gantt-section reference + screenshots open

Marked as draft to signal stack dependency on PR1 → PR5.

How to review

Fork compare: PR5...PR6 — 7 commits, 6 files

Reading order:

  1. y-viewport manager — the new module
  2. y-viewport.test.ts — the perf gates explain the design constraints
  3. Arrow-visibility classifier — minimal change at the connector layer

Testing

  • 1 000 + 5 000-row perf gates in y-viewport.test.ts.
  • Validated on a production-style deployment on 2026-05-18 — large project with 1 200 issues stays responsive while scrolling.

DCO

All commits are Signed-off-by.

@huly-github-staging

Copy link
Copy Markdown

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
MichaelUray force-pushed the feat/gantt-upstream-pr6-tier3-virtualization branch from 13379bf to 9d5a2be Compare July 9, 2026 07:45
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>
@MichaelUray

Copy link
Copy Markdown
Contributor Author

Superseded by #10992, which consolidates the whole Gantt series into a single PR as requested on #10853. Continuing review there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Morty Proxy This is a proxified and sanitized view of the page, visit original site.