feat(tracker): Gantt — #2 read-only viewlet - #10853
Conversation
|
Connected to Huly®: UBERF-16443 |
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>
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>
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>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…reactive queries PR 2 read-only Gantt is now end-to-end functional: - Two reactive queries (issues, milestones) - buildLayout(issues) -> rows with depth + isSummary - createTimeScale(zoom, dateRange.from) -> date<->px math - Summary ranges computed per parent issue from children's date span - Local zoom state (Day/Week/Month/Quarter) - no ViewletPreference plumbing - Horizontal scroll via canvas-scroller; vertical scroll moves Sidebar via translate Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
- viewlets.ts: register IssueGantt AFTER IssueKanban so List stays default - viewlets.ts: drop showColorsViewOption (canvas does not honour it yet) - GanttBar.svelte: normalise reversed startDate>dueDate ranges UX: - GanttSidebar adds Title column with sticky two-column header - Sticky time-scale header decoupled from milestone strip (layout fix) - Per-row jump-to-bar arrow (Plane-style) when bar is offscreen - ResizeObserver initialises viewport on mount and on resize Milestones as Gantt rows + collapse: - Milestones group their issues as nested children (depth+1) - Collapsible toggle per parent row, local collapsedIds Set - Milestone summary bar uses existing GanttBar with aggregated range Icon: - Register tracker.icon.Gantt to #timeline svg (Gantt pictogram) Tests: 25/25 jest pass; svelte-check 0 errors. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
- Visible top row with [«] [Today] [»] | Day Week Month Quarter | ⚙ - Today scrolls to current date, prev/next page-scroll by 80% viewport - Settings popover toggles Issue-Code and Title columns Layout: - Bigger row height (28→36) and bar font (11→13px) for readability - Sidebar reworked into flex-column with separate clipped rows region so scrolled rows can never paint over the sticky header(layout fix) - Drag handle between sidebar and canvas (120–600px range) - ResizeObserver re-syncs viewport on drag/resize/zoom changes Interaction: - Vertical gridlines aligned to time-scale ticks (Plane-style) - Row hover highlights both sidebar and canvas, with rich HTML tooltip (issue title + start + due + duration) - Title click in sidebar dispatches openIssue → showPanel(EditIssue) - Double-click on canvas bar dispatches openIssue - Wheel forwarding from sidebar to canvas-scroller (vertical scroll works while hovering issue list) - Pointerdown + drag on empty canvas pans both axes - Jump-to-bar buttons now use the bar's true left-edge target Tests: 25/25 jest pass; svelte-check 0 errors. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
totalCanvasWidth (was viewport width), with viewBox in scroll-content coordinates. The sticky header lives in the same coordinate system as the canvas-stack so horizontal scroll no longer clips the time-axis. - showPanel uses tracker.component.EditIssue instead of the hardcoded string + 'as any' cast. - Removed unused GanttToolbar.svelte and GanttMilestoneFlag.svelte (dead files since toolbar moved into GanttView and milestone flags became rows). Toolbar: - Time-navigation cluster: ⏮ « Today » ⏭ + native date picker that jumps to a specific date. Replaces the lone Today button. Interaction polish: - Sidebar wheel forwarding now uses direct scrollTop/scrollLeft mutation with deltaMode scaling — same speed as native canvas scroll. - TodayMarker no longer hides when scrolled offscreen (SVG width handles clipping); milestone reference lines render unconditionally for the same reason. Tests: 25/25 jest pass; svelte-check 0 errors. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
- Register two ToggleViewOptions on the Gantt viewlet: ganttShowIssueCode (default OFF) and ganttShowTitle (default ON). These show up in the standard Customize-View dropdown. - Drop the per-component settings popover from GanttView; sidebar column visibility now reads viewOptions directly. - Hover tooltip always surfaces the issue code (e.g. OSTRO-31), even when the issue-code column is hidden. - IntlStrings + en/de/es/fr/it/ja/pt/ru/zh/cs translations added. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Bug: .gantt-sidebar rendered at its natural height (≈ rows × 36px), and .sidebar-host had overflow:visible, so for many issues the sidebar visually overflowed gantt-body which in turn made gantt-body's scrollHeight balloon to the sidebar's natural height. The result was that scrolling over the sidebar appeared to scroll the page area instead of just the canvas. Fix: - .sidebar-host now overflow:hidden + height:100% + flex-column - .gantt-sidebar height:100% + flex:1 1 auto so it fills the host rather than stretching past it Verified: gantt-body scrollHeight == clientHeight, only .canvas-scroller has scrollable content. Wheel-forward over the sidebar moves canvas-scroller and the sidebar transform together. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
…ticky) Replaces the dual-scroller architecture (sidebar + canvas as siblings, manual wheel-forwarding for the sidebar) with a single .gantt-scroller that wraps both columns in a CSS grid. Sidebar uses position:sticky left:0 so it stays at the left edge during horizontal scroll, while the time-axis header uses position:sticky top:0. Browser handles all wheel events natively at native speed. Why: the previous design rendered the sidebar at its natural height (rows × 36px), which could be much larger than the visible viewport. overflow:visible on the sidebar host let it bleed past gantt-body and made the page area appear to scroll. The wheel-forward hack only worked for synthetic events; in real browsers, wheel events over the sidebar either scrolled too slowly (deltaMode mismatch) or stopped firing. Layout (CSS grid, 2 rows × 3 cols): - (1,1) sticky top+left: corner with column titles - (1,2) sticky top: resize-corner (5px gutter) - (1,3) sticky top: time-axis header - (2,1) sticky left:0: GanttSidebar rows - (2,2) sticky left:Wpx: vertical resize-handle - (2,3) normal: GanttCanvas SVG overflow:scroll on .gantt-scroller forces both scrollbars to always render — the user explicitly asked for visible scrollbars (Plane parity). GanttSidebar drops its scrollTop prop and the transform-based row positioning; rows now flow naturally inside the scroll container. Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
|
Thanks for merging #10851! I've rebased this PR onto the new |
…neering#10853) - render the Today-marker label with timeZone: 'UTC' so it matches the UTC grid - drop the internal PR-series note from ganttViewOptions comments - add German and Russian translations for the new Gantt locale keys - throttle the hover dispatch to ~one frame to avoid per-mousemove reactivity - honour the sort order selected in the view options (rank as tiebreaker) - import the toolbar icons from the @hcengineering/ui package root Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
Signed-off-by: Michael Uray <michaeluray@users.noreply.github.com>
|
Hi @MichaelUray |
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
|
Hi @ArtyomSavchenko — done. I consolidated #10853–#10859, #10872 and #10873 into a single pull request: #10992 It contains the complete Gantt series plus the fixes made during consolidation, rebased onto current develop. Fork CI on the exact head is green, including uitest and uitest-pg. I am closing the nine superseded pull requests with links to the consolidated PR so review can continue in one place. |
Summary
Read-only Gantt viewlet for Tracker: a horizontally-scrolling time-canvas with a synced sidebar that lists the issues in the current project / filter, plus a zoom toolbar (Day / Week / Month / Quarter), a "Today" jump, page-scroll buttons, and customizable sidebar columns. No editing yet — drag/resize comes in PR3a, dependencies in PR3b.
The viewlet registers after Kanban so List stays the project default. All Gantt logic lives behind a
viewlet.IssueGanttregistration; no existing viewlet is mutated.What's in this PR (+33 incremental commits)
feat(tracker)registerviewlet.IssueGantt(placeholder) → wired with reactive queriestime-scale,layout,types, types-tested with JestGanttCanvas,GanttHeader,GanttSidebar,GanttBar,GanttTodayMarker,GanttMilestoneFlag,GanttToolbarfeat(tracker)registerstartDate+dueDateas Issue filtersganttShowStatustoggleStack overview
feat/gantt-upstream-pr1-schemafeat/gantt-upstream-pr2-readonlyfeat/gantt-upstream-pr3a-editfeat/gantt-upstream-pr3b-deps-cascade-cpfeat/gantt-upstream-pr4-polishfeat/gantt-upstream-pr5-tier2feat/gantt-upstream-pr6-tier3-virtualizationfeat/gantt-upstream-pr7-tier4MichaelUray:feat/gantt-sectionMarked as draft to signal stack dependency on PR1. Will be promoted to ready-for-review once PR1 is merged.
How to review
GitHub shows the cumulative diff against
develop(PR1 + PR2 = 40 commits, ~2 850 line additions). For the PR2-only incremental diff see:→ Fork compare: PR1...PR2 — 33 commits, 34 files
Testing
time-scaleandlayoutmodules cover the date-math and row-packing edge cases.DCO
All commits are
Signed-off-by.