@design.estate/dees-catalog 12.4.0 → 13.0.0

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.
Files changed (75) hide show
  1. package/dist_bundle/bundle.js +2603 -1201
  2. package/dist_bundle/bundle.js.map +1 -1
  3. package/dist_ts_web/00_commitinfo_data.js +3 -3
  4. package/dist_ts_web/elements/00group-chart/dees-chart-area/component.d.ts +26 -16
  5. package/dist_ts_web/elements/00group-chart/dees-chart-area/component.js +161 -72
  6. package/dist_ts_web/elements/00group-chart/dees-chart-area/realtime-updates.d.ts +2 -1
  7. package/dist_ts_web/elements/00group-chart/dees-chart-area/realtime-updates.js +3 -2
  8. package/dist_ts_web/elements/00group-chart/dees-chart-area/template.js +4 -3
  9. package/dist_ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.d.ts +13 -0
  10. package/dist_ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.js +76 -7
  11. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.d.ts +42 -0
  12. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.d.ts +1 -0
  13. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.js +8 -0
  14. package/dist_ts_web/elements/00group-input/dees-input-reference/dees-input-reference.js +347 -0
  15. package/dist_ts_web/elements/00group-input/dees-input-reference/document.d.ts +5 -0
  16. package/dist_ts_web/elements/00group-input/dees-input-reference/document.js +45 -0
  17. package/dist_ts_web/elements/00group-input/dees-input-reference/index.d.ts +2 -0
  18. package/dist_ts_web/elements/00group-input/dees-input-reference/index.js +3 -0
  19. package/dist_ts_web/elements/00group-input/dees-input-reference/interfaces.d.ts +16 -0
  20. package/dist_ts_web/elements/00group-input/dees-input-reference/interfaces.js +2 -0
  21. package/dist_ts_web/elements/00group-input/index.d.ts +1 -0
  22. package/dist_ts_web/elements/00group-input/index.js +2 -1
  23. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.d.ts +58 -0
  24. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.d.ts +1 -0
  25. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.js +9 -0
  26. package/dist_ts_web/elements/00group-kanban/dees-kanban/dees-kanban.js +536 -0
  27. package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.d.ts +20 -0
  28. package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.js +157 -0
  29. package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.d.ts +23 -0
  30. package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.js +192 -0
  31. package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.d.ts +24 -0
  32. package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.js +211 -0
  33. package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.d.ts +35 -0
  34. package/dist_ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.js +269 -0
  35. package/dist_ts_web/elements/00group-kanban/index.d.ts +6 -0
  36. package/dist_ts_web/elements/00group-kanban/index.js +7 -0
  37. package/dist_ts_web/elements/00group-kanban/interfaces.d.ts +84 -0
  38. package/dist_ts_web/elements/00group-kanban/interfaces.js +2 -0
  39. package/dist_ts_web/elements/00group-kanban/kanban.demodata.d.ts +7 -0
  40. package/dist_ts_web/elements/00group-kanban/kanban.demodata.js +60 -0
  41. package/dist_ts_web/elements/00group-kanban/kanban.helpers.d.ts +6 -0
  42. package/dist_ts_web/elements/00group-kanban/kanban.helpers.js +11 -0
  43. package/dist_ts_web/elements/00group-kanban/kanban.styles.d.ts +1 -0
  44. package/dist_ts_web/elements/00group-kanban/kanban.styles.js +18 -0
  45. package/dist_ts_web/elements/index.d.ts +1 -0
  46. package/dist_ts_web/elements/index.js +2 -1
  47. package/dist_ts_web/services/DeesServiceLibLoader.d.ts +1 -0
  48. package/dist_ts_web/services/DeesServiceLibLoader.js +2 -1
  49. package/package.json +1 -1
  50. package/readme.md +165 -1
  51. package/scripts/check-packed-consumer.mjs +1 -1
  52. package/ts_web/00_commitinfo_data.ts +3 -3
  53. package/ts_web/elements/00group-chart/dees-chart-area/component.ts +195 -79
  54. package/ts_web/elements/00group-chart/dees-chart-area/realtime-updates.ts +4 -2
  55. package/ts_web/elements/00group-chart/dees-chart-area/template.ts +3 -2
  56. package/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown-popup.ts +40 -5
  57. package/ts_web/elements/00group-input/dees-input-reference/dees-input-reference.demo.ts +9 -0
  58. package/ts_web/elements/00group-input/dees-input-reference/dees-input-reference.ts +221 -0
  59. package/ts_web/elements/00group-input/dees-input-reference/document.ts +38 -0
  60. package/ts_web/elements/00group-input/dees-input-reference/index.ts +2 -0
  61. package/ts_web/elements/00group-input/dees-input-reference/interfaces.ts +8 -0
  62. package/ts_web/elements/00group-input/index.ts +1 -0
  63. package/ts_web/elements/00group-kanban/dees-kanban/dees-kanban.demo.ts +9 -0
  64. package/ts_web/elements/00group-kanban/dees-kanban/dees-kanban.ts +315 -0
  65. package/ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.ts +58 -0
  66. package/ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.ts +60 -0
  67. package/ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.ts +81 -0
  68. package/ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.ts +114 -0
  69. package/ts_web/elements/00group-kanban/index.ts +6 -0
  70. package/ts_web/elements/00group-kanban/interfaces.ts +67 -0
  71. package/ts_web/elements/00group-kanban/kanban.demodata.ts +56 -0
  72. package/ts_web/elements/00group-kanban/kanban.helpers.ts +13 -0
  73. package/ts_web/elements/00group-kanban/kanban.styles.ts +18 -0
  74. package/ts_web/elements/index.ts +1 -0
  75. package/ts_web/services/DeesServiceLibLoader.ts +2 -0
