@industry-theme/backlogmd-kanban-panel 1.0.34 → 1.0.36

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.
@@ -3740,7 +3740,7 @@ const createLucideIcon = (iconName, iconNode) => {
3740
3740
  * This source code is licensed under the ISC license.
3741
3741
  * See the LICENSE file in the root directory of this source tree.
3742
3742
  */
3743
- const __iconNode$k = [
3743
+ const __iconNode$l = [
3744
3744
  ["path", { d: "M12 8V4H8", key: "hb8ula" }],
3745
3745
  ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
3746
3746
  ["path", { d: "M2 14h2", key: "vft8re" }],
@@ -3748,75 +3748,75 @@ const __iconNode$k = [
3748
3748
  ["path", { d: "M15 13v2", key: "1xurst" }],
3749
3749
  ["path", { d: "M9 13v2", key: "rq6x2g" }]
3750
3750
  ];
3751
- const Bot = createLucideIcon("bot", __iconNode$k);
3751
+ const Bot = createLucideIcon("bot", __iconNode$l);
3752
3752
  /**
3753
3753
  * @license lucide-react v0.552.0 - ISC
3754
3754
  *
3755
3755
  * This source code is licensed under the ISC license.
3756
3756
  * See the LICENSE file in the root directory of this source tree.
3757
3757
  */
3758
- const __iconNode$j = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
3759
- const Check = createLucideIcon("check", __iconNode$j);
3758
+ const __iconNode$k = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
3759
+ const Check = createLucideIcon("check", __iconNode$k);
3760
3760
  /**
3761
3761
  * @license lucide-react v0.552.0 - ISC
3762
3762
  *
3763
3763
  * This source code is licensed under the ISC license.
3764
3764
  * See the LICENSE file in the root directory of this source tree.
3765
3765
  */
3766
- const __iconNode$i = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
3767
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$i);
3766
+ const __iconNode$j = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
3767
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$j);
3768
3768
  /**
3769
3769
  * @license lucide-react v0.552.0 - ISC
3770
3770
  *
3771
3771
  * This source code is licensed under the ISC license.
3772
3772
  * See the LICENSE file in the root directory of this source tree.
3773
3773
  */
3774
- const __iconNode$h = [
3774
+ const __iconNode$i = [
3775
3775
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
3776
3776
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
3777
3777
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
3778
3778
  ];
3779
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$h);
3779
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$i);
3780
3780
  /**
3781
3781
  * @license lucide-react v0.552.0 - ISC
3782
3782
  *
3783
3783
  * This source code is licensed under the ISC license.
3784
3784
  * See the LICENSE file in the root directory of this source tree.
3785
3785
  */
3786
- const __iconNode$g = [
3786
+ const __iconNode$h = [
3787
3787
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
3788
3788
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
3789
3789
  ];
3790
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$g);
3790
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$h);
3791
3791
  /**
3792
3792
  * @license lucide-react v0.552.0 - ISC
3793
3793
  *
3794
3794
  * This source code is licensed under the ISC license.
3795
3795
  * See the LICENSE file in the root directory of this source tree.
3796
3796
  */
3797
- const __iconNode$f = [
3797
+ const __iconNode$g = [
3798
3798
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
3799
3799
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
3800
3800
  ];
3801
- const CircleCheck = createLucideIcon("circle-check", __iconNode$f);
3801
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$g);
3802
3802
  /**
3803
3803
  * @license lucide-react v0.552.0 - ISC
3804
3804
  *
3805
3805
  * This source code is licensed under the ISC license.
3806
3806
  * See the LICENSE file in the root directory of this source tree.
3807
3807
  */
3808
- const __iconNode$e = [
3808
+ const __iconNode$f = [
3809
3809
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
3810
3810
  ["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" }]
3811
3811
  ];
3812
- const Copy = createLucideIcon("copy", __iconNode$e);
3812
+ const Copy = createLucideIcon("copy", __iconNode$f);
3813
3813
  /**
3814
3814
  * @license lucide-react v0.552.0 - ISC
3815
3815
  *
3816
3816
  * This source code is licensed under the ISC license.
3817
3817
  * See the LICENSE file in the root directory of this source tree.
3818
3818
  */
