feat: a sprint calendar

A Calendario tab lays the project's sprints out month by month as bands,
with the releases and the tickets due on each day. Owners and admins plan
a sprint by clicking the day it starts, and the whole plan downloads as an
iCalendar file. Tickets can be searched by due-date range.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 19:20:28 +02:00
parent feea58d0e8
commit 8c998d7423
21 changed files with 1107 additions and 1 deletions

View File

@@ -2278,6 +2278,26 @@
"type": "boolean"
}
},
{
"name": "dueFrom",
"required": false,
"in": "query",
"description": "Due on or after this day",
"schema": {
"format": "date",
"type": "string"
}
},
{
"name": "dueTo",
"required": false,
"in": "query",
"description": "Due on or before this day",
"schema": {
"format": "date",
"type": "string"
}
},
{
"name": "sort",
"required": false,

View File

@@ -462,6 +462,12 @@ input IssueFilterInput {
areas: [String!]
assigneeId: ID
categories: [StatusCategory!]
"""Due on or after this day (YYYY-MM-DD)"""
dueFrom: String
"""Due on or before this day (YYYY-MM-DD)"""
dueTo: String
labels: [String!]
"""Only tickets in no sprint"""

View File

@@ -3924,6 +3924,10 @@ export interface operations {
sprintId?: string;
/** @description Only tickets in no sprint */
noSprint?: boolean;
/** @description Due on or after this day */
dueFrom?: string;
/** @description Due on or before this day */
dueTo?: string;
/** @description RECENT (default): last updated first. RANK: backlog order. */
sort?: components["schemas"]["IssueSort"];
/** @description Matches key, title or description */

View File

@@ -30,6 +30,7 @@ describe('appRoutes', () => {
'issues/:issueKey',
'backlog',
'sprints',
'calendar',
'roadmap',
'epics',
'trash',