@@ -0,0 +1,536 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { DeesElement, customElement, property, state, html, css } from '@design.estate/dees-element';
36
+ import { DeesModal } from '../../00group-overlay/dees-modal/dees-modal.js';
37
+ import { DeesContextmenu } from '../../00group-overlay/dees-contextmenu/dees-contextmenu.js';
38
+ import { DeesKanbanTicketDetail } from '../dees-kanban-ticket-detail/dees-kanban-ticket-detail.js';
39
+ import { kanbanStyles } from '../kanban.styles.js';
40
+ import { kanbanError, kanbanEvent, sortKanbanTickets, ticketLabel } from '../kanban.helpers.js';
41
+ import { demoFunc } from './dees-kanban.demo.js';
42
+ import '../dees-kanban-column/dees-kanban-column.js';
43
+ const interactionEvents = ['kanban-ticket-open', 'kanban-ticket-move', 'kanban-ticket-create', 'kanban-move-menu',
44
+ 'kanban-ticket-save', 'kanban-ticket-draft', 'kanban-comment-draft', 'kanban-comment-added', 'kanban-comments-refresh',
45
+ 'kanban-detail-back', 'kanban-drag-start', 'kanban-drag-end'];
46
+ let DeesKanban = (() => {
47
+ let _classDecorators = [customElement('dees-kanban')];
48
+ let _classDescriptor;
49
+ let _classExtraInitializers = [];
50
+ let _classThis;
51
+ let _classSuper = DeesElement;
52
+ let _heading_decorators;
53
+ let _heading_initializers = [];
54
+ let _heading_extraInitializers = [];
55
+ let _tickets_decorators;
56
+ let _tickets_initializers = [];
57
+ let _tickets_extraInitializers = [];
58
+ let _columns_decorators;
59
+ let _columns_initializers = [];
60
+ let _columns_extraInitializers = [];
61
+ let _people_decorators;
62
+ let _people_initializers = [];
63
+ let _people_extraInitializers = [];
64
+ let _provider_decorators;
65
+ let _provider_initializers = [];
66
+ let _provider_extraInitializers = [];
67
+ let _loading_decorators;
68
+ let _loading_initializers = [];
69
+ let _loading_extraInitializers = [];
70
+ let _error_decorators;
71
+ let _error_initializers = [];
72
+ let _error_extraInitializers = [];
73
+ let _query_decorators;
74
+ let _query_initializers = [];
75
+ let _query_extraInitializers = [];
76
+ let _epicId_decorators;
77
+ let _epicId_initializers = [];
78
+ let _epicId_extraInitializers = [];
79
+ let _operationError_decorators;
80
+ let _operationError_initializers = [];
81
+ let _operationError_extraInitializers = [];
82
+ let _pendingTicketId_decorators;
83
+ let _pendingTicketId_initializers = [];
84
+ let _pendingTicketId_extraInitializers = [];
85
+ let _draggingTicketId_decorators;
86
+ let _draggingTicketId_initializers = [];
87
+ let _draggingTicketId_extraInitializers = [];
88
+ let _openingTicket_decorators;
89
+ let _openingTicket_initializers = [];
90
+ let _openingTicket_extraInitializers = [];
91
+ var DeesKanban = class extends _classSuper {
92
+ static { _classThis = this; }
93
+ static {
94
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
95
+ _heading_decorators = [property({ type: String })];
96
+ _tickets_decorators = [property({ attribute: false })];
97
+ _columns_decorators = [property({ attribute: false })];
98
+ _people_decorators = [property({ attribute: false })];
99
+ _provider_decorators = [property({ attribute: false })];
100
+ _loading_decorators = [property({ type: Boolean })];
101
+ _error_decorators = [property({ type: String })];
102
+ _query_decorators = [state()];
103
+ _epicId_decorators = [state()];
104
+ _operationError_decorators = [state()];
105
+ _pendingTicketId_decorators = [state()];
106
+ _draggingTicketId_decorators = [state()];
107
+ _openingTicket_decorators = [state()];
108
+ __esDecorate(this, null, _heading_decorators, { kind: "accessor", name: "heading", static: false, private: false, access: { has: obj => "heading" in obj, get: obj => obj.heading, set: (obj, value) => { obj.heading = value; } }, metadata: _metadata }, _heading_initializers, _heading_extraInitializers);
109
+ __esDecorate(this, null, _tickets_decorators, { kind: "accessor", name: "tickets", static: false, private: false, access: { has: obj => "tickets" in obj, get: obj => obj.tickets, set: (obj, value) => { obj.tickets = value; } }, metadata: _metadata }, _tickets_initializers, _tickets_extraInitializers);
110
+ __esDecorate(this, null, _columns_decorators, { kind: "accessor", name: "columns", static: false, private: false, access: { has: obj => "columns" in obj, get: obj => obj.columns, set: (obj, value) => { obj.columns = value; } }, metadata: _metadata }, _columns_initializers, _columns_extraInitializers);
111
+ __esDecorate(this, null, _people_decorators, { kind: "accessor", name: "people", static: false, private: false, access: { has: obj => "people" in obj, get: obj => obj.people, set: (obj, value) => { obj.people = value; } }, metadata: _metadata }, _people_initializers, _people_extraInitializers);
112
+ __esDecorate(this, null, _provider_decorators, { kind: "accessor", name: "provider", static: false, private: false, access: { has: obj => "provider" in obj, get: obj => obj.provider, set: (obj, value) => { obj.provider = value; } }, metadata: _metadata }, _provider_initializers, _provider_extraInitializers);
113
+ __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
114
+ __esDecorate(this, null, _error_decorators, { kind: "accessor", name: "error", static: false, private: false, access: { has: obj => "error" in obj, get: obj => obj.error, set: (obj, value) => { obj.error = value; } }, metadata: _metadata }, _error_initializers, _error_extraInitializers);
115
+ __esDecorate(this, null, _query_decorators, { kind: "accessor", name: "query", static: false, private: false, access: { has: obj => "query" in obj, get: obj => obj.query, set: (obj, value) => { obj.query = value; } }, metadata: _metadata }, _query_initializers, _query_extraInitializers);
116
+ __esDecorate(this, null, _epicId_decorators, { kind: "accessor", name: "epicId", static: false, private: false, access: { has: obj => "epicId" in obj, get: obj => obj.epicId, set: (obj, value) => { obj.epicId = value; } }, metadata: _metadata }, _epicId_initializers, _epicId_extraInitializers);
117
+ __esDecorate(this, null, _operationError_decorators, { kind: "accessor", name: "operationError", static: false, private: false, access: { has: obj => "operationError" in obj, get: obj => obj.operationError, set: (obj, value) => { obj.operationError = value; } }, metadata: _metadata }, _operationError_initializers, _operationError_extraInitializers);
118
+ __esDecorate(this, null, _pendingTicketId_decorators, { kind: "accessor", name: "pendingTicketId", static: false, private: false, access: { has: obj => "pendingTicketId" in obj, get: obj => obj.pendingTicketId, set: (obj, value) => { obj.pendingTicketId = value; } }, metadata: _metadata }, _pendingTicketId_initializers, _pendingTicketId_extraInitializers);
119
+ __esDecorate(this, null, _draggingTicketId_decorators, { kind: "accessor", name: "draggingTicketId", static: false, private: false, access: { has: obj => "draggingTicketId" in obj, get: obj => obj.draggingTicketId, set: (obj, value) => { obj.draggingTicketId = value; } }, metadata: _metadata }, _draggingTicketId_initializers, _draggingTicketId_extraInitializers);
120
+ __esDecorate(this, null, _openingTicket_decorators, { kind: "accessor", name: "openingTicket", static: false, private: false, access: { has: obj => "openingTicket" in obj, get: obj => obj.openingTicket, set: (obj, value) => { obj.openingTicket = value; } }, metadata: _metadata }, _openingTicket_initializers, _openingTicket_extraInitializers);
121
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
122
+ DeesKanban = _classThis = _classDescriptor.value;
123
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
124
+ }
125
+ static demo = demoFunc;
126
+ static demoGroups = ['Kanban'];
127
+ #heading_accessor_storage = __runInitializers(this, _heading_initializers, 'Board');
128
+ get heading() { return this.#heading_accessor_storage; }
129
+ set heading(value) { this.#heading_accessor_storage = value; }
130
+ #tickets_accessor_storage = (__runInitializers(this, _heading_extraInitializers), __runInitializers(this, _tickets_initializers, []));
131
+ get tickets() { return this.#tickets_accessor_storage; }
132
+ set tickets(value) { this.#tickets_accessor_storage = value; }
133
+ #columns_accessor_storage = (__runInitializers(this, _tickets_extraInitializers), __runInitializers(this, _columns_initializers, []));
134
+ get columns() { return this.#columns_accessor_storage; }
135
+ set columns(value) { this.#columns_accessor_storage = value; }
136
+ #people_accessor_storage = (__runInitializers(this, _columns_extraInitializers), __runInitializers(this, _people_initializers, []));
137
+ get people() { return this.#people_accessor_storage; }
138
+ set people(value) { this.#people_accessor_storage = value; }
139
+ #provider_accessor_storage = (__runInitializers(this, _people_extraInitializers), __runInitializers(this, _provider_initializers, {}));
140
+ get provider() { return this.#provider_accessor_storage; }
141
+ set provider(value) { this.#provider_accessor_storage = value; }
142
+ #loading_accessor_storage = (__runInitializers(this, _provider_extraInitializers), __runInitializers(this, _loading_initializers, false));
143
+ get loading() { return this.#loading_accessor_storage; }
144
+ set loading(value) { this.#loading_accessor_storage = value; }
145
+ #error_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _error_initializers, ''));
146
+ get error() { return this.#error_accessor_storage; }
147
+ set error(value) { this.#error_accessor_storage = value; }
148
+ #query_accessor_storage = (__runInitializers(this, _error_extraInitializers), __runInitializers(this, _query_initializers, ''));
149
+ get query() { return this.#query_accessor_storage; }
150
+ set query(value) { this.#query_accessor_storage = value; }
151
+ #epicId_accessor_storage = (__runInitializers(this, _query_extraInitializers), __runInitializers(this, _epicId_initializers, ''));
152
+ get epicId() { return this.#epicId_accessor_storage; }
153
+ set epicId(value) { this.#epicId_accessor_storage = value; }
154
+ #operationError_accessor_storage = (__runInitializers(this, _epicId_extraInitializers), __runInitializers(this, _operationError_initializers, ''));
155
+ get operationError() { return this.#operationError_accessor_storage; }
156
+ set operationError(value) { this.#operationError_accessor_storage = value; }
157
+ #pendingTicketId_accessor_storage = (__runInitializers(this, _operationError_extraInitializers), __runInitializers(this, _pendingTicketId_initializers, ''));
158
+ get pendingTicketId() { return this.#pendingTicketId_accessor_storage; }
159
+ set pendingTicketId(value) { this.#pendingTicketId_accessor_storage = value; }
160
+ #draggingTicketId_accessor_storage = (__runInitializers(this, _pendingTicketId_extraInitializers), __runInitializers(this, _draggingTicketId_initializers, ''));
161
+ get draggingTicketId() { return this.#draggingTicketId_accessor_storage; }
162
+ set draggingTicketId(value) { this.#draggingTicketId_accessor_storage = value; }
163
+ #openingTicket_accessor_storage = (__runInitializers(this, _draggingTicketId_extraInitializers), __runInitializers(this, _openingTicket_initializers, false));
164
+ get openingTicket() { return this.#openingTicket_accessor_storage; }
165
+ set openingTicket(value) { this.#openingTicket_accessor_storage = value; }
166
+ modal = __runInitializers(this, _openingTicket_extraInitializers);
167
+ modalOpening;
168
+ detail;
169
+ selectedId = '';
170
+ history = [];
171
+ openAbort;
172
+ commentsAbort;
173
+ commentCache = new Map();
174
+ commentRevisions = new Map();
175
+ commentDrafts = new Map();
176
+ ticketDrafts = new Map();
177
+ resolvedTickets = new Map();
178
+ static styles = [...kanbanStyles, css `
179
+ :host { padding: 24px; background: var(--dees-color-bg-canvas); min-height: 100%; }
180
+ .heading { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom: 20px; }
181
+ h2 { font-size: var(--dees-font-title1-size); font-weight: 650; letter-spacing: -.02em; }
182
+ .filters { display: flex; align-items: end; gap: 16px; flex-wrap: wrap; margin-bottom: 24px; }
183
+ .filters dees-input-text { flex: 1; min-width: 200px; max-width: 360px; }
184
+ .filters dees-input-dropdown { min-width: 200px; max-width: 320px; flex: 1; }
185
+ .columns { display: flex; gap: 16px; overflow-x: auto; padding: 3px 3px 16px; align-items: stretch; }
186
+ @media (max-width: 600px) { :host { padding: 16px; } .filters { gap: 10px; } .columns { scroll-snap-type: x proximity; } dees-kanban-column { scroll-snap-align: start; flex-basis: 85vw; } }
187
+ `];
188
+ async connectedCallback() {
189
+ const connection = super.connectedCallback();
190
+ for (const name of interactionEvents)
191
+ this.addEventListener(name, this.handleInteraction);
192
+ await connection;
193
+ }
194
+ updated() { this.syncDetail(); }
195
+ render() {
196
+ const epics = sortKanbanTickets(this.tickets.filter(ticket => ticket.kind === 'epic'));
197
+ const query = this.query.trim().toLocaleLowerCase();
198
+ const tasks = this.tickets.filter(ticket => ticket.kind === 'task' && (!this.epicId || ticket.parentId === this.epicId) &&
199
+ (!query || [ticket.key, ticket.title, ticket.assignee?.name, ...ticket.labels ?? [],
200
+ ...this.tickets.filter(child => child.parentId === ticket.id).map(child => `${child.key} ${child.title}`)].join(' ').toLocaleLowerCase().includes(query)));
201
+ const epic = epics.find(ticket => ticket.id === this.epicId);
202
+ return html `<header class="heading"><h2>${this.heading}</h2><span class="caption">${tasks.length} tasks · ${epics.length} epics</span><span class="spacer"></span>
203
+ ${this.provider.createTicket ? html `<dees-button type="ghost" size="sm" text="New epic" .disabled=${!this.columns.length}
204
+ @clicked=${() => { void this.createTicket({ kind: 'epic', columnId: this.columns[0].id }); }}></dees-button>
205
+ <dees-button type="accent" size="sm" icon="lucide:Plus" text="New task" .disabled=${!this.columns.length}
206
+ @clicked=${() => { void this.createTicket({ kind: 'task', columnId: this.columns[0].id, parentId: this.epicId || undefined }); }}></dees-button>` : ''}</header>
207
+ <div class="filters"><dees-input-text label="Search tickets" placeholder="Title, ticket number, assignee…" .value=${this.query}
208
+ @input=${(event) => { this.query = String(event.currentTarget.value ?? ''); }}></dees-input-text>
209
+ <dees-input-dropdown label="Epic" .value=${{ key: this.epicId, option: epic?.title ?? 'All epics' }}
210
+ .options=${[{ key: '', option: 'All epics' }, ...epics.map(ticket => ({ key: ticket.id, option: ticket.title }))]}
211
+ @selectedOption=${(event) => { this.epicId = event.detail.key; }}></dees-input-dropdown>
212
+ ${epic ? html `<dees-button type="ghost" size="sm" text="Open epic" @clicked=${() => { void this.openTicket(epic.id); }}></dees-button>` : ''}
213
+ </div>
214
+ ${this.loading || this.openingTicket ? html `<p class="caption" role="status">${this.loading ? 'Loading board…' : 'Opening ticket…'}</p>` : ''}
215
+ ${this.error || this.operationError ? html `<p class="error" role="alert">${this.error || this.operationError}</p>` : ''}
216
+ ${!this.columns.length ? html `<p class="empty">No columns configured.</p>` : html `<div class="columns" aria-label=${this.heading}>
217
+ ${this.columns.map(column => html `<dees-kanban-column .column=${column} .columns=${this.columns}
218
+ .tickets=${tasks.filter(ticket => ticket.columnId === column.id)} .allTickets=${this.tickets}
219
+ .movable=${Boolean(this.provider.moveTicket) && !this.pendingTicketId} .canCreate=${Boolean(this.provider.createTicket)}
220
+ .pendingTicketId=${this.pendingTicketId} .draggingTicketId=${this.draggingTicketId}></dees-kanban-column>`)}</div>`}`;
221
+ }
222
+ findTicket(id) { return this.tickets.find(ticket => ticket.id === id) ?? this.resolvedTickets.get(id); }
223
+ searchTickets = async (query, signal) => {
224
+ const tickets = this.provider.searchTickets ? await this.provider.searchTickets(query, signal) :
225
+ this.tickets.filter(ticket => ticketLabel(ticket).toLocaleLowerCase().includes(query.toLocaleLowerCase()));
226
+ if (!signal.aborted)
227
+ for (const ticket of tickets)
228
+ this.resolvedTickets.set(ticket.id, ticket);
229
+ return tickets.map(ticket => ({ id: ticket.id, label: ticketLabel(ticket) }));
230
+ };
231
+ /** Open a task, epic, subtask or remotely resolved linked ticket in the board's detail modal. */
232
+ async openTicket(id, addHistory = true) {
233
+ this.openAbort?.abort();
234
+ const controller = this.openAbort = new AbortController();
235
+ this.openingTicket = true;
236
+ this.operationError = '';
237
+ try {
238
+ const ticket = this.provider.getTicket ? await this.provider.getTicket(id, controller.signal) : this.findTicket(id);
239
+ if (controller.signal.aborted || !this.isConnected)
240
+ return;
241
+ if (!ticket || ticket.id !== id)
242
+ throw new Error('This ticket is unavailable or you do not have access.');
243
+ this.resolvedTickets.set(ticket.id, ticket);
244
+ this.tickets = this.tickets.map(item => item.id === ticket.id ? ticket : item);
245
+ if (addHistory && this.selectedId && this.selectedId !== id && this.modal)
246
+ this.history.push(this.selectedId);
247
+ this.selectedId = id;
248
+ if (!this.detail) {
249
+ this.detail = new DeesKanbanTicketDetail();
250
+ for (const name of interactionEvents)
251
+ this.detail.addEventListener(name, this.handleInteraction);
252
+ }
253
+ this.detail.ticket = ticket;
254
+ this.detail.error = '';
255
+ this.syncDetail();
256
+ if (!this.modal && !this.modalOpening) {
257
+ this.modalOpening = DeesModal.createAndShow({ heading: ticket.key, width: 1000, maxWidth: 1040,
258
+ mobileFullscreen: true, content: html `${this.detail}`, menuOptions: [] });
259
+ const modal = await this.modalOpening;
260
+ this.modalOpening = undefined;
261
+ if (!this.isConnected) {
262
+ await modal.destroy();
263
+ return;
264
+ }
265
+ this.modal = modal;
266
+ modal.addEventListener('modal-close', () => {
267
+ if (this.modal !== modal)
268
+ return;
269
+ this.modal = undefined;
270
+ this.selectedId = '';
271
+ this.history = [];
272
+ this.commentsAbort?.abort();
273
+ this.openAbort?.abort();
274
+ }, { once: true });
275
+ }
276
+ else if (this.modalOpening)
277
+ await this.modalOpening;
278
+ this.syncDetail();
279
+ if (controller.signal.aborted)
280
+ return;
281
+ kanbanEvent(this, 'kanban-ticket-opened', { ticketId: id });
282
+ await this.refreshComments(id);
283
+ }
284
+ catch (error) {
285
+ if (!controller.signal.aborted)
286
+ this.reportError(error);
287
+ }
288
+ finally {
289
+ if (this.openAbort === controller)
290
+ this.openingTicket = false;
291
+ }
292
+ }
293
+ syncDetail() {
294
+ if (!this.detail || !this.selectedId)
295
+ return;
296
+ const ticket = this.resolvedTickets.get(this.selectedId) ?? this.findTicket(this.selectedId);
297
+ if (!ticket)
298
+ return;
299
+ // Host-fed updates take precedence for records on this board.
300
+ this.detail.ticket = this.tickets.find(item => item.id === this.selectedId) ?? ticket;
301
+ this.detail.tickets = [...this.tickets, ...[...this.resolvedTickets.values()].filter(item => !this.tickets.some(known => known.id === item.id))];
302
+ this.detail.columns = this.columns;
303
+ this.detail.people = this.people;
304
+ this.detail.provider = this.provider;
305
+ this.detail.searchTickets = this.searchTickets;
306
+ this.detail.comments = this.commentCache.get(this.selectedId) ?? [];
307
+ this.detail.commentDraft = this.commentDrafts.get(this.selectedId) ?? [];
308
+ this.detail.draft = this.ticketDrafts.get(this.selectedId);
309
+ this.detail.canGoBack = this.history.length > 0;
310
+ this.detail.saving = this.pendingTicketId === this.selectedId;
311
+ if (this.modal)
312
+ this.modal.heading = this.detail.ticket.key;
313
+ }
314
+ /** Replace a ticket's discussion with an authoritative snapshot (for realtime updates). */
315
+ setComments(ticketId, comments) {
316
+ if (comments.some(comment => comment.ticketId !== ticketId))
317
+ throw new Error('Comment ticket IDs must match.');
318
+ this.commentCache.set(ticketId, [...comments]);
319
+ this.commentRevisions.set(ticketId, (this.commentRevisions.get(ticketId) ?? 0) + 1);
320
+ this.syncDetail();
321
+ }
322
+ async refreshComments(ticketId = this.selectedId) {
323
+ this.commentsAbort?.abort();
324
+ const controller = this.commentsAbort = new AbortController();
325
+ if (!ticketId || !this.provider.loadComments) {
326
+ if (this.detail) {
327
+ this.detail.loadingComments = false;
328
+ this.detail.commentsError = '';
329
+ }
330
+ return;
331
+ }
332
+ const revision = this.commentRevisions.get(ticketId) ?? 0;
333
+ const existingIds = new Set((this.commentCache.get(ticketId) ?? []).map(comment => comment.id));
334
+ if (this.detail && ticketId === this.selectedId) {
335
+ this.detail.loadingComments = true;
336
+ this.detail.commentsError = '';
337
+ }
338
+ try {
339
+ const comments = await this.provider.loadComments(ticketId, controller.signal);
340
+ if (!controller.signal.aborted && (this.commentRevisions.get(ticketId) ?? 0) === revision) {
341
+ const postedWhileLoading = (this.commentCache.get(ticketId) ?? []).filter(comment => !existingIds.has(comment.id) && !comments.some(item => item.id === comment.id));
342
+ this.setComments(ticketId, [...comments, ...postedWhileLoading]);
343
+ }
344
+ }
345
+ catch (error) {
346
+ if (!controller.signal.aborted && this.detail && ticketId === this.selectedId)
347
+ this.detail.commentsError = kanbanError(error);
348
+ }
349
+ finally {
350
+ if (!controller.signal.aborted && this.detail && ticketId === this.selectedId)
351
+ this.detail.loadingComments = false;
352
+ }
353
+ }
354
+ mergeTickets(tickets, addToBoard = false) {
355
+ for (const ticket of tickets)
356
+ this.resolvedTickets.set(ticket.id, ticket);
357
+ this.tickets = this.tickets.map(ticket => tickets.find(item => item.id === ticket.id) ?? ticket);
358
+ if (addToBoard)
359
+ this.tickets = [...this.tickets, ...tickets.filter(ticket => !this.tickets.some(item => item.id === ticket.id))];
360
+ this.syncDetail();
361
+ kanbanEvent(this, 'kanban-change', { tickets });
362
+ }
363
+ /** Provider commits the move and supplies the new ordering. Hierarchy is never part of a move request. */
364
+ async moveTicket(input) {
365
+ const ticket = this.findTicket(input.ticketId);
366
+ if (!ticket || !this.provider.moveTicket || ticket.permissions?.move === false || this.pendingTicketId || input.beforeTicketId === ticket.id)
367
+ return;
368
+ if (!this.columns.some(column => column.id === input.columnId)) {
369
+ this.reportError(new Error('Unknown destination column.'));
370
+ return;
371
+ }
372
+ const before = input.beforeTicketId ? this.findTicket(input.beforeTicketId) : undefined;
373
+ if (input.beforeTicketId && (!before || before.columnId !== input.columnId || before.kind !== ticket.kind)) {
374
+ this.reportError(new Error('Invalid insertion target.'));
375
+ return;
376
+ }
377
+ this.pendingTicketId = ticket.id;
378
+ this.operationError = '';
379
+ this.draggingTicketId = '';
380
+ try {
381
+ const changed = await this.provider.moveTicket(input);
382
+ if (!changed.some(item => item.id === ticket.id))
383
+ throw new Error('The move provider did not return the moved ticket.');
384
+ this.mergeTickets(changed);
385
+ }
386
+ catch (error) {
387
+ this.reportError(error);
388
+ }
389
+ finally {
390
+ this.pendingTicketId = '';
391
+ this.syncDetail();
392
+ }
393
+ }
394
+ async saveTicket(ticketId, draft) {
395
+ const ticket = this.findTicket(ticketId);
396
+ if (!ticket || !this.provider.updateTicket || ticket.permissions?.edit === false || this.pendingTicketId || !draft.title.trim())
397
+ return;
398
+ const parent = draft.parentId ? this.findTicket(draft.parentId) : undefined;
399
+ if ((ticket.kind === 'subtask' && parent?.kind !== 'task') || (ticket.kind === 'task' && draft.parentId && parent?.kind !== 'epic')) {
400
+ this.reportError(new Error('Choose a valid parent ticket.'));
401
+ return;
402
+ }
403
+ const assignee = this.people.find(person => person.id === draft.assigneeId) ?? (ticket.assignee?.id === draft.assigneeId ? ticket.assignee : undefined);
404
+ if (draft.assigneeId && !assignee) {
405
+ this.reportError(new Error('Choose an available assignee.'));
406
+ return;
407
+ }
408
+ this.pendingTicketId = ticketId;
409
+ this.operationError = '';
410
+ if (this.detail)
411
+ this.detail.error = '';
412
+ try {
413
+ const saved = await this.provider.updateTicket({ ticketId, changes: { title: draft.title.trim(), description: draft.description,
414
+ priority: draft.priority, assignee: assignee ?? null, parentId: ticket.kind === 'epic' ? null : draft.parentId || null } });
415
+ if (saved.id !== ticketId)
416
+ throw new Error('The update provider returned a different ticket.');
417
+ this.ticketDrafts.delete(ticketId);
418
+ this.mergeTickets([saved]);
419
+ if (this.selectedId === ticketId)
420
+ this.detail?.finishEditing();
421
+ }
422
+ catch (error) {
423
+ this.reportError(error);
424
+ }
425
+ finally {
426
+ this.pendingTicketId = '';
427
+ this.syncDetail();
428
+ }
429
+ }
430
+ async createTicket(input) {
431
+ if (!this.provider.createTicket || !this.columns.some(column => column.id === input.columnId))
432
+ return;
433
+ const parent = input.parentId ? this.findTicket(input.parentId) : undefined;
434
+ if (parent?.permissions?.createChild === false)
435
+ return;
436
+ if ((input.kind === 'subtask' && parent?.kind !== 'task') || (input.kind === 'task' && parent && parent.kind !== 'epic'))
437
+ return;
438
+ const parentId = input.parentId ?? (input.kind === 'task' ? this.epicId || undefined : undefined);
439
+ await DeesModal.prompt({ heading: `New ${input.kind}`, label: 'Title', confirmLabel: 'Create', onConfirm: async (title) => {
440
+ const ticket = await this.provider.createTicket({ ...input, parentId, title });
441
+ this.mergeTickets([ticket], true);
442
+ } });
443
+ }
444
+ async openMoveMenu(ticketId, anchor) {
445
+ const ticket = this.findTicket(ticketId);
446
+ if (!ticket || !this.provider.moveTicket || ticket.permissions?.move === false || this.pendingTicketId)
447
+ return;
448
+ const siblings = sortKanbanTickets(this.tickets.filter(item => item.columnId === ticket.columnId && item.kind === ticket.kind));
449
+ const index = siblings.findIndex(item => item.id === ticket.id);
450
+ const rect = anchor.getBoundingClientRect();
451
+ await DeesContextmenu.openContextMenuWithOptions(new MouseEvent('click', { clientX: rect.right, clientY: rect.bottom }), [
452
+ { name: 'Move up', disabled: index <= 0, action: async () => { if (index > 0)
453
+ await this.moveTicket({ ticketId, columnId: ticket.columnId, beforeTicketId: siblings[index - 1].id }); } },
454
+ { name: 'Move down', disabled: index < 0 || index >= siblings.length - 1, action: async () => { if (index >= 0 && index < siblings.length - 1)
455
+ await this.moveTicket({ ticketId, columnId: ticket.columnId, beforeTicketId: siblings[index + 2]?.id }); } },
456
+ { divider: true }, ...this.columns.filter(column => column.id !== ticket.columnId).map(column => ({ name: `Move to ${column.title}`, action: async () => { await this.moveTicket({ ticketId, columnId: column.id }); } })),
457
+ ], { ownerElement: anchor });
458
+ }
459
+ reportError(error) {
460
+ this.operationError = kanbanError(error);
461
+ if (this.detail && this.modal)
462
+ this.detail.error = this.operationError;
463
+ kanbanEvent(this, 'kanban-error', { error, message: this.operationError });
464
+ }
465
+ handleInteraction = (event) => {
466
+ event.stopPropagation();
467
+ const { type, detail } = event;
468
+ switch (type) {
469
+ case 'kanban-ticket-open':
470
+ void this.openTicket(detail.ticketId);
471
+ break;
472
+ case 'kanban-ticket-move':
473
+ void this.moveTicket(detail);
474
+ break;
475
+ case 'kanban-ticket-create':
476
+ void this.createTicket(detail).catch(error => this.reportError(error));
477
+ break;
478
+ case 'kanban-move-menu':
479
+ void this.openMoveMenu(detail.ticketId, detail.anchor).catch(error => this.reportError(error));
480
+ break;
481
+ case 'kanban-ticket-save':
482
+ void this.saveTicket(detail.ticketId, detail.draft);
483
+ break;
484
+ case 'kanban-ticket-draft':
485
+ if (detail.draft)
486
+ this.ticketDrafts.set(detail.ticketId, detail.draft);
487
+ else
488
+ this.ticketDrafts.delete(detail.ticketId);
489
+ this.syncDetail();
490
+ break;
491
+ case 'kanban-comment-draft':
492
+ this.commentDrafts.set(detail.ticketId, detail.body);
493
+ break;
494
+ case 'kanban-comment-added': {
495
+ const { comment, submittedBody } = detail;
496
+ const comments = this.commentCache.get(comment.ticketId) ?? [];
497
+ this.commentCache.set(comment.ticketId, [...comments.filter(item => item.id !== comment.id), comment]);
498
+ if (JSON.stringify(this.commentDrafts.get(comment.ticketId) ?? []) === JSON.stringify(submittedBody))
499
+ this.commentDrafts.delete(comment.ticketId);
500
+ this.syncDetail();
501
+ kanbanEvent(this, 'kanban-comment-saved', { comment });
502
+ break;
503
+ }
504
+ case 'kanban-comments-refresh':
505
+ void this.refreshComments(detail.ticketId);
506
+ break;
507
+ case 'kanban-detail-back': {
508
+ const previous = this.history.pop();
509
+ if (previous)
510
+ void this.openTicket(previous, false);
511
+ break;
512
+ }
513
+ case 'kanban-drag-start':
514
+ this.draggingTicketId = detail.ticketId;
515
+ break;
516
+ case 'kanban-drag-end':
517
+ this.draggingTicketId = '';
518
+ break;
519
+ }
520
+ };
521
+ async disconnectedCallback() {
522
+ for (const name of interactionEvents)
523
+ this.removeEventListener(name, this.handleInteraction);
524
+ this.openAbort?.abort();
525
+ this.commentsAbort?.abort();
526
+ void this.modal?.destroy();
527
+ await super.disconnectedCallback();
528
+ }
529
+ static {
530
+ __runInitializers(_classThis, _classExtraInitializers);
531
+ }
532
+ };
533
+ return DeesKanban = _classThis;
534
+ })();
535
+ export { DeesKanban };
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1rYW5iYW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1rYW5iYW4vZGVlcy1rYW5iYW4vZGVlcy1rYW5iYW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXJHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLDZDQUE2QyxDQUFDO0FBSXJELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0I7SUFDL0csb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCO0lBQ3RILG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixDQUFVLENBQUM7SUFtQjVELFVBQVU7NEJBRHRCLGFBQWEsQ0FBQyxhQUFhLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFBbkIsU0FBUSxXQUFXOzs7O21DQUd4QyxR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
@@ -0,0 +1,20 @@
1
+ import { DeesElement } from '@design.estate/dees-element';
2
+ import type { IKanbanTicket, IKanbanColumn } from '../interfaces.js';
3
+ import '../../00group-button/dees-button/dees-button.js';
4
+ import '../../00group-utility/dees-icon/dees-icon.js';
5
+ declare global {
6
+ interface HTMLElementTagNameMap {
7
+ 'dees-kanban-card': DeesKanbanCard;
8
+ }
9
+ }
10
+ export declare class DeesKanbanCard extends DeesElement {
11
+ accessor ticket: IKanbanTicket | undefined;
12
+ accessor epic: IKanbanTicket | undefined;
13
+ accessor subtasks: IKanbanTicket[];
14
+ accessor columns: IKanbanColumn[];
15
+ accessor movable: boolean;
16
+ accessor pending: boolean;
17
+ static styles: import("@design.estate/dees-element").CSSResult[];
18
+ private open;
19
+ render(): import("@design.estate/dees-element").TemplateResult<1>;
20
+ }