@nextop-os/workspace-issue-manager 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZQVG7YMT.js → chunk-34KSO5F6.js} +11 -4
- package/dist/chunk-34KSO5F6.js.map +1 -0
- package/dist/{chunk-5Y5GVLKU.js → chunk-JOUBY4J6.js} +57 -57
- package/dist/chunk-JOUBY4J6.js.map +1 -0
- package/dist/{chunk-DMC3JMM2.js → chunk-K3F67IRA.js} +673 -557
- package/dist/chunk-K3F67IRA.js.map +1 -0
- package/dist/{chunk-V75TAM27.js → chunk-RJ6HZRQU.js} +23 -2
- package/dist/chunk-RJ6HZRQU.js.map +1 -0
- package/dist/core/index.d.ts +6 -1
- package/dist/core/index.js +6 -2
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -3
- package/dist/{issueManagerControllerService.interface-B_Jr7Xw_.d.ts → issueManagerControllerService.interface-BtvnnFla.d.ts} +3 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.js +3 -3
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +4 -4
- package/dist/workbench/index.d.ts +3 -2
- package/dist/workbench/index.js +8 -17
- package/dist/workbench/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/chunk-5Y5GVLKU.js.map +0 -1
- package/dist/chunk-DMC3JMM2.js.map +0 -1
- package/dist/chunk-V75TAM27.js.map +0 -1
- package/dist/chunk-ZQVG7YMT.js.map +0 -1
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
toContextRefInput,
|
|
26
26
|
toIssueManagerWorkspaceFileLinkInput,
|
|
27
27
|
uniqueIssueManagerFileReferences
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-34KSO5F6.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-
|
|
39
|
+
} from "./chunk-RJ6HZRQU.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
|
|
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 {
|
|
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 {
|
|
1682
1687
|
ArrowRightIcon,
|
|
1683
1688
|
Button,
|
|
1684
1689
|
CheckIcon,
|
|
1685
|
-
DirectoryIcon,
|
|
1686
1690
|
FileIcon,
|
|
1691
|
+
FolderFilledIcon,
|
|
1687
1692
|
Input,
|
|
1688
|
-
LoadingIcon,
|
|
1689
1693
|
ScrollArea,
|
|
1690
1694
|
SearchIcon,
|
|
1695
|
+
Spinner,
|
|
1691
1696
|
cn
|
|
1692
1697
|
} from "@nextop-os/ui-system";
|
|
1698
|
+
import { AddIcon as AddLinedIcon } from "@nextop-os/ui-system/icons";
|
|
1693
1699
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1694
|
-
var issueManagerReferenceTreeIndent =
|
|
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-
|
|
1712
|
-
/* @__PURE__ */ jsx("div", { className: "
|
|
1713
|
-
/* @__PURE__ */ jsx(SearchIcon, { className: "pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-
|
|
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
|
-
|
|
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(
|
|
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-
|
|
1777
|
-
focused || selected ? "bg-transparency-block" : "hover:bg-transparency-block
|
|
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-
|
|
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,51 @@ function IssueManagerReferencePickerTreeEntry({
|
|
|
1810
1868
|
}
|
|
1811
1869
|
},
|
|
1812
1870
|
children: [
|
|
1813
|
-
isFolder ? /* @__PURE__ */ jsx(
|
|
1814
|
-
/* @__PURE__ */ jsx("span", { className: "truncate text-sm text-
|
|
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
|
-
|
|
1879
|
+
"aria-label": resolveIssueManagerReferenceLabel(entry),
|
|
1880
|
+
"aria-pressed": selected,
|
|
1881
|
+
size: "icon-sm",
|
|
1822
1882
|
type: "button",
|
|
1823
|
-
variant:
|
|
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(AddLinedIcon, { size: 16 })
|
|
1829
1889
|
}
|
|
1830
1890
|
)
|
|
1831
1891
|
]
|
|
1832
1892
|
}
|
|
1833
1893
|
),
|
|
1834
|
-
isFolder
|
|
1894
|
+
isFolder ? /* @__PURE__ */ jsx(
|
|
1835
1895
|
"div",
|
|
1836
1896
|
{
|
|
1837
|
-
className:
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
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
|
+
childContent && "mt-[2px]"
|
|
1901
|
+
),
|
|
1902
|
+
children: /* @__PURE__ */ jsx(
|
|
1903
|
+
"div",
|
|
1904
|
+
{
|
|
1905
|
+
"aria-hidden": expanded ? void 0 : "true",
|
|
1906
|
+
className: cn(
|
|
1907
|
+
"min-h-0 overflow-hidden transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none",
|
|
1908
|
+
expanded ? "translate-y-0 opacity-100" : "-translate-y-1 opacity-0"
|
|
1909
|
+
),
|
|
1910
|
+
inert: expanded ? void 0 : true,
|
|
1911
|
+
children: childContent
|
|
1912
|
+
}
|
|
1913
|
+
)
|
|
1869
1914
|
}
|
|
1870
|
-
) : null
|
|
1915
|
+
) : null
|
|
1871
1916
|
] });
|
|
1872
1917
|
}
|
|
1873
1918
|
function IssueManagerReferencePickerSearchEntry({
|
|
@@ -1882,8 +1927,8 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1882
1927
|
"div",
|
|
1883
1928
|
{
|
|
1884
1929
|
className: cn(
|
|
1885
|
-
"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-
|
|
1886
|
-
focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block
|
|
1930
|
+
"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-[6px] border py-2.5 pr-1 pl-3 transition-colors",
|
|
1931
|
+
focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block"
|
|
1887
1932
|
),
|
|
1888
1933
|
children: [
|
|
1889
1934
|
/* @__PURE__ */ jsxs(
|
|
@@ -1893,10 +1938,10 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1893
1938
|
type: "button",
|
|
1894
1939
|
onClick: () => onFocusPath(entry.path),
|
|
1895
1940
|
children: [
|
|
1896
|
-
/* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-
|
|
1941
|
+
/* @__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
1942
|
/* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
|
|
1898
|
-
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-
|
|
1899
|
-
/* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-
|
|
1943
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(entry) }),
|
|
1944
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--text-secondary)]", children: entry.path })
|
|
1900
1945
|
] })
|
|
1901
1946
|
]
|
|
1902
1947
|
}
|
|
@@ -1904,14 +1949,16 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1904
1949
|
/* @__PURE__ */ jsx(
|
|
1905
1950
|
Button,
|
|
1906
1951
|
{
|
|
1907
|
-
|
|
1952
|
+
"aria-label": resolveIssueManagerReferenceLabel(entry),
|
|
1953
|
+
"aria-pressed": selected,
|
|
1954
|
+
size: "icon-sm",
|
|
1908
1955
|
type: "button",
|
|
1909
|
-
variant:
|
|
1956
|
+
variant: "ghost",
|
|
1910
1957
|
onClick: () => {
|
|
1911
1958
|
onFocusPath(entry.path);
|
|
1912
1959
|
onToggleRef(entry);
|
|
1913
1960
|
},
|
|
1914
|
-
children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) :
|
|
1961
|
+
children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : /* @__PURE__ */ jsx(AddLinedIcon, { size: 16 })
|
|
1915
1962
|
}
|
|
1916
1963
|
)
|
|
1917
1964
|
]
|
|
@@ -1921,7 +1968,7 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1921
1968
|
function IssueManagerReferencePickerFeedback({
|
|
1922
1969
|
children
|
|
1923
1970
|
}) {
|
|
1924
|
-
return /* @__PURE__ */ jsx("div", { className: "grid min-h-
|
|
1971
|
+
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
1972
|
}
|
|
1926
1973
|
function resolveIssueManagerReferenceLabel(ref) {
|
|
1927
1974
|
return ref.displayName || ref.path.split("/").filter(Boolean).at(-1) || ref.path;
|
|
@@ -1929,19 +1976,20 @@ function resolveIssueManagerReferenceLabel(ref) {
|
|
|
1929
1976
|
|
|
1930
1977
|
// src/ui/internal/reference/IssueManagerReferencePickerSections.tsx
|
|
1931
1978
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1979
|
+
var issueManagerReferencePickerSelectedBadgeClassName = "max-w-[14rem] rounded-[4px] border-transparent bg-[var(--transparency-block)] text-[var(--text-primary)]";
|
|
1932
1980
|
function IssueManagerReferencePickerPreviewPane({
|
|
1933
1981
|
copy,
|
|
1934
1982
|
focusedEntry,
|
|
1935
1983
|
mode
|
|
1936
1984
|
}) {
|
|
1937
|
-
return /* @__PURE__ */ jsx2("aside", { className: "flex shrink-0 flex-col border-t border-
|
|
1938
|
-
/* @__PURE__ */
|
|
1939
|
-
|
|
1940
|
-
/* @__PURE__ */ jsx2("p", { className: "max-w-[24ch] text-sm leading-5 text-
|
|
1941
|
-
] })
|
|
1985
|
+
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: [
|
|
1986
|
+
/* @__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: [
|
|
1987
|
+
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)]" }),
|
|
1988
|
+
/* @__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) })
|
|
1989
|
+
] }),
|
|
1942
1990
|
/* @__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-
|
|
1944
|
-
/* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-
|
|
1991
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(focusedEntry) }),
|
|
1992
|
+
/* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.path })
|
|
1945
1993
|
] }) })
|
|
1946
1994
|
] }) : /* @__PURE__ */ jsx2(IssueManagerReferencePickerFeedback2, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) }) });
|
|
1947
1995
|
}
|
|
@@ -1951,26 +1999,34 @@ function IssueManagerReferencePickerFooter({
|
|
|
1951
1999
|
onConfirm,
|
|
1952
2000
|
selectedRefs
|
|
1953
2001
|
}) {
|
|
1954
|
-
return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3 border-t border-
|
|
2002
|
+
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
2003
|
/* @__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-
|
|
2004
|
+
/* @__PURE__ */ jsx2("span", { className: "text-sm text-[var(--text-secondary)]", children: copy.t("referencePicker.selectedCount", {
|
|
1957
2005
|
count: selectedRefs.length
|
|
1958
2006
|
}) }),
|
|
1959
2007
|
selectedRefs.slice(0, 2).map((ref) => /* @__PURE__ */ jsx2(
|
|
1960
2008
|
Badge,
|
|
1961
2009
|
{
|
|
1962
|
-
className:
|
|
2010
|
+
className: issueManagerReferencePickerSelectedBadgeClassName,
|
|
2011
|
+
variant: "secondary",
|
|
1963
2012
|
children: /* @__PURE__ */ jsx2("span", { className: "truncate", children: resolveIssueManagerReferenceLabel(ref) })
|
|
1964
2013
|
},
|
|
1965
2014
|
ref.path
|
|
1966
2015
|
)),
|
|
1967
|
-
selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
2016
|
+
selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(
|
|
2017
|
+
Badge,
|
|
2018
|
+
{
|
|
2019
|
+
className: issueManagerReferencePickerSelectedBadgeClassName,
|
|
2020
|
+
variant: "secondary",
|
|
2021
|
+
children: [
|
|
2022
|
+
"+",
|
|
2023
|
+
selectedRefs.length - 2
|
|
2024
|
+
]
|
|
2025
|
+
}
|
|
2026
|
+
) : null
|
|
1971
2027
|
] }),
|
|
1972
2028
|
/* @__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: "
|
|
2029
|
+
/* @__PURE__ */ jsx2(Button2, { type: "button", variant: "secondary", onClick: onClose, children: copy.t("actions.cancel") }),
|
|
1974
2030
|
/* @__PURE__ */ jsx2(
|
|
1975
2031
|
Button2,
|
|
1976
2032
|
{
|
|
@@ -1986,11 +2042,13 @@ function IssueManagerReferencePickerFooter({
|
|
|
1986
2042
|
function IssueManagerReferencePickerFeedback2({
|
|
1987
2043
|
children
|
|
1988
2044
|
}) {
|
|
1989
|
-
return /* @__PURE__ */ jsx2("div", { className: "grid min-h-
|
|
2045
|
+
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
2046
|
}
|
|
1991
2047
|
|
|
1992
2048
|
// src/ui/internal/reference/IssueManagerReferencePicker.tsx
|
|
1993
2049
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
2050
|
+
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";
|
|
2051
|
+
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
2052
|
function IssueManagerReferencePicker({
|
|
1995
2053
|
copy,
|
|
1996
2054
|
fileAdapter,
|
|
@@ -2021,32 +2079,31 @@ function IssueManagerReferencePicker({
|
|
|
2021
2079
|
open,
|
|
2022
2080
|
workspaceId
|
|
2023
2081
|
});
|
|
2024
|
-
const selectedCountLabel = useMemo4(
|
|
2025
|
-
() => copy.t("referencePicker.selectedCount", { count: selectedRefs.length }),
|
|
2026
|
-
[copy, selectedRefs.length]
|
|
2027
|
-
);
|
|
2028
2082
|
if (!open) {
|
|
2029
2083
|
return null;
|
|
2030
2084
|
}
|
|
2031
2085
|
const dialog = /* @__PURE__ */ jsx3(
|
|
2032
2086
|
"div",
|
|
2033
2087
|
{
|
|
2034
|
-
className:
|
|
2088
|
+
className: cn2(
|
|
2089
|
+
"fixed inset-0 grid place-items-center bg-[var(--backdrop)] px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8",
|
|
2090
|
+
issueManagerReferencePickerBackdropMotionClassName
|
|
2091
|
+
),
|
|
2035
2092
|
style: { zIndex: "var(--z-panel)" },
|
|
2036
2093
|
onClick: onClose,
|
|
2037
2094
|
children: /* @__PURE__ */ jsxs3(
|
|
2038
2095
|
Card,
|
|
2039
2096
|
{
|
|
2040
2097
|
"aria-modal": "true",
|
|
2041
|
-
className:
|
|
2098
|
+
className: cn2(
|
|
2099
|
+
"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)]",
|
|
2100
|
+
issueManagerReferencePickerPanelMotionClassName
|
|
2101
|
+
),
|
|
2042
2102
|
role: "dialog",
|
|
2043
2103
|
onClick: (event) => event.stopPropagation(),
|
|
2044
2104
|
children: [
|
|
2045
|
-
/* @__PURE__ */ jsx3(CardHeader, { className: "border-b border-
|
|
2046
|
-
/* @__PURE__ */
|
|
2047
|
-
/* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }),
|
|
2048
|
-
/* @__PURE__ */ jsx3(CardDescription, { children: selectedCountLabel })
|
|
2049
|
-
] }),
|
|
2105
|
+
/* @__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: [
|
|
2106
|
+
/* @__PURE__ */ jsx3("div", { className: "min-w-0", children: /* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }) }),
|
|
2050
2107
|
/* @__PURE__ */ jsx3(
|
|
2051
2108
|
Button3,
|
|
2052
2109
|
{
|
|
@@ -2109,10 +2166,11 @@ function IssueManagerReferencePicker({
|
|
|
2109
2166
|
}
|
|
2110
2167
|
|
|
2111
2168
|
// src/ui/internal/shell/IssueManagerShell.tsx
|
|
2112
|
-
import { Button as Button13, cn as
|
|
2169
|
+
import { Button as Button13, FileCreateIcon as FileCreateIcon4, cn as cn11 } from "@nextop-os/ui-system";
|
|
2113
2170
|
|
|
2114
2171
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
2115
|
-
import {
|
|
2172
|
+
import { useState as useState6 } from "react";
|
|
2173
|
+
import { Badge as Badge3, Button as Button7, ConfirmationDialog, Input as Input2 } from "@nextop-os/ui-system";
|
|
2116
2174
|
|
|
2117
2175
|
// src/ui/internal/issue/IssueManagerIssueSections.tsx
|
|
2118
2176
|
import {
|
|
@@ -2120,7 +2178,7 @@ import {
|
|
|
2120
2178
|
Button as Button5,
|
|
2121
2179
|
FileCreateIcon as FileCreateIcon2,
|
|
2122
2180
|
ScrollArea as ScrollArea2,
|
|
2123
|
-
cn as
|
|
2181
|
+
cn as cn3
|
|
2124
2182
|
} from "@nextop-os/ui-system";
|
|
2125
2183
|
|
|
2126
2184
|
// src/ui/internal/panel/IssueManagerPanelText.ts
|
|
@@ -2195,19 +2253,19 @@ function IssueManagerDetailTextSection({
|
|
|
2195
2253
|
tone = "muted"
|
|
2196
2254
|
}) {
|
|
2197
2255
|
return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
|
|
2198
|
-
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-
|
|
2256
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: label }),
|
|
2199
2257
|
/* @__PURE__ */ jsxs5("div", { className: "grid gap-1.5", children: [
|
|
2200
2258
|
/* @__PURE__ */ jsx5(
|
|
2201
2259
|
"p",
|
|
2202
2260
|
{
|
|
2203
|
-
className:
|
|
2204
|
-
"text-sm leading-6",
|
|
2205
|
-
tone === "destructive" ? "text-
|
|
2261
|
+
className: cn3(
|
|
2262
|
+
"text-sm font-normal leading-6",
|
|
2263
|
+
tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-secondary)]"
|
|
2206
2264
|
),
|
|
2207
2265
|
children: body
|
|
2208
2266
|
}
|
|
2209
2267
|
),
|
|
2210
|
-
meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs leading-5 text-
|
|
2268
|
+
meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs font-normal leading-5 text-[var(--text-secondary)]", children: meta }) : null
|
|
2211
2269
|
] })
|
|
2212
2270
|
] });
|
|
2213
2271
|
}
|
|
@@ -2217,8 +2275,8 @@ function IssueManagerOutputSection({
|
|
|
2217
2275
|
outputs
|
|
2218
2276
|
}) {
|
|
2219
2277
|
return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
|
|
2220
|
-
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-
|
|
2221
|
-
outputs.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm leading-6 text-
|
|
2278
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.executionOutputs") }),
|
|
2279
|
+
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(
|
|
2222
2280
|
"button",
|
|
2223
2281
|
{
|
|
2224
2282
|
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",
|
|
@@ -2232,10 +2290,10 @@ function IssueManagerOutputSection({
|
|
|
2232
2290
|
},
|
|
2233
2291
|
children: [
|
|
2234
2292
|
/* @__PURE__ */ jsxs5("span", { className: "min-w-0 flex-1", children: [
|
|
2235
|
-
/* @__PURE__ */ jsx5("span", { className: "block truncate text-sm font-semibold text-
|
|
2236
|
-
/* @__PURE__ */ jsx5("span", { className: "mt-1 block truncate text-xs text-
|
|
2293
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-sm font-semibold text-[var(--text-primary)]", children: output.displayName }),
|
|
2294
|
+
/* @__PURE__ */ jsx5("span", { className: "mt-1 block truncate text-xs font-normal text-[var(--text-secondary)]", children: output.path })
|
|
2237
2295
|
] }),
|
|
2238
|
-
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-
|
|
2296
|
+
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" })
|
|
2239
2297
|
]
|
|
2240
2298
|
},
|
|
2241
2299
|
output.outputId
|
|
@@ -2251,26 +2309,16 @@ function IssueManagerSubtaskSection({
|
|
|
2251
2309
|
}) {
|
|
2252
2310
|
return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
|
|
2253
2311
|
/* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between gap-3", children: [
|
|
2254
|
-
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-
|
|
2255
|
-
/* @__PURE__ */ jsxs5(
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
size: "dialog",
|
|
2260
|
-
type: "button",
|
|
2261
|
-
variant: "secondary",
|
|
2262
|
-
onClick: onCreate,
|
|
2263
|
-
children: [
|
|
2264
|
-
/* @__PURE__ */ jsx5(FileCreateIcon2, { size: 14 }),
|
|
2265
|
-
copy.t("actions.add")
|
|
2266
|
-
]
|
|
2267
|
-
}
|
|
2268
|
-
)
|
|
2312
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.subtasks") }),
|
|
2313
|
+
/* @__PURE__ */ jsxs5(Button5, { size: "dialog", type: "button", variant: "ghost", onClick: onCreate, children: [
|
|
2314
|
+
/* @__PURE__ */ jsx5(FileCreateIcon2, { size: 14 }),
|
|
2315
|
+
copy.t("actions.add")
|
|
2316
|
+
] })
|
|
2269
2317
|
] }),
|
|
2270
|
-
tasks.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm leading-6 text-
|
|
2318
|
+
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(
|
|
2271
2319
|
"button",
|
|
2272
2320
|
{
|
|
2273
|
-
className:
|
|
2321
|
+
className: cn3(
|
|
2274
2322
|
"flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors",
|
|
2275
2323
|
selectedTaskId === task.taskId ? "border-border/90 bg-background-fronted" : "border-border/65 hover:bg-accent/18"
|
|
2276
2324
|
),
|
|
@@ -2279,15 +2327,15 @@ function IssueManagerSubtaskSection({
|
|
|
2279
2327
|
children: [
|
|
2280
2328
|
/* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
|
|
2281
2329
|
/* @__PURE__ */ jsxs5("div", { className: "flex min-w-0 items-center gap-2.5", children: [
|
|
2282
|
-
/* @__PURE__ */ jsx5("span", { className: "truncate text-sm font-semibold text-
|
|
2283
|
-
/* @__PURE__ */ jsx5(Badge2, { className: "rounded-md
|
|
2330
|
+
/* @__PURE__ */ jsx5("span", { className: "truncate text-sm font-semibold text-[var(--text-primary)]", children: task.title }),
|
|
2331
|
+
/* @__PURE__ */ jsx5(Badge2, { className: "rounded-md px-2 py-1 text-[11px] font-medium", children: resolveIssueManagerStatusLabel(copy, task.status) })
|
|
2284
2332
|
] }),
|
|
2285
|
-
/* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm leading-6 text-
|
|
2333
|
+
/* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm font-normal leading-6 text-[var(--text-secondary)]", children: summarizeIssueManagerContent(
|
|
2286
2334
|
task.content,
|
|
2287
2335
|
copy.t("messages.taskContentEmpty")
|
|
2288
2336
|
) })
|
|
2289
2337
|
] }),
|
|
2290
|
-
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-
|
|
2338
|
+
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
|
|
2291
2339
|
task.createdAtUnix ?? task.updatedAtUnix
|
|
2292
2340
|
) || "" })
|
|
2293
2341
|
]
|
|
@@ -2298,9 +2346,9 @@ function IssueManagerSubtaskSection({
|
|
|
2298
2346
|
}
|
|
2299
2347
|
|
|
2300
2348
|
// src/ui/internal/content/IssueManagerDescriptionSection.tsx
|
|
2301
|
-
import { useEffect as
|
|
2349
|
+
import { useEffect as useEffect5, useRef, useState as useState4 } from "react";
|
|
2302
2350
|
import { RichTextReadonlyContent } from "@nextop-os/ui-rich-text/editor";
|
|
2303
|
-
import { cn as
|
|
2351
|
+
import { cn as cn4 } from "@nextop-os/ui-system";
|
|
2304
2352
|
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
2305
2353
|
function IssueManagerDescriptionSection({
|
|
2306
2354
|
content,
|
|
@@ -2311,9 +2359,9 @@ function IssueManagerDescriptionSection({
|
|
|
2311
2359
|
variant = "card"
|
|
2312
2360
|
}) {
|
|
2313
2361
|
const contentRef = useRef(null);
|
|
2314
|
-
const [isOverflowing, setIsOverflowing] =
|
|
2362
|
+
const [isOverflowing, setIsOverflowing] = useState4(false);
|
|
2315
2363
|
const normalizedContent = normalizeIssueManagerContent(content).trim();
|
|
2316
|
-
|
|
2364
|
+
useEffect5(() => {
|
|
2317
2365
|
if (variant === "plain") {
|
|
2318
2366
|
setIsOverflowing(false);
|
|
2319
2367
|
return;
|
|
@@ -2346,13 +2394,13 @@ function IssueManagerDescriptionSection({
|
|
|
2346
2394
|
if (variant === "plain") {
|
|
2347
2395
|
return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
|
|
2348
2396
|
/* @__PURE__ */ jsx6("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: label }),
|
|
2349
|
-
normalizedContent ? /* @__PURE__ */ jsx6("div", { className: "max-w-3xl text-sm leading-5 text-text-secondary", children: /* @__PURE__ */ jsx6(
|
|
2397
|
+
normalizedContent ? /* @__PURE__ */ jsx6("div", { className: "max-w-3xl text-sm font-normal leading-5 text-[var(--text-secondary)]", children: /* @__PURE__ */ jsx6(
|
|
2350
2398
|
IssueManagerDescriptionContent,
|
|
2351
2399
|
{
|
|
2352
2400
|
content: normalizedContent,
|
|
2353
2401
|
onOpen
|
|
2354
2402
|
}
|
|
2355
|
-
) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm leading-5 text-text-secondary", children: emptyLabel })
|
|
2403
|
+
) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm font-normal leading-5 text-[var(--text-secondary)]", children: emptyLabel })
|
|
2356
2404
|
] });
|
|
2357
2405
|
}
|
|
2358
2406
|
return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
|
|
@@ -2360,7 +2408,7 @@ function IssueManagerDescriptionSection({
|
|
|
2360
2408
|
/* @__PURE__ */ jsxs6(
|
|
2361
2409
|
"div",
|
|
2362
2410
|
{
|
|
2363
|
-
className:
|
|
2411
|
+
className: cn4(
|
|
2364
2412
|
"relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3",
|
|
2365
2413
|
minHeightClass
|
|
2366
2414
|
),
|
|
@@ -2368,8 +2416,8 @@ function IssueManagerDescriptionSection({
|
|
|
2368
2416
|
/* @__PURE__ */ jsx6(
|
|
2369
2417
|
"div",
|
|
2370
2418
|
{
|
|
2371
|
-
className:
|
|
2372
|
-
"max-h-[18rem] overflow-y-auto pr-2 text-sm leading-5 text-text-secondary",
|
|
2419
|
+
className: cn4(
|
|
2420
|
+
"max-h-[18rem] overflow-y-auto pr-2 text-sm font-normal leading-5 text-[var(--text-secondary)]",
|
|
2373
2421
|
isOverflowing && "pb-8"
|
|
2374
2422
|
),
|
|
2375
2423
|
ref: contentRef,
|
|
@@ -2379,7 +2427,7 @@ function IssueManagerDescriptionSection({
|
|
|
2379
2427
|
content: normalizedContent,
|
|
2380
2428
|
onOpen
|
|
2381
2429
|
}
|
|
2382
|
-
) : /* @__PURE__ */ jsx6("p", { className: "text-text-secondary", children: emptyLabel })
|
|
2430
|
+
) : /* @__PURE__ */ jsx6("p", { className: "font-normal text-[var(--text-secondary)]", children: emptyLabel })
|
|
2383
2431
|
}
|
|
2384
2432
|
),
|
|
2385
2433
|
isOverflowing ? /* @__PURE__ */ jsx6(
|
|
@@ -2414,10 +2462,12 @@ function IssueManagerDescriptionContent({
|
|
|
2414
2462
|
}
|
|
2415
2463
|
|
|
2416
2464
|
// src/ui/internal/content/IssueManagerRichTextTextarea.tsx
|
|
2417
|
-
import { useEffect as
|
|
2465
|
+
import { useEffect as useEffect6, useMemo as useMemo4, useRef as useRef2, useState as useState5 } from "react";
|
|
2418
2466
|
import { RichTextAtEditor } from "@nextop-os/ui-rich-text/editor";
|
|
2419
|
-
import { Button as Button6, LinkIcon, cn as
|
|
2467
|
+
import { Button as Button6, LinkIcon, cn as cn5 } from "@nextop-os/ui-system";
|
|
2420
2468
|
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2469
|
+
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";
|
|
2470
|
+
var issueManagerRichTextPlaceholderBaseClassName = "min-h-20 w-full p-3 text-sm font-normal leading-[1.3] text-[var(--text-placeholder)]";
|
|
2421
2471
|
function IssueManagerRichTextTextarea({
|
|
2422
2472
|
controller,
|
|
2423
2473
|
onChange,
|
|
@@ -2426,15 +2476,15 @@ function IssueManagerRichTextTextarea({
|
|
|
2426
2476
|
textareaClassName,
|
|
2427
2477
|
value
|
|
2428
2478
|
}) {
|
|
2429
|
-
const providers =
|
|
2479
|
+
const providers = useMemo4(
|
|
2430
2480
|
() => controller.resolveRichTextAtProviders(surface),
|
|
2431
2481
|
[controller, surface]
|
|
2432
2482
|
);
|
|
2433
2483
|
const showReferenceAction = controller.canReferenceWorkspaceFiles;
|
|
2434
|
-
const [focusSignal, setFocusSignal] =
|
|
2484
|
+
const [focusSignal, setFocusSignal] = useState5(0);
|
|
2435
2485
|
const previousValueRef = useRef2(value);
|
|
2436
2486
|
const wasAddingReferenceRef = useRef2(false);
|
|
2437
|
-
|
|
2487
|
+
useEffect6(() => {
|
|
2438
2488
|
const isAddingReference = controller.referenceTarget?.mode === "insert" && controller.referenceTarget.parentKind === surface;
|
|
2439
2489
|
if (wasAddingReferenceRef.current && !isAddingReference && value !== previousValueRef.current) {
|
|
2440
2490
|
setFocusSignal((current) => current + 1);
|
|
@@ -2454,15 +2504,24 @@ function IssueManagerRichTextTextarea({
|
|
|
2454
2504
|
noMatchesLabel: controller.copy.t("richTextAt.noMatches"),
|
|
2455
2505
|
removeReferenceActionLabel: controller.copy.t("actions.removeReference")
|
|
2456
2506
|
},
|
|
2457
|
-
textareaClassName:
|
|
2507
|
+
textareaClassName: cn5(
|
|
2508
|
+
issueManagerRichTextTextareaBaseClassName,
|
|
2509
|
+
textareaClassName,
|
|
2510
|
+
showReferenceAction && "pb-11"
|
|
2511
|
+
),
|
|
2512
|
+
placeholderClassName: cn5(
|
|
2513
|
+
issueManagerRichTextPlaceholderBaseClassName,
|
|
2514
|
+
textareaClassName,
|
|
2515
|
+
showReferenceAction && "pb-11"
|
|
2516
|
+
),
|
|
2458
2517
|
placeholder,
|
|
2459
2518
|
value,
|
|
2460
2519
|
onChange,
|
|
2461
|
-
overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-
|
|
2520
|
+
overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-3 bottom-3 z-10 flex", children: /* @__PURE__ */ jsxs7(
|
|
2462
2521
|
Button6,
|
|
2463
2522
|
{
|
|
2464
2523
|
className: "pointer-events-auto",
|
|
2465
|
-
size: "
|
|
2524
|
+
size: "default",
|
|
2466
2525
|
type: "button",
|
|
2467
2526
|
variant: "secondary",
|
|
2468
2527
|
onClick: () => {
|
|
@@ -2478,6 +2537,14 @@ function IssueManagerRichTextTextarea({
|
|
|
2478
2537
|
);
|
|
2479
2538
|
}
|
|
2480
2539
|
|
|
2540
|
+
// src/ui/internal/shell/IssueManagerEditorMotion.ts
|
|
2541
|
+
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";
|
|
2542
|
+
var issueManagerEditorRiseInDelay0ClassName = "motion-safe:[animation-delay:0ms]";
|
|
2543
|
+
var issueManagerEditorRiseInDelay1ClassName = "motion-safe:[animation-delay:55ms]";
|
|
2544
|
+
var issueManagerEditorRiseInDelay2ClassName = "motion-safe:[animation-delay:110ms]";
|
|
2545
|
+
var issueManagerEditorRiseInDelay3ClassName = "motion-safe:[animation-delay:165ms]";
|
|
2546
|
+
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";
|
|
2547
|
+
|
|
2481
2548
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
2482
2549
|
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2483
2550
|
function IssueManagerIssuePane({
|
|
@@ -2495,61 +2562,87 @@ function IssueManagerIssuePane({
|
|
|
2495
2562
|
const selectedTask = selectedTaskId ? (controller.taskDetail.value?.task?.taskId === selectedTaskId ? controller.taskDetail.value.task : tasks.find((task) => task.taskId === selectedTaskId)) ?? null : null;
|
|
2496
2563
|
const latestRun = selectedTask ? controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null : null;
|
|
2497
2564
|
const latestOutputs = selectedTask ? controller.taskDetail.value?.latestOutputs ?? [] : [];
|
|
2565
|
+
const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
|
|
2566
|
+
const [deleteBusy, setDeleteBusy] = useState6(false);
|
|
2498
2567
|
if (isCreatingIssue || isEditingIssue) {
|
|
2499
2568
|
return /* @__PURE__ */ jsxs8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
2500
2569
|
/* @__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: [
|
|
2501
|
-
/* @__PURE__ */ jsx8(
|
|
2570
|
+
/* @__PURE__ */ jsx8(
|
|
2571
|
+
"div",
|
|
2572
|
+
{
|
|
2573
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
2574
|
+
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") })
|
|
2575
|
+
}
|
|
2576
|
+
),
|
|
2502
2577
|
/* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
2503
|
-
/* @__PURE__ */ jsxs8(
|
|
2504
|
-
|
|
2578
|
+
/* @__PURE__ */ jsxs8(
|
|
2579
|
+
"label",
|
|
2580
|
+
{
|
|
2581
|
+
className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
2582
|
+
children: [
|
|
2583
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
2584
|
+
/* @__PURE__ */ jsx8(
|
|
2585
|
+
Input2,
|
|
2586
|
+
{
|
|
2587
|
+
placeholder: copy.t("composer.issueTitlePlaceholder"),
|
|
2588
|
+
variant: "md",
|
|
2589
|
+
value: controller.issueDraft.title,
|
|
2590
|
+
onChange: (event) => controller.setIssueTitle(event.target.value)
|
|
2591
|
+
}
|
|
2592
|
+
)
|
|
2593
|
+
]
|
|
2594
|
+
}
|
|
2595
|
+
),
|
|
2596
|
+
/* @__PURE__ */ jsxs8(
|
|
2597
|
+
"div",
|
|
2598
|
+
{
|
|
2599
|
+
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
2600
|
+
children: [
|
|
2601
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
2602
|
+
/* @__PURE__ */ jsx8(
|
|
2603
|
+
IssueManagerRichTextTextarea,
|
|
2604
|
+
{
|
|
2605
|
+
controller,
|
|
2606
|
+
surface: "issue",
|
|
2607
|
+
textareaClassName: "min-h-[180px] resize-none",
|
|
2608
|
+
placeholder: copy.t("composer.issueContentPlaceholder"),
|
|
2609
|
+
value: controller.issueDraft.content,
|
|
2610
|
+
onChange: controller.setIssueContent
|
|
2611
|
+
}
|
|
2612
|
+
)
|
|
2613
|
+
]
|
|
2614
|
+
}
|
|
2615
|
+
)
|
|
2616
|
+
] })
|
|
2617
|
+
] }) }),
|
|
2618
|
+
/* @__PURE__ */ jsx8(
|
|
2619
|
+
"div",
|
|
2620
|
+
{
|
|
2621
|
+
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
2622
|
+
children: /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-3", children: [
|
|
2505
2623
|
/* @__PURE__ */ jsx8(
|
|
2506
|
-
|
|
2624
|
+
Button7,
|
|
2507
2625
|
{
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2626
|
+
size: "dialog",
|
|
2627
|
+
type: "button",
|
|
2628
|
+
variant: "secondary",
|
|
2629
|
+
onClick: onDismissCreate,
|
|
2630
|
+
children: copy.t("actions.cancel")
|
|
2512
2631
|
}
|
|
2513
|
-
)
|
|
2514
|
-
] }),
|
|
2515
|
-
/* @__PURE__ */ jsxs8("div", { className: "flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-foreground", children: [
|
|
2516
|
-
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
2632
|
+
),
|
|
2517
2633
|
/* @__PURE__ */ jsx8(
|
|
2518
|
-
|
|
2634
|
+
Button7,
|
|
2519
2635
|
{
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
onChange: controller.setIssueContent
|
|
2636
|
+
disabled: isIssueTitleMissing,
|
|
2637
|
+
size: "dialog",
|
|
2638
|
+
type: "button",
|
|
2639
|
+
onClick: () => void controller.saveIssue(),
|
|
2640
|
+
children: copy.t("actions.saveIssue")
|
|
2526
2641
|
}
|
|
2527
2642
|
)
|
|
2528
2643
|
] })
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
/* @__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: [
|
|
2532
|
-
/* @__PURE__ */ jsx8(
|
|
2533
|
-
Button7,
|
|
2534
|
-
{
|
|
2535
|
-
size: "dialog",
|
|
2536
|
-
type: "button",
|
|
2537
|
-
variant: "secondary",
|
|
2538
|
-
onClick: onDismissCreate,
|
|
2539
|
-
children: copy.t("actions.cancel")
|
|
2540
|
-
}
|
|
2541
|
-
),
|
|
2542
|
-
/* @__PURE__ */ jsx8(
|
|
2543
|
-
Button7,
|
|
2544
|
-
{
|
|
2545
|
-
disabled: isIssueTitleMissing,
|
|
2546
|
-
size: "dialog",
|
|
2547
|
-
type: "button",
|
|
2548
|
-
onClick: () => void controller.saveIssue(),
|
|
2549
|
-
children: copy.t("actions.saveIssue")
|
|
2550
|
-
}
|
|
2551
|
-
)
|
|
2552
|
-
] }) })
|
|
2644
|
+
}
|
|
2645
|
+
)
|
|
2553
2646
|
] });
|
|
2554
2647
|
}
|
|
2555
2648
|
if (!selectedIssue) {
|
|
@@ -2558,14 +2651,28 @@ function IssueManagerIssuePane({
|
|
|
2558
2651
|
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: [
|
|
2559
2652
|
/* @__PURE__ */ jsxs8("header", { className: "flex items-start justify-between gap-6", children: [
|
|
2560
2653
|
/* @__PURE__ */ jsxs8("div", { className: "min-w-0 flex-1", children: [
|
|
2561
|
-
/* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 text-base font-semibold leading-6 text-
|
|
2562
|
-
/* @__PURE__ */ jsxs8("div", { className: "mt-3 flex flex-wrap items-center gap-x-
|
|
2563
|
-
/* @__PURE__ */ jsx8(Badge3, {
|
|
2654
|
+
/* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 text-base font-semibold leading-6 text-[var(--text-primary)]", children: selectedIssue.title }),
|
|
2655
|
+
/* @__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: [
|
|
2656
|
+
/* @__PURE__ */ jsx8(Badge3, { variant: "secondary", children: resolveIssueManagerStatusLabel(copy, selectedIssue.status) }),
|
|
2657
|
+
/* @__PURE__ */ jsx8(
|
|
2658
|
+
"span",
|
|
2659
|
+
{
|
|
2660
|
+
"aria-hidden": "true",
|
|
2661
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2662
|
+
}
|
|
2663
|
+
),
|
|
2564
2664
|
/* @__PURE__ */ jsxs8("span", { children: [
|
|
2565
2665
|
copy.t("labels.creator"),
|
|
2566
2666
|
" ",
|
|
2567
2667
|
resolveIssueManagerCreatorLabel(selectedIssue)
|
|
2568
2668
|
] }),
|
|
2669
|
+
/* @__PURE__ */ jsx8(
|
|
2670
|
+
"span",
|
|
2671
|
+
{
|
|
2672
|
+
"aria-hidden": "true",
|
|
2673
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2674
|
+
}
|
|
2675
|
+
),
|
|
2569
2676
|
/* @__PURE__ */ jsxs8("span", { children: [
|
|
2570
2677
|
copy.t("labels.createdAt"),
|
|
2571
2678
|
" ",
|
|
@@ -2573,12 +2680,10 @@ function IssueManagerIssuePane({
|
|
|
2573
2680
|
] })
|
|
2574
2681
|
] })
|
|
2575
2682
|
] }),
|
|
2576
|
-
/* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-
|
|
2683
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-2 pt-1", children: [
|
|
2577
2684
|
/* @__PURE__ */ jsx8(
|
|
2578
2685
|
Button7,
|
|
2579
2686
|
{
|
|
2580
|
-
className: "h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground",
|
|
2581
|
-
size: "sm",
|
|
2582
2687
|
type: "button",
|
|
2583
2688
|
variant: "ghost",
|
|
2584
2689
|
onClick: () => controller.setIssueEditorMode("edit"),
|
|
@@ -2588,18 +2693,35 @@ function IssueManagerIssuePane({
|
|
|
2588
2693
|
/* @__PURE__ */ jsx8(
|
|
2589
2694
|
Button7,
|
|
2590
2695
|
{
|
|
2591
|
-
className: "
|
|
2592
|
-
size: "sm",
|
|
2696
|
+
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
2593
2697
|
type: "button",
|
|
2594
2698
|
variant: "ghost",
|
|
2595
|
-
onClick: () =>
|
|
2596
|
-
void controller.deleteIssue();
|
|
2597
|
-
},
|
|
2699
|
+
onClick: () => setDeleteDialogOpen(true),
|
|
2598
2700
|
children: copy.t("actions.delete")
|
|
2599
2701
|
}
|
|
2600
2702
|
)
|
|
2601
2703
|
] })
|
|
2602
2704
|
] }),
|
|
2705
|
+
/* @__PURE__ */ jsx8(
|
|
2706
|
+
ConfirmationDialog,
|
|
2707
|
+
{
|
|
2708
|
+
cancelLabel: copy.t("actions.cancel"),
|
|
2709
|
+
confirmBusy: deleteBusy,
|
|
2710
|
+
confirmLabel: copy.t("actions.delete"),
|
|
2711
|
+
description: selectedIssue.title,
|
|
2712
|
+
open: deleteDialogOpen,
|
|
2713
|
+
title: copy.t("confirmations.deleteIssue"),
|
|
2714
|
+
tone: "destructive",
|
|
2715
|
+
onConfirm: () => {
|
|
2716
|
+
setDeleteBusy(true);
|
|
2717
|
+
void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
|
|
2718
|
+
setDeleteBusy(false);
|
|
2719
|
+
setDeleteDialogOpen(false);
|
|
2720
|
+
});
|
|
2721
|
+
},
|
|
2722
|
+
onOpenChange: setDeleteDialogOpen
|
|
2723
|
+
}
|
|
2724
|
+
),
|
|
2603
2725
|
/* @__PURE__ */ jsx8(
|
|
2604
2726
|
IssueManagerDescriptionSection,
|
|
2605
2727
|
{
|
|
@@ -2643,26 +2765,26 @@ function IssueManagerIssuePane({
|
|
|
2643
2765
|
}
|
|
2644
2766
|
|
|
2645
2767
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
2646
|
-
import { Button as Button8, cn as
|
|
2768
|
+
import { Button as Button8, cn as cn7 } from "@nextop-os/ui-system";
|
|
2647
2769
|
|
|
2648
2770
|
// src/ui/internal/task/IssueManagerRunSections.tsx
|
|
2649
|
-
import { useState as
|
|
2771
|
+
import { useState as useState7 } from "react";
|
|
2650
2772
|
import {
|
|
2651
2773
|
Badge as Badge4,
|
|
2652
2774
|
Select,
|
|
2653
2775
|
SelectContent,
|
|
2654
2776
|
SelectItem,
|
|
2655
2777
|
SelectTrigger,
|
|
2656
|
-
|
|
2778
|
+
buttonVariants,
|
|
2779
|
+
cn as cn6
|
|
2657
2780
|
} from "@nextop-os/ui-system";
|
|
2658
2781
|
import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
2659
2782
|
function IssueManagerRunActionTrigger({
|
|
2660
2783
|
controller,
|
|
2661
2784
|
disabled = false,
|
|
2662
|
-
iconSize = 16,
|
|
2663
2785
|
triggerClassName
|
|
2664
2786
|
}) {
|
|
2665
|
-
const [resetToken, setResetToken] =
|
|
2787
|
+
const [resetToken, setResetToken] = useState7(0);
|
|
2666
2788
|
return /* @__PURE__ */ jsxs9(
|
|
2667
2789
|
Select,
|
|
2668
2790
|
{
|
|
@@ -2676,11 +2798,12 @@ function IssueManagerRunActionTrigger({
|
|
|
2676
2798
|
SelectTrigger,
|
|
2677
2799
|
{
|
|
2678
2800
|
"aria-label": controller.copy.t("actions.askAgentToRun"),
|
|
2679
|
-
className:
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2801
|
+
className: cn6(
|
|
2802
|
+
buttonVariants({ variant: "secondary", size: "dialog" }),
|
|
2803
|
+
"[&>svg]:hidden",
|
|
2804
|
+
triggerClassName
|
|
2805
|
+
),
|
|
2806
|
+
children: /* @__PURE__ */ jsx9("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: /* @__PURE__ */ jsx9("span", { className: "truncate", children: controller.copy.t("actions.askAgentToRun") }) })
|
|
2684
2807
|
}
|
|
2685
2808
|
),
|
|
2686
2809
|
/* @__PURE__ */ jsx9(SelectContent, { style: { zIndex: "var(--z-panel-popover)" }, children: controller.providerOptions.map((provider) => /* @__PURE__ */ jsx9(SelectItem, { value: provider, children: provider }, provider)) })
|
|
@@ -2698,7 +2821,7 @@ function IssueManagerRunPanels({
|
|
|
2698
2821
|
return /* @__PURE__ */ jsxs9("div", { className: "grid gap-4", children: [
|
|
2699
2822
|
/* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
|
|
2700
2823
|
/* @__PURE__ */ jsx9("h4", { className: "mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.recentRuns") }),
|
|
2701
|
-
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(
|
|
2824
|
+
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(
|
|
2702
2825
|
"div",
|
|
2703
2826
|
{
|
|
2704
2827
|
className: "rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
|
|
@@ -2706,13 +2829,13 @@ function IssueManagerRunPanels({
|
|
|
2706
2829
|
/* @__PURE__ */ jsxs9("div", { className: "flex items-start justify-between gap-3", children: [
|
|
2707
2830
|
/* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
|
|
2708
2831
|
/* @__PURE__ */ jsx9("p", { className: "truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: run.summary || run.runId }),
|
|
2709
|
-
/* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs leading-[1.55] text-text-secondary", children: formatIssueManagerTimestamp(
|
|
2832
|
+
/* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
|
|
2710
2833
|
run.updatedAtUnix ?? run.createdAtUnix
|
|
2711
2834
|
) })
|
|
2712
2835
|
] }),
|
|
2713
|
-
/* @__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) })
|
|
2836
|
+
/* @__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) })
|
|
2714
2837
|
] }),
|
|
2715
|
-
run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-
|
|
2838
|
+
run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-[var(--state-danger)]", children: run.errorMessage }) : null
|
|
2716
2839
|
]
|
|
2717
2840
|
},
|
|
2718
2841
|
run.runId
|
|
@@ -2720,7 +2843,7 @@ function IssueManagerRunPanels({
|
|
|
2720
2843
|
] }),
|
|
2721
2844
|
/* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
|
|
2722
2845
|
/* @__PURE__ */ jsx9("h4", { className: "mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.outputs") }),
|
|
2723
|
-
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(
|
|
2846
|
+
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(
|
|
2724
2847
|
"button",
|
|
2725
2848
|
{
|
|
2726
2849
|
className: "rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover",
|
|
@@ -2734,7 +2857,7 @@ function IssueManagerRunPanels({
|
|
|
2734
2857
|
},
|
|
2735
2858
|
children: [
|
|
2736
2859
|
/* @__PURE__ */ jsx9("p", { className: "truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: output.displayName }),
|
|
2737
|
-
/* @__PURE__ */ jsx9("p", { className: "mt-1 truncate text-xs leading-[1.55] text-text-secondary", children: output.path })
|
|
2860
|
+
/* @__PURE__ */ jsx9("p", { className: "mt-1 truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: output.path })
|
|
2738
2861
|
]
|
|
2739
2862
|
},
|
|
2740
2863
|
output.outputId
|
|
@@ -2759,26 +2882,22 @@ function IssueManagerBottomBar({
|
|
|
2759
2882
|
return /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs10(
|
|
2760
2883
|
"div",
|
|
2761
2884
|
{
|
|
2762
|
-
className:
|
|
2885
|
+
className: cn7(
|
|
2763
2886
|
"flex gap-3",
|
|
2764
|
-
isNarrowLayout ? "flex-
|
|
2887
|
+
isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
|
|
2765
2888
|
),
|
|
2766
2889
|
children: [
|
|
2767
2890
|
/* @__PURE__ */ jsx10(
|
|
2768
2891
|
IssueManagerRunActionTrigger,
|
|
2769
2892
|
{
|
|
2770
2893
|
controller,
|
|
2771
|
-
disabled: !selectedTask
|
|
2772
|
-
triggerClassName: cn5(
|
|
2773
|
-
"rounded-xl border-[var(--border-1)] bg-[var(--transparency-block)] px-4 py-2",
|
|
2774
|
-
isNarrowLayout ? "w-full" : "min-w-[14rem]"
|
|
2775
|
-
)
|
|
2894
|
+
disabled: !selectedTask
|
|
2776
2895
|
}
|
|
2777
2896
|
),
|
|
2778
2897
|
controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
|
|
2779
2898
|
Button8,
|
|
2780
2899
|
{
|
|
2781
|
-
className:
|
|
2900
|
+
className: "px-4",
|
|
2782
2901
|
disabled: !selectedIssue,
|
|
2783
2902
|
size: "dialog",
|
|
2784
2903
|
type: "button",
|
|
@@ -2796,9 +2915,9 @@ function IssueManagerBottomBar({
|
|
|
2796
2915
|
// src/ui/internal/shell/IssueManagerFloatingNotice.tsx
|
|
2797
2916
|
import {
|
|
2798
2917
|
FailedFilledIcon,
|
|
2799
|
-
Spinner,
|
|
2918
|
+
Spinner as Spinner2,
|
|
2800
2919
|
toastVariants,
|
|
2801
|
-
cn as
|
|
2920
|
+
cn as cn8
|
|
2802
2921
|
} from "@nextop-os/ui-system";
|
|
2803
2922
|
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2804
2923
|
function IssueManagerFloatingNotice({
|
|
@@ -2810,14 +2929,14 @@ function IssueManagerFloatingNotice({
|
|
|
2810
2929
|
{
|
|
2811
2930
|
"aria-busy": notice.isLoading,
|
|
2812
2931
|
"aria-live": variant === "destructive" ? "assertive" : "polite",
|
|
2813
|
-
className:
|
|
2932
|
+
className: cn8(
|
|
2814
2933
|
toastVariants({ variant }),
|
|
2815
2934
|
"w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg"
|
|
2816
2935
|
),
|
|
2817
2936
|
role: variant === "destructive" ? "alert" : "status",
|
|
2818
2937
|
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: [
|
|
2819
2938
|
notice.isLoading ? /* @__PURE__ */ jsx11(
|
|
2820
|
-
|
|
2939
|
+
Spinner2,
|
|
2821
2940
|
{
|
|
2822
2941
|
className: "shrink-0 text-current",
|
|
2823
2942
|
size: 16,
|
|
@@ -2832,7 +2951,7 @@ function IssueManagerFloatingNotice({
|
|
|
2832
2951
|
}
|
|
2833
2952
|
|
|
2834
2953
|
// src/ui/internal/shell/IssueManagerSidebar.tsx
|
|
2835
|
-
import { cn as
|
|
2954
|
+
import { cn as cn10 } from "@nextop-os/ui-system";
|
|
2836
2955
|
|
|
2837
2956
|
// src/ui/internal/shell/IssueManagerSidebarSections.tsx
|
|
2838
2957
|
import {
|
|
@@ -2843,7 +2962,7 @@ import {
|
|
|
2843
2962
|
Input as Input3,
|
|
2844
2963
|
ScrollArea as ScrollArea3,
|
|
2845
2964
|
UnderlineTabs,
|
|
2846
|
-
cn as
|
|
2965
|
+
cn as cn9
|
|
2847
2966
|
} from "@nextop-os/ui-system";
|
|
2848
2967
|
|
|
2849
2968
|
// src/ui/internal/shell/IssueManagerShellState.ts
|
|
@@ -2857,7 +2976,7 @@ var issueManagerStatusFilters = [
|
|
|
2857
2976
|
"canceled"
|
|
2858
2977
|
];
|
|
2859
2978
|
function resolveIssueManagerSidebarViewState(input) {
|
|
2860
|
-
if (input.issues.isLoading && input.issues.value.length === 0) {
|
|
2979
|
+
if (input.issues.isLoading && input.issues.value.length === 0 && input.issues.hasResolved !== true) {
|
|
2861
2980
|
return {
|
|
2862
2981
|
kind: "loading"
|
|
2863
2982
|
};
|
|
@@ -2898,6 +3017,20 @@ function buildIssueManagerStatusCounts(issues) {
|
|
|
2898
3017
|
}
|
|
2899
3018
|
return counts;
|
|
2900
3019
|
}
|
|
3020
|
+
function resolveIssueManagerStatusCounts(input) {
|
|
3021
|
+
return input.statusCounts ? mapIssueManagerStatusCounts(input.statusCounts) : buildIssueManagerStatusCounts(input.value);
|
|
3022
|
+
}
|
|
3023
|
+
function mapIssueManagerStatusCounts(counts) {
|
|
3024
|
+
return {
|
|
3025
|
+
all: counts.all,
|
|
3026
|
+
canceled: counts.canceled,
|
|
3027
|
+
completed: counts.completed,
|
|
3028
|
+
failed: counts.failed,
|
|
3029
|
+
not_started: counts.notStarted,
|
|
3030
|
+
pending_acceptance: counts.pendingAcceptance,
|
|
3031
|
+
running: counts.running
|
|
3032
|
+
};
|
|
3033
|
+
}
|
|
2901
3034
|
function resolveIssueManagerShellContentViewState(input) {
|
|
2902
3035
|
const isIssueEditing = input.issueEditorMode !== "read";
|
|
2903
3036
|
const isTaskCreating = !isIssueEditing && input.taskEditorMode === "create";
|
|
@@ -2978,11 +3111,11 @@ function IssueManagerSidebarBody({
|
|
|
2978
3111
|
return /* @__PURE__ */ jsx12(
|
|
2979
3112
|
ScrollArea3,
|
|
2980
3113
|
{
|
|
2981
|
-
className:
|
|
3114
|
+
className: cn9("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
|
|
2982
3115
|
children: /* @__PURE__ */ jsx12(
|
|
2983
3116
|
"div",
|
|
2984
3117
|
{
|
|
2985
|
-
className:
|
|
3118
|
+
className: cn9(
|
|
2986
3119
|
"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
|
|
2987
3120
|
isNarrowLayout ? "min-h-0" : "h-full"
|
|
2988
3121
|
),
|
|
@@ -3060,7 +3193,7 @@ function IssueManagerSearchField({
|
|
|
3060
3193
|
Input3,
|
|
3061
3194
|
{
|
|
3062
3195
|
"aria-label": placeholder,
|
|
3063
|
-
className:
|
|
3196
|
+
className: cn9(
|
|
3064
3197
|
"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",
|
|
3065
3198
|
"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none",
|
|
3066
3199
|
value ? "pr-9" : "pr-3"
|
|
@@ -3096,7 +3229,7 @@ function IssueManagerSidebarIssueList({
|
|
|
3096
3229
|
return /* @__PURE__ */ jsx12(
|
|
3097
3230
|
"div",
|
|
3098
3231
|
{
|
|
3099
|
-
className:
|
|
3232
|
+
className: cn9(
|
|
3100
3233
|
"flex gap-2.5",
|
|
3101
3234
|
isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
|
|
3102
3235
|
),
|
|
@@ -3124,7 +3257,7 @@ function IssueManagerSidebarItem({
|
|
|
3124
3257
|
return /* @__PURE__ */ jsxs12(
|
|
3125
3258
|
"button",
|
|
3126
3259
|
{
|
|
3127
|
-
className:
|
|
3260
|
+
className: cn9(
|
|
3128
3261
|
"rounded-lg border px-3.5 py-3.5 text-left transition-colors",
|
|
3129
3262
|
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",
|
|
3130
3263
|
selected ? "border-[var(--border-1)] bg-[var(--background-fronted)]" : "border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]"
|
|
@@ -3137,7 +3270,7 @@ function IssueManagerSidebarItem({
|
|
|
3137
3270
|
/* @__PURE__ */ jsx12("p", { className: "text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
|
|
3138
3271
|
/* @__PURE__ */ jsx12("p", { className: "line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
|
|
3139
3272
|
] }),
|
|
3140
|
-
/* @__PURE__ */ jsx12(Badge5, { className: "
|
|
3273
|
+
/* @__PURE__ */ jsx12(Badge5, { className: "shrink-0", variant: "secondary", children: resolveIssueManagerStatusLabel(copy, issue.status) })
|
|
3141
3274
|
] }),
|
|
3142
3275
|
/* @__PURE__ */ jsx12("div", { className: "mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
|
|
3143
3276
|
]
|
|
@@ -3151,14 +3284,14 @@ function IssueManagerSidebarLoadingState({
|
|
|
3151
3284
|
"div",
|
|
3152
3285
|
{
|
|
3153
3286
|
"aria-hidden": "true",
|
|
3154
|
-
className:
|
|
3287
|
+
className: cn9(
|
|
3155
3288
|
"gap-2.5",
|
|
3156
3289
|
isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
|
|
3157
3290
|
),
|
|
3158
3291
|
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs12(
|
|
3159
3292
|
"div",
|
|
3160
3293
|
{
|
|
3161
|
-
className:
|
|
3294
|
+
className: cn9(
|
|
3162
3295
|
"rounded-lg bg-transparent px-3.5 py-3.5",
|
|
3163
3296
|
isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
|
|
3164
3297
|
),
|
|
@@ -3182,7 +3315,7 @@ function IssueManagerSidebarEmptyState({
|
|
|
3182
3315
|
return /* @__PURE__ */ jsxs12(
|
|
3183
3316
|
"div",
|
|
3184
3317
|
{
|
|
3185
|
-
className:
|
|
3318
|
+
className: cn9(
|
|
3186
3319
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
|
|
3187
3320
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3188
3321
|
),
|
|
@@ -3190,7 +3323,7 @@ function IssueManagerSidebarEmptyState({
|
|
|
3190
3323
|
/* @__PURE__ */ jsx12(
|
|
3191
3324
|
"p",
|
|
3192
3325
|
{
|
|
3193
|
-
className:
|
|
3326
|
+
className: cn9(
|
|
3194
3327
|
"text-sm font-semibold leading-5 text-[var(--text-primary)]",
|
|
3195
3328
|
tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-primary)]"
|
|
3196
3329
|
),
|
|
@@ -3211,7 +3344,7 @@ function IssueManagerSidebarErrorState({
|
|
|
3211
3344
|
return /* @__PURE__ */ jsxs12(
|
|
3212
3345
|
"div",
|
|
3213
3346
|
{
|
|
3214
|
-
className:
|
|
3347
|
+
className: cn9(
|
|
3215
3348
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden px-4 py-6 text-center",
|
|
3216
3349
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3217
3350
|
),
|
|
@@ -3275,10 +3408,10 @@ function IssueManagerSidebar({
|
|
|
3275
3408
|
"aside",
|
|
3276
3409
|
{
|
|
3277
3410
|
"aria-hidden": isCollapsed ? "true" : void 0,
|
|
3278
|
-
className:
|
|
3279
|
-
"
|
|
3411
|
+
className: cn10(
|
|
3412
|
+
"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",
|
|
3280
3413
|
isNarrowLayout ? "border-b border-[var(--border-1)]" : "border-r border-[var(--border-1)]",
|
|
3281
|
-
isCollapsed && "pointer-events-none
|
|
3414
|
+
isCollapsed && "pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none"
|
|
3282
3415
|
),
|
|
3283
3416
|
inert: isCollapsed ? true : void 0,
|
|
3284
3417
|
children: [
|
|
@@ -3304,7 +3437,7 @@ function IssueManagerSidebar({
|
|
|
3304
3437
|
/* @__PURE__ */ jsx13(
|
|
3305
3438
|
"div",
|
|
3306
3439
|
{
|
|
3307
|
-
className:
|
|
3440
|
+
className: cn10(
|
|
3308
3441
|
"relative flex min-h-0 flex-col",
|
|
3309
3442
|
isNarrowLayout ? "flex-none" : "flex-1"
|
|
3310
3443
|
),
|
|
@@ -3337,18 +3470,8 @@ function IssueManagerSidebar({
|
|
|
3337
3470
|
}
|
|
3338
3471
|
|
|
3339
3472
|
// src/ui/internal/shell/IssueManagerTaskComposerPane.tsx
|
|
3340
|
-
import {
|
|
3341
|
-
Button as Button10,
|
|
3342
|
-
Input as Input4,
|
|
3343
|
-
Select as Select2,
|
|
3344
|
-
SelectContent as SelectContent2,
|
|
3345
|
-
SelectItem as SelectItem2,
|
|
3346
|
-
SelectTrigger as SelectTrigger2,
|
|
3347
|
-
SelectValue,
|
|
3348
|
-
UploadIcon
|
|
3349
|
-
} from "@nextop-os/ui-system";
|
|
3473
|
+
import { Button as Button10, Input as Input4 } from "@nextop-os/ui-system";
|
|
3350
3474
|
import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3351
|
-
var taskPriorityOptions = ["high", "medium", "low"];
|
|
3352
3475
|
function IssueManagerTaskComposerPane({
|
|
3353
3476
|
controller,
|
|
3354
3477
|
onCancel,
|
|
@@ -3356,118 +3479,84 @@ function IssueManagerTaskComposerPane({
|
|
|
3356
3479
|
}) {
|
|
3357
3480
|
const copy = controller.copy;
|
|
3358
3481
|
const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
|
|
3359
|
-
const showAttachmentActions = controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;
|
|
3360
3482
|
return /* @__PURE__ */ jsxs14("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
3361
|
-
/* @__PURE__ */ jsx14("div", { className: "min-h-0 flex-1 overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs14("div", { className: "flex w-full
|
|
3362
|
-
/* @__PURE__ */
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3366
|
-
/* @__PURE__ */
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
/* @__PURE__ */
|
|
3389
|
-
|
|
3483
|
+
/* @__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: [
|
|
3484
|
+
/* @__PURE__ */ jsx14(
|
|
3485
|
+
"div",
|
|
3486
|
+
{
|
|
3487
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3488
|
+
children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
|
|
3489
|
+
}
|
|
3490
|
+
),
|
|
3491
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
3492
|
+
/* @__PURE__ */ jsxs14(
|
|
3493
|
+
"label",
|
|
3494
|
+
{
|
|
3495
|
+
className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3496
|
+
children: [
|
|
3497
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
3498
|
+
/* @__PURE__ */ jsx14(
|
|
3499
|
+
Input4,
|
|
3500
|
+
{
|
|
3501
|
+
placeholder: copy.t("composer.subtaskTitlePlaceholder"),
|
|
3502
|
+
variant: "md",
|
|
3503
|
+
value: controller.taskDraft.title,
|
|
3504
|
+
onChange: (event) => controller.setTaskTitle(event.target.value)
|
|
3505
|
+
}
|
|
3506
|
+
)
|
|
3507
|
+
]
|
|
3508
|
+
}
|
|
3509
|
+
),
|
|
3510
|
+
/* @__PURE__ */ jsxs14(
|
|
3511
|
+
"div",
|
|
3390
3512
|
{
|
|
3391
|
-
className:
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3513
|
+
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3514
|
+
children: [
|
|
3515
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
|
|
3516
|
+
/* @__PURE__ */ jsx14(
|
|
3517
|
+
IssueManagerRichTextTextarea,
|
|
3518
|
+
{
|
|
3519
|
+
controller,
|
|
3520
|
+
surface: "task",
|
|
3521
|
+
textareaClassName: "min-h-[180px] resize-none",
|
|
3522
|
+
placeholder: copy.t("composer.subtaskContentPlaceholder"),
|
|
3523
|
+
value: controller.taskDraft.content,
|
|
3524
|
+
onChange: controller.setTaskContent
|
|
3525
|
+
}
|
|
3526
|
+
)
|
|
3527
|
+
]
|
|
3395
3528
|
}
|
|
3396
3529
|
)
|
|
3397
|
-
] })
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3530
|
+
] })
|
|
3531
|
+
] }) }),
|
|
3532
|
+
/* @__PURE__ */ jsx14(
|
|
3533
|
+
"div",
|
|
3534
|
+
{
|
|
3535
|
+
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3536
|
+
children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3401
3537
|
/* @__PURE__ */ jsx14(
|
|
3402
|
-
|
|
3538
|
+
Button10,
|
|
3403
3539
|
{
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
onChange: controller.setTaskContent
|
|
3540
|
+
size: "default",
|
|
3541
|
+
type: "button",
|
|
3542
|
+
variant: "secondary",
|
|
3543
|
+
onClick: onCancel,
|
|
3544
|
+
children: copy.t("actions.cancel")
|
|
3410
3545
|
}
|
|
3411
3546
|
),
|
|
3412
|
-
|
|
3413
|
-
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
|
|
3421
|
-
|
|
3422
|
-
},
|
|
3423
|
-
children: [
|
|
3424
|
-
/* @__PURE__ */ jsx14(UploadIcon, { size: 16 }),
|
|
3425
|
-
copy.t("actions.uploadFiles")
|
|
3426
|
-
]
|
|
3427
|
-
}
|
|
3428
|
-
) : null,
|
|
3429
|
-
controller.canUploadWorkspaceFiles ? /* @__PURE__ */ jsxs14(
|
|
3430
|
-
Button10,
|
|
3431
|
-
{
|
|
3432
|
-
className: "px-3",
|
|
3433
|
-
size: "dialog",
|
|
3434
|
-
type: "button",
|
|
3435
|
-
variant: "secondary",
|
|
3436
|
-
onClick: () => {
|
|
3437
|
-
void controller.uploadReferences("task", "folder");
|
|
3438
|
-
},
|
|
3439
|
-
children: [
|
|
3440
|
-
/* @__PURE__ */ jsx14(UploadIcon, { size: 16 }),
|
|
3441
|
-
copy.t("actions.uploadFolder")
|
|
3442
|
-
]
|
|
3443
|
-
}
|
|
3444
|
-
) : null
|
|
3445
|
-
] }) : null
|
|
3547
|
+
/* @__PURE__ */ jsx14(
|
|
3548
|
+
Button10,
|
|
3549
|
+
{
|
|
3550
|
+
disabled: !selectedIssue || isTaskTitleMissing,
|
|
3551
|
+
size: "default",
|
|
3552
|
+
type: "button",
|
|
3553
|
+
onClick: () => void controller.saveTask(),
|
|
3554
|
+
children: copy.t("actions.saveSubtask")
|
|
3555
|
+
}
|
|
3556
|
+
)
|
|
3446
3557
|
] })
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
/* @__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: [
|
|
3450
|
-
/* @__PURE__ */ jsx14(
|
|
3451
|
-
Button10,
|
|
3452
|
-
{
|
|
3453
|
-
size: "default",
|
|
3454
|
-
type: "button",
|
|
3455
|
-
variant: "secondary",
|
|
3456
|
-
onClick: onCancel,
|
|
3457
|
-
children: copy.t("actions.cancel")
|
|
3458
|
-
}
|
|
3459
|
-
),
|
|
3460
|
-
/* @__PURE__ */ jsx14(
|
|
3461
|
-
Button10,
|
|
3462
|
-
{
|
|
3463
|
-
disabled: !selectedIssue || isTaskTitleMissing,
|
|
3464
|
-
size: "default",
|
|
3465
|
-
type: "button",
|
|
3466
|
-
onClick: () => void controller.saveTask(),
|
|
3467
|
-
children: copy.t("actions.saveSubtask")
|
|
3468
|
-
}
|
|
3469
|
-
)
|
|
3470
|
-
] }) })
|
|
3558
|
+
}
|
|
3559
|
+
)
|
|
3471
3560
|
] });
|
|
3472
3561
|
}
|
|
3473
3562
|
|
|
@@ -3484,16 +3573,16 @@ import {
|
|
|
3484
3573
|
DropdownMenuItem,
|
|
3485
3574
|
DropdownMenuTrigger,
|
|
3486
3575
|
Input as Input5,
|
|
3487
|
-
Select as
|
|
3488
|
-
SelectContent as
|
|
3489
|
-
SelectItem as
|
|
3490
|
-
SelectTrigger as
|
|
3491
|
-
SelectValue
|
|
3492
|
-
|
|
3576
|
+
Select as Select2,
|
|
3577
|
+
SelectContent as SelectContent2,
|
|
3578
|
+
SelectItem as SelectItem2,
|
|
3579
|
+
SelectTrigger as SelectTrigger2,
|
|
3580
|
+
SelectValue,
|
|
3581
|
+
CapabilityIcon
|
|
3493
3582
|
} from "@nextop-os/ui-system";
|
|
3494
3583
|
|
|
3495
3584
|
// src/ui/internal/content/IssueManagerContextSection.tsx
|
|
3496
|
-
import { Button as Button11, DirectoryIcon
|
|
3585
|
+
import { Button as Button11, DirectoryIcon, FileIcon as FileIcon3 } from "@nextop-os/ui-system";
|
|
3497
3586
|
import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3498
3587
|
function IssueManagerContextSection({
|
|
3499
3588
|
copy,
|
|
@@ -3518,7 +3607,7 @@ function IssueManagerContextSection({
|
|
|
3518
3607
|
}
|
|
3519
3608
|
)
|
|
3520
3609
|
] }),
|
|
3521
|
-
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(
|
|
3610
|
+
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(
|
|
3522
3611
|
"div",
|
|
3523
3612
|
{
|
|
3524
3613
|
className: "flex items-center justify-between gap-3 rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
|
|
@@ -3537,21 +3626,21 @@ function IssueManagerContextSection({
|
|
|
3537
3626
|
},
|
|
3538
3627
|
children: [
|
|
3539
3628
|
ref.path.endsWith("/") ? /* @__PURE__ */ jsx15(
|
|
3540
|
-
|
|
3629
|
+
DirectoryIcon,
|
|
3541
3630
|
{
|
|
3542
|
-
className: "shrink-0 text-text-secondary",
|
|
3631
|
+
className: "shrink-0 text-[var(--text-secondary)]",
|
|
3543
3632
|
size: 16
|
|
3544
3633
|
}
|
|
3545
3634
|
) : /* @__PURE__ */ jsx15(
|
|
3546
3635
|
FileIcon3,
|
|
3547
3636
|
{
|
|
3548
|
-
className: "shrink-0 text-text-secondary",
|
|
3637
|
+
className: "shrink-0 text-[var(--text-secondary)]",
|
|
3549
3638
|
size: 16
|
|
3550
3639
|
}
|
|
3551
3640
|
),
|
|
3552
3641
|
/* @__PURE__ */ jsxs15("span", { className: "min-w-0", children: [
|
|
3553
3642
|
/* @__PURE__ */ jsx15("span", { className: "block truncate text-sm font-semibold leading-5 text-[var(--text-primary)]", children: ref.displayName }),
|
|
3554
|
-
/* @__PURE__ */ jsx15("span", { className: "block truncate text-xs leading-[1.55] text-text-secondary", children: ref.path })
|
|
3643
|
+
/* @__PURE__ */ jsx15("span", { className: "block truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: ref.path })
|
|
3555
3644
|
] })
|
|
3556
3645
|
]
|
|
3557
3646
|
}
|
|
@@ -3559,7 +3648,7 @@ function IssueManagerContextSection({
|
|
|
3559
3648
|
/* @__PURE__ */ jsx15(
|
|
3560
3649
|
Button11,
|
|
3561
3650
|
{
|
|
3562
|
-
className: "h-7 rounded-md px-2 text-[13px] font-semibold text-text-secondary hover:text-[var(--text-primary)]",
|
|
3651
|
+
className: "h-7 rounded-md px-2 text-[13px] font-semibold text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
|
|
3563
3652
|
size: "sm",
|
|
3564
3653
|
type: "button",
|
|
3565
3654
|
variant: "ghost",
|
|
@@ -3608,7 +3697,7 @@ function canIssueManagerSaveTask(input) {
|
|
|
3608
3697
|
|
|
3609
3698
|
// src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
|
|
3610
3699
|
import { Fragment, jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3611
|
-
var
|
|
3700
|
+
var taskPriorityOptions = ["high", "medium", "low"];
|
|
3612
3701
|
function IssueManagerTaskDrawerHeader({
|
|
3613
3702
|
controller,
|
|
3614
3703
|
selectedTask,
|
|
@@ -3619,10 +3708,10 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3619
3708
|
return /* @__PURE__ */ jsxs16("div", { className: "flex items-start justify-between gap-4 border-b border-border-1 px-7 py-5", children: [
|
|
3620
3709
|
/* @__PURE__ */ jsxs16("div", { className: "min-w-0 flex-1", children: [
|
|
3621
3710
|
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 }),
|
|
3622
|
-
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: [
|
|
3711
|
+
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: [
|
|
3623
3712
|
/* @__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) }),
|
|
3624
3713
|
/* @__PURE__ */ jsx16("span", { className: "mx-3 h-[13px] w-px shrink-0 bg-border-1" }),
|
|
3625
|
-
/* @__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) }),
|
|
3714
|
+
/* @__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) }),
|
|
3626
3715
|
/* @__PURE__ */ jsx16("span", { className: "mx-3 h-[13px] w-px shrink-0 bg-border-1" }),
|
|
3627
3716
|
/* @__PURE__ */ jsxs16("span", { children: [
|
|
3628
3717
|
copy.t("labels.updatedAt"),
|
|
@@ -3648,7 +3737,7 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3648
3737
|
"span",
|
|
3649
3738
|
{
|
|
3650
3739
|
"aria-hidden": "true",
|
|
3651
|
-
className: "text-base leading-none tracking-[0.18em] text-text-secondary",
|
|
3740
|
+
className: "text-base leading-none tracking-[0.18em] text-[var(--text-secondary)]",
|
|
3652
3741
|
children: "..."
|
|
3653
3742
|
}
|
|
3654
3743
|
)
|
|
@@ -3727,65 +3816,89 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3727
3816
|
const copy = controller.copy;
|
|
3728
3817
|
return /* @__PURE__ */ jsxs16(Fragment, { children: [
|
|
3729
3818
|
/* @__PURE__ */ jsxs16("div", { className: "grid gap-5", children: [
|
|
3730
|
-
/* @__PURE__ */ jsxs16(
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
|
|
3736
|
-
|
|
3737
|
-
|
|
3738
|
-
|
|
3739
|
-
|
|
3740
|
-
|
|
3741
|
-
|
|
3742
|
-
|
|
3743
|
-
|
|
3744
|
-
|
|
3745
|
-
|
|
3746
|
-
|
|
3747
|
-
|
|
3748
|
-
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
|
|
3776
|
-
|
|
3819
|
+
/* @__PURE__ */ jsxs16(
|
|
3820
|
+
"label",
|
|
3821
|
+
{
|
|
3822
|
+
className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3823
|
+
children: [
|
|
3824
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.title") }),
|
|
3825
|
+
/* @__PURE__ */ jsx16(
|
|
3826
|
+
Input5,
|
|
3827
|
+
{
|
|
3828
|
+
placeholder: copy.t("composer.taskTitlePlaceholder"),
|
|
3829
|
+
variant: "md",
|
|
3830
|
+
value: controller.taskDraft.title,
|
|
3831
|
+
onChange: (event) => controller.setTaskTitle(event.target.value)
|
|
3832
|
+
}
|
|
3833
|
+
)
|
|
3834
|
+
]
|
|
3835
|
+
}
|
|
3836
|
+
),
|
|
3837
|
+
/* @__PURE__ */ jsx16(
|
|
3838
|
+
"div",
|
|
3839
|
+
{
|
|
3840
|
+
className: `flex flex-wrap items-center gap-3 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3841
|
+
children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
3842
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-medium text-[var(--text-secondary)]", children: copy.t("labels.priority") }),
|
|
3843
|
+
/* @__PURE__ */ jsxs16(
|
|
3844
|
+
Select2,
|
|
3845
|
+
{
|
|
3846
|
+
value: controller.taskDraft.priority,
|
|
3847
|
+
onValueChange: (value) => controller.setTaskPriority(value),
|
|
3848
|
+
children: [
|
|
3849
|
+
/* @__PURE__ */ jsx16(
|
|
3850
|
+
SelectTrigger2,
|
|
3851
|
+
{
|
|
3852
|
+
"aria-label": copy.t("labels.priority"),
|
|
3853
|
+
className: "min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm",
|
|
3854
|
+
children: /* @__PURE__ */ jsx16(SelectValue, {})
|
|
3855
|
+
}
|
|
3856
|
+
),
|
|
3857
|
+
/* @__PURE__ */ jsx16(SelectContent2, { style: { zIndex: "var(--z-panel-popover)" }, children: taskPriorityOptions.map((priority) => /* @__PURE__ */ jsx16(SelectItem2, { value: priority, children: resolveIssueManagerPriorityLabel(copy, priority) }, priority)) })
|
|
3858
|
+
]
|
|
3859
|
+
}
|
|
3860
|
+
)
|
|
3861
|
+
] })
|
|
3862
|
+
}
|
|
3863
|
+
),
|
|
3864
|
+
/* @__PURE__ */ jsxs16(
|
|
3865
|
+
"div",
|
|
3866
|
+
{
|
|
3867
|
+
className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3868
|
+
children: [
|
|
3869
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.content") }),
|
|
3870
|
+
/* @__PURE__ */ jsx16(
|
|
3871
|
+
IssueManagerRichTextTextarea,
|
|
3872
|
+
{
|
|
3873
|
+
controller,
|
|
3874
|
+
surface: "task",
|
|
3875
|
+
textareaClassName: "min-h-[12rem] resize-none",
|
|
3876
|
+
placeholder: copy.t("composer.taskContentPlaceholder"),
|
|
3877
|
+
value: controller.taskDraft.content,
|
|
3878
|
+
onChange: controller.setTaskContent
|
|
3879
|
+
}
|
|
3880
|
+
)
|
|
3881
|
+
]
|
|
3882
|
+
}
|
|
3883
|
+
)
|
|
3777
3884
|
] }),
|
|
3778
3885
|
/* @__PURE__ */ jsx16(
|
|
3779
|
-
|
|
3886
|
+
"div",
|
|
3780
3887
|
{
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3888
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay3ClassName}`,
|
|
3889
|
+
children: /* @__PURE__ */ jsx16(
|
|
3890
|
+
IssueManagerContextSection,
|
|
3891
|
+
{
|
|
3892
|
+
copy,
|
|
3893
|
+
emptyLabel: copy.t("messages.noTaskReferences"),
|
|
3894
|
+
refs: taskRefs,
|
|
3895
|
+
onAdd: () => {
|
|
3896
|
+
void controller.attachReferences("task");
|
|
3897
|
+
},
|
|
3898
|
+
onOpen: controller.openReference,
|
|
3899
|
+
onRemove: controller.removeContextRef
|
|
3900
|
+
}
|
|
3901
|
+
)
|
|
3789
3902
|
}
|
|
3790
3903
|
),
|
|
3791
3904
|
!isCreate ? /* @__PURE__ */ jsx16(
|
|
@@ -3853,8 +3966,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
3853
3966
|
IssueManagerRunActionTrigger,
|
|
3854
3967
|
{
|
|
3855
3968
|
controller,
|
|
3856
|
-
|
|
3857
|
-
triggerClassName: "min-w-[11rem] rounded-lg border-border-1 bg-transparency-block px-3.5 py-2 text-sm"
|
|
3969
|
+
triggerClassName: "min-w-[11rem]"
|
|
3858
3970
|
}
|
|
3859
3971
|
),
|
|
3860
3972
|
controller.canInviteCollaborators ? /* @__PURE__ */ jsx16(
|
|
@@ -3872,48 +3984,54 @@ function IssueManagerTaskDrawerFooter({
|
|
|
3872
3984
|
] }) });
|
|
3873
3985
|
}
|
|
3874
3986
|
if (view.showEditFooter) {
|
|
3875
|
-
return /* @__PURE__ */ jsx16(
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
{
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3910
|
-
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3987
|
+
return /* @__PURE__ */ jsx16(
|
|
3988
|
+
"div",
|
|
3989
|
+
{
|
|
3990
|
+
className: `border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3991
|
+
children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between gap-3", children: [
|
|
3992
|
+
/* @__PURE__ */ jsx16("div", { className: "flex items-center gap-2", children: !view.isCreate && selectedTask ? /* @__PURE__ */ jsx16(
|
|
3993
|
+
Button12,
|
|
3994
|
+
{
|
|
3995
|
+
size: "default",
|
|
3996
|
+
type: "button",
|
|
3997
|
+
variant: "destructive",
|
|
3998
|
+
onClick: () => {
|
|
3999
|
+
void controller.deleteTask();
|
|
4000
|
+
},
|
|
4001
|
+
children: copy.t("actions.deleteTask")
|
|
4002
|
+
}
|
|
4003
|
+
) : null }),
|
|
4004
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
4005
|
+
/* @__PURE__ */ jsx16(
|
|
4006
|
+
Button12,
|
|
4007
|
+
{
|
|
4008
|
+
size: "default",
|
|
4009
|
+
type: "button",
|
|
4010
|
+
variant: "secondary",
|
|
4011
|
+
onClick: () => controller.setTaskEditorMode("read"),
|
|
4012
|
+
children: copy.t("actions.cancel")
|
|
4013
|
+
}
|
|
4014
|
+
),
|
|
4015
|
+
/* @__PURE__ */ jsxs16(
|
|
4016
|
+
Button12,
|
|
4017
|
+
{
|
|
4018
|
+
disabled: canIssueManagerSaveTask({
|
|
4019
|
+
selectedIssue,
|
|
4020
|
+
view
|
|
4021
|
+
}) === false,
|
|
4022
|
+
size: "default",
|
|
4023
|
+
type: "button",
|
|
4024
|
+
onClick: () => void controller.saveTask(),
|
|
4025
|
+
children: [
|
|
4026
|
+
/* @__PURE__ */ jsx16(CapabilityIcon, { size: 16 }),
|
|
4027
|
+
copy.t("actions.saveTask")
|
|
4028
|
+
]
|
|
4029
|
+
}
|
|
4030
|
+
)
|
|
4031
|
+
] })
|
|
4032
|
+
] })
|
|
4033
|
+
}
|
|
4034
|
+
);
|
|
3917
4035
|
}
|
|
3918
4036
|
return null;
|
|
3919
4037
|
}
|
|
@@ -3979,10 +4097,10 @@ function IssueManagerTaskDrawer({
|
|
|
3979
4097
|
|
|
3980
4098
|
// src/ui/internal/shell/useIssueManagerShellView.ts
|
|
3981
4099
|
import {
|
|
3982
|
-
useEffect as
|
|
4100
|
+
useEffect as useEffect7,
|
|
3983
4101
|
useEffectEvent as useEffectEvent3,
|
|
3984
4102
|
useRef as useRef3,
|
|
3985
|
-
useState as
|
|
4103
|
+
useState as useState8
|
|
3986
4104
|
} from "react";
|
|
3987
4105
|
function useIssueManagerShellView({
|
|
3988
4106
|
controller,
|
|
@@ -3991,15 +4109,15 @@ function useIssueManagerShellView({
|
|
|
3991
4109
|
}) {
|
|
3992
4110
|
const layoutRef = useRef3(null);
|
|
3993
4111
|
const resizeRef = useRef3(null);
|
|
3994
|
-
const [sidebarWidth, setSidebarWidth] =
|
|
4112
|
+
const [sidebarWidth, setSidebarWidth] = useState8(
|
|
3995
4113
|
issueManagerSidebarDefaultWidth
|
|
3996
4114
|
);
|
|
3997
|
-
const [isNarrowLayout, setIsNarrowLayout] =
|
|
4115
|
+
const [isNarrowLayout, setIsNarrowLayout] = useState8(false);
|
|
3998
4116
|
const dismissNotification = useEffectEvent3(() => {
|
|
3999
4117
|
controller.dismissNotification();
|
|
4000
4118
|
});
|
|
4001
4119
|
const floatingNotice = controller.floatingNotice;
|
|
4002
|
-
|
|
4120
|
+
useEffect7(() => {
|
|
4003
4121
|
const publishLayout = () => {
|
|
4004
4122
|
const width = layoutRef.current?.getBoundingClientRect().width ?? 0;
|
|
4005
4123
|
if (!width) {
|
|
@@ -4022,7 +4140,7 @@ function useIssueManagerShellView({
|
|
|
4022
4140
|
window.removeEventListener("resize", publishLayout);
|
|
4023
4141
|
};
|
|
4024
4142
|
}, []);
|
|
4025
|
-
|
|
4143
|
+
useEffect7(() => {
|
|
4026
4144
|
if (!floatingNotice) {
|
|
4027
4145
|
return void 0;
|
|
4028
4146
|
}
|
|
@@ -4043,7 +4161,7 @@ function useIssueManagerShellView({
|
|
|
4043
4161
|
copy: controller.copy,
|
|
4044
4162
|
issues: controller.issues
|
|
4045
4163
|
});
|
|
4046
|
-
const statusCounts =
|
|
4164
|
+
const statusCounts = resolveIssueManagerStatusCounts(controller.issues);
|
|
4047
4165
|
const isSidebarAutoCollapsed = isNarrowLayout;
|
|
4048
4166
|
const isSidebarCollapsed = controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;
|
|
4049
4167
|
return {
|
|
@@ -4052,6 +4170,7 @@ function useIssueManagerShellView({
|
|
|
4052
4170
|
isNarrowLayout,
|
|
4053
4171
|
layoutRef,
|
|
4054
4172
|
layoutStyle: {
|
|
4173
|
+
gridTemplateColumns: isSidebarCollapsed ? "0 minmax(0, 1fr)" : "var(--issue-manager-sidebar-width) minmax(0, 1fr)",
|
|
4055
4174
|
"--issue-manager-sidebar-width": `${sidebarWidth}px`
|
|
4056
4175
|
},
|
|
4057
4176
|
resizeHandle: {
|
|
@@ -4148,7 +4267,7 @@ function IssueManagerShell({
|
|
|
4148
4267
|
return /* @__PURE__ */ jsxs18(
|
|
4149
4268
|
"div",
|
|
4150
4269
|
{
|
|
4151
|
-
className: "relative min-h-0 flex-1 overflow-hidden bg-transparent",
|
|
4270
|
+
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",
|
|
4152
4271
|
"data-issue-manager-sidebar-auto-collapsed": shellView.sidebar.isAutoCollapsed ? "true" : void 0,
|
|
4153
4272
|
"data-issue-manager-sidebar-collapsed": shellView.sidebar.isCollapsed ? "true" : void 0,
|
|
4154
4273
|
ref: shellView.layoutRef,
|
|
@@ -4166,7 +4285,7 @@ function IssueManagerShell({
|
|
|
4166
4285
|
statusCounts: shellView.sidebar.statusCounts
|
|
4167
4286
|
}
|
|
4168
4287
|
),
|
|
4169
|
-
shellView.sidebar.
|
|
4288
|
+
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx18(
|
|
4170
4289
|
"div",
|
|
4171
4290
|
{
|
|
4172
4291
|
"aria-label": controller.copy.t("labels.resizeIssueList"),
|
|
@@ -4174,7 +4293,10 @@ function IssueManagerShell({
|
|
|
4174
4293
|
"aria-valuemax": shellView.resizeHandle.ariaValueMax,
|
|
4175
4294
|
"aria-valuemin": shellView.resizeHandle.ariaValueMin,
|
|
4176
4295
|
"aria-valuenow": shellView.resizeHandle.ariaValueNow,
|
|
4177
|
-
className:
|
|
4296
|
+
className: cn11(
|
|
4297
|
+
"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",
|
|
4298
|
+
shellView.sidebar.isCollapsed && "pointer-events-none left-[-6px] opacity-0"
|
|
4299
|
+
),
|
|
4178
4300
|
role: "separator",
|
|
4179
4301
|
tabIndex: 0,
|
|
4180
4302
|
onKeyDown: shellView.resizeHandle.onKeyDown,
|
|
@@ -4185,66 +4307,57 @@ function IssueManagerShell({
|
|
|
4185
4307
|
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)]" })
|
|
4186
4308
|
}
|
|
4187
4309
|
),
|
|
4188
|
-
/* @__PURE__ */ jsxs18(
|
|
4189
|
-
"div",
|
|
4190
|
-
|
|
4191
|
-
|
|
4192
|
-
|
|
4193
|
-
|
|
4194
|
-
|
|
4195
|
-
|
|
4196
|
-
|
|
4197
|
-
|
|
4198
|
-
|
|
4199
|
-
|
|
4200
|
-
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
controller,
|
|
4240
|
-
selectedIssue,
|
|
4241
|
-
selectedTask,
|
|
4242
|
-
onClose: onCloseTaskDrawer
|
|
4243
|
-
}
|
|
4244
|
-
) : null
|
|
4245
|
-
]
|
|
4246
|
-
}
|
|
4247
|
-
)
|
|
4310
|
+
/* @__PURE__ */ jsxs18("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent", children: [
|
|
4311
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
4312
|
+
/* @__PURE__ */ jsx18("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx18(
|
|
4313
|
+
IssueManagerIssuePane,
|
|
4314
|
+
{
|
|
4315
|
+
controller,
|
|
4316
|
+
selectedIssue,
|
|
4317
|
+
onDismissCreate: onDismissIssueCreate
|
|
4318
|
+
}
|
|
4319
|
+
) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx18(
|
|
4320
|
+
IssueManagerTaskComposerPane,
|
|
4321
|
+
{
|
|
4322
|
+
controller,
|
|
4323
|
+
selectedIssue,
|
|
4324
|
+
onCancel: () => controller.setTaskEditorMode("read")
|
|
4325
|
+
}
|
|
4326
|
+
) : selectedIssue ? /* @__PURE__ */ jsx18(
|
|
4327
|
+
IssueManagerIssuePane,
|
|
4328
|
+
{
|
|
4329
|
+
controller,
|
|
4330
|
+
selectedIssue,
|
|
4331
|
+
onDismissCreate: onDismissIssueCreate
|
|
4332
|
+
}
|
|
4333
|
+
) : /* @__PURE__ */ jsx18(
|
|
4334
|
+
IssueManagerShellEmptyState,
|
|
4335
|
+
{
|
|
4336
|
+
controller,
|
|
4337
|
+
emptyIllustration
|
|
4338
|
+
}
|
|
4339
|
+
) }),
|
|
4340
|
+
/* @__PURE__ */ jsx18(
|
|
4341
|
+
IssueManagerBottomBar,
|
|
4342
|
+
{
|
|
4343
|
+
controller,
|
|
4344
|
+
isNarrowLayout: shellView.isNarrowLayout,
|
|
4345
|
+
selectedIssue,
|
|
4346
|
+
selectedTask,
|
|
4347
|
+
visible: shellView.content.showBottomBar
|
|
4348
|
+
}
|
|
4349
|
+
)
|
|
4350
|
+
] }),
|
|
4351
|
+
shellView.content.isTaskDrawerOpen ? /* @__PURE__ */ jsx18(
|
|
4352
|
+
IssueManagerTaskDrawer,
|
|
4353
|
+
{
|
|
4354
|
+
controller,
|
|
4355
|
+
selectedIssue,
|
|
4356
|
+
selectedTask,
|
|
4357
|
+
onClose: onCloseTaskDrawer
|
|
4358
|
+
}
|
|
4359
|
+
) : null
|
|
4360
|
+
] })
|
|
4248
4361
|
]
|
|
4249
4362
|
}
|
|
4250
4363
|
);
|
|
@@ -4257,13 +4370,16 @@ function IssueManagerShellEmptyState({
|
|
|
4257
4370
|
emptyIllustration ?? null,
|
|
4258
4371
|
/* @__PURE__ */ jsx18("h2", { className: "text-lg font-semibold leading-[1.35] text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
|
|
4259
4372
|
/* @__PURE__ */ jsx18("p", { className: "max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
|
|
4260
|
-
/* @__PURE__ */
|
|
4373
|
+
/* @__PURE__ */ jsxs18(
|
|
4261
4374
|
Button13,
|
|
4262
4375
|
{
|
|
4263
|
-
className: "mt-2",
|
|
4376
|
+
className: "mt-2 gap-2",
|
|
4264
4377
|
type: "button",
|
|
4265
4378
|
onClick: () => controller.setIssueEditorMode("create"),
|
|
4266
|
-
children:
|
|
4379
|
+
children: [
|
|
4380
|
+
/* @__PURE__ */ jsx18(FileCreateIcon4, { size: 16 }),
|
|
4381
|
+
controller.copy.t("actions.createIssue")
|
|
4382
|
+
]
|
|
4267
4383
|
}
|
|
4268
4384
|
)
|
|
4269
4385
|
] }) });
|
|
@@ -4346,7 +4462,7 @@ function IssueManagerNodeHeader({
|
|
|
4346
4462
|
"header",
|
|
4347
4463
|
{
|
|
4348
4464
|
...headerProps,
|
|
4349
|
-
className:
|
|
4465
|
+
className: cn12(
|
|
4350
4466
|
"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3",
|
|
4351
4467
|
className
|
|
4352
4468
|
),
|
|
@@ -4357,13 +4473,13 @@ function IssueManagerNodeHeader({
|
|
|
4357
4473
|
Button14,
|
|
4358
4474
|
{
|
|
4359
4475
|
"aria-label": toggleLabel,
|
|
4360
|
-
className: "rounded-md",
|
|
4476
|
+
className: "cursor-pointer rounded-md",
|
|
4361
4477
|
"data-issue-manager-sidebar-auto-collapsed": isSidebarAutoCollapsed ? "true" : void 0,
|
|
4362
4478
|
"data-issue-manager-sidebar-collapsed": effectiveCollapsed ? "true" : void 0,
|
|
4363
4479
|
size: "icon-sm",
|
|
4364
4480
|
title: toggleLabel,
|
|
4365
4481
|
type: "button",
|
|
4366
|
-
variant: "
|
|
4482
|
+
variant: "ghost",
|
|
4367
4483
|
onClick: (event) => {
|
|
4368
4484
|
event.stopPropagation();
|
|
4369
4485
|
toggleSidebar();
|
|
@@ -4393,4 +4509,4 @@ export {
|
|
|
4393
4509
|
IssueManagerNode,
|
|
4394
4510
|
IssueManagerNodeHeader
|
|
4395
4511
|
};
|
|
4396
|
-
//# sourceMappingURL=chunk-
|
|
4512
|
+
//# sourceMappingURL=chunk-K3F67IRA.js.map
|