@nextop-os/workspace-issue-manager 0.0.23 → 0.0.25

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.
@@ -25,7 +25,7 @@ import {
25
25
  toContextRefInput,
26
26
  toIssueManagerWorkspaceFileLinkInput,
27
27
  uniqueIssueManagerFileReferences
28
- } from "./chunk-ZWDF5XA7.js";
28
+ } from "./chunk-UZEH5YBL.js";
29
29
  import {
30
30
  appendIssueManagerWorkspaceFileLinksToContent,
31
31
  clampIssueManagerSidebarWidth,
@@ -36,7 +36,7 @@ import {
36
36
  issueManagerSidebarMinWidth,
37
37
  normalizeIssueManagerContent,
38
38
  shouldAutoCollapseIssueManagerSidebar
39
- } from "./chunk-V75TAM27.js";
39
+ } from "./chunk-QW2WQXOG.js";
40
40
 
41
41
  // src/ui/react/internal/shell/IssueManagerNodeState.ts
42
42
  import { useEffect, useEffectEvent, useState } from "react";
@@ -741,9 +741,9 @@ function createIssueManagerControllerActions(input) {
741
741
  selectedTaskId: null
742
742
  }));
743
743
  },
744
- async deleteIssue() {
744
+ async deleteIssue(options) {
745
745
  const selectedIssueId = nodeState.selectedIssueId;
746
- if (!selectedIssueId || !confirmIssueManagerMessage(copy.t("confirmations.deleteIssue"))) {
746
+ if (!selectedIssueId || options?.skipConfirmation !== true && !confirmIssueManagerMessage(copy.t("confirmations.deleteIssue"))) {
747
747
  return;
748
748
  }
749
749
  try {
@@ -759,10 +759,10 @@ function createIssueManagerControllerActions(input) {
759
759
  notifyError(error, "messages.issueDeleteFailed");
760
760
  }
761
761
  },
762
- async deleteTask() {
762
+ async deleteTask(options) {
763
763
  const selectedIssueId = nodeState.selectedIssueId;
764
764
  const selectedTaskId = nodeState.selectedTaskId;
765
- if (!selectedIssueId || !selectedTaskId || !confirmIssueManagerMessage(copy.t("confirmations.deleteTask"))) {
765
+ if (!selectedIssueId || !selectedTaskId || options?.skipConfirmation !== true && !confirmIssueManagerMessage(copy.t("confirmations.deleteTask"))) {
766
766
  return;
767
767
  }
768
768
  try {
@@ -1659,39 +1659,46 @@ function hasFileAdapterMethod2(fileAdapter, methodName) {
1659
1659
  }
1660
1660
 
1661
1661
  // src/ui/IssueManagerNode.tsx
1662
- import { Button as Button14, PanelIcon, cn as cn10 } from "@nextop-os/ui-system";
1662
+ import { Button as Button14, PanelIcon, cn as cn12 } from "@nextop-os/ui-system";
1663
1663
 
1664
1664
  // src/ui/internal/reference/IssueManagerReferencePicker.tsx
1665
- import { useMemo as useMemo4 } from "react";
1666
1665
  import { createPortal } from "react-dom";
1667
1666
  import {
1668
1667
  Button as Button3,
1669
1668
  Card,
1670
1669
  CardContent,
1671
- CardDescription,
1672
1670
  CardHeader,
1673
1671
  CardTitle,
1674
- CloseIcon
1672
+ CloseIcon,
1673
+ cn as cn2
1675
1674
  } from "@nextop-os/ui-system";
1676
1675
 
1677
1676
  // src/ui/internal/reference/IssueManagerReferencePickerSections.tsx
1678
- import { Badge, Button as Button2, DirectoryIcon as DirectoryIcon2, FileIcon as FileIcon2 } from "@nextop-os/ui-system";
1677
+ import {
1678
+ Badge,
1679
+ Button as Button2,
1680
+ FileIcon as FileIcon2,
1681
+ FolderFilledIcon as FolderFilledIcon2
1682
+ } from "@nextop-os/ui-system";
1679
1683
 
1680
1684
  // src/ui/internal/reference/IssueManagerReferencePickerTree.tsx
1685
+ import { useEffect as useEffect4, useState as useState3 } from "react";
1681
1686
  import {
1687
+ AddIcon,
1682
1688
  ArrowRightIcon,
1683
1689
  Button,
1684
1690
  CheckIcon,
1685
- DirectoryIcon,
1686
1691
  FileIcon,
1692
+ FolderFilledIcon,
1687
1693
  Input,
1688
- LoadingIcon,
1689
1694
  ScrollArea,
1690
1695
  SearchIcon,
1696
+ Spinner,
1691
1697
  cn
1692
1698
  } from "@nextop-os/ui-system";
1693
1699
  import { jsx, jsxs } from "react/jsx-runtime";
1694
- var issueManagerReferenceTreeIndent = 20;
1700
+ var issueManagerReferenceTreeIndent = 24;
1701
+ var issueManagerReferenceTreeCollapseDurationMs = 200;
1695
1702
  function IssueManagerReferencePickerBrowserPane({
1696
1703
  browseRootEntries,
1697
1704
  copy,
@@ -1708,9 +1715,9 @@ function IssueManagerReferencePickerBrowserPane({
1708
1715
  onToggleFolder,
1709
1716
  onToggleRef
1710
1717
  }) {
1711
- return /* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-col border-b border-border/70 lg:border-r lg:border-b-0", children: [
1712
- /* @__PURE__ */ jsx("div", { className: "space-y-3 border-b border-border/70 px-4 py-4 sm:px-5", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1713
- /* @__PURE__ */ jsx(SearchIcon, { className: "pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground" }),
1718
+ return /* @__PURE__ */ jsxs("section", { className: "flex min-h-0 flex-col border-b border-[var(--line-1)] lg:border-r lg:border-b-0", children: [
1719
+ /* @__PURE__ */ jsx("div", { className: "border-b border-[var(--line-1)] p-3", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1720
+ /* @__PURE__ */ jsx(SearchIcon, { className: "pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-[var(--text-tertiary)]" }),
1714
1721
  /* @__PURE__ */ jsx(
1715
1722
  Input,
1716
1723
  {
@@ -1721,7 +1728,7 @@ function IssueManagerReferencePickerBrowserPane({
1721
1728
  }
1722
1729
  )
1723
1730
  ] }) }),
1724
- /* @__PURE__ */ jsx(ScrollArea, { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 p-3", children: isLoading ? /* @__PURE__ */ jsx(IssueManagerReferencePickerFeedback, { children: /* @__PURE__ */ jsx(LoadingIcon, { className: "size-4 animate-spin" }) }) : visibleEntries.length === 0 ? /* @__PURE__ */ jsx(IssueManagerReferencePickerFeedback, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) : mode === "browse" ? /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: browseRootEntries.map((entry) => /* @__PURE__ */ jsx(
1731
+ isLoading ? /* @__PURE__ */ jsx(IssueManagerReferencePickerFeedback, { children: /* @__PURE__ */ jsx(Spinner, { className: "text-[var(--text-secondary)]", size: 16 }) }) : visibleEntries.length === 0 ? /* @__PURE__ */ jsx(IssueManagerReferencePickerFeedback, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) : /* @__PURE__ */ jsx(ScrollArea, { className: "min-h-0 flex-1", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-[2px] p-3", children: mode === "browse" ? /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: browseRootEntries.map((entry) => /* @__PURE__ */ jsx(
1725
1732
  IssueManagerReferencePickerTreeEntry,
1726
1733
  {
1727
1734
  childDepth: 1,
@@ -1741,7 +1748,9 @@ function IssueManagerReferencePickerBrowserPane({
1741
1748
  {
1742
1749
  entry,
1743
1750
  focused: focusedPath === entry.path,
1744
- selected: selectedRefs.some((item) => item.path === entry.path),
1751
+ selected: selectedRefs.some(
1752
+ (item) => item.path === entry.path
1753
+ ),
1745
1754
  onFocusPath,
1746
1755
  onToggleRef
1747
1756
  },
@@ -1768,13 +1777,62 @@ function IssueManagerReferencePickerTreeEntry({
1768
1777
  const expanded = expandedFolderPaths[folderKey] ?? false;
1769
1778
  const childState = directoryStateByPath[folderKey];
1770
1779
  const childEntries = childState?.entries ?? [];
1780
+ const [shouldRenderChildContent, setShouldRenderChildContent] = useState3(expanded);
1781
+ useEffect4(() => {
1782
+ if (expanded) {
1783
+ setShouldRenderChildContent(true);
1784
+ return;
1785
+ }
1786
+ const timeoutId = window.setTimeout(() => {
1787
+ setShouldRenderChildContent(false);
1788
+ }, issueManagerReferenceTreeCollapseDurationMs);
1789
+ return () => window.clearTimeout(timeoutId);
1790
+ }, [expanded]);
1791
+ const shouldBuildChildContent = expanded || shouldRenderChildContent;
1792
+ const childContent = shouldBuildChildContent ? childState?.loading ? /* @__PURE__ */ jsxs(
1793
+ "div",
1794
+ {
1795
+ className: "flex items-center gap-2 px-2 py-2 text-xs text-[var(--text-secondary)]",
1796
+ style: {
1797
+ paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`
1798
+ },
1799
+ children: [
1800
+ /* @__PURE__ */ jsx(Spinner, { className: "text-[var(--text-secondary)]", size: 14 }),
1801
+ /* @__PURE__ */ jsx("span", { children: copy.t("referencePicker.loading") })
1802
+ ]
1803
+ }
1804
+ ) : childEntries.length > 0 ? /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: childEntries.map((childEntry) => /* @__PURE__ */ jsx(
1805
+ IssueManagerReferencePickerTreeEntry,
1806
+ {
1807
+ childDepth: childDepth + 1,
1808
+ copy,
1809
+ directoryStateByPath,
1810
+ entry: childEntry,
1811
+ expandedFolderPaths,
1812
+ focusedPath,
1813
+ selectedRefs,
1814
+ onFocusPath,
1815
+ onToggleFolder,
1816
+ onToggleRef
1817
+ },
1818
+ childEntry.path
1819
+ )) }) : childState?.loaded ? /* @__PURE__ */ jsx(
1820
+ "div",
1821
+ {
1822
+ className: "px-2 py-2 text-xs text-[var(--text-secondary)]",
1823
+ style: {
1824
+ paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`
1825
+ },
1826
+ children: copy.t("referencePicker.emptyDirectory")
1827
+ }
1828
+ ) : null : null;
1771
1829
  return /* @__PURE__ */ jsxs("div", { children: [
1772
1830
  /* @__PURE__ */ jsxs(
1773
1831
  "div",
1774
1832
  {
1775
1833
  className: cn(
1776
- "grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-lg px-2 py-1.5 transition-colors",
1777
- focused || selected ? "bg-transparency-block" : "hover:bg-transparency-block/60"
1834
+ "grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-[6px] py-1.5 pr-1 pl-2 transition-colors",
1835
+ focused || selected ? "bg-transparency-block" : "hover:bg-transparency-block"
1778
1836
  ),
1779
1837
  style: {
1780
1838
  paddingLeft: `${(childDepth - 1) * issueManagerReferenceTreeIndent + 8}px`
@@ -1784,7 +1842,7 @@ function IssueManagerReferencePickerTreeEntry({
1784
1842
  "button",
1785
1843
  {
1786
1844
  "aria-label": resolveIssueManagerReferenceLabel(entry),
1787
- className: "grid size-5 shrink-0 place-items-center rounded-sm text-muted-foreground hover:bg-background/80",
1845
+ className: "grid size-5 shrink-0 place-items-center rounded-sm text-[var(--text-secondary)] hover:bg-[var(--transparency-hover)]",
1788
1846
  type: "button",
1789
1847
  onClick: () => onToggleFolder(entry),
1790
1848
  children: /* @__PURE__ */ jsx(
@@ -1810,64 +1868,50 @@ function IssueManagerReferencePickerTreeEntry({
1810
1868
  }
1811
1869
  },
1812
1870
  children: [
1813
- isFolder ? /* @__PURE__ */ jsx(DirectoryIcon, { className: "size-4 shrink-0 text-muted-foreground" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
1814
- /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-foreground", children: resolveIssueManagerReferenceLabel(entry) })
1871
+ isFolder ? /* @__PURE__ */ jsx(FolderFilledIcon, { className: "size-4 shrink-0 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 shrink-0 text-[var(--text-tertiary)]" }),
1872
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(entry) })
1815
1873
  ]
1816
1874
  }
1817
1875
  ),
1818
1876
  /* @__PURE__ */ jsx(
1819
1877
  Button,
1820
1878
  {
1821
- size: "xs",
1879
+ "aria-label": resolveIssueManagerReferenceLabel(entry),
1880
+ "aria-pressed": selected,
1881
+ size: "icon-sm",
1822
1882
  type: "button",
1823
- variant: selected ? "secondary" : "outline",
1883
+ variant: "ghost",
1824
1884
  onClick: () => {
1825
1885
  onFocusPath(entry.path);
1826
1886
  onToggleRef(entry);
1827
1887
  },
1828
- children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : "+"
1888
+ children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : /* @__PURE__ */ jsx(AddIcon, { size: 16 })
1829
1889
  }
1830
1890
  )
1831
1891
  ]
1832
1892
  }
1833
1893
  ),
1834
- isFolder && expanded ? childState?.loading ? /* @__PURE__ */ jsxs(
1894
+ isFolder ? /* @__PURE__ */ jsx(
1835
1895
  "div",
1836
1896
  {
1837
- className: "flex items-center gap-2 px-2 py-2 text-xs text-muted-foreground",
1838
- style: {
1839
- paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`
1840
- },
1841
- children: [
1842
- /* @__PURE__ */ jsx(LoadingIcon, { className: "size-3.5 animate-spin" }),
1843
- /* @__PURE__ */ jsx("span", { children: copy.t("referencePicker.loading") })
1844
- ]
1845
- }
1846
- ) : childEntries.length > 0 ? childEntries.map((childEntry) => /* @__PURE__ */ jsx(
1847
- IssueManagerReferencePickerTreeEntry,
1848
- {
1849
- childDepth: childDepth + 1,
1850
- copy,
1851
- directoryStateByPath,
1852
- entry: childEntry,
1853
- expandedFolderPaths,
1854
- focusedPath,
1855
- selectedRefs,
1856
- onFocusPath,
1857
- onToggleFolder,
1858
- onToggleRef
1859
- },
1860
- childEntry.path
1861
- )) : childState?.loaded ? /* @__PURE__ */ jsx(
1862
- "div",
1863
- {
1864
- className: "px-2 py-2 text-xs text-muted-foreground",
1865
- style: {
1866
- paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`
1867
- },
1868
- children: copy.t("referencePicker.emptyDirectory")
1897
+ className: cn(
1898
+ "grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none",
1899
+ expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
1900
+ ),
1901
+ children: /* @__PURE__ */ jsx(
1902
+ "div",
1903
+ {
1904
+ "aria-hidden": expanded ? void 0 : "true",
1905
+ className: cn(
1906
+ "min-h-0 overflow-hidden transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none",
1907
+ expanded ? "translate-y-0 opacity-100" : "-translate-y-1 opacity-0"
1908
+ ),
1909
+ inert: expanded ? void 0 : true,
1910
+ children: childContent
1911
+ }
1912
+ )
1869
1913
  }
1870
- ) : null : null
1914
+ ) : null
1871
1915
  ] });
1872
1916
  }
1873
1917
  function IssueManagerReferencePickerSearchEntry({
@@ -1882,8 +1926,8 @@ function IssueManagerReferencePickerSearchEntry({
1882
1926
  "div",
1883
1927
  {
1884
1928
  className: cn(
1885
- "grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-xl border px-3 py-2.5 transition-colors",
1886
- focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block/60"
1929
+ "grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-[6px] border py-2.5 pr-1 pl-3 transition-colors",
1930
+ focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block"
1887
1931
  ),
1888
1932
  children: [
1889
1933
  /* @__PURE__ */ jsxs(
@@ -1893,10 +1937,10 @@ function IssueManagerReferencePickerSearchEntry({
1893
1937
  type: "button",
1894
1938
  onClick: () => onFocusPath(entry.path),
1895
1939
  children: [
1896
- /* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-background/90 text-muted-foreground", children: isFolder ? /* @__PURE__ */ jsx(DirectoryIcon, { className: "size-4" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4" }) }),
1940
+ /* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-[var(--transparency-block)] text-[var(--text-tertiary)]", children: isFolder ? /* @__PURE__ */ jsx(FolderFilledIcon, { className: "size-4 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 text-[var(--text-tertiary)]" }) }),
1897
1941
  /* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
1898
- /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-foreground", children: resolveIssueManagerReferenceLabel(entry) }),
1899
- /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-muted-foreground", children: entry.path })
1942
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(entry) }),
1943
+ /* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--text-secondary)]", children: entry.path })
1900
1944
  ] })
1901
1945
  ]
1902
1946
  }
@@ -1904,14 +1948,16 @@ function IssueManagerReferencePickerSearchEntry({
1904
1948
  /* @__PURE__ */ jsx(
1905
1949
  Button,
1906
1950
  {
1907
- size: "xs",
1951
+ "aria-label": resolveIssueManagerReferenceLabel(entry),
1952
+ "aria-pressed": selected,
1953
+ size: "icon-sm",
1908
1954
  type: "button",
1909
- variant: selected ? "secondary" : "outline",
1955
+ variant: "ghost",
1910
1956
  onClick: () => {
1911
1957
  onFocusPath(entry.path);
1912
1958
  onToggleRef(entry);
1913
1959
  },
1914
- children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : "+"
1960
+ children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : /* @__PURE__ */ jsx(AddIcon, { size: 16 })
1915
1961
  }
1916
1962
  )
1917
1963
  ]
@@ -1921,7 +1967,7 @@ function IssueManagerReferencePickerSearchEntry({
1921
1967
  function IssueManagerReferencePickerFeedback({
1922
1968
  children
1923
1969
  }) {
1924
- return /* @__PURE__ */ jsx("div", { className: "grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground", children });
1970
+ return /* @__PURE__ */ jsx("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
1925
1971
  }
1926
1972
  function resolveIssueManagerReferenceLabel(ref) {
1927
1973
  return ref.displayName || ref.path.split("/").filter(Boolean).at(-1) || ref.path;
@@ -1929,19 +1975,20 @@ function resolveIssueManagerReferenceLabel(ref) {
1929
1975
 
1930
1976
  // src/ui/internal/reference/IssueManagerReferencePickerSections.tsx
1931
1977
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
1978
+ var issueManagerReferencePickerSelectedBadgeClassName = "max-w-[14rem] rounded-[4px] border-transparent bg-[var(--transparency-block)] text-[var(--text-primary)]";
1932
1979
  function IssueManagerReferencePickerPreviewPane({
1933
1980
  copy,
1934
1981
  focusedEntry,
1935
1982
  mode
1936
1983
  }) {
1937
- return /* @__PURE__ */ jsx2("aside", { className: "flex shrink-0 flex-col border-t border-border/70 bg-panel/40 lg:min-h-0 lg:flex-1 lg:border-t-0", children: /* @__PURE__ */ jsx2("div", { className: "flex min-h-0 flex-1 flex-col px-4 py-4 sm:px-5 lg:py-5", children: focusedEntry ? /* @__PURE__ */ jsxs2("div", { className: "flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5", children: [
1938
- /* @__PURE__ */ jsx2("div", { className: "flex h-32 min-h-32 items-center justify-center rounded-2xl border border-border/70 bg-background/72 p-5 sm:h-40 sm:min-h-40 lg:h-56 lg:min-h-56 lg:p-6", children: /* @__PURE__ */ jsxs2("div", { className: "space-y-4 text-center", children: [
1939
- /* @__PURE__ */ jsx2("span", { className: "mx-auto grid size-14 place-items-center rounded-2xl bg-transparency-block text-muted-foreground", children: focusedEntry.kind === "folder" ? /* @__PURE__ */ jsx2(DirectoryIcon2, { className: "size-7" }) : /* @__PURE__ */ jsx2(FileIcon2, { className: "size-7" }) }),
1940
- /* @__PURE__ */ jsx2("p", { className: "max-w-[24ch] text-sm leading-5 text-muted-foreground [overflow-wrap:anywhere]", children: focusedEntry.kind === "folder" ? focusedEntry.path : resolveIssueManagerReferenceLabel(focusedEntry) })
1941
- ] }) }),
1984
+ return /* @__PURE__ */ jsx2("aside", { className: "flex shrink-0 flex-col border-t border-[var(--line-1)] bg-[var(--background-fronted)] lg:min-h-0 lg:flex-1 lg:border-t-0", children: /* @__PURE__ */ jsx2("div", { className: "flex min-h-0 flex-1 flex-col px-4 py-4 sm:px-5 lg:py-5", children: focusedEntry ? /* @__PURE__ */ jsxs2("div", { className: "flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5", children: [
1985
+ /* @__PURE__ */ jsxs2("div", { className: "flex min-h-32 flex-col items-center justify-center space-y-4 rounded-[8px] border border-[var(--line-2,var(--border-2))] bg-[var(--transparency-block)] px-5 py-8 text-center sm:min-h-40 sm:py-10 lg:min-h-56 lg:py-14", children: [
1986
+ focusedEntry.kind === "folder" ? /* @__PURE__ */ jsx2(FolderFilledIcon2, { className: "mx-auto size-9 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx2(FileIcon2, { className: "mx-auto size-9 text-[var(--text-tertiary)]" }),
1987
+ /* @__PURE__ */ jsx2("p", { className: "mx-auto max-w-[24ch] text-sm leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.kind === "folder" ? focusedEntry.path : resolveIssueManagerReferenceLabel(focusedEntry) })
1988
+ ] }),
1942
1989
  /* @__PURE__ */ jsx2("div", { className: "space-y-2 lg:space-y-3", children: /* @__PURE__ */ jsxs2("div", { className: "space-y-1.5", children: [
1943
- /* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-foreground", children: resolveIssueManagerReferenceLabel(focusedEntry) }),
1944
- /* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-muted-foreground [overflow-wrap:anywhere]", children: focusedEntry.path })
1990
+ /* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(focusedEntry) }),
1991
+ /* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.path })
1945
1992
  ] }) })
1946
1993
  ] }) : /* @__PURE__ */ jsx2(IssueManagerReferencePickerFeedback2, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) }) });
1947
1994
  }
@@ -1951,26 +1998,34 @@ function IssueManagerReferencePickerFooter({
1951
1998
  onConfirm,
1952
1999
  selectedRefs
1953
2000
  }) {
1954
- return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3 border-t border-border/70 px-4 py-4 sm:px-6 lg:flex-row lg:items-center lg:justify-between", children: [
2001
+ return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3 border-t border-[var(--line-1)] px-4 py-4 sm:px-6 lg:flex-row lg:items-center lg:justify-between", children: [
1955
2002
  /* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-wrap items-center gap-2 lg:flex-1", children: [
1956
- /* @__PURE__ */ jsx2("span", { className: "text-sm text-muted-foreground", children: copy.t("referencePicker.selectedCount", {
2003
+ /* @__PURE__ */ jsx2("span", { className: "text-sm text-[var(--text-secondary)]", children: copy.t("referencePicker.selectedCount", {
1957
2004
  count: selectedRefs.length
1958
2005
  }) }),
1959
2006
  selectedRefs.slice(0, 2).map((ref) => /* @__PURE__ */ jsx2(
1960
2007
  Badge,
1961
2008
  {
1962
- className: "max-w-[14rem] border-border/70 bg-background/80 text-foreground",
2009
+ className: issueManagerReferencePickerSelectedBadgeClassName,
2010
+ variant: "secondary",
1963
2011
  children: /* @__PURE__ */ jsx2("span", { className: "truncate", children: resolveIssueManagerReferenceLabel(ref) })
1964
2012
  },
1965
2013
  ref.path
1966
2014
  )),
1967
- selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(Badge, { className: "border-border/70 bg-background/80 text-muted-foreground", children: [
1968
- "+",
1969
- selectedRefs.length - 2
1970
- ] }) : null
2015
+ selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(
2016
+ Badge,
2017
+ {
2018
+ className: issueManagerReferencePickerSelectedBadgeClassName,
2019
+ variant: "secondary",
2020
+ children: [
2021
+ "+",
2022
+ selectedRefs.length - 2
2023
+ ]
2024
+ }
2025
+ ) : null
1971
2026
  ] }),
1972
2027
  /* @__PURE__ */ jsxs2("div", { className: "flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0", children: [
1973
- /* @__PURE__ */ jsx2(Button2, { type: "button", variant: "outline", onClick: onClose, children: copy.t("actions.cancel") }),
2028
+ /* @__PURE__ */ jsx2(Button2, { type: "button", variant: "secondary", onClick: onClose, children: copy.t("actions.cancel") }),
1974
2029
  /* @__PURE__ */ jsx2(
1975
2030
  Button2,
1976
2031
  {
@@ -1986,11 +2041,13 @@ function IssueManagerReferencePickerFooter({
1986
2041
  function IssueManagerReferencePickerFeedback2({
1987
2042
  children
1988
2043
  }) {
1989
- return /* @__PURE__ */ jsx2("div", { className: "grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground", children });
2044
+ return /* @__PURE__ */ jsx2("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
1990
2045
  }
1991
2046
 
1992
2047
  // src/ui/internal/reference/IssueManagerReferencePicker.tsx
1993
2048
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
2049
+ var issueManagerReferencePickerBackdropMotionClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none";
2050
+ var issueManagerReferencePickerPanelMotionClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:zoom-in-[0.96] motion-safe:duration-[250ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none";
1994
2051
  function IssueManagerReferencePicker({
1995
2052
  copy,
1996
2053
  fileAdapter,
@@ -2021,32 +2078,31 @@ function IssueManagerReferencePicker({
2021
2078
  open,
2022
2079
  workspaceId
2023
2080
  });
2024
- const selectedCountLabel = useMemo4(
2025
- () => copy.t("referencePicker.selectedCount", { count: selectedRefs.length }),
2026
- [copy, selectedRefs.length]
2027
- );
2028
2081
  if (!open) {
2029
2082
  return null;
2030
2083
  }
2031
2084
  const dialog = /* @__PURE__ */ jsx3(
2032
2085
  "div",
2033
2086
  {
2034
- className: "fixed inset-0 grid place-items-center bg-black/24 px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8",
2087
+ className: cn2(
2088
+ "fixed inset-0 grid place-items-center bg-[var(--backdrop)] px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8",
2089
+ issueManagerReferencePickerBackdropMotionClassName
2090
+ ),
2035
2091
  style: { zIndex: "var(--z-panel)" },
2036
2092
  onClick: onClose,
2037
2093
  children: /* @__PURE__ */ jsxs3(
2038
2094
  Card,
2039
2095
  {
2040
2096
  "aria-modal": "true",
2041
- className: "flex h-[min(88vh,44rem)] w-full max-w-5xl flex-col gap-0 overflow-hidden border-border/70 bg-popover/98 py-0 shadow-[var(--workbench-window-elevation)] sm:h-[min(82vh,44rem)]",
2097
+ className: cn2(
2098
+ "flex h-[min(88vh,44rem)] w-full max-w-5xl origin-center flex-col gap-0 overflow-hidden border-[var(--line-1)] bg-[var(--background-fronted)] py-0 text-[var(--text-primary)] shadow-panel sm:h-[min(82vh,44rem)]",
2099
+ issueManagerReferencePickerPanelMotionClassName
2100
+ ),
2042
2101
  role: "dialog",
2043
2102
  onClick: (event) => event.stopPropagation(),
2044
2103
  children: [
2045
- /* @__PURE__ */ jsx3(CardHeader, { className: "border-b border-border/70 px-4 py-4 sm:px-6 sm:py-5", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-start justify-between gap-4", children: [
2046
- /* @__PURE__ */ jsxs3("div", { className: "min-w-0 space-y-1", children: [
2047
- /* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }),
2048
- /* @__PURE__ */ jsx3(CardDescription, { children: selectedCountLabel })
2049
- ] }),
2104
+ /* @__PURE__ */ jsx3(CardHeader, { className: "border-b border-[var(--line-1)] px-4 py-4 sm:px-6 sm:py-5", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-start justify-between gap-4", children: [
2105
+ /* @__PURE__ */ jsx3("div", { className: "min-w-0", children: /* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }) }),
2050
2106
  /* @__PURE__ */ jsx3(
2051
2107
  Button3,
2052
2108
  {
@@ -2109,10 +2165,11 @@ function IssueManagerReferencePicker({
2109
2165
  }
2110
2166
 
2111
2167
  // src/ui/internal/shell/IssueManagerShell.tsx
2112
- import { Button as Button13, cn as cn9 } from "@nextop-os/ui-system";
2168
+ import { Button as Button13, FileCreateIcon as FileCreateIcon4, cn as cn11 } from "@nextop-os/ui-system";
2113
2169
 
2114
2170
  // src/ui/internal/shell/IssueManagerPanels.tsx
2115
- import { Badge as Badge3, Button as Button7, Input as Input2 } from "@nextop-os/ui-system";
2171
+ import { useState as useState6 } from "react";
2172
+ import { Badge as Badge3, Button as Button7, ConfirmationDialog, Input as Input2 } from "@nextop-os/ui-system";
2116
2173
 
2117
2174
  // src/ui/internal/issue/IssueManagerIssueSections.tsx
2118
2175
  import {
@@ -2120,7 +2177,7 @@ import {
2120
2177
  Button as Button5,
2121
2178
  FileCreateIcon as FileCreateIcon2,
2122
2179
  ScrollArea as ScrollArea2,
2123
- cn as cn2
2180
+ cn as cn3
2124
2181
  } from "@nextop-os/ui-system";
2125
2182
 
2126
2183
  // src/ui/internal/panel/IssueManagerPanelText.ts
@@ -2146,23 +2203,6 @@ function resolveIssueManagerCreatorLabel(entity) {
2146
2203
  // src/ui/internal/panel/IssueManagerPanelSurface.tsx
2147
2204
  import { Button as Button4, FileCreateIcon } from "@nextop-os/ui-system";
2148
2205
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
2149
- var workspaceDockTaskImage = new URL(
2150
- "../../../assets/workspace-dock-task.png",
2151
- import.meta.url
2152
- ).href;
2153
- function IssueManagerEmptyIllustration() {
2154
- return /* @__PURE__ */ jsx4(
2155
- "img",
2156
- {
2157
- alt: "",
2158
- "aria-hidden": "true",
2159
- className: "h-[84px] w-[84px] object-contain",
2160
- decoding: "async",
2161
- draggable: false,
2162
- src: workspaceDockTaskImage
2163
- }
2164
- );
2165
- }
2166
2206
  function IssueManagerPaneLoadingState() {
2167
2207
  return /* @__PURE__ */ jsxs4(
2168
2208
  "div",
@@ -2212,19 +2252,19 @@ function IssueManagerDetailTextSection({
2212
2252
  tone = "muted"
2213
2253
  }) {
2214
2254
  return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
2215
- /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-foreground", children: label }),
2255
+ /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: label }),
2216
2256
  /* @__PURE__ */ jsxs5("div", { className: "grid gap-1.5", children: [
2217
2257
  /* @__PURE__ */ jsx5(
2218
2258
  "p",
2219
2259
  {
2220
- className: cn2(
2221
- "text-sm leading-6",
2222
- tone === "destructive" ? "text-destructive" : "text-muted-foreground"
2260
+ className: cn3(
2261
+ "text-sm font-normal leading-6",
2262
+ tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-secondary)]"
2223
2263
  ),
2224
2264
  children: body
2225
2265
  }
2226
2266
  ),
2227
- meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs leading-5 text-muted-foreground", children: meta }) : null
2267
+ meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs font-normal leading-5 text-[var(--text-secondary)]", children: meta }) : null
2228
2268
  ] })
2229
2269
  ] });
2230
2270
  }
@@ -2234,8 +2274,8 @@ function IssueManagerOutputSection({
2234
2274
  outputs
2235
2275
  }) {
2236
2276
  return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
2237
- /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-foreground", children: copy.t("labels.executionOutputs") }),
2238
- outputs.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm leading-6 text-muted-foreground", children: copy.t("messages.noExecutionOutputs") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: outputs.map((output) => /* @__PURE__ */ jsxs5(
2277
+ /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.executionOutputs") }),
2278
+ outputs.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noExecutionOutputs") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: outputs.map((output) => /* @__PURE__ */ jsxs5(
2239
2279
  "button",
2240
2280
  {
2241
2281
  className: "flex items-start justify-between gap-4 rounded-xl border border-border/65 px-4 py-3 text-left transition-colors hover:bg-accent/18",
@@ -2249,10 +2289,10 @@ function IssueManagerOutputSection({
2249
2289
  },
2250
2290
  children: [
2251
2291
  /* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1", children: [
2252
- /* @__PURE__ */ jsx5("span", { className: "block truncate text-sm font-semibold text-foreground", children: output.displayName }),
2253
- /* @__PURE__ */ jsx5("span", { className: "mt-1 block truncate text-xs text-muted-foreground", children: output.path })
2292
+ /* @__PURE__ */ jsx5("span", { className: "block truncate text-sm font-semibold text-[var(--text-primary)]", children: output.displayName }),
2293
+ /* @__PURE__ */ jsx5("span", { className: "mt-1 block truncate text-xs font-normal text-[var(--text-secondary)]", children: output.path })
2254
2294
  ] }),
2255
- /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-muted-foreground", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" })
2295
+ /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" })
2256
2296
  ]
2257
2297
  },
2258
2298
  output.outputId
@@ -2268,26 +2308,16 @@ function IssueManagerSubtaskSection({
2268
2308
  }) {
2269
2309
  return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
2270
2310
  /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between gap-3", children: [
2271
- /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-foreground", children: copy.t("labels.subtasks") }),
2272
- /* @__PURE__ */ jsxs5(
2273
- Button5,
2274
- {
2275
- className: "px-3",
2276
- size: "dialog",
2277
- type: "button",
2278
- variant: "secondary",
2279
- onClick: onCreate,
2280
- children: [
2281
- /* @__PURE__ */ jsx5(FileCreateIcon2, { size: 14 }),
2282
- copy.t("actions.add")
2283
- ]
2284
- }
2285
- )
2311
+ /* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.subtasks") }),
2312
+ /* @__PURE__ */ jsxs5(Button5, { size: "dialog", type: "button", variant: "ghost", onClick: onCreate, children: [
2313
+ /* @__PURE__ */ jsx5(FileCreateIcon2, { size: 14 }),
2314
+ copy.t("actions.add")
2315
+ ] })
2286
2316
  ] }),
2287
- tasks.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm leading-6 text-muted-foreground", children: copy.t("messages.noSubtasksForIssue") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: tasks.map((task) => /* @__PURE__ */ jsxs5(
2317
+ tasks.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noSubtasksForIssue") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: tasks.map((task) => /* @__PURE__ */ jsxs5(
2288
2318
  "button",
2289
2319
  {
2290
- className: cn2(
2320
+ className: cn3(
2291
2321
  "flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors",
2292
2322
  selectedTaskId === task.taskId ? "border-border/90 bg-background-fronted" : "border-border/65 hover:bg-accent/18"
2293
2323
  ),
@@ -2296,15 +2326,15 @@ function IssueManagerSubtaskSection({
2296
2326
  children: [
2297
2327
  /* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
2298
2328
  /* @__PURE__ */ jsxs5("div", { className: "flex min-w-0 items-center gap-2.5", children: [
2299
- /* @__PURE__ */ jsx5("span", { className: "truncate text-sm font-semibold text-foreground", children: task.title }),
2300
- /* @__PURE__ */ jsx5(Badge2, { className: "rounded-md border-transparent bg-muted px-2 py-1 text-[11px] font-medium text-muted-foreground", children: resolveIssueManagerStatusLabel(copy, task.status) })
2329
+ /* @__PURE__ */ jsx5("span", { className: "truncate text-sm font-semibold text-[var(--text-primary)]", children: task.title }),
2330
+ /* @__PURE__ */ jsx5(Badge2, { className: "rounded-md px-2 py-1 text-[11px] font-medium", children: resolveIssueManagerStatusLabel(copy, task.status) })
2301
2331
  ] }),
2302
- /* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm leading-6 text-muted-foreground", children: summarizeIssueManagerContent(
2332
+ /* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm font-normal leading-6 text-[var(--text-secondary)]", children: summarizeIssueManagerContent(
2303
2333
  task.content,
2304
2334
  copy.t("messages.taskContentEmpty")
2305
2335
  ) })
2306
2336
  ] }),
2307
- /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-muted-foreground", children: formatIssueManagerTimestamp(
2337
+ /* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
2308
2338
  task.createdAtUnix ?? task.updatedAtUnix
2309
2339
  ) || "" })
2310
2340
  ]
@@ -2315,9 +2345,9 @@ function IssueManagerSubtaskSection({
2315
2345
  }
2316
2346
 
2317
2347
  // src/ui/internal/content/IssueManagerDescriptionSection.tsx
2318
- import { useEffect as useEffect4, useRef, useState as useState3 } from "react";
2348
+ import { useEffect as useEffect5, useRef, useState as useState4 } from "react";
2319
2349
  import { RichTextReadonlyContent } from "@nextop-os/ui-rich-text/editor";
2320
- import { cn as cn3 } from "@nextop-os/ui-system";
2350
+ import { cn as cn4 } from "@nextop-os/ui-system";
2321
2351
  import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
2322
2352
  function IssueManagerDescriptionSection({
2323
2353
  content,
@@ -2328,9 +2358,9 @@ function IssueManagerDescriptionSection({
2328
2358
  variant = "card"
2329
2359
  }) {
2330
2360
  const contentRef = useRef(null);
2331
- const [isOverflowing, setIsOverflowing] = useState3(false);
2361
+ const [isOverflowing, setIsOverflowing] = useState4(false);
2332
2362
  const normalizedContent = normalizeIssueManagerContent(content).trim();
2333
- useEffect4(() => {
2363
+ useEffect5(() => {
2334
2364
  if (variant === "plain") {
2335
2365
  setIsOverflowing(false);
2336
2366
  return;
@@ -2363,13 +2393,13 @@ function IssueManagerDescriptionSection({
2363
2393
  if (variant === "plain") {
2364
2394
  return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
2365
2395
  /* @__PURE__ */ jsx6("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: label }),
2366
- normalizedContent ? /* @__PURE__ */ jsx6("div", { className: "max-w-3xl text-sm leading-5 text-text-secondary", children: /* @__PURE__ */ jsx6(
2396
+ normalizedContent ? /* @__PURE__ */ jsx6("div", { className: "max-w-3xl text-sm font-normal leading-5 text-[var(--text-secondary)]", children: /* @__PURE__ */ jsx6(
2367
2397
  IssueManagerDescriptionContent,
2368
2398
  {
2369
2399
  content: normalizedContent,
2370
2400
  onOpen
2371
2401
  }
2372
- ) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm leading-5 text-text-secondary", children: emptyLabel })
2402
+ ) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm font-normal leading-5 text-[var(--text-secondary)]", children: emptyLabel })
2373
2403
  ] });
2374
2404
  }
2375
2405
  return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
@@ -2377,7 +2407,7 @@ function IssueManagerDescriptionSection({
2377
2407
  /* @__PURE__ */ jsxs6(
2378
2408
  "div",
2379
2409
  {
2380
- className: cn3(
2410
+ className: cn4(
2381
2411
  "relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3",
2382
2412
  minHeightClass
2383
2413
  ),
@@ -2385,8 +2415,8 @@ function IssueManagerDescriptionSection({
2385
2415
  /* @__PURE__ */ jsx6(
2386
2416
  "div",
2387
2417
  {
2388
- className: cn3(
2389
- "max-h-[18rem] overflow-y-auto pr-2 text-sm leading-5 text-text-secondary",
2418
+ className: cn4(
2419
+ "max-h-[18rem] overflow-y-auto pr-2 text-sm font-normal leading-5 text-[var(--text-secondary)]",
2390
2420
  isOverflowing && "pb-8"
2391
2421
  ),
2392
2422
  ref: contentRef,
@@ -2396,7 +2426,7 @@ function IssueManagerDescriptionSection({
2396
2426
  content: normalizedContent,
2397
2427
  onOpen
2398
2428
  }
2399
- ) : /* @__PURE__ */ jsx6("p", { className: "text-text-secondary", children: emptyLabel })
2429
+ ) : /* @__PURE__ */ jsx6("p", { className: "font-normal text-[var(--text-secondary)]", children: emptyLabel })
2400
2430
  }
2401
2431
  ),
2402
2432
  isOverflowing ? /* @__PURE__ */ jsx6(
@@ -2431,10 +2461,12 @@ function IssueManagerDescriptionContent({
2431
2461
  }
2432
2462
 
2433
2463
  // src/ui/internal/content/IssueManagerRichTextTextarea.tsx
2434
- import { useMemo as useMemo5 } from "react";
2464
+ import { useEffect as useEffect6, useMemo as useMemo4, useRef as useRef2, useState as useState5 } from "react";
2435
2465
  import { RichTextAtEditor } from "@nextop-os/ui-rich-text/editor";
2436
- import { Button as Button6, LinkIcon, cn as cn4 } from "@nextop-os/ui-system";
2466
+ import { Button as Button6, LinkIcon, cn as cn5 } from "@nextop-os/ui-system";
2437
2467
  import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
2468
+ var issueManagerRichTextTextareaBaseClassName = "min-h-20 w-full rounded-[8px] border border-transparent bg-[var(--transparency-block)] p-3 text-sm font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none";
2469
+ var issueManagerRichTextPlaceholderBaseClassName = "min-h-20 w-full p-3 text-sm font-normal leading-[1.3] text-[var(--text-placeholder)]";
2438
2470
  function IssueManagerRichTextTextarea({
2439
2471
  controller,
2440
2472
  onChange,
@@ -2443,14 +2475,26 @@ function IssueManagerRichTextTextarea({
2443
2475
  textareaClassName,
2444
2476
  value
2445
2477
  }) {
2446
- const providers = useMemo5(
2478
+ const providers = useMemo4(
2447
2479
  () => controller.resolveRichTextAtProviders(surface),
2448
2480
  [controller, surface]
2449
2481
  );
2450
2482
  const showReferenceAction = controller.canReferenceWorkspaceFiles;
2483
+ const [focusSignal, setFocusSignal] = useState5(0);
2484
+ const previousValueRef = useRef2(value);
2485
+ const wasAddingReferenceRef = useRef2(false);
2486
+ useEffect6(() => {
2487
+ const isAddingReference = controller.referenceTarget?.mode === "insert" && controller.referenceTarget.parentKind === surface;
2488
+ if (wasAddingReferenceRef.current && !isAddingReference && value !== previousValueRef.current) {
2489
+ setFocusSignal((current) => current + 1);
2490
+ }
2491
+ wasAddingReferenceRef.current = isAddingReference;
2492
+ previousValueRef.current = value;
2493
+ }, [controller.referenceTarget, surface, value]);
2451
2494
  return /* @__PURE__ */ jsx7(
2452
2495
  RichTextAtEditor,
2453
2496
  {
2497
+ focusSignal,
2454
2498
  maxResults: 8,
2455
2499
  minQueryLength: 1,
2456
2500
  providers,
@@ -2459,15 +2503,24 @@ function IssueManagerRichTextTextarea({
2459
2503
  noMatchesLabel: controller.copy.t("richTextAt.noMatches"),
2460
2504
  removeReferenceActionLabel: controller.copy.t("actions.removeReference")
2461
2505
  },
2462
- textareaClassName: cn4(textareaClassName, showReferenceAction && "pb-14"),
2506
+ textareaClassName: cn5(
2507
+ issueManagerRichTextTextareaBaseClassName,
2508
+ textareaClassName,
2509
+ showReferenceAction && "pb-11"
2510
+ ),
2511
+ placeholderClassName: cn5(
2512
+ issueManagerRichTextPlaceholderBaseClassName,
2513
+ textareaClassName,
2514
+ showReferenceAction && "pb-11"
2515
+ ),
2463
2516
  placeholder,
2464
2517
  value,
2465
2518
  onChange,
2466
- overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-4 bottom-3 z-10 flex", children: /* @__PURE__ */ jsxs7(
2519
+ overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-3 bottom-3 z-10 flex", children: /* @__PURE__ */ jsxs7(
2467
2520
  Button6,
2468
2521
  {
2469
2522
  className: "pointer-events-auto",
2470
- size: "sm",
2523
+ size: "default",
2471
2524
  type: "button",
2472
2525
  variant: "secondary",
2473
2526
  onClick: () => {
@@ -2483,6 +2536,14 @@ function IssueManagerRichTextTextarea({
2483
2536
  );
2484
2537
  }
2485
2538
 
2539
+ // src/ui/internal/shell/IssueManagerEditorMotion.ts
2540
+ var issueManagerEditorRiseInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-bottom-3 motion-safe:duration-[240ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
2541
+ var issueManagerEditorRiseInDelay0ClassName = "motion-safe:[animation-delay:0ms]";
2542
+ var issueManagerEditorRiseInDelay1ClassName = "motion-safe:[animation-delay:55ms]";
2543
+ var issueManagerEditorRiseInDelay2ClassName = "motion-safe:[animation-delay:110ms]";
2544
+ var issueManagerEditorRiseInDelay3ClassName = "motion-safe:[animation-delay:165ms]";
2545
+ var issueManagerEditorFooterFadeInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
2546
+
2486
2547
  // src/ui/internal/shell/IssueManagerPanels.tsx
2487
2548
  import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
2488
2549
  function IssueManagerIssuePane({
@@ -2500,61 +2561,87 @@ function IssueManagerIssuePane({
2500
2561
  const selectedTask = selectedTaskId ? (controller.taskDetail.value?.task?.taskId === selectedTaskId ? controller.taskDetail.value.task : tasks.find((task) => task.taskId === selectedTaskId)) ?? null : null;
2501
2562
  const latestRun = selectedTask ? controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null : null;
2502
2563
  const latestOutputs = selectedTask ? controller.taskDetail.value?.latestOutputs ?? [] : [];
2564
+ const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
2565
+ const [deleteBusy, setDeleteBusy] = useState6(false);
2503
2566
  if (isCreatingIssue || isEditingIssue) {
2504
2567
  return /* @__PURE__ */ jsxs8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
2505
2568
  /* @__PURE__ */ jsx8("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
2506
- /* @__PURE__ */ jsx8("div", { children: /* @__PURE__ */ jsx8("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-foreground", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") }) }),
2569
+ /* @__PURE__ */ jsx8(
2570
+ "div",
2571
+ {
2572
+ className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
2573
+ children: /* @__PURE__ */ jsx8("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") })
2574
+ }
2575
+ ),
2507
2576
  /* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
2508
- /* @__PURE__ */ jsxs8("label", { className: "flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-foreground", children: [
2509
- /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
2577
+ /* @__PURE__ */ jsxs8(
2578
+ "label",
2579
+ {
2580
+ className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
2581
+ children: [
2582
+ /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
2583
+ /* @__PURE__ */ jsx8(
2584
+ Input2,
2585
+ {
2586
+ placeholder: copy.t("composer.issueTitlePlaceholder"),
2587
+ variant: "md",
2588
+ value: controller.issueDraft.title,
2589
+ onChange: (event) => controller.setIssueTitle(event.target.value)
2590
+ }
2591
+ )
2592
+ ]
2593
+ }
2594
+ ),
2595
+ /* @__PURE__ */ jsxs8(
2596
+ "div",
2597
+ {
2598
+ className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
2599
+ children: [
2600
+ /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
2601
+ /* @__PURE__ */ jsx8(
2602
+ IssueManagerRichTextTextarea,
2603
+ {
2604
+ controller,
2605
+ surface: "issue",
2606
+ textareaClassName: "min-h-[180px] resize-none",
2607
+ placeholder: copy.t("composer.issueContentPlaceholder"),
2608
+ value: controller.issueDraft.content,
2609
+ onChange: controller.setIssueContent
2610
+ }
2611
+ )
2612
+ ]
2613
+ }
2614
+ )
2615
+ ] })
2616
+ ] }) }),
2617
+ /* @__PURE__ */ jsx8(
2618
+ "div",
2619
+ {
2620
+ className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
2621
+ children: /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-3", children: [
2510
2622
  /* @__PURE__ */ jsx8(
2511
- Input2,
2623
+ Button7,
2512
2624
  {
2513
- className: "h-10 min-h-10 rounded-lg border-border-1 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]",
2514
- placeholder: copy.t("composer.issueTitlePlaceholder"),
2515
- value: controller.issueDraft.title,
2516
- onChange: (event) => controller.setIssueTitle(event.target.value)
2625
+ size: "dialog",
2626
+ type: "button",
2627
+ variant: "secondary",
2628
+ onClick: onDismissCreate,
2629
+ children: copy.t("actions.cancel")
2517
2630
  }
2518
- )
2519
- ] }),
2520
- /* @__PURE__ */ jsxs8("div", { className: "flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-foreground", children: [
2521
- /* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
2631
+ ),
2522
2632
  /* @__PURE__ */ jsx8(
2523
- IssueManagerRichTextTextarea,
2633
+ Button7,
2524
2634
  {
2525
- controller,
2526
- surface: "issue",
2527
- textareaClassName: "min-h-[180px] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm font-normal leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]",
2528
- placeholder: copy.t("composer.issueContentPlaceholder"),
2529
- value: controller.issueDraft.content,
2530
- onChange: controller.setIssueContent
2635
+ disabled: isIssueTitleMissing,
2636
+ size: "dialog",
2637
+ type: "button",
2638
+ onClick: () => void controller.saveIssue(),
2639
+ children: copy.t("actions.saveIssue")
2531
2640
  }
2532
2641
  )
2533
2642
  ] })
2534
- ] })
2535
- ] }) }),
2536
- /* @__PURE__ */ jsx8("div", { className: "shrink-0 border-t border-border-1 px-7 py-4", children: /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-4", children: [
2537
- /* @__PURE__ */ jsx8(
2538
- Button7,
2539
- {
2540
- size: "dialog",
2541
- type: "button",
2542
- variant: "secondary",
2543
- onClick: onDismissCreate,
2544
- children: copy.t("actions.cancel")
2545
- }
2546
- ),
2547
- /* @__PURE__ */ jsx8(
2548
- Button7,
2549
- {
2550
- disabled: isIssueTitleMissing,
2551
- size: "dialog",
2552
- type: "button",
2553
- onClick: () => void controller.saveIssue(),
2554
- children: copy.t("actions.saveIssue")
2555
- }
2556
- )
2557
- ] }) })
2643
+ }
2644
+ )
2558
2645
  ] });
2559
2646
  }
2560
2647
  if (!selectedIssue) {
@@ -2563,14 +2650,28 @@ function IssueManagerIssuePane({
2563
2650
  return /* @__PURE__ */ jsx8("div", { className: "flex min-h-0 flex-col", children: /* @__PURE__ */ jsx8("div", { className: "min-h-0 flex-1 overflow-y-auto px-8 py-7", children: controller.issueDetail.isLoading && controller.issueDetail.value === null ? /* @__PURE__ */ jsx8(IssueManagerPaneLoadingState, {}) : /* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-9", children: [
2564
2651
  /* @__PURE__ */ jsxs8("header", { className: "flex items-start justify-between gap-6", children: [
2565
2652
  /* @__PURE__ */ jsxs8("div", { className: "min-w-0 flex-1", children: [
2566
- /* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 text-base font-semibold leading-6 text-foreground", children: selectedIssue.title }),
2567
- /* @__PURE__ */ jsxs8("div", { className: "mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-sm text-muted-foreground", children: [
2568
- /* @__PURE__ */ jsx8(Badge3, { className: "rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground", children: resolveIssueManagerStatusLabel(copy, selectedIssue.status) }),
2653
+ /* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 text-base font-semibold leading-6 text-[var(--text-primary)]", children: selectedIssue.title }),
2654
+ /* @__PURE__ */ jsxs8("div", { className: "mt-3 flex flex-wrap items-center gap-x-2 gap-y-2 text-sm font-normal text-[var(--text-secondary)]", children: [
2655
+ /* @__PURE__ */ jsx8(Badge3, { variant: "secondary", children: resolveIssueManagerStatusLabel(copy, selectedIssue.status) }),
2656
+ /* @__PURE__ */ jsx8(
2657
+ "span",
2658
+ {
2659
+ "aria-hidden": "true",
2660
+ className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2661
+ }
2662
+ ),
2569
2663
  /* @__PURE__ */ jsxs8("span", { children: [
2570
2664
  copy.t("labels.creator"),
2571
2665
  " ",
2572
2666
  resolveIssueManagerCreatorLabel(selectedIssue)
2573
2667
  ] }),
2668
+ /* @__PURE__ */ jsx8(
2669
+ "span",
2670
+ {
2671
+ "aria-hidden": "true",
2672
+ className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
2673
+ }
2674
+ ),
2574
2675
  /* @__PURE__ */ jsxs8("span", { children: [
2575
2676
  copy.t("labels.createdAt"),
2576
2677
  " ",
@@ -2578,12 +2679,10 @@ function IssueManagerIssuePane({
2578
2679
  ] })
2579
2680
  ] })
2580
2681
  ] }),
2581
- /* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-5 pt-1", children: [
2682
+ /* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-2 pt-1", children: [
2582
2683
  /* @__PURE__ */ jsx8(
2583
2684
  Button7,
2584
2685
  {
2585
- className: "h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground",
2586
- size: "sm",
2587
2686
  type: "button",
2588
2687
  variant: "ghost",
2589
2688
  onClick: () => controller.setIssueEditorMode("edit"),
@@ -2593,18 +2692,35 @@ function IssueManagerIssuePane({
2593
2692
  /* @__PURE__ */ jsx8(
2594
2693
  Button7,
2595
2694
  {
2596
- className: "h-auto px-0 text-sm font-semibold text-destructive hover:text-destructive",
2597
- size: "sm",
2695
+ className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
2598
2696
  type: "button",
2599
2697
  variant: "ghost",
2600
- onClick: () => {
2601
- void controller.deleteIssue();
2602
- },
2698
+ onClick: () => setDeleteDialogOpen(true),
2603
2699
  children: copy.t("actions.delete")
2604
2700
  }
2605
2701
  )
2606
2702
  ] })
2607
2703
  ] }),
2704
+ /* @__PURE__ */ jsx8(
2705
+ ConfirmationDialog,
2706
+ {
2707
+ cancelLabel: copy.t("actions.cancel"),
2708
+ confirmBusy: deleteBusy,
2709
+ confirmLabel: copy.t("actions.delete"),
2710
+ description: selectedIssue.title,
2711
+ open: deleteDialogOpen,
2712
+ title: copy.t("confirmations.deleteIssue"),
2713
+ tone: "destructive",
2714
+ onConfirm: () => {
2715
+ setDeleteBusy(true);
2716
+ void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
2717
+ setDeleteBusy(false);
2718
+ setDeleteDialogOpen(false);
2719
+ });
2720
+ },
2721
+ onOpenChange: setDeleteDialogOpen
2722
+ }
2723
+ ),
2608
2724
  /* @__PURE__ */ jsx8(
2609
2725
  IssueManagerDescriptionSection,
2610
2726
  {
@@ -2648,17 +2764,19 @@ function IssueManagerIssuePane({
2648
2764
  }
2649
2765
 
2650
2766
  // src/ui/internal/shell/IssueManagerBottomBar.tsx
2651
- import { Button as Button8, cn as cn5 } from "@nextop-os/ui-system";
2767
+ import { Button as Button8, cn as cn7 } from "@nextop-os/ui-system";
2652
2768
 
2653
2769
  // src/ui/internal/task/IssueManagerRunSections.tsx
2654
- import { useState as useState4 } from "react";
2770
+ import { useState as useState7 } from "react";
2655
2771
  import {
2656
2772
  Badge as Badge4,
2657
2773
  Select,
2658
2774
  SelectContent,
2659
2775
  SelectItem,
2660
2776
  SelectTrigger,
2661
- SparkIcon
2777
+ SparkIcon,
2778
+ buttonVariants,
2779
+ cn as cn6
2662
2780
  } from "@nextop-os/ui-system";
2663
2781
  import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
2664
2782
  function IssueManagerRunActionTrigger({
@@ -2667,7 +2785,7 @@ function IssueManagerRunActionTrigger({
2667
2785
  iconSize = 16,
2668
2786
  triggerClassName
2669
2787
  }) {
2670
- const [resetToken, setResetToken] = useState4(0);
2788
+ const [resetToken, setResetToken] = useState7(0);
2671
2789
  return /* @__PURE__ */ jsxs9(
2672
2790
  Select,
2673
2791
  {
@@ -2681,7 +2799,11 @@ function IssueManagerRunActionTrigger({
2681
2799
  SelectTrigger,
2682
2800
  {
2683
2801
  "aria-label": controller.copy.t("actions.askAgentToRun"),
2684
- className: triggerClassName,
2802
+ className: cn6(
2803
+ buttonVariants({ variant: "secondary", size: "dialog" }),
2804
+ "[&>svg]:hidden",
2805
+ triggerClassName
2806
+ ),
2685
2807
  children: /* @__PURE__ */ jsxs9("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
2686
2808
  /* @__PURE__ */ jsx9(SparkIcon, { size: iconSize }),
2687
2809
  /* @__PURE__ */ jsx9("span", { className: "truncate", children: controller.copy.t("actions.askAgentToRun") })
@@ -2703,7 +2825,7 @@ function IssueManagerRunPanels({
2703
2825
  return /* @__PURE__ */ jsxs9("div", { className: "grid gap-4", children: [
2704
2826
  /* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
2705
2827
  /* @__PURE__ */ jsx9("h4", { className: "mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.recentRuns") }),
2706
- recentRuns.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-text-secondary", children: copy.t("messages.noRecentRuns") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: recentRuns.map((run) => /* @__PURE__ */ jsxs9(
2828
+ recentRuns.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: copy.t("messages.noRecentRuns") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: recentRuns.map((run) => /* @__PURE__ */ jsxs9(
2707
2829
  "div",
2708
2830
  {
2709
2831
  className: "rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
@@ -2711,13 +2833,13 @@ function IssueManagerRunPanels({
2711
2833
  /* @__PURE__ */ jsxs9("div", { className: "flex items-start justify-between gap-3", children: [
2712
2834
  /* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
2713
2835
  /* @__PURE__ */ jsx9("p", { className: "truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: run.summary || run.runId }),
2714
- /* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs leading-[1.55] text-text-secondary", children: formatIssueManagerTimestamp(
2836
+ /* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
2715
2837
  run.updatedAtUnix ?? run.createdAtUnix
2716
2838
  ) })
2717
2839
  ] }),
2718
- /* @__PURE__ */ jsx9(Badge4, { className: "rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary", children: resolveIssueManagerStatusLabel(copy, run.status) })
2840
+ /* @__PURE__ */ jsx9(Badge4, { className: "rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-[var(--text-secondary)]", children: resolveIssueManagerStatusLabel(copy, run.status) })
2719
2841
  ] }),
2720
- run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-destructive", children: run.errorMessage }) : null
2842
+ run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-[var(--state-danger)]", children: run.errorMessage }) : null
2721
2843
  ]
2722
2844
  },
2723
2845
  run.runId
@@ -2725,7 +2847,7 @@ function IssueManagerRunPanels({
2725
2847
  ] }),
2726
2848
  /* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
2727
2849
  /* @__PURE__ */ jsx9("h4", { className: "mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.outputs") }),
2728
- outputs.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-text-secondary", children: copy.t("messages.noOutputs") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: outputs.map((output) => /* @__PURE__ */ jsxs9(
2850
+ outputs.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: copy.t("messages.noOutputs") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: outputs.map((output) => /* @__PURE__ */ jsxs9(
2729
2851
  "button",
2730
2852
  {
2731
2853
  className: "rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover",
@@ -2739,7 +2861,7 @@ function IssueManagerRunPanels({
2739
2861
  },
2740
2862
  children: [
2741
2863
  /* @__PURE__ */ jsx9("p", { className: "truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: output.displayName }),
2742
- /* @__PURE__ */ jsx9("p", { className: "mt-1 truncate text-xs leading-[1.55] text-text-secondary", children: output.path })
2864
+ /* @__PURE__ */ jsx9("p", { className: "mt-1 truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: output.path })
2743
2865
  ]
2744
2866
  },
2745
2867
  output.outputId
@@ -2764,26 +2886,22 @@ function IssueManagerBottomBar({
2764
2886
  return /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs10(
2765
2887
  "div",
2766
2888
  {
2767
- className: cn5(
2889
+ className: cn7(
2768
2890
  "flex gap-3",
2769
- isNarrowLayout ? "flex-col items-stretch" : "items-center justify-end"
2891
+ isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
2770
2892
  ),
2771
2893
  children: [
2772
2894
  /* @__PURE__ */ jsx10(
2773
2895
  IssueManagerRunActionTrigger,
2774
2896
  {
2775
2897
  controller,
2776
- disabled: !selectedTask,
2777
- triggerClassName: cn5(
2778
- "rounded-xl border-[var(--border-1)] bg-[var(--transparency-block)] px-4 py-2",
2779
- isNarrowLayout ? "w-full" : "min-w-[14rem]"
2780
- )
2898
+ disabled: !selectedTask
2781
2899
  }
2782
2900
  ),
2783
2901
  controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
2784
2902
  Button8,
2785
2903
  {
2786
- className: cn5("px-4", isNarrowLayout && "w-full"),
2904
+ className: "px-4",
2787
2905
  disabled: !selectedIssue,
2788
2906
  size: "dialog",
2789
2907
  type: "button",
@@ -2801,9 +2919,9 @@ function IssueManagerBottomBar({
2801
2919
  // src/ui/internal/shell/IssueManagerFloatingNotice.tsx
2802
2920
  import {
2803
2921
  FailedFilledIcon,
2804
- Spinner,
2922
+ Spinner as Spinner2,
2805
2923
  toastVariants,
2806
- cn as cn6
2924
+ cn as cn8
2807
2925
  } from "@nextop-os/ui-system";
2808
2926
  import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
2809
2927
  function IssueManagerFloatingNotice({
@@ -2815,14 +2933,14 @@ function IssueManagerFloatingNotice({
2815
2933
  {
2816
2934
  "aria-busy": notice.isLoading,
2817
2935
  "aria-live": variant === "destructive" ? "assertive" : "polite",
2818
- className: cn6(
2936
+ className: cn8(
2819
2937
  toastVariants({ variant }),
2820
2938
  "w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg"
2821
2939
  ),
2822
2940
  role: variant === "destructive" ? "alert" : "status",
2823
2941
  children: /* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 max-w-full items-center gap-[6px] whitespace-nowrap text-sm font-normal leading-normal", children: [
2824
2942
  notice.isLoading ? /* @__PURE__ */ jsx11(
2825
- Spinner,
2943
+ Spinner2,
2826
2944
  {
2827
2945
  className: "shrink-0 text-current",
2828
2946
  size: 16,
@@ -2837,7 +2955,7 @@ function IssueManagerFloatingNotice({
2837
2955
  }
2838
2956
 
2839
2957
  // src/ui/internal/shell/IssueManagerSidebar.tsx
2840
- import { cn as cn8 } from "@nextop-os/ui-system";
2958
+ import { cn as cn10 } from "@nextop-os/ui-system";
2841
2959
 
2842
2960
  // src/ui/internal/shell/IssueManagerSidebarSections.tsx
2843
2961
  import {
@@ -2848,7 +2966,7 @@ import {
2848
2966
  Input as Input3,
2849
2967
  ScrollArea as ScrollArea3,
2850
2968
  UnderlineTabs,
2851
- cn as cn7
2969
+ cn as cn9
2852
2970
  } from "@nextop-os/ui-system";
2853
2971
 
2854
2972
  // src/ui/internal/shell/IssueManagerShellState.ts
@@ -2862,7 +2980,7 @@ var issueManagerStatusFilters = [
2862
2980
  "canceled"
2863
2981
  ];
2864
2982
  function resolveIssueManagerSidebarViewState(input) {
2865
- if (input.issues.isLoading && input.issues.value.length === 0) {
2983
+ if (input.issues.isLoading && input.issues.value.length === 0 && input.issues.hasResolved !== true) {
2866
2984
  return {
2867
2985
  kind: "loading"
2868
2986
  };
@@ -2903,6 +3021,20 @@ function buildIssueManagerStatusCounts(issues) {
2903
3021
  }
2904
3022
  return counts;
2905
3023
  }
3024
+ function resolveIssueManagerStatusCounts(input) {
3025
+ return input.statusCounts ? mapIssueManagerStatusCounts(input.statusCounts) : buildIssueManagerStatusCounts(input.value);
3026
+ }
3027
+ function mapIssueManagerStatusCounts(counts) {
3028
+ return {
3029
+ all: counts.all,
3030
+ canceled: counts.canceled,
3031
+ completed: counts.completed,
3032
+ failed: counts.failed,
3033
+ not_started: counts.notStarted,
3034
+ pending_acceptance: counts.pendingAcceptance,
3035
+ running: counts.running
3036
+ };
3037
+ }
2906
3038
  function resolveIssueManagerShellContentViewState(input) {
2907
3039
  const isIssueEditing = input.issueEditorMode !== "read";
2908
3040
  const isTaskCreating = !isIssueEditing && input.taskEditorMode === "create";
@@ -2983,11 +3115,11 @@ function IssueManagerSidebarBody({
2983
3115
  return /* @__PURE__ */ jsx12(
2984
3116
  ScrollArea3,
2985
3117
  {
2986
- className: cn7("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
3118
+ className: cn9("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
2987
3119
  children: /* @__PURE__ */ jsx12(
2988
3120
  "div",
2989
3121
  {
2990
- className: cn7(
3122
+ className: cn9(
2991
3123
  "flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
2992
3124
  isNarrowLayout ? "min-h-0" : "h-full"
2993
3125
  ),
@@ -3065,7 +3197,7 @@ function IssueManagerSearchField({
3065
3197
  Input3,
3066
3198
  {
3067
3199
  "aria-label": placeholder,
3068
- className: cn7(
3200
+ className: cn9(
3069
3201
  "box-border h-8 min-h-8 rounded-md border-0 bg-[var(--transparency-block)] px-3 text-sm font-normal leading-normal text-[var(--text-primary)] shadow-none outline-none ring-0 transition-colors placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:border-0 focus:bg-[var(--transparency-hover)] focus-visible:border-0 focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 focus-visible:ring-offset-0 disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100",
3070
3202
  "[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none",
3071
3203
  value ? "pr-9" : "pr-3"
@@ -3101,7 +3233,7 @@ function IssueManagerSidebarIssueList({
3101
3233
  return /* @__PURE__ */ jsx12(
3102
3234
  "div",
3103
3235
  {
3104
- className: cn7(
3236
+ className: cn9(
3105
3237
  "flex gap-2.5",
3106
3238
  isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
3107
3239
  ),
@@ -3129,7 +3261,7 @@ function IssueManagerSidebarItem({
3129
3261
  return /* @__PURE__ */ jsxs12(
3130
3262
  "button",
3131
3263
  {
3132
- className: cn7(
3264
+ className: cn9(
3133
3265
  "rounded-lg border px-3.5 py-3.5 text-left transition-colors",
3134
3266
  isNarrowLayout ? "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden" : "w-full",
3135
3267
  selected ? "border-[var(--border-1)] bg-[var(--background-fronted)]" : "border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]"
@@ -3142,7 +3274,7 @@ function IssueManagerSidebarItem({
3142
3274
  /* @__PURE__ */ jsx12("p", { className: "text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
3143
3275
  /* @__PURE__ */ jsx12("p", { className: "line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
3144
3276
  ] }),
3145
- /* @__PURE__ */ jsx12(Badge5, { className: "rounded-full border-transparent bg-[var(--transparency-block)] px-2 py-1 text-[11px] text-[var(--text-secondary)]", children: resolveIssueManagerStatusLabel(copy, issue.status) })
3277
+ /* @__PURE__ */ jsx12(Badge5, { className: "shrink-0", variant: "secondary", children: resolveIssueManagerStatusLabel(copy, issue.status) })
3146
3278
  ] }),
3147
3279
  /* @__PURE__ */ jsx12("div", { className: "mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
3148
3280
  ]
@@ -3156,14 +3288,14 @@ function IssueManagerSidebarLoadingState({
3156
3288
  "div",
3157
3289
  {
3158
3290
  "aria-hidden": "true",
3159
- className: cn7(
3291
+ className: cn9(
3160
3292
  "gap-2.5",
3161
3293
  isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
3162
3294
  ),
3163
3295
  children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs12(
3164
3296
  "div",
3165
3297
  {
3166
- className: cn7(
3298
+ className: cn9(
3167
3299
  "rounded-lg bg-transparent px-3.5 py-3.5",
3168
3300
  isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
3169
3301
  ),
@@ -3187,7 +3319,7 @@ function IssueManagerSidebarEmptyState({
3187
3319
  return /* @__PURE__ */ jsxs12(
3188
3320
  "div",
3189
3321
  {
3190
- className: cn7(
3322
+ className: cn9(
3191
3323
  "relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
3192
3324
  isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
3193
3325
  ),
@@ -3195,7 +3327,7 @@ function IssueManagerSidebarEmptyState({
3195
3327
  /* @__PURE__ */ jsx12(
3196
3328
  "p",
3197
3329
  {
3198
- className: cn7(
3330
+ className: cn9(
3199
3331
  "text-sm font-semibold leading-5 text-[var(--text-primary)]",
3200
3332
  tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-primary)]"
3201
3333
  ),
@@ -3216,7 +3348,7 @@ function IssueManagerSidebarErrorState({
3216
3348
  return /* @__PURE__ */ jsxs12(
3217
3349
  "div",
3218
3350
  {
3219
- className: cn7(
3351
+ className: cn9(
3220
3352
  "relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden px-4 py-6 text-center",
3221
3353
  isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
3222
3354
  ),
@@ -3280,10 +3412,10 @@ function IssueManagerSidebar({
3280
3412
  "aside",
3281
3413
  {
3282
3414
  "aria-hidden": isCollapsed ? "true" : void 0,
3283
- className: cn8(
3284
- "absolute top-0 left-0 z-10 isolate flex h-full w-[var(--issue-manager-sidebar-width)] min-h-0 flex-col overflow-hidden bg-transparent will-change-[transform,opacity] transition-[transform,opacity,border-color] duration-[220ms] ease-[cubic-bezier(0.22,1,0.36,1)] after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[180ms] motion-reduce:transition-none",
3415
+ className: cn10(
3416
+ "relative isolate flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-transparent opacity-100 transition-[border-color] duration-[140ms] ease-in-out after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[160ms] after:delay-[70ms] motion-reduce:transition-none motion-reduce:after:transition-none [&>*]:transition-[opacity,filter] [&>*]:duration-[160ms] [&>*]:delay-[70ms] [&>*]:ease-in-out motion-reduce:[&>*]:transition-none",
3285
3417
  isNarrowLayout ? "border-b border-[var(--border-1)]" : "border-r border-[var(--border-1)]",
3286
- isCollapsed && "pointer-events-none -translate-x-full border-r-transparent opacity-0 after:opacity-100 [&>*]:opacity-0 [&>*]:transition-opacity [&>*]:duration-[120ms] motion-reduce:transform-none"
3418
+ isCollapsed && "pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none"
3287
3419
  ),
3288
3420
  inert: isCollapsed ? true : void 0,
3289
3421
  children: [
@@ -3309,7 +3441,7 @@ function IssueManagerSidebar({
3309
3441
  /* @__PURE__ */ jsx13(
3310
3442
  "div",
3311
3443
  {
3312
- className: cn8(
3444
+ className: cn10(
3313
3445
  "relative flex min-h-0 flex-col",
3314
3446
  isNarrowLayout ? "flex-none" : "flex-1"
3315
3447
  ),
@@ -3342,18 +3474,8 @@ function IssueManagerSidebar({
3342
3474
  }
3343
3475
 
3344
3476
  // src/ui/internal/shell/IssueManagerTaskComposerPane.tsx
3345
- import {
3346
- Button as Button10,
3347
- Input as Input4,
3348
- Select as Select2,
3349
- SelectContent as SelectContent2,
3350
- SelectItem as SelectItem2,
3351
- SelectTrigger as SelectTrigger2,
3352
- SelectValue,
3353
- UploadIcon
3354
- } from "@nextop-os/ui-system";
3477
+ import { Button as Button10, Input as Input4 } from "@nextop-os/ui-system";
3355
3478
  import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
3356
- var taskPriorityOptions = ["high", "medium", "low"];
3357
3479
  function IssueManagerTaskComposerPane({
3358
3480
  controller,
3359
3481
  onCancel,
@@ -3361,118 +3483,84 @@ function IssueManagerTaskComposerPane({
3361
3483
  }) {
3362
3484
  const copy = controller.copy;
3363
3485
  const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
3364
- const showAttachmentActions = controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;
3365
3486
  return /* @__PURE__ */ jsxs14("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
3366
- /* @__PURE__ */ jsx14("div", { className: "min-h-0 flex-1 overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs14("div", { className: "flex w-full max-w-[76rem] flex-col gap-8", children: [
3367
- /* @__PURE__ */ jsxs14("div", { className: "flex items-start justify-between gap-4", children: [
3368
- /* @__PURE__ */ jsx14("h2", { className: "text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") }),
3369
- /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-3", children: [
3370
- /* @__PURE__ */ jsx14("span", { className: "text-sm text-text-secondary", children: copy.t("labels.priority") }),
3371
- /* @__PURE__ */ jsxs14(
3372
- Select2,
3373
- {
3374
- value: controller.taskDraft.priority,
3375
- onValueChange: (value) => controller.setTaskPriority(value),
3376
- children: [
3377
- /* @__PURE__ */ jsx14(
3378
- SelectTrigger2,
3379
- {
3380
- "aria-label": copy.t("labels.priority"),
3381
- className: "min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm",
3382
- children: /* @__PURE__ */ jsx14(SelectValue, {})
3383
- }
3384
- ),
3385
- /* @__PURE__ */ jsx14(SelectContent2, { style: { zIndex: "var(--z-panel-popover)" }, children: taskPriorityOptions.map((priority) => /* @__PURE__ */ jsx14(SelectItem2, { value: priority, children: resolveIssueManagerPriorityLabel(copy, priority) }, priority)) })
3386
- ]
3387
- }
3388
- )
3389
- ] })
3390
- ] }),
3391
- /* @__PURE__ */ jsxs14("label", { className: "grid gap-2", children: [
3392
- /* @__PURE__ */ jsx14("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.title") }),
3393
- /* @__PURE__ */ jsx14(
3394
- Input4,
3487
+ /* @__PURE__ */ jsx14("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs14("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
3488
+ /* @__PURE__ */ jsx14(
3489
+ "div",
3490
+ {
3491
+ className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
3492
+ children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
3493
+ }
3494
+ ),
3495
+ /* @__PURE__ */ jsxs14("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
3496
+ /* @__PURE__ */ jsxs14(
3497
+ "label",
3498
+ {
3499
+ className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
3500
+ children: [
3501
+ /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
3502
+ /* @__PURE__ */ jsx14(
3503
+ Input4,
3504
+ {
3505
+ placeholder: copy.t("composer.subtaskTitlePlaceholder"),
3506
+ variant: "md",
3507
+ value: controller.taskDraft.title,
3508
+ onChange: (event) => controller.setTaskTitle(event.target.value)
3509
+ }
3510
+ )
3511
+ ]
3512
+ }
3513
+ ),
3514
+ /* @__PURE__ */ jsxs14(
3515
+ "div",
3395
3516
  {
3396
- className: "h-10 rounded-lg border-0 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]",
3397
- placeholder: copy.t("composer.subtaskTitlePlaceholder"),
3398
- value: controller.taskDraft.title,
3399
- onChange: (event) => controller.setTaskTitle(event.target.value)
3517
+ className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
3518
+ children: [
3519
+ /* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
3520
+ /* @__PURE__ */ jsx14(
3521
+ IssueManagerRichTextTextarea,
3522
+ {
3523
+ controller,
3524
+ surface: "task",
3525
+ textareaClassName: "min-h-[180px] resize-none",
3526
+ placeholder: copy.t("composer.subtaskContentPlaceholder"),
3527
+ value: controller.taskDraft.content,
3528
+ onChange: controller.setTaskContent
3529
+ }
3530
+ )
3531
+ ]
3400
3532
  }
3401
3533
  )
3402
- ] }),
3403
- /* @__PURE__ */ jsxs14("section", { className: "grid gap-2", children: [
3404
- /* @__PURE__ */ jsx14("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.requirementDescription") }),
3405
- /* @__PURE__ */ jsxs14("div", { className: "overflow-hidden rounded-lg border border-border-1 bg-transparency-block", children: [
3534
+ ] })
3535
+ ] }) }),
3536
+ /* @__PURE__ */ jsx14(
3537
+ "div",
3538
+ {
3539
+ className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
3540
+ children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-end gap-3", children: [
3406
3541
  /* @__PURE__ */ jsx14(
3407
- IssueManagerRichTextTextarea,
3542
+ Button10,
3408
3543
  {
3409
- controller,
3410
- surface: "task",
3411
- textareaClassName: "min-h-[20rem] w-full resize-none border-0 bg-transparent px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]",
3412
- placeholder: copy.t("composer.subtaskContentPlaceholder"),
3413
- value: controller.taskDraft.content,
3414
- onChange: controller.setTaskContent
3544
+ size: "default",
3545
+ type: "button",
3546
+ variant: "secondary",
3547
+ onClick: onCancel,
3548
+ children: copy.t("actions.cancel")
3415
3549
  }
3416
3550
  ),
3417
- showAttachmentActions ? /* @__PURE__ */ jsxs14("div", { className: "flex flex-wrap items-center gap-3 border-t border-border-1 px-4 py-3", children: [
3418
- controller.canUploadWorkspaceFiles ? /* @__PURE__ */ jsxs14(
3419
- Button10,
3420
- {
3421
- className: "px-3",
3422
- size: "dialog",
3423
- type: "button",
3424
- variant: "secondary",
3425
- onClick: () => {
3426
- void controller.uploadReferences("task", "files");
3427
- },
3428
- children: [
3429
- /* @__PURE__ */ jsx14(UploadIcon, { size: 16 }),
3430
- copy.t("actions.uploadFiles")
3431
- ]
3432
- }
3433
- ) : null,
3434
- controller.canUploadWorkspaceFiles ? /* @__PURE__ */ jsxs14(
3435
- Button10,
3436
- {
3437
- className: "px-3",
3438
- size: "dialog",
3439
- type: "button",
3440
- variant: "secondary",
3441
- onClick: () => {
3442
- void controller.uploadReferences("task", "folder");
3443
- },
3444
- children: [
3445
- /* @__PURE__ */ jsx14(UploadIcon, { size: 16 }),
3446
- copy.t("actions.uploadFolder")
3447
- ]
3448
- }
3449
- ) : null
3450
- ] }) : null
3551
+ /* @__PURE__ */ jsx14(
3552
+ Button10,
3553
+ {
3554
+ disabled: !selectedIssue || isTaskTitleMissing,
3555
+ size: "default",
3556
+ type: "button",
3557
+ onClick: () => void controller.saveTask(),
3558
+ children: copy.t("actions.saveSubtask")
3559
+ }
3560
+ )
3451
3561
  ] })
3452
- ] })
3453
- ] }) }),
3454
- /* @__PURE__ */ jsx14("div", { className: "shrink-0 border-t border-border-1 px-7 py-4", children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-end gap-3", children: [
3455
- /* @__PURE__ */ jsx14(
3456
- Button10,
3457
- {
3458
- size: "default",
3459
- type: "button",
3460
- variant: "secondary",
3461
- onClick: onCancel,
3462
- children: copy.t("actions.cancel")
3463
- }
3464
- ),
3465
- /* @__PURE__ */ jsx14(
3466
- Button10,
3467
- {
3468
- disabled: !selectedIssue || isTaskTitleMissing,
3469
- size: "default",
3470
- type: "button",
3471
- onClick: () => void controller.saveTask(),
3472
- children: copy.t("actions.saveSubtask")
3473
- }
3474
- )
3475
- ] }) })
3562
+ }
3563
+ )
3476
3564
  ] });
3477
3565
  }
3478
3566
 
@@ -3489,16 +3577,16 @@ import {
3489
3577
  DropdownMenuItem,
3490
3578
  DropdownMenuTrigger,
3491
3579
  Input as Input5,
3492
- Select as Select3,
3493
- SelectContent as SelectContent3,
3494
- SelectItem as SelectItem3,
3495
- SelectTrigger as SelectTrigger3,
3496
- SelectValue as SelectValue2,
3580
+ Select as Select2,
3581
+ SelectContent as SelectContent2,
3582
+ SelectItem as SelectItem2,
3583
+ SelectTrigger as SelectTrigger2,
3584
+ SelectValue,
3497
3585
  SparkIcon as SparkIcon2
3498
3586
  } from "@nextop-os/ui-system";
3499
3587
 
3500
3588
  // src/ui/internal/content/IssueManagerContextSection.tsx
3501
- import { Button as Button11, DirectoryIcon as DirectoryIcon3, FileIcon as FileIcon3 } from "@nextop-os/ui-system";
3589
+ import { Button as Button11, DirectoryIcon, FileIcon as FileIcon3 } from "@nextop-os/ui-system";
3502
3590
  import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
3503
3591
  function IssueManagerContextSection({
3504
3592
  copy,
@@ -3523,7 +3611,7 @@ function IssueManagerContextSection({
3523
3611
  }
3524
3612
  )
3525
3613
  ] }),
3526
- refs.length === 0 ? /* @__PURE__ */ jsx15("p", { className: "text-sm leading-5 text-text-secondary", children: emptyLabel }) : /* @__PURE__ */ jsx15("div", { className: "grid gap-2.5", children: refs.map((ref) => /* @__PURE__ */ jsxs15(
3614
+ refs.length === 0 ? /* @__PURE__ */ jsx15("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: emptyLabel }) : /* @__PURE__ */ jsx15("div", { className: "grid gap-2.5", children: refs.map((ref) => /* @__PURE__ */ jsxs15(
3527
3615
  "div",
3528
3616
  {
3529
3617
  className: "flex items-center justify-between gap-3 rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
@@ -3542,21 +3630,21 @@ function IssueManagerContextSection({
3542
3630
  },
3543
3631
  children: [
3544
3632
  ref.path.endsWith("/") ? /* @__PURE__ */ jsx15(
3545
- DirectoryIcon3,
3633
+ DirectoryIcon,
3546
3634
  {
3547
- className: "shrink-0 text-text-secondary",
3635
+ className: "shrink-0 text-[var(--text-secondary)]",
3548
3636
  size: 16
3549
3637
  }
3550
3638
  ) : /* @__PURE__ */ jsx15(
3551
3639
  FileIcon3,
3552
3640
  {
3553
- className: "shrink-0 text-text-secondary",
3641
+ className: "shrink-0 text-[var(--text-secondary)]",
3554
3642
  size: 16
3555
3643
  }
3556
3644
  ),
3557
3645
  /* @__PURE__ */ jsxs15("span", { className: "min-w-0", children: [
3558
3646
  /* @__PURE__ */ jsx15("span", { className: "block truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: ref.displayName }),
3559
- /* @__PURE__ */ jsx15("span", { className: "block truncate text-xs leading-[1.55] text-text-secondary", children: ref.path })
3647
+ /* @__PURE__ */ jsx15("span", { className: "block truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: ref.path })
3560
3648
  ] })
3561
3649
  ]
3562
3650
  }
@@ -3564,7 +3652,7 @@ function IssueManagerContextSection({
3564
3652
  /* @__PURE__ */ jsx15(
3565
3653
  Button11,
3566
3654
  {
3567
- className: "h-7 rounded-md px-2 text-[13px] font-semibold text-text-secondary hover:text-[var(--text-primary)]",
3655
+ className: "h-7 rounded-md px-2 text-[13px] font-semibold text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
3568
3656
  size: "sm",
3569
3657
  type: "button",
3570
3658
  variant: "ghost",
@@ -3613,7 +3701,7 @@ function canIssueManagerSaveTask(input) {
3613
3701
 
3614
3702
  // src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
3615
3703
  import { Fragment, jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
3616
- var taskPriorityOptions2 = ["high", "medium", "low"];
3704
+ var taskPriorityOptions = ["high", "medium", "low"];
3617
3705
  function IssueManagerTaskDrawerHeader({
3618
3706
  controller,
3619
3707
  selectedTask,
@@ -3624,10 +3712,10 @@ function IssueManagerTaskDrawerHeader({
3624
3712
  return /* @__PURE__ */ jsxs16("div", { className: "flex items-start justify-between gap-4 border-b border-border-1 px-7 py-5", children: [
3625
3713
  /* @__PURE__ */ jsxs16("div", { className: "min-w-0 flex-1", children: [
3626
3714
  view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsx16("div", { className: "grid min-w-0 gap-2", children: /* @__PURE__ */ jsx16("h3", { className: "line-clamp-3 text-sm font-semibold leading-[1.35] text-[var(--text-primary)]", children: view.title }) }) : /* @__PURE__ */ jsx16("h3", { className: "line-clamp-2 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: view.title }),
3627
- view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs16("div", { className: "mt-2 flex min-w-0 items-center overflow-hidden text-sm leading-[1.55] text-text-secondary", children: [
3715
+ view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs16("div", { className: "mt-2 flex min-w-0 items-center overflow-hidden text-sm leading-[1.55] text-[var(--text-secondary)]", children: [
3628
3716
  /* @__PURE__ */ jsx16(Badge6, { className: "shrink-0 rounded-full border-transparent bg-[var(--accent-bg)] px-2.5 py-1 text-xs text-[var(--text-primary)]", children: resolveIssueManagerStatusLabel(copy, selectedTask.status) }),
3629
3717
  /* @__PURE__ */ jsx16("span", { className: "mx-3 h-[13px] w-px shrink-0 bg-border-1" }),
3630
- /* @__PURE__ */ jsx16(Badge6, { className: "shrink-0 rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary", children: resolveIssueManagerPriorityLabel(copy, selectedTask.priority) }),
3718
+ /* @__PURE__ */ jsx16(Badge6, { className: "shrink-0 rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-[var(--text-secondary)]", children: resolveIssueManagerPriorityLabel(copy, selectedTask.priority) }),
3631
3719
  /* @__PURE__ */ jsx16("span", { className: "mx-3 h-[13px] w-px shrink-0 bg-border-1" }),
3632
3720
  /* @__PURE__ */ jsxs16("span", { children: [
3633
3721
  copy.t("labels.updatedAt"),
@@ -3653,7 +3741,7 @@ function IssueManagerTaskDrawerHeader({
3653
3741
  "span",
3654
3742
  {
3655
3743
  "aria-hidden": "true",
3656
- className: "text-base leading-none tracking-[0.18em] text-text-secondary",
3744
+ className: "text-base leading-none tracking-[0.18em] text-[var(--text-secondary)]",
3657
3745
  children: "..."
3658
3746
  }
3659
3747
  )
@@ -3732,65 +3820,89 @@ function IssueManagerTaskDrawerEditBody({
3732
3820
  const copy = controller.copy;
3733
3821
  return /* @__PURE__ */ jsxs16(Fragment, { children: [
3734
3822
  /* @__PURE__ */ jsxs16("div", { className: "grid gap-5", children: [
3735
- /* @__PURE__ */ jsxs16("label", { className: "grid gap-2", children: [
3736
- /* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.title") }),
3737
- /* @__PURE__ */ jsx16(
3738
- Input5,
3739
- {
3740
- className: "h-10 rounded-lg border-border-1 bg-transparency-block text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]",
3741
- placeholder: copy.t("composer.taskTitlePlaceholder"),
3742
- value: controller.taskDraft.title,
3743
- onChange: (event) => controller.setTaskTitle(event.target.value)
3744
- }
3745
- )
3746
- ] }),
3747
- /* @__PURE__ */ jsx16("div", { className: "flex flex-wrap items-center gap-3", children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
3748
- /* @__PURE__ */ jsx16("span", { className: "text-sm font-medium text-text-secondary", children: copy.t("labels.priority") }),
3749
- /* @__PURE__ */ jsxs16(
3750
- Select3,
3751
- {
3752
- value: controller.taskDraft.priority,
3753
- onValueChange: (value) => controller.setTaskPriority(value),
3754
- children: [
3755
- /* @__PURE__ */ jsx16(
3756
- SelectTrigger3,
3757
- {
3758
- "aria-label": copy.t("labels.priority"),
3759
- className: "min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm",
3760
- children: /* @__PURE__ */ jsx16(SelectValue2, {})
3761
- }
3762
- ),
3763
- /* @__PURE__ */ jsx16(SelectContent3, { style: { zIndex: "var(--z-panel-popover)" }, children: taskPriorityOptions2.map((priority) => /* @__PURE__ */ jsx16(SelectItem3, { value: priority, children: resolveIssueManagerPriorityLabel(copy, priority) }, priority)) })
3764
- ]
3765
- }
3766
- )
3767
- ] }) }),
3768
- /* @__PURE__ */ jsxs16("div", { className: "grid gap-2", children: [
3769
- /* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.content") }),
3770
- /* @__PURE__ */ jsx16(
3771
- IssueManagerRichTextTextarea,
3772
- {
3773
- controller,
3774
- surface: "task",
3775
- textareaClassName: "min-h-[12rem] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]",
3776
- placeholder: copy.t("composer.taskContentPlaceholder"),
3777
- value: controller.taskDraft.content,
3778
- onChange: controller.setTaskContent
3779
- }
3780
- )
3781
- ] })
3823
+ /* @__PURE__ */ jsxs16(
3824
+ "label",
3825
+ {
3826
+ className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
3827
+ children: [
3828
+ /* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.title") }),
3829
+ /* @__PURE__ */ jsx16(
3830
+ Input5,
3831
+ {
3832
+ placeholder: copy.t("composer.taskTitlePlaceholder"),
3833
+ variant: "md",
3834
+ value: controller.taskDraft.title,
3835
+ onChange: (event) => controller.setTaskTitle(event.target.value)
3836
+ }
3837
+ )
3838
+ ]
3839
+ }
3840
+ ),
3841
+ /* @__PURE__ */ jsx16(
3842
+ "div",
3843
+ {
3844
+ className: `flex flex-wrap items-center gap-3 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
3845
+ children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
3846
+ /* @__PURE__ */ jsx16("span", { className: "text-sm font-medium text-[var(--text-secondary)]", children: copy.t("labels.priority") }),
3847
+ /* @__PURE__ */ jsxs16(
3848
+ Select2,
3849
+ {
3850
+ value: controller.taskDraft.priority,
3851
+ onValueChange: (value) => controller.setTaskPriority(value),
3852
+ children: [
3853
+ /* @__PURE__ */ jsx16(
3854
+ SelectTrigger2,
3855
+ {
3856
+ "aria-label": copy.t("labels.priority"),
3857
+ className: "min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm",
3858
+ children: /* @__PURE__ */ jsx16(SelectValue, {})
3859
+ }
3860
+ ),
3861
+ /* @__PURE__ */ jsx16(SelectContent2, { style: { zIndex: "var(--z-panel-popover)" }, children: taskPriorityOptions.map((priority) => /* @__PURE__ */ jsx16(SelectItem2, { value: priority, children: resolveIssueManagerPriorityLabel(copy, priority) }, priority)) })
3862
+ ]
3863
+ }
3864
+ )
3865
+ ] })
3866
+ }
3867
+ ),
3868
+ /* @__PURE__ */ jsxs16(
3869
+ "div",
3870
+ {
3871
+ className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
3872
+ children: [
3873
+ /* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.content") }),
3874
+ /* @__PURE__ */ jsx16(
3875
+ IssueManagerRichTextTextarea,
3876
+ {
3877
+ controller,
3878
+ surface: "task",
3879
+ textareaClassName: "min-h-[12rem] resize-none",
3880
+ placeholder: copy.t("composer.taskContentPlaceholder"),
3881
+ value: controller.taskDraft.content,
3882
+ onChange: controller.setTaskContent
3883
+ }
3884
+ )
3885
+ ]
3886
+ }
3887
+ )
3782
3888
  ] }),
3783
3889
  /* @__PURE__ */ jsx16(
3784
- IssueManagerContextSection,
3890
+ "div",
3785
3891
  {
3786
- copy,
3787
- emptyLabel: copy.t("messages.noTaskReferences"),
3788
- refs: taskRefs,
3789
- onAdd: () => {
3790
- void controller.attachReferences("task");
3791
- },
3792
- onOpen: controller.openReference,
3793
- onRemove: controller.removeContextRef
3892
+ className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay3ClassName}`,
3893
+ children: /* @__PURE__ */ jsx16(
3894
+ IssueManagerContextSection,
3895
+ {
3896
+ copy,
3897
+ emptyLabel: copy.t("messages.noTaskReferences"),
3898
+ refs: taskRefs,
3899
+ onAdd: () => {
3900
+ void controller.attachReferences("task");
3901
+ },
3902
+ onOpen: controller.openReference,
3903
+ onRemove: controller.removeContextRef
3904
+ }
3905
+ )
3794
3906
  }
3795
3907
  ),
3796
3908
  !isCreate ? /* @__PURE__ */ jsx16(
@@ -3859,7 +3971,7 @@ function IssueManagerTaskDrawerFooter({
3859
3971
  {
3860
3972
  controller,
3861
3973
  iconSize: 15,
3862
- triggerClassName: "min-w-[11rem] rounded-lg border-border-1 bg-transparency-block px-3.5 py-2 text-sm"
3974
+ triggerClassName: "min-w-[11rem]"
3863
3975
  }
3864
3976
  ),
3865
3977
  controller.canInviteCollaborators ? /* @__PURE__ */ jsx16(
@@ -3877,48 +3989,54 @@ function IssueManagerTaskDrawerFooter({
3877
3989
  ] }) });
3878
3990
  }
3879
3991
  if (view.showEditFooter) {
3880
- return /* @__PURE__ */ jsx16("div", { className: "border-t border-border-1 px-7 py-4", children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between gap-3", children: [
3881
- /* @__PURE__ */ jsx16("div", { className: "flex items-center gap-2", children: !view.isCreate && selectedTask ? /* @__PURE__ */ jsx16(
3882
- Button12,
3883
- {
3884
- size: "default",
3885
- type: "button",
3886
- variant: "destructive",
3887
- onClick: () => {
3888
- void controller.deleteTask();
3889
- },
3890
- children: copy.t("actions.deleteTask")
3891
- }
3892
- ) : null }),
3893
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
3894
- /* @__PURE__ */ jsx16(
3895
- Button12,
3896
- {
3897
- size: "default",
3898
- type: "button",
3899
- variant: "secondary",
3900
- onClick: () => controller.setTaskEditorMode("read"),
3901
- children: copy.t("actions.cancel")
3902
- }
3903
- ),
3904
- /* @__PURE__ */ jsxs16(
3905
- Button12,
3906
- {
3907
- disabled: canIssueManagerSaveTask({
3908
- selectedIssue,
3909
- view
3910
- }) === false,
3911
- size: "default",
3912
- type: "button",
3913
- onClick: () => void controller.saveTask(),
3914
- children: [
3915
- /* @__PURE__ */ jsx16(SparkIcon2, { size: 16 }),
3916
- copy.t("actions.saveTask")
3917
- ]
3918
- }
3919
- )
3920
- ] })
3921
- ] }) });
3992
+ return /* @__PURE__ */ jsx16(
3993
+ "div",
3994
+ {
3995
+ className: `border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
3996
+ children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between gap-3", children: [
3997
+ /* @__PURE__ */ jsx16("div", { className: "flex items-center gap-2", children: !view.isCreate && selectedTask ? /* @__PURE__ */ jsx16(
3998
+ Button12,
3999
+ {
4000
+ size: "default",
4001
+ type: "button",
4002
+ variant: "destructive",
4003
+ onClick: () => {
4004
+ void controller.deleteTask();
4005
+ },
4006
+ children: copy.t("actions.deleteTask")
4007
+ }
4008
+ ) : null }),
4009
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
4010
+ /* @__PURE__ */ jsx16(
4011
+ Button12,
4012
+ {
4013
+ size: "default",
4014
+ type: "button",
4015
+ variant: "secondary",
4016
+ onClick: () => controller.setTaskEditorMode("read"),
4017
+ children: copy.t("actions.cancel")
4018
+ }
4019
+ ),
4020
+ /* @__PURE__ */ jsxs16(
4021
+ Button12,
4022
+ {
4023
+ disabled: canIssueManagerSaveTask({
4024
+ selectedIssue,
4025
+ view
4026
+ }) === false,
4027
+ size: "default",
4028
+ type: "button",
4029
+ onClick: () => void controller.saveTask(),
4030
+ children: [
4031
+ /* @__PURE__ */ jsx16(SparkIcon2, { size: 16 }),
4032
+ copy.t("actions.saveTask")
4033
+ ]
4034
+ }
4035
+ )
4036
+ ] })
4037
+ ] })
4038
+ }
4039
+ );
3922
4040
  }
3923
4041
  return null;
3924
4042
  }
@@ -3984,27 +4102,27 @@ function IssueManagerTaskDrawer({
3984
4102
 
3985
4103
  // src/ui/internal/shell/useIssueManagerShellView.ts
3986
4104
  import {
3987
- useEffect as useEffect5,
4105
+ useEffect as useEffect7,
3988
4106
  useEffectEvent as useEffectEvent3,
3989
- useRef as useRef2,
3990
- useState as useState5
4107
+ useRef as useRef3,
4108
+ useState as useState8
3991
4109
  } from "react";
3992
4110
  function useIssueManagerShellView({
3993
4111
  controller,
3994
4112
  selectedIssue,
3995
4113
  selectedTask
3996
4114
  }) {
3997
- const layoutRef = useRef2(null);
3998
- const resizeRef = useRef2(null);
3999
- const [sidebarWidth, setSidebarWidth] = useState5(
4115
+ const layoutRef = useRef3(null);
4116
+ const resizeRef = useRef3(null);
4117
+ const [sidebarWidth, setSidebarWidth] = useState8(
4000
4118
  issueManagerSidebarDefaultWidth
4001
4119
  );
4002
- const [isNarrowLayout, setIsNarrowLayout] = useState5(false);
4120
+ const [isNarrowLayout, setIsNarrowLayout] = useState8(false);
4003
4121
  const dismissNotification = useEffectEvent3(() => {
4004
4122
  controller.dismissNotification();
4005
4123
  });
4006
4124
  const floatingNotice = controller.floatingNotice;
4007
- useEffect5(() => {
4125
+ useEffect7(() => {
4008
4126
  const publishLayout = () => {
4009
4127
  const width = layoutRef.current?.getBoundingClientRect().width ?? 0;
4010
4128
  if (!width) {
@@ -4027,7 +4145,7 @@ function useIssueManagerShellView({
4027
4145
  window.removeEventListener("resize", publishLayout);
4028
4146
  };
4029
4147
  }, []);
4030
- useEffect5(() => {
4148
+ useEffect7(() => {
4031
4149
  if (!floatingNotice) {
4032
4150
  return void 0;
4033
4151
  }
@@ -4048,7 +4166,7 @@ function useIssueManagerShellView({
4048
4166
  copy: controller.copy,
4049
4167
  issues: controller.issues
4050
4168
  });
4051
- const statusCounts = buildIssueManagerStatusCounts(controller.issues.value);
4169
+ const statusCounts = resolveIssueManagerStatusCounts(controller.issues);
4052
4170
  const isSidebarAutoCollapsed = isNarrowLayout;
4053
4171
  const isSidebarCollapsed = controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;
4054
4172
  return {
@@ -4057,6 +4175,7 @@ function useIssueManagerShellView({
4057
4175
  isNarrowLayout,
4058
4176
  layoutRef,
4059
4177
  layoutStyle: {
4178
+ gridTemplateColumns: isSidebarCollapsed ? "0 minmax(0, 1fr)" : "var(--issue-manager-sidebar-width) minmax(0, 1fr)",
4060
4179
  "--issue-manager-sidebar-width": `${sidebarWidth}px`
4061
4180
  },
4062
4181
  resizeHandle: {
@@ -4139,6 +4258,7 @@ function useIssueManagerShellView({
4139
4258
  import { jsx as jsx18, jsxs as jsxs18 } from "react/jsx-runtime";
4140
4259
  function IssueManagerShell({
4141
4260
  controller,
4261
+ emptyIllustration,
4142
4262
  onCloseTaskDrawer,
4143
4263
  onDismissIssueCreate,
4144
4264
  selectedIssue,
@@ -4152,7 +4272,7 @@ function IssueManagerShell({
4152
4272
  return /* @__PURE__ */ jsxs18(
4153
4273
  "div",
4154
4274
  {
4155
- className: "relative min-h-0 flex-1 overflow-hidden bg-transparent",
4275
+ className: "relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
4156
4276
  "data-issue-manager-sidebar-auto-collapsed": shellView.sidebar.isAutoCollapsed ? "true" : void 0,
4157
4277
  "data-issue-manager-sidebar-collapsed": shellView.sidebar.isCollapsed ? "true" : void 0,
4158
4278
  ref: shellView.layoutRef,
@@ -4170,7 +4290,7 @@ function IssueManagerShell({
4170
4290
  statusCounts: shellView.sidebar.statusCounts
4171
4291
  }
4172
4292
  ),
4173
- shellView.sidebar.isCollapsed ? null : /* @__PURE__ */ jsx18(
4293
+ shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx18(
4174
4294
  "div",
4175
4295
  {
4176
4296
  "aria-label": controller.copy.t("labels.resizeIssueList"),
@@ -4178,7 +4298,10 @@ function IssueManagerShell({
4178
4298
  "aria-valuemax": shellView.resizeHandle.ariaValueMax,
4179
4299
  "aria-valuemin": shellView.resizeHandle.ariaValueMin,
4180
4300
  "aria-valuenow": shellView.resizeHandle.ariaValueNow,
4181
- className: "group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none",
4301
+ className: cn11(
4302
+ "group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none opacity-100 transition-[left,opacity] duration-[180ms,120ms] ease-[cubic-bezier(0.4,0,0.2,1),ease] motion-reduce:transition-none",
4303
+ shellView.sidebar.isCollapsed && "pointer-events-none left-[-6px] opacity-0"
4304
+ ),
4182
4305
  role: "separator",
4183
4306
  tabIndex: 0,
4184
4307
  onKeyDown: shellView.resizeHandle.onKeyDown,
@@ -4189,78 +4312,79 @@ function IssueManagerShell({
4189
4312
  children: /* @__PURE__ */ jsx18("span", { className: "absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]" })
4190
4313
  }
4191
4314
  ),
4192
- /* @__PURE__ */ jsxs18(
4193
- "div",
4194
- {
4195
- className: cn9(
4196
- "relative min-h-0 h-full overflow-hidden bg-transparent",
4197
- !shellView.sidebar.isCollapsed && "pl-[var(--issue-manager-sidebar-width)]"
4198
- ),
4199
- children: [
4200
- /* @__PURE__ */ jsxs18("div", { className: "flex h-full min-h-0 flex-col", children: [
4201
- /* @__PURE__ */ jsx18("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx18(
4202
- IssueManagerIssuePane,
4203
- {
4204
- controller,
4205
- selectedIssue,
4206
- onDismissCreate: onDismissIssueCreate
4207
- }
4208
- ) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx18(
4209
- IssueManagerTaskComposerPane,
4210
- {
4211
- controller,
4212
- selectedIssue,
4213
- onCancel: () => controller.setTaskEditorMode("read")
4214
- }
4215
- ) : selectedIssue ? /* @__PURE__ */ jsx18(
4216
- IssueManagerIssuePane,
4217
- {
4218
- controller,
4219
- selectedIssue,
4220
- onDismissCreate: onDismissIssueCreate
4221
- }
4222
- ) : /* @__PURE__ */ jsx18(IssueManagerShellEmptyState, { controller }) }),
4223
- /* @__PURE__ */ jsx18(
4224
- IssueManagerBottomBar,
4225
- {
4226
- controller,
4227
- isNarrowLayout: shellView.isNarrowLayout,
4228
- selectedIssue,
4229
- selectedTask,
4230
- visible: shellView.content.showBottomBar
4231
- }
4232
- )
4233
- ] }),
4234
- shellView.content.isTaskDrawerOpen ? /* @__PURE__ */ jsx18(
4235
- IssueManagerTaskDrawer,
4236
- {
4237
- controller,
4238
- selectedIssue,
4239
- selectedTask,
4240
- onClose: onCloseTaskDrawer
4241
- }
4242
- ) : null
4243
- ]
4244
- }
4245
- )
4315
+ /* @__PURE__ */ jsxs18("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent", children: [
4316
+ /* @__PURE__ */ jsxs18("div", { className: "flex h-full min-h-0 flex-col", children: [
4317
+ /* @__PURE__ */ jsx18("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx18(
4318
+ IssueManagerIssuePane,
4319
+ {
4320
+ controller,
4321
+ selectedIssue,
4322
+ onDismissCreate: onDismissIssueCreate
4323
+ }
4324
+ ) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx18(
4325
+ IssueManagerTaskComposerPane,
4326
+ {
4327
+ controller,
4328
+ selectedIssue,
4329
+ onCancel: () => controller.setTaskEditorMode("read")
4330
+ }
4331
+ ) : selectedIssue ? /* @__PURE__ */ jsx18(
4332
+ IssueManagerIssuePane,
4333
+ {
4334
+ controller,
4335
+ selectedIssue,
4336
+ onDismissCreate: onDismissIssueCreate
4337
+ }
4338
+ ) : /* @__PURE__ */ jsx18(
4339
+ IssueManagerShellEmptyState,
4340
+ {
4341
+ controller,
4342
+ emptyIllustration
4343
+ }
4344
+ ) }),
4345
+ /* @__PURE__ */ jsx18(
4346
+ IssueManagerBottomBar,
4347
+ {
4348
+ controller,
4349
+ isNarrowLayout: shellView.isNarrowLayout,
4350
+ selectedIssue,
4351
+ selectedTask,
4352
+ visible: shellView.content.showBottomBar
4353
+ }
4354
+ )
4355
+ ] }),
4356
+ shellView.content.isTaskDrawerOpen ? /* @__PURE__ */ jsx18(
4357
+ IssueManagerTaskDrawer,
4358
+ {
4359
+ controller,
4360
+ selectedIssue,
4361
+ selectedTask,
4362
+ onClose: onCloseTaskDrawer
4363
+ }
4364
+ ) : null
4365
+ ] })
4246
4366
  ]
4247
4367
  }
4248
4368
  );
4249
4369
  }
4250
4370
  function IssueManagerShellEmptyState({
4251
- controller
4371
+ controller,
4372
+ emptyIllustration
4252
4373
  }) {
4253
4374
  return /* @__PURE__ */ jsx18("div", { className: "flex h-full min-h-[320px] items-center justify-center px-10 py-10", children: /* @__PURE__ */ jsxs18("div", { className: "grid max-w-[420px] justify-items-center gap-2 text-center", children: [
4254
- /* @__PURE__ */ jsx18(IssueManagerEmptyIllustration, {}),
4375
+ emptyIllustration ?? null,
4255
4376
  /* @__PURE__ */ jsx18("h2", { className: "text-lg font-semibold leading-[1.35] text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
4256
4377
  /* @__PURE__ */ jsx18("p", { className: "max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
4257
- /* @__PURE__ */ jsx18(
4378
+ /* @__PURE__ */ jsxs18(
4258
4379
  Button13,
4259
4380
  {
4260
- className: "mt-2",
4381
+ className: "mt-2 gap-2",
4261
4382
  type: "button",
4262
4383
  onClick: () => controller.setIssueEditorMode("create"),
4263
- children: controller.copy.t("actions.createIssue")
4384
+ children: [
4385
+ /* @__PURE__ */ jsx18(FileCreateIcon4, { size: 16 }),
4386
+ controller.copy.t("actions.createIssue")
4387
+ ]
4264
4388
  }
4265
4389
  )
4266
4390
  ] }) });
@@ -4269,6 +4393,7 @@ function IssueManagerShellEmptyState({
4269
4393
  // src/ui/IssueManagerNode.tsx
4270
4394
  import { jsx as jsx19, jsxs as jsxs19 } from "react/jsx-runtime";
4271
4395
  function IssueManagerNode({
4396
+ emptyIllustration,
4272
4397
  feature,
4273
4398
  nodeId,
4274
4399
  onStateChange,
@@ -4298,6 +4423,7 @@ function IssueManagerNode({
4298
4423
  IssueManagerShell,
4299
4424
  {
4300
4425
  controller,
4426
+ emptyIllustration,
4301
4427
  onCloseTaskDrawer: shell.onCloseTaskDrawer,
4302
4428
  onDismissIssueCreate: shell.onDismissIssueCreate,
4303
4429
  selectedIssue,
@@ -4341,7 +4467,7 @@ function IssueManagerNodeHeader({
4341
4467
  "header",
4342
4468
  {
4343
4469
  ...headerProps,
4344
- className: cn10(
4470
+ className: cn12(
4345
4471
  "flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3",
4346
4472
  className
4347
4473
  ),
@@ -4352,13 +4478,13 @@ function IssueManagerNodeHeader({
4352
4478
  Button14,
4353
4479
  {
4354
4480
  "aria-label": toggleLabel,
4355
- className: "rounded-md",
4481
+ className: "cursor-pointer rounded-md",
4356
4482
  "data-issue-manager-sidebar-auto-collapsed": isSidebarAutoCollapsed ? "true" : void 0,
4357
4483
  "data-issue-manager-sidebar-collapsed": effectiveCollapsed ? "true" : void 0,
4358
4484
  size: "icon-sm",
4359
4485
  title: toggleLabel,
4360
4486
  type: "button",
4361
- variant: "chrome",
4487
+ variant: "ghost",
4362
4488
  onClick: (event) => {
4363
4489
  event.stopPropagation();
4364
4490
  toggleSidebar();
@@ -4388,4 +4514,4 @@ export {
4388
4514
  IssueManagerNode,
4389
4515
  IssueManagerNodeHeader
4390
4516
  };
4391
- //# sourceMappingURL=chunk-XI6VLBSW.js.map
4517
+ //# sourceMappingURL=chunk-PDBLEOV4.js.map