3819
- const __iconNode$d = [
3819
+ const __iconNode$e = [
3820
3820
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
3821
3821
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
3822
3822
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -3826,26 +3826,26 @@ const __iconNode$d = [
3826
3826
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
3827
3827
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
3828
3828
  ];
3829
- const Expand = createLucideIcon("expand", __iconNode$d);
3829
+ const Expand = createLucideIcon("expand", __iconNode$e);
3830
3830
  /**
3831
3831
  * @license lucide-react v0.552.0 - ISC
3832
3832
  *
3833
3833
  * This source code is licensed under the ISC license.
3834
3834
  * See the LICENSE file in the root directory of this source tree.
3835
3835
  */
3836
- const __iconNode$c = [
3836
+ const __iconNode$d = [
3837
3837
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
3838
3838
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
3839
3839
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
3840
3840
  ];
3841
- const ExternalLink = createLucideIcon("external-link", __iconNode$c);
3841
+ const ExternalLink = createLucideIcon("external-link", __iconNode$d);
3842
3842
  /**
3843
3843
  * @license lucide-react v0.552.0 - ISC
3844
3844
  *
3845
3845
  * This source code is licensed under the ISC license.
3846
3846
  * See the LICENSE file in the root directory of this source tree.
3847
3847
  */
3848
- const __iconNode$b = [
3848
+ const __iconNode$c = [
3849
3849
  [
3850
3850
  "path",
3851
3851
  {
@@ -3858,14 +3858,14 @@ const __iconNode$b = [
3858
3858
  ["path", { d: "M16 13H8", key: "t4e002" }],
3859
3859
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
3860
3860
  ];
3861
- const FileText = createLucideIcon("file-text", __iconNode$b);
3861
+ const FileText = createLucideIcon("file-text", __iconNode$c);
3862
3862
  /**
3863
3863
  * @license lucide-react v0.552.0 - ISC
3864
3864
  *
3865
3865
  * This source code is licensed under the ISC license.
3866
3866
  * See the LICENSE file in the root directory of this source tree.
3867
3867
  */
3868
- const __iconNode$a = [
3868
+ const __iconNode$b = [
3869
3869
  ["path", { d: "M12 10v6", key: "1bos4e" }],
3870
3870
  ["path", { d: "M9 13h6", key: "1uhe8q" }],
3871
3871
  [
@@ -3876,7 +3876,20 @@ const __iconNode$a = [
3876
3876
  }
3877
3877
  ]
3878
3878
  ];
3879
- const FolderPlus = createLucideIcon("folder-plus", __iconNode$a);
3879
+ const FolderPlus = createLucideIcon("folder-plus", __iconNode$b);
3880
+ /**
3881
+ * @license lucide-react v0.552.0 - ISC
3882
+ *
3883
+ * This source code is licensed under the ISC license.
3884
+ * See the LICENSE file in the root directory of this source tree.
3885
+ */
3886
+ const __iconNode$a = [
3887
+ ["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
3888
+ ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
3889
+ ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
3890
+ ["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
3891
+ ];
3892
+ const GitBranch = createLucideIcon("git-branch", __iconNode$a);
3880
3893
  /**
3881
3894
  * @license lucide-react v0.552.0 - ISC
3882
3895
  *
@@ -6087,6 +6100,11 @@ function gt(o, e, t, r2) {
6087
6100
  };
6088
6101
  }, [o, e, t, r2]);
6089
6102
  }
6103
+ const DEFAULT_TASK_STATUSES = {
6104
+ TODO: "To Do",
6105
+ IN_PROGRESS: "In Progress",
6106
+ DONE: "Done"
6107
+ };
6090
6108
  function parseTaskMarkdown(content2, filePath) {
6091
6109
  const { frontmatter, title, rawContent, acceptanceCriteria, description } = parseMarkdownContent(content2);
6092
6110
  const id = extractIdFromPath(filePath);
@@ -6764,7 +6782,11 @@ class Core {
6764
6782
  }
6765
6783
  const dirName = this.projectRoot.split("/").pop() || "Backlog";
6766
6784
  const projectName = options.projectName || dirName;
6767
- const statuses = options.statuses || ["To Do", "In Progress", "Done"];
6785
+ const statuses = options.statuses || [
6786
+ DEFAULT_TASK_STATUSES.TODO,
6787
+ DEFAULT_TASK_STATUSES.IN_PROGRESS,
6788
+ DEFAULT_TASK_STATUSES.DONE
6789
+ ];
6768
6790
  const config = {
6769
6791
  projectName,
6770
6792
  statuses,
@@ -7488,18 +7510,28 @@ class Core {
7488
7510
  * @returns Created task
7489
7511
  */
7490
7512
  async createTask(input) {
7491
- var _a, _b;
7513
+ var _a, _b, _c, _d, _e2;
7492
7514
  this.ensureInitialized();
7493
7515
  const tasksDir = this.getTasksDir();
7494
7516
  await this.fs.createDir(tasksDir, { recursive: true });
7495
- const existingIds = Array.from(this.tasks.keys()).map((id) => parseInt(id.replace(/\D/g, ""), 10)).filter((n) => !Number.isNaN(n));
7517
+ const existingIds = Array.from(this.lazyInitialized ? this.taskIndex.keys() : this.tasks.keys()).map((id) => parseInt(id.replace(/\D/g, ""), 10)).filter((n) => !Number.isNaN(n));
7496
7518
  const nextId = existingIds.length > 0 ? Math.max(...existingIds) + 1 : 1;
7497
7519
  const taskId = String(nextId);
7520
+ const configStatuses = ((_a = this.config) == null ? void 0 : _a.statuses) || [
7521
+ DEFAULT_TASK_STATUSES.TODO,
7522
+ DEFAULT_TASK_STATUSES.IN_PROGRESS,
7523
+ DEFAULT_TASK_STATUSES.DONE
7524
+ ];
7525
+ let status = input.status || ((_b = this.config) == null ? void 0 : _b.defaultStatus) || DEFAULT_TASK_STATUSES.TODO;
7526
+ if (!configStatuses.includes(status)) {
7527
+ console.warn(`Warning: Status "${status}" is not in configured statuses [${configStatuses.join(", ")}]. Using default status "${((_c = this.config) == null ? void 0 : _c.defaultStatus) || DEFAULT_TASK_STATUSES.TODO}" instead.`);
7528
+ status = ((_d = this.config) == null ? void 0 : _d.defaultStatus) || DEFAULT_TASK_STATUSES.TODO;
7529
+ }
7498
7530
  const now = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
7499
7531
  const task = {
7500
7532
  id: taskId,
7501
7533
  title: input.title,
7502
- status: input.status || ((_a = this.config) == null ? void 0 : _a.defaultStatus) || "To Do",
7534
+ status,
7503
7535
  priority: input.priority,
7504
7536
  assignee: input.assignee || [],
7505
7537
  createdDate: now,
@@ -7511,7 +7543,7 @@ class Core {
7511
7543
  description: input.description,
7512
7544
  implementationPlan: input.implementationPlan,
7513
7545
  implementationNotes: input.implementationNotes,
7514
- acceptanceCriteriaItems: (_b = input.acceptanceCriteria) == null ? void 0 : _b.map((ac, i) => ({
7546
+ acceptanceCriteriaItems: (_e2 = input.acceptanceCriteria) == null ? void 0 : _e2.map((ac, i) => ({
7515
7547
  index: i + 1,
7516
7548
  text: ac.text,
7517
7549
  checked: ac.checked || false
@@ -7526,6 +7558,15 @@ class Core {
7526
7558
  await this.fs.writeFile(filepath, content2);
7527
7559
  task.filePath = filepath;
7528
7560
  this.tasks.set(taskId, task);
7561
+ if (this.lazyInitialized) {
7562
+ const relativePath = filepath.replace(this.projectRoot + "/", "");
7563
+ this.taskIndex.set(taskId, {
7564
+ id: taskId,
7565
+ filePath: relativePath,
7566
+ title: task.title,
7567
+ source: "tasks"
7568
+ });
7569
+ }
7529
7570
  if (input.milestone) {
7530
7571
  await this.addTaskToMilestone(taskId, input.milestone);
7531
7572
  }
@@ -7900,16 +7941,11 @@ class PanelFileSystemAdapter {
7900
7941
  return path2.replace(/^\/+/, "").replace(/\/+$/, "").replace(/\/+/g, "/");
7901
7942
  }
7902
7943
  }
7903
- const STATUS_DISPLAY_LABELS = {
7904
- "todo": "To Do",
7905
- "in-progress": "In Progress",
7906
- "done": "Done"
7907
- };
7908
- const COLUMN_TO_STATUS = {
7909
- "todo": "To Do",
7910
- "in-progress": "In Progress",
7911
- "done": "Done"
7912
- };
7944
+ const STATUS_COLUMNS = [
7945
+ DEFAULT_TASK_STATUSES.TODO,
7946
+ DEFAULT_TASK_STATUSES.IN_PROGRESS,
7947
+ DEFAULT_TASK_STATUSES.DONE
7948
+ ];
7913
7949
  const DEFAULT_TASKS_LIMIT = 20;
7914
7950
  function useKanbanData(options) {
7915
7951
  const {
@@ -7960,11 +7996,9 @@ function useKanbanData(options) {
7960
7996
  }, []);
7961
7997
  const fileTreeVersionRef = useRef(null);
7962
7998
  const buildColumnStates = useCallback((allTasks) => {
7963
- const statusColumns2 = ["todo", "in-progress", "done"];
7964
7999
  const newColumnStates = /* @__PURE__ */ new Map();
7965
- for (const column of statusColumns2) {
7966
- const status = COLUMN_TO_STATUS[column];
7967
- const columnTasks = allTasks.filter((t) => t.status === status);
8000
+ for (const column of STATUS_COLUMNS) {
8001
+ const columnTasks = allTasks.filter((t) => t.status === column);
7968
8002
  newColumnStates.set(column, {
7969
8003
  tasks: columnTasks,
7970
8004
  total: columnTasks.length,
@@ -8141,7 +8175,7 @@ function useKanbanData(options) {
8141
8175
  );
8142
8176
  const moveTaskOptimistic = useCallback(
8143
8177
  (taskId, toColumn) => {
8144
- const newStatus = COLUMN_TO_STATUS[toColumn];
8178
+ const newStatus = toColumn;
8145
8179
  setTasks((prev) => {
8146
8180
  const newTasks = prev.map(
8147
8181
  (t) => t.id === taskId ? { ...t, status: newStatus } : t
@@ -8160,7 +8194,7 @@ function useKanbanData(options) {
8160
8194
  },
8161
8195
  [tasks]
8162
8196
  );
8163
- const statusColumns = ["todo", "in-progress", "done"];
8197
+ const statusColumns = STATUS_COLUMNS;
8164
8198
  const tasksByStatus = (() => {
8165
8199
  const result = /* @__PURE__ */ new Map();
8166
8200
  for (const column of statusColumns) {
@@ -8292,18 +8326,40 @@ const TaskCard = ({
8292
8326
  }
8293
8327
  },
8294
8328
  children: [
8295
- /* @__PURE__ */ jsx(
8296
- "h4",
8297
- {
8298
- style: {
8299
- margin: "0 0 8px 0",
8300
- fontSize: theme2.fontSizes[2],
8301
- color: isSelected ? getPriorityColor(task.priority) : theme2.colors.text,
8302
- fontWeight: theme2.fontWeights.medium
8303
- },
8304
- children: displayTitle
8305
- }
8306
- ),
8329
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px", marginBottom: "8px" }, children: [
8330
+ /* @__PURE__ */ jsx(
8331
+ "h4",
8332
+ {
8333
+ style: {
8334
+ margin: 0,
8335
+ fontSize: theme2.fontSizes[2],
8336
+ color: isSelected ? getPriorityColor(task.priority) : theme2.colors.text,
8337
+ fontWeight: theme2.fontWeights.medium,
8338
+ flex: 1
8339
+ },
8340
+ children: displayTitle
8341
+ }
8342
+ ),
8343
+ getGitHubIssueFromRefs$1(task.references) && /* @__PURE__ */ jsx(
8344
+ "div",
8345
+ {
8346
+ style: {
8347
+ display: "flex",
8348
+ alignItems: "center",
8349
+ gap: "3px",
8350
+ padding: "2px 6px",
8351
+ borderRadius: theme2.radii[1],
8352
+ background: `${theme2.colors.success}20`,
8353
+ color: theme2.colors.success,
8354
+ fontSize: theme2.fontSizes[0],
8355
+ fontWeight: theme2.fontWeights.medium,
8356
+ flexShrink: 0
8357
+ },
8358
+ title: "Assigned to Claude",
8359
+ children: /* @__PURE__ */ jsx(GitBranch, { size: 10 })
8360
+ }
8361
+ )
8362
+ ] }),
8307
8363
  task.description && /* @__PURE__ */ jsx(
8308
8364
  "p",
8309
8365
  {
@@ -9886,7 +9942,7 @@ const KanbanPanel = ({
9886
9942
  var _a, _b;
9887
9943
  const { theme: theme2 } = useTheme();
9888
9944
  const [selectedTaskId, setSelectedTaskId] = useState(null);
9889
- const [selectedTab, setSelectedTab] = useState("todo");
9945
+ const [selectedTab, setSelectedTab] = useState(DEFAULT_TASK_STATUSES.TODO);
9890
9946
  const [isNarrowView, setIsNarrowView] = useState(false);
9891
9947
  const kanbanPanelRef = useRef(null);
9892
9948
  const [viewMode, setViewMode] = useState("board");
@@ -10005,12 +10061,7 @@ const KanbanPanel = ({
10005
10061
  const targetColumn = over.id;
10006
10062
  const task = getTaskById(taskId);
10007
10063
  if (!task) return;
10008
- const statusToColumn = {
10009
- "To Do": "todo",
10010
- "In Progress": "in-progress",
10011
- "Done": "done"
10012
- };
10013
- const currentColumn = statusToColumn[task.status] || "todo";
10064
+ const currentColumn = task.status || DEFAULT_TASK_STATUSES.TODO;
10014
10065
  if (currentColumn !== targetColumn) {
10015
10066
  moveTaskOptimistic(taskId, targetColumn);
10016
10067
  }
@@ -10147,7 +10198,11 @@ const KanbanPanel = ({
10147
10198
  });
10148
10199
  }
10149
10200
  };
10150
- const availableStatuses = ["To Do", "In Progress", "Done"];
10201
+ const availableStatuses = [
10202
+ DEFAULT_TASK_STATUSES.TODO,
10203
+ DEFAULT_TASK_STATUSES.IN_PROGRESS,
10204
+ DEFAULT_TASK_STATUSES.DONE
10205
+ ];
10151
10206
  const currentError = viewMode === "board" ? error : milestonesError;
10152
10207
  return /* @__PURE__ */ jsxs(
10153
10208
  "div",
@@ -10551,7 +10606,7 @@ const KanbanPanel = ({
10551
10606
  gap: "6px"
10552
10607
  },
10553
10608
  children: [
10554
- STATUS_DISPLAY_LABELS[status],
10609
+ status,
10555
10610
  /* @__PURE__ */ jsx(
10556
10611
  "span",
10557
10612
  {
@@ -10601,7 +10656,7 @@ const KanbanPanel = ({
10601
10656
  KanbanColumn,
10602
10657
  {
10603
10658
  columnId: status,
10604
- status: STATUS_DISPLAY_LABELS[status],
10659
+ status,
10605
10660
  tasks: columnTasks,
10606
10661
  onTaskClick: handleTaskClick,
10607
10662
  fullWidth: isNarrowView,
@@ -51463,9 +51518,11 @@ var createIndustryMarkdownComponents = ({
51463
51518
  fontSize: theme2.fontSizes[5],
51464
51519
  lineHeight: theme2.lineHeights.heading,
51465
51520
  fontWeight: theme2.fontWeights.bold,
51466
- marginTop: index2 === 0 ? 0 : theme2.space[4],
51521
+ marginTop: theme2.space[4],
51467
51522
  marginBottom: theme2.space[4],
51468
51523
  fontFamily: theme2.fonts.heading,
51524
+ paddingBottom: theme2.space[2],
51525
+ borderBottom: `1px solid ${theme2.colors.border}`,
51469
51526
  ...headerStyles
51470
51527
  },
51471
51528
  ...props
@@ -51476,9 +51533,11 @@ var createIndustryMarkdownComponents = ({
51476
51533
  fontSize: theme2.fontSizes[4],
51477
51534
  lineHeight: theme2.lineHeights.heading,
51478
51535
  fontWeight: theme2.fontWeights.bold,
51479
- marginTop: index2 === 0 ? 0 : theme2.space[4],
51536
+ marginTop: theme2.space[4],
51480
51537
  marginBottom: theme2.space[3],
51481
51538
  fontFamily: theme2.fonts.heading,
51539
+ paddingBottom: theme2.space[2],
51540
+ borderBottom: `1px solid ${theme2.colors.border}`,
51482
51541
  ...headerStyles
51483
51542
  },
51484
51543
  ...props
@@ -51489,12 +51548,48 @@ var createIndustryMarkdownComponents = ({
51489
51548
  fontSize: theme2.fontSizes[3],
51490
51549
  lineHeight: theme2.lineHeights.heading,
51491
51550
  fontWeight: theme2.fontWeights.semibold,
51492
- marginTop: index2 === 0 ? 0 : theme2.space[4],
51551
+ marginTop: theme2.space[4],
51493
51552
  marginBottom: theme2.space[3],
51494
51553
  fontFamily: theme2.fonts.heading
51495
51554
  },
51496
51555
  ...props
51497
51556
  }, children2),
51557
+ h4: ({ children: children2, ...props }) => /* @__PURE__ */ React2__default.createElement("h4", {
51558
+ style: {
51559
+ color: theme2.colors.text,
51560
+ fontSize: theme2.fontSizes[2],
51561
+ lineHeight: theme2.lineHeights.heading,
51562
+ fontWeight: theme2.fontWeights.semibold,
51563
+ marginTop: theme2.space[3],
51564
+ marginBottom: theme2.space[2],
51565
+ fontFamily: theme2.fonts.heading
51566
+ },
51567
+ ...props
51568
+ }, children2),
51569
+ h5: ({ children: children2, ...props }) => /* @__PURE__ */ React2__default.createElement("h5", {
51570
+ style: {
51571
+ color: theme2.colors.text,
51572
+ fontSize: theme2.fontSizes[1],
51573
+ lineHeight: theme2.lineHeights.heading,
51574
+ fontWeight: theme2.fontWeights.semibold,
51575
+ marginTop: theme2.space[3],
51576
+ marginBottom: theme2.space[1],
51577
+ fontFamily: theme2.fonts.heading
51578
+ },
51579
+ ...props
51580
+ }, children2),
51581
+ h6: ({ children: children2, ...props }) => /* @__PURE__ */ React2__default.createElement("h6", {
51582
+ style: {
51583
+ color: theme2.colors.text,
51584
+ fontSize: theme2.fontSizes[1],
51585
+ lineHeight: theme2.lineHeights.heading,
51586
+ fontWeight: theme2.fontWeights.medium,
51587
+ marginTop: theme2.space[3],
51588
+ marginBottom: theme2.space[1],
51589
+ fontFamily: theme2.fonts.heading
51590
+ },
51591
+ ...props
51592
+ }, children2),
51498
51593
  p: ({ children: children2, ...props }) => /* @__PURE__ */ React2__default.createElement("p", {
51499
51594
  style: {
51500
51595
  color: theme2.colors.text,
@@ -51857,7 +51952,7 @@ var createIndustryMarkdownComponents = ({
51857
51952
  }), "Fill & Copy (", placeholders.length, ")"))), isPrompt ? /* @__PURE__ */ React2__default.createElement("div", {
51858
51953
  style: {
51859
51954
  margin: 0,
51860
- padding: theme2.space[5],
51955
+ padding: theme2.space[1],
51861
51956
  backgroundColor: "transparent",
51862
51957
  fontSize: theme2.fontSizes[1],
51863
51958
  lineHeight: theme2.lineHeights.body,
@@ -51884,7 +51979,7 @@ var createIndustryMarkdownComponents = ({
51884
51979
  })) : /* @__PURE__ */ React2__default.createElement("pre", {
51885
51980
  style: {
51886
51981
  margin: 0,
51887
- padding: theme2.space[4],
51982
+ padding: theme2.space[1],
51888
51983
  backgroundColor: "transparent",
51889
51984
  overflow: "auto",
51890
51985
  fontSize: theme2.fontSizes[1],
@@ -55217,248 +55312,262 @@ const TaskDetailPanel = ({ context, actions, events: events2, config }) => {
55217
55312
  selectedTask.priority && /* @__PURE__ */ jsx("span", { style: getPriorityStyles(theme2, selectedTask.priority), children: selectedTask.priority }),
55218
55313
  /* @__PURE__ */ jsx(StatusBadge, { status: selectedTask.status })
55219
55314
  ] }),
55220
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
55221
- hasClaudeWorkflow && claudeAssignment.status === "idle" && !getGitHubIssueFromRefs(selectedTask.references) && /* @__PURE__ */ jsxs(
55222
- "button",
55223
- {
55224
- onClick: handleAssignToClaude,
55225
- style: {
55226
- display: "flex",
55227
- alignItems: "center",
55228
- gap: "6px",
55229
- padding: "6px 12px",
55230
- border: `1px solid ${theme2.colors.primary}`,
55231
- borderRadius: theme2.radii[1],
55232
- background: "transparent",
55233
- cursor: "pointer",
55234
- color: theme2.colors.primary,
55235
- fontSize: theme2.fontSizes[1],
55236
- fontWeight: theme2.fontWeights.medium,
55237
- transition: "all 0.2s ease"
55238
- },
55239
- onMouseEnter: (e) => {
55240
- e.currentTarget.style.background = theme2.colors.primary;
55241
- e.currentTarget.style.color = theme2.colors.background;
55242
- },
55243
- onMouseLeave: (e) => {
55244
- e.currentTarget.style.background = "transparent";
55245
- e.currentTarget.style.color = theme2.colors.primary;
55246
- },
55247
- title: "Assign to Claude",
55248
- children: [
55249
- /* @__PURE__ */ jsx(Bot, { size: 14 }),
55250
- "Assign to Claude"
55251
- ]
55252
- }
55253
- ),
55254
- (() => {
55255
- const existingIssue = getGitHubIssueFromRefs(selectedTask.references);
55256
- if (!existingIssue || claudeAssignment.status !== "idle") return null;
55257
- return /* @__PURE__ */ jsxs(
55258
- "a",
55259
- {
55260
- href: existingIssue.url,
55261
- target: "_blank",
55262
- rel: "noopener noreferrer",
55263
- style: {
55264
- display: "flex",
55265
- alignItems: "center",
55266
- gap: "6px",
55267
- padding: "6px 12px",
55268
- border: `1px solid ${theme2.colors.primary}`,
55269
- borderRadius: theme2.radii[1],
55270
- background: "transparent",
55271
- color: theme2.colors.primary,
55272
- fontSize: theme2.fontSizes[1],
55273
- fontWeight: theme2.fontWeights.medium,
55274
- textDecoration: "none",
55275
- transition: "all 0.2s ease"
55276
- },
55277
- onMouseEnter: (e) => {
55278
- e.currentTarget.style.background = theme2.colors.primary;
55279
- e.currentTarget.style.color = theme2.colors.background;
55280
- },
55281
- onMouseLeave: (e) => {
55282
- e.currentTarget.style.background = "transparent";
55283
- e.currentTarget.style.color = theme2.colors.primary;
55284
- },
55285
- title: `View issue #${existingIssue.number} on GitHub`,
55286
- children: [
55287
- /* @__PURE__ */ jsx(Bot, { size: 14 }),
55288
- "View Progress",
55289
- /* @__PURE__ */ jsx(ExternalLink, { size: 12 })
55290
- ]
55291
- }
55292
- );
55293
- })(),
55294
- claudeAssignment.status === "loading" && /* @__PURE__ */ jsxs(
55295
- "div",
55296
- {
55297
- style: {
55298
- display: "flex",
55299
- alignItems: "center",
55300
- gap: "6px",
55301
- padding: "6px 12px",
55302
- color: theme2.colors.textSecondary,
55303
- fontSize: theme2.fontSizes[1]
55304
- },
55305
- children: [
55306
- /* @__PURE__ */ jsx(LoaderCircle, { size: 14, style: { animation: "spin 1s linear infinite" } }),
55307
- "Assigning..."
55308
- ]
55309
- }
55310
- ),
55311
- claudeAssignment.status === "success" && /* @__PURE__ */ jsxs(
55312
- "a",
55313
- {
55314
- href: claudeAssignment.issueUrl,
55315
- target: "_blank",
55316
- rel: "noopener noreferrer",
55317
- style: {
55318
- display: "flex",
55319
- alignItems: "center",
55320
- gap: "6px",
55321
- padding: "6px 12px",
55322
- border: `1px solid ${theme2.colors.success}`,
55323
- borderRadius: theme2.radii[1],
55324
- background: `${theme2.colors.success}15`,
55325
- color: theme2.colors.success,
55326
- fontSize: theme2.fontSizes[1],
55327
- fontWeight: theme2.fontWeights.medium,
55328
- textDecoration: "none",
55329
- transition: "all 0.2s ease"
55330
- },
55331
- children: [
55332
- /* @__PURE__ */ jsx(CircleCheckBig, { size: 14 }),
55333
- "Issue #",
55334
- claudeAssignment.issueNumber
55335
- ]
55336
- }
55337
- ),
55338
- claudeAssignment.status === "error" && /* @__PURE__ */ jsxs(
55339
- "div",
55340
- {
55341
- style: {
55342
- display: "flex",
55343
- alignItems: "center",
55344
- gap: "6px",
55345
- padding: "6px 12px",
55346
- border: `1px solid ${theme2.colors.error}`,
55347
- borderRadius: theme2.radii[1],
55348
- background: `${theme2.colors.error}15`,
55349
- color: theme2.colors.error,
55350
- fontSize: theme2.fontSizes[1]
55351
- },
55352
- title: claudeAssignment.error,
55353
- children: [
55354
- /* @__PURE__ */ jsx(CircleAlert, { size: 14 }),
55355
- "Failed",
55356
- /* @__PURE__ */ jsx(
55357
- "button",
55358
- {
55359
- onClick: () => setClaudeAssignment({ status: "idle" }),
55360
- style: {
55361
- background: "none",
55362
- border: "none",
55363
- color: theme2.colors.error,
55364
- cursor: "pointer",
55365
- padding: "0 0 0 4px",
55366
- fontSize: theme2.fontSizes[0],
55367
- textDecoration: "underline"
55368
- },
55369
- children: "Retry"
55370
- }
55371
- )
55372
- ]
55373
- }
55374
- ),
55375
- deleteState.status === "idle" && /* @__PURE__ */ jsxs(
55376
- "button",
55377
- {
55378
- onClick: () => setIsDeleteModalOpen(true),
55379
- style: {
55380
- display: "flex",
55381
- alignItems: "center",
55382
- gap: "6px",
55383
- padding: "6px 12px",
55384
- border: `1px solid ${theme2.colors.error}`,
55385
- borderRadius: theme2.radii[1],
55386
- background: "transparent",
55387
- cursor: "pointer",
55388
- color: theme2.colors.error,
55389
- fontSize: theme2.fontSizes[1],
55390
- fontWeight: theme2.fontWeights.medium,
55391
- transition: "all 0.2s ease"
55392
- },
55393
- onMouseEnter: (e) => {
55394
- e.currentTarget.style.background = theme2.colors.error;
55395
- e.currentTarget.style.color = theme2.colors.background;
55396
- },
55397
- onMouseLeave: (e) => {
55398
- e.currentTarget.style.background = "transparent";
55399
- e.currentTarget.style.color = theme2.colors.error;
55400
- },
55401
- title: "Delete task",
55402
- children: [
55403
- /* @__PURE__ */ jsx(Trash2, { size: 14 }),
55404
- "Delete"
55405
- ]
55406
- }
55407
- ),
55408
- deleteState.status === "success" && /* @__PURE__ */ jsxs(
55409
- "div",
55410
- {
55411
- style: {
55412
- display: "flex",
55413
- alignItems: "center",
55414
- gap: "6px",
55415
- padding: "6px 12px",
55416
- border: `1px solid ${theme2.colors.success}`,
55417
- borderRadius: theme2.radii[1],
55418
- background: `${theme2.colors.success}15`,
55419
- color: theme2.colors.success,
55420
- fontSize: theme2.fontSizes[1],
55421
- fontWeight: theme2.fontWeights.medium
55422
- },
55423
- children: [
55424
- /* @__PURE__ */ jsx(CircleCheckBig, { size: 14 }),
55425
- "Task deleted"
55426
- ]
55427
- }
55428
- ),
55315
+ /* @__PURE__ */ jsx(
55316
+ "button",
55317
+ {
55318
+ onClick: handleBack,
55319
+ style: {
55320
+ display: "flex",
55321
+ alignItems: "center",
55322
+ justifyContent: "center",
55323
+ width: "32px",
55324
+ height: "32px",
55325
+ border: `1px solid ${theme2.colors.border}`,
55326
+ borderRadius: theme2.radii[1],
55327
+ background: theme2.colors.surface,
55328
+ cursor: "pointer",
55329
+ color: theme2.colors.textSecondary,
55330
+ transition: "all 0.2s ease"
55331
+ },
55332
+ onMouseEnter: (e) => {
55333
+ e.currentTarget.style.background = theme2.colors.backgroundSecondary;
55334
+ e.currentTarget.style.color = theme2.colors.text;
55335
+ },
55336
+ onMouseLeave: (e) => {
55337
+ e.currentTarget.style.background = theme2.colors.surface;
55338
+ e.currentTarget.style.color = theme2.colors.textSecondary;
55339
+ },
55340
+ title: "Close",
55341
+ children: /* @__PURE__ */ jsx(X, { size: 16 })
55342
+ }
55343
+ )
55344
+ ]
55345
+ }
55346
+ ),
55347
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", marginBottom: "12px" }, children: [
55348
+ hasClaudeWorkflow && claudeAssignment.status === "idle" && !getGitHubIssueFromRefs(selectedTask.references) && /* @__PURE__ */ jsxs(
55349
+ "button",
55350
+ {
55351
+ onClick: handleAssignToClaude,
55352
+ style: {
55353
+ flex: 1,
55354
+ display: "flex",
55355
+ alignItems: "center",
55356
+ justifyContent: "center",
55357
+ gap: "6px",
55358
+ padding: "6px 12px",
55359
+ border: `1px solid ${theme2.colors.primary}`,
55360
+ borderRadius: theme2.radii[1],
55361
+ background: "transparent",
55362
+ cursor: "pointer",
55363
+ color: theme2.colors.primary,
55364
+ fontSize: theme2.fontSizes[1],
55365
+ fontWeight: theme2.fontWeights.medium,
55366
+ transition: "all 0.2s ease"
55367
+ },
55368
+ onMouseEnter: (e) => {
55369
+ e.currentTarget.style.background = theme2.colors.primary;
55370
+ e.currentTarget.style.color = theme2.colors.background;
55371
+ },
55372
+ onMouseLeave: (e) => {
55373
+ e.currentTarget.style.background = "transparent";
55374
+ e.currentTarget.style.color = theme2.colors.primary;
55375
+ },
55376
+ title: "Assign to Claude",
55377
+ children: [
55378
+ /* @__PURE__ */ jsx(Bot, { size: 14 }),
55379
+ "Assign to Claude"
55380
+ ]
55381
+ }
55382
+ ),
55383
+ (() => {
55384
+ const existingIssue = getGitHubIssueFromRefs(selectedTask.references);
55385
+ if (!existingIssue || claudeAssignment.status !== "idle") return null;
55386
+ return /* @__PURE__ */ jsxs(
55387
+ "a",
55388
+ {
55389
+ href: existingIssue.url,
55390
+ target: "_blank",
55391
+ rel: "noopener noreferrer",
55392
+ style: {
55393
+ flex: 1,
55394
+ display: "flex",
55395
+ alignItems: "center",
55396
+ justifyContent: "center",
55397
+ gap: "6px",
55398
+ padding: "6px 12px",
55399
+ border: `1px solid ${theme2.colors.primary}`,
55400
+ borderRadius: theme2.radii[1],
55401
+ background: "transparent",
55402
+ color: theme2.colors.primary,
55403
+ fontSize: theme2.fontSizes[1],
55404
+ fontWeight: theme2.fontWeights.medium,
55405
+ textDecoration: "none",
55406
+ transition: "all 0.2s ease"
55407
+ },
55408
+ onMouseEnter: (e) => {
55409
+ e.currentTarget.style.background = theme2.colors.primary;
55410
+ e.currentTarget.style.color = theme2.colors.background;
55411
+ },
55412
+ onMouseLeave: (e) => {
55413
+ e.currentTarget.style.background = "transparent";
55414
+ e.currentTarget.style.color = theme2.colors.primary;
55415
+ },
55416
+ title: `View issue #${existingIssue.number} on GitHub`,
55417
+ children: [
55418
+ /* @__PURE__ */ jsx(Bot, { size: 14 }),
55419
+ "View Progress",
55420
+ /* @__PURE__ */ jsx(ExternalLink, { size: 12 })
55421
+ ]
55422
+ }
55423
+ );
55424
+ })(),
55425
+ claudeAssignment.status === "loading" && /* @__PURE__ */ jsxs(
55426
+ "div",
55427
+ {
55428
+ style: {
55429
+ flex: 1,
55430
+ display: "flex",
55431
+ alignItems: "center",
55432
+ justifyContent: "center",
55433
+ gap: "6px",
55434
+ padding: "6px 12px",
55435
+ color: theme2.colors.textSecondary,
55436
+ fontSize: theme2.fontSizes[1]
55437
+ },
55438
+ children: [
55439
+ /* @__PURE__ */ jsx(LoaderCircle, { size: 14, style: { animation: "spin 1s linear infinite" } }),
55440
+ "Assigning..."
55441
+ ]
55442
+ }
55443
+ ),
55444
+ claudeAssignment.status === "success" && /* @__PURE__ */ jsxs(
55445
+ "a",
55446
+ {
55447
+ href: claudeAssignment.issueUrl,
55448
+ target: "_blank",
55449
+ rel: "noopener noreferrer",
55450
+ style: {
55451
+ flex: 1,
55452
+ display: "flex",
55453
+ alignItems: "center",
55454
+ justifyContent: "center",
55455
+ gap: "6px",
55456
+ padding: "6px 12px",
55457
+ border: `1px solid ${theme2.colors.success}`,
55458
+ borderRadius: theme2.radii[1],
55459
+ background: `${theme2.colors.success}15`,
55460
+ color: theme2.colors.success,
55461
+ fontSize: theme2.fontSizes[1],
55462
+ fontWeight: theme2.fontWeights.medium,
55463
+ textDecoration: "none",
55464
+ transition: "all 0.2s ease"
55465
+ },
55466
+ children: [
55467
+ /* @__PURE__ */ jsx(CircleCheckBig, { size: 14 }),
55468
+ "Issue #",
55469
+ claudeAssignment.issueNumber
55470
+ ]
55471
+ }
55472
+ ),
55473
+ claudeAssignment.status === "error" && /* @__PURE__ */ jsxs(
55474
+ "div",
55475
+ {
55476
+ style: {
55477
+ flex: 1,
55478
+ display: "flex",
55479
+ alignItems: "center",
55480
+ justifyContent: "center",
55481
+ gap: "6px",
55482
+ padding: "6px 12px",
55483
+ border: `1px solid ${theme2.colors.error}`,
55484
+ borderRadius: theme2.radii[1],
55485
+ background: `${theme2.colors.error}15`,
55486
+ color: theme2.colors.error,
55487
+ fontSize: theme2.fontSizes[1]
55488
+ },
55489
+ title: claudeAssignment.error,
55490
+ children: [
55491
+ /* @__PURE__ */ jsx(CircleAlert, { size: 14 }),
55492
+ "Failed",
55429
55493
  /* @__PURE__ */ jsx(
55430
55494
  "button",
55431
55495
  {
55432
- onClick: handleBack,
55496
+ onClick: () => setClaudeAssignment({ status: "idle" }),
55433
55497
  style: {
55434
- display: "flex",
55435
- alignItems: "center",
55436
- justifyContent: "center",
55437
- width: "32px",
55438
- height: "32px",
55439
- border: `1px solid ${theme2.colors.border}`,
55440
- borderRadius: theme2.radii[1],
55441
- background: theme2.colors.surface,
55498
+ background: "none",
55499
+ border: "none",
55500
+ color: theme2.colors.error,
55442
55501
  cursor: "pointer",
55443
- color: theme2.colors.textSecondary,
55444
- transition: "all 0.2s ease"
55445
- },
55446
- onMouseEnter: (e) => {
55447
- e.currentTarget.style.background = theme2.colors.backgroundSecondary;
55448
- e.currentTarget.style.color = theme2.colors.text;
55449
- },
55450
- onMouseLeave: (e) => {
55451
- e.currentTarget.style.background = theme2.colors.surface;
55452
- e.currentTarget.style.color = theme2.colors.textSecondary;
55502
+ padding: "0 0 0 4px",
55503
+ fontSize: theme2.fontSizes[0],
55504
+ textDecoration: "underline"
55453
55505
  },
55454
- title: "Close",
55455
- children: /* @__PURE__ */ jsx(X, { size: 16 })
55506
+ children: "Retry"
55456
55507
  }
55457
55508
  )
55458
- ] })
55459
- ]
55460
- }
55461
- ),
55509
+ ]
55510
+ }
55511
+ ),
55512
+ deleteState.status === "idle" && /* @__PURE__ */ jsxs(
55513
+ "button",
55514
+ {
55515
+ onClick: () => setIsDeleteModalOpen(true),
55516
+ style: {
55517
+ flex: 1,
55518
+ display: "flex",
55519
+ alignItems: "center",
55520
+ justifyContent: "center",
55521
+ gap: "6px",
55522
+ padding: "6px 12px",
55523
+ border: `1px solid ${theme2.colors.error}`,
55524
+ borderRadius: theme2.radii[1],
55525
+ background: "transparent",
55526
+ cursor: "pointer",
55527
+ color: theme2.colors.error,
55528
+ fontSize: theme2.fontSizes[1],
55529
+ fontWeight: theme2.fontWeights.medium,
55530
+ transition: "all 0.2s ease"
55531
+ },
55532
+ onMouseEnter: (e) => {
55533
+ e.currentTarget.style.background = theme2.colors.error;
55534
+ e.currentTarget.style.color = theme2.colors.background;
55535
+ },
55536
+ onMouseLeave: (e) => {
55537
+ e.currentTarget.style.background = "transparent";
55538
+ e.currentTarget.style.color = theme2.colors.error;
55539
+ },
55540
+ title: "Delete task",
55541
+ children: [
55542
+ /* @__PURE__ */ jsx(Trash2, { size: 14 }),
55543
+ "Delete"
55544
+ ]
55545
+ }
55546
+ ),
55547
+ deleteState.status === "success" && /* @__PURE__ */ jsxs(
55548
+ "div",
55549
+ {
55550
+ style: {
55551
+ flex: 1,
55552
+ display: "flex",
55553
+ alignItems: "center",
55554
+ justifyContent: "center",
55555
+ gap: "6px",
55556
+ padding: "6px 12px",
55557
+ border: `1px solid ${theme2.colors.success}`,
55558
+ borderRadius: theme2.radii[1],
55559
+ background: `${theme2.colors.success}15`,
55560
+ color: theme2.colors.success,
55561
+ fontSize: theme2.fontSizes[1],
55562
+ fontWeight: theme2.fontWeights.medium
55563
+ },
55564
+ children: [
55565
+ /* @__PURE__ */ jsx(CircleCheckBig, { size: 14 }),
55566
+ "Task deleted"
55567
+ ]
55568
+ }
55569
+ )
55570
+ ] }),
55462
55571
  /* @__PURE__ */ jsx("style", { children: `
55463
55572
  @keyframes spin {
55464
55573
  to { transform: rotate(360deg); }