@design.estate/dees-catalog 13.0.0 → 13.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +823 -170
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.js +4 -4
- package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.d.ts +3 -1
- package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.js +75 -46
- package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.d.ts +4 -0
- package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.js +72 -27
- package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.d.ts +7 -2
- package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.js +87 -45
- package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.js +26 -15
- package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.d.ts +2 -0
- package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.js +73 -40
- package/dist_ts_web/elements/00group-kanban/kanban.dragcontroller.d.ts +67 -0
- package/dist_ts_web/elements/00group-kanban/kanban.dragcontroller.js +548 -0
- package/dist_ts_web/elements/00group-kanban/kanban.helpers.d.ts +3 -1
- package/dist_ts_web/elements/00group-kanban/kanban.helpers.js +3 -1
- package/dist_ts_web/elements/00group-kanban/kanban.styles.js +11 -3
- package/package.json +1 -1
- package/readme.md +19 -4
- package/scripts/check-packed-consumer.mjs +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-input/dees-input-reference/dees-input-reference.ts +3 -3
- package/ts_web/elements/00group-kanban/dees-kanban/dees-kanban.ts +61 -34
- package/ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.ts +47 -24
- package/ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.ts +47 -27
- package/ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.ts +25 -14
- package/ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.ts +64 -38
- package/ts_web/elements/00group-kanban/kanban.dragcontroller.ts +481 -0
- package/ts_web/elements/00group-kanban/kanban.helpers.ts +5 -1
- package/ts_web/elements/00group-kanban/kanban.styles.ts +10 -2
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import { DeesKanbanCard } from './dees-kanban-card/dees-kanban-card.js';
|
|
2
|
+
import { sortKanbanTickets } from './kanban.helpers.js';
|
|
3
|
+
import { getOverlayContainer } from '../00overlay.js';
|
|
4
|
+
import { zIndexRegistry } from '../00zindex.js';
|
|
5
|
+
const sameMove = (a, b) => a.ticketId === b.ticketId && a.columnId === b.columnId && a.beforeTicketId === b.beforeTicketId;
|
|
6
|
+
/** Owns pointer motion and a render-only placement. The board/provider still owns saved data. */
|
|
7
|
+
export class KanbanDragController {
|
|
8
|
+
board;
|
|
9
|
+
commit;
|
|
10
|
+
canMove;
|
|
11
|
+
gesture;
|
|
12
|
+
listeners;
|
|
13
|
+
frame = 0;
|
|
14
|
+
previousFrame = 0;
|
|
15
|
+
rendering = false;
|
|
16
|
+
scrollParents = [];
|
|
17
|
+
scrollSnap = new Map();
|
|
18
|
+
animations = new Map();
|
|
19
|
+
timers = new Set();
|
|
20
|
+
suppressClick;
|
|
21
|
+
clickTimer;
|
|
22
|
+
resizeObserver;
|
|
23
|
+
reducedMotion = matchMedia('(prefers-reduced-motion: reduce)');
|
|
24
|
+
constructor(board, commit, canMove) {
|
|
25
|
+
this.board = board;
|
|
26
|
+
this.commit = commit;
|
|
27
|
+
this.canMove = canMove;
|
|
28
|
+
}
|
|
29
|
+
get busy() { return Boolean(this.gesture && this.gesture.phase !== 'armed'); }
|
|
30
|
+
easing(name) { return getComputedStyle(this.board).getPropertyValue(`--dees-ease-${name}`).trim(); }
|
|
31
|
+
get columns() { return [...this.board.shadowRoot?.querySelectorAll('dees-kanban-column') ?? []]; }
|
|
32
|
+
connect() { this.board.addEventListener('pointerdown', this.down); }
|
|
33
|
+
/** Host updates can remove/filter the source or revoke its move permission during a gesture. */
|
|
34
|
+
sync() {
|
|
35
|
+
const gesture = this.gesture;
|
|
36
|
+
if (!gesture || gesture.phase === 'armed')
|
|
37
|
+
return;
|
|
38
|
+
const visible = this.columns.some(column => column.tickets.some(ticket => ticket.id === gesture.motion.ticket.id));
|
|
39
|
+
const ticket = this.board.tickets.find(item => item.id === gesture.motion.ticket.id);
|
|
40
|
+
if (!visible || !this.columns.some(column => column.column?.id === gesture.motion.move.columnId)) {
|
|
41
|
+
this.fadeAndClear(gesture);
|
|
42
|
+
}
|
|
43
|
+
else if (gesture.phase === 'dragging' && (!this.board.provider.moveTicket || ticket?.permissions?.move === false)) {
|
|
44
|
+
void this.cancel();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
down = (event) => {
|
|
48
|
+
if (this.gesture || !this.canMove() || event.button !== 0 || !event.isPrimary || event.pointerType === 'touch')
|
|
49
|
+
return;
|
|
50
|
+
const path = event.composedPath();
|
|
51
|
+
if (!this.columns.some(column => path.includes(column)))
|
|
52
|
+
return;
|
|
53
|
+
const source = path.find(node => node instanceof DeesKanbanCard);
|
|
54
|
+
if (!source?.ticket || !source.movable || source.moveDisabled || source.pending)
|
|
55
|
+
return;
|
|
56
|
+
// Title/body can drag; every other nested control keeps its normal action.
|
|
57
|
+
if (path.some(node => node instanceof Element && node !== source &&
|
|
58
|
+
node.matches('a, input, textarea, select, summary, dees-button, button:not(.title), [contenteditable=true]')))
|
|
59
|
+
return;
|
|
60
|
+
const rect = source.getBoundingClientRect();
|
|
61
|
+
this.gesture = {
|
|
62
|
+
pointerId: event.pointerId, source, startX: event.clientX, startY: event.clientY,
|
|
63
|
+
x: event.clientX, y: event.clientY, offsetX: event.clientX - rect.left, offsetY: event.clientY - rect.top,
|
|
64
|
+
width: rect.width, expanded: Boolean(source.shadowRoot?.querySelector('details')?.open), restoreFocus: false,
|
|
65
|
+
phase: 'armed', flightRevision: 0,
|
|
66
|
+
motion: { ticket: source.ticket, move: this.authoritativeMove(source.ticket.id), height: rect.height, placeholder: true, dimmed: false, saving: false },
|
|
67
|
+
};
|
|
68
|
+
const signal = (this.listeners = new AbortController()).signal;
|
|
69
|
+
window.addEventListener('pointermove', this.move, { signal, passive: false });
|
|
70
|
+
window.addEventListener('pointerup', this.up, { signal });
|
|
71
|
+
window.addEventListener('pointercancel', this.pointerCancel, { signal });
|
|
72
|
+
this.board.addEventListener('lostpointercapture', this.pointerCancel, { signal });
|
|
73
|
+
window.addEventListener('keydown', this.key, { signal, capture: true });
|
|
74
|
+
window.addEventListener('blur', this.blur, { signal });
|
|
75
|
+
window.addEventListener('resize', this.blur, { signal });
|
|
76
|
+
};
|
|
77
|
+
move = (event) => {
|
|
78
|
+
const gesture = this.gesture;
|
|
79
|
+
if (!gesture || event.pointerId !== gesture.pointerId || !['armed', 'dragging'].includes(gesture.phase))
|
|
80
|
+
return;
|
|
81
|
+
gesture.x = event.clientX;
|
|
82
|
+
gesture.y = event.clientY;
|
|
83
|
+
if (gesture.phase === 'armed') {
|
|
84
|
+
if (Math.hypot(gesture.x - gesture.startX, gesture.y - gesture.startY) < 4)
|
|
85
|
+
return;
|
|
86
|
+
void this.lift(gesture);
|
|
87
|
+
}
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
window.getSelection()?.removeAllRanges();
|
|
90
|
+
};
|
|
91
|
+
async lift(gesture) {
|
|
92
|
+
gesture.phase = 'dragging';
|
|
93
|
+
gesture.restoreFocus = Boolean(gesture.source.shadowRoot?.activeElement);
|
|
94
|
+
// Capture on the stable board; the source card is replaced by its slot.
|
|
95
|
+
this.board.setPointerCapture(gesture.pointerId);
|
|
96
|
+
const overlay = gesture.overlay = new DeesKanbanCard();
|
|
97
|
+
overlay.dataset.kanbanPreview = '';
|
|
98
|
+
overlay.ticket = gesture.source.ticket;
|
|
99
|
+
overlay.epic = gesture.source.epic;
|
|
100
|
+
overlay.subtasks = gesture.source.subtasks;
|
|
101
|
+
overlay.columns = gesture.source.columns;
|
|
102
|
+
overlay.movable = gesture.source.movable;
|
|
103
|
+
overlay.pointerManaged = true;
|
|
104
|
+
overlay.inert = true;
|
|
105
|
+
overlay.setAttribute('aria-hidden', 'true');
|
|
106
|
+
const styles = getComputedStyle(gesture.source);
|
|
107
|
+
for (const name of styles)
|
|
108
|
+
if (name.startsWith('--dees-'))
|
|
109
|
+
overlay.style.setProperty(name, styles.getPropertyValue(name));
|
|
110
|
+
const zIndex = zIndexRegistry.getNextZIndex();
|
|
111
|
+
zIndexRegistry.register(overlay, zIndex);
|
|
112
|
+
Object.assign(overlay.style, { position: 'fixed', margin: '0', pointerEvents: 'none', width: `${gesture.width}px`, zIndex: String(zIndex), transformOrigin: 'center' });
|
|
113
|
+
this.positionPreview(gesture);
|
|
114
|
+
getOverlayContainer(this.board).append(overlay);
|
|
115
|
+
this.collectScrollParents();
|
|
116
|
+
const widths = new Map(this.columns.map(column => [column, column.getBoundingClientRect().width]));
|
|
117
|
+
this.resizeObserver = new ResizeObserver(entries => {
|
|
118
|
+
if (entries.some(entry => Math.abs(entry.borderBoxSize[0].inlineSize - widths.get(entry.target)) > .5))
|
|
119
|
+
void this.cancel();
|
|
120
|
+
});
|
|
121
|
+
for (const column of this.columns)
|
|
122
|
+
this.resizeObserver.observe(column);
|
|
123
|
+
await overlay.updateComplete;
|
|
124
|
+
if (this.gesture !== gesture || gesture.phase !== 'dragging')
|
|
125
|
+
return;
|
|
126
|
+
const details = overlay.shadowRoot?.querySelector('details');
|
|
127
|
+
if (details)
|
|
128
|
+
details.open = gesture.expanded;
|
|
129
|
+
const article = overlay.shadowRoot.querySelector('article');
|
|
130
|
+
const resting = { boxShadow: getComputedStyle(article).boxShadow, borderColor: getComputedStyle(article).borderColor };
|
|
131
|
+
article.style.borderColor = 'var(--dees-color-border-strong)';
|
|
132
|
+
article.style.boxShadow = 'var(--dees-shadow-lg)';
|
|
133
|
+
if (!this.reducedMotion.matches) {
|
|
134
|
+
overlay.style.transform = 'scale(1.02)';
|
|
135
|
+
overlay.animate([{ transform: 'scale(1)' }, { transform: 'scale(1.02)' }], { duration: 120, easing: this.easing('out') });
|
|
136
|
+
gesture.elevation = article.animate([resting, { boxShadow: getComputedStyle(article).boxShadow, borderColor: getComputedStyle(article).borderColor }], { duration: 120, easing: this.easing('out') });
|
|
137
|
+
}
|
|
138
|
+
await this.renderMotion();
|
|
139
|
+
if (this.gesture === gesture && gesture.phase === 'dragging')
|
|
140
|
+
this.frame = requestAnimationFrame(this.tick);
|
|
141
|
+
}
|
|
142
|
+
positionPreview(gesture) {
|
|
143
|
+
if (!gesture.overlay)
|
|
144
|
+
return;
|
|
145
|
+
gesture.overlay.style.left = `${gesture.x - gesture.offsetX}px`;
|
|
146
|
+
gesture.overlay.style.top = `${gesture.y - gesture.offsetY}px`;
|
|
147
|
+
}
|
|
148
|
+
tick = (time) => {
|
|
149
|
+
const gesture = this.gesture;
|
|
150
|
+
if (!gesture || gesture.phase !== 'dragging')
|
|
151
|
+
return;
|
|
152
|
+
this.positionPreview(gesture);
|
|
153
|
+
this.autoScroll(gesture, Math.min(2, (time - (this.previousFrame || time - 16.7)) / 16.7));
|
|
154
|
+
this.previousFrame = time;
|
|
155
|
+
if (!this.rendering) {
|
|
156
|
+
const target = this.targetAt(gesture) ?? this.authoritativeMove(gesture.motion.ticket.id);
|
|
157
|
+
if (target && !sameMove(target, gesture.motion.move)) {
|
|
158
|
+
gesture.motion = { ...gesture.motion, move: target };
|
|
159
|
+
void this.renderMotion();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
this.frame = requestAnimationFrame(this.tick);
|
|
163
|
+
};
|
|
164
|
+
targetAt(gesture) {
|
|
165
|
+
const clip = this.visibleRect();
|
|
166
|
+
if (gesture.x < clip.left - 48 || gesture.x > clip.right + 48 || gesture.y < clip.top - 48 || gesture.y > clip.bottom + 48)
|
|
167
|
+
return;
|
|
168
|
+
const centerX = gesture.x - gesture.offsetX + gesture.width / 2;
|
|
169
|
+
const centerY = gesture.y - gesture.offsetY + gesture.motion.height / 2;
|
|
170
|
+
const lanes = this.columns.filter(column => {
|
|
171
|
+
const rect = column.getBoundingClientRect();
|
|
172
|
+
return rect.right > clip.left && rect.left < clip.right;
|
|
173
|
+
});
|
|
174
|
+
let column = lanes.sort((a, b) => {
|
|
175
|
+
const ar = a.getBoundingClientRect(), br = b.getBoundingClientRect();
|
|
176
|
+
return Math.abs(centerX - (ar.left + ar.width / 2)) - Math.abs(centerX - (br.left + br.width / 2));
|
|
177
|
+
})[0];
|
|
178
|
+
if (!column?.column)
|
|
179
|
+
return;
|
|
180
|
+
const currentLane = lanes.find(item => item.column?.id === gesture.motion.move.columnId);
|
|
181
|
+
if (currentLane && currentLane !== column) {
|
|
182
|
+
const currentRect = currentLane.getBoundingClientRect(), candidateRect = column.getBoundingClientRect();
|
|
183
|
+
const currentCenter = currentRect.left + currentRect.width / 2, candidateCenter = candidateRect.left + candidateRect.width / 2;
|
|
184
|
+
if (Math.abs(centerX - currentCenter) < Math.abs(candidateCenter - currentCenter) / 2 + 12)
|
|
185
|
+
column = currentLane;
|
|
186
|
+
}
|
|
187
|
+
const columnId = column.column?.id;
|
|
188
|
+
if (!columnId)
|
|
189
|
+
return;
|
|
190
|
+
const tickets = sortKanbanTickets(column.tickets).filter(ticket => ticket.id !== gesture.motion.ticket.id);
|
|
191
|
+
// Virtual positions exclude the slot and FLIP transforms, so opening a gap cannot change the hit test.
|
|
192
|
+
let top = column.shadowRoot.querySelector('.stack').getBoundingClientRect().top;
|
|
193
|
+
const currentIndex = gesture.motion.move.columnId === columnId
|
|
194
|
+
? tickets.findIndex(ticket => ticket.id === gesture.motion.move.beforeTicketId) : -1;
|
|
195
|
+
const current = currentIndex < 0 ? tickets.length : currentIndex;
|
|
196
|
+
let index = tickets.length;
|
|
197
|
+
for (let i = 0; i < tickets.length; i++) {
|
|
198
|
+
const node = this.targets(column).find(target => target.dataset.ticketId === tickets[i].id);
|
|
199
|
+
const midpoint = top + node.offsetHeight / 2;
|
|
200
|
+
const hysteresis = gesture.motion.move.columnId === columnId ? (i < current ? -6 : 6) : 0;
|
|
201
|
+
if (centerY < midpoint + hysteresis) {
|
|
202
|
+
index = i;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
top += node.offsetHeight + 8;
|
|
206
|
+
}
|
|
207
|
+
return { ticketId: gesture.motion.ticket.id, columnId, beforeTicketId: tickets[index]?.id };
|
|
208
|
+
}
|
|
209
|
+
up = (event) => {
|
|
210
|
+
const gesture = this.gesture;
|
|
211
|
+
if (!gesture || gesture.pointerId !== event.pointerId || !['armed', 'dragging'].includes(gesture.phase))
|
|
212
|
+
return;
|
|
213
|
+
if (gesture.phase === 'armed') {
|
|
214
|
+
this.clear();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
gesture.x = event.clientX;
|
|
218
|
+
gesture.y = event.clientY;
|
|
219
|
+
this.blockClick();
|
|
220
|
+
const target = this.targetAt(gesture);
|
|
221
|
+
if (!target) {
|
|
222
|
+
void this.cancel();
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
gesture.phase = 'landing';
|
|
226
|
+
this.endPointer();
|
|
227
|
+
gesture.motion = { ...gesture.motion, move: target };
|
|
228
|
+
void this.land(gesture);
|
|
229
|
+
if (sameMove(target, this.authoritativeMove(target.ticketId))) {
|
|
230
|
+
gesture.settled = true;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Persistence and landing start together. Only commit() can update board.tickets.
|
|
234
|
+
void this.commit(target).then(saved => this.settle(gesture, saved));
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
pointerCancel = (event) => {
|
|
238
|
+
if (event.pointerId === this.gesture?.pointerId && ['armed', 'dragging'].includes(this.gesture.phase))
|
|
239
|
+
void this.cancel();
|
|
240
|
+
};
|
|
241
|
+
key = (event) => {
|
|
242
|
+
if (event.key !== 'Escape')
|
|
243
|
+
return;
|
|
244
|
+
event.preventDefault();
|
|
245
|
+
event.stopImmediatePropagation();
|
|
246
|
+
void this.cancel();
|
|
247
|
+
};
|
|
248
|
+
blur = () => { void this.cancel(); };
|
|
249
|
+
async cancel() {
|
|
250
|
+
const gesture = this.gesture;
|
|
251
|
+
if (!gesture || !['armed', 'dragging'].includes(gesture.phase))
|
|
252
|
+
return;
|
|
253
|
+
if (gesture.phase === 'armed') {
|
|
254
|
+
this.clear();
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
this.blockClick();
|
|
258
|
+
gesture.phase = 'landing';
|
|
259
|
+
gesture.settled = false;
|
|
260
|
+
this.endPointer();
|
|
261
|
+
const origin = this.authoritativeMove(gesture.motion.ticket.id);
|
|
262
|
+
if (!origin) {
|
|
263
|
+
this.fadeAndClear(gesture);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
gesture.motion = { ...gesture.motion, move: origin };
|
|
267
|
+
const column = this.columns.find(item => item.column?.id === origin.columnId);
|
|
268
|
+
if (gesture.overlay && column) {
|
|
269
|
+
gesture.overlay.style.width = `${column.getBoundingClientRect().width}px`;
|
|
270
|
+
gesture.motion.height = gesture.overlay.offsetHeight;
|
|
271
|
+
}
|
|
272
|
+
await this.land(gesture);
|
|
273
|
+
}
|
|
274
|
+
authoritativeMove(ticketId) {
|
|
275
|
+
const ticket = this.board.tickets.find(item => item.id === ticketId);
|
|
276
|
+
if (!ticket)
|
|
277
|
+
return;
|
|
278
|
+
const tickets = sortKanbanTickets(this.columns.find(column => column.column?.id === ticket.columnId)?.tickets ?? []);
|
|
279
|
+
return { ticketId, columnId: ticket.columnId, beforeTicketId: tickets[tickets.findIndex(item => item.id === ticketId) + 1]?.id };
|
|
280
|
+
}
|
|
281
|
+
async land(gesture) {
|
|
282
|
+
const revision = ++gesture.flightRevision;
|
|
283
|
+
await this.renderMotion();
|
|
284
|
+
if (this.gesture !== gesture || gesture.flightRevision !== revision)
|
|
285
|
+
return;
|
|
286
|
+
const target = this.allTargets().find(node => node.dataset.ticketId === gesture.motion.ticket.id);
|
|
287
|
+
const overlay = gesture.overlay;
|
|
288
|
+
if (!target || !overlay) {
|
|
289
|
+
this.clear();
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const from = overlay.getBoundingClientRect(), to = target.getBoundingClientRect();
|
|
293
|
+
gesture.flight?.cancel();
|
|
294
|
+
for (const animation of overlay.getAnimations())
|
|
295
|
+
animation.cancel();
|
|
296
|
+
Object.assign(overlay.style, { left: `${to.left}px`, top: `${to.top}px`, width: `${to.width}px`, transform: 'none' });
|
|
297
|
+
const article = overlay.shadowRoot?.querySelector('article');
|
|
298
|
+
const raised = article ? { boxShadow: getComputedStyle(article).boxShadow, borderColor: getComputedStyle(article).borderColor } : undefined;
|
|
299
|
+
gesture.elevation?.cancel();
|
|
300
|
+
if (article) {
|
|
301
|
+
article.style.boxShadow = '';
|
|
302
|
+
article.style.borderColor = '';
|
|
303
|
+
}
|
|
304
|
+
if (!this.reducedMotion.matches) {
|
|
305
|
+
const duration = Math.min(280, Math.max(160, 120 + .25 * Math.hypot(to.left - from.left, to.top - from.top)));
|
|
306
|
+
if (article && raised)
|
|
307
|
+
gesture.elevation = article.animate([raised, { boxShadow: getComputedStyle(article).boxShadow, borderColor: getComputedStyle(article).borderColor }], { duration, easing: this.easing('spring') });
|
|
308
|
+
const flight = gesture.flight = overlay.animate([
|
|
309
|
+
{ transform: `translate(${from.left - to.left}px, ${from.top - to.top}px) scale(${from.width / to.width}, ${from.height / to.height})`, transformOrigin: 'top left' },
|
|
310
|
+
{ transform: 'none', transformOrigin: 'top left' },
|
|
311
|
+
], { duration, easing: this.easing('spring') });
|
|
312
|
+
const completed = await flight.finished.then(() => true, () => false);
|
|
313
|
+
if (!completed)
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (this.gesture !== gesture || gesture.flightRevision !== revision)
|
|
317
|
+
return;
|
|
318
|
+
if (gesture.settled !== undefined) {
|
|
319
|
+
await this.clearMotion(gesture);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
gesture.phase = 'pending';
|
|
323
|
+
gesture.motion = { ...gesture.motion, placeholder: false };
|
|
324
|
+
await this.renderMotion();
|
|
325
|
+
if (this.gesture !== gesture)
|
|
326
|
+
return;
|
|
327
|
+
this.removeOverlay(gesture);
|
|
328
|
+
this.delay(() => { if (this.gesture === gesture && gesture.phase === 'pending') {
|
|
329
|
+
gesture.motion = { ...gesture.motion, dimmed: true };
|
|
330
|
+
void this.renderMotion();
|
|
331
|
+
} }, 180);
|
|
332
|
+
this.delay(() => { if (this.gesture === gesture && gesture.phase === 'pending') {
|
|
333
|
+
gesture.motion = { ...gesture.motion, saving: true };
|
|
334
|
+
void this.renderMotion();
|
|
335
|
+
} }, 600);
|
|
336
|
+
}
|
|
337
|
+
async settle(gesture, saved) {
|
|
338
|
+
if (this.gesture !== gesture)
|
|
339
|
+
return;
|
|
340
|
+
gesture.settled = saved;
|
|
341
|
+
await this.board.updateComplete;
|
|
342
|
+
if (this.gesture !== gesture)
|
|
343
|
+
return;
|
|
344
|
+
const move = this.authoritativeMove(gesture.motion.ticket.id);
|
|
345
|
+
if (!move) {
|
|
346
|
+
this.fadeAndClear(gesture);
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
const unchanged = sameMove(move, gesture.motion.move);
|
|
350
|
+
gesture.motion = { ...gesture.motion, move, ticket: this.board.tickets.find(ticket => ticket.id === move.ticketId), dimmed: false, saving: false };
|
|
351
|
+
if (gesture.phase === 'landing') {
|
|
352
|
+
if (!unchanged)
|
|
353
|
+
await this.land(gesture);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
gesture.phase = 'settling';
|
|
357
|
+
await this.clearMotion(gesture, saved ? 200 : 240);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
targets(column) { return [...column.shadowRoot?.querySelectorAll('.target') ?? []]; }
|
|
361
|
+
allTargets() { return this.columns.flatMap(column => this.targets(column)); }
|
|
362
|
+
capture() { return new Map(this.allTargets().map(node => [node.dataset.ticketId, node.getBoundingClientRect()])); }
|
|
363
|
+
async animateFrom(before, duration = 200) {
|
|
364
|
+
await Promise.all(this.columns.map(column => column.updateComplete));
|
|
365
|
+
for (const animation of this.animations.values())
|
|
366
|
+
animation.cancel();
|
|
367
|
+
this.animations.clear();
|
|
368
|
+
if (this.reducedMotion.matches || !this.board.isConnected)
|
|
369
|
+
return;
|
|
370
|
+
const easing = this.easing('spring');
|
|
371
|
+
for (const node of this.allTargets()) {
|
|
372
|
+
if (node.querySelector('.placeholder'))
|
|
373
|
+
continue;
|
|
374
|
+
const old = before.get(node.dataset.ticketId), rect = node.getBoundingClientRect();
|
|
375
|
+
if (!old || Math.abs(old.x - rect.x) + Math.abs(old.y - rect.y) < .5)
|
|
376
|
+
continue;
|
|
377
|
+
const animation = node.animate([{ transform: `translate(${old.x - rect.x}px, ${old.y - rect.y}px)` }, { transform: 'none' }], { duration, easing });
|
|
378
|
+
this.animations.set(node, animation);
|
|
379
|
+
void animation.finished.then(() => { if (this.animations.get(node) === animation)
|
|
380
|
+
this.animations.delete(node); }, () => { });
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
async renderMotion() {
|
|
384
|
+
this.rendering = true;
|
|
385
|
+
const before = this.capture();
|
|
386
|
+
for (const column of this.columns)
|
|
387
|
+
column.motion = this.gesture?.motion;
|
|
388
|
+
await Promise.all(this.columns.map(column => column.updateComplete));
|
|
389
|
+
const gesture = this.gesture;
|
|
390
|
+
if (gesture && !gesture.motion.placeholder)
|
|
391
|
+
await this.restoreExpansion(gesture);
|
|
392
|
+
await this.animateFrom(before);
|
|
393
|
+
this.rendering = false;
|
|
394
|
+
}
|
|
395
|
+
async restoreExpansion(gesture) {
|
|
396
|
+
const card = this.allTargets().find(node => node.dataset.ticketId === gesture.motion.ticket.id)?.querySelector('dees-kanban-card');
|
|
397
|
+
if (!card)
|
|
398
|
+
return;
|
|
399
|
+
await card.updateComplete;
|
|
400
|
+
const details = card.shadowRoot?.querySelector('details');
|
|
401
|
+
if (details)
|
|
402
|
+
details.open = gesture.expanded;
|
|
403
|
+
}
|
|
404
|
+
async clearMotion(gesture, duration = 200) {
|
|
405
|
+
const before = this.capture();
|
|
406
|
+
for (const column of this.columns)
|
|
407
|
+
column.motion = undefined;
|
|
408
|
+
await Promise.all(this.columns.map(column => column.updateComplete));
|
|
409
|
+
if (this.gesture !== gesture)
|
|
410
|
+
return;
|
|
411
|
+
await this.restoreExpansion(gesture);
|
|
412
|
+
this.removeOverlay(gesture);
|
|
413
|
+
await this.animateFrom(before, duration);
|
|
414
|
+
await Promise.all([...this.animations.values()].map(animation => animation.finished.catch(() => { })));
|
|
415
|
+
if (this.gesture === gesture)
|
|
416
|
+
this.clear();
|
|
417
|
+
}
|
|
418
|
+
collectScrollParents() {
|
|
419
|
+
this.scrollParents = [];
|
|
420
|
+
let node = this.board.shadowRoot.querySelector('.columns');
|
|
421
|
+
while (node) {
|
|
422
|
+
if (node instanceof HTMLElement) {
|
|
423
|
+
const style = getComputedStyle(node);
|
|
424
|
+
if (/(auto|scroll)/.test(style.overflowX + style.overflowY) || node === document.scrollingElement) {
|
|
425
|
+
this.scrollParents.push(node);
|
|
426
|
+
this.scrollSnap.set(node, node.style.scrollSnapType);
|
|
427
|
+
node.style.scrollSnapType = 'none';
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
node = (node instanceof Element && node.assignedSlot) || node.parentNode || (node instanceof ShadowRoot ? node.host : null);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
visibleRect() {
|
|
434
|
+
const board = this.board.shadowRoot.querySelector('.columns').getBoundingClientRect();
|
|
435
|
+
const clip = { left: Math.max(0, board.left), right: Math.min(innerWidth, board.right), top: Math.max(0, board.top), bottom: Math.min(innerHeight, board.bottom) };
|
|
436
|
+
for (const parent of this.scrollParents) {
|
|
437
|
+
if (parent === document.scrollingElement)
|
|
438
|
+
continue;
|
|
439
|
+
const rect = parent.getBoundingClientRect();
|
|
440
|
+
clip.left = Math.max(clip.left, rect.left);
|
|
441
|
+
clip.right = Math.min(clip.right, rect.right);
|
|
442
|
+
clip.top = Math.max(clip.top, rect.top);
|
|
443
|
+
clip.bottom = Math.min(clip.bottom, rect.bottom);
|
|
444
|
+
}
|
|
445
|
+
return clip;
|
|
446
|
+
}
|
|
447
|
+
autoScroll(gesture, elapsed) {
|
|
448
|
+
const velocity = (point, start, end, edge) => point < start + edge ? -Math.min(1, Math.max(0, (start + edge - point) / edge)) * 14 * elapsed :
|
|
449
|
+
point > end - edge ? Math.min(1, Math.max(0, (point - end + edge) / edge)) * 14 * elapsed : 0;
|
|
450
|
+
let movedX = false, movedY = false;
|
|
451
|
+
for (const parent of this.scrollParents) {
|
|
452
|
+
const rect = parent === document.scrollingElement ? { left: 0, top: 0, right: innerWidth, bottom: innerHeight } : parent.getBoundingClientRect();
|
|
453
|
+
const left = Math.max(0, rect.left), top = Math.max(0, rect.top), right = Math.min(innerWidth, rect.right), bottom = Math.min(innerHeight, rect.bottom);
|
|
454
|
+
if (gesture.x < left - 48 || gesture.x > right + 48 || gesture.y < top - 56 || gesture.y > bottom + 56)
|
|
455
|
+
continue;
|
|
456
|
+
const x = parent.scrollLeft, y = parent.scrollTop;
|
|
457
|
+
if (!movedX)
|
|
458
|
+
parent.scrollLeft += velocity(gesture.x, left, right, 48);
|
|
459
|
+
if (!movedY)
|
|
460
|
+
parent.scrollTop += velocity(gesture.y, top, bottom, 56);
|
|
461
|
+
movedX ||= parent.scrollLeft !== x;
|
|
462
|
+
movedY ||= parent.scrollTop !== y;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
endPointer() {
|
|
466
|
+
this.listeners?.abort();
|
|
467
|
+
this.listeners = undefined;
|
|
468
|
+
cancelAnimationFrame(this.frame);
|
|
469
|
+
this.frame = 0;
|
|
470
|
+
this.previousFrame = 0;
|
|
471
|
+
if (this.gesture && this.board.hasPointerCapture(this.gesture.pointerId))
|
|
472
|
+
this.board.releasePointerCapture(this.gesture.pointerId);
|
|
473
|
+
this.resizeObserver?.disconnect();
|
|
474
|
+
this.resizeObserver = undefined;
|
|
475
|
+
}
|
|
476
|
+
blockClick() {
|
|
477
|
+
this.suppressClick?.abort();
|
|
478
|
+
const controller = this.suppressClick = new AbortController();
|
|
479
|
+
window.addEventListener('click', event => { event.preventDefault(); event.stopImmediatePropagation(); controller.abort(); }, { capture: true, once: true, signal: controller.signal });
|
|
480
|
+
// Pointerup's click is synchronous; do not swallow a later intentional click.
|
|
481
|
+
clearTimeout(this.clickTimer);
|
|
482
|
+
this.clickTimer = setTimeout(() => controller.abort(), 0);
|
|
483
|
+
}
|
|
484
|
+
delay(callback, duration) {
|
|
485
|
+
const timer = setTimeout(() => { this.timers.delete(timer); callback(); }, duration);
|
|
486
|
+
this.timers.add(timer);
|
|
487
|
+
}
|
|
488
|
+
removeOverlay(gesture) {
|
|
489
|
+
if (!gesture.overlay)
|
|
490
|
+
return;
|
|
491
|
+
gesture.elevation?.cancel();
|
|
492
|
+
zIndexRegistry.unregister(gesture.overlay);
|
|
493
|
+
gesture.overlay.remove();
|
|
494
|
+
gesture.overlay = undefined;
|
|
495
|
+
}
|
|
496
|
+
fadeAndClear(gesture) {
|
|
497
|
+
if (gesture.phase === 'settling')
|
|
498
|
+
return;
|
|
499
|
+
gesture.phase = 'settling';
|
|
500
|
+
this.endPointer();
|
|
501
|
+
const element = gesture.overlay ?? this.allTargets().find(node => node.dataset.ticketId === gesture.motion.ticket.id);
|
|
502
|
+
if (!element || this.reducedMotion.matches) {
|
|
503
|
+
this.clear();
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
const transform = getComputedStyle(element).transform;
|
|
507
|
+
gesture.flight?.cancel();
|
|
508
|
+
element.style.transform = transform;
|
|
509
|
+
const fade = gesture.flight = element.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 120, fill: 'forwards' });
|
|
510
|
+
void fade.finished.then(() => { if (this.gesture === gesture)
|
|
511
|
+
void this.clearMotion(gesture); }, () => { });
|
|
512
|
+
}
|
|
513
|
+
clear() {
|
|
514
|
+
const gesture = this.gesture;
|
|
515
|
+
this.endPointer();
|
|
516
|
+
this.gesture = undefined;
|
|
517
|
+
for (const [parent, value] of this.scrollSnap)
|
|
518
|
+
parent.style.scrollSnapType = value;
|
|
519
|
+
this.scrollSnap.clear();
|
|
520
|
+
this.scrollParents = [];
|
|
521
|
+
for (const timer of this.timers)
|
|
522
|
+
clearTimeout(timer);
|
|
523
|
+
this.timers.clear();
|
|
524
|
+
for (const animation of this.animations.values())
|
|
525
|
+
animation.cancel();
|
|
526
|
+
this.animations.clear();
|
|
527
|
+
for (const column of this.columns)
|
|
528
|
+
column.motion = undefined;
|
|
529
|
+
if (!gesture)
|
|
530
|
+
return;
|
|
531
|
+
gesture.flight?.cancel();
|
|
532
|
+
this.removeOverlay(gesture);
|
|
533
|
+
let focused = document.activeElement;
|
|
534
|
+
while (focused?.shadowRoot?.activeElement)
|
|
535
|
+
focused = focused.shadowRoot.activeElement;
|
|
536
|
+
if (gesture.restoreFocus && this.board.isConnected && (focused === document.body || focused === this.board)) {
|
|
537
|
+
const card = this.allTargets().find(node => node.dataset.ticketId === gesture.motion.ticket.id)?.querySelector('dees-kanban-card');
|
|
538
|
+
card?.shadowRoot?.querySelector('.title')?.focus({ preventScroll: true });
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
disconnect() {
|
|
542
|
+
this.board.removeEventListener('pointerdown', this.down);
|
|
543
|
+
this.suppressClick?.abort();
|
|
544
|
+
clearTimeout(this.clickTimer);
|
|
545
|
+
this.clear();
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLmRyYWdjb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAta2FuYmFuL2thbmJhbi5kcmFnY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHeEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBZ0NoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQWMsRUFBRSxDQUFjLEVBQVcsRUFBRSxDQUMzRCxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQUVsRyxpR0FBaUc7QUFDakcsTUFBTSxPQUFPLG9CQUFvQjtJQWVGO0lBQW9DO0lBQWtFO0lBZDNILE9BQU8sQ0FBa0I7SUFDekIsU0FBUyxDQUFtQjtJQUM1QixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGFBQWEsR0FBa0IsRUFBRSxDQUFDO0lBQ2xDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUM1QyxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFDL0MsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBQ2xELGFBQWEsQ0FBbUI7SUFDaEMsVUFBVSxDQUFpQztJQUMzQyxjQUFjLENBQWtCO0lBQ3ZCLGFBQWEsR0FBRyxVQUFVLENBQUMsa0NB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RyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztRQUN6QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVFLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBQy9FLE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPO1lBQUUsT0FBTztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFBQyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUssSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEVB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
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type { IKanbanTicket, IKanbanTicketDraft } from './interfaces.js';
|
|
1
|
+
import type { IKanbanTicket, IKanbanTicketDraft, TKanbanPriority } from './interfaces.js';
|
|
2
|
+
export declare const kanbanInitials: (name: string) => string;
|
|
3
|
+
export declare const kanbanPriorityIcon: (priority?: TKanbanPriority) => string;
|
|
2
4
|
export declare const sortKanbanTickets: (tickets: readonly IKanbanTicket[]) => IKanbanTicket[];
|
|
3
5
|
export declare const ticketLabel: (ticket: IKanbanTicket) => string;
|
|
4
6
|
export declare const ticketDraft: (ticket: IKanbanTicket) => IKanbanTicketDraft;
|