@beastmode-develeap/beastmode 0.1.19 → 0.1.21
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/web/board.html +93 -0
- package/package.json +1 -1
package/dist/web/board.html
CHANGED
|
@@ -1177,6 +1177,40 @@ input[type="range"]::-webkit-slider-thumb {
|
|
|
1177
1177
|
.badge-priority-low { background: rgba(59, 130, 246, 0.15); color: #60a5fa; }
|
|
1178
1178
|
.badge-type { background: rgba(100, 116, 139, 0.15); color: var(--text-secondary); }
|
|
1179
1179
|
|
|
1180
|
+
/* Overlay status badges — more prominent than standard card-badges */
|
|
1181
|
+
.badge-overlay {
|
|
1182
|
+
font-weight: 600;
|
|
1183
|
+
font-size: 0.7rem;
|
|
1184
|
+
letter-spacing: 0.02em;
|
|
1185
|
+
}
|
|
1186
|
+
.badge-overlay-stuck {
|
|
1187
|
+
background: rgba(248, 113, 113, 0.2);
|
|
1188
|
+
color: #f87171;
|
|
1189
|
+
border: 1px solid rgba(248, 113, 113, 0.4);
|
|
1190
|
+
}
|
|
1191
|
+
.badge-overlay-awaiting {
|
|
1192
|
+
background: rgba(249, 115, 22, 0.2);
|
|
1193
|
+
color: #f97316;
|
|
1194
|
+
border: 1px solid rgba(249, 115, 22, 0.4);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/* Card-level visual treatment for overlay statuses */
|
|
1198
|
+
.kanban-card[data-overlay="stuck"] {
|
|
1199
|
+
background: rgba(248, 113, 113, 0.04);
|
|
1200
|
+
animation: overlay-pulse 3s ease-in-out infinite;
|
|
1201
|
+
}
|
|
1202
|
+
.kanban-card[data-overlay="awaiting-input"] {
|
|
1203
|
+
background: rgba(249, 115, 22, 0.04);
|
|
1204
|
+
border-left-color: #f97316;
|
|
1205
|
+
}
|
|
1206
|
+
@keyframes overlay-pulse {
|
|
1207
|
+
0%, 100% { border-left-color: var(--danger); }
|
|
1208
|
+
50% { border-left-color: rgba(248, 113, 113, 0.4); }
|
|
1209
|
+
}
|
|
1210
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1211
|
+
.kanban-card[data-overlay="stuck"] { animation: none; }
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1180
1214
|
/* Board stats bar */
|
|
1181
1215
|
.board-stats-bar {
|
|
1182
1216
|
display: flex;
|
|
@@ -2643,6 +2677,63 @@ function priorityBadgeClass(priority) {
|
|
|
2643
2677
|
return 'badge-priority-low';
|
|
2644
2678
|
}
|
|
2645
2679
|
|
|
2680
|
+
function isOverlayStatus(status) {
|
|
2681
|
+
if (!status) return false;
|
|
2682
|
+
const overlays = (typeof PIPELINE_CONFIG !== 'undefined' && PIPELINE_CONFIG && PIPELINE_CONFIG.overlay_statuses)
|
|
2683
|
+
? PIPELINE_CONFIG.overlay_statuses
|
|
2684
|
+
: ['Stuck', 'Awaiting Input'];
|
|
2685
|
+
return overlays.includes(status);
|
|
2686
|
+
}
|
|
2687
|
+
|
|
2688
|
+
function overlayBadgeClass(status) {
|
|
2689
|
+
if (!status) return '';
|
|
2690
|
+
const s = status.toLowerCase();
|
|
2691
|
+
if (s === 'stuck') return 'badge-overlay-stuck';
|
|
2692
|
+
if (s === 'awaiting input') return 'badge-overlay-awaiting';
|
|
2693
|
+
return '';
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
function overlayBadgeLabel(status) {
|
|
2697
|
+
if (!status) return '';
|
|
2698
|
+
const s = status.toLowerCase();
|
|
2699
|
+
if (s === 'stuck') return '\u26A0 Stuck';
|
|
2700
|
+
if (s === 'awaiting input') return '\u23F3 Awaiting Input';
|
|
2701
|
+
return status;
|
|
2702
|
+
}
|
|
2703
|
+
|
|
2704
|
+
function overlayKey(status) {
|
|
2705
|
+
if (!status) return null;
|
|
2706
|
+
const s = status.toLowerCase();
|
|
2707
|
+
if (s === 'stuck') return 'stuck';
|
|
2708
|
+
if (s === 'awaiting input') return 'awaiting-input';
|
|
2709
|
+
return null;
|
|
2710
|
+
}
|
|
2711
|
+
|
|
2712
|
+
function overlayTooltip(status) {
|
|
2713
|
+
if (!status) return '';
|
|
2714
|
+
const s = status.toLowerCase();
|
|
2715
|
+
if (s === 'stuck') return 'Task is stuck after max retries. Comment \'reset\' to restart or investigate the failure.';
|
|
2716
|
+
if (s === 'awaiting input') return 'BeastMode needs your answer to a question before continuing. Check the task updates.';
|
|
2717
|
+
return '';
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
function getEffectivePipelineColumn(item) {
|
|
2721
|
+
if (!isOverlayStatus(item.status)) return item.status;
|
|
2722
|
+
const stages = (typeof getStagesForType === 'function')
|
|
2723
|
+
? getStagesForType(item.task_type)
|
|
2724
|
+
: [];
|
|
2725
|
+
if (stages.includes('Working on it')) return 'Working on it';
|
|
2726
|
+
if (stages.includes('In Progress')) return 'In Progress';
|
|
2727
|
+
return stages.find(s => s !== 'New' && s !== 'Ready') || item.status;
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2730
|
+
window.isOverlayStatus = isOverlayStatus;
|
|
2731
|
+
window.overlayBadgeClass = overlayBadgeClass;
|
|
2732
|
+
window.overlayBadgeLabel = overlayBadgeLabel;
|
|
2733
|
+
window.overlayKey = overlayKey;
|
|
2734
|
+
window.overlayTooltip = overlayTooltip;
|
|
2735
|
+
window.getEffectivePipelineColumn = getEffectivePipelineColumn;
|
|
2736
|
+
|
|
2646
2737
|
// ── HTML Content Renderer (for Monday.com update bodies) ──
|
|
2647
2738
|
|
|
2648
2739
|
function _sanitizeHtml(raw) {
|
|
@@ -3585,6 +3676,7 @@ function BoardPage({ selectedProject }) {
|
|
|
3585
3676
|
: colItems.map(item => html`
|
|
3586
3677
|
<div class="kanban-card" key=${item.id}
|
|
3587
3678
|
data-status=${col.status}
|
|
3679
|
+
data-overlay=${overlayKey(item.status) || ''}
|
|
3588
3680
|
draggable="true"
|
|
3589
3681
|
onDragStart=${e => onDragStart(e, item.id)}
|
|
3590
3682
|
onDragEnd=${onDragEnd}>
|
|
@@ -3594,6 +3686,7 @@ function BoardPage({ selectedProject }) {
|
|
|
3594
3686
|
<div class="card-id">#${item.id}</div>
|
|
3595
3687
|
<div class="card-title" style="cursor:pointer;" onClick=${() => setSelectedItem(item)}>${item.name || item.title}</div>
|
|
3596
3688
|
<div class="card-footer">
|
|
3689
|
+
${isOverlayStatus(item.status) && html`<span class=${'card-badge badge-overlay ' + overlayBadgeClass(item.status)} title=${overlayTooltip(item.status)}>${overlayBadgeLabel(item.status)}</span>`}
|
|
3597
3690
|
${item.parent_epic && html`<span class="card-badge badge-epic">epic:${item.parent_epic}</span>`}
|
|
3598
3691
|
${item.priority && html`<span class=${'card-badge ' + priorityBadgeClass(item.priority)}>${item.priority}</span>`}
|
|
3599
3692
|
${item.task_type && html`<span class="card-badge badge-type">${item.task_type}</span>`}
|