@design.estate/dees-catalog 13.0.0 → 13.0.1
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 +192 -109
- 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.js +32 -18
- package/dist_ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.js +37 -21
- package/dist_ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.js +16 -12
- 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.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 +8 -0
- 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 +31 -17
- package/ts_web/elements/00group-kanban/dees-kanban-card/dees-kanban-card.ts +36 -20
- package/ts_web/elements/00group-kanban/dees-kanban-column/dees-kanban-column.ts +15 -11
- 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.helpers.ts +5 -1
- package/ts_web/elements/00group-kanban/kanban.styles.ts +10 -2
package/dist_bundle/bundle.js
CHANGED
|
@@ -183779,7 +183779,7 @@ var DeesTerminalView = _DeesTerminalView;
|
|
|
183779
183779
|
init_dist_ts26();
|
|
183780
183780
|
init_theme();
|
|
183781
183781
|
var kanbanStyles = [themeDefaultStyles, cssManager.defaultStyles, i`
|
|
183782
|
-
:host { display: block; min-width: 0; font-family: var(--dees-font-family); color: var(--dees-color-text-primary); font-size: var(--dees-font-
|
|
183782
|
+
:host { display: block; min-width: 0; font-family: var(--dees-font-family); color: var(--dees-color-text-primary); font-size: var(--dees-font-subhead-size); line-height: 1.5; }
|
|
183783
183783
|
* { box-sizing: border-box; }
|
|
183784
183784
|
h2, h3, p { margin: 0; }
|
|
183785
183785
|
.muted { color: var(--dees-color-text-secondary); }
|
|
@@ -183791,10 +183791,20 @@ var kanbanStyles = [themeDefaultStyles, cssManager.defaultStyles, i`
|
|
|
183791
183791
|
button.link { border: 0; background: transparent; font: inherit; color: var(--dees-color-link); padding: 2px 0; text-align: left; cursor: pointer; overflow-wrap: anywhere; }
|
|
183792
183792
|
button:focus-visible, summary:focus-visible { outline: 2px solid var(--dees-color-focus-ring); outline-offset: 3px; border-radius: var(--dees-radius-sm); }
|
|
183793
183793
|
dees-icon { font-size: 16px; }
|
|
183794
|
-
.badge { display: inline-flex; align-items: center; gap: 4px; background: var(--dees-color-
|
|
183794
|
+
.badge { display: inline-flex; align-items: center; gap: 4px; background: var(--dees-color-fill-tertiary); padding: 3px 7px; border-radius: var(--dees-radius-sm); font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
|
|
183795
|
+
.avatar { flex: 0 0 auto; width: 24px; height: 24px; border-radius: 50%; background: var(--dees-color-fill-secondary); color: var(--dees-color-text-secondary); display: inline-grid; place-items: center; font-size: 10px; font-weight: 600; line-height: 1; }
|
|
183796
|
+
.priority { display: inline-flex; align-items: center; gap: 3px; font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); text-transform: capitalize; }
|
|
183797
|
+
.priority[data-priority=urgent] { color: var(--dees-color-text-error); }
|
|
183798
|
+
.priority[data-priority=high] { color: var(--dees-color-text-warning); }
|
|
183799
|
+
.priority dees-icon { font-size: 13px; }
|
|
183800
|
+
.section-title { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; }
|
|
183801
|
+
.section-title h3 { font-size: var(--dees-font-footnote-size); font-weight: 600; }
|
|
183802
|
+
.count { display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 5px; border-radius: var(--dees-radius-sm); background: var(--dees-color-fill-tertiary); color: var(--dees-color-text-secondary); font-size: var(--dees-font-caption1-size); font-weight: 500; font-variant-numeric: tabular-nums; }
|
|
183795
183803
|
`];
|
|
183796
183804
|
|
|
183797
183805
|
// ts_web/elements/00group-kanban/kanban.helpers.ts
|
|
183806
|
+
var kanbanInitials = /* @__PURE__ */ __name((name) => name.trim().split(/\s+/).map((part) => part[0]).join("").slice(0, 2), "kanbanInitials");
|
|
183807
|
+
var kanbanPriorityIcon = /* @__PURE__ */ __name((priority) => priority === "urgent" ? "lucide:ChevronsUp" : priority === "high" ? "lucide:ChevronUp" : priority === "low" ? "lucide:ChevronDown" : "lucide:Minus", "kanbanPriorityIcon");
|
|
183798
183808
|
var sortKanbanTickets = /* @__PURE__ */ __name((tickets) => [...tickets].sort((a4, b4) => a4.order - b4.order || a4.id.localeCompare(b4.id)), "sortKanbanTickets");
|
|
183799
183809
|
var ticketLabel = /* @__PURE__ */ __name((ticket) => `#${ticket.key} ${ticket.title}`, "ticketLabel");
|
|
183800
183810
|
var ticketDraft = /* @__PURE__ */ __name((ticket) => ({
|
|
@@ -183888,7 +183898,7 @@ var _DeesInputReference = class _DeesInputReference extends (_a104 = DeesElement
|
|
|
183888
183898
|
__publicField(this, "serializedValue", "");
|
|
183889
183899
|
}
|
|
183890
183900
|
render() {
|
|
183891
|
-
return b2`<div class="editor"></div>${this.loadError ? b2`<p class="error" role="alert">${this.loadError}</p>` : ""}`;
|
|
183901
|
+
return b2`<div class="editor" part="editor"></div>${this.loadError ? b2`<p class="error" role="alert">${this.loadError}</p>` : ""}`;
|
|
183892
183902
|
}
|
|
183893
183903
|
async connectedCallback() {
|
|
183894
183904
|
const connection = super.connectedCallback();
|
|
@@ -184102,11 +184112,11 @@ __publicField(_DeesInputReference, "styles", [themeDefaultStyles, cssManager.def
|
|
|
184102
184112
|
:host { display: block; min-width: 0; color: var(--dees-color-text-primary); font-family: var(--dees-font-family); }
|
|
184103
184113
|
.editor { border: 1px solid var(--dees-color-border-default); border-radius: var(--dees-radius-lg); background: var(--dees-color-bg-primary); }
|
|
184104
184114
|
.editor:focus-within { outline: 2px solid var(--dees-color-focus-ring); outline-offset: 1px; }
|
|
184105
|
-
.ProseMirror { padding: 12px; min-height: 84px; max-height: 260px; overflow: auto; outline: none; white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--dees-font-body-size); line-height: 1.6; }
|
|
184115
|
+
.ProseMirror { padding: 12px; min-height: var(--dees-reference-min-height, 84px); max-height: 260px; overflow: auto; outline: none; white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--dees-reference-font-size, var(--dees-font-body-size)); line-height: 1.6; }
|
|
184106
184116
|
.ProseMirror p { margin: 0; }
|
|
184107
184117
|
.ProseMirror p + p { margin-top: 0; }
|
|
184108
184118
|
.ProseMirror:has(> p:only-child > br:only-child)::before { content: attr(data-placeholder); float: left; color: var(--dees-color-text-muted); pointer-events: none; height: 0; }
|
|
184109
|
-
.ProseMirror [data-reference-id] { display: inline; padding: 1px 5px; border-radius: var(--dees-radius-sm); color: var(--dees-color-link); background: var(--dees-color-
|
|
184119
|
+
.ProseMirror [data-reference-id] { display: inline; padding: 1px 5px; border-radius: var(--dees-radius-sm); color: var(--dees-color-link); background: var(--dees-color-fill-tertiary); cursor: pointer; font-weight: 500; }
|
|
184110
184120
|
.ProseMirror [data-reference-id]:focus-visible, .ProseMirror .ProseMirror-selectednode { outline: 2px solid var(--dees-color-focus-ring); }
|
|
184111
184121
|
.ProseMirror[contenteditable=false] { opacity: .65; }
|
|
184112
184122
|
.error { color: var(--dees-color-text-error); font-size: var(--dees-font-footnote-size); }
|
|
@@ -184136,16 +184146,17 @@ var _DeesKanbanDiscussion = class _DeesKanbanDiscussion extends (_a105 = DeesEle
|
|
|
184136
184146
|
render() {
|
|
184137
184147
|
const pending = this.pending.has(this.ticketId);
|
|
184138
184148
|
const comments = this.comments.filter((comment3) => comment3.ticketId === this.ticketId).slice().sort((a4, b4) => Date.parse(a4.createdAt) - Date.parse(b4.createdAt));
|
|
184139
|
-
return b2`<header><h3>Discussion
|
|
184140
|
-
<dees-button size="
|
|
184149
|
+
return b2`<header><h3>Discussion</h3><span class="count">${comments.length}</span><span class="spacer"></span>
|
|
184150
|
+
<dees-button class="refresh" size="icon" type="ghost" icon="lucide:RefreshCw" text="Refresh" .disabled=${this.loading}
|
|
184141
184151
|
@clicked=${() => kanbanEvent(this, "kanban-comments-refresh", { ticketId: this.ticketId })}></dees-button></header>
|
|
184142
184152
|
${this.loading ? b2`<p class="caption" role="status">Loading comments…</p>` : ""}
|
|
184143
184153
|
${this.error ? b2`<p class="error" role="alert">${this.error}</p>` : ""}
|
|
184144
184154
|
<ol aria-label="Comments">${comments.map((comment3) => b2`<li>
|
|
184145
|
-
<
|
|
184155
|
+
<span class="avatar" aria-hidden="true">${kanbanInitials(comment3.author.name)}</span><div>
|
|
184156
|
+
<div class="row meta"><span class="author">${comment3.author.name}</span><time datetime=${comment3.createdAt} title=${comment3.createdAt}>${new Date(comment3.createdAt).toLocaleString(void 0, { dateStyle: "medium", timeStyle: "short" })}</time></div>
|
|
184146
184157
|
<div class="message">${comment3.body.map((part) => part.type === "text" ? part.text : b2`<button class="reference"
|
|
184147
184158
|
@click=${() => kanbanEvent(this, "kanban-ticket-open", { ticketId: part.id })}>${part.label}</button>`)}</div>
|
|
184148
|
-
</li>`)}</ol>
|
|
184159
|
+
</div></li>`)}</ol>
|
|
184149
184160
|
${!comments.length && !this.loading && !this.error ? b2`<p class="empty">Start the conversation.</p>` : ""}
|
|
184150
184161
|
${this.addComment && !this.readOnly ? b2`<div class="compose">
|
|
184151
184162
|
<dees-input-reference label="Comment" placeholder="Write a comment…" .documentKey=${this.ticketId} .value=${this.draft} .disabled=${pending}
|
|
@@ -184158,7 +184169,7 @@ var _DeesKanbanDiscussion = class _DeesKanbanDiscussion extends (_a105 = DeesEle
|
|
|
184158
184169
|
@reference-submit=${() => {
|
|
184159
184170
|
void this.submit();
|
|
184160
184171
|
}}></dees-input-reference>
|
|
184161
|
-
<div class="row"><span class="caption">Type
|
|
184172
|
+
<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>
|
|
184162
184173
|
<dees-button type="accent" size="sm" text="Comment" .disabled=${pending || !referenceText(this.draft).trim()}
|
|
184163
184174
|
.status=${pending ? "pending" : "normal"} @clicked=${() => {
|
|
184164
184175
|
void this.submit();
|
|
@@ -184210,16 +184221,26 @@ __decorateElement(_init107, 4, "failures", _failures_dec, _DeesKanbanDiscussion,
|
|
|
184210
184221
|
_DeesKanbanDiscussion = __decorateElement(_init107, 0, "DeesKanbanDiscussion", _DeesKanbanDiscussion_decorators, _DeesKanbanDiscussion);
|
|
184211
184222
|
__name(_DeesKanbanDiscussion, "DeesKanbanDiscussion");
|
|
184212
184223
|
__publicField(_DeesKanbanDiscussion, "styles", [...kanbanStyles, i`
|
|
184213
|
-
header { display: flex; align-items: center; margin-bottom:
|
|
184214
|
-
h3 { font-size: var(--dees-font-
|
|
184224
|
+
header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
|
|
184225
|
+
h3 { font-size: var(--dees-font-footnote-size); font-weight: 600; }
|
|
184226
|
+
.refresh::part(button) { width: 28px; height: 28px; min-height: 28px; }
|
|
184215
184227
|
ol { list-style: none; padding: 0; margin: 0; }
|
|
184216
|
-
li {
|
|
184217
|
-
.
|
|
184228
|
+
li { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 10px; padding: 10px 0; }
|
|
184229
|
+
li > .avatar { width: 28px; height: 28px; margin-top: 1px; }
|
|
184230
|
+
.author { font-weight: 600; font-size: var(--dees-font-footnote-size); }
|
|
184231
|
+
.meta { gap: 4px 10px; }
|
|
184218
184232
|
time { font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
|
|
184219
|
-
.message { white-space: pre-wrap; overflow-wrap: anywhere; line-height:
|
|
184220
|
-
.reference { display: inline; border: 0; border-radius: var(--dees-radius-sm); padding: 1px
|
|
184221
|
-
.compose { padding-
|
|
184222
|
-
.compose
|
|
184233
|
+
.message { white-space: pre-wrap; overflow-wrap: anywhere; font-size: var(--dees-font-subhead-size); line-height: 22px; margin-top: 2px; }
|
|
184234
|
+
.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; }
|
|
184235
|
+
.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); }
|
|
184236
|
+
.compose:has(dees-input-reference:focus-within) { outline: 2px solid var(--dees-color-focus-ring); outline-offset: 1px; }
|
|
184237
|
+
dees-input-reference { --dees-reference-min-height: 64px; --dees-reference-font-size: var(--dees-font-subhead-size); }
|
|
184238
|
+
dees-input-reference::part(editor) { border: 0; background: transparent; outline: none; }
|
|
184239
|
+
.compose .row { padding: 4px 10px 10px; gap: 8px; }
|
|
184240
|
+
.compose .caption { font-size: var(--dees-font-caption1-size); }
|
|
184241
|
+
.shortcut { white-space: nowrap; }
|
|
184242
|
+
.compose .error { padding: 0 12px 10px; }
|
|
184243
|
+
@media (max-width: 600px) { .compose { margin-left: 0; } .compose .caption { flex-basis: 100%; } }
|
|
184223
184244
|
`]);
|
|
184224
184245
|
__runInitializers(_init107, 1, _DeesKanbanDiscussion);
|
|
184225
184246
|
var DeesKanbanDiscussion = _DeesKanbanDiscussion;
|
|
@@ -184227,9 +184248,9 @@ var DeesKanbanDiscussion = _DeesKanbanDiscussion;
|
|
|
184227
184248
|
// ts_web/elements/00group-kanban/dees-kanban-ticket-detail/dees-kanban-ticket-detail.ts
|
|
184228
184249
|
init_dist_ts26();
|
|
184229
184250
|
init_dees_input_text();
|
|
184230
|
-
var _editing_dec3, _canGoBack_dec, _saving_dec2, _error_dec3, _commentsError_dec, _loadingComments_dec, _searchTickets_dec2, _comments_dec2, _commentDraft_dec, _draft_dec3, _provider_dec2, _people_dec, _columns_dec3, _tickets_dec, _ticket_dec, _a106, _DeesKanbanTicketDetail_decorators, _init108, _ticket, _tickets, _columns3, _people, _provider2, _draft3, _commentDraft, _comments2, _searchTickets2, _loadingComments, _commentsError, _error3, _saving2, _canGoBack, _editing3;
|
|
184251
|
+
var _editing_dec3, _showTicketKey_dec, _canGoBack_dec, _saving_dec2, _error_dec3, _commentsError_dec, _loadingComments_dec, _searchTickets_dec2, _comments_dec2, _commentDraft_dec, _draft_dec3, _provider_dec2, _people_dec, _columns_dec3, _tickets_dec, _ticket_dec, _a106, _DeesKanbanTicketDetail_decorators, _init108, _ticket, _tickets, _columns3, _people, _provider2, _draft3, _commentDraft, _comments2, _searchTickets2, _loadingComments, _commentsError, _error3, _saving2, _canGoBack, _showTicketKey, _editing3;
|
|
184231
184252
|
_DeesKanbanTicketDetail_decorators = [customElement("dees-kanban-ticket-detail")];
|
|
184232
|
-
var _DeesKanbanTicketDetail = class _DeesKanbanTicketDetail extends (_a106 = DeesElement, _ticket_dec = [n5({ attribute: false })], _tickets_dec = [n5({ attribute: false })], _columns_dec3 = [n5({ attribute: false })], _people_dec = [n5({ attribute: false })], _provider_dec2 = [n5({ attribute: false })], _draft_dec3 = [n5({ attribute: false })], _commentDraft_dec = [n5({ attribute: false })], _comments_dec2 = [n5({ attribute: false })], _searchTickets_dec2 = [n5({ attribute: false })], _loadingComments_dec = [n5({ type: Boolean })], _commentsError_dec = [n5({ type: String })], _error_dec3 = [n5({ type: String })], _saving_dec2 = [n5({ type: Boolean })], _canGoBack_dec = [n5({ type: Boolean })], _editing_dec3 = [r5()], _a106) {
|
|
184253
|
+
var _DeesKanbanTicketDetail = class _DeesKanbanTicketDetail extends (_a106 = DeesElement, _ticket_dec = [n5({ attribute: false })], _tickets_dec = [n5({ attribute: false })], _columns_dec3 = [n5({ attribute: false })], _people_dec = [n5({ attribute: false })], _provider_dec2 = [n5({ attribute: false })], _draft_dec3 = [n5({ attribute: false })], _commentDraft_dec = [n5({ attribute: false })], _comments_dec2 = [n5({ attribute: false })], _searchTickets_dec2 = [n5({ attribute: false })], _loadingComments_dec = [n5({ type: Boolean })], _commentsError_dec = [n5({ type: String })], _error_dec3 = [n5({ type: String })], _saving_dec2 = [n5({ type: Boolean })], _canGoBack_dec = [n5({ type: Boolean })], _showTicketKey_dec = [n5({ type: Boolean })], _editing_dec3 = [r5()], _a106) {
|
|
184233
184254
|
constructor() {
|
|
184234
184255
|
super(...arguments);
|
|
184235
184256
|
__privateAdd(this, _ticket, __runInitializers(_init108, 8, this)), __runInitializers(_init108, 11, this);
|
|
@@ -184246,7 +184267,8 @@ var _DeesKanbanTicketDetail = class _DeesKanbanTicketDetail extends (_a106 = Dee
|
|
|
184246
184267
|
__privateAdd(this, _error3, __runInitializers(_init108, 52, this, "")), __runInitializers(_init108, 55, this);
|
|
184247
184268
|
__privateAdd(this, _saving2, __runInitializers(_init108, 56, this, false)), __runInitializers(_init108, 59, this);
|
|
184248
184269
|
__privateAdd(this, _canGoBack, __runInitializers(_init108, 60, this, false)), __runInitializers(_init108, 63, this);
|
|
184249
|
-
__privateAdd(this,
|
|
184270
|
+
__privateAdd(this, _showTicketKey, __runInitializers(_init108, 64, this, true)), __runInitializers(_init108, 67, this);
|
|
184271
|
+
__privateAdd(this, _editing3, __runInitializers(_init108, 68, this, false)), __runInitializers(_init108, 71, this);
|
|
184250
184272
|
__publicField(this, "addComment", /* @__PURE__ */ __name((input) => this.provider.addComment(input), "addComment"));
|
|
184251
184273
|
}
|
|
184252
184274
|
updated(changed2) {
|
|
@@ -184268,15 +184290,16 @@ var _DeesKanbanTicketDetail = class _DeesKanbanTicketDetail extends (_a106 = Dee
|
|
|
184268
184290
|
const parents = this.tickets.filter((item) => item.kind === (ticket.kind === "subtask" ? "task" : "epic"));
|
|
184269
184291
|
return b2`<div class="toolbar row">
|
|
184270
184292
|
${this.canGoBack ? b2`<dees-button size="sm" type="ghost" icon="lucide:ArrowLeft" text="Back" @clicked=${() => kanbanEvent(this, "kanban-detail-back", {})}></dees-button>` : ""}
|
|
184271
|
-
<span class="badge">${ticket.kind}</span
|
|
184272
|
-
${
|
|
184293
|
+
<span class="badge">${ticket.kind}</span>
|
|
184294
|
+
${this.showTicketKey ? b2`<span class="caption ticket-key">${ticket.key}</span>` : ""}
|
|
184295
|
+
${parent ? b2`<span class="caption" aria-hidden="true">/</span><button class="link parent" title=${parent.title} @click=${() => kanbanEvent(this, "kanban-ticket-open", { ticketId: parent.id })}>${parent.title}</button>` : ""}
|
|
184273
184296
|
<span class="spacer"></span>${editable && !this.editing ? b2`<dees-button size="sm" type="ghost" text="Edit ticket" icon="lucide:Pencil" @clicked=${() => {
|
|
184274
184297
|
this.editing = true;
|
|
184275
184298
|
this.changeDraft({});
|
|
184276
184299
|
}}></dees-button>` : ""}
|
|
184277
184300
|
</div>
|
|
184278
184301
|
${this.error ? b2`<p class="error" role="alert">${this.error}</p>` : ""}
|
|
184279
|
-
<div class="layout"><
|
|
184302
|
+
<div class="layout"><section class="lead">
|
|
184280
184303
|
${this.editing && editable ? b2`<div class="edit">
|
|
184281
184304
|
<dees-input-text label="Title" .value=${draft.title} .disabled=${this.saving}
|
|
184282
184305
|
@input=${(event) => this.changeDraft({ title: String(event.currentTarget.value ?? "") })}></dees-input-text>
|
|
@@ -184290,33 +184313,36 @@ var _DeesKanbanTicketDetail = class _DeesKanbanTicketDetail extends (_a106 = Dee
|
|
|
184290
184313
|
kanbanEvent(this, "kanban-ticket-draft", { ticketId: ticket.id, draft: void 0 });
|
|
184291
184314
|
}}></dees-button></div>
|
|
184292
184315
|
</div>` : b2`<h2>${ticket.title}</h2><div class="description ${ticket.description ? "" : "muted"}">${ticket.description || "No description yet."}</div>`}
|
|
184293
|
-
|
|
184294
|
-
|
|
184295
|
-
@clicked=${() => kanbanEvent(this, "kanban-ticket-create", { kind: ticket.kind === "epic" ? "task" : "subtask", parentId: ticket.id, columnId: this.columns[0]?.id ?? ticket.columnId })}></dees-button>` : ""}</div>
|
|
184296
|
-
${children2.map((child) => b2`<div class="child"><button class="link" @click=${() => kanbanEvent(this, "kanban-ticket-open", { ticketId: child.id })}>${ticketLabel(child)}</button>
|
|
184297
|
-
<span class="badge">${this.columns.find((column) => column.id === child.columnId)?.title ?? child.columnId}</span></div>`)}
|
|
184298
|
-
${!children2.length ? b2`<p class="caption">No ${ticket.kind === "epic" ? "tasks" : "subtasks"} yet.</p>` : ""}</section>` : ""}
|
|
184299
|
-
<dees-kanban-discussion class="discussion" .ticketId=${ticket.id} .comments=${this.comments} .draft=${this.commentDraft}
|
|
184300
|
-
.loading=${this.loadingComments} .error=${this.commentsError} .readOnly=${ticket.permissions?.comment === false}
|
|
184301
|
-
.searchTickets=${this.searchTickets} .addComment=${this.provider.addComment ? this.addComment : void 0}></dees-kanban-discussion>
|
|
184302
|
-
</div><aside><div class="fields">
|
|
184303
|
-
<dees-input-dropdown label="Status" .options=${this.columns.map((column) => ({ key: column.id, option: column.title }))}
|
|
184316
|
+
</section><aside><div class="fields">
|
|
184317
|
+
<div><label class="caption">Status</label><dees-input-dropdown label="Status" .labelPosition=${"none"} .options=${this.columns.map((column) => ({ key: column.id, option: column.title }))}
|
|
184304
184318
|
.value=${{ key: ticket.columnId, option: this.columns.find((column) => column.id === ticket.columnId)?.title ?? ticket.columnId }}
|
|
184305
|
-
.disabled=${!movable || this.saving} @selectedOption=${(event) => kanbanEvent(this, "kanban-ticket-move", { ticketId: ticket.id, columnId: event.detail.key })}></dees-input-dropdown>
|
|
184319
|
+
.disabled=${!movable || this.saving} @selectedOption=${(event) => kanbanEvent(this, "kanban-ticket-move", { ticketId: ticket.id, columnId: event.detail.key })}></dees-input-dropdown></div>
|
|
184306
184320
|
${this.editing && editable ? b2`
|
|
184307
|
-
<dees-input-dropdown label="Priority" .disabled=${this.saving} .value=${{ key: draft.priority, option: draft.priority }}
|
|
184321
|
+
<div><label class="caption">Priority</label><dees-input-dropdown label="Priority" .labelPosition=${"none"} .disabled=${this.saving} .value=${{ key: draft.priority, option: draft.priority }}
|
|
184308
184322
|
.options=${["none", "low", "normal", "high", "urgent"].map((key2) => ({ key: key2, option: key2 }))}
|
|
184309
|
-
@selectedOption=${(event) => this.changeDraft({ priority: event.detail.key })}></dees-input-dropdown>
|
|
184310
|
-
<dees-input-dropdown label="Assignee" .disabled=${this.saving} .value=${{ key: draft.assigneeId, option: this.people.find((person) => person.id === draft.assigneeId)?.name ?? ticket.assignee?.name ?? "Unassigned" }}
|
|
184323
|
+
@selectedOption=${(event) => this.changeDraft({ priority: event.detail.key })}></dees-input-dropdown></div>
|
|
184324
|
+
<div><label class="caption">Assignee</label><dees-input-dropdown label="Assignee" .labelPosition=${"none"} .disabled=${this.saving} .value=${{ key: draft.assigneeId, option: this.people.find((person) => person.id === draft.assigneeId)?.name ?? ticket.assignee?.name ?? "Unassigned" }}
|
|
184311
184325
|
.options=${[{ key: "", option: "Unassigned" }, ...this.people.map((person) => ({ key: person.id, option: person.name }))]}
|
|
184312
|
-
@selectedOption=${(event) => this.changeDraft({ assigneeId: event.detail.key })}></dees-input-dropdown>
|
|
184313
|
-
${ticket.kind !== "epic" ? b2`<dees-input-dropdown label=${ticket.kind === "task" ? "Epic" : "Parent task"} .disabled=${this.saving}
|
|
184326
|
+
@selectedOption=${(event) => this.changeDraft({ assigneeId: event.detail.key })}></dees-input-dropdown></div>
|
|
184327
|
+
${ticket.kind !== "epic" ? b2`<div><label class="caption">${ticket.kind === "task" ? "Epic" : "Parent task"}</label><dees-input-dropdown label=${ticket.kind === "task" ? "Epic" : "Parent task"} .labelPosition=${"none"} .disabled=${this.saving}
|
|
184314
184328
|
.value=${{ key: draft.parentId, option: parents.find((item) => item.id === draft.parentId)?.title ?? "None" }}
|
|
184315
184329
|
.options=${[...ticket.kind === "task" ? [{ key: "", option: "None" }] : [], ...parents.map((item) => ({ key: item.id, option: ticketLabel(item) }))]}
|
|
184316
|
-
@selectedOption=${(event) => this.changeDraft({ parentId: event.detail.key })}></dees-input-dropdown>` : ""}
|
|
184317
|
-
` : b2`<div><label class="caption">Priority</label
|
|
184318
|
-
|
|
184319
|
-
|
|
184330
|
+
@selectedOption=${(event) => this.changeDraft({ parentId: event.detail.key })}></dees-input-dropdown></div>` : ""}
|
|
184331
|
+
` : b2`<div><label class="caption">Priority</label><span class="priority value" data-priority=${ticket.priority ?? "none"}><dees-icon .icon=${kanbanPriorityIcon(ticket.priority)} iconSize="13" aria-hidden="true"></dees-icon>${ticket.priority ?? "none"}</span></div>
|
|
184332
|
+
<div><label class="caption">Assignee</label><span class="person value"><span class="avatar" aria-hidden="true">${ticket.assignee ? kanbanInitials(ticket.assignee.name) : "\u2013"}</span>${ticket.assignee?.name ?? "Unassigned"}</span></div>`}
|
|
184333
|
+
${ticket.labels?.length ? b2`<div><label class="caption">Labels</label><div class="row value">${ticket.labels.map((label) => b2`<span class="badge">${label}</span>`)}</div></div>` : ""}
|
|
184334
|
+
</div></aside><div class="body">
|
|
184335
|
+
${ticket.kind !== "subtask" ? b2`<section class="children"><div class="section-title"><h3>${ticket.kind === "epic" ? "Tasks" : "Subtasks"}</h3><span class="count">${children2.length}</span><span class="spacer"></span>
|
|
184336
|
+
${this.provider.createTicket && ticket.permissions?.createChild !== false ? b2`<dees-button size="sm" type="ghost" icon="lucide:Plus" text=${ticket.kind === "epic" ? "Add task" : "Add subtask"}
|
|
184337
|
+
@clicked=${() => kanbanEvent(this, "kanban-ticket-create", { kind: ticket.kind === "epic" ? "task" : "subtask", parentId: ticket.id, columnId: this.columns[0]?.id ?? ticket.columnId })}></dees-button>` : ""}</div>
|
|
184338
|
+
<div class="child-list">${children2.map((child) => b2`<button class="child" @click=${() => kanbanEvent(this, "kanban-ticket-open", { ticketId: child.id })}>
|
|
184339
|
+
<span class="child-key">${child.key}</span><span class="child-title">${child.title}</span>
|
|
184340
|
+
<span class="badge">${this.columns.find((column) => column.id === child.columnId)?.title ?? child.columnId}</span></button>`)}</div>
|
|
184341
|
+
${!children2.length ? b2`<p class="caption">No ${ticket.kind === "epic" ? "tasks" : "subtasks"} yet.</p>` : ""}</section>` : ""}
|
|
184342
|
+
<dees-kanban-discussion class="discussion" .ticketId=${ticket.id} .comments=${this.comments} .draft=${this.commentDraft}
|
|
184343
|
+
.loading=${this.loadingComments} .error=${this.commentsError} .readOnly=${ticket.permissions?.comment === false}
|
|
184344
|
+
.searchTickets=${this.searchTickets} .addComment=${this.provider.addComment ? this.addComment : void 0}></dees-kanban-discussion>
|
|
184345
|
+
</div></div>`;
|
|
184320
184346
|
}
|
|
184321
184347
|
finishEditing() {
|
|
184322
184348
|
this.editing = false;
|
|
@@ -184337,6 +184363,7 @@ _commentsError = new WeakMap();
|
|
|
184337
184363
|
_error3 = new WeakMap();
|
|
184338
184364
|
_saving2 = new WeakMap();
|
|
184339
184365
|
_canGoBack = new WeakMap();
|
|
184366
|
+
_showTicketKey = new WeakMap();
|
|
184340
184367
|
_editing3 = new WeakMap();
|
|
184341
184368
|
__decorateElement(_init108, 4, "ticket", _ticket_dec, _DeesKanbanTicketDetail, _ticket);
|
|
184342
184369
|
__decorateElement(_init108, 4, "tickets", _tickets_dec, _DeesKanbanTicketDetail, _tickets);
|
|
@@ -184352,24 +184379,45 @@ __decorateElement(_init108, 4, "commentsError", _commentsError_dec, _DeesKanbanT
|
|
|
184352
184379
|
__decorateElement(_init108, 4, "error", _error_dec3, _DeesKanbanTicketDetail, _error3);
|
|
184353
184380
|
__decorateElement(_init108, 4, "saving", _saving_dec2, _DeesKanbanTicketDetail, _saving2);
|
|
184354
184381
|
__decorateElement(_init108, 4, "canGoBack", _canGoBack_dec, _DeesKanbanTicketDetail, _canGoBack);
|
|
184382
|
+
__decorateElement(_init108, 4, "showTicketKey", _showTicketKey_dec, _DeesKanbanTicketDetail, _showTicketKey);
|
|
184355
184383
|
__decorateElement(_init108, 4, "editing", _editing_dec3, _DeesKanbanTicketDetail, _editing3);
|
|
184356
184384
|
_DeesKanbanTicketDetail = __decorateElement(_init108, 0, "DeesKanbanTicketDetail", _DeesKanbanTicketDetail_decorators, _DeesKanbanTicketDetail);
|
|
184357
184385
|
__name(_DeesKanbanTicketDetail, "DeesKanbanTicketDetail");
|
|
184358
184386
|
__publicField(_DeesKanbanTicketDetail, "styles", [...kanbanStyles, i`
|
|
184359
|
-
|
|
184360
|
-
.
|
|
184361
|
-
.
|
|
184362
|
-
|
|
184363
|
-
.
|
|
184364
|
-
|
|
184365
|
-
.
|
|
184366
|
-
.
|
|
184367
|
-
|
|
184387
|
+
:host { padding: 24px; }
|
|
184388
|
+
.layout { display: grid; grid-template-columns: minmax(0, 1fr) 248px; grid-template-areas: 'lead props' 'body props'; gap: 24px; align-items: start; }
|
|
184389
|
+
.lead { grid-area: lead; min-width: 0; }
|
|
184390
|
+
.body { grid-area: body; min-width: 0; }
|
|
184391
|
+
.toolbar { margin-bottom: 20px; flex-wrap: nowrap; min-width: 0; }
|
|
184392
|
+
.toolbar .badge { text-transform: capitalize; flex-shrink: 0; }
|
|
184393
|
+
.ticket-key { flex-shrink: 0; font-variant-numeric: tabular-nums; }
|
|
184394
|
+
.link.parent { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--dees-font-footnote-size); }
|
|
184395
|
+
.toolbar dees-button { flex-shrink: 0; }
|
|
184396
|
+
h2 { font-size: var(--dees-font-title2-size); line-height: 1.3; font-weight: 600; margin-bottom: 12px; letter-spacing: -.015em; overflow-wrap: anywhere; }
|
|
184397
|
+
.description { white-space: pre-wrap; font-size: var(--dees-font-subhead-size); line-height: 22px; overflow-wrap: anywhere; max-width: 64ch; }
|
|
184398
|
+
aside { grid-area: props; min-width: 0; padding: 14px 16px; border-radius: var(--dees-radius-xl); corner-shape: var(--dees-corner-shape); background: var(--dees-color-settings-group); }
|
|
184399
|
+
.fields { display: grid; gap: 14px; font-size: var(--dees-font-footnote-size); font-weight: 500; }
|
|
184400
|
+
.fields label { display: block; margin-bottom: 5px; font-size: var(--dees-font-caption1-size); font-weight: 400; }
|
|
184401
|
+
.value { min-height: var(--dees-control-height-lg); display: flex; align-items: center; }
|
|
184402
|
+
.person { display: flex; align-items: center; gap: 7px; }
|
|
184368
184403
|
.children { margin-bottom: 24px; }
|
|
184369
|
-
.child {
|
|
184370
|
-
.
|
|
184371
|
-
.
|
|
184372
|
-
|
|
184404
|
+
.child-list { border-radius: var(--dees-radius-xl); corner-shape: var(--dees-corner-shape); background: var(--dees-color-settings-group); overflow: hidden; }
|
|
184405
|
+
.child { display: flex; width: 100%; align-items: center; gap: 10px; min-height: 44px; padding: 10px 12px; border: 0; background: transparent; color: inherit; font: inherit; text-align: left; cursor: pointer; }
|
|
184406
|
+
.child + .child { border-top: 1px solid var(--dees-color-border-subtle); }
|
|
184407
|
+
.child:hover { background: var(--dees-color-row-hover); }
|
|
184408
|
+
.child:focus-visible { outline-offset: -3px; }
|
|
184409
|
+
.child-key { font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); font-variant-numeric: tabular-nums; flex-shrink: 0; }
|
|
184410
|
+
.child-title { flex: 1; min-width: 0; font-size: var(--dees-font-footnote-size); font-weight: 500; overflow-wrap: anywhere; }
|
|
184411
|
+
.child .badge { flex-shrink: 0; }
|
|
184412
|
+
.discussion { border-top: 1px solid var(--dees-color-border-subtle); padding-top: 20px; }
|
|
184413
|
+
.edit { display: grid; gap: 14px; }
|
|
184414
|
+
@media (max-width: 700px) {
|
|
184415
|
+
:host { padding: 16px; }
|
|
184416
|
+
.layout { grid-template-columns: minmax(0, 1fr); grid-template-areas: 'lead' 'props' 'body'; gap: 20px; }
|
|
184417
|
+
.fields { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
184418
|
+
.toolbar { gap: 6px; margin-bottom: 16px; }
|
|
184419
|
+
.child { gap: 7px; }
|
|
184420
|
+
}
|
|
184373
184421
|
`]);
|
|
184374
184422
|
__runInitializers(_init108, 1, _DeesKanbanTicketDetail);
|
|
184375
184423
|
var DeesKanbanTicketDetail = _DeesKanbanTicketDetail;
|
|
@@ -184479,18 +184527,19 @@ var _DeesKanbanCard = class _DeesKanbanCard extends (_a107 = DeesElement, _ticke
|
|
|
184479
184527
|
event.dataTransfer.effectAllowed = "move";
|
|
184480
184528
|
kanbanEvent(this, "kanban-drag-start", { ticketId: ticket.id });
|
|
184481
184529
|
}} @dragend=${() => kanbanEvent(this, "kanban-drag-end", {})}>
|
|
184482
|
-
|
|
184483
|
-
|
|
184484
|
-
${
|
|
184485
|
-
<button class="title" @click=${() => this.open(ticket.id)}>${ticket.title}</button>
|
|
184486
|
-
${ticket.labels?.length ? b2`<div class="row labels">${ticket.labels.map((label) => b2`<span class="badge">${label}</span>`)}</div>` : ""}
|
|
184487
|
-
<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) ?? "\u2013"}</span>
|
|
184488
|
-
<span>${ticket.assignee?.name ?? "Unassigned"}</span><span class="spacer"></span>
|
|
184489
|
-
${this.movable ? b2`<dees-button size="icon" type="ghost" icon="lucide:Ellipsis" text="Move ticket" .disabled=${this.pending}
|
|
184530
|
+
<div class="meta"><span class="key">${ticket.key}</span>
|
|
184531
|
+
${this.epic ? b2`<button class="link epic" title=${this.epic.title} @click=${() => this.open(this.epic.id)}>${this.epic.title}</button>` : ""}
|
|
184532
|
+
${this.movable ? b2`<dees-button class="move" size="icon" type="ghost" icon="lucide:Ellipsis" text="Move ticket" .disabled=${this.pending}
|
|
184490
184533
|
@clicked=${(event) => kanbanEvent(this, "kanban-move-menu", { ticketId: ticket.id, anchor: event.currentTarget })}></dees-button>` : ""}
|
|
184491
184534
|
</div>
|
|
184492
|
-
|
|
184493
|
-
|
|
184535
|
+
<button class="title" @click=${() => this.open(ticket.id)}>${ticket.title}</button>
|
|
184536
|
+
<div class="row footer">
|
|
184537
|
+
${ticket.priority && ticket.priority !== "none" ? b2`<span class="priority" data-priority=${ticket.priority}><dees-icon .icon=${kanbanPriorityIcon(ticket.priority)} iconSize="13" aria-hidden="true"></dees-icon>${ticket.priority}</span>` : ""}
|
|
184538
|
+
${ticket.labels?.map((label) => b2`<span class="badge">${label}</span>`)}
|
|
184539
|
+
<span class="assignee" title=${ticket.assignee?.name ?? "Unassigned"}><span class="avatar" aria-hidden="true">${ticket.assignee ? kanbanInitials(ticket.assignee.name) : "\u2013"}</span><span class="assignee-name">${ticket.assignee?.name ?? "Unassigned"}</span></span>
|
|
184540
|
+
</div>
|
|
184541
|
+
${this.subtasks.length ? b2`<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>
|
|
184542
|
+
${this.subtasks.map((task) => b2`<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>
|
|
184494
184543
|
<button class="link" @click=${() => this.open(task.id)}>${task.title}</button></div>`)}</details>` : ""}
|
|
184495
184544
|
</article>`;
|
|
184496
184545
|
}
|
|
@@ -184511,17 +184560,32 @@ __decorateElement(_init109, 4, "pending", _pending_dec3, _DeesKanbanCard, _pendi
|
|
|
184511
184560
|
_DeesKanbanCard = __decorateElement(_init109, 0, "DeesKanbanCard", _DeesKanbanCard_decorators, _DeesKanbanCard);
|
|
184512
184561
|
__name(_DeesKanbanCard, "DeesKanbanCard");
|
|
184513
184562
|
__publicField(_DeesKanbanCard, "styles", [...kanbanStyles, i`
|
|
184514
|
-
article { padding:
|
|
184563
|
+
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); }
|
|
184515
184564
|
article:hover { border-color: var(--dees-color-border-strong); }
|
|
184516
184565
|
article[aria-busy=true] { opacity: .65; }
|
|
184517
|
-
.
|
|
184518
|
-
.key { font-variant-numeric: tabular-nums; }
|
|
184519
|
-
.link.epic {
|
|
184520
|
-
.
|
|
184521
|
-
.
|
|
184522
|
-
.
|
|
184523
|
-
|
|
184524
|
-
.
|
|
184566
|
+
.meta { display: flex; align-items: center; gap: 8px; min-height: 24px; font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); }
|
|
184567
|
+
.key { flex-shrink: 0; font-weight: 500; font-variant-numeric: tabular-nums; }
|
|
184568
|
+
.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; }
|
|
184569
|
+
.link.epic:hover { color: var(--dees-color-link); text-decoration: underline; }
|
|
184570
|
+
.move { flex-shrink: 0; margin-left: auto; }
|
|
184571
|
+
.move::part(button) { width: 24px; height: 24px; min-height: 24px; }
|
|
184572
|
+
.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; }
|
|
184573
|
+
.title:hover { color: var(--dees-color-link); }
|
|
184574
|
+
.footer { margin-top: 10px; gap: 6px; }
|
|
184575
|
+
.badge { padding: 1px 6px; }
|
|
184576
|
+
.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); }
|
|
184577
|
+
.assignee-name { max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
184578
|
+
.avatar { width: 20px; height: 20px; font-size: 9px; }
|
|
184579
|
+
details { border-top: 1px solid var(--dees-color-border-subtle); margin-top: 10px; }
|
|
184580
|
+
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; }
|
|
184581
|
+
summary::-webkit-details-marker { display: none; }
|
|
184582
|
+
summary .disclosure { margin-left: auto; }
|
|
184583
|
+
details[open] summary .disclosure { transform: rotate(90deg); }
|
|
184584
|
+
.subtask { display: flex; gap: 7px; align-items: center; padding-top: 8px; font-size: var(--dees-font-footnote-size); }
|
|
184585
|
+
.subtask dees-icon { flex-shrink: 0; color: var(--dees-color-text-secondary); font-size: 14px; }
|
|
184586
|
+
.subtask .link { color: var(--dees-color-text-primary); }
|
|
184587
|
+
.subtask .link:hover { color: var(--dees-color-link); }
|
|
184588
|
+
@media (pointer: coarse) { .move::part(button) { width: 32px; height: 32px; min-height: 32px; } summary { min-height: 36px; } }
|
|
184525
184589
|
`]);
|
|
184526
184590
|
__runInitializers(_init109, 1, _DeesKanbanCard);
|
|
184527
184591
|
var DeesKanbanCard = _DeesKanbanCard;
|
|
@@ -184566,11 +184630,11 @@ var _DeesKanbanColumn = class _DeesKanbanColumn extends (_a108 = DeesElement, _c
|
|
|
184566
184630
|
if (this.movable && this.draggingTicketId && event.dataTransfer?.getData("application/x-dees-kanban-ticket") === this.draggingTicketId)
|
|
184567
184631
|
kanbanEvent(this, "kanban-ticket-move", { ticketId: this.draggingTicketId, columnId: this.column.id, beforeTicketId: this.dropBefore });
|
|
184568
184632
|
}}>
|
|
184569
|
-
<header><h3>${this.column.title}</h3><span class="count">${this.tickets.length}</span><span class="spacer"></span>
|
|
184633
|
+
<header><span class="status ${this.column.done ? "done" : ""}" aria-hidden="true"></span><h3>${this.column.title}</h3><span class="count">${this.tickets.length}</span><span class="spacer"></span>
|
|
184570
184634
|
${this.canCreate ? b2`<dees-button type="ghost" size="icon" icon="lucide:Plus" text=${`Add task to ${this.column.title}`}
|
|
184571
184635
|
@clicked=${() => kanbanEvent(this, "kanban-ticket-create", { kind: "task", columnId: this.column.id })}></dees-button>` : ""}</header>
|
|
184572
184636
|
<div class="stack">${sortKanbanTickets(this.tickets).map((ticket) => b2`
|
|
184573
|
-
<div class="target ${this.draggingOver && this.dropBefore === ticket.id ? "before" : ""}"
|
|
184637
|
+
<div class="target ${this.draggingOver && this.dropBefore === ticket.id ? "before" : ""} ${this.draggingTicketId === ticket.id ? "dragging" : ""}"
|
|
184574
184638
|
@dragover=${() => {
|
|
184575
184639
|
this.dropBefore = ticket.id;
|
|
184576
184640
|
}}>
|
|
@@ -184613,16 +184677,20 @@ __decorateElement(_init110, 4, "draggingOver", _draggingOver_dec, _DeesKanbanCol
|
|
|
184613
184677
|
_DeesKanbanColumn = __decorateElement(_init110, 0, "DeesKanbanColumn", _DeesKanbanColumn_decorators, _DeesKanbanColumn);
|
|
184614
184678
|
__name(_DeesKanbanColumn, "DeesKanbanColumn");
|
|
184615
184679
|
__publicField(_DeesKanbanColumn, "styles", [...kanbanStyles, i`
|
|
184616
|
-
:host { display: flex; flex-direction: column; width:
|
|
184617
|
-
section { min-height: 220px; height: 100%; border-radius: var(--dees-radius-
|
|
184618
|
-
header { display: flex; align-items: center; gap: 8px; padding:
|
|
184619
|
-
h3 { font-size: var(--dees-font-
|
|
184620
|
-
|
|
184621
|
-
.
|
|
184680
|
+
:host { display: flex; flex-direction: column; min-width: 272px; max-width: 360px; flex: 1 0 272px; }
|
|
184681
|
+
section { min-height: 220px; height: 100%; border-radius: var(--dees-radius-xl); }
|
|
184682
|
+
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); }
|
|
184683
|
+
h3 { font-size: var(--dees-font-footnote-size); font-weight: 600; }
|
|
184684
|
+
header dees-button::part(button) { width: 24px; height: 24px; min-height: 24px; }
|
|
184685
|
+
.status { width: 8px; height: 8px; border: 1.5px solid var(--dees-color-text-secondary); border-radius: 50%; flex-shrink: 0; }
|
|
184686
|
+
.status.done { background: var(--dees-color-accent-success); border-color: var(--dees-color-accent-success); }
|
|
184687
|
+
.stack { display: grid; gap: 8px; min-height: 120px; align-content: start; }
|
|
184622
184688
|
.target { position: relative; }
|
|
184623
|
-
.target.
|
|
184624
|
-
.end-target {
|
|
184625
|
-
|
|
184689
|
+
.target.dragging { opacity: .4; }
|
|
184690
|
+
.target.before::before, .end-target.before::before { content: ''; position: absolute; top: -5px; left: 0; right: 0; height: 2px; background: var(--dees-color-accent-primary); border-radius: 2px; }
|
|
184691
|
+
.end-target { position: relative; min-height: 32px; margin-top: 8px; }
|
|
184692
|
+
section.over { background: var(--dees-color-row-hover); }
|
|
184693
|
+
@media (pointer: coarse) { header dees-button::part(button) { width: 32px; height: 32px; min-height: 32px; } }
|
|
184626
184694
|
`]);
|
|
184627
184695
|
__runInitializers(_init110, 1, _DeesKanbanColumn);
|
|
184628
184696
|
var DeesKanbanColumn = _DeesKanbanColumn;
|
|
@@ -184752,28 +184820,28 @@ var _DeesKanban = class _DeesKanban extends (_a109 = DeesElement, _heading_dec8
|
|
|
184752
184820
|
...this.tickets.filter((child) => child.parentId === ticket.id).map((child) => `${child.key} ${child.title}`)
|
|
184753
184821
|
].join(" ").toLocaleLowerCase().includes(query3)));
|
|
184754
184822
|
const epic = epics.find((ticket) => ticket.id === this.epicId);
|
|
184755
|
-
return b2`<header class="heading"><h2>${this.heading}</h2><span class="
|
|
184756
|
-
|
|
184757
|
-
@clicked=${() => {
|
|
184758
|
-
void this.createTicket({ kind: "epic", columnId: this.columns[0].id });
|
|
184759
|
-
}}></dees-button>
|
|
184760
|
-
<dees-button type="accent" size="sm" icon="lucide:Plus" text="New task" .disabled=${!this.columns.length}
|
|
184761
|
-
@clicked=${() => {
|
|
184762
|
-
void this.createTicket({ kind: "task", columnId: this.columns[0].id, parentId: this.epicId || void 0 });
|
|
184763
|
-
}}></dees-button>` : ""}</header>
|
|
184764
|
-
<div class="filters"><dees-input-text label="Search tickets" placeholder="Title, ticket number, assignee…" .value=${this.query}
|
|
184823
|
+
return b2`<header class="heading"><div class="identity"><h2>${this.heading}</h2><span class="totals">${tasks.length} tasks · ${epics.length} epics</span></div>
|
|
184824
|
+
<div class="filters"><dees-input-text label="Search tickets" .labelPosition=${"none"} placeholder="Search tickets…" .value=${this.query}
|
|
184765
184825
|
@input=${(event) => {
|
|
184766
184826
|
this.query = String(event.currentTarget.value ?? "");
|
|
184767
184827
|
}}></dees-input-text>
|
|
184768
|
-
<dees-input-dropdown label="Epic" .value=${{ key: this.epicId, option: epic?.title ?? "All epics" }}
|
|
184828
|
+
<dees-input-dropdown label="Epic" .labelPosition=${"none"} .value=${{ key: this.epicId, option: epic?.title ?? "All epics" }}
|
|
184769
184829
|
.options=${[{ key: "", option: "All epics" }, ...epics.map((ticket) => ({ key: ticket.id, option: ticket.title }))]}
|
|
184770
184830
|
@selectedOption=${(event) => {
|
|
184771
184831
|
this.epicId = event.detail.key;
|
|
184772
184832
|
}}></dees-input-dropdown>
|
|
184773
|
-
${epic ? b2`<dees-button type="ghost"
|
|
184833
|
+
${epic ? b2`<dees-button type="ghost" text="Open epic" @clicked=${() => {
|
|
184774
184834
|
void this.openTicket(epic.id);
|
|
184775
184835
|
}}></dees-button>` : ""}
|
|
184776
184836
|
</div>
|
|
184837
|
+
${this.provider.createTicket ? b2`<div class="actions"><dees-button type="secondary" text="New epic" .disabled=${!this.columns.length}
|
|
184838
|
+
@clicked=${() => {
|
|
184839
|
+
void this.createTicket({ kind: "epic", columnId: this.columns[0].id });
|
|
184840
|
+
}}></dees-button>
|
|
184841
|
+
<dees-button type="accent" icon="lucide:Plus" text="New task" .disabled=${!this.columns.length}
|
|
184842
|
+
@clicked=${() => {
|
|
184843
|
+
void this.createTicket({ kind: "task", columnId: this.columns[0].id, parentId: this.epicId || void 0 });
|
|
184844
|
+
}}></dees-button></div>` : ""}</header>
|
|
184777
184845
|
${this.loading || this.openingTicket ? b2`<p class="caption" role="status">${this.loading ? "Loading board\u2026" : "Opening ticket\u2026"}</p>` : ""}
|
|
184778
184846
|
${this.error || this.operationError ? b2`<p class="error" role="alert">${this.error || this.operationError}</p>` : ""}
|
|
184779
184847
|
${!this.columns.length ? b2`<p class="empty">No columns configured.</p>` : b2`<div class="columns" aria-label=${this.heading}>
|
|
@@ -184801,6 +184869,7 @@ var _DeesKanban = class _DeesKanban extends (_a109 = DeesElement, _heading_dec8
|
|
|
184801
184869
|
this.selectedId = id;
|
|
184802
184870
|
if (!this.detail) {
|
|
184803
184871
|
this.detail = new DeesKanbanTicketDetail();
|
|
184872
|
+
this.detail.showTicketKey = false;
|
|
184804
184873
|
for (const name of interactionEvents) this.detail.addEventListener(name, this.handleInteraction);
|
|
184805
184874
|
}
|
|
184806
184875
|
this.detail.ticket = ticket;
|
|
@@ -184812,6 +184881,7 @@ var _DeesKanban = class _DeesKanban extends (_a109 = DeesElement, _heading_dec8
|
|
|
184812
184881
|
width: 1e3,
|
|
184813
184882
|
maxWidth: 1040,
|
|
184814
184883
|
mobileFullscreen: true,
|
|
184884
|
+
contentPadding: 0,
|
|
184815
184885
|
content: b2`${this.detail}`,
|
|
184816
184886
|
menuOptions: []
|
|
184817
184887
|
});
|
|
@@ -185037,14 +185107,27 @@ __name(_DeesKanban, "DeesKanban");
|
|
|
185037
185107
|
__publicField(_DeesKanban, "demo", demoFunc72);
|
|
185038
185108
|
__publicField(_DeesKanban, "demoGroups", ["Kanban"]);
|
|
185039
185109
|
__publicField(_DeesKanban, "styles", [...kanbanStyles, i`
|
|
185040
|
-
:host { padding: 24px; background: var(--dees-color-bg-canvas); min-height: 100%; }
|
|
185041
|
-
.heading { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom:
|
|
185042
|
-
|
|
185043
|
-
|
|
185044
|
-
.
|
|
185045
|
-
.filters
|
|
185046
|
-
.
|
|
185047
|
-
|
|
185110
|
+
:host { padding: 20px 24px; background: var(--dees-color-bg-canvas); min-height: 100%; }
|
|
185111
|
+
.heading { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin-bottom: 16px; }
|
|
185112
|
+
.identity { display: flex; gap: 12px; align-items: baseline; flex: 1; min-width: 220px; flex-wrap: wrap; }
|
|
185113
|
+
h2 { font-size: var(--dees-font-title3-size); font-weight: 600; letter-spacing: -.02em; line-height: 1.3; overflow-wrap: anywhere; }
|
|
185114
|
+
.totals { font-size: var(--dees-font-caption1-size); color: var(--dees-color-text-secondary); white-space: nowrap; }
|
|
185115
|
+
.filters { display: flex; align-items: center; gap: 8px; }
|
|
185116
|
+
.filters dees-input-text { width: 230px; min-width: 140px; }
|
|
185117
|
+
.filters dees-input-dropdown { width: 180px; min-width: 140px; }
|
|
185118
|
+
.actions { display: flex; gap: 8px; margin-left: auto; }
|
|
185119
|
+
.columns { display: flex; gap: 20px; overflow-x: auto; padding: 3px 2px 16px; align-items: stretch; }
|
|
185120
|
+
@media (max-width: 1100px) { .filters { order: 3; flex-basis: 100%; } .filters dees-input-text { flex: 1; max-width: 320px; } }
|
|
185121
|
+
@media (max-width: 600px) {
|
|
185122
|
+
:host { padding: 12px 16px; }
|
|
185123
|
+
.heading { gap: 12px 8px; }
|
|
185124
|
+
.identity { min-width: 100%; gap: 6px 10px; }
|
|
185125
|
+
.actions { margin-left: 0; }
|
|
185126
|
+
.filters { flex-wrap: wrap; }
|
|
185127
|
+
.filters dees-input-text, .filters dees-input-dropdown { flex: 1; width: auto; min-width: 130px; }
|
|
185128
|
+
.columns { margin: 0 -16px; padding: 3px 16px 16px; scroll-snap-type: x proximity; scroll-padding-inline: 16px; gap: 14px; }
|
|
185129
|
+
dees-kanban-column { scroll-snap-align: start; flex: 0 0 86%; min-width: 0; max-width: none; }
|
|
185130
|
+
}
|
|
185048
185131
|
`]);
|
|
185049
185132
|
__runInitializers(_init111, 1, _DeesKanban);
|
|
185050
185133
|
var DeesKanban = _DeesKanban;
|
|
@@ -226450,7 +226533,7 @@ init_group_runtime();
|
|
|
226450
226533
|
// ts_web/00_commitinfo_data.ts
|
|
226451
226534
|
var commitinfo = {
|
|
226452
226535
|
name: "@design.estate/dees-catalog",
|
|
226453
|
-
version: "13.0.
|
|
226536
|
+
version: "13.0.1",
|
|
226454
226537
|
description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
|
|
226455
226538
|
};
|
|
226456
226539
|
|