beads-enhanced-ui 0.1.0 → 0.1.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/CHANGES.md +24 -0
- package/README.md +6 -6
- package/app/main.bundle.js +219 -98
- package/app/main.bundle.js.map +2 -2
- package/app/styles.css +16 -16
- package/package.json +5 -3
- package/server/bd.js +13 -4
- package/server/watcher.js +8 -1
package/CHANGES.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Changes
|
|
2
|
+
|
|
3
|
+
## 0.1.2
|
|
4
|
+
|
|
5
|
+
Released April 15, 2026
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Reduced Dolt workspace lock contention by skipping `bd --sandbox` where it does not help and by coalescing watcher-triggered refreshes during backend file churn.
|
|
10
|
+
|
|
11
|
+
## 0.1.1
|
|
12
|
+
|
|
13
|
+
Released April 02, 2026
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- Refined the Epics experience with a redesigned layout, updated spacing, and clearer title and status alignment across the view.
|
|
18
|
+
- Tightened issue ID rendering across the UI so Beads IDs display consistently in lists, rows, and issue dialogs.
|
|
19
|
+
- Rebranded the fork as `beads-enhanced-ui` and updated package metadata for publishing and installation under the new name.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Fixed Epics sorting, row sizing, and column width regressions that made the page harder to scan.
|
|
24
|
+
- Fixed the issues table ID cell rendering so Beads identifiers stay readable and aligned in the main list view.
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
## Features
|
|
18
18
|
|
|
19
|
-
- ✨ **Zero setup** – just run `bdui start`
|
|
19
|
+
- ✨ **Zero setup** – just run `bdui start --open`
|
|
20
20
|
- 📺 **Live updates** – Monitors the beads database for changes
|
|
21
21
|
- 🔎 **Issues view** – Filter and search issues, edit inline
|
|
22
22
|
- ⛰️ **Epics view** – Show progress per epic, expand rows, edit inline
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
## Setup
|
|
29
29
|
|
|
30
30
|
```sh
|
|
31
|
-
npm
|
|
32
|
-
#
|
|
31
|
+
npm install -g beads-enhanced-ui
|
|
32
|
+
# Run UI in your project directory:
|
|
33
33
|
bdui start --open
|
|
34
34
|
```
|
|
35
35
|
|
|
@@ -39,15 +39,15 @@ See `bdui --help` for options.
|
|
|
39
39
|
|
|
40
40
|
**Issues**
|
|
41
41
|
|
|
42
|
-

|
|
43
43
|
|
|
44
44
|
**Epics**
|
|
45
45
|
|
|
46
|
-

|
|
47
47
|
|
|
48
48
|
**Board**
|
|
49
49
|
|
|
50
|
-

