@industry-theme/backlogmd-kanban-panel 1.0.21 → 1.0.23

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.
@@ -3741,88 +3741,77 @@ const createLucideIcon = (iconName, iconNode) => {
3741
3741
  * See the LICENSE file in the root directory of this source tree.
3742
3742
  */
3743
3743
  const __iconNode$o = [
3744
- ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
3745
- ["path", { d: "M19 12H5", key: "x3x0zl" }]
3746
- ];
3747
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$o);
3748
- /**
3749
- * @license lucide-react v0.552.0 - ISC
3750
- *
3751
- * This source code is licensed under the ISC license.
3752
- * See the LICENSE file in the root directory of this source tree.
3753
- */
3754
- const __iconNode$n = [
3755
3744
  ["path", { d: "M8 2v4", key: "1cmpym" }],
3756
3745
  ["path", { d: "M16 2v4", key: "4m81vk" }],
3757
3746
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
3758
3747
  ["path", { d: "M3 10h18", key: "8toen8" }]
3759
3748
  ];
3760
- const Calendar = createLucideIcon("calendar", __iconNode$n);
3749
+ const Calendar = createLucideIcon("calendar", __iconNode$o);
3761
3750
  /**
3762
3751
  * @license lucide-react v0.552.0 - ISC
3763
3752
  *
3764
3753
  * This source code is licensed under the ISC license.
3765
3754
  * See the LICENSE file in the root directory of this source tree.
3766
3755
  */
3767
- const __iconNode$m = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
3768
- const Check = createLucideIcon("check", __iconNode$m);
3756
+ const __iconNode$n = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
3757
+ const Check = createLucideIcon("check", __iconNode$n);
3769
3758
  /**
3770
3759
  * @license lucide-react v0.552.0 - ISC
3771
3760
  *
3772
3761
  * This source code is licensed under the ISC license.
3773
3762
  * See the LICENSE file in the root directory of this source tree.
3774
3763
  */
3775
- const __iconNode$l = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
3776
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$l);
3764
+ const __iconNode$m = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
3765
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$m);
3777
3766
  /**
3778
3767
  * @license lucide-react v0.552.0 - ISC
3779
3768
  *
3780
3769
  * This source code is licensed under the ISC license.
3781
3770
  * See the LICENSE file in the root directory of this source tree.
3782
3771
  */
3783
- const __iconNode$k = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
3784
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$k);
3772
+ const __iconNode$l = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
3773
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$l);
3785
3774
  /**
3786
3775
  * @license lucide-react v0.552.0 - ISC
3787
3776
  *
3788
3777
  * This source code is licensed under the ISC license.
3789
3778
  * See the LICENSE file in the root directory of this source tree.
3790
3779
  */
3791
- const __iconNode$j = [
3780
+ const __iconNode$k = [
3792
3781
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
3793
3782
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
3794
3783
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
3795
3784
  ];
3796
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$j);
3785
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$k);
3797
3786
  /**
3798
3787
  * @license lucide-react v0.552.0 - ISC
3799
3788
  *
3800
3789
  * This source code is licensed under the ISC license.
3801
3790
  * See the LICENSE file in the root directory of this source tree.
3802
3791
  */
3803
- const __iconNode$i = [
3792
+ const __iconNode$j = [
3804
3793
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
3805
3794
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
3806
3795
  ];
3807
- const CircleCheck = createLucideIcon("circle-check", __iconNode$i);
3796
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$j);
3808
3797
  /**
3809
3798
  * @license lucide-react v0.552.0 - ISC
3810
3799
  *
3811
3800
  * This source code is licensed under the ISC license.
3812
3801
  * See the LICENSE file in the root directory of this source tree.
3813
3802
  */
