hzl-web 1.14.1 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/index.html +122 -1
- package/package.json +1 -1
package/dist/ui/index.html
CHANGED
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
display: flex;
|
|
74
74
|
align-items: center;
|
|
75
75
|
gap: 6px;
|
|
76
|
+
position: relative;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
.filter-label {
|
|
@@ -136,6 +137,58 @@
|
|
|
136
137
|
border-color: var(--accent);
|
|
137
138
|
}
|
|
138
139
|
|
|
140
|
+
/* Column Visibility Dropdown */
|
|
141
|
+
.columns-toggle {
|
|
142
|
+
font-family: var(--font-mono);
|
|
143
|
+
font-size: 12px;
|
|
144
|
+
background: var(--bg-primary);
|
|
145
|
+
color: var(--text-primary);
|
|
146
|
+
border: 1px solid var(--border);
|
|
147
|
+
padding: 4px 8px;
|
|
148
|
+
border-radius: 4px;
|
|
149
|
+
cursor: pointer;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.columns-toggle:hover {
|
|
153
|
+
border-color: var(--accent);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.columns-dropdown {
|
|
157
|
+
display: none;
|
|
158
|
+
position: absolute;
|
|
159
|
+
top: 100%;
|
|
160
|
+
left: 0;
|
|
161
|
+
margin-top: 4px;
|
|
162
|
+
background: var(--bg-secondary);
|
|
163
|
+
border: 1px solid var(--border);
|
|
164
|
+
border-radius: 4px;
|
|
165
|
+
padding: 8px;
|
|
166
|
+
z-index: 100;
|
|
167
|
+
min-width: 140px;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.columns-dropdown.open {
|
|
171
|
+
display: block;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.column-checkbox {
|
|
175
|
+
display: flex;
|
|
176
|
+
align-items: center;
|
|
177
|
+
gap: 8px;
|
|
178
|
+
padding: 4px 0;
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
font-size: 12px;
|
|
181
|
+
color: var(--text-primary);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.column-checkbox:hover {
|
|
185
|
+
color: var(--accent);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.column-checkbox input {
|
|
189
|
+
accent-color: var(--accent);
|
|
190
|
+
}
|
|
191
|
+
|
|
139
192
|
/* Kanban Board */
|
|
140
193
|
.board {
|
|
141
194
|
display: flex;
|
|
@@ -146,7 +199,9 @@
|
|
|
146
199
|
}
|
|
147
200
|
|
|
148
201
|
.column {
|
|
149
|
-
flex:
|
|
202
|
+
flex: 1 1 220px;
|
|
203
|
+
min-width: 180px;
|
|
204
|
+
max-width: 320px;
|
|
150
205
|
background: var(--bg-secondary);
|
|
151
206
|
border-radius: 8px;
|
|
152
207
|
display: flex;
|
|
@@ -154,6 +209,10 @@
|
|
|
154
209
|
max-height: calc(100vh - 85px);
|
|
155
210
|
}
|
|
156
211
|
|
|
212
|
+
.column.hidden {
|
|
213
|
+
display: none;
|
|
214
|
+
}
|
|
215
|
+
|
|
157
216
|
.column-header {
|
|
158
217
|
padding: 12px;
|
|
159
218
|
border-bottom: 1px solid var(--border);
|
|
@@ -609,6 +668,26 @@
|
|
|
609
668
|
<option value="30000">30s</option>
|
|
610
669
|
</select>
|
|
611
670
|
</div>
|
|
671
|
+
<div class="filter-group">
|
|
672
|
+
<button class="columns-toggle" id="columnsToggle">Columns</button>
|
|
673
|
+
<div class="columns-dropdown" id="columnsDropdown">
|
|
674
|
+
<label class="column-checkbox">
|
|
675
|
+
<input type="checkbox" value="backlog" checked> Backlog
|
|
676
|
+
</label>
|
|
677
|
+
<label class="column-checkbox">
|
|
678
|
+
<input type="checkbox" value="ready" checked> Ready
|
|
679
|
+
</label>
|
|
680
|
+
<label class="column-checkbox">
|
|
681
|
+
<input type="checkbox" value="in_progress" checked> In Progress
|
|
682
|
+
</label>
|
|
683
|
+
<label class="column-checkbox">
|
|
684
|
+
<input type="checkbox" value="blocked" checked> Blocked
|
|
685
|
+
</label>
|
|
686
|
+
<label class="column-checkbox">
|
|
687
|
+
<input type="checkbox" value="done" checked> Done
|
|
688
|
+
</label>
|
|
689
|
+
</div>
|
|
690
|
+
</div>
|
|
612
691
|
</div>
|
|
613
692
|
<div class="header-right">
|
|
614
693
|
<div class="connection-indicator">
|
|
@@ -720,6 +799,21 @@
|
|
|
720
799
|
const modalBody = document.getElementById('modalBody');
|
|
721
800
|
const hamburgerBtn = document.getElementById('hamburgerBtn');
|
|
722
801
|
const mobileTabs = document.getElementById('mobileTabs');
|
|
802
|
+
const columnsToggle = document.getElementById('columnsToggle');
|
|
803
|
+
const columnsDropdown = document.getElementById('columnsDropdown');
|
|
804
|
+
|
|
805
|
+
// Column visibility
|
|
806
|
+
const COLUMNS = ['backlog', 'ready', 'in_progress', 'blocked', 'done'];
|
|
807
|
+
|
|
808
|
+
function updateColumnVisibility() {
|
|
809
|
+
COLUMNS.forEach(status => {
|
|
810
|
+
const checkbox = columnsDropdown.querySelector(`input[value="${status}"]`);
|
|
811
|
+
const column = document.querySelector(`.column[data-status="${status}"]`);
|
|
812
|
+
if (column && checkbox) {
|
|
813
|
+
column.classList.toggle('hidden', !checkbox.checked);
|
|
814
|
+
}
|
|
815
|
+
});
|
|
816
|
+
}
|
|
723
817
|
|
|
724
818
|
// Load saved preferences
|
|
725
819
|
function loadPreferences() {
|
|
@@ -730,6 +824,12 @@
|
|
|
730
824
|
if (prefs.dateFilter) dateFilter.value = prefs.dateFilter;
|
|
731
825
|
if (prefs.projectFilter) projectFilter.value = prefs.projectFilter;
|
|
732
826
|
if (prefs.refreshFilter) refreshFilter.value = prefs.refreshFilter;
|
|
827
|
+
if (Array.isArray(prefs.columnVisibility)) {
|
|
828
|
+
columnsDropdown.querySelectorAll('input[type="checkbox"]').forEach(cb => {
|
|
829
|
+
cb.checked = prefs.columnVisibility.includes(cb.value);
|
|
830
|
+
});
|
|
831
|
+
updateColumnVisibility();
|
|
832
|
+
}
|
|
733
833
|
} catch (e) {}
|
|
734
834
|
}
|
|
735
835
|
}
|
|
@@ -739,6 +839,9 @@
|
|
|
739
839
|
dateFilter: dateFilter.value,
|
|
740
840
|
projectFilter: projectFilter.value,
|
|
741
841
|
refreshFilter: refreshFilter.value,
|
|
842
|
+
columnVisibility: Array.from(
|
|
843
|
+
columnsDropdown.querySelectorAll('input[type="checkbox"]:checked')
|
|
844
|
+
).map(cb => cb.value),
|
|
742
845
|
};
|
|
743
846
|
localStorage.setItem('hzl-dashboard-prefs', JSON.stringify(prefs));
|
|
744
847
|
}
|
|
@@ -1163,6 +1266,7 @@
|
|
|
1163
1266
|
if (e.key === 'Escape') {
|
|
1164
1267
|
closeModal();
|
|
1165
1268
|
activityPanel.classList.remove('open');
|
|
1269
|
+
columnsDropdown.classList.remove('open');
|
|
1166
1270
|
}
|
|
1167
1271
|
});
|
|
1168
1272
|
|
|
@@ -1195,6 +1299,23 @@
|
|
|
1195
1299
|
filters.style.display = filters.style.display === 'none' ? 'flex' : 'none';
|
|
1196
1300
|
});
|
|
1197
1301
|
|
|
1302
|
+
// Column visibility dropdown
|
|
1303
|
+
columnsToggle.addEventListener('click', (e) => {
|
|
1304
|
+
e.stopPropagation();
|
|
1305
|
+
columnsDropdown.classList.toggle('open');
|
|
1306
|
+
});
|
|
1307
|
+
|
|
1308
|
+
document.addEventListener('click', () => {
|
|
1309
|
+
columnsDropdown.classList.remove('open');
|
|
1310
|
+
});
|
|
1311
|
+
|
|
1312
|
+
columnsDropdown.addEventListener('click', (e) => e.stopPropagation());
|
|
1313
|
+
|
|
1314
|
+
columnsDropdown.addEventListener('change', () => {
|
|
1315
|
+
updateColumnVisibility();
|
|
1316
|
+
savePreferences();
|
|
1317
|
+
});
|
|
1318
|
+
|
|
1198
1319
|
// Initialize
|
|
1199
1320
|
loadPreferences();
|
|
1200
1321
|
startPolling();
|