@nextop-os/workspace-issue-manager 0.0.24 → 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DMC3JMM2.js → chunk-PDBLEOV4.js} +671 -550
- package/dist/chunk-PDBLEOV4.js.map +1 -0
- package/dist/{chunk-5Y5GVLKU.js → chunk-QKFOVSRG.js} +55 -55
- package/dist/chunk-QKFOVSRG.js.map +1 -0
- package/dist/{chunk-V75TAM27.js → chunk-QW2WQXOG.js} +23 -2
- package/dist/chunk-QW2WQXOG.js.map +1 -0
- package/dist/{chunk-ZQVG7YMT.js → chunk-UZEH5YBL.js} +11 -4
- package/dist/chunk-UZEH5YBL.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-UZEH5YBL.js";
|
|
29
29
|
import {
|
|
30
30
|
appendIssueManagerWorkspaceFileLinksToContent,
|
|
31
31
|
clampIssueManagerSidebarWidth,
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
issueManagerSidebarMinWidth,
|
|
37
37
|
normalizeIssueManagerContent,
|
|
38
38
|
shouldAutoCollapseIssueManagerSidebar
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-QW2WQXOG.js";
|
|
40
40
|
|
|
41
41
|
// src/ui/react/internal/shell/IssueManagerNodeState.ts
|
|
42
42
|
import { useEffect, useEffectEvent, useState } from "react";
|
|
@@ -741,9 +741,9 @@ function createIssueManagerControllerActions(input) {
|
|
|
741
741
|
selectedTaskId: null
|
|
742
742
|
}));
|
|
743
743
|
},
|
|
744
|
-
async deleteIssue() {
|
|
744
|
+
async deleteIssue(options) {
|
|
745
745
|
const selectedIssueId = nodeState.selectedIssueId;
|
|
746
|
-
if (!selectedIssueId || !confirmIssueManagerMessage(copy.t("confirmations.deleteIssue"))) {
|
|
746
|
+
if (!selectedIssueId || options?.skipConfirmation !== true && !confirmIssueManagerMessage(copy.t("confirmations.deleteIssue"))) {
|
|
747
747
|
return;
|
|
748
748
|
}
|
|
749
749
|
try {
|
|
@@ -759,10 +759,10 @@ function createIssueManagerControllerActions(input) {
|
|
|
759
759
|
notifyError(error, "messages.issueDeleteFailed");
|
|
760
760
|
}
|
|
761
761
|
},
|
|
762
|
-
async deleteTask() {
|
|
762
|
+
async deleteTask(options) {
|
|
763
763
|
const selectedIssueId = nodeState.selectedIssueId;
|
|
764
764
|
const selectedTaskId = nodeState.selectedTaskId;
|
|
765
|
-
if (!selectedIssueId || !selectedTaskId || !confirmIssueManagerMessage(copy.t("confirmations.deleteTask"))) {
|
|
765
|
+
if (!selectedIssueId || !selectedTaskId || options?.skipConfirmation !== true && !confirmIssueManagerMessage(copy.t("confirmations.deleteTask"))) {
|
|
766
766
|
return;
|
|
767
767
|
}
|
|
768
768
|
try {
|
|
@@ -1659,39 +1659,46 @@ function hasFileAdapterMethod2(fileAdapter, methodName) {
|
|
|
1659
1659
|
}
|
|
1660
1660
|
|
|
1661
1661
|
// src/ui/IssueManagerNode.tsx
|
|
1662
|
-
import { Button as Button14, PanelIcon, cn as
|
|
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 {
|
|
1687
|
+
AddIcon,
|
|
1682
1688
|
ArrowRightIcon,
|
|
1683
1689
|
Button,
|
|
1684
1690
|
CheckIcon,
|
|
1685
|
-
DirectoryIcon,
|
|
1686
1691
|
FileIcon,
|
|
1692
|
+
FolderFilledIcon,
|
|
1687
1693
|
Input,
|
|
1688
|
-
LoadingIcon,
|
|
1689
1694
|
ScrollArea,
|
|
1690
1695
|
SearchIcon,
|
|
1696
|
+
Spinner,
|
|
1691
1697
|
cn
|
|
1692
1698
|
} from "@nextop-os/ui-system";
|
|
1693
1699
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1694
|
-
var issueManagerReferenceTreeIndent =
|
|
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,50 @@ 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(AddIcon, { 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
|
-
children:
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
expandedFolderPaths,
|
|
1854
|
-
focusedPath,
|
|
1855
|
-
selectedRefs,
|
|
1856
|
-
onFocusPath,
|
|
1857
|
-
onToggleFolder,
|
|
1858
|
-
onToggleRef
|
|
1859
|
-
},
|
|
1860
|
-
childEntry.path
|
|
1861
|
-
)) : childState?.loaded ? /* @__PURE__ */ jsx(
|
|
1862
|
-
"div",
|
|
1863
|
-
{
|
|
1864
|
-
className: "px-2 py-2 text-xs text-muted-foreground",
|
|
1865
|
-
style: {
|
|
1866
|
-
paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`
|
|
1867
|
-
},
|
|
1868
|
-
children: copy.t("referencePicker.emptyDirectory")
|
|
1897
|
+
className: cn(
|
|
1898
|
+
"grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none",
|
|
1899
|
+
expanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
1900
|
+
),
|
|
1901
|
+
children: /* @__PURE__ */ jsx(
|
|
1902
|
+
"div",
|
|
1903
|
+
{
|
|
1904
|
+
"aria-hidden": expanded ? void 0 : "true",
|
|
1905
|
+
className: cn(
|
|
1906
|
+
"min-h-0 overflow-hidden transition-[opacity,transform] duration-200 ease-out motion-reduce:transition-none",
|
|
1907
|
+
expanded ? "translate-y-0 opacity-100" : "-translate-y-1 opacity-0"
|
|
1908
|
+
),
|
|
1909
|
+
inert: expanded ? void 0 : true,
|
|
1910
|
+
children: childContent
|
|
1911
|
+
}
|
|
1912
|
+
)
|
|
1869
1913
|
}
|
|
1870
|
-
) : null
|
|
1914
|
+
) : null
|
|
1871
1915
|
] });
|
|
1872
1916
|
}
|
|
1873
1917
|
function IssueManagerReferencePickerSearchEntry({
|
|
@@ -1882,8 +1926,8 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1882
1926
|
"div",
|
|
1883
1927
|
{
|
|
1884
1928
|
className: cn(
|
|
1885
|
-
"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-
|
|
1886
|
-
focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block
|
|
1929
|
+
"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-[6px] border py-2.5 pr-1 pl-3 transition-colors",
|
|
1930
|
+
focused || selected ? "border-border bg-transparency-block" : "border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block"
|
|
1887
1931
|
),
|
|
1888
1932
|
children: [
|
|
1889
1933
|
/* @__PURE__ */ jsxs(
|
|
@@ -1893,10 +1937,10 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1893
1937
|
type: "button",
|
|
1894
1938
|
onClick: () => onFocusPath(entry.path),
|
|
1895
1939
|
children: [
|
|
1896
|
-
/* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-
|
|
1940
|
+
/* @__PURE__ */ jsx("span", { className: "grid size-9 shrink-0 place-items-center rounded-lg bg-[var(--transparency-block)] text-[var(--text-tertiary)]", children: isFolder ? /* @__PURE__ */ jsx(FolderFilledIcon, { className: "size-4 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4 text-[var(--text-tertiary)]" }) }),
|
|
1897
1941
|
/* @__PURE__ */ jsxs("span", { className: "min-w-0", children: [
|
|
1898
|
-
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-
|
|
1899
|
-
/* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-
|
|
1942
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-sm font-medium text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(entry) }),
|
|
1943
|
+
/* @__PURE__ */ jsx("span", { className: "block truncate text-xs text-[var(--text-secondary)]", children: entry.path })
|
|
1900
1944
|
] })
|
|
1901
1945
|
]
|
|
1902
1946
|
}
|
|
@@ -1904,14 +1948,16 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1904
1948
|
/* @__PURE__ */ jsx(
|
|
1905
1949
|
Button,
|
|
1906
1950
|
{
|
|
1907
|
-
|
|
1951
|
+
"aria-label": resolveIssueManagerReferenceLabel(entry),
|
|
1952
|
+
"aria-pressed": selected,
|
|
1953
|
+
size: "icon-sm",
|
|
1908
1954
|
type: "button",
|
|
1909
|
-
variant:
|
|
1955
|
+
variant: "ghost",
|
|
1910
1956
|
onClick: () => {
|
|
1911
1957
|
onFocusPath(entry.path);
|
|
1912
1958
|
onToggleRef(entry);
|
|
1913
1959
|
},
|
|
1914
|
-
children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) :
|
|
1960
|
+
children: selected ? /* @__PURE__ */ jsx(CheckIcon, { size: 14 }) : /* @__PURE__ */ jsx(AddIcon, { size: 16 })
|
|
1915
1961
|
}
|
|
1916
1962
|
)
|
|
1917
1963
|
]
|
|
@@ -1921,7 +1967,7 @@ function IssueManagerReferencePickerSearchEntry({
|
|
|
1921
1967
|
function IssueManagerReferencePickerFeedback({
|
|
1922
1968
|
children
|
|
1923
1969
|
}) {
|
|
1924
|
-
return /* @__PURE__ */ jsx("div", { className: "grid min-h-
|
|
1970
|
+
return /* @__PURE__ */ jsx("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
|
|
1925
1971
|
}
|
|
1926
1972
|
function resolveIssueManagerReferenceLabel(ref) {
|
|
1927
1973
|
return ref.displayName || ref.path.split("/").filter(Boolean).at(-1) || ref.path;
|
|
@@ -1929,19 +1975,20 @@ function resolveIssueManagerReferenceLabel(ref) {
|
|
|
1929
1975
|
|
|
1930
1976
|
// src/ui/internal/reference/IssueManagerReferencePickerSections.tsx
|
|
1931
1977
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1978
|
+
var issueManagerReferencePickerSelectedBadgeClassName = "max-w-[14rem] rounded-[4px] border-transparent bg-[var(--transparency-block)] text-[var(--text-primary)]";
|
|
1932
1979
|
function IssueManagerReferencePickerPreviewPane({
|
|
1933
1980
|
copy,
|
|
1934
1981
|
focusedEntry,
|
|
1935
1982
|
mode
|
|
1936
1983
|
}) {
|
|
1937
|
-
return /* @__PURE__ */ jsx2("aside", { className: "flex shrink-0 flex-col border-t border-
|
|
1938
|
-
/* @__PURE__ */
|
|
1939
|
-
|
|
1940
|
-
/* @__PURE__ */ jsx2("p", { className: "max-w-[24ch] text-sm leading-5 text-
|
|
1941
|
-
] })
|
|
1984
|
+
return /* @__PURE__ */ jsx2("aside", { className: "flex shrink-0 flex-col border-t border-[var(--line-1)] bg-[var(--background-fronted)] lg:min-h-0 lg:flex-1 lg:border-t-0", children: /* @__PURE__ */ jsx2("div", { className: "flex min-h-0 flex-1 flex-col px-4 py-4 sm:px-5 lg:py-5", children: focusedEntry ? /* @__PURE__ */ jsxs2("div", { className: "flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5", children: [
|
|
1985
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-h-32 flex-col items-center justify-center space-y-4 rounded-[8px] border border-[var(--line-2,var(--border-2))] bg-[var(--transparency-block)] px-5 py-8 text-center sm:min-h-40 sm:py-10 lg:min-h-56 lg:py-14", children: [
|
|
1986
|
+
focusedEntry.kind === "folder" ? /* @__PURE__ */ jsx2(FolderFilledIcon2, { className: "mx-auto size-9 text-[var(--rich-text-folder)]" }) : /* @__PURE__ */ jsx2(FileIcon2, { className: "mx-auto size-9 text-[var(--text-tertiary)]" }),
|
|
1987
|
+
/* @__PURE__ */ jsx2("p", { className: "mx-auto max-w-[24ch] text-sm leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.kind === "folder" ? focusedEntry.path : resolveIssueManagerReferenceLabel(focusedEntry) })
|
|
1988
|
+
] }),
|
|
1942
1989
|
/* @__PURE__ */ jsx2("div", { className: "space-y-2 lg:space-y-3", children: /* @__PURE__ */ jsxs2("div", { className: "space-y-1.5", children: [
|
|
1943
|
-
/* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-
|
|
1944
|
-
/* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-
|
|
1990
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-[15px] font-semibold text-[var(--text-primary)]", children: resolveIssueManagerReferenceLabel(focusedEntry) }),
|
|
1991
|
+
/* @__PURE__ */ jsx2("p", { className: "line-clamp-3 text-sm text-[var(--text-secondary)] [overflow-wrap:anywhere]", children: focusedEntry.path })
|
|
1945
1992
|
] }) })
|
|
1946
1993
|
] }) : /* @__PURE__ */ jsx2(IssueManagerReferencePickerFeedback2, { children: mode === "search" ? copy.t("referencePicker.emptySearch") : copy.t("referencePicker.emptyDirectory") }) }) });
|
|
1947
1994
|
}
|
|
@@ -1951,26 +1998,34 @@ function IssueManagerReferencePickerFooter({
|
|
|
1951
1998
|
onConfirm,
|
|
1952
1999
|
selectedRefs
|
|
1953
2000
|
}) {
|
|
1954
|
-
return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3 border-t border-
|
|
2001
|
+
return /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3 border-t border-[var(--line-1)] px-4 py-4 sm:px-6 lg:flex-row lg:items-center lg:justify-between", children: [
|
|
1955
2002
|
/* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-wrap items-center gap-2 lg:flex-1", children: [
|
|
1956
|
-
/* @__PURE__ */ jsx2("span", { className: "text-sm text-
|
|
2003
|
+
/* @__PURE__ */ jsx2("span", { className: "text-sm text-[var(--text-secondary)]", children: copy.t("referencePicker.selectedCount", {
|
|
1957
2004
|
count: selectedRefs.length
|
|
1958
2005
|
}) }),
|
|
1959
2006
|
selectedRefs.slice(0, 2).map((ref) => /* @__PURE__ */ jsx2(
|
|
1960
2007
|
Badge,
|
|
1961
2008
|
{
|
|
1962
|
-
className:
|
|
2009
|
+
className: issueManagerReferencePickerSelectedBadgeClassName,
|
|
2010
|
+
variant: "secondary",
|
|
1963
2011
|
children: /* @__PURE__ */ jsx2("span", { className: "truncate", children: resolveIssueManagerReferenceLabel(ref) })
|
|
1964
2012
|
},
|
|
1965
2013
|
ref.path
|
|
1966
2014
|
)),
|
|
1967
|
-
selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
2015
|
+
selectedRefs.length > 2 ? /* @__PURE__ */ jsxs2(
|
|
2016
|
+
Badge,
|
|
2017
|
+
{
|
|
2018
|
+
className: issueManagerReferencePickerSelectedBadgeClassName,
|
|
2019
|
+
variant: "secondary",
|
|
2020
|
+
children: [
|
|
2021
|
+
"+",
|
|
2022
|
+
selectedRefs.length - 2
|
|
2023
|
+
]
|
|
2024
|
+
}
|
|
2025
|
+
) : null
|
|
1971
2026
|
] }),
|
|
1972
2027
|
/* @__PURE__ */ jsxs2("div", { className: "flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0", children: [
|
|
1973
|
-
/* @__PURE__ */ jsx2(Button2, { type: "button", variant: "
|
|
2028
|
+
/* @__PURE__ */ jsx2(Button2, { type: "button", variant: "secondary", onClick: onClose, children: copy.t("actions.cancel") }),
|
|
1974
2029
|
/* @__PURE__ */ jsx2(
|
|
1975
2030
|
Button2,
|
|
1976
2031
|
{
|
|
@@ -1986,11 +2041,13 @@ function IssueManagerReferencePickerFooter({
|
|
|
1986
2041
|
function IssueManagerReferencePickerFeedback2({
|
|
1987
2042
|
children
|
|
1988
2043
|
}) {
|
|
1989
|
-
return /* @__PURE__ */ jsx2("div", { className: "grid min-h-
|
|
2044
|
+
return /* @__PURE__ */ jsx2("div", { className: "grid min-h-0 flex-1 place-items-center px-4 text-center text-sm text-[var(--text-secondary)]", children });
|
|
1990
2045
|
}
|
|
1991
2046
|
|
|
1992
2047
|
// src/ui/internal/reference/IssueManagerReferencePicker.tsx
|
|
1993
2048
|
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
2049
|
+
var issueManagerReferencePickerBackdropMotionClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none";
|
|
2050
|
+
var issueManagerReferencePickerPanelMotionClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:zoom-in-[0.96] motion-safe:duration-[250ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:animate-none";
|
|
1994
2051
|
function IssueManagerReferencePicker({
|
|
1995
2052
|
copy,
|
|
1996
2053
|
fileAdapter,
|
|
@@ -2021,32 +2078,31 @@ function IssueManagerReferencePicker({
|
|
|
2021
2078
|
open,
|
|
2022
2079
|
workspaceId
|
|
2023
2080
|
});
|
|
2024
|
-
const selectedCountLabel = useMemo4(
|
|
2025
|
-
() => copy.t("referencePicker.selectedCount", { count: selectedRefs.length }),
|
|
2026
|
-
[copy, selectedRefs.length]
|
|
2027
|
-
);
|
|
2028
2081
|
if (!open) {
|
|
2029
2082
|
return null;
|
|
2030
2083
|
}
|
|
2031
2084
|
const dialog = /* @__PURE__ */ jsx3(
|
|
2032
2085
|
"div",
|
|
2033
2086
|
{
|
|
2034
|
-
className:
|
|
2087
|
+
className: cn2(
|
|
2088
|
+
"fixed inset-0 grid place-items-center bg-[var(--backdrop)] px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8",
|
|
2089
|
+
issueManagerReferencePickerBackdropMotionClassName
|
|
2090
|
+
),
|
|
2035
2091
|
style: { zIndex: "var(--z-panel)" },
|
|
2036
2092
|
onClick: onClose,
|
|
2037
2093
|
children: /* @__PURE__ */ jsxs3(
|
|
2038
2094
|
Card,
|
|
2039
2095
|
{
|
|
2040
2096
|
"aria-modal": "true",
|
|
2041
|
-
className:
|
|
2097
|
+
className: cn2(
|
|
2098
|
+
"flex h-[min(88vh,44rem)] w-full max-w-5xl origin-center flex-col gap-0 overflow-hidden border-[var(--line-1)] bg-[var(--background-fronted)] py-0 text-[var(--text-primary)] shadow-panel sm:h-[min(82vh,44rem)]",
|
|
2099
|
+
issueManagerReferencePickerPanelMotionClassName
|
|
2100
|
+
),
|
|
2042
2101
|
role: "dialog",
|
|
2043
2102
|
onClick: (event) => event.stopPropagation(),
|
|
2044
2103
|
children: [
|
|
2045
|
-
/* @__PURE__ */ jsx3(CardHeader, { className: "border-b border-
|
|
2046
|
-
/* @__PURE__ */
|
|
2047
|
-
/* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }),
|
|
2048
|
-
/* @__PURE__ */ jsx3(CardDescription, { children: selectedCountLabel })
|
|
2049
|
-
] }),
|
|
2104
|
+
/* @__PURE__ */ jsx3(CardHeader, { className: "border-b border-[var(--line-1)] px-4 py-4 sm:px-6 sm:py-5", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-start justify-between gap-4", children: [
|
|
2105
|
+
/* @__PURE__ */ jsx3("div", { className: "min-w-0", children: /* @__PURE__ */ jsx3(CardTitle, { children: copy.t("referencePicker.title") }) }),
|
|
2050
2106
|
/* @__PURE__ */ jsx3(
|
|
2051
2107
|
Button3,
|
|
2052
2108
|
{
|
|
@@ -2109,10 +2165,11 @@ function IssueManagerReferencePicker({
|
|
|
2109
2165
|
}
|
|
2110
2166
|
|
|
2111
2167
|
// src/ui/internal/shell/IssueManagerShell.tsx
|
|
2112
|
-
import { Button as Button13, cn as
|
|
2168
|
+
import { Button as Button13, FileCreateIcon as FileCreateIcon4, cn as cn11 } from "@nextop-os/ui-system";
|
|
2113
2169
|
|
|
2114
2170
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
2115
|
-
import {
|
|
2171
|
+
import { useState as useState6 } from "react";
|
|
2172
|
+
import { Badge as Badge3, Button as Button7, ConfirmationDialog, Input as Input2 } from "@nextop-os/ui-system";
|
|
2116
2173
|
|
|
2117
2174
|
// src/ui/internal/issue/IssueManagerIssueSections.tsx
|
|
2118
2175
|
import {
|
|
@@ -2120,7 +2177,7 @@ import {
|
|
|
2120
2177
|
Button as Button5,
|
|
2121
2178
|
FileCreateIcon as FileCreateIcon2,
|
|
2122
2179
|
ScrollArea as ScrollArea2,
|
|
2123
|
-
cn as
|
|
2180
|
+
cn as cn3
|
|
2124
2181
|
} from "@nextop-os/ui-system";
|
|
2125
2182
|
|
|
2126
2183
|
// src/ui/internal/panel/IssueManagerPanelText.ts
|
|
@@ -2195,19 +2252,19 @@ function IssueManagerDetailTextSection({
|
|
|
2195
2252
|
tone = "muted"
|
|
2196
2253
|
}) {
|
|
2197
2254
|
return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
|
|
2198
|
-
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-
|
|
2255
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: label }),
|
|
2199
2256
|
/* @__PURE__ */ jsxs5("div", { className: "grid gap-1.5", children: [
|
|
2200
2257
|
/* @__PURE__ */ jsx5(
|
|
2201
2258
|
"p",
|
|
2202
2259
|
{
|
|
2203
|
-
className:
|
|
2204
|
-
"text-sm leading-6",
|
|
2205
|
-
tone === "destructive" ? "text-
|
|
2260
|
+
className: cn3(
|
|
2261
|
+
"text-sm font-normal leading-6",
|
|
2262
|
+
tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-secondary)]"
|
|
2206
2263
|
),
|
|
2207
2264
|
children: body
|
|
2208
2265
|
}
|
|
2209
2266
|
),
|
|
2210
|
-
meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs leading-5 text-
|
|
2267
|
+
meta ? /* @__PURE__ */ jsx5("p", { className: "text-xs font-normal leading-5 text-[var(--text-secondary)]", children: meta }) : null
|
|
2211
2268
|
] })
|
|
2212
2269
|
] });
|
|
2213
2270
|
}
|
|
@@ -2217,8 +2274,8 @@ function IssueManagerOutputSection({
|
|
|
2217
2274
|
outputs
|
|
2218
2275
|
}) {
|
|
2219
2276
|
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-
|
|
2277
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.executionOutputs") }),
|
|
2278
|
+
outputs.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noExecutionOutputs") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: outputs.map((output) => /* @__PURE__ */ jsxs5(
|
|
2222
2279
|
"button",
|
|
2223
2280
|
{
|
|
2224
2281
|
className: "flex items-start justify-between gap-4 rounded-xl border border-border/65 px-4 py-3 text-left transition-colors hover:bg-accent/18",
|
|
@@ -2232,10 +2289,10 @@ function IssueManagerOutputSection({
|
|
|
2232
2289
|
},
|
|
2233
2290
|
children: [
|
|
2234
2291
|
/* @__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-
|
|
2292
|
+
/* @__PURE__ */ jsx5("span", { className: "block truncate text-sm font-semibold text-[var(--text-primary)]", children: output.displayName }),
|
|
2293
|
+
/* @__PURE__ */ jsx5("span", { className: "mt-1 block truncate text-xs font-normal text-[var(--text-secondary)]", children: output.path })
|
|
2237
2294
|
] }),
|
|
2238
|
-
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-
|
|
2295
|
+
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(output.createdAtUnix) || "" })
|
|
2239
2296
|
]
|
|
2240
2297
|
},
|
|
2241
2298
|
output.outputId
|
|
@@ -2251,26 +2308,16 @@ function IssueManagerSubtaskSection({
|
|
|
2251
2308
|
}) {
|
|
2252
2309
|
return /* @__PURE__ */ jsxs5("section", { className: "grid gap-2.5", children: [
|
|
2253
2310
|
/* @__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
|
-
)
|
|
2311
|
+
/* @__PURE__ */ jsx5("h3", { className: "text-sm font-semibold text-[var(--text-primary)]", children: copy.t("labels.subtasks") }),
|
|
2312
|
+
/* @__PURE__ */ jsxs5(Button5, { size: "dialog", type: "button", variant: "ghost", onClick: onCreate, children: [
|
|
2313
|
+
/* @__PURE__ */ jsx5(FileCreateIcon2, { size: 14 }),
|
|
2314
|
+
copy.t("actions.add")
|
|
2315
|
+
] })
|
|
2269
2316
|
] }),
|
|
2270
|
-
tasks.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm leading-6 text-
|
|
2317
|
+
tasks.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "text-sm font-normal leading-6 text-[var(--text-secondary)]", children: copy.t("messages.noSubtasksForIssue") }) : /* @__PURE__ */ jsx5("div", { className: "grid gap-2", children: tasks.map((task) => /* @__PURE__ */ jsxs5(
|
|
2271
2318
|
"button",
|
|
2272
2319
|
{
|
|
2273
|
-
className:
|
|
2320
|
+
className: cn3(
|
|
2274
2321
|
"flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors",
|
|
2275
2322
|
selectedTaskId === task.taskId ? "border-border/90 bg-background-fronted" : "border-border/65 hover:bg-accent/18"
|
|
2276
2323
|
),
|
|
@@ -2279,15 +2326,15 @@ function IssueManagerSubtaskSection({
|
|
|
2279
2326
|
children: [
|
|
2280
2327
|
/* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
|
|
2281
2328
|
/* @__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
|
|
2329
|
+
/* @__PURE__ */ jsx5("span", { className: "truncate text-sm font-semibold text-[var(--text-primary)]", children: task.title }),
|
|
2330
|
+
/* @__PURE__ */ jsx5(Badge2, { className: "rounded-md px-2 py-1 text-[11px] font-medium", children: resolveIssueManagerStatusLabel(copy, task.status) })
|
|
2284
2331
|
] }),
|
|
2285
|
-
/* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm leading-6 text-
|
|
2332
|
+
/* @__PURE__ */ jsx5("p", { className: "mt-2 line-clamp-2 text-sm font-normal leading-6 text-[var(--text-secondary)]", children: summarizeIssueManagerContent(
|
|
2286
2333
|
task.content,
|
|
2287
2334
|
copy.t("messages.taskContentEmpty")
|
|
2288
2335
|
) })
|
|
2289
2336
|
] }),
|
|
2290
|
-
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs text-
|
|
2337
|
+
/* @__PURE__ */ jsx5("span", { className: "shrink-0 text-xs font-normal text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
|
|
2291
2338
|
task.createdAtUnix ?? task.updatedAtUnix
|
|
2292
2339
|
) || "" })
|
|
2293
2340
|
]
|
|
@@ -2298,9 +2345,9 @@ function IssueManagerSubtaskSection({
|
|
|
2298
2345
|
}
|
|
2299
2346
|
|
|
2300
2347
|
// src/ui/internal/content/IssueManagerDescriptionSection.tsx
|
|
2301
|
-
import { useEffect as
|
|
2348
|
+
import { useEffect as useEffect5, useRef, useState as useState4 } from "react";
|
|
2302
2349
|
import { RichTextReadonlyContent } from "@nextop-os/ui-rich-text/editor";
|
|
2303
|
-
import { cn as
|
|
2350
|
+
import { cn as cn4 } from "@nextop-os/ui-system";
|
|
2304
2351
|
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
2305
2352
|
function IssueManagerDescriptionSection({
|
|
2306
2353
|
content,
|
|
@@ -2311,9 +2358,9 @@ function IssueManagerDescriptionSection({
|
|
|
2311
2358
|
variant = "card"
|
|
2312
2359
|
}) {
|
|
2313
2360
|
const contentRef = useRef(null);
|
|
2314
|
-
const [isOverflowing, setIsOverflowing] =
|
|
2361
|
+
const [isOverflowing, setIsOverflowing] = useState4(false);
|
|
2315
2362
|
const normalizedContent = normalizeIssueManagerContent(content).trim();
|
|
2316
|
-
|
|
2363
|
+
useEffect5(() => {
|
|
2317
2364
|
if (variant === "plain") {
|
|
2318
2365
|
setIsOverflowing(false);
|
|
2319
2366
|
return;
|
|
@@ -2346,13 +2393,13 @@ function IssueManagerDescriptionSection({
|
|
|
2346
2393
|
if (variant === "plain") {
|
|
2347
2394
|
return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
|
|
2348
2395
|
/* @__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(
|
|
2396
|
+
normalizedContent ? /* @__PURE__ */ jsx6("div", { className: "max-w-3xl text-sm font-normal leading-5 text-[var(--text-secondary)]", children: /* @__PURE__ */ jsx6(
|
|
2350
2397
|
IssueManagerDescriptionContent,
|
|
2351
2398
|
{
|
|
2352
2399
|
content: normalizedContent,
|
|
2353
2400
|
onOpen
|
|
2354
2401
|
}
|
|
2355
|
-
) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm leading-5 text-text-secondary", children: emptyLabel })
|
|
2402
|
+
) }) : /* @__PURE__ */ jsx6("p", { className: "text-sm font-normal leading-5 text-[var(--text-secondary)]", children: emptyLabel })
|
|
2356
2403
|
] });
|
|
2357
2404
|
}
|
|
2358
2405
|
return /* @__PURE__ */ jsxs6("section", { className: "grid gap-2", children: [
|
|
@@ -2360,7 +2407,7 @@ function IssueManagerDescriptionSection({
|
|
|
2360
2407
|
/* @__PURE__ */ jsxs6(
|
|
2361
2408
|
"div",
|
|
2362
2409
|
{
|
|
2363
|
-
className:
|
|
2410
|
+
className: cn4(
|
|
2364
2411
|
"relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3",
|
|
2365
2412
|
minHeightClass
|
|
2366
2413
|
),
|
|
@@ -2368,8 +2415,8 @@ function IssueManagerDescriptionSection({
|
|
|
2368
2415
|
/* @__PURE__ */ jsx6(
|
|
2369
2416
|
"div",
|
|
2370
2417
|
{
|
|
2371
|
-
className:
|
|
2372
|
-
"max-h-[18rem] overflow-y-auto pr-2 text-sm leading-5 text-text-secondary",
|
|
2418
|
+
className: cn4(
|
|
2419
|
+
"max-h-[18rem] overflow-y-auto pr-2 text-sm font-normal leading-5 text-[var(--text-secondary)]",
|
|
2373
2420
|
isOverflowing && "pb-8"
|
|
2374
2421
|
),
|
|
2375
2422
|
ref: contentRef,
|
|
@@ -2379,7 +2426,7 @@ function IssueManagerDescriptionSection({
|
|
|
2379
2426
|
content: normalizedContent,
|
|
2380
2427
|
onOpen
|
|
2381
2428
|
}
|
|
2382
|
-
) : /* @__PURE__ */ jsx6("p", { className: "text-text-secondary", children: emptyLabel })
|
|
2429
|
+
) : /* @__PURE__ */ jsx6("p", { className: "font-normal text-[var(--text-secondary)]", children: emptyLabel })
|
|
2383
2430
|
}
|
|
2384
2431
|
),
|
|
2385
2432
|
isOverflowing ? /* @__PURE__ */ jsx6(
|
|
@@ -2414,10 +2461,12 @@ function IssueManagerDescriptionContent({
|
|
|
2414
2461
|
}
|
|
2415
2462
|
|
|
2416
2463
|
// src/ui/internal/content/IssueManagerRichTextTextarea.tsx
|
|
2417
|
-
import { useEffect as
|
|
2464
|
+
import { useEffect as useEffect6, useMemo as useMemo4, useRef as useRef2, useState as useState5 } from "react";
|
|
2418
2465
|
import { RichTextAtEditor } from "@nextop-os/ui-rich-text/editor";
|
|
2419
|
-
import { Button as Button6, LinkIcon, cn as
|
|
2466
|
+
import { Button as Button6, LinkIcon, cn as cn5 } from "@nextop-os/ui-system";
|
|
2420
2467
|
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
2468
|
+
var issueManagerRichTextTextareaBaseClassName = "min-h-20 w-full rounded-[8px] border border-transparent bg-[var(--transparency-block)] p-3 text-sm font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none";
|
|
2469
|
+
var issueManagerRichTextPlaceholderBaseClassName = "min-h-20 w-full p-3 text-sm font-normal leading-[1.3] text-[var(--text-placeholder)]";
|
|
2421
2470
|
function IssueManagerRichTextTextarea({
|
|
2422
2471
|
controller,
|
|
2423
2472
|
onChange,
|
|
@@ -2426,15 +2475,15 @@ function IssueManagerRichTextTextarea({
|
|
|
2426
2475
|
textareaClassName,
|
|
2427
2476
|
value
|
|
2428
2477
|
}) {
|
|
2429
|
-
const providers =
|
|
2478
|
+
const providers = useMemo4(
|
|
2430
2479
|
() => controller.resolveRichTextAtProviders(surface),
|
|
2431
2480
|
[controller, surface]
|
|
2432
2481
|
);
|
|
2433
2482
|
const showReferenceAction = controller.canReferenceWorkspaceFiles;
|
|
2434
|
-
const [focusSignal, setFocusSignal] =
|
|
2483
|
+
const [focusSignal, setFocusSignal] = useState5(0);
|
|
2435
2484
|
const previousValueRef = useRef2(value);
|
|
2436
2485
|
const wasAddingReferenceRef = useRef2(false);
|
|
2437
|
-
|
|
2486
|
+
useEffect6(() => {
|
|
2438
2487
|
const isAddingReference = controller.referenceTarget?.mode === "insert" && controller.referenceTarget.parentKind === surface;
|
|
2439
2488
|
if (wasAddingReferenceRef.current && !isAddingReference && value !== previousValueRef.current) {
|
|
2440
2489
|
setFocusSignal((current) => current + 1);
|
|
@@ -2454,15 +2503,24 @@ function IssueManagerRichTextTextarea({
|
|
|
2454
2503
|
noMatchesLabel: controller.copy.t("richTextAt.noMatches"),
|
|
2455
2504
|
removeReferenceActionLabel: controller.copy.t("actions.removeReference")
|
|
2456
2505
|
},
|
|
2457
|
-
textareaClassName:
|
|
2506
|
+
textareaClassName: cn5(
|
|
2507
|
+
issueManagerRichTextTextareaBaseClassName,
|
|
2508
|
+
textareaClassName,
|
|
2509
|
+
showReferenceAction && "pb-11"
|
|
2510
|
+
),
|
|
2511
|
+
placeholderClassName: cn5(
|
|
2512
|
+
issueManagerRichTextPlaceholderBaseClassName,
|
|
2513
|
+
textareaClassName,
|
|
2514
|
+
showReferenceAction && "pb-11"
|
|
2515
|
+
),
|
|
2458
2516
|
placeholder,
|
|
2459
2517
|
value,
|
|
2460
2518
|
onChange,
|
|
2461
|
-
overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-
|
|
2519
|
+
overlay: showReferenceAction ? /* @__PURE__ */ jsx7("div", { className: "pointer-events-none absolute inset-x-3 bottom-3 z-10 flex", children: /* @__PURE__ */ jsxs7(
|
|
2462
2520
|
Button6,
|
|
2463
2521
|
{
|
|
2464
2522
|
className: "pointer-events-auto",
|
|
2465
|
-
size: "
|
|
2523
|
+
size: "default",
|
|
2466
2524
|
type: "button",
|
|
2467
2525
|
variant: "secondary",
|
|
2468
2526
|
onClick: () => {
|
|
@@ -2478,6 +2536,14 @@ function IssueManagerRichTextTextarea({
|
|
|
2478
2536
|
);
|
|
2479
2537
|
}
|
|
2480
2538
|
|
|
2539
|
+
// src/ui/internal/shell/IssueManagerEditorMotion.ts
|
|
2540
|
+
var issueManagerEditorRiseInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-bottom-3 motion-safe:duration-[240ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
|
|
2541
|
+
var issueManagerEditorRiseInDelay0ClassName = "motion-safe:[animation-delay:0ms]";
|
|
2542
|
+
var issueManagerEditorRiseInDelay1ClassName = "motion-safe:[animation-delay:55ms]";
|
|
2543
|
+
var issueManagerEditorRiseInDelay2ClassName = "motion-safe:[animation-delay:110ms]";
|
|
2544
|
+
var issueManagerEditorRiseInDelay3ClassName = "motion-safe:[animation-delay:165ms]";
|
|
2545
|
+
var issueManagerEditorFooterFadeInClassName = "motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none";
|
|
2546
|
+
|
|
2481
2547
|
// src/ui/internal/shell/IssueManagerPanels.tsx
|
|
2482
2548
|
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
2483
2549
|
function IssueManagerIssuePane({
|
|
@@ -2495,61 +2561,87 @@ function IssueManagerIssuePane({
|
|
|
2495
2561
|
const selectedTask = selectedTaskId ? (controller.taskDetail.value?.task?.taskId === selectedTaskId ? controller.taskDetail.value.task : tasks.find((task) => task.taskId === selectedTaskId)) ?? null : null;
|
|
2496
2562
|
const latestRun = selectedTask ? controller.taskDetail.value?.latestRun ?? controller.taskDetail.value?.recentRuns[0] ?? null : null;
|
|
2497
2563
|
const latestOutputs = selectedTask ? controller.taskDetail.value?.latestOutputs ?? [] : [];
|
|
2564
|
+
const [deleteDialogOpen, setDeleteDialogOpen] = useState6(false);
|
|
2565
|
+
const [deleteBusy, setDeleteBusy] = useState6(false);
|
|
2498
2566
|
if (isCreatingIssue || isEditingIssue) {
|
|
2499
2567
|
return /* @__PURE__ */ jsxs8("div", { className: "flex h-full min-h-0 flex-col overflow-hidden", children: [
|
|
2500
2568
|
/* @__PURE__ */ jsx8("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
2501
|
-
/* @__PURE__ */ jsx8(
|
|
2569
|
+
/* @__PURE__ */ jsx8(
|
|
2570
|
+
"div",
|
|
2571
|
+
{
|
|
2572
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
2573
|
+
children: /* @__PURE__ */ jsx8("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: isCreatingIssue ? copy.t("actions.createIssue") : copy.t("actions.editIssue") })
|
|
2574
|
+
}
|
|
2575
|
+
),
|
|
2502
2576
|
/* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
2503
|
-
/* @__PURE__ */ jsxs8(
|
|
2504
|
-
|
|
2577
|
+
/* @__PURE__ */ jsxs8(
|
|
2578
|
+
"label",
|
|
2579
|
+
{
|
|
2580
|
+
className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
2581
|
+
children: [
|
|
2582
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
2583
|
+
/* @__PURE__ */ jsx8(
|
|
2584
|
+
Input2,
|
|
2585
|
+
{
|
|
2586
|
+
placeholder: copy.t("composer.issueTitlePlaceholder"),
|
|
2587
|
+
variant: "md",
|
|
2588
|
+
value: controller.issueDraft.title,
|
|
2589
|
+
onChange: (event) => controller.setIssueTitle(event.target.value)
|
|
2590
|
+
}
|
|
2591
|
+
)
|
|
2592
|
+
]
|
|
2593
|
+
}
|
|
2594
|
+
),
|
|
2595
|
+
/* @__PURE__ */ jsxs8(
|
|
2596
|
+
"div",
|
|
2597
|
+
{
|
|
2598
|
+
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
2599
|
+
children: [
|
|
2600
|
+
/* @__PURE__ */ jsx8("span", { className: "leading-5", children: copy.t("labels.content") }),
|
|
2601
|
+
/* @__PURE__ */ jsx8(
|
|
2602
|
+
IssueManagerRichTextTextarea,
|
|
2603
|
+
{
|
|
2604
|
+
controller,
|
|
2605
|
+
surface: "issue",
|
|
2606
|
+
textareaClassName: "min-h-[180px] resize-none",
|
|
2607
|
+
placeholder: copy.t("composer.issueContentPlaceholder"),
|
|
2608
|
+
value: controller.issueDraft.content,
|
|
2609
|
+
onChange: controller.setIssueContent
|
|
2610
|
+
}
|
|
2611
|
+
)
|
|
2612
|
+
]
|
|
2613
|
+
}
|
|
2614
|
+
)
|
|
2615
|
+
] })
|
|
2616
|
+
] }) }),
|
|
2617
|
+
/* @__PURE__ */ jsx8(
|
|
2618
|
+
"div",
|
|
2619
|
+
{
|
|
2620
|
+
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
2621
|
+
children: /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-3", children: [
|
|
2505
2622
|
/* @__PURE__ */ jsx8(
|
|
2506
|
-
|
|
2623
|
+
Button7,
|
|
2507
2624
|
{
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2625
|
+
size: "dialog",
|
|
2626
|
+
type: "button",
|
|
2627
|
+
variant: "secondary",
|
|
2628
|
+
onClick: onDismissCreate,
|
|
2629
|
+
children: copy.t("actions.cancel")
|
|
2512
2630
|
}
|
|
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") }),
|
|
2631
|
+
),
|
|
2517
2632
|
/* @__PURE__ */ jsx8(
|
|
2518
|
-
|
|
2633
|
+
Button7,
|
|
2519
2634
|
{
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
onChange: controller.setIssueContent
|
|
2635
|
+
disabled: isIssueTitleMissing,
|
|
2636
|
+
size: "dialog",
|
|
2637
|
+
type: "button",
|
|
2638
|
+
onClick: () => void controller.saveIssue(),
|
|
2639
|
+
children: copy.t("actions.saveIssue")
|
|
2526
2640
|
}
|
|
2527
2641
|
)
|
|
2528
2642
|
] })
|
|
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
|
-
] }) })
|
|
2643
|
+
}
|
|
2644
|
+
)
|
|
2553
2645
|
] });
|
|
2554
2646
|
}
|
|
2555
2647
|
if (!selectedIssue) {
|
|
@@ -2558,14 +2650,28 @@ function IssueManagerIssuePane({
|
|
|
2558
2650
|
return /* @__PURE__ */ jsx8("div", { className: "flex min-h-0 flex-col", children: /* @__PURE__ */ jsx8("div", { className: "min-h-0 flex-1 overflow-y-auto px-8 py-7", children: controller.issueDetail.isLoading && controller.issueDetail.value === null ? /* @__PURE__ */ jsx8(IssueManagerPaneLoadingState, {}) : /* @__PURE__ */ jsxs8("div", { className: "flex w-full min-w-0 flex-col gap-9", children: [
|
|
2559
2651
|
/* @__PURE__ */ jsxs8("header", { className: "flex items-start justify-between gap-6", children: [
|
|
2560
2652
|
/* @__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, {
|
|
2653
|
+
/* @__PURE__ */ jsx8("h2", { className: "line-clamp-2 text-base font-semibold leading-6 text-[var(--text-primary)]", children: selectedIssue.title }),
|
|
2654
|
+
/* @__PURE__ */ jsxs8("div", { className: "mt-3 flex flex-wrap items-center gap-x-2 gap-y-2 text-sm font-normal text-[var(--text-secondary)]", children: [
|
|
2655
|
+
/* @__PURE__ */ jsx8(Badge3, { variant: "secondary", children: resolveIssueManagerStatusLabel(copy, selectedIssue.status) }),
|
|
2656
|
+
/* @__PURE__ */ jsx8(
|
|
2657
|
+
"span",
|
|
2658
|
+
{
|
|
2659
|
+
"aria-hidden": "true",
|
|
2660
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2661
|
+
}
|
|
2662
|
+
),
|
|
2564
2663
|
/* @__PURE__ */ jsxs8("span", { children: [
|
|
2565
2664
|
copy.t("labels.creator"),
|
|
2566
2665
|
" ",
|
|
2567
2666
|
resolveIssueManagerCreatorLabel(selectedIssue)
|
|
2568
2667
|
] }),
|
|
2668
|
+
/* @__PURE__ */ jsx8(
|
|
2669
|
+
"span",
|
|
2670
|
+
{
|
|
2671
|
+
"aria-hidden": "true",
|
|
2672
|
+
className: "h-4 w-px shrink-0 bg-[var(--line-2)]"
|
|
2673
|
+
}
|
|
2674
|
+
),
|
|
2569
2675
|
/* @__PURE__ */ jsxs8("span", { children: [
|
|
2570
2676
|
copy.t("labels.createdAt"),
|
|
2571
2677
|
" ",
|
|
@@ -2573,12 +2679,10 @@ function IssueManagerIssuePane({
|
|
|
2573
2679
|
] })
|
|
2574
2680
|
] })
|
|
2575
2681
|
] }),
|
|
2576
|
-
/* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-
|
|
2682
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-2 pt-1", children: [
|
|
2577
2683
|
/* @__PURE__ */ jsx8(
|
|
2578
2684
|
Button7,
|
|
2579
2685
|
{
|
|
2580
|
-
className: "h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground",
|
|
2581
|
-
size: "sm",
|
|
2582
2686
|
type: "button",
|
|
2583
2687
|
variant: "ghost",
|
|
2584
2688
|
onClick: () => controller.setIssueEditorMode("edit"),
|
|
@@ -2588,18 +2692,35 @@ function IssueManagerIssuePane({
|
|
|
2588
2692
|
/* @__PURE__ */ jsx8(
|
|
2589
2693
|
Button7,
|
|
2590
2694
|
{
|
|
2591
|
-
className: "
|
|
2592
|
-
size: "sm",
|
|
2695
|
+
className: "text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]",
|
|
2593
2696
|
type: "button",
|
|
2594
2697
|
variant: "ghost",
|
|
2595
|
-
onClick: () =>
|
|
2596
|
-
void controller.deleteIssue();
|
|
2597
|
-
},
|
|
2698
|
+
onClick: () => setDeleteDialogOpen(true),
|
|
2598
2699
|
children: copy.t("actions.delete")
|
|
2599
2700
|
}
|
|
2600
2701
|
)
|
|
2601
2702
|
] })
|
|
2602
2703
|
] }),
|
|
2704
|
+
/* @__PURE__ */ jsx8(
|
|
2705
|
+
ConfirmationDialog,
|
|
2706
|
+
{
|
|
2707
|
+
cancelLabel: copy.t("actions.cancel"),
|
|
2708
|
+
confirmBusy: deleteBusy,
|
|
2709
|
+
confirmLabel: copy.t("actions.delete"),
|
|
2710
|
+
description: selectedIssue.title,
|
|
2711
|
+
open: deleteDialogOpen,
|
|
2712
|
+
title: copy.t("confirmations.deleteIssue"),
|
|
2713
|
+
tone: "destructive",
|
|
2714
|
+
onConfirm: () => {
|
|
2715
|
+
setDeleteBusy(true);
|
|
2716
|
+
void controller.deleteIssue({ skipConfirmation: true }).finally(() => {
|
|
2717
|
+
setDeleteBusy(false);
|
|
2718
|
+
setDeleteDialogOpen(false);
|
|
2719
|
+
});
|
|
2720
|
+
},
|
|
2721
|
+
onOpenChange: setDeleteDialogOpen
|
|
2722
|
+
}
|
|
2723
|
+
),
|
|
2603
2724
|
/* @__PURE__ */ jsx8(
|
|
2604
2725
|
IssueManagerDescriptionSection,
|
|
2605
2726
|
{
|
|
@@ -2643,17 +2764,19 @@ function IssueManagerIssuePane({
|
|
|
2643
2764
|
}
|
|
2644
2765
|
|
|
2645
2766
|
// src/ui/internal/shell/IssueManagerBottomBar.tsx
|
|
2646
|
-
import { Button as Button8, cn as
|
|
2767
|
+
import { Button as Button8, cn as cn7 } from "@nextop-os/ui-system";
|
|
2647
2768
|
|
|
2648
2769
|
// src/ui/internal/task/IssueManagerRunSections.tsx
|
|
2649
|
-
import { useState as
|
|
2770
|
+
import { useState as useState7 } from "react";
|
|
2650
2771
|
import {
|
|
2651
2772
|
Badge as Badge4,
|
|
2652
2773
|
Select,
|
|
2653
2774
|
SelectContent,
|
|
2654
2775
|
SelectItem,
|
|
2655
2776
|
SelectTrigger,
|
|
2656
|
-
SparkIcon
|
|
2777
|
+
SparkIcon,
|
|
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({
|
|
@@ -2662,7 +2785,7 @@ function IssueManagerRunActionTrigger({
|
|
|
2662
2785
|
iconSize = 16,
|
|
2663
2786
|
triggerClassName
|
|
2664
2787
|
}) {
|
|
2665
|
-
const [resetToken, setResetToken] =
|
|
2788
|
+
const [resetToken, setResetToken] = useState7(0);
|
|
2666
2789
|
return /* @__PURE__ */ jsxs9(
|
|
2667
2790
|
Select,
|
|
2668
2791
|
{
|
|
@@ -2676,7 +2799,11 @@ function IssueManagerRunActionTrigger({
|
|
|
2676
2799
|
SelectTrigger,
|
|
2677
2800
|
{
|
|
2678
2801
|
"aria-label": controller.copy.t("actions.askAgentToRun"),
|
|
2679
|
-
className:
|
|
2802
|
+
className: cn6(
|
|
2803
|
+
buttonVariants({ variant: "secondary", size: "dialog" }),
|
|
2804
|
+
"[&>svg]:hidden",
|
|
2805
|
+
triggerClassName
|
|
2806
|
+
),
|
|
2680
2807
|
children: /* @__PURE__ */ jsxs9("span", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
|
|
2681
2808
|
/* @__PURE__ */ jsx9(SparkIcon, { size: iconSize }),
|
|
2682
2809
|
/* @__PURE__ */ jsx9("span", { className: "truncate", children: controller.copy.t("actions.askAgentToRun") })
|
|
@@ -2698,7 +2825,7 @@ function IssueManagerRunPanels({
|
|
|
2698
2825
|
return /* @__PURE__ */ jsxs9("div", { className: "grid gap-4", children: [
|
|
2699
2826
|
/* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
|
|
2700
2827
|
/* @__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(
|
|
2828
|
+
recentRuns.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: copy.t("messages.noRecentRuns") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: recentRuns.map((run) => /* @__PURE__ */ jsxs9(
|
|
2702
2829
|
"div",
|
|
2703
2830
|
{
|
|
2704
2831
|
className: "rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
|
|
@@ -2706,13 +2833,13 @@ function IssueManagerRunPanels({
|
|
|
2706
2833
|
/* @__PURE__ */ jsxs9("div", { className: "flex items-start justify-between gap-3", children: [
|
|
2707
2834
|
/* @__PURE__ */ jsxs9("div", { className: "min-w-0", children: [
|
|
2708
2835
|
/* @__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(
|
|
2836
|
+
/* @__PURE__ */ jsx9("p", { className: "mt-1 text-xs leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerTimestamp(
|
|
2710
2837
|
run.updatedAtUnix ?? run.createdAtUnix
|
|
2711
2838
|
) })
|
|
2712
2839
|
] }),
|
|
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) })
|
|
2840
|
+
/* @__PURE__ */ jsx9(Badge4, { className: "rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-[var(--text-secondary)]", children: resolveIssueManagerStatusLabel(copy, run.status) })
|
|
2714
2841
|
] }),
|
|
2715
|
-
run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-
|
|
2842
|
+
run.errorMessage ? /* @__PURE__ */ jsx9("p", { className: "mt-2 text-xs text-[var(--state-danger)]", children: run.errorMessage }) : null
|
|
2716
2843
|
]
|
|
2717
2844
|
},
|
|
2718
2845
|
run.runId
|
|
@@ -2720,7 +2847,7 @@ function IssueManagerRunPanels({
|
|
|
2720
2847
|
] }),
|
|
2721
2848
|
/* @__PURE__ */ jsxs9("section", { className: "rounded-lg border border-border-1 bg-transparent px-4 py-4", children: [
|
|
2722
2849
|
/* @__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(
|
|
2850
|
+
outputs.length === 0 ? /* @__PURE__ */ jsx9("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: copy.t("messages.noOutputs") }) : /* @__PURE__ */ jsx9("div", { className: "grid gap-2.5", children: outputs.map((output) => /* @__PURE__ */ jsxs9(
|
|
2724
2851
|
"button",
|
|
2725
2852
|
{
|
|
2726
2853
|
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 +2861,7 @@ function IssueManagerRunPanels({
|
|
|
2734
2861
|
},
|
|
2735
2862
|
children: [
|
|
2736
2863
|
/* @__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 })
|
|
2864
|
+
/* @__PURE__ */ jsx9("p", { className: "mt-1 truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: output.path })
|
|
2738
2865
|
]
|
|
2739
2866
|
},
|
|
2740
2867
|
output.outputId
|
|
@@ -2759,26 +2886,22 @@ function IssueManagerBottomBar({
|
|
|
2759
2886
|
return /* @__PURE__ */ jsx10("div", { className: "border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur", children: /* @__PURE__ */ jsxs10(
|
|
2760
2887
|
"div",
|
|
2761
2888
|
{
|
|
2762
|
-
className:
|
|
2889
|
+
className: cn7(
|
|
2763
2890
|
"flex gap-3",
|
|
2764
|
-
isNarrowLayout ? "flex-
|
|
2891
|
+
isNarrowLayout ? "flex-wrap items-center justify-end" : "items-center justify-end"
|
|
2765
2892
|
),
|
|
2766
2893
|
children: [
|
|
2767
2894
|
/* @__PURE__ */ jsx10(
|
|
2768
2895
|
IssueManagerRunActionTrigger,
|
|
2769
2896
|
{
|
|
2770
2897
|
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
|
-
)
|
|
2898
|
+
disabled: !selectedTask
|
|
2776
2899
|
}
|
|
2777
2900
|
),
|
|
2778
2901
|
controller.canInviteCollaborators ? /* @__PURE__ */ jsx10(
|
|
2779
2902
|
Button8,
|
|
2780
2903
|
{
|
|
2781
|
-
className:
|
|
2904
|
+
className: "px-4",
|
|
2782
2905
|
disabled: !selectedIssue,
|
|
2783
2906
|
size: "dialog",
|
|
2784
2907
|
type: "button",
|
|
@@ -2796,9 +2919,9 @@ function IssueManagerBottomBar({
|
|
|
2796
2919
|
// src/ui/internal/shell/IssueManagerFloatingNotice.tsx
|
|
2797
2920
|
import {
|
|
2798
2921
|
FailedFilledIcon,
|
|
2799
|
-
Spinner,
|
|
2922
|
+
Spinner as Spinner2,
|
|
2800
2923
|
toastVariants,
|
|
2801
|
-
cn as
|
|
2924
|
+
cn as cn8
|
|
2802
2925
|
} from "@nextop-os/ui-system";
|
|
2803
2926
|
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2804
2927
|
function IssueManagerFloatingNotice({
|
|
@@ -2810,14 +2933,14 @@ function IssueManagerFloatingNotice({
|
|
|
2810
2933
|
{
|
|
2811
2934
|
"aria-busy": notice.isLoading,
|
|
2812
2935
|
"aria-live": variant === "destructive" ? "assertive" : "polite",
|
|
2813
|
-
className:
|
|
2936
|
+
className: cn8(
|
|
2814
2937
|
toastVariants({ variant }),
|
|
2815
2938
|
"w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg"
|
|
2816
2939
|
),
|
|
2817
2940
|
role: variant === "destructive" ? "alert" : "status",
|
|
2818
2941
|
children: /* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 max-w-full items-center gap-[6px] whitespace-nowrap text-sm font-normal leading-normal", children: [
|
|
2819
2942
|
notice.isLoading ? /* @__PURE__ */ jsx11(
|
|
2820
|
-
|
|
2943
|
+
Spinner2,
|
|
2821
2944
|
{
|
|
2822
2945
|
className: "shrink-0 text-current",
|
|
2823
2946
|
size: 16,
|
|
@@ -2832,7 +2955,7 @@ function IssueManagerFloatingNotice({
|
|
|
2832
2955
|
}
|
|
2833
2956
|
|
|
2834
2957
|
// src/ui/internal/shell/IssueManagerSidebar.tsx
|
|
2835
|
-
import { cn as
|
|
2958
|
+
import { cn as cn10 } from "@nextop-os/ui-system";
|
|
2836
2959
|
|
|
2837
2960
|
// src/ui/internal/shell/IssueManagerSidebarSections.tsx
|
|
2838
2961
|
import {
|
|
@@ -2843,7 +2966,7 @@ import {
|
|
|
2843
2966
|
Input as Input3,
|
|
2844
2967
|
ScrollArea as ScrollArea3,
|
|
2845
2968
|
UnderlineTabs,
|
|
2846
|
-
cn as
|
|
2969
|
+
cn as cn9
|
|
2847
2970
|
} from "@nextop-os/ui-system";
|
|
2848
2971
|
|
|
2849
2972
|
// src/ui/internal/shell/IssueManagerShellState.ts
|
|
@@ -2857,7 +2980,7 @@ var issueManagerStatusFilters = [
|
|
|
2857
2980
|
"canceled"
|
|
2858
2981
|
];
|
|
2859
2982
|
function resolveIssueManagerSidebarViewState(input) {
|
|
2860
|
-
if (input.issues.isLoading && input.issues.value.length === 0) {
|
|
2983
|
+
if (input.issues.isLoading && input.issues.value.length === 0 && input.issues.hasResolved !== true) {
|
|
2861
2984
|
return {
|
|
2862
2985
|
kind: "loading"
|
|
2863
2986
|
};
|
|
@@ -2898,6 +3021,20 @@ function buildIssueManagerStatusCounts(issues) {
|
|
|
2898
3021
|
}
|
|
2899
3022
|
return counts;
|
|
2900
3023
|
}
|
|
3024
|
+
function resolveIssueManagerStatusCounts(input) {
|
|
3025
|
+
return input.statusCounts ? mapIssueManagerStatusCounts(input.statusCounts) : buildIssueManagerStatusCounts(input.value);
|
|
3026
|
+
}
|
|
3027
|
+
function mapIssueManagerStatusCounts(counts) {
|
|
3028
|
+
return {
|
|
3029
|
+
all: counts.all,
|
|
3030
|
+
canceled: counts.canceled,
|
|
3031
|
+
completed: counts.completed,
|
|
3032
|
+
failed: counts.failed,
|
|
3033
|
+
not_started: counts.notStarted,
|
|
3034
|
+
pending_acceptance: counts.pendingAcceptance,
|
|
3035
|
+
running: counts.running
|
|
3036
|
+
};
|
|
3037
|
+
}
|
|
2901
3038
|
function resolveIssueManagerShellContentViewState(input) {
|
|
2902
3039
|
const isIssueEditing = input.issueEditorMode !== "read";
|
|
2903
3040
|
const isTaskCreating = !isIssueEditing && input.taskEditorMode === "create";
|
|
@@ -2978,11 +3115,11 @@ function IssueManagerSidebarBody({
|
|
|
2978
3115
|
return /* @__PURE__ */ jsx12(
|
|
2979
3116
|
ScrollArea3,
|
|
2980
3117
|
{
|
|
2981
|
-
className:
|
|
3118
|
+
className: cn9("min-h-0", isNarrowLayout ? "flex-none" : "h-full flex-1"),
|
|
2982
3119
|
children: /* @__PURE__ */ jsx12(
|
|
2983
3120
|
"div",
|
|
2984
3121
|
{
|
|
2985
|
-
className:
|
|
3122
|
+
className: cn9(
|
|
2986
3123
|
"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4",
|
|
2987
3124
|
isNarrowLayout ? "min-h-0" : "h-full"
|
|
2988
3125
|
),
|
|
@@ -3060,7 +3197,7 @@ function IssueManagerSearchField({
|
|
|
3060
3197
|
Input3,
|
|
3061
3198
|
{
|
|
3062
3199
|
"aria-label": placeholder,
|
|
3063
|
-
className:
|
|
3200
|
+
className: cn9(
|
|
3064
3201
|
"box-border h-8 min-h-8 rounded-md border-0 bg-[var(--transparency-block)] px-3 text-sm font-normal leading-normal text-[var(--text-primary)] shadow-none outline-none ring-0 transition-colors placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:border-0 focus:bg-[var(--transparency-hover)] focus-visible:border-0 focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 focus-visible:ring-offset-0 disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100",
|
|
3065
3202
|
"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none",
|
|
3066
3203
|
value ? "pr-9" : "pr-3"
|
|
@@ -3096,7 +3233,7 @@ function IssueManagerSidebarIssueList({
|
|
|
3096
3233
|
return /* @__PURE__ */ jsx12(
|
|
3097
3234
|
"div",
|
|
3098
3235
|
{
|
|
3099
|
-
className:
|
|
3236
|
+
className: cn9(
|
|
3100
3237
|
"flex gap-2.5",
|
|
3101
3238
|
isNarrowLayout ? "flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden" : "flex-col"
|
|
3102
3239
|
),
|
|
@@ -3124,7 +3261,7 @@ function IssueManagerSidebarItem({
|
|
|
3124
3261
|
return /* @__PURE__ */ jsxs12(
|
|
3125
3262
|
"button",
|
|
3126
3263
|
{
|
|
3127
|
-
className:
|
|
3264
|
+
className: cn9(
|
|
3128
3265
|
"rounded-lg border px-3.5 py-3.5 text-left transition-colors",
|
|
3129
3266
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden" : "w-full",
|
|
3130
3267
|
selected ? "border-[var(--border-1)] bg-[var(--background-fronted)]" : "border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]"
|
|
@@ -3137,7 +3274,7 @@ function IssueManagerSidebarItem({
|
|
|
3137
3274
|
/* @__PURE__ */ jsx12("p", { className: "text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix) }),
|
|
3138
3275
|
/* @__PURE__ */ jsx12("p", { className: "line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-[var(--text-primary)]", children: issue.title })
|
|
3139
3276
|
] }),
|
|
3140
|
-
/* @__PURE__ */ jsx12(Badge5, { className: "
|
|
3277
|
+
/* @__PURE__ */ jsx12(Badge5, { className: "shrink-0", variant: "secondary", children: resolveIssueManagerStatusLabel(copy, issue.status) })
|
|
3141
3278
|
] }),
|
|
3142
3279
|
/* @__PURE__ */ jsx12("div", { className: "mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]", children: copy.t("labels.taskCount", { count: issue.taskCount ?? 0 }) })
|
|
3143
3280
|
]
|
|
@@ -3151,14 +3288,14 @@ function IssueManagerSidebarLoadingState({
|
|
|
3151
3288
|
"div",
|
|
3152
3289
|
{
|
|
3153
3290
|
"aria-hidden": "true",
|
|
3154
|
-
className:
|
|
3291
|
+
className: cn9(
|
|
3155
3292
|
"gap-2.5",
|
|
3156
3293
|
isNarrowLayout ? "flex flex-row flex-nowrap overflow-x-hidden" : "grid"
|
|
3157
3294
|
),
|
|
3158
3295
|
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs12(
|
|
3159
3296
|
"div",
|
|
3160
3297
|
{
|
|
3161
|
-
className:
|
|
3298
|
+
className: cn9(
|
|
3162
3299
|
"rounded-lg bg-transparent px-3.5 py-3.5",
|
|
3163
3300
|
isNarrowLayout && "h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]"
|
|
3164
3301
|
),
|
|
@@ -3182,7 +3319,7 @@ function IssueManagerSidebarEmptyState({
|
|
|
3182
3319
|
return /* @__PURE__ */ jsxs12(
|
|
3183
3320
|
"div",
|
|
3184
3321
|
{
|
|
3185
|
-
className:
|
|
3322
|
+
className: cn9(
|
|
3186
3323
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center",
|
|
3187
3324
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3188
3325
|
),
|
|
@@ -3190,7 +3327,7 @@ function IssueManagerSidebarEmptyState({
|
|
|
3190
3327
|
/* @__PURE__ */ jsx12(
|
|
3191
3328
|
"p",
|
|
3192
3329
|
{
|
|
3193
|
-
className:
|
|
3330
|
+
className: cn9(
|
|
3194
3331
|
"text-sm font-semibold leading-5 text-[var(--text-primary)]",
|
|
3195
3332
|
tone === "destructive" ? "text-[var(--state-danger)]" : "text-[var(--text-primary)]"
|
|
3196
3333
|
),
|
|
@@ -3211,7 +3348,7 @@ function IssueManagerSidebarErrorState({
|
|
|
3211
3348
|
return /* @__PURE__ */ jsxs12(
|
|
3212
3349
|
"div",
|
|
3213
3350
|
{
|
|
3214
|
-
className:
|
|
3351
|
+
className: cn9(
|
|
3215
3352
|
"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden px-4 py-6 text-center",
|
|
3216
3353
|
isNarrowLayout ? "h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]" : "min-h-full"
|
|
3217
3354
|
),
|
|
@@ -3275,10 +3412,10 @@ function IssueManagerSidebar({
|
|
|
3275
3412
|
"aside",
|
|
3276
3413
|
{
|
|
3277
3414
|
"aria-hidden": isCollapsed ? "true" : void 0,
|
|
3278
|
-
className:
|
|
3279
|
-
"
|
|
3415
|
+
className: cn10(
|
|
3416
|
+
"relative isolate flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-transparent opacity-100 transition-[border-color] duration-[140ms] ease-in-out after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[160ms] after:delay-[70ms] motion-reduce:transition-none motion-reduce:after:transition-none [&>*]:transition-[opacity,filter] [&>*]:duration-[160ms] [&>*]:delay-[70ms] [&>*]:ease-in-out motion-reduce:[&>*]:transition-none",
|
|
3280
3417
|
isNarrowLayout ? "border-b border-[var(--border-1)]" : "border-r border-[var(--border-1)]",
|
|
3281
|
-
isCollapsed && "pointer-events-none
|
|
3418
|
+
isCollapsed && "pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none"
|
|
3282
3419
|
),
|
|
3283
3420
|
inert: isCollapsed ? true : void 0,
|
|
3284
3421
|
children: [
|
|
@@ -3304,7 +3441,7 @@ function IssueManagerSidebar({
|
|
|
3304
3441
|
/* @__PURE__ */ jsx13(
|
|
3305
3442
|
"div",
|
|
3306
3443
|
{
|
|
3307
|
-
className:
|
|
3444
|
+
className: cn10(
|
|
3308
3445
|
"relative flex min-h-0 flex-col",
|
|
3309
3446
|
isNarrowLayout ? "flex-none" : "flex-1"
|
|
3310
3447
|
),
|
|
@@ -3337,18 +3474,8 @@ function IssueManagerSidebar({
|
|
|
3337
3474
|
}
|
|
3338
3475
|
|
|
3339
3476
|
// 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";
|
|
3477
|
+
import { Button as Button10, Input as Input4 } from "@nextop-os/ui-system";
|
|
3350
3478
|
import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3351
|
-
var taskPriorityOptions = ["high", "medium", "low"];
|
|
3352
3479
|
function IssueManagerTaskComposerPane({
|
|
3353
3480
|
controller,
|
|
3354
3481
|
onCancel,
|
|
@@ -3356,118 +3483,84 @@ function IssueManagerTaskComposerPane({
|
|
|
3356
3483
|
}) {
|
|
3357
3484
|
const copy = controller.copy;
|
|
3358
3485
|
const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;
|
|
3359
|
-
const showAttachmentActions = controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;
|
|
3360
3486
|
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
|
-
|
|
3487
|
+
/* @__PURE__ */ jsx14("div", { className: "flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8", children: /* @__PURE__ */ jsxs14("div", { className: "flex w-full min-w-0 flex-col gap-3", children: [
|
|
3488
|
+
/* @__PURE__ */ jsx14(
|
|
3489
|
+
"div",
|
|
3490
|
+
{
|
|
3491
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3492
|
+
children: /* @__PURE__ */ jsx14("h2", { className: "m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: copy.t("actions.addSubtask") })
|
|
3493
|
+
}
|
|
3494
|
+
),
|
|
3495
|
+
/* @__PURE__ */ jsxs14("div", { className: "flex w-full min-w-0 flex-col gap-6", children: [
|
|
3496
|
+
/* @__PURE__ */ jsxs14(
|
|
3497
|
+
"label",
|
|
3498
|
+
{
|
|
3499
|
+
className: `flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3500
|
+
children: [
|
|
3501
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.title") }),
|
|
3502
|
+
/* @__PURE__ */ jsx14(
|
|
3503
|
+
Input4,
|
|
3504
|
+
{
|
|
3505
|
+
placeholder: copy.t("composer.subtaskTitlePlaceholder"),
|
|
3506
|
+
variant: "md",
|
|
3507
|
+
value: controller.taskDraft.title,
|
|
3508
|
+
onChange: (event) => controller.setTaskTitle(event.target.value)
|
|
3509
|
+
}
|
|
3510
|
+
)
|
|
3511
|
+
]
|
|
3512
|
+
}
|
|
3513
|
+
),
|
|
3514
|
+
/* @__PURE__ */ jsxs14(
|
|
3515
|
+
"div",
|
|
3390
3516
|
{
|
|
3391
|
-
className:
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3517
|
+
className: `flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-primary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3518
|
+
children: [
|
|
3519
|
+
/* @__PURE__ */ jsx14("span", { className: "leading-5", children: copy.t("labels.requirementDescription") }),
|
|
3520
|
+
/* @__PURE__ */ jsx14(
|
|
3521
|
+
IssueManagerRichTextTextarea,
|
|
3522
|
+
{
|
|
3523
|
+
controller,
|
|
3524
|
+
surface: "task",
|
|
3525
|
+
textareaClassName: "min-h-[180px] resize-none",
|
|
3526
|
+
placeholder: copy.t("composer.subtaskContentPlaceholder"),
|
|
3527
|
+
value: controller.taskDraft.content,
|
|
3528
|
+
onChange: controller.setTaskContent
|
|
3529
|
+
}
|
|
3530
|
+
)
|
|
3531
|
+
]
|
|
3395
3532
|
}
|
|
3396
3533
|
)
|
|
3397
|
-
] })
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3534
|
+
] })
|
|
3535
|
+
] }) }),
|
|
3536
|
+
/* @__PURE__ */ jsx14(
|
|
3537
|
+
"div",
|
|
3538
|
+
{
|
|
3539
|
+
className: `shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3540
|
+
children: /* @__PURE__ */ jsxs14("div", { className: "flex items-center justify-end gap-3", children: [
|
|
3401
3541
|
/* @__PURE__ */ jsx14(
|
|
3402
|
-
|
|
3542
|
+
Button10,
|
|
3403
3543
|
{
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
onChange: controller.setTaskContent
|
|
3544
|
+
size: "default",
|
|
3545
|
+
type: "button",
|
|
3546
|
+
variant: "secondary",
|
|
3547
|
+
onClick: onCancel,
|
|
3548
|
+
children: copy.t("actions.cancel")
|
|
3410
3549
|
}
|
|
3411
3550
|
),
|
|
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
|
|
3551
|
+
/* @__PURE__ */ jsx14(
|
|
3552
|
+
Button10,
|
|
3553
|
+
{
|
|
3554
|
+
disabled: !selectedIssue || isTaskTitleMissing,
|
|
3555
|
+
size: "default",
|
|
3556
|
+
type: "button",
|
|
3557
|
+
onClick: () => void controller.saveTask(),
|
|
3558
|
+
children: copy.t("actions.saveSubtask")
|
|
3559
|
+
}
|
|
3560
|
+
)
|
|
3446
3561
|
] })
|
|
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
|
-
] }) })
|
|
3562
|
+
}
|
|
3563
|
+
)
|
|
3471
3564
|
] });
|
|
3472
3565
|
}
|
|
3473
3566
|
|
|
@@ -3484,16 +3577,16 @@ import {
|
|
|
3484
3577
|
DropdownMenuItem,
|
|
3485
3578
|
DropdownMenuTrigger,
|
|
3486
3579
|
Input as Input5,
|
|
3487
|
-
Select as
|
|
3488
|
-
SelectContent as
|
|
3489
|
-
SelectItem as
|
|
3490
|
-
SelectTrigger as
|
|
3491
|
-
SelectValue
|
|
3580
|
+
Select as Select2,
|
|
3581
|
+
SelectContent as SelectContent2,
|
|
3582
|
+
SelectItem as SelectItem2,
|
|
3583
|
+
SelectTrigger as SelectTrigger2,
|
|
3584
|
+
SelectValue,
|
|
3492
3585
|
SparkIcon as SparkIcon2
|
|
3493
3586
|
} from "@nextop-os/ui-system";
|
|
3494
3587
|
|
|
3495
3588
|
// src/ui/internal/content/IssueManagerContextSection.tsx
|
|
3496
|
-
import { Button as Button11, DirectoryIcon
|
|
3589
|
+
import { Button as Button11, DirectoryIcon, FileIcon as FileIcon3 } from "@nextop-os/ui-system";
|
|
3497
3590
|
import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3498
3591
|
function IssueManagerContextSection({
|
|
3499
3592
|
copy,
|
|
@@ -3518,7 +3611,7 @@ function IssueManagerContextSection({
|
|
|
3518
3611
|
}
|
|
3519
3612
|
)
|
|
3520
3613
|
] }),
|
|
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(
|
|
3614
|
+
refs.length === 0 ? /* @__PURE__ */ jsx15("p", { className: "text-sm leading-5 text-[var(--text-secondary)]", children: emptyLabel }) : /* @__PURE__ */ jsx15("div", { className: "grid gap-2.5", children: refs.map((ref) => /* @__PURE__ */ jsxs15(
|
|
3522
3615
|
"div",
|
|
3523
3616
|
{
|
|
3524
3617
|
className: "flex items-center justify-between gap-3 rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3",
|
|
@@ -3537,21 +3630,21 @@ function IssueManagerContextSection({
|
|
|
3537
3630
|
},
|
|
3538
3631
|
children: [
|
|
3539
3632
|
ref.path.endsWith("/") ? /* @__PURE__ */ jsx15(
|
|
3540
|
-
|
|
3633
|
+
DirectoryIcon,
|
|
3541
3634
|
{
|
|
3542
|
-
className: "shrink-0 text-text-secondary",
|
|
3635
|
+
className: "shrink-0 text-[var(--text-secondary)]",
|
|
3543
3636
|
size: 16
|
|
3544
3637
|
}
|
|
3545
3638
|
) : /* @__PURE__ */ jsx15(
|
|
3546
3639
|
FileIcon3,
|
|
3547
3640
|
{
|
|
3548
|
-
className: "shrink-0 text-text-secondary",
|
|
3641
|
+
className: "shrink-0 text-[var(--text-secondary)]",
|
|
3549
3642
|
size: 16
|
|
3550
3643
|
}
|
|
3551
3644
|
),
|
|
3552
3645
|
/* @__PURE__ */ jsxs15("span", { className: "min-w-0", children: [
|
|
3553
3646
|
/* @__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 })
|
|
3647
|
+
/* @__PURE__ */ jsx15("span", { className: "block truncate text-xs leading-[1.55] text-[var(--text-secondary)]", children: ref.path })
|
|
3555
3648
|
] })
|
|
3556
3649
|
]
|
|
3557
3650
|
}
|
|
@@ -3559,7 +3652,7 @@ function IssueManagerContextSection({
|
|
|
3559
3652
|
/* @__PURE__ */ jsx15(
|
|
3560
3653
|
Button11,
|
|
3561
3654
|
{
|
|
3562
|
-
className: "h-7 rounded-md px-2 text-[13px] font-semibold text-text-secondary hover:text-[var(--text-primary)]",
|
|
3655
|
+
className: "h-7 rounded-md px-2 text-[13px] font-semibold text-[var(--text-secondary)] hover:text-[var(--text-primary)]",
|
|
3563
3656
|
size: "sm",
|
|
3564
3657
|
type: "button",
|
|
3565
3658
|
variant: "ghost",
|
|
@@ -3608,7 +3701,7 @@ function canIssueManagerSaveTask(input) {
|
|
|
3608
3701
|
|
|
3609
3702
|
// src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx
|
|
3610
3703
|
import { Fragment, jsx as jsx16, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3611
|
-
var
|
|
3704
|
+
var taskPriorityOptions = ["high", "medium", "low"];
|
|
3612
3705
|
function IssueManagerTaskDrawerHeader({
|
|
3613
3706
|
controller,
|
|
3614
3707
|
selectedTask,
|
|
@@ -3619,10 +3712,10 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3619
3712
|
return /* @__PURE__ */ jsxs16("div", { className: "flex items-start justify-between gap-4 border-b border-border-1 px-7 py-5", children: [
|
|
3620
3713
|
/* @__PURE__ */ jsxs16("div", { className: "min-w-0 flex-1", children: [
|
|
3621
3714
|
view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsx16("div", { className: "grid min-w-0 gap-2", children: /* @__PURE__ */ jsx16("h3", { className: "line-clamp-3 text-sm font-semibold leading-[1.35] text-[var(--text-primary)]", children: view.title }) }) : /* @__PURE__ */ jsx16("h3", { className: "line-clamp-2 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]", children: view.title }),
|
|
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: [
|
|
3715
|
+
view.showTaskMetadata && selectedTask ? /* @__PURE__ */ jsxs16("div", { className: "mt-2 flex min-w-0 items-center overflow-hidden text-sm leading-[1.55] text-[var(--text-secondary)]", children: [
|
|
3623
3716
|
/* @__PURE__ */ jsx16(Badge6, { className: "shrink-0 rounded-full border-transparent bg-[var(--accent-bg)] px-2.5 py-1 text-xs text-[var(--text-primary)]", children: resolveIssueManagerStatusLabel(copy, selectedTask.status) }),
|
|
3624
3717
|
/* @__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) }),
|
|
3718
|
+
/* @__PURE__ */ jsx16(Badge6, { className: "shrink-0 rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-[var(--text-secondary)]", children: resolveIssueManagerPriorityLabel(copy, selectedTask.priority) }),
|
|
3626
3719
|
/* @__PURE__ */ jsx16("span", { className: "mx-3 h-[13px] w-px shrink-0 bg-border-1" }),
|
|
3627
3720
|
/* @__PURE__ */ jsxs16("span", { children: [
|
|
3628
3721
|
copy.t("labels.updatedAt"),
|
|
@@ -3648,7 +3741,7 @@ function IssueManagerTaskDrawerHeader({
|
|
|
3648
3741
|
"span",
|
|
3649
3742
|
{
|
|
3650
3743
|
"aria-hidden": "true",
|
|
3651
|
-
className: "text-base leading-none tracking-[0.18em] text-text-secondary",
|
|
3744
|
+
className: "text-base leading-none tracking-[0.18em] text-[var(--text-secondary)]",
|
|
3652
3745
|
children: "..."
|
|
3653
3746
|
}
|
|
3654
3747
|
)
|
|
@@ -3727,65 +3820,89 @@ function IssueManagerTaskDrawerEditBody({
|
|
|
3727
3820
|
const copy = controller.copy;
|
|
3728
3821
|
return /* @__PURE__ */ jsxs16(Fragment, { children: [
|
|
3729
3822
|
/* @__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
|
-
|
|
3823
|
+
/* @__PURE__ */ jsxs16(
|
|
3824
|
+
"label",
|
|
3825
|
+
{
|
|
3826
|
+
className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`,
|
|
3827
|
+
children: [
|
|
3828
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.title") }),
|
|
3829
|
+
/* @__PURE__ */ jsx16(
|
|
3830
|
+
Input5,
|
|
3831
|
+
{
|
|
3832
|
+
placeholder: copy.t("composer.taskTitlePlaceholder"),
|
|
3833
|
+
variant: "md",
|
|
3834
|
+
value: controller.taskDraft.title,
|
|
3835
|
+
onChange: (event) => controller.setTaskTitle(event.target.value)
|
|
3836
|
+
}
|
|
3837
|
+
)
|
|
3838
|
+
]
|
|
3839
|
+
}
|
|
3840
|
+
),
|
|
3841
|
+
/* @__PURE__ */ jsx16(
|
|
3842
|
+
"div",
|
|
3843
|
+
{
|
|
3844
|
+
className: `flex flex-wrap items-center gap-3 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`,
|
|
3845
|
+
children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
3846
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-medium text-[var(--text-secondary)]", children: copy.t("labels.priority") }),
|
|
3847
|
+
/* @__PURE__ */ jsxs16(
|
|
3848
|
+
Select2,
|
|
3849
|
+
{
|
|
3850
|
+
value: controller.taskDraft.priority,
|
|
3851
|
+
onValueChange: (value) => controller.setTaskPriority(value),
|
|
3852
|
+
children: [
|
|
3853
|
+
/* @__PURE__ */ jsx16(
|
|
3854
|
+
SelectTrigger2,
|
|
3855
|
+
{
|
|
3856
|
+
"aria-label": copy.t("labels.priority"),
|
|
3857
|
+
className: "min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm",
|
|
3858
|
+
children: /* @__PURE__ */ jsx16(SelectValue, {})
|
|
3859
|
+
}
|
|
3860
|
+
),
|
|
3861
|
+
/* @__PURE__ */ jsx16(SelectContent2, { style: { zIndex: "var(--z-panel-popover)" }, children: taskPriorityOptions.map((priority) => /* @__PURE__ */ jsx16(SelectItem2, { value: priority, children: resolveIssueManagerPriorityLabel(copy, priority) }, priority)) })
|
|
3862
|
+
]
|
|
3863
|
+
}
|
|
3864
|
+
)
|
|
3865
|
+
] })
|
|
3866
|
+
}
|
|
3867
|
+
),
|
|
3868
|
+
/* @__PURE__ */ jsxs16(
|
|
3869
|
+
"div",
|
|
3870
|
+
{
|
|
3871
|
+
className: `grid gap-2 ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`,
|
|
3872
|
+
children: [
|
|
3873
|
+
/* @__PURE__ */ jsx16("span", { className: "text-sm font-semibold leading-5 text-[var(--text-primary)]", children: copy.t("labels.content") }),
|
|
3874
|
+
/* @__PURE__ */ jsx16(
|
|
3875
|
+
IssueManagerRichTextTextarea,
|
|
3876
|
+
{
|
|
3877
|
+
controller,
|
|
3878
|
+
surface: "task",
|
|
3879
|
+
textareaClassName: "min-h-[12rem] resize-none",
|
|
3880
|
+
placeholder: copy.t("composer.taskContentPlaceholder"),
|
|
3881
|
+
value: controller.taskDraft.content,
|
|
3882
|
+
onChange: controller.setTaskContent
|
|
3883
|
+
}
|
|
3884
|
+
)
|
|
3885
|
+
]
|
|
3886
|
+
}
|
|
3887
|
+
)
|
|
3777
3888
|
] }),
|
|
3778
3889
|
/* @__PURE__ */ jsx16(
|
|
3779
|
-
|
|
3890
|
+
"div",
|
|
3780
3891
|
{
|
|
3781
|
-
|
|
3782
|
-
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3892
|
+
className: `${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay3ClassName}`,
|
|
3893
|
+
children: /* @__PURE__ */ jsx16(
|
|
3894
|
+
IssueManagerContextSection,
|
|
3895
|
+
{
|
|
3896
|
+
copy,
|
|
3897
|
+
emptyLabel: copy.t("messages.noTaskReferences"),
|
|
3898
|
+
refs: taskRefs,
|
|
3899
|
+
onAdd: () => {
|
|
3900
|
+
void controller.attachReferences("task");
|
|
3901
|
+
},
|
|
3902
|
+
onOpen: controller.openReference,
|
|
3903
|
+
onRemove: controller.removeContextRef
|
|
3904
|
+
}
|
|
3905
|
+
)
|
|
3789
3906
|
}
|
|
3790
3907
|
),
|
|
3791
3908
|
!isCreate ? /* @__PURE__ */ jsx16(
|
|
@@ -3854,7 +3971,7 @@ function IssueManagerTaskDrawerFooter({
|
|
|
3854
3971
|
{
|
|
3855
3972
|
controller,
|
|
3856
3973
|
iconSize: 15,
|
|
3857
|
-
triggerClassName: "min-w-[11rem]
|
|
3974
|
+
triggerClassName: "min-w-[11rem]"
|
|
3858
3975
|
}
|
|
3859
3976
|
),
|
|
3860
3977
|
controller.canInviteCollaborators ? /* @__PURE__ */ jsx16(
|
|
@@ -3872,48 +3989,54 @@ function IssueManagerTaskDrawerFooter({
|
|
|
3872
3989
|
] }) });
|
|
3873
3990
|
}
|
|
3874
3991
|
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
|
-
|
|
3992
|
+
return /* @__PURE__ */ jsx16(
|
|
3993
|
+
"div",
|
|
3994
|
+
{
|
|
3995
|
+
className: `border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`,
|
|
3996
|
+
children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between gap-3", children: [
|
|
3997
|
+
/* @__PURE__ */ jsx16("div", { className: "flex items-center gap-2", children: !view.isCreate && selectedTask ? /* @__PURE__ */ jsx16(
|
|
3998
|
+
Button12,
|
|
3999
|
+
{
|
|
4000
|
+
size: "default",
|
|
4001
|
+
type: "button",
|
|
4002
|
+
variant: "destructive",
|
|
4003
|
+
onClick: () => {
|
|
4004
|
+
void controller.deleteTask();
|
|
4005
|
+
},
|
|
4006
|
+
children: copy.t("actions.deleteTask")
|
|
4007
|
+
}
|
|
4008
|
+
) : null }),
|
|
4009
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
4010
|
+
/* @__PURE__ */ jsx16(
|
|
4011
|
+
Button12,
|
|
4012
|
+
{
|
|
4013
|
+
size: "default",
|
|
4014
|
+
type: "button",
|
|
4015
|
+
variant: "secondary",
|
|
4016
|
+
onClick: () => controller.setTaskEditorMode("read"),
|
|
4017
|
+
children: copy.t("actions.cancel")
|
|
4018
|
+
}
|
|
4019
|
+
),
|
|
4020
|
+
/* @__PURE__ */ jsxs16(
|
|
4021
|
+
Button12,
|
|
4022
|
+
{
|
|
4023
|
+
disabled: canIssueManagerSaveTask({
|
|
4024
|
+
selectedIssue,
|
|
4025
|
+
view
|
|
4026
|
+
}) === false,
|
|
4027
|
+
size: "default",
|
|
4028
|
+
type: "button",
|
|
4029
|
+
onClick: () => void controller.saveTask(),
|
|
4030
|
+
children: [
|
|
4031
|
+
/* @__PURE__ */ jsx16(SparkIcon2, { size: 16 }),
|
|
4032
|
+
copy.t("actions.saveTask")
|
|
4033
|
+
]
|
|
4034
|
+
}
|
|
4035
|
+
)
|
|
4036
|
+
] })
|
|
4037
|
+
] })
|
|
4038
|
+
}
|
|
4039
|
+
);
|
|
3917
4040
|
}
|
|
3918
4041
|
return null;
|
|
3919
4042
|
}
|
|
@@ -3979,10 +4102,10 @@ function IssueManagerTaskDrawer({
|
|
|
3979
4102
|
|
|
3980
4103
|
// src/ui/internal/shell/useIssueManagerShellView.ts
|
|
3981
4104
|
import {
|
|
3982
|
-
useEffect as
|
|
4105
|
+
useEffect as useEffect7,
|
|
3983
4106
|
useEffectEvent as useEffectEvent3,
|
|
3984
4107
|
useRef as useRef3,
|
|
3985
|
-
useState as
|
|
4108
|
+
useState as useState8
|
|
3986
4109
|
} from "react";
|
|
3987
4110
|
function useIssueManagerShellView({
|
|
3988
4111
|
controller,
|
|
@@ -3991,15 +4114,15 @@ function useIssueManagerShellView({
|
|
|
3991
4114
|
}) {
|
|
3992
4115
|
const layoutRef = useRef3(null);
|
|
3993
4116
|
const resizeRef = useRef3(null);
|
|
3994
|
-
const [sidebarWidth, setSidebarWidth] =
|
|
4117
|
+
const [sidebarWidth, setSidebarWidth] = useState8(
|
|
3995
4118
|
issueManagerSidebarDefaultWidth
|
|
3996
4119
|
);
|
|
3997
|
-
const [isNarrowLayout, setIsNarrowLayout] =
|
|
4120
|
+
const [isNarrowLayout, setIsNarrowLayout] = useState8(false);
|
|
3998
4121
|
const dismissNotification = useEffectEvent3(() => {
|
|
3999
4122
|
controller.dismissNotification();
|
|
4000
4123
|
});
|
|
4001
4124
|
const floatingNotice = controller.floatingNotice;
|
|
4002
|
-
|
|
4125
|
+
useEffect7(() => {
|
|
4003
4126
|
const publishLayout = () => {
|
|
4004
4127
|
const width = layoutRef.current?.getBoundingClientRect().width ?? 0;
|
|
4005
4128
|
if (!width) {
|
|
@@ -4022,7 +4145,7 @@ function useIssueManagerShellView({
|
|
|
4022
4145
|
window.removeEventListener("resize", publishLayout);
|
|
4023
4146
|
};
|
|
4024
4147
|
}, []);
|
|
4025
|
-
|
|
4148
|
+
useEffect7(() => {
|
|
4026
4149
|
if (!floatingNotice) {
|
|
4027
4150
|
return void 0;
|
|
4028
4151
|
}
|
|
@@ -4043,7 +4166,7 @@ function useIssueManagerShellView({
|
|
|
4043
4166
|
copy: controller.copy,
|
|
4044
4167
|
issues: controller.issues
|
|
4045
4168
|
});
|
|
4046
|
-
const statusCounts =
|
|
4169
|
+
const statusCounts = resolveIssueManagerStatusCounts(controller.issues);
|
|
4047
4170
|
const isSidebarAutoCollapsed = isNarrowLayout;
|
|
4048
4171
|
const isSidebarCollapsed = controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;
|
|
4049
4172
|
return {
|
|
@@ -4052,6 +4175,7 @@ function useIssueManagerShellView({
|
|
|
4052
4175
|
isNarrowLayout,
|
|
4053
4176
|
layoutRef,
|
|
4054
4177
|
layoutStyle: {
|
|
4178
|
+
gridTemplateColumns: isSidebarCollapsed ? "0 minmax(0, 1fr)" : "var(--issue-manager-sidebar-width) minmax(0, 1fr)",
|
|
4055
4179
|
"--issue-manager-sidebar-width": `${sidebarWidth}px`
|
|
4056
4180
|
},
|
|
4057
4181
|
resizeHandle: {
|
|
@@ -4148,7 +4272,7 @@ function IssueManagerShell({
|
|
|
4148
4272
|
return /* @__PURE__ */ jsxs18(
|
|
4149
4273
|
"div",
|
|
4150
4274
|
{
|
|
4151
|
-
className: "relative min-h-0 flex-1 overflow-hidden bg-transparent",
|
|
4275
|
+
className: "relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none",
|
|
4152
4276
|
"data-issue-manager-sidebar-auto-collapsed": shellView.sidebar.isAutoCollapsed ? "true" : void 0,
|
|
4153
4277
|
"data-issue-manager-sidebar-collapsed": shellView.sidebar.isCollapsed ? "true" : void 0,
|
|
4154
4278
|
ref: shellView.layoutRef,
|
|
@@ -4166,7 +4290,7 @@ function IssueManagerShell({
|
|
|
4166
4290
|
statusCounts: shellView.sidebar.statusCounts
|
|
4167
4291
|
}
|
|
4168
4292
|
),
|
|
4169
|
-
shellView.sidebar.
|
|
4293
|
+
shellView.sidebar.isAutoCollapsed ? null : /* @__PURE__ */ jsx18(
|
|
4170
4294
|
"div",
|
|
4171
4295
|
{
|
|
4172
4296
|
"aria-label": controller.copy.t("labels.resizeIssueList"),
|
|
@@ -4174,7 +4298,10 @@ function IssueManagerShell({
|
|
|
4174
4298
|
"aria-valuemax": shellView.resizeHandle.ariaValueMax,
|
|
4175
4299
|
"aria-valuemin": shellView.resizeHandle.ariaValueMin,
|
|
4176
4300
|
"aria-valuenow": shellView.resizeHandle.ariaValueNow,
|
|
4177
|
-
className:
|
|
4301
|
+
className: cn11(
|
|
4302
|
+
"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none opacity-100 transition-[left,opacity] duration-[180ms,120ms] ease-[cubic-bezier(0.4,0,0.2,1),ease] motion-reduce:transition-none",
|
|
4303
|
+
shellView.sidebar.isCollapsed && "pointer-events-none left-[-6px] opacity-0"
|
|
4304
|
+
),
|
|
4178
4305
|
role: "separator",
|
|
4179
4306
|
tabIndex: 0,
|
|
4180
4307
|
onKeyDown: shellView.resizeHandle.onKeyDown,
|
|
@@ -4185,66 +4312,57 @@ function IssueManagerShell({
|
|
|
4185
4312
|
children: /* @__PURE__ */ jsx18("span", { className: "absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]" })
|
|
4186
4313
|
}
|
|
4187
4314
|
),
|
|
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
|
-
)
|
|
4315
|
+
/* @__PURE__ */ jsxs18("div", { className: "relative h-full min-h-0 overflow-hidden bg-transparent", children: [
|
|
4316
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex h-full min-h-0 flex-col", children: [
|
|
4317
|
+
/* @__PURE__ */ jsx18("div", { className: "min-h-0 flex-1 overflow-hidden", children: shellView.content.isIssueEditing ? /* @__PURE__ */ jsx18(
|
|
4318
|
+
IssueManagerIssuePane,
|
|
4319
|
+
{
|
|
4320
|
+
controller,
|
|
4321
|
+
selectedIssue,
|
|
4322
|
+
onDismissCreate: onDismissIssueCreate
|
|
4323
|
+
}
|
|
4324
|
+
) : shellView.content.isTaskCreating ? /* @__PURE__ */ jsx18(
|
|
4325
|
+
IssueManagerTaskComposerPane,
|
|
4326
|
+
{
|
|
4327
|
+
controller,
|
|
4328
|
+
selectedIssue,
|
|
4329
|
+
onCancel: () => controller.setTaskEditorMode("read")
|
|
4330
|
+
}
|
|
4331
|
+
) : selectedIssue ? /* @__PURE__ */ jsx18(
|
|
4332
|
+
IssueManagerIssuePane,
|
|
4333
|
+
{
|
|
4334
|
+
controller,
|
|
4335
|
+
selectedIssue,
|
|
4336
|
+
onDismissCreate: onDismissIssueCreate
|
|
4337
|
+
}
|
|
4338
|
+
) : /* @__PURE__ */ jsx18(
|
|
4339
|
+
IssueManagerShellEmptyState,
|
|
4340
|
+
{
|
|
4341
|
+
controller,
|
|
4342
|
+
emptyIllustration
|
|
4343
|
+
}
|
|
4344
|
+
) }),
|
|
4345
|
+
/* @__PURE__ */ jsx18(
|
|
4346
|
+
IssueManagerBottomBar,
|
|
4347
|
+
{
|
|
4348
|
+
controller,
|
|
4349
|
+
isNarrowLayout: shellView.isNarrowLayout,
|
|
4350
|
+
selectedIssue,
|
|
4351
|
+
selectedTask,
|
|
4352
|
+
visible: shellView.content.showBottomBar
|
|
4353
|
+
}
|
|
4354
|
+
)
|
|
4355
|
+
] }),
|
|
4356
|
+
shellView.content.isTaskDrawerOpen ? /* @__PURE__ */ jsx18(
|
|
4357
|
+
IssueManagerTaskDrawer,
|
|
4358
|
+
{
|
|
4359
|
+
controller,
|
|
4360
|
+
selectedIssue,
|
|
4361
|
+
selectedTask,
|
|
4362
|
+
onClose: onCloseTaskDrawer
|
|
4363
|
+
}
|
|
4364
|
+
) : null
|
|
4365
|
+
] })
|
|
4248
4366
|
]
|
|
4249
4367
|
}
|
|
4250
4368
|
);
|
|
@@ -4257,13 +4375,16 @@ function IssueManagerShellEmptyState({
|
|
|
4257
4375
|
emptyIllustration ?? null,
|
|
4258
4376
|
/* @__PURE__ */ jsx18("h2", { className: "text-lg font-semibold leading-[1.35] text-[var(--text-primary)]", children: controller.copy.t("messages.noIssues") }),
|
|
4259
4377
|
/* @__PURE__ */ jsx18("p", { className: "max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]", children: controller.copy.t("emptyState") }),
|
|
4260
|
-
/* @__PURE__ */
|
|
4378
|
+
/* @__PURE__ */ jsxs18(
|
|
4261
4379
|
Button13,
|
|
4262
4380
|
{
|
|
4263
|
-
className: "mt-2",
|
|
4381
|
+
className: "mt-2 gap-2",
|
|
4264
4382
|
type: "button",
|
|
4265
4383
|
onClick: () => controller.setIssueEditorMode("create"),
|
|
4266
|
-
children:
|
|
4384
|
+
children: [
|
|
4385
|
+
/* @__PURE__ */ jsx18(FileCreateIcon4, { size: 16 }),
|
|
4386
|
+
controller.copy.t("actions.createIssue")
|
|
4387
|
+
]
|
|
4267
4388
|
}
|
|
4268
4389
|
)
|
|
4269
4390
|
] }) });
|
|
@@ -4346,7 +4467,7 @@ function IssueManagerNodeHeader({
|
|
|
4346
4467
|
"header",
|
|
4347
4468
|
{
|
|
4348
4469
|
...headerProps,
|
|
4349
|
-
className:
|
|
4470
|
+
className: cn12(
|
|
4350
4471
|
"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3",
|
|
4351
4472
|
className
|
|
4352
4473
|
),
|
|
@@ -4357,13 +4478,13 @@ function IssueManagerNodeHeader({
|
|
|
4357
4478
|
Button14,
|
|
4358
4479
|
{
|
|
4359
4480
|
"aria-label": toggleLabel,
|
|
4360
|
-
className: "rounded-md",
|
|
4481
|
+
className: "cursor-pointer rounded-md",
|
|
4361
4482
|
"data-issue-manager-sidebar-auto-collapsed": isSidebarAutoCollapsed ? "true" : void 0,
|
|
4362
4483
|
"data-issue-manager-sidebar-collapsed": effectiveCollapsed ? "true" : void 0,
|
|
4363
4484
|
size: "icon-sm",
|
|
4364
4485
|
title: toggleLabel,
|
|
4365
4486
|
type: "button",
|
|
4366
|
-
variant: "
|
|
4487
|
+
variant: "ghost",
|
|
4367
4488
|
onClick: (event) => {
|
|
4368
4489
|
event.stopPropagation();
|
|
4369
4490
|
toggleSidebar();
|
|
@@ -4393,4 +4514,4 @@ export {
|
|
|
4393
4514
|
IssueManagerNode,
|
|
4394
4515
|
IssueManagerNodeHeader
|
|
4395
4516
|
};
|
|
4396
|
-
//# sourceMappingURL=chunk-
|
|
4517
|
+
//# sourceMappingURL=chunk-PDBLEOV4.js.map
|