@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
|
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
34
34
|
};
|
|
35
35
|
import { DeesElement, customElement, property, html, css } from '@design.estate/dees-element';
|
|
36
36
|
import { kanbanStyles } from '../kanban.styles.js';
|
|
37
|
-
import { kanbanEvent } from '../kanban.helpers.js';
|
|
37
|
+
import { kanbanEvent, kanbanInitials, kanbanPriorityIcon } from '../kanban.helpers.js';
|
|
38
38
|
import '../../00group-button/dees-button/dees-button.js';
|
|
39
39
|
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
40
40
|
let DeesKanbanCard = (() => {
|
|
@@ -58,9 +58,18 @@ let DeesKanbanCard = (() => {
|
|
|
58
58
|
let _movable_decorators;
|
|
59
59
|
let _movable_initializers = [];
|
|
60
60
|
let _movable_extraInitializers = [];
|
|
61
|
+
let _moveDisabled_decorators;
|
|
62
|
+
let _moveDisabled_initializers = [];
|
|
63
|
+
let _moveDisabled_extraInitializers = [];
|
|
61
64
|
let _pending_decorators;
|
|
62
65
|
let _pending_initializers = [];
|
|
63
66
|
let _pending_extraInitializers = [];
|
|
67
|
+
let _saving_decorators;
|
|
68
|
+
let _saving_initializers = [];
|
|
69
|
+
let _saving_extraInitializers = [];
|
|
70
|
+
let _pointerManaged_decorators;
|
|
71
|
+
let _pointerManaged_initializers = [];
|
|
72
|
+
let _pointerManaged_extraInitializers = [];
|
|
64
73
|
var DeesKanbanCard = class extends _classSuper {
|
|
65
74
|
static { _classThis = this; }
|
|
66
75
|
static {
|
|
@@ -70,13 +79,19 @@ let DeesKanbanCard = (() => {
|
|
|
70
79
|
_subtasks_decorators = [property({ attribute: false })];
|
|
71
80
|
_columns_decorators = [property({ attribute: false })];
|
|
72
81
|
_movable_decorators = [property({ type: Boolean })];
|
|
82
|
+
_moveDisabled_decorators = [property({ type: Boolean })];
|
|
73
83
|
_pending_decorators = [property({ type: Boolean })];
|
|
84
|
+
_saving_decorators = [property({ type: Boolean })];
|
|
85
|
+
_pointerManaged_decorators = [property({ attribute: false })];
|
|
74
86
|
__esDecorate(this, null, _ticket_decorators, { kind: "accessor", name: "ticket", static: false, private: false, access: { has: obj => "ticket" in obj, get: obj => obj.ticket, set: (obj, value) => { obj.ticket = value; } }, metadata: _metadata }, _ticket_initializers, _ticket_extraInitializers);
|
|
75
87
|
__esDecorate(this, null, _epic_decorators, { kind: "accessor", name: "epic", static: false, private: false, access: { has: obj => "epic" in obj, get: obj => obj.epic, set: (obj, value) => { obj.epic = value; } }, metadata: _metadata }, _epic_initializers, _epic_extraInitializers);
|
|
76
88
|
__esDecorate(this, null, _subtasks_decorators, { kind: "accessor", name: "subtasks", static: false, private: false, access: { has: obj => "subtasks" in obj, get: obj => obj.subtasks, set: (obj, value) => { obj.subtasks = value; } }, metadata: _metadata }, _subtasks_initializers, _subtasks_extraInitializers);
|
|
77
89
|
__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);
|
|
78
90
|
__esDecorate(this, null, _movable_decorators, { kind: "accessor", name: "movable", static: false, private: false, access: { has: obj => "movable" in obj, get: obj => obj.movable, set: (obj, value) => { obj.movable = value; } }, metadata: _metadata }, _movable_initializers, _movable_extraInitializers);
|
|
91
|
+
__esDecorate(this, null, _moveDisabled_decorators, { kind: "accessor", name: "moveDisabled", static: false, private: false, access: { has: obj => "moveDisabled" in obj, get: obj => obj.moveDisabled, set: (obj, value) => { obj.moveDisabled = value; } }, metadata: _metadata }, _moveDisabled_initializers, _moveDisabled_extraInitializers);
|
|
79
92
|
__esDecorate(this, null, _pending_decorators, { kind: "accessor", name: "pending", static: false, private: false, access: { has: obj => "pending" in obj, get: obj => obj.pending, set: (obj, value) => { obj.pending = value; } }, metadata: _metadata }, _pending_initializers, _pending_extraInitializers);
|
|
93
|
+
__esDecorate(this, null, _saving_decorators, { kind: "accessor", name: "saving", static: false, private: false, access: { has: obj => "saving" in obj, get: obj => obj.saving, set: (obj, value) => { obj.saving = value; } }, metadata: _metadata }, _saving_initializers, _saving_extraInitializers);
|
|
94
|
+
__esDecorate(this, null, _pointerManaged_decorators, { kind: "accessor", name: "pointerManaged", static: false, private: false, access: { has: obj => "pointerManaged" in obj, get: obj => obj.pointerManaged, set: (obj, value) => { obj.pointerManaged = value; } }, metadata: _metadata }, _pointerManaged_initializers, _pointerManaged_extraInitializers);
|
|
80
95
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
81
96
|
DeesKanbanCard = _classThis = _classDescriptor.value;
|
|
82
97
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -96,21 +111,48 @@ let DeesKanbanCard = (() => {
|
|
|
96
111
|
#movable_accessor_storage = (__runInitializers(this, _columns_extraInitializers), __runInitializers(this, _movable_initializers, false));
|
|
97
112
|
get movable() { return this.#movable_accessor_storage; }
|
|
98
113
|
set movable(value) { this.#movable_accessor_storage = value; }
|
|
99
|
-
#
|
|
114
|
+
#moveDisabled_accessor_storage = (__runInitializers(this, _movable_extraInitializers), __runInitializers(this, _moveDisabled_initializers, false));
|
|
115
|
+
get moveDisabled() { return this.#moveDisabled_accessor_storage; }
|
|
116
|
+
set moveDisabled(value) { this.#moveDisabled_accessor_storage = value; }
|
|
117
|
+
#pending_accessor_storage = (__runInitializers(this, _moveDisabled_extraInitializers), __runInitializers(this, _pending_initializers, false));
|
|
100
118
|
get pending() { return this.#pending_accessor_storage; }
|
|
101
119
|
set pending(value) { this.#pending_accessor_storage = value; }
|
|
120
|
+
#saving_accessor_storage = (__runInitializers(this, _pending_extraInitializers), __runInitializers(this, _saving_initializers, false));
|
|
121
|
+
get saving() { return this.#saving_accessor_storage; }
|
|
122
|
+
set saving(value) { this.#saving_accessor_storage = value; }
|
|
123
|
+
#pointerManaged_accessor_storage = (__runInitializers(this, _saving_extraInitializers), __runInitializers(this, _pointerManaged_initializers, false));
|
|
124
|
+
/** The assembled board owns pointer previews; standalone cards retain native drag events. */
|
|
125
|
+
get pointerManaged() { return this.#pointerManaged_accessor_storage; }
|
|
126
|
+
set pointerManaged(value) { this.#pointerManaged_accessor_storage = value; }
|
|
102
127
|
static styles = [...kanbanStyles, css `
|
|
103
|
-
article { padding:
|
|
128
|
+
article { padding: 12px; border: 1px solid var(--dees-color-border-subtle); border-radius: var(--dees-radius-xl); corner-shape: var(--dees-corner-shape); background: var(--dees-color-bg-primary); box-shadow: var(--dees-shadow-xs); }
|
|
104
129
|
article:hover { border-color: var(--dees-color-border-strong); }
|
|
105
|
-
article[aria-busy=true] { opacity: .65; }
|
|
106
|
-
|
|
107
|
-
.
|
|
108
|
-
.
|
|
109
|
-
.
|
|
110
|
-
.
|
|
111
|
-
.
|
|
112
|
-
|
|
113
|
-
.
|
|
130
|
+
article[aria-busy=true] > :not(.meta), article[aria-busy=true] .meta > :not(.saving) { opacity: .65; }
|
|
131
|
+
article[data-movable=true] { cursor: grab; }
|
|
132
|
+
.meta { display: flex; align-items: center; gap: 8px; min-height: 24px; font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
|
|
133
|
+
.key { flex-shrink: 0; font-weight: 500; font-variant-numeric: tabular-nums; }
|
|
134
|
+
.link.epic { min-width: 0; color: var(--dees-color-text-secondary); font-size: var(--dees-font-caption1-size); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
|
135
|
+
.link.epic:hover { color: var(--dees-color-link); text-decoration: underline; }
|
|
136
|
+
.move { flex-shrink: 0; margin-left: auto; }
|
|
137
|
+
.saving { margin-left: auto; font-size: var(--dees-font-caption1-size); white-space: nowrap; }
|
|
138
|
+
.move::part(button) { width: 24px; height: 24px; min-height: 24px; }
|
|
139
|
+
.title { display: block; width: 100%; border: 0; background: transparent; padding: 4px 0 0; color: inherit; text-align: left; cursor: pointer; font: inherit; font-weight: 600; line-height: 22px; overflow-wrap: anywhere; }
|
|
140
|
+
.title:hover { color: var(--dees-color-link); }
|
|
141
|
+
.footer { margin-top: 10px; gap: 6px; }
|
|
142
|
+
.badge { padding: 1px 6px; }
|
|
143
|
+
.assignee { display: flex; align-items: center; gap: 5px; margin-left: auto; min-width: 0; color: var(--dees-color-text-secondary); font-size: var(--dees-font-caption1-size); }
|
|
144
|
+
.assignee-name { max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
145
|
+
.avatar { width: 20px; height: 20px; font-size: 9px; }
|
|
146
|
+
details { border-top: 1px solid var(--dees-color-border-subtle); margin-top: 10px; }
|
|
147
|
+
summary { cursor: pointer; display: flex; align-items: center; gap: 6px; padding: 9px 0 0; font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); list-style: none; }
|
|
148
|
+
summary::-webkit-details-marker { display: none; }
|
|
149
|
+
summary .disclosure { margin-left: auto; }
|
|
150
|
+
details[open] summary .disclosure { transform: rotate(90deg); }
|
|
151
|
+
.subtask { display: flex; gap: 7px; align-items: center; padding-top: 8px; font-size: var(--dees-font-footnote-size); }
|
|
152
|
+
.subtask dees-icon { flex-shrink: 0; color: var(--dees-color-text-secondary); font-size: 14px; }
|
|
153
|
+
.subtask .link { color: var(--dees-color-text-primary); }
|
|
154
|
+
.subtask .link:hover { color: var(--dees-color-link); }
|
|
155
|
+
@media (pointer: coarse) { .move::part(button) { width: 32px; height: 32px; min-height: 32px; } summary { min-height: 36px; } }
|
|
114
156
|
`];
|
|
115
157
|
open(ticketId) { kanbanEvent(this, 'kanban-ticket-open', { ticketId }); }
|
|
116
158
|
render() {
|
|
@@ -118,34 +160,37 @@ let DeesKanbanCard = (() => {
|
|
|
118
160
|
if (!ticket)
|
|
119
161
|
return html ``;
|
|
120
162
|
const completed = this.subtasks.filter(task => this.columns.some(column => column.id === task.columnId && column.done)).length;
|
|
121
|
-
return html `<article aria-busy=${String(this.pending)}
|
|
163
|
+
return html `<article aria-busy=${String(this.pending)} data-movable=${String(this.movable && !this.moveDisabled && !this.pending)}
|
|
164
|
+
draggable=${String(this.movable && !this.moveDisabled && !this.pending && !this.pointerManaged)}
|
|
122
165
|
@dragstart=${(event) => {
|
|
123
|
-
if (!this.movable || this.pending || !event.dataTransfer) {
|
|
166
|
+
if (this.pointerManaged || !this.movable || this.moveDisabled || this.pending || !event.dataTransfer) {
|
|
124
167
|
event.preventDefault();
|
|
125
168
|
return;
|
|
126
169
|
}
|
|
127
170
|
event.dataTransfer.setData('application/x-dees-kanban-ticket', ticket.id);
|
|
128
171
|
event.dataTransfer.effectAllowed = 'move';
|
|
129
172
|
kanbanEvent(this, 'kanban-drag-start', { ticketId: ticket.id });
|
|
130
|
-
}} @dragend=${() =>
|
|
131
|
-
|
|
132
|
-
<div class="
|
|
133
|
-
${
|
|
134
|
-
|
|
135
|
-
${ticket.labels?.length ? html `<div class="row labels">${ticket.labels.map(label => html `<span class="badge">${label}</span>`)}</div>` : ''}
|
|
136
|
-
<div class="row caption"><span class="avatar" title=${ticket.assignee?.name ?? 'Unassigned'}>${ticket.assignee?.name.split(/\s+/).map(part => part[0]).join('').slice(0, 2) ?? '–'}</span>
|
|
137
|
-
<span>${ticket.assignee?.name ?? 'Unassigned'}</span><span class="spacer"></span>
|
|
138
|
-
${this.movable ? html `<dees-button size="icon" type="ghost" icon="lucide:Ellipsis" text="Move ticket" .disabled=${this.pending}
|
|
173
|
+
}} @dragend=${() => { if (!this.pointerManaged)
|
|
174
|
+
kanbanEvent(this, 'kanban-drag-end', {}); }}>
|
|
175
|
+
<div class="meta"><span class="key">${ticket.key}</span>
|
|
176
|
+
${this.epic ? html `<button class="link epic" title=${this.epic.title} @click=${() => this.open(this.epic.id)}>${this.epic.title}</button>` : ''}
|
|
177
|
+
${this.saving ? html `<span class="saving" role="status">Saving…</span>` : this.movable ? html `<dees-button class="move" size="icon" type="ghost" icon="lucide:Ellipsis" text="Move ticket" .disabled=${this.pending || this.moveDisabled}
|
|
139
178
|
@clicked=${(event) => kanbanEvent(this, 'kanban-move-menu', { ticketId: ticket.id, anchor: event.currentTarget })}></dees-button>` : ''}
|
|
140
179
|
</div>
|
|
141
|
-
|
|
142
|
-
|
|
180
|
+
<button class="title" @click=${() => this.open(ticket.id)}>${ticket.title}</button>
|
|
181
|
+
<div class="row footer">
|
|
182
|
+
${ticket.priority && ticket.priority !== 'none' ? html `<span class="priority" data-priority=${ticket.priority}><dees-icon .icon=${kanbanPriorityIcon(ticket.priority)} iconSize="13" aria-hidden="true"></dees-icon>${ticket.priority}</span>` : ''}
|
|
183
|
+
${ticket.labels?.map(label => html `<span class="badge">${label}</span>`)}
|
|
184
|
+
<span class="assignee" title=${ticket.assignee?.name ?? 'Unassigned'}><span class="avatar" aria-hidden="true">${ticket.assignee ? kanbanInitials(ticket.assignee.name) : '–'}</span><span class="assignee-name">${ticket.assignee?.name ?? 'Unassigned'}</span></span>
|
|
185
|
+
</div>
|
|
186
|
+
${this.subtasks.length ? html `<details><summary><dees-icon icon="lucide:ListChecks" iconSize="14" aria-hidden="true"></dees-icon>${completed}/${this.subtasks.length} subtasks complete<dees-icon class="disclosure" icon="lucide:ChevronRight" iconSize="14" aria-hidden="true"></dees-icon></summary>
|
|
187
|
+
${this.subtasks.map(task => html `<div class="subtask"><dees-icon .icon=${this.columns.some(column => column.id === task.columnId && column.done) ? 'lucide:CircleCheck' : 'lucide:Circle'} iconSize="14" aria-hidden="true"></dees-icon>
|
|
143
188
|
<button class="link" @click=${() => this.open(task.id)}>${task.title}</button></div>`)}</details>` : ''}
|
|
144
189
|
</article>`;
|
|
145
190
|
}
|
|
146
191
|
constructor() {
|
|
147
192
|
super(...arguments);
|
|
148
|
-
__runInitializers(this,
|
|
193
|
+
__runInitializers(this, _pointerManaged_extraInitializers);
|
|
149
194
|
}
|
|
150
195
|
static {
|
|
151
196
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
@@ -154,4 +199,4 @@ let DeesKanbanCard = (() => {
|
|
|
154
199
|
return DeesKanbanCard = _classThis;
|
|
155
200
|
})();
|
|
156
201
|
export { DeesKanbanCard };
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1rYW5iYW4tY2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWthbmJhbi9kZWVzLWthbmJhbi1jYXJkL2RlZXMta2FuYmFuLWNhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkYsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0lBS3pDLGNBQWM7NEJBRDFCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhCQUFuQixTQUFRLFdBQVc7Ozs7a0NBQzVDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQ0FDOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO29DQUM5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7bUNBQzlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzttQ0FDOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3dDQUMzQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7bUNBQzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztrQ0FDM0IsUUFBUSxDQUFDLEVBQUUsSUFB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DeesElement } from '@design.estate/dees-element';
|
|
2
2
|
import type { IKanbanColumn, IKanbanTicket } from '../interfaces.js';
|
|
3
|
+
import type { IKanbanMotion } from '../kanban.dragcontroller.js';
|
|
3
4
|
import '../dees-kanban-card/dees-kanban-card.js';
|
|
4
5
|
declare global {
|
|
5
6
|
interface HTMLElementTagNameMap {
|
|
@@ -12,11 +13,15 @@ export declare class DeesKanbanColumn extends DeesElement {
|
|
|
12
13
|
accessor allTickets: IKanbanTicket[];
|
|
13
14
|
accessor columns: IKanbanColumn[];
|
|
14
15
|
accessor movable: boolean;
|
|
16
|
+
accessor movesDisabled: boolean;
|
|
15
17
|
accessor canCreate: boolean;
|
|
16
18
|
accessor pendingTicketId: string;
|
|
17
19
|
accessor draggingTicketId: string;
|
|
18
|
-
|
|
19
|
-
private accessor
|
|
20
|
+
accessor pointerManaged: boolean;
|
|
21
|
+
private accessor nativeDropBefore;
|
|
22
|
+
private accessor nativeOver;
|
|
23
|
+
/** Internal render projection; provider-owned ticket data remains unchanged until saved. */
|
|
24
|
+
accessor motion: IKanbanMotion | undefined;
|
|
20
25
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
21
26
|
updated(): void;
|
|
22
27
|
render(): import("@design.estate/dees-element").TemplateResult<1>;
|
|
@@ -32,7 +32,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
32
32
|
}
|
|
33
33
|
return useValue ? value : void 0;
|
|
34
34
|
};
|
|
35
|
-
import { DeesElement, customElement, property, state, html, css } from '@design.estate/dees-element';
|
|
35
|
+
import { DeesElement, customElement, property, state, html, css, directives } from '@design.estate/dees-element';
|
|
36
36
|
import { kanbanStyles } from '../kanban.styles.js';
|
|
37
37
|
import { kanbanEvent, sortKanbanTickets } from '../kanban.helpers.js';
|
|
38
38
|
import '../dees-kanban-card/dees-kanban-card.js';
|
|
@@ -57,6 +57,9 @@ let DeesKanbanColumn = (() => {
|
|
|
57
57
|
let _movable_decorators;
|
|
58
58
|
let _movable_initializers = [];
|
|
59
59
|
let _movable_extraInitializers = [];
|
|
60
|
+
let _movesDisabled_decorators;
|
|
61
|
+
let _movesDisabled_initializers = [];
|
|
62
|
+
let _movesDisabled_extraInitializers = [];
|
|
60
63
|
let _canCreate_decorators;
|
|
61
64
|
let _canCreate_initializers = [];
|
|
62
65
|
let _canCreate_extraInitializers = [];
|
|
@@ -66,12 +69,18 @@ let DeesKanbanColumn = (() => {
|
|
|
66
69
|
let _draggingTicketId_decorators;
|
|
67
70
|
let _draggingTicketId_initializers = [];
|
|
68
71
|
let _draggingTicketId_extraInitializers = [];
|
|
69
|
-
let
|
|
70
|
-
let
|
|
71
|
-
let
|
|
72
|
-
let
|
|
73
|
-
let
|
|
74
|
-
let
|
|
72
|
+
let _pointerManaged_decorators;
|
|
73
|
+
let _pointerManaged_initializers = [];
|
|
74
|
+
let _pointerManaged_extraInitializers = [];
|
|
75
|
+
let _nativeDropBefore_decorators;
|
|
76
|
+
let _nativeDropBefore_initializers = [];
|
|
77
|
+
let _nativeDropBefore_extraInitializers = [];
|
|
78
|
+
let _nativeOver_decorators;
|
|
79
|
+
let _nativeOver_initializers = [];
|
|
80
|
+
let _nativeOver_extraInitializers = [];
|
|
81
|
+
let _motion_decorators;
|
|
82
|
+
let _motion_initializers = [];
|
|
83
|
+
let _motion_extraInitializers = [];
|
|
75
84
|
var DeesKanbanColumn = class extends _classSuper {
|
|
76
85
|
static { _classThis = this; }
|
|
77
86
|
static {
|
|
@@ -81,21 +90,27 @@ let DeesKanbanColumn = (() => {
|
|
|
81
90
|
_allTickets_decorators = [property({ attribute: false })];
|
|
82
91
|
_columns_decorators = [property({ attribute: false })];
|
|
83
92
|
_movable_decorators = [property({ type: Boolean })];
|
|
93
|
+
_movesDisabled_decorators = [property({ type: Boolean })];
|
|
84
94
|
_canCreate_decorators = [property({ type: Boolean })];
|
|
85
95
|
_pendingTicketId_decorators = [property({ type: String })];
|
|
86
96
|
_draggingTicketId_decorators = [property({ type: String })];
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
_pointerManaged_decorators = [property({ attribute: false })];
|
|
98
|
+
_nativeDropBefore_decorators = [state()];
|
|
99
|
+
_nativeOver_decorators = [state()];
|
|
100
|
+
_motion_decorators = [property({ attribute: false })];
|
|
89
101
|
__esDecorate(this, null, _column_decorators, { kind: "accessor", name: "column", static: false, private: false, access: { has: obj => "column" in obj, get: obj => obj.column, set: (obj, value) => { obj.column = value; } }, metadata: _metadata }, _column_initializers, _column_extraInitializers);
|
|
90
102
|
__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);
|
|
91
103
|
__esDecorate(this, null, _allTickets_decorators, { kind: "accessor", name: "allTickets", static: false, private: false, access: { has: obj => "allTickets" in obj, get: obj => obj.allTickets, set: (obj, value) => { obj.allTickets = value; } }, metadata: _metadata }, _allTickets_initializers, _allTickets_extraInitializers);
|
|
92
104
|
__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);
|
|
93
105
|
__esDecorate(this, null, _movable_decorators, { kind: "accessor", name: "movable", static: false, private: false, access: { has: obj => "movable" in obj, get: obj => obj.movable, set: (obj, value) => { obj.movable = value; } }, metadata: _metadata }, _movable_initializers, _movable_extraInitializers);
|
|
106
|
+
__esDecorate(this, null, _movesDisabled_decorators, { kind: "accessor", name: "movesDisabled", static: false, private: false, access: { has: obj => "movesDisabled" in obj, get: obj => obj.movesDisabled, set: (obj, value) => { obj.movesDisabled = value; } }, metadata: _metadata }, _movesDisabled_initializers, _movesDisabled_extraInitializers);
|
|
94
107
|
__esDecorate(this, null, _canCreate_decorators, { kind: "accessor", name: "canCreate", static: false, private: false, access: { has: obj => "canCreate" in obj, get: obj => obj.canCreate, set: (obj, value) => { obj.canCreate = value; } }, metadata: _metadata }, _canCreate_initializers, _canCreate_extraInitializers);
|
|
95
108
|
__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);
|
|
96
109
|
__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);
|
|
97
|
-
__esDecorate(this, null,
|
|
98
|
-
__esDecorate(this, null,
|
|
110
|
+
__esDecorate(this, null, _pointerManaged_decorators, { kind: "accessor", name: "pointerManaged", static: false, private: false, access: { has: obj => "pointerManaged" in obj, get: obj => obj.pointerManaged, set: (obj, value) => { obj.pointerManaged = value; } }, metadata: _metadata }, _pointerManaged_initializers, _pointerManaged_extraInitializers);
|
|
111
|
+
__esDecorate(this, null, _nativeDropBefore_decorators, { kind: "accessor", name: "nativeDropBefore", static: false, private: false, access: { has: obj => "nativeDropBefore" in obj, get: obj => obj.nativeDropBefore, set: (obj, value) => { obj.nativeDropBefore = value; } }, metadata: _metadata }, _nativeDropBefore_initializers, _nativeDropBefore_extraInitializers);
|
|
112
|
+
__esDecorate(this, null, _nativeOver_decorators, { kind: "accessor", name: "nativeOver", static: false, private: false, access: { has: obj => "nativeOver" in obj, get: obj => obj.nativeOver, set: (obj, value) => { obj.nativeOver = value; } }, metadata: _metadata }, _nativeOver_initializers, _nativeOver_extraInitializers);
|
|
113
|
+
__esDecorate(this, null, _motion_decorators, { kind: "accessor", name: "motion", static: false, private: false, access: { has: obj => "motion" in obj, get: obj => obj.motion, set: (obj, value) => { obj.motion = value; } }, metadata: _metadata }, _motion_initializers, _motion_extraInitializers);
|
|
99
114
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
100
115
|
DeesKanbanColumn = _classThis = _classDescriptor.value;
|
|
101
116
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -115,7 +130,10 @@ let DeesKanbanColumn = (() => {
|
|
|
115
130
|
#movable_accessor_storage = (__runInitializers(this, _columns_extraInitializers), __runInitializers(this, _movable_initializers, false));
|
|
116
131
|
get movable() { return this.#movable_accessor_storage; }
|
|
117
132
|
set movable(value) { this.#movable_accessor_storage = value; }
|
|
118
|
-
#
|
|
133
|
+
#movesDisabled_accessor_storage = (__runInitializers(this, _movable_extraInitializers), __runInitializers(this, _movesDisabled_initializers, false));
|
|
134
|
+
get movesDisabled() { return this.#movesDisabled_accessor_storage; }
|
|
135
|
+
set movesDisabled(value) { this.#movesDisabled_accessor_storage = value; }
|
|
136
|
+
#canCreate_accessor_storage = (__runInitializers(this, _movesDisabled_extraInitializers), __runInitializers(this, _canCreate_initializers, false));
|
|
119
137
|
get canCreate() { return this.#canCreate_accessor_storage; }
|
|
120
138
|
set canCreate(value) { this.#canCreate_accessor_storage = value; }
|
|
121
139
|
#pendingTicketId_accessor_storage = (__runInitializers(this, _canCreate_extraInitializers), __runInitializers(this, _pendingTicketId_initializers, ''));
|
|
@@ -124,63 +142,87 @@ let DeesKanbanColumn = (() => {
|
|
|
124
142
|
#draggingTicketId_accessor_storage = (__runInitializers(this, _pendingTicketId_extraInitializers), __runInitializers(this, _draggingTicketId_initializers, ''));
|
|
125
143
|
get draggingTicketId() { return this.#draggingTicketId_accessor_storage; }
|
|
126
144
|
set draggingTicketId(value) { this.#draggingTicketId_accessor_storage = value; }
|
|
127
|
-
#
|
|
128
|
-
get
|
|
129
|
-
set
|
|
130
|
-
#
|
|
131
|
-
get
|
|
132
|
-
set
|
|
145
|
+
#pointerManaged_accessor_storage = (__runInitializers(this, _draggingTicketId_extraInitializers), __runInitializers(this, _pointerManaged_initializers, false));
|
|
146
|
+
get pointerManaged() { return this.#pointerManaged_accessor_storage; }
|
|
147
|
+
set pointerManaged(value) { this.#pointerManaged_accessor_storage = value; }
|
|
148
|
+
#nativeDropBefore_accessor_storage = (__runInitializers(this, _pointerManaged_extraInitializers), __runInitializers(this, _nativeDropBefore_initializers, void 0));
|
|
149
|
+
get nativeDropBefore() { return this.#nativeDropBefore_accessor_storage; }
|
|
150
|
+
set nativeDropBefore(value) { this.#nativeDropBefore_accessor_storage = value; }
|
|
151
|
+
#nativeOver_accessor_storage = (__runInitializers(this, _nativeDropBefore_extraInitializers), __runInitializers(this, _nativeOver_initializers, false));
|
|
152
|
+
get nativeOver() { return this.#nativeOver_accessor_storage; }
|
|
153
|
+
set nativeOver(value) { this.#nativeOver_accessor_storage = value; }
|
|
154
|
+
#motion_accessor_storage = (__runInitializers(this, _nativeOver_extraInitializers), __runInitializers(this, _motion_initializers, void 0));
|
|
155
|
+
/** Internal render projection; provider-owned ticket data remains unchanged until saved. */
|
|
156
|
+
get motion() { return this.#motion_accessor_storage; }
|
|
157
|
+
set motion(value) { this.#motion_accessor_storage = value; }
|
|
133
158
|
static styles = [...kanbanStyles, css `
|
|
134
|
-
:host { display: flex; flex-direction: column; width:
|
|
135
|
-
section { min-height: 220px; height: 100%; border-radius: var(--dees-radius-
|
|
136
|
-
header { display: flex; align-items: center; gap: 8px; padding:
|
|
137
|
-
h3 { font-size: var(--dees-font-
|
|
138
|
-
|
|
139
|
-
.
|
|
159
|
+
:host { display: flex; flex-direction: column; min-width: 272px; max-width: 360px; flex: 1 0 272px; }
|
|
160
|
+
section { min-height: 220px; height: 100%; border-radius: var(--dees-radius-xl); transition: background var(--dees-transition-default) var(--dees-ease-out); }
|
|
161
|
+
header { display: flex; align-items: center; gap: 8px; min-height: 40px; margin-bottom: 10px; padding: 0 2px 8px; border-bottom: 1px solid var(--dees-color-border-subtle); }
|
|
162
|
+
h3 { font-size: var(--dees-font-footnote-size); font-weight: 600; }
|
|
163
|
+
header dees-button::part(button) { width: 24px; height: 24px; min-height: 24px; }
|
|
164
|
+
.status { width: 8px; height: 8px; border: 1.5px solid var(--dees-color-text-secondary); border-radius: 50%; flex-shrink: 0; }
|
|
165
|
+
.status.done { background: var(--dees-color-accent-success); border-color: var(--dees-color-accent-success); }
|
|
166
|
+
.stack { display: grid; gap: 8px; min-height: 120px; align-content: start; }
|
|
140
167
|
.target { position: relative; }
|
|
141
|
-
.
|
|
142
|
-
.
|
|
143
|
-
|
|
168
|
+
.native-before::before { content: ''; position: absolute; top: -5px; left: 0; right: 0; height: 2px; background: var(--dees-color-accent-primary); border-radius: 2px; }
|
|
169
|
+
.placeholder { border-radius: var(--dees-radius-xl); background: var(--dees-color-fill-tertiary); box-shadow: inset 0 0 0 1px var(--dees-color-border-default); }
|
|
170
|
+
.end-target { position: relative; min-height: 32px; margin-top: 8px; }
|
|
171
|
+
section.over { background: var(--dees-color-row-hover); }
|
|
172
|
+
@media (prefers-reduced-motion: reduce) { section { transition: none; } }
|
|
173
|
+
@media (pointer: coarse) { header dees-button::part(button) { width: 32px; height: 32px; min-height: 32px; } }
|
|
144
174
|
`];
|
|
145
175
|
updated() { if (!this.draggingTicketId)
|
|
146
|
-
this.
|
|
176
|
+
this.nativeOver = false; }
|
|
147
177
|
render() {
|
|
148
178
|
if (!this.column)
|
|
149
179
|
return html ``;
|
|
150
|
-
|
|
151
|
-
|
|
180
|
+
const motion = this.motion;
|
|
181
|
+
const tickets = sortKanbanTickets(this.tickets).filter(ticket => ticket.id !== motion?.move.ticketId);
|
|
182
|
+
const active = motion?.move.columnId === this.column.id;
|
|
183
|
+
if (motion && active) {
|
|
184
|
+
const index = tickets.findIndex(ticket => ticket.id === motion.move.beforeTicketId);
|
|
185
|
+
tickets.splice(index < 0 ? tickets.length : index, 0, motion.ticket);
|
|
186
|
+
}
|
|
187
|
+
return html `<section class=${active && motion?.placeholder || this.nativeOver ? 'over' : ''} aria-label=${this.column.title}
|
|
188
|
+
@dragover=${(event) => { if (!this.pointerManaged && this.draggingTicketId && this.movable && !this.movesDisabled) {
|
|
152
189
|
event.preventDefault();
|
|
153
|
-
this.
|
|
190
|
+
this.nativeOver = true;
|
|
154
191
|
if (event.dataTransfer)
|
|
155
192
|
event.dataTransfer.dropEffect = 'move';
|
|
156
193
|
} }}
|
|
157
194
|
@dragleave=${(event) => { if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget))
|
|
158
|
-
this.
|
|
195
|
+
this.nativeOver = false; }}
|
|
159
196
|
@drop=${(event) => {
|
|
197
|
+
if (this.pointerManaged)
|
|
198
|
+
return;
|
|
160
199
|
event.preventDefault();
|
|
161
|
-
this.
|
|
162
|
-
if (this.movable && this.draggingTicketId && event.dataTransfer?.getData('application/x-dees-kanban-ticket') === this.draggingTicketId)
|
|
163
|
-
kanbanEvent(this, 'kanban-ticket-move', { ticketId: this.draggingTicketId, columnId: this.column.id, beforeTicketId: this.
|
|
200
|
+
this.nativeOver = false;
|
|
201
|
+
if (this.movable && !this.movesDisabled && this.draggingTicketId && event.dataTransfer?.getData('application/x-dees-kanban-ticket') === this.draggingTicketId)
|
|
202
|
+
kanbanEvent(this, 'kanban-ticket-move', { ticketId: this.draggingTicketId, columnId: this.column.id, beforeTicketId: this.nativeDropBefore });
|
|
164
203
|
}}>
|
|
165
|
-
<header><h3>${this.column.title}</h3><span class="count">${
|
|
204
|
+
<header><span class="status ${this.column.done ? 'done' : ''}" aria-hidden="true"></span><h3>${this.column.title}</h3><span class="count">${tickets.length}</span><span class="spacer"></span>
|
|
166
205
|
${this.canCreate ? html `<dees-button type="ghost" size="icon" icon="lucide:Plus" text=${`Add task to ${this.column.title}`}
|
|
167
206
|
@clicked=${() => kanbanEvent(this, 'kanban-ticket-create', { kind: 'task', columnId: this.column.id })}></dees-button>` : ''}</header>
|
|
168
|
-
<div class="stack">${
|
|
169
|
-
<div class="target ${this.
|
|
170
|
-
@dragover=${() => { this.
|
|
171
|
-
|
|
207
|
+
<div class="stack">${directives.repeat(tickets, ticket => ticket.id, ticket => html `
|
|
208
|
+
<div class="target ${this.nativeOver && this.nativeDropBefore === ticket.id ? 'native-before' : ''}" data-ticket-id=${ticket.id}
|
|
209
|
+
@dragover=${() => { if (!this.pointerManaged)
|
|
210
|
+
this.nativeDropBefore = ticket.id; }}>
|
|
211
|
+
${motion?.move.ticketId === ticket.id && motion.placeholder ? html `<div class="placeholder" style=${`height: ${motion.height}px`} aria-label="Drop ticket here"></div>` : html `<dees-kanban-card .ticket=${ticket} .columns=${this.columns}
|
|
172
212
|
.epic=${this.allTickets.find(item => item.id === ticket.parentId && item.kind === 'epic')}
|
|
173
213
|
.subtasks=${sortKanbanTickets(this.allTickets.filter(item => item.parentId === ticket.id && item.kind === 'subtask'))}
|
|
174
|
-
.movable=${this.movable && ticket.permissions?.move !== false} .pending=${this.pendingTicketId === ticket.id}
|
|
214
|
+
.movable=${this.movable && ticket.permissions?.move !== false} .pending=${motion?.move.ticketId === ticket.id ? motion.dimmed : this.pendingTicketId === ticket.id}
|
|
215
|
+
.moveDisabled=${this.movesDisabled}
|
|
216
|
+
.saving=${motion?.move.ticketId === ticket.id && motion.saving} .pointerManaged=${this.pointerManaged}></dees-kanban-card>`}
|
|
175
217
|
</div>`)}
|
|
176
|
-
${!
|
|
218
|
+
${!tickets.length ? html `<div class="empty" @dragover=${() => { this.nativeDropBefore = undefined; }}>No tasks</div>` : ''}
|
|
177
219
|
</div>
|
|
178
|
-
<div class="end-target ${this.
|
|
220
|
+
<div class="end-target ${this.nativeOver && !this.nativeDropBefore ? 'native-before' : ''}" @dragover=${() => { this.nativeDropBefore = undefined; }}></div>
|
|
179
221
|
</section>`;
|
|
180
222
|
}
|
|
181
223
|
constructor() {
|
|
182
224
|
super(...arguments);
|
|
183
|
-
__runInitializers(this,
|
|
225
|
+
__runInitializers(this, _motion_extraInitializers);
|
|
184
226
|
}
|
|
185
227
|
static {
|
|
186
228
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
@@ -189,4 +231,4 @@ let DeesKanbanColumn = (() => {
|
|
|
189
231
|
return DeesKanbanColumn = _classThis;
|
|
190
232
|
})();
|
|
191
233
|
export { DeesKanbanColumn };
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1rYW5iYW4tY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAta2FuYmFuL2RlZXMta2FuYmFuLWNvbHVtbi9kZWVzLWthbmJhbi1jb2x1bW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdqSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8seUNBQXlDLENBQUM7SUFLcEMsZ0JBQWdCOzRCQUQ1QixhQUFhLENBQUMsb0JBQW9CLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQ0FBbkIsU0FBUSxXQUFXOzs7O2tDQUM5QyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7bUNBQzlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztzQ0FDOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO21DQUM5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7bUNBQzlCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt5Q0FDM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FDQUMzQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7MkNBQzNCLFFBQVEsQ0FBQyxF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
|
package/dist_ts_web/elements/00group-kanban/dees-kanban-discussion/dees-kanban-discussion.js
CHANGED
|
@@ -34,7 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
34
34
|
};
|
|
35
35
|
import { DeesElement, customElement, property, state, html, css } from '@design.estate/dees-element';
|
|
36
36
|
import { kanbanStyles } from '../kanban.styles.js';
|
|
37
|
-
import { kanbanError, kanbanEvent } from '../kanban.helpers.js';
|
|
37
|
+
import { kanbanError, kanbanEvent, kanbanInitials } from '../kanban.helpers.js';
|
|
38
38
|
import { referenceText } from '../../00group-input/dees-input-reference/index.js';
|
|
39
39
|
import '../../00group-button/dees-button/dees-button.js';
|
|
40
40
|
let DeesKanbanDiscussion = (() => {
|
|
@@ -132,31 +132,42 @@ let DeesKanbanDiscussion = (() => {
|
|
|
132
132
|
get failures() { return this.#failures_accessor_storage; }
|
|
133
133
|
set failures(value) { this.#failures_accessor_storage = value; }
|
|
134
134
|
static styles = [...kanbanStyles, css `
|
|
135
|
-
header { display: flex; align-items: center; margin-bottom:
|
|
136
|
-
h3 { font-size: var(--dees-font-
|
|
135
|
+
header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
|
|
136
|
+
h3 { font-size: var(--dees-font-footnote-size); font-weight: 600; }
|
|
137
|
+
.refresh::part(button) { width: 28px; height: 28px; min-height: 28px; }
|
|
137
138
|
ol { list-style: none; padding: 0; margin: 0; }
|
|
138
|
-
li {
|
|
139
|
-
.
|
|
139
|
+
li { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 10px; padding: 10px 0; }
|
|
140
|
+
li > .avatar { width: 28px; height: 28px; margin-top: 1px; }
|
|
141
|
+
.author { font-weight: 600; font-size: var(--dees-font-footnote-size); }
|
|
142
|
+
.meta { gap: 4px 10px; }
|
|
140
143
|
time { font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
|
|
141
|
-
.message { white-space: pre-wrap; overflow-wrap: anywhere; line-height:
|
|
142
|
-
.reference { display: inline; border: 0; border-radius: var(--dees-radius-sm); padding: 1px
|
|
143
|
-
.compose { padding-
|
|
144
|
-
.compose
|
|
144
|
+
.message { white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--dees-font-subhead-size); line-height: 22px; margin-top: 2px; }
|
|
145
|
+
.reference { display: inline; border: 0; border-radius: var(--dees-radius-sm); padding: 1px 5px; color: var(--dees-color-link); background: var(--dees-color-fill-tertiary); font: inherit; font-weight: 500; cursor: pointer; text-align: left; overflow-wrap: anywhere; }
|
|
146
|
+
.compose { margin: 14px 0 0 38px; padding: 0; border: 1px solid var(--dees-color-control-border); border-radius: var(--dees-radius-xl); corner-shape: var(--dees-corner-shape); background: var(--dees-color-control-bg); }
|
|
147
|
+
.compose:has(dees-input-reference:focus-within) { outline: 2px solid var(--dees-color-focus-ring); outline-offset: 1px; }
|
|
148
|
+
dees-input-reference { --dees-reference-min-height: 64px; --dees-reference-font-size: var(--dees-font-subhead-size); }
|
|
149
|
+
dees-input-reference::part(editor) { border: 0; background: transparent; outline: none; }
|
|
150
|
+
.compose .row { padding: 4px 10px 10px; gap: 8px; }
|
|
151
|
+
.compose .caption { font-size: var(--dees-font-caption1-size); }
|
|
152
|
+
.shortcut { white-space: nowrap; }
|
|
153
|
+
.compose .error { padding: 0 12px 10px; }
|
|
154
|
+
@media (max-width: 600px) { .compose { margin-left: 0; } .compose .caption { flex-basis: 100%; } }
|
|
145
155
|
`];
|
|
146
156
|
render() {
|
|
147
157
|
const pending = this.pending.has(this.ticketId);
|
|
148
158
|
const comments = this.comments.filter(comment => comment.ticketId === this.ticketId)
|
|
149
159
|
.slice().sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
|
|
150
|
-
return html `<header><h3>Discussion
|
|
151
|
-
<dees-button size="
|
|
160
|
+
return html `<header><h3>Discussion</h3><span class="count">${comments.length}</span><span class="spacer"></span>
|
|
161
|
+
<dees-button class="refresh" size="icon" type="ghost" icon="lucide:RefreshCw" text="Refresh" .disabled=${this.loading}
|
|
152
162
|
@clicked=${() => kanbanEvent(this, 'kanban-comments-refresh', { ticketId: this.ticketId })}></dees-button></header>
|
|
153
163
|
${this.loading ? html `<p class="caption" role="status">Loading comments…</p>` : ''}
|
|
154
164
|
${this.error ? html `<p class="error" role="alert">${this.error}</p>` : ''}
|
|
155
165
|
<ol aria-label="Comments">${comments.map(comment => html `<li>
|
|
156
|
-
<
|
|
166
|
+
<span class="avatar" aria-hidden="true">${kanbanInitials(comment.author.name)}</span><div>
|
|
167
|
+
<div class="row meta"><span class="author">${comment.author.name}</span><time datetime=${comment.createdAt} title=${comment.createdAt}>${new Date(comment.createdAt).toLocaleString(undefined, { dateStyle: 'medium', timeStyle: 'short' })}</time></div>
|
|
157
168
|
<div class="message">${comment.body.map(part => part.type === 'text' ? part.text : html `<button class="reference"
|
|
158
169
|
@click=${() => kanbanEvent(this, 'kanban-ticket-open', { ticketId: part.id })}>${part.label}</button>`)}</div>
|
|
159
|
-
</li>`)}</ol>
|
|
170
|
+
</div></li>`)}</ol>
|
|
160
171
|
${!comments.length && !this.loading && !this.error ? html `<p class="empty">Start the conversation.</p>` : ''}
|
|
161
172
|
${this.addComment && !this.readOnly ? html `<div class="compose">
|
|
162
173
|
<dees-input-reference label="Comment" placeholder="Write a comment…" .documentKey=${this.ticketId} .value=${this.draft} .disabled=${pending}
|
|
@@ -167,7 +178,7 @@ let DeesKanbanDiscussion = (() => {
|
|
|
167
178
|
}}
|
|
168
179
|
@reference-open=${(event) => kanbanEvent(this, 'kanban-ticket-open', { ticketId: event.detail.id })}
|
|
169
180
|
@reference-submit=${() => { void this.submit(); }}></dees-input-reference>
|
|
170
|
-
<div class="row"><span class="caption">Type
|
|
181
|
+
<div class="row"><span class="caption">Type <strong>#_</strong> to link a ticket · <span class="shortcut">Ctrl/⌘ Enter to send</span></span><span class="spacer"></span>
|
|
171
182
|
<dees-button type="accent" size="sm" text="Comment" .disabled=${pending || !referenceText(this.draft).trim()}
|
|
172
183
|
.status=${pending ? 'pending' : 'normal'} @clicked=${() => { void this.submit(); }}></dees-button></div>
|
|
173
184
|
${this.failures.get(this.ticketId) ? html `<p class="error" role="alert">${this.failures.get(this.ticketId)}</p>` : ''}
|
|
@@ -208,4 +219,4 @@ let DeesKanbanDiscussion = (() => {
|
|
|
208
219
|
return DeesKanbanDiscussion = _classThis;
|
|
209
220
|
})();
|
|
210
221
|
export { DeesKanbanDiscussion };
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1rYW5iYW4tZGlzY3Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWthbmJhbi9kZWVzLWthbmJhbi1kaXNjdXNzaW9uL2RlZXMta2FuYmFuLWRpc2N1c3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFpRCxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pJLE9BQU8saURBQWlELENBQUM7SUFLNUMsb0JBQW9COzRCQURoQyxhQUFhLENBQUMsd0JBQXdCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUNsRCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBQzFCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQ0FDOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3lDQUM5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7c0NBQzlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzttQ0FDOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29DQUMzQixRQUFRLENBQUMsRUFB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
|