Files
task-stream/libs/web/tracker/presenters/src/lib/pages/board.page.scss
Josep Piguillem 5863d773be feat: templates per ticket type
Each ticket type can carry a starting description and a checklist, edited
in the project settings. New tickets of that type get the description
when they come without one and always get the checklist; the new ticket
form says what the template will add.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:58:37 +02:00

190 lines
3.4 KiB
SCSS

.ts-board-toolbar {
display: flex;
align-items: center;
gap: 0.75rem;
flex-wrap: wrap;
margin-bottom: 1.25rem;
}
.ts-views {
display: flex;
align-items: center;
gap: 0.5rem;
flex-wrap: wrap;
margin-bottom: 0.75rem;
}
.ts-filter {
width: 13rem;
@media (max-width: 640px) {
width: 100%;
}
}
.ts-board-total {
font-size: 0.875rem;
color: var(--ts-muted);
strong {
color: var(--ts-ink);
font-weight: 600;
}
}
.ts-spacer {
flex: 1;
}
// One lane per status, tinted with the status colour.
.ts-board {
display: grid;
grid-auto-flow: column;
grid-auto-columns: minmax(17rem, 1fr);
gap: 0.875rem;
overflow-x: auto;
padding-bottom: 0.75rem;
scroll-snap-type: x proximity;
}
.ts-column {
--tone: var(--ts-muted);
display: flex;
flex-direction: column;
min-height: 62vh;
border-radius: 1.125rem;
background: color-mix(in srgb, var(--tone) 5%, var(--ts-sunken));
border: 1px solid color-mix(in srgb, var(--tone) 18%, var(--ts-line));
scroll-snap-align: start;
}
.ts-column__header {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 0.5rem;
padding: 0.875rem 0.875rem 0.625rem;
}
.ts-column__name {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: 0.6875rem;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: color-mix(in srgb, var(--tone) 75%, var(--ts-ink));
&::before {
content: '';
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background: var(--tone);
box-shadow: 0 0 0 3px color-mix(in srgb, var(--tone) 18%, transparent);
}
}
.ts-column__count {
font-family: var(--ts-font-mono);
font-size: 1.125rem;
font-weight: 500;
color: var(--ts-ink-soft);
}
.ts-column__list {
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
padding: 0.125rem 0.625rem 0.75rem;
}
.ts-column__empty {
margin: 1.25rem 0;
text-align: center;
font-family: var(--ts-font-mono);
font-size: 0.75rem;
color: color-mix(in srgb, var(--ts-muted) 70%, transparent);
}
// CDK drag & drop
.cdk-drag-preview {
box-shadow: 0 18px 36px -14px rgb(0 0 0 / 45%);
border-radius: 0.625rem;
transform: rotate(1.5deg);
}
.cdk-drag-placeholder {
opacity: 0.35;
}
.cdk-drag-animating,
.ts-column__list.cdk-drop-list-dragging
ts-issue-card:not(.cdk-drag-placeholder) {
transition: transform 200ms cubic-bezier(0, 0, 0.2, 1);
}
.ts-column__list.cdk-drop-list-receiving {
outline: 2px dashed color-mix(in srgb, var(--tone) 55%, transparent);
outline-offset: -4px;
border-radius: 0.625rem;
}
.ts-column__points {
font-weight: 400;
color: var(--ts-muted);
}
.ts-column.is-over {
box-shadow: inset 0 3px 0 var(--ts-c-red, var(--ts-ink));
.ts-column__count {
color: var(--ts-c-red, var(--ts-ink));
font-weight: 700;
}
}
/* Grouped board: heads and rows scroll together. */
.ts-lanes {
overflow-x: auto;
padding-bottom: 0.75rem;
.ts-board {
overflow: visible;
padding-bottom: 0;
}
}
.ts-board--heads {
margin-bottom: 0.5rem;
.ts-column--head {
min-height: 0;
}
}
.ts-lane {
margin-bottom: 1rem;
}
.ts-lane__title {
position: sticky;
left: 0;
display: inline-flex;
align-items: baseline;
gap: 0.5rem;
margin: 0 0 0.5rem;
font-size: 0.875rem;
}
.ts-column--lane .ts-column__list {
min-height: 3.5rem;
}
.ts-template-hint {
margin: -0.25rem 0 0;
font-size: 0.8125rem;
}