3814
- const __iconNode$h = [
3803
+ const __iconNode$i = [
3815
3804
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
3816
3805
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
3817
3806
  ];
3818
- const Copy = createLucideIcon("copy", __iconNode$h);
3807
+ const Copy = createLucideIcon("copy", __iconNode$i);
3819
3808
  /**
3820
3809
  * @license lucide-react v0.552.0 - ISC
3821
3810
  *
3822
3811
  * This source code is licensed under the ISC license.
3823
3812
  * See the LICENSE file in the root directory of this source tree.
3824
3813
  */
3825
- const __iconNode$g = [
3814
+ const __iconNode$h = [
3826
3815
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
3827
3816
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
3828
3817
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -3832,26 +3821,26 @@ const __iconNode$g = [
3832
3821
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
3833
3822
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
3834
3823
  ];
3835
- const Expand = createLucideIcon("expand", __iconNode$g);
3824
+ const Expand = createLucideIcon("expand", __iconNode$h);
3836
3825
  /**
3837
3826
  * @license lucide-react v0.552.0 - ISC
3838
3827
  *
3839
3828
  * This source code is licensed under the ISC license.
3840
3829
  * See the LICENSE file in the root directory of this source tree.
3841
3830
  */
3842
- const __iconNode$f = [
3831
+ const __iconNode$g = [
3843
3832
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
3844
3833
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
3845
3834
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
3846
3835
  ];
3847
- const ExternalLink = createLucideIcon("external-link", __iconNode$f);
3836
+ const ExternalLink = createLucideIcon("external-link", __iconNode$g);
3848
3837
  /**
3849
3838
  * @license lucide-react v0.552.0 - ISC
3850
3839
  *
3851
3840
  * This source code is licensed under the ISC license.
3852
3841
  * See the LICENSE file in the root directory of this source tree.
3853
3842
  */
3854
- const __iconNode$e = [
3843
+ const __iconNode$f = [
3855
3844
  [
3856
3845
  "path",
3857
3846
  {
@@ -3864,14 +3853,14 @@ const __iconNode$e = [
3864
3853
  ["path", { d: "M16 13H8", key: "t4e002" }],
3865
3854
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
3866
3855
  ];
3867
- const FileText = createLucideIcon("file-text", __iconNode$e);
3856
+ const FileText = createLucideIcon("file-text", __iconNode$f);
3868
3857
  /**
3869
3858
  * @license lucide-react v0.552.0 - ISC
3870
3859
  *
3871
3860
  * This source code is licensed under the ISC license.
3872
3861
  * See the LICENSE file in the root directory of this source tree.
3873
3862
  */
3874
- const __iconNode$d = [
3863
+ const __iconNode$e = [
3875
3864
  [
3876
3865
  "path",
3877
3866
  {
@@ -3880,14 +3869,14 @@ const __iconNode$d = [
3880
3869
  }
3881
3870
  ]
3882
3871
  ];
3883
- const Flag = createLucideIcon("flag", __iconNode$d);
3872
+ const Flag = createLucideIcon("flag", __iconNode$e);
3884
3873
  /**
3885
3874
  * @license lucide-react v0.552.0 - ISC
3886
3875
  *
3887
3876
  * This source code is licensed under the ISC license.
3888
3877
  * See the LICENSE file in the root directory of this source tree.
3889
3878
  */
3890
- const __iconNode$c = [
3879
+ const __iconNode$d = [
3891
3880
  ["path", { d: "M12 10v6", key: "1bos4e" }],
3892
3881
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
3893
3882
  [
@@ -3898,47 +3887,47 @@ const __iconNode$c = [
3898
3887
  }
3899
3888
  ]
3900
3889
  ];
3901
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$c);
3890
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$d);
3902
3891
  /**
3903
3892
  * @license lucide-react v0.552.0 - ISC
3904
3893
  *
3905
3894
  * This source code is licensed under the ISC license.
3906
3895
  * See the LICENSE file in the root directory of this source tree.
3907
3896
  */
3908
- const __iconNode$b = [
3897
+ const __iconNode$c = [
3909
3898
  ["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
3910
3899
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
3911
3900
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
3912
3901
  ["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
3913
3902
  ];
3914
- const GitBranch = createLucideIcon("git-branch", __iconNode$b);
3903
+ const GitBranch = createLucideIcon("git-branch", __iconNode$c);
3915
3904
  /**
3916
3905
  * @license lucide-react v0.552.0 - ISC
3917
3906
  *
3918
3907
  * This source code is licensed under the ISC license.
3919
3908
  * See the LICENSE file in the root directory of this source tree.
3920
3909
  */
3921
- const __iconNode$a = [
3910
+ const __iconNode$b = [
3922
3911
  ["path", { d: "M5 3v14", key: "9nsxs2" }],
3923
3912
  ["path", { d: "M12 3v8", key: "1h2ygw" }],
3924
3913
  ["path", { d: "M19 3v18", key: "1sk56x" }]
3925
3914
  ];
3926
- const Kanban = createLucideIcon("kanban", __iconNode$a);
3915
+ const Kanban = createLucideIcon("kanban", __iconNode$b);
3927
3916
  /**
3928
3917
  * @license lucide-react v0.552.0 - ISC
3929
3918
  *
3930
3919
  * This source code is licensed under the ISC license.
3931
3920
  * See the LICENSE file in the root directory of this source tree.
3932
3921
  */
3933
- const __iconNode$9 = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
3934
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$9);
3922
+ const __iconNode$a = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
3923
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$a);
3935
3924
  /**
3936
3925
  * @license lucide-react v0.552.0 - ISC
3937
3926
  *
3938
3927
  * This source code is licensed under the ISC license.
3939
3928
  * See the LICENSE file in the root directory of this source tree.
3940
3929
  */
3941
- const __iconNode$8 = [
3930
+ const __iconNode$9 = [
3942
3931
  ["path", { d: "M12 13v8", key: "1l5pq0" }],
3943
3932
  ["path", { d: "M12 3v3", key: "1n5kay" }],
3944
3933
  [
@@ -3949,37 +3938,37 @@ const __iconNode$8 = [
3949
3938
  }
3950
3939
  ]
3951
3940
  ];
3952
- const Milestone = createLucideIcon("milestone", __iconNode$8);
3941
+ const Milestone = createLucideIcon("milestone", __iconNode$9);
3953
3942
  /**
3954
3943
  * @license lucide-react v0.552.0 - ISC
3955
3944
  *
3956
3945
  * This source code is licensed under the ISC license.
3957
3946
  * See the LICENSE file in the root directory of this source tree.
3958
3947
  */
3959
- const __iconNode$7 = [
3948
+ const __iconNode$8 = [
3960
3949
  ["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
3961
3950
  ["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
3962
3951
  ["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
3963
3952
  ];
3964
- const Monitor = createLucideIcon("monitor", __iconNode$7);
3953
+ const Monitor = createLucideIcon("monitor", __iconNode$8);
3965
3954
  /**
3966
3955
  * @license lucide-react v0.552.0 - ISC
3967
3956
  *
3968
3957
  * This source code is licensed under the ISC license.
3969
3958
  * See the LICENSE file in the root directory of this source tree.
3970
3959
  */
3971
- const __iconNode$6 = [
3960
+ const __iconNode$7 = [
3972
3961
  ["path", { d: "M18 8L22 12L18 16", key: "1r0oui" }],
3973
3962
  ["path", { d: "M2 12H22", key: "1m8cig" }]
3974
3963
  ];
3975
- const MoveRight = createLucideIcon("move-right", __iconNode$6);
3964
+ const MoveRight = createLucideIcon("move-right", __iconNode$7);
3976
3965
  /**
3977
3966
  * @license lucide-react v0.552.0 - ISC
3978
3967
  *
3979
3968
  * This source code is licensed under the ISC license.
3980
3969
  * See the LICENSE file in the root directory of this source tree.
3981
3970
  */
3982
- const __iconNode$5 = [
3971
+ const __iconNode$6 = [
3983
3972
  [
3984
3973
  "path",
3985
3974
  {
@@ -3988,31 +3977,42 @@ const __iconNode$5 = [
3988
3977
  }
3989
3978
  ]
3990
3979
  ];
3991
- const Play = createLucideIcon("play", __iconNode$5);
3980
+ const Play = createLucideIcon("play", __iconNode$6);
3992
3981
  /**
3993
3982
  * @license lucide-react v0.552.0 - ISC
3994
3983
  *
3995
3984
  * This source code is licensed under the ISC license.
3996
3985
  * See the LICENSE file in the root directory of this source tree.
3997
3986
  */
3998
- const __iconNode$4 = [
3987
+ const __iconNode$5 = [
3999
3988
  ["path", { d: "M5 12h14", key: "1ays0h" }],
4000
3989
  ["path", { d: "M12 5v14", key: "s699le" }]
4001
3990
  ];
4002
- const Plus = createLucideIcon("plus", __iconNode$4);
3991
+ const Plus = createLucideIcon("plus", __iconNode$5);
4003
3992
  /**
4004
3993
  * @license lucide-react v0.552.0 - ISC
4005
3994
  *
4006
3995
  * This source code is licensed under the ISC license.
4007
3996
  * See the LICENSE file in the root directory of this source tree.
4008
3997
  */
4009
- const __iconNode$3 = [
3998
+ const __iconNode$4 = [
4010
3999
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
4011
4000
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
4012
4001
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
4013
4002
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
4014
4003
  ];
4015
- const RefreshCw = createLucideIcon("refresh-cw", __iconNode$3);
4004
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$4);
4005
+ /**
4006
+ * @license lucide-react v0.552.0 - ISC
4007
+ *
4008
+ * This source code is licensed under the ISC license.
4009
+ * See the LICENSE file in the root directory of this source tree.
4010
+ */
4011
+ const __iconNode$3 = [
4012
+ ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
4013
+ ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
4014
+ ];
4015
+ const Search = createLucideIcon("search", __iconNode$3);
4016
4016
  /**
4017
4017
  * @license lucide-react v0.552.0 - ISC
4018
4018
  *
@@ -5866,35 +5866,32 @@ class PanelFileSystemAdapter {
5866
5866
  const STATUS_DISPLAY_LABELS = {
5867
5867
  "todo": "To Do",
5868
5868
  "in-progress": "In Progress",
5869
- "completed": "Completed"
5869
+ "done": "Done"
5870
5870
  };
5871
5871
  const COLUMN_TO_STATUS = {
5872
5872
  "todo": "To Do",
5873
5873
  "in-progress": "In Progress",
5874
- "completed": "Done"
5874
+ "done": "Done"
5875
5875
  };
5876
- const DEFAULT_SOURCES = ["tasks", "completed"];
5877
5876
  const DEFAULT_TASKS_LIMIT = 20;
5878
- const DEFAULT_COMPLETED_LIMIT = 5;
5879
5877
  function useKanbanData(options) {
5880
5878
  const {
5881
5879
  context,
5882
5880
  actions,
5883
- tasksLimit = DEFAULT_TASKS_LIMIT,
5884
- completedLimit = DEFAULT_COMPLETED_LIMIT
5881
+ tasksLimit = DEFAULT_TASKS_LIMIT
5885
5882
  } = options || {};
5886
5883
  const [tasks, setTasks] = useState([]);
5887
- const [sources] = useState(DEFAULT_SOURCES);
5888
5884
  const [isLoading, setIsLoading] = useState(true);
5889
5885
  const [error, setError] = useState(null);
5890
5886
  const [isBacklogProject, setIsBacklogProject] = useState(false);
5891
5887
  const [canWrite, setCanWrite] = useState(false);
5892
- const [tasksBySource, setTasksBySource] = useState(
5893
- /* @__PURE__ */ new Map()
5894
- );
5895
5888
  const [columnStates, setColumnStates] = useState(
5896
5889
  /* @__PURE__ */ new Map()
5897
5890
  );
5891
+ const [totalLoaded, setTotalLoaded] = useState(0);
5892
+ const [totalCount, setTotalCount] = useState(0);
5893
+ const [hasMore, setHasMore] = useState(false);
5894
+ const [isLoadingMore, setIsLoadingMore] = useState(false);
5898
5895
  const coreRef = useRef(null);
5899
5896
  const activeFilePathRef = useRef(null);
5900
5897
  const contextRef = useRef(context);
@@ -5924,13 +5921,27 @@ function useKanbanData(options) {
5924
5921
  }
5925
5922
  }, []);
5926
5923
  const fileTreeVersionRef = useRef(null);
5924
+ const buildColumnStates = useCallback((allTasks) => {
5925
+ const statusColumns2 = ["todo", "in-progress", "done"];
5926
+ const newColumnStates = /* @__PURE__ */ new Map();
5927
+ for (const column of statusColumns2) {
5928
+ const status = COLUMN_TO_STATUS[column];
5929
+ const columnTasks = allTasks.filter((t) => t.status === status);
5930
+ newColumnStates.set(column, {
5931
+ tasks: columnTasks,
5932
+ total: columnTasks.length,
5933
+ hasMore: false,
5934
+ isLoadingMore: false
5935
+ });
5936
+ }
5937
+ return newColumnStates;
5938
+ }, []);
5927
5939
  const loadBacklogData = useCallback(async () => {
5928
5940
  var _a, _b, _c;
5929
5941
  if (!context || !actions) {
5930
5942
  console.log("[useKanbanData] No context provided");
5931
5943
  setIsBacklogProject(false);
5932
5944
  setTasks([]);
5933
- setTasksBySource(/* @__PURE__ */ new Map());
5934
5945
  setColumnStates(/* @__PURE__ */ new Map());
5935
5946
  setIsLoading(false);
5936
5947
  coreRef.current = null;
@@ -5942,7 +5953,6 @@ function useKanbanData(options) {
5942
5953
  console.log("[useKanbanData] FileTree not available");
5943
5954
  setIsBacklogProject(false);
5944
5955
  setTasks([]);
5945
- setTasksBySource(/* @__PURE__ */ new Map());
5946
5956
  setColumnStates(/* @__PURE__ */ new Map());
5947
5957
  coreRef.current = null;
5948
5958
  fileTreeVersionRef.current = null;
@@ -5973,7 +5983,6 @@ function useKanbanData(options) {
5973
5983
  console.log("[useKanbanData] Not a Backlog.md project");
5974
5984
  setIsBacklogProject(false);
5975
5985
  setTasks([]);
5976
- setTasksBySource(/* @__PURE__ */ new Map());
5977
5986
  setColumnStates(/* @__PURE__ */ new Map());
5978
5987
  coreRef.current = null;
5979
5988
  return;
@@ -5983,133 +5992,74 @@ function useKanbanData(options) {
5983
5992
  setCanWrite(fs.canWrite);
5984
5993
  await core2.initializeLazy(filePaths);
5985
5994
  coreRef.current = core2;
5986
- const paginatedResult = await core2.getTasksBySourcePaginated({
5987
- tasksLimit,
5988
- completedLimit,
5989
- offset: 0,
5990
- tasksSortDirection: "asc",
5991
- completedSortByIdDesc: true
5995
+ const paginatedResult = await core2.loadMoreForSource("tasks", 0, {
5996
+ limit: tasksLimit,
5997
+ sortDirection: "asc"
5992
5998
  });
5993
- const newTasksBySource = /* @__PURE__ */ new Map();
5994
- const newColumnStates = /* @__PURE__ */ new Map();
5995
- let allTasks = [];
5996
- for (const source2 of paginatedResult.sources) {
5997
- const columnResult = paginatedResult.bySource.get(source2);
5998
- if (columnResult) {
5999
- newTasksBySource.set(source2, columnResult.items);
6000
- newColumnStates.set(source2, {
6001
- tasks: columnResult.items,
6002
- total: columnResult.total,
6003
- hasMore: columnResult.hasMore,
6004
- isLoadingMore: false
6005
- });
6006
- allTasks = allTasks.concat(columnResult.items);
6007
- } else {
6008
- newTasksBySource.set(source2, []);
6009
- newColumnStates.set(source2, {
6010
- tasks: [],
6011
- total: 0,
6012
- hasMore: false,
6013
- isLoadingMore: false
6014
- });
6015
- }
6016
- }
6017
- const totalTasks = Array.from(paginatedResult.bySource.values()).reduce(
6018
- (sum, col) => sum + col.total,
6019
- 0
6020
- );
5999
+ const allTasks = paginatedResult.items;
6000
+ const total = paginatedResult.total;
6021
6001
  console.log(
6022
- `[useKanbanData] Loaded ${allTasks.length}/${totalTasks} tasks (active: ${tasksLimit}, completed: ${completedLimit})`
6002
+ `[useKanbanData] Loaded ${allTasks.length}/${total} tasks`
6023
6003
  );
6024
6004
  fileTreeVersionRef.current = currentVersion;
6005
+ const newColumnStates = buildColumnStates(allTasks);
6025
6006
  setTasks(allTasks);
6026
- setTasksBySource(newTasksBySource);
6027
6007
  setColumnStates(newColumnStates);
6008
+ setTotalLoaded(allTasks.length);
6009
+ setTotalCount(total);
6010
+ setHasMore(paginatedResult.hasMore);
6028
6011
  } catch (err) {
6029
6012
  console.error("[useKanbanData] Failed to load Backlog.md data:", err);
6030
6013
  setError(err instanceof Error ? err.message : "Failed to load backlog data");
6031
6014
  setIsBacklogProject(false);
6032
6015
  setTasks([]);
6033
- setTasksBySource(/* @__PURE__ */ new Map());
6034
6016
  setColumnStates(/* @__PURE__ */ new Map());
6035
6017
  coreRef.current = null;
6036
6018
  fileTreeVersionRef.current = null;
6037
6019
  } finally {
6038
6020
  setIsLoading(false);
6039
6021
  }
6040
- }, [context, actions, fetchFileContent, tasksLimit, completedLimit]);
6022
+ }, [context, actions, fetchFileContent, tasksLimit, buildColumnStates]);
6041
6023
  useEffect(() => {
6042
6024
  loadBacklogData();
6043
6025
  }, [loadBacklogData]);
6044
- const loadMore = useCallback(
6045
- async (source2) => {
6046
- const core2 = coreRef.current;
6047
- if (!core2) {
6048
- console.warn("[useKanbanData] Core not available for loadMore");
6049
- return;
6050
- }
6051
- const currentState = columnStates.get(source2);
6052
- if (!currentState || !currentState.hasMore || currentState.isLoadingMore) {
6053
- return;
6054
- }
6055
- setColumnStates((prev) => {
6056
- const newStates = new Map(prev);
6057
- const state = newStates.get(source2);
6058
- if (state) {
6059
- newStates.set(source2, { ...state, isLoadingMore: true });
6060
- }
6061
- return newStates;
6026
+ const loadMoreTasks = useCallback(async () => {
6027
+ const core2 = coreRef.current;
6028
+ if (!core2) {
6029
+ console.warn("[useKanbanData] Core not available for loadMore");
6030
+ return;
6031
+ }
6032
+ if (!hasMore || isLoadingMore) {
6033
+ return;
6034
+ }
6035
+ setIsLoadingMore(true);
6036
+ try {
6037
+ const result = await core2.loadMoreForSource("tasks", totalLoaded, {
6038
+ limit: tasksLimit,
6039
+ sortDirection: "asc"
6062
6040
  });
6063
- try {
6064
- const currentOffset = currentState.tasks.length;
6065
- const limit = source2 === "tasks" ? tasksLimit : completedLimit;
6066
- const result = await core2.loadMoreForSource(
6067
- source2,
6068
- currentOffset,
6069
- {
6070
- limit,
6071
- sortDirection: "asc",
6072
- completedSortByIdDesc: source2 === "completed"
6073
- }
6074
- );
6075
- console.log(
6076
- `[useKanbanData] Loaded ${result.items.length} more tasks for "${source2}" (${currentOffset + result.items.length}/${result.total})`
6077
- );
6078
- setColumnStates((prev) => {
6079
- const newStates = new Map(prev);
6080
- const state = newStates.get(source2);
6081
- if (state) {
6082
- const newTasks = [...state.tasks, ...result.items];
6083
- newStates.set(source2, {
6084
- tasks: newTasks,
6085
- total: result.total,
6086
- hasMore: result.hasMore,
6087
- isLoadingMore: false
6088
- });
6089
- }
6090
- return newStates;
6091
- });
6092
- setTasksBySource((prev) => {
6093
- const newMap = new Map(prev);
6094
- const currentTasks = newMap.get(source2) || [];
6095
- newMap.set(source2, [...currentTasks, ...result.items]);
6096
- return newMap;
6097
- });
6098
- setTasks((prev) => [...prev, ...result.items]);
6099
- } catch (err) {
6100
- console.error(`[useKanbanData] Failed to load more for "${source2}":`, err);
6101
- setError(err instanceof Error ? err.message : "Failed to load more tasks");
6102
- setColumnStates((prev) => {
6103
- const newStates = new Map(prev);
6104
- const state = newStates.get(source2);
6105
- if (state) {
6106
- newStates.set(source2, { ...state, isLoadingMore: false });
6107
- }
6108
- return newStates;
6109
- });
6110
- }
6041
+ console.log(
6042
+ `[useKanbanData] Loaded ${result.items.length} more tasks (${totalLoaded + result.items.length}/${result.total})`
6043
+ );
6044
+ const newTasks = [...tasks, ...result.items];
6045
+ setTasks(newTasks);
6046
+ setTotalLoaded(newTasks.length);
6047
+ setTotalCount(result.total);
6048
+ setHasMore(result.hasMore);
6049
+ const newColumnStates = buildColumnStates(newTasks);
6050
+ setColumnStates(newColumnStates);
6051
+ } catch (err) {
6052
+ console.error("[useKanbanData] Failed to load more tasks:", err);
6053
+ setError(err instanceof Error ? err.message : "Failed to load more tasks");
6054
+ } finally {
6055
+ setIsLoadingMore(false);
6056
+ }
6057
+ }, [tasks, hasMore, isLoadingMore, totalLoaded, tasksLimit, buildColumnStates]);
6058
+ const loadMore = useCallback(
6059
+ async (_status) => {
6060
+ await loadMoreTasks();
6111
6061
  },
6112
- [columnStates, tasksLimit, completedLimit]
6062
+ [loadMoreTasks]
6113
6063
  );
6114
6064
  const refreshData = useCallback(async () => {
6115
6065
  await loadBacklogData();
@@ -6141,44 +6091,17 @@ function useKanbanData(options) {
6141
6091
  const moveTaskOptimistic = useCallback(
6142
6092
  (taskId, toColumn) => {
6143
6093
  const newStatus = COLUMN_TO_STATUS[toColumn];
6144
- const isMovingToCompleted = toColumn === "completed";
6145
- setTasksBySource((prev) => {
6146
- const newMap = new Map(prev);
6147
- const activeTasks = [...newMap.get("tasks") || []];
6148
- const completedTasks = [...newMap.get("completed") || []];
6149
- let taskToMove;
6150
- const activeIndex = activeTasks.findIndex((t) => t.id === taskId);
6151
- if (activeIndex !== -1) {
6152
- taskToMove = activeTasks[activeIndex];
6153
- activeTasks.splice(activeIndex, 1);
6154
- }
6155
- if (!taskToMove) {
6156
- const completedIndex = completedTasks.findIndex((t) => t.id === taskId);
6157
- if (completedIndex !== -1) {
6158
- taskToMove = completedTasks[completedIndex];
6159
- completedTasks.splice(completedIndex, 1);
6160
- }
6161
- }
6162
- if (!taskToMove) {
6163
- console.warn(`[useKanbanData] Task ${taskId} not found for move`);
6164
- return prev;
6165
- }
6166
- const updatedTask = { ...taskToMove, status: newStatus };
6167
- if (isMovingToCompleted) {
6168
- completedTasks.unshift(updatedTask);
6169
- } else {
6170
- activeTasks.push(updatedTask);
6171
- }
6172
- newMap.set("tasks", activeTasks);
6173
- newMap.set("completed", completedTasks);
6094
+ setTasks((prev) => {
6095
+ const newTasks = prev.map(
6096
+ (t) => t.id === taskId ? { ...t, status: newStatus } : t
6097
+ );
6098
+ const newColumnStates = buildColumnStates(newTasks);
6099
+ setColumnStates(newColumnStates);
6174
6100
  console.log(`[useKanbanData] Moved task ${taskId} to ${toColumn} (${newStatus})`);
6175
- return newMap;
6101
+ return newTasks;
6176
6102
  });
6177
- setTasks(
6178
- (prev) => prev.map((t) => t.id === taskId ? { ...t, status: newStatus } : t)
6179
- );
6180
6103
  },
6181
- []
6104
+ [buildColumnStates]
6182
6105
  );
6183
6106
  const getTaskById = useCallback(
6184
6107
  (taskId) => {
@@ -6186,50 +6109,39 @@ function useKanbanData(options) {
6186
6109
  },
6187
6110
  [tasks]
6188
6111
  );
6189
- const statusColumns = ["todo", "in-progress", "completed"];
6112
+ const statusColumns = ["todo", "in-progress", "done"];
6190
6113
  const tasksByStatus = (() => {
6191
6114
  const result = /* @__PURE__ */ new Map();
6192
- const activeTasks = tasksBySource.get("tasks") || [];
6193
- const completedTasks = tasksBySource.get("completed") || [];
6194
- const todoTasks = activeTasks.filter((t) => t.status === "To Do");
6195
- const inProgressTasks = activeTasks.filter((t) => t.status === "In Progress");
6196
- result.set("todo", { tasks: todoTasks, count: todoTasks.length });
6197
- result.set("in-progress", { tasks: inProgressTasks, count: inProgressTasks.length });
6198
- result.set("completed", { tasks: completedTasks, count: completedTasks.length });
6115
+ for (const column of statusColumns) {
6116
+ const state = columnStates.get(column);
6117
+ result.set(column, {
6118
+ tasks: (state == null ? void 0 : state.tasks) || [],
6119
+ count: (state == null ? void 0 : state.total) || 0
6120
+ });
6121
+ }
6199
6122
  return result;
6200
6123
  })();
6201
- const activeTasksState = (() => {
6202
- const activeColumnState = columnStates.get("tasks");
6203
- return {
6204
- total: (activeColumnState == null ? void 0 : activeColumnState.total) || 0,
6205
- loaded: (activeColumnState == null ? void 0 : activeColumnState.tasks.length) || 0,
6206
- hasMore: (activeColumnState == null ? void 0 : activeColumnState.hasMore) || false,
6207
- isLoadingMore: (activeColumnState == null ? void 0 : activeColumnState.isLoadingMore) || false
6208
- };
6209
- })();
6210
- const loadMoreActive = useCallback(async () => {
6211
- await loadMore("tasks");
6212
- }, [loadMore]);
6124
+ const totalTasksState = {
6125
+ total: totalCount,
6126
+ loaded: totalLoaded,
6127
+ hasMore,
6128
+ isLoadingMore
6129
+ };
6213
6130
  return {
6214
6131
  tasks,
6215
- sources,
6216
6132
  isLoading,
6217
6133
  error,
6218
6134
  isBacklogProject,
6219
- tasksBySource,
6220
6135
  columnStates,
6221
6136
  loadMore,
6222
6137
  refreshData,
6223
6138
  updateTaskStatus,
6224
- // New 3-column view exports
6225
6139
  statusColumns,
6226
6140
  tasksByStatus,
6227
- activeTasksState,
6228
- loadMoreActive,
6229
- // Drag-and-drop support
6141
+ totalTasksState,
6142
+ loadMoreTasks,
6230
6143
  moveTaskOptimistic,
6231
6144
  getTaskById,
6232
- // Write support
6233
6145
  canWrite,
6234
6146
  core: coreRef.current
6235
6147
  };
@@ -6290,6 +6202,7 @@ const TaskCard = ({
6290
6202
  onClick(task);
6291
6203
  }
6292
6204
  };
6205
+ const displayTitle = task.title.replace(/^Task\s+\d+\s*[:\-–—]?\s*/i, "").trim() || task.title;
6293
6206
  return /* @__PURE__ */ jsxs(
6294
6207
  "div",
6295
6208
  {
@@ -6320,7 +6233,7 @@ const TaskCard = ({
6320
6233
  color: theme2.colors.text,
6321
6234
  fontWeight: theme2.fontWeights.medium
6322
6235
  },
6323
- children: task.title
6236
+ children: displayTitle
6324
6237
  }
6325
6238
  ),
6326
6239
  task.description && /* @__PURE__ */ jsx(
@@ -6430,8 +6343,6 @@ const KanbanColumn = ({
6430
6343
  flex: fullWidth ? "1 1 auto" : "1 1 0",
6431
6344
  // Grow to fill available width equally
6432
6345
  minWidth: fullWidth ? void 0 : "280px",
6433
- maxWidth: fullWidth ? void 0 : "500px",
6434
- // Cap max width for readability
6435
6346
  alignSelf: "stretch",
6436
6347
  // Fill parent height via flexbox
6437
6348
  minHeight: 0,
@@ -7351,6 +7262,7 @@ const KanbanPanel = ({
7351
7262
  const [activeTask, setActiveTask] = useState(null);
7352
7263
  const [isTaskModalOpen, setIsTaskModalOpen] = useState(false);
7353
7264
  const [editingTask, setEditingTask] = useState(void 0);
7265
+ const [searchQuery, setSearchQuery] = useState("");
7354
7266
  const sensors = useSensors(
7355
7267
  useSensor(PointerSensor, {
7356
7268
  activationConstraint: {
@@ -7378,10 +7290,8 @@ const KanbanPanel = ({
7378
7290
  const {
7379
7291
  statusColumns,
7380
7292
  tasksByStatus,
7381
- columnStates,
7382
- loadMore,
7383
- activeTasksState,
7384
- loadMoreActive,
7293
+ totalTasksState,
7294
+ loadMoreTasks,
7385
7295
  error,
7386
7296
  isBacklogProject,
7387
7297
  refreshData,
@@ -7392,9 +7302,28 @@ const KanbanPanel = ({
7392
7302
  } = useKanbanData({
7393
7303
  context,
7394
7304
  actions,
7395
- tasksLimit: 20,
7396
- completedLimit: 5
7305
+ tasksLimit: 20
7397
7306
  });
7307
+ const filteredTasksByStatus = useMemo(() => {
7308
+ if (!searchQuery.trim()) {
7309
+ return tasksByStatus;
7310
+ }
7311
+ const query = searchQuery.toLowerCase().trim();
7312
+ const filtered = /* @__PURE__ */ new Map();
7313
+ for (const [status, state] of tasksByStatus) {
7314
+ const filteredTasks = state.tasks.filter((task) => {
7315
+ var _a2, _b2, _c, _d;
7316
+ if (task.title.toLowerCase().includes(query)) return true;
7317
+ if ((_a2 = task.description) == null ? void 0 : _a2.toLowerCase().includes(query)) return true;
7318
+ if ((_b2 = task.labels) == null ? void 0 : _b2.some((label) => label.toLowerCase().includes(query))) return true;
7319
+ if ((_c = task.assignee) == null ? void 0 : _c.some((a) => a.toLowerCase().includes(query))) return true;
7320
+ if ((_d = task.milestone) == null ? void 0 : _d.toLowerCase().includes(query)) return true;
7321
+ return false;
7322
+ });
7323
+ filtered.set(status, { tasks: filteredTasks, count: filteredTasks.length });
7324
+ }
7325
+ return filtered;
7326
+ }, [tasksByStatus, searchQuery]);
7398
7327
  const handleDragStart = useCallback((event) => {
7399
7328
  const { active } = event;
7400
7329
  const task = getTaskById(active.id);
@@ -7413,7 +7342,7 @@ const KanbanPanel = ({
7413
7342
  const statusToColumn = {
7414
7343
  "To Do": "todo",
7415
7344
  "In Progress": "in-progress",
7416
- "Done": "completed"
7345
+ "Done": "done"
7417
7346
  };
7418
7347
  const currentColumn = statusToColumn[task.status] || "todo";
7419
7348
  if (currentColumn !== targetColumn) {
@@ -7562,32 +7491,77 @@ const KanbanPanel = ({
7562
7491
  }
7563
7492
  )
7564
7493
  ] }),
7565
- isBacklogProject && /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "16px", flexWrap: "wrap" }, children: [
7566
- !isNarrowView && /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: statusColumns.map((status) => {
7567
- const statusState = tasksByStatus.get(status);
7568
- const count = (statusState == null ? void 0 : statusState.count) || 0;
7569
- const completedState = columnStates.get("completed");
7570
- const displayCount = status === "completed" && completedState ? `${count}/${completedState.total}` : count;
7571
- return /* @__PURE__ */ jsxs(
7572
- "span",
7573
- {
7574
- style: {
7575
- fontSize: theme2.fontSizes[1],
7494
+ isBacklogProject && /* @__PURE__ */ jsxs(
7495
+ "div",
7496
+ {
7497
+ style: {
7498
+ position: "relative",
7499
+ flex: "1 1 200px",
7500
+ maxWidth: "300px",
7501
+ minWidth: "150px"
7502
+ },
7503
+ children: [
7504
+ /* @__PURE__ */ jsx(
7505
+ Search,
7506
+ {
7507
+ size: 16,
7576
7508
  color: theme2.colors.textSecondary,
7577
- background: theme2.colors.backgroundSecondary,
7578
- padding: "4px 10px",
7579
- borderRadius: theme2.radii[1],
7580
- fontWeight: theme2.fontWeights.medium
7581
- },
7582
- children: [
7583
- STATUS_DISPLAY_LABELS[status],
7584
- ": ",
7585
- displayCount
7586
- ]
7587
- },
7588
- status
7589
- );
7590
- }) }),
7509
+ style: {
7510
+ position: "absolute",
7511
+ left: "10px",
7512
+ top: "50%",
7513
+ transform: "translateY(-50%)",
7514
+ pointerEvents: "none"
7515
+ }
7516
+ }
7517
+ ),
7518
+ /* @__PURE__ */ jsx(
7519
+ "input",
7520
+ {
7521
+ type: "text",
7522
+ placeholder: "Search tasks...",
7523
+ value: searchQuery,
7524
+ onChange: (e) => setSearchQuery(e.target.value),
7525
+ style: {
7526
+ width: "100%",
7527
+ padding: "8px 32px 8px 32px",
7528
+ fontSize: theme2.fontSizes[1],
7529
+ fontFamily: theme2.fonts.body,
7530
+ border: `1px solid ${theme2.colors.border}`,
7531
+ borderRadius: theme2.radii[2],
7532
+ background: theme2.colors.backgroundSecondary,
7533
+ color: theme2.colors.text,
7534
+ outline: "none",
7535
+ boxSizing: "border-box"
7536
+ }
7537
+ }
7538
+ ),
7539
+ searchQuery && /* @__PURE__ */ jsx(
7540
+ "button",
7541
+ {
7542
+ onClick: () => setSearchQuery(""),
7543
+ style: {
7544
+ position: "absolute",
7545
+ right: "6px",
7546
+ top: "50%",
7547
+ transform: "translateY(-50%)",
7548
+ background: "transparent",
7549
+ border: "none",
7550
+ padding: "4px",
7551
+ cursor: "pointer",
7552
+ display: "flex",
7553
+ alignItems: "center",
7554
+ justifyContent: "center",
7555
+ color: theme2.colors.textSecondary
7556
+ },
7557
+ "aria-label": "Clear search",
7558
+ children: /* @__PURE__ */ jsx(X, { size: 14 })
7559
+ }
7560
+ )
7561
+ ]
7562
+ }
7563
+ ),
7564
+ isBacklogProject && /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "16px", flexWrap: "wrap" }, children: [
7591
7565
  canWrite && /* @__PURE__ */ jsxs(
7592
7566
  "button",
7593
7567
  {
@@ -7612,11 +7586,11 @@ const KanbanPanel = ({
7612
7586
  ]
7613
7587
  }
7614
7588
  ),
7615
- activeTasksState.hasMore && /* @__PURE__ */ jsx(
7589
+ totalTasksState.hasMore && /* @__PURE__ */ jsx(
7616
7590
  "button",
7617
7591
  {
7618
- onClick: loadMoreActive,
7619
- disabled: activeTasksState.isLoadingMore,
7592
+ onClick: loadMoreTasks,
7593
+ disabled: totalTasksState.isLoadingMore,
7620
7594
  style: {
7621
7595
  background: theme2.colors.backgroundSecondary,
7622
7596
  color: theme2.colors.text,
@@ -7625,11 +7599,11 @@ const KanbanPanel = ({
7625
7599
  padding: "6px 12px",
7626
7600
  fontSize: theme2.fontSizes[1],
7627
7601
  fontWeight: theme2.fontWeights.medium,
7628
- cursor: activeTasksState.isLoadingMore ? "wait" : "pointer",
7629
- opacity: activeTasksState.isLoadingMore ? 0.7 : 1,
7602
+ cursor: totalTasksState.isLoadingMore ? "wait" : "pointer",
7603
+ opacity: totalTasksState.isLoadingMore ? 0.7 : 1,
7630
7604
  transition: "opacity 0.2s ease"
7631
7605
  },
7632
- children: activeTasksState.isLoadingMore ? "Loading..." : `Load more active (${activeTasksState.total - activeTasksState.loaded} remaining)`
7606
+ children: totalTasksState.isLoadingMore ? "Loading..." : `Load more (${totalTasksState.total - totalTasksState.loaded} remaining)`
7633
7607
  }
7634
7608
  )
7635
7609
  ] })
@@ -7696,7 +7670,7 @@ const KanbanPanel = ({
7696
7670
  },
7697
7671
  children: statusColumns.map((status) => {
7698
7672
  const isSelected = status === selectedTab;
7699
- const statusState = tasksByStatus.get(status);
7673
+ const statusState = filteredTasksByStatus.get(status);
7700
7674
  const count = (statusState == null ? void 0 : statusState.count) || 0;
7701
7675
  return /* @__PURE__ */ jsxs(
7702
7676
  "button",
@@ -7758,26 +7732,19 @@ const KanbanPanel = ({
7758
7732
  style: {
7759
7733
  display: "flex",
7760
7734
  gap: "16px",
7761
- flex: "1 0 auto",
7735
+ width: "100%",
7762
7736
  paddingBottom: "8px",
7763
- minWidth: "100%",
7764
7737
  alignItems: "stretch"
7765
7738
  },
7766
7739
  children: statusColumns.filter((status) => !isNarrowView || status === selectedTab).map((status) => {
7767
- const statusState = tasksByStatus.get(status);
7740
+ const statusState = filteredTasksByStatus.get(status);
7768
7741
  const columnTasks = (statusState == null ? void 0 : statusState.tasks) || [];
7769
- const isCompleted = status === "completed";
7770
- const completedState = columnStates.get("completed");
7771
7742
  return /* @__PURE__ */ jsx(
7772
7743
  KanbanColumn,
7773
7744
  {
7774
7745
  columnId: status,
7775
7746
  status: STATUS_DISPLAY_LABELS[status],
7776
7747
  tasks: columnTasks,
7777
- total: isCompleted ? completedState == null ? void 0 : completedState.total : void 0,
7778
- hasMore: isCompleted ? completedState == null ? void 0 : completedState.hasMore : false,
7779
- isLoadingMore: isCompleted ? completedState == null ? void 0 : completedState.isLoadingMore : false,
7780
- onLoadMore: isCompleted ? () => loadMore("completed") : void 0,
7781
7748
  onTaskClick: handleTaskClick,
7782
7749
  fullWidth: isNarrowView
7783
7750
  },
@@ -51972,10 +51939,24 @@ const TaskDetailPanel = ({ context, actions, events: events2 }) => {
51972
51939
  style: {
51973
51940
  display: "flex",
51974
51941
  alignItems: "center",
51975
- gap: "12px",
51942
+ justifyContent: "space-between",
51976
51943
  marginBottom: "12px"
51977
51944
  },
51978
51945
  children: [
51946
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
51947
+ /* @__PURE__ */ jsx(
51948
+ "span",
51949
+ {
51950
+ style: {
51951
+ fontFamily: theme2.fonts.monospace,
51952
+ fontSize: theme2.fontSizes[0],
51953
+ color: theme2.colors.textMuted
51954
+ },
51955
+ children: selectedTask.id
51956
+ }
51957
+ ),
51958
+ /* @__PURE__ */ jsx(StatusBadge, { status: selectedTask.status })
51959
+ ] }),
51979
51960
  /* @__PURE__ */ jsx(
51980
51961
  "button",
51981
51962
  {
@@ -52001,22 +51982,10 @@ const TaskDetailPanel = ({ context, actions, events: events2 }) => {
52001
51982
  e.currentTarget.style.background = theme2.colors.surface;
52002
51983
  e.currentTarget.style.color = theme2.colors.textSecondary;
52003
51984
  },
52004
- title: "Back",
52005
- children: /* @__PURE__ */ jsx(ArrowLeft, { size: 16 })
52006
- }
52007
- ),
52008
- /* @__PURE__ */ jsx(
52009
- "span",
52010
- {
52011
- style: {
52012
- fontFamily: theme2.fonts.monospace,
52013
- fontSize: theme2.fontSizes[0],
52014
- color: theme2.colors.textMuted
52015
- },
52016
- children: selectedTask.id
51985
+ title: "Close",
51986
+ children: /* @__PURE__ */ jsx(X, { size: 16 })
52017
51987
  }
52018
- ),
52019
- /* @__PURE__ */ jsx(StatusBadge, { status: selectedTask.status })
51988
+ )
52020
51989
  ]
52021
51990
  }
52022
51991
  ),