|
|
51
51
|
|
|
52
52
|
## Environment variables
|
|
53
53
|
|
package/app/main.bundle.js
CHANGED
|
@@ -607,10 +607,7 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
607
607
|
>
|
|
608
608
|
${E}
|
|
609
609
|
</td>`:""}
|
|
610
|
-
</tr>`}return h}function yn(s,e,t,n=void 0,r=void 0){let i=[],a="id",l="asc",o="priority",f="asc",u=new Set,h=new Set,d=new Map,m=r?st(r):null;m&&m.subscribe(()=>{let k=i.length===0;if(i=B(),S(),k&&i.length>0){let x=String(D(i)[0]?.epic?.id||"");x&&!u.has(x)&&G(x)}});let y=ms({navigate:k=>t(k),onUpdate:q,requestRender:S,getSelectedId:()=>null,row_class:"epic-row",show_dependencies:!1});function S(){Te(E(),s)}function E(){if(!i.length)return T`<div
|
|
611
|
-
class="panel__header muted"
|
|
612
|
-
data-testid="epics-empty"
|
|
613
|
-
>
|
|
610
|
+
</tr>`}return h}function yn(s,e,t,n=void 0,r=void 0){let i=[],a="id",l="asc",o="priority",f="asc",u=new Set,h=new Set,d=new Map,m=r?st(r):null;m&&m.subscribe(()=>{let k=i.length===0;if(i=B(),S(),k&&i.length>0){let x=String(D(i)[0]?.epic?.id||"");x&&!u.has(x)&&G(x)}});let y=ms({navigate:k=>t(k),onUpdate:q,requestRender:S,getSelectedId:()=>null,row_class:"epic-row",show_dependencies:!1});function S(){Te(E(),s)}function E(){if(!i.length)return T`<div class="panel__header muted" data-testid="epics-empty">
|
|
614
611
|
No epics found.
|
|
615
612
|
</div>`;let k=D(i);return T`
|
|
616
613
|
<div class="epics-table-wrap" data-testid="epics-view">
|
|
@@ -625,16 +622,68 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
625
622
|
</colgroup>
|
|
626
623
|
<thead class="epics-list-header" data-testid="epics-header">
|
|
627
624
|
<tr>
|
|
628
|
-
<th scope="col" data-testid="epics-header-id"
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
<th scope="col" colspan="2"
|
|
625
|
+
<th scope="col" data-testid="epics-header-id">
|
|
626
|
+
${M("id","Id")}
|
|
627
|
+
</th>
|
|
628
|
+
<th scope="col" colspan="2" data-testid="epics-header-name">
|
|
629
|
+
${M("name","Name")}
|
|
630
|
+
</th>
|
|
631
|
+
<th scope="col" data-testid="epics-header-status">
|
|
632
|
+
${M("status","Status")}
|
|
633
|
+
</th>
|
|
634
|
+
<th
|
|
635
|
+
scope="col"
|
|
636
|
+
colspan="2"
|
|
637
|
+
class="epics-list-header__meta"
|
|
638
|
+
data-testid="epics-header-progress"
|
|
639
|
+
>
|
|
640
|
+
Progress
|
|
641
|
+
</th>
|
|
632
642
|
</tr>
|
|
633
643
|
</thead>
|
|
634
644
|
${k.map(x=>N(x))}
|
|
635
645
|
</table>
|
|
636
646
|
</div>
|
|
637
|
-
`}function M(k,x){return Z({column:k,label:x,active_column:a,active_direction:l,data_attribute_name:"data-sort-column",onToggle:()=>H(k)})}function F(k,x){return Z({column:k,label:x,active_column:o,active_direction:f,data_attribute_name:"data-child-sort-column",onToggle:()=>ee(k)})}function Z(k){let{column:x,label:$,active_column:K,active_direction:fe,data_attribute_name:ue,onToggle:se}=k,V=K===x,pe=V&&fe==="asc"?"desc":"asc",we=V?fe==="asc"?T`<svg
|
|
647
|
+
`}function M(k,x){return Z({column:k,label:x,active_column:a,active_direction:l,data_attribute_name:"data-sort-column",onToggle:()=>H(k)})}function F(k,x){return Z({column:k,label:x,active_column:o,active_direction:f,data_attribute_name:"data-child-sort-column",onToggle:()=>ee(k)})}function Z(k){let{column:x,label:$,active_column:K,active_direction:fe,data_attribute_name:ue,onToggle:se}=k,V=K===x,pe=V&&fe==="asc"?"desc":"asc",we=V?fe==="asc"?T`<svg
|
|
648
|
+
width="11"
|
|
649
|
+
height="11"
|
|
650
|
+
viewBox="0 0 24 24"
|
|
651
|
+
fill="none"
|
|
652
|
+
stroke="currentColor"
|
|
653
|
+
stroke-width="2.5"
|
|
654
|
+
stroke-linecap="round"
|
|
655
|
+
stroke-linejoin="round"
|
|
656
|
+
aria-hidden="true"
|
|
657
|
+
>
|
|
658
|
+
<path d="M12 19V5" />
|
|
659
|
+
<path d="M5 12l7-7 7 7" />
|
|
660
|
+
</svg>`:T`<svg
|
|
661
|
+
width="11"
|
|
662
|
+
height="11"
|
|
663
|
+
viewBox="0 0 24 24"
|
|
664
|
+
fill="none"
|
|
665
|
+
stroke="currentColor"
|
|
666
|
+
stroke-width="2.5"
|
|
667
|
+
stroke-linecap="round"
|
|
668
|
+
stroke-linejoin="round"
|
|
669
|
+
aria-hidden="true"
|
|
670
|
+
>
|
|
671
|
+
<path d="M12 5v14" />
|
|
672
|
+
<path d="M19 12l-7 7-7-7" />
|
|
673
|
+
</svg>`:T`<svg
|
|
674
|
+
width="11"
|
|
675
|
+
height="11"
|
|
676
|
+
viewBox="0 0 24 24"
|
|
677
|
+
fill="none"
|
|
678
|
+
stroke="currentColor"
|
|
679
|
+
stroke-width="2.5"
|
|
680
|
+
stroke-linecap="round"
|
|
681
|
+
stroke-linejoin="round"
|
|
682
|
+
aria-hidden="true"
|
|
683
|
+
>
|
|
684
|
+
<path d="M7 15l5 5 5-5" />
|
|
685
|
+
<path d="M7 9l5-5 5 5" />
|
|
686
|
+
</svg>`;return T`
|
|
638
687
|
<button
|
|
639
688
|
type="button"
|
|
640
689
|
class="epics-sort-button ${V?"is-active":""}"
|
|
@@ -674,7 +723,35 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
674
723
|
data-testid=${`epic-header-name-${$}`}
|
|
675
724
|
>
|
|
676
725
|
<span class="epic-header-name">
|
|
677
|
-
${K?T`<svg
|
|
726
|
+
${K?T`<svg
|
|
727
|
+
class="epic-chevron"
|
|
728
|
+
width="14"
|
|
729
|
+
height="14"
|
|
730
|
+
viewBox="0 0 24 24"
|
|
731
|
+
fill="none"
|
|
732
|
+
stroke="currentColor"
|
|
733
|
+
stroke-width="2.5"
|
|
734
|
+
stroke-linecap="round"
|
|
735
|
+
stroke-linejoin="round"
|
|
736
|
+
aria-hidden="true"
|
|
737
|
+
data-testid=${`epic-header-chevron-${$}`}
|
|
738
|
+
>
|
|
739
|
+
<polyline points="6 9 12 15 18 9"></polyline>
|
|
740
|
+
</svg>`:T`<svg
|
|
741
|
+
class="epic-chevron"
|
|
742
|
+
width="14"
|
|
743
|
+
height="14"
|
|
744
|
+
viewBox="0 0 24 24"
|
|
745
|
+
fill="none"
|
|
746
|
+
stroke="currentColor"
|
|
747
|
+
stroke-width="2.5"
|
|
748
|
+
stroke-linecap="round"
|
|
749
|
+
stroke-linejoin="round"
|
|
750
|
+
aria-hidden="true"
|
|
751
|
+
data-testid=${`epic-header-chevron-${$}`}
|
|
752
|
+
>
|
|
753
|
+
<polyline points="9 18 15 12 9 6"></polyline>
|
|
754
|
+
</svg>`}
|
|
678
755
|
<span
|
|
679
756
|
class="text-truncate"
|
|
680
757
|
data-testid=${`epic-header-title-${$}`}
|
|
@@ -697,10 +774,7 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
697
774
|
colspan="2"
|
|
698
775
|
data-testid=${`epic-header-progress-${$}`}
|
|
699
776
|
>
|
|
700
|
-
<span
|
|
701
|
-
class="epic-progress"
|
|
702
|
-
data-testid=${`epic-progress-${$}`}
|
|
703
|
-
>
|
|
777
|
+
<span class="epic-progress" data-testid=${`epic-progress-${$}`}>
|
|
704
778
|
<progress
|
|
705
779
|
value=${Number(k.closed_children||0)}
|
|
706
780
|
max=${Math.max(1,Number(k.total_children||0))}
|
|
@@ -729,20 +803,52 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
729
803
|
>
|
|
730
804
|
<colgroup>
|
|
731
805
|
<col class="epics-table__col epics-table__col--id" />
|
|
732
|
-
<col
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
<col
|
|
736
|
-
|
|
806
|
+
<col
|
|
807
|
+
class="epics-table__col epics-table__col--type"
|
|
808
|
+
/>
|
|
809
|
+
<col
|
|
810
|
+
class="epics-table__col epics-table__col--title"
|
|
811
|
+
/>
|
|
812
|
+
<col
|
|
813
|
+
class="epics-table__col epics-table__col--status"
|
|
814
|
+
/>
|
|
815
|
+
<col
|
|
816
|
+
class="epics-table__col epics-table__col--assignee"
|
|
817
|
+
/>
|
|
818
|
+
<col
|
|
819
|
+
class="epics-table__col epics-table__col--priority"
|
|
820
|
+
/>
|
|
737
821
|
</colgroup>
|
|
738
822
|
<thead data-testid=${`epic-children-header-${$}`}>
|
|
739
823
|
<tr>
|
|
740
|
-
<th data-testid=${`epic-children-header-id-${$}`}
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
<th
|
|
744
|
-
|
|
745
|
-
|
|
824
|
+
<th data-testid=${`epic-children-header-id-${$}`}>
|
|
825
|
+
${F("id","ID")}
|
|
826
|
+
</th>
|
|
827
|
+
<th
|
|
828
|
+
data-testid=${`epic-children-header-type-${$}`}
|
|
829
|
+
>
|
|
830
|
+
${F("type","Type")}
|
|
831
|
+
</th>
|
|
832
|
+
<th
|
|
833
|
+
data-testid=${`epic-children-header-title-${$}`}
|
|
834
|
+
>
|
|
835
|
+
${F("title","Title")}
|
|
836
|
+
</th>
|
|
837
|
+
<th
|
|
838
|
+
data-testid=${`epic-children-header-status-${$}`}
|
|
839
|
+
>
|
|
840
|
+
${F("status","Status")}
|
|
841
|
+
</th>
|
|
842
|
+
<th
|
|
843
|
+
data-testid=${`epic-children-header-assignee-${$}`}
|
|
844
|
+
>
|
|
845
|
+
${F("assignee","Assignee")}
|
|
846
|
+
</th>
|
|
847
|
+
<th
|
|
848
|
+
data-testid=${`epic-children-header-priority-${$}`}
|
|
849
|
+
>
|
|
850
|
+
${F("priority","Priority")}
|
|
851
|
+
</th>
|
|
746
852
|
</tr>
|
|
747
853
|
</thead>
|
|
748
854
|
<tbody data-testid=${`epic-children-rows-${$}`}>
|
|
@@ -778,71 +884,77 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
778
884
|
`,s.appendChild(n);let r=n.querySelector("#issue-dialog-body"),i=n.querySelector("#issue-dialog-title"),a=n.querySelector(".issue-dialog__close");a?.setAttribute("data-testid","issue-dialog-close"),i?.setAttribute("data-testid","issue-dialog-title");function l(m){i.replaceChildren(),i.appendChild(nt(m))}n.addEventListener("mousedown",m=>{m.target===n&&(m.preventDefault(),f())}),n.addEventListener("cancel",m=>{m.preventDefault(),f()}),a.addEventListener("click",()=>f());let o=null;function f(){try{typeof n.close=="function"?n.close():n.removeAttribute("open")}catch{n.removeAttribute("open")}try{t()}catch{}d()}function u(m){try{let y=document.activeElement;y&&y instanceof HTMLElement?o=y:o=null}catch{o=null}l(m);try{"showModal"in n&&typeof n.showModal=="function"?n.showModal():n.setAttribute("open",""),setTimeout(()=>{try{a.focus()}catch{}},0)}catch{n.setAttribute("open","")}}function h(){try{typeof n.close=="function"?n.close():n.removeAttribute("open")}catch{n.removeAttribute("open")}d()}function d(){try{o&&document.contains(o)&&o.focus()}catch{}finally{o=null}}return{open:u,close:h,getMount(){return r}}}var bs=["bug","feature","task","epic","chore"];function Vt(s){switch((s||"").toString().toLowerCase()){case"bug":return"Bug";case"feature":return"Feature";case"task":return"Task";case"epic":return"Epic";case"chore":return"Chore";default:return""}}function _n(s,e,t,n,r=void 0,i=void 0){let a=de("views:list"),l=[],o="",f=[],u=[],h=n?n.getState().selected_id:null,d=null,m=!1,y=!1;function S(w){return Array.isArray(w)?w:typeof w=="string"&&w!==""&&w!=="all"?[w]:[]}function E(w){return Array.isArray(w)?w:typeof w=="string"&&w!==""?[w]:[]}let M=ms({navigate:w=>{let b=t||(O=>window.location.hash=O),v=n?n.getState().view:"issues";b(rt(v,w))},onUpdate:re,requestRender:W,getSelectedId:()=>h,row_class:"issue-row"}),F=async w=>{l.includes(w)?l=l.filter(b=>b!==w):l=[...l,w],a("status toggle %s -> %o",w,l),n&&n.setState({filters:{status:l}}),await le()},Z=w=>{o=w.currentTarget.value,a("search input %s",o),n&&n.setState({filters:{search:o}}),W()},N=w=>{u.includes(w)?u=u.filter(b=>b!==w):u=[...u,w],a("type toggle %s -> %o",w,u),n&&n.setState({filters:{type:u}}),W()},z=w=>{w.stopPropagation(),m=!m,y=!1,W()},H=w=>{w.stopPropagation(),y=!y,m=!1,W()};function ee(w,b,v){return w.length===0?`${b}: Any`:w.length===1?`${b}: ${v(w[0])}`:`${b} (${w.length})`}if(n){let w=n.getState();w&&w.filters&&typeof w.filters=="object"&&(l=S(w.filters.status),o=w.filters.search||"",u=E(w.filters.type))}let D=i?st(i):null;function X(){let w=f;if(l.length>0&&!l.includes("ready")&&(w=w.filter(b=>l.includes(String(b.status||"")))),o){let b=o.toLowerCase();w=w.filter(v=>{let O=String(v.id).toLowerCase(),L=String(v.title||"").toLowerCase();return O.includes(b)||L.includes(b)})}return u.length>0&&(w=w.filter(b=>u.includes(String(b.issue_type||"")))),l.length===1&&l[0]==="closed"&&(w=w.slice().sort(vt)),T`
|
|
779
885
|
<div class="panel__header" data-testid="list-view">
|
|
780
886
|
<div class="list-filters" data-testid="list-filters">
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
>
|
|
785
|
-
<button
|
|
786
|
-
class="filter-dropdown__trigger"
|
|
787
|
-
@click=${z}
|
|
788
|
-
data-testid="list-filter-status-trigger"
|
|
887
|
+
<div
|
|
888
|
+
class="filter-dropdown ${m?"is-open":""}"
|
|
889
|
+
data-testid="list-filter-status"
|
|
789
890
|
>
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
891
|
+
<button
|
|
892
|
+
class="filter-dropdown__trigger"
|
|
893
|
+
@click=${z}
|
|
894
|
+
data-testid="list-filter-status-trigger"
|
|
895
|
+
>
|
|
896
|
+
${ee(l,"Status",Je)}
|
|
897
|
+
<span class="filter-dropdown__arrow">▾</span>
|
|
898
|
+
</button>
|
|
899
|
+
<div
|
|
900
|
+
class="filter-dropdown__menu"
|
|
901
|
+
data-testid="list-filter-status-menu"
|
|
902
|
+
>
|
|
903
|
+
${["ready","open","in_progress","closed"].map(b=>T`
|
|
904
|
+
<label
|
|
905
|
+
class="filter-dropdown__option"
|
|
906
|
+
data-testid=${`list-filter-status-option-${b}`}
|
|
907
|
+
>
|
|
908
|
+
<input
|
|
909
|
+
type="checkbox"
|
|
910
|
+
.checked=${l.includes(b)}
|
|
911
|
+
@change=${()=>F(b)}
|
|
912
|
+
data-testid=${`list-filter-status-checkbox-${b}`}
|
|
913
|
+
/>
|
|
914
|
+
${b==="ready"?"Ready":Je(b)}
|
|
915
|
+
</label>
|
|
916
|
+
`)}
|
|
917
|
+
</div>
|
|
808
918
|
</div>
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
data-testid="list-filter-type"
|
|
813
|
-
>
|
|
814
|
-
<button
|
|
815
|
-
class="filter-dropdown__trigger"
|
|
816
|
-
@click=${H}
|
|
817
|
-
data-testid="list-filter-type-trigger"
|
|
919
|
+
<div
|
|
920
|
+
class="filter-dropdown ${y?"is-open":""}"
|
|
921
|
+
data-testid="list-filter-type"
|
|
818
922
|
>
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
923
|
+
<button
|
|
924
|
+
class="filter-dropdown__trigger"
|
|
925
|
+
@click=${H}
|
|
926
|
+
data-testid="list-filter-type-trigger"
|
|
927
|
+
>
|
|
928
|
+
${ee(u,"Types",Vt)}
|
|
929
|
+
<span class="filter-dropdown__arrow">▾</span>
|
|
930
|
+
</button>
|
|
931
|
+
<div
|
|
932
|
+
class="filter-dropdown__menu"
|
|
933
|
+
data-testid="list-filter-type-menu"
|
|
934
|
+
>
|
|
935
|
+
${bs.map(b=>T`
|
|
936
|
+
<label
|
|
937
|
+
class="filter-dropdown__option"
|
|
938
|
+
data-testid=${`list-filter-type-option-${b}`}
|
|
939
|
+
>
|
|
940
|
+
<input
|
|
941
|
+
type="checkbox"
|
|
942
|
+
.checked=${u.includes(b)}
|
|
943
|
+
@change=${()=>N(b)}
|
|
944
|
+
data-testid=${`list-filter-type-checkbox-${b}`}
|
|
945
|
+
/>
|
|
946
|
+
${Vt(b)}
|
|
947
|
+
</label>
|
|
948
|
+
`)}
|
|
949
|
+
</div>
|
|
837
950
|
</div>
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
/>
|
|
951
|
+
<input
|
|
952
|
+
type="search"
|
|
953
|
+
placeholder="Search…"
|
|
954
|
+
@input=${Z}
|
|
955
|
+
.value=${o}
|
|
956
|
+
data-testid="list-search-input"
|
|
957
|
+
/>
|
|
846
958
|
</div>
|
|
847
959
|
</div>
|
|
848
960
|
<div class="panel__body" id="list-root" data-testid="list-body">
|
|
@@ -877,12 +989,24 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
877
989
|
<thead data-testid="list-header">
|
|
878
990
|
<tr role="row">
|
|
879
991
|
<th role="columnheader" data-testid="list-header-id">ID</th>
|
|
880
|
-
<th role="columnheader" data-testid="list-header-type">
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
<th role="columnheader" data-testid="list-header-
|
|
884
|
-
|
|
885
|
-
|
|
992
|
+
<th role="columnheader" data-testid="list-header-type">
|
|
993
|
+
Type
|
|
994
|
+
</th>
|
|
995
|
+
<th role="columnheader" data-testid="list-header-title">
|
|
996
|
+
Title
|
|
997
|
+
</th>
|
|
998
|
+
<th role="columnheader" data-testid="list-header-status">
|
|
999
|
+
Status
|
|
1000
|
+
</th>
|
|
1001
|
+
<th role="columnheader" data-testid="list-header-assignee">
|
|
1002
|
+
Assignee
|
|
1003
|
+
</th>
|
|
1004
|
+
<th role="columnheader" data-testid="list-header-priority">
|
|
1005
|
+
Priority
|
|
1006
|
+
</th>
|
|
1007
|
+
<th role="columnheader" data-testid="list-header-deps">
|
|
1008
|
+
Deps
|
|
1009
|
+
</th>
|
|
886
1010
|
</tr>
|
|
887
1011
|
</thead>
|
|
888
1012
|
<tbody role="rowgroup" data-testid="list-rows">
|
|
@@ -892,11 +1016,7 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
892
1016
|
</div>`}
|
|
893
1017
|
</div>
|
|
894
1018
|
`}function W(){Te(X(),s)}W();async function re(w,b){try{a("updateInline %s %o",w,Object.keys(b)),typeof b.title=="string"&&await e("edit-text",{id:w,field:"title",value:b.title}),typeof b.assignee=="string"&&await e("update-assignee",{id:w,assignee:b.assignee}),typeof b.status=="string"&&await e("update-status",{id:w,status:b.status}),typeof b.priority=="number"&&await e("update-priority",{id:w,priority:b.priority})}catch{}}async function le(){a("load");let w=s.querySelector("#list-root"),b=w?w.scrollTop:0;try{D?f=D.selectIssuesFor("tab:issues"):f=[]}catch(v){a("load failed: %o",v),f=[]}W();try{let v=s.querySelector("#list-root");v&&b>0&&(v.scrollTop=b)}catch{}}s.tabIndex=0,s.addEventListener("keydown",w=>{if(w.key==="ArrowDown"||w.key==="ArrowUp"){let L=w.target;if((L&&typeof L.closest=="function"?L.closest("#list-root table.table"):null)&&!!!(L&&typeof L.closest=="function"&&(L.closest("input")||L.closest("textarea")||L.closest("select")))){let B=L&&typeof L.closest=="function"?L.closest("td"):null;if(B&&B.parentElement){let k=B.parentElement,x=k.parentElement;if(x&&x.querySelectorAll){let $=Array.from(x.querySelectorAll("tr")),K=Math.max(0,$.indexOf(k)),fe=B.cellIndex||0,ue=w.key==="ArrowDown"?Math.min(K+1,$.length-1):Math.max(K-1,0),se=$[ue],V=se&&se.cells?se.cells[fe]:null;if(V){let pe=V.querySelector('button:not([disabled]), [tabindex]:not([tabindex="-1"]), a[href], select:not([disabled]), input:not([disabled]):not([type="hidden"]), textarea:not([disabled])');if(pe&&typeof pe.focus=="function"){w.preventDefault(),pe.focus();return}}}}}}let b=s.querySelector("#list-root tbody"),v=b?b.querySelectorAll("tr"):[];if(v.length===0)return;let O=0;if(h&&(O=Array.from(v).findIndex(q=>(q.getAttribute("data-issue-id")||"")===h),O<0&&(O=0)),w.key==="ArrowDown"){w.preventDefault();let L=v[Math.min(O+1,v.length-1)],q=L?L.getAttribute("data-issue-id"):"",G=q||null;n&&G&&n.setState({selected_id:G}),h=G,W()}else if(w.key==="ArrowUp"){w.preventDefault();let L=v[Math.max(O-1,0)],q=L?L.getAttribute("data-issue-id"):"",G=q||null;n&&G&&n.setState({selected_id:G}),h=G,W()}else if(w.key==="Enter"){w.preventDefault();let L=v[O],q=L?L.getAttribute("data-issue-id"):"";if(q){let G=t||(k=>window.location.hash=k),B=n?n.getState().view:"issues";G(rt(B,q))}}});let ye=w=>{let b=w.target;b&&!b.closest(".filter-dropdown")&&(m||y)&&(m=!1,y=!1,W())};return document.addEventListener("click",ye),n&&(d=n.subscribe(w=>{if(w.selected_id!==h&&(h=w.selected_id,a("selected %s",h||"(none)"),W()),w.filters&&typeof w.filters=="object"){let b=S(w.filters.status),v=w.filters.search||"",O=!1;if(JSON.stringify(b)!==JSON.stringify(l)){l=b,le();return}v!==o&&(o=v,O=!0);let q=E(w.filters.type);JSON.stringify(q)!==JSON.stringify(u)&&(u=q,O=!0),O&&W()}})),D&&D.subscribe(()=>{try{f=D.selectIssuesFor("tab:issues"),W()}catch{}}),{load:le,destroy(){s.replaceChildren(),document.removeEventListener("click",ye),d&&(d(),d=null)}}}function vn(s,e,t){let n=de("views:nav"),r=null;function i(o){return f=>{f.preventDefault(),n("click tab %s",o),t.gotoView(o)}}function a(){let f=e.getState().view||"issues";return T`
|
|
895
|
-
<nav
|
|
896
|
-
class="header-nav"
|
|
897
|
-
aria-label="Primary"
|
|
898
|
-
data-testid="top-nav"
|
|
899
|
-
>
|
|
1019
|
+
<nav class="header-nav" aria-label="Primary" data-testid="top-nav">
|
|
900
1020
|
<a
|
|
901
1021
|
href="#/issues"
|
|
902
1022
|
class="tab ${f==="issues"?"active":""}"
|
|
@@ -960,7 +1080,8 @@ Please report this to https://github.com/markedjs/marked.`,s){let n="<p>An error
|
|
|
960
1080
|
class="workspace-picker__label"
|
|
961
1081
|
title="${h[0].path}"
|
|
962
1082
|
data-testid="workspace-picker-label"
|
|
963
|
-
|
|
1083
|
+
>${m}</span
|
|
1084
|
+
>
|
|
964
1085
|
</div>
|
|
965
1086
|
`}let d=u?.path||"";return T`
|
|
966
1087
|
<div class="workspace-picker" data-testid="workspace-picker">
|