epiq 1.1.0 → 1.2.1
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/gui/main.js +66 -28
- package/dist/index.js +44 -44
- package/dist/mcp.js +36 -36
- package/package.json +1 -1
package/dist/gui/main.js
CHANGED
|
@@ -24911,7 +24911,7 @@ var User = ({
|
|
|
24911
24911
|
);
|
|
24912
24912
|
|
|
24913
24913
|
// source/version.ts
|
|
24914
|
-
var EPIQ_VERSION = "1.1
|
|
24914
|
+
var EPIQ_VERSION = "1.2.1";
|
|
24915
24915
|
|
|
24916
24916
|
// source/gui/client/components/Header.tsx
|
|
24917
24917
|
var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
|
|
@@ -25070,7 +25070,7 @@ var FormHeader = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
|
25070
25070
|
style: {
|
|
25071
25071
|
display: "flex",
|
|
25072
25072
|
justifyContent: "space-between",
|
|
25073
|
-
alignItems: "
|
|
25073
|
+
alignItems: "flex-start",
|
|
25074
25074
|
gap: 12,
|
|
25075
25075
|
marginBottom: 18
|
|
25076
25076
|
},
|
|
@@ -25101,7 +25101,7 @@ var Input = (props) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
|
25101
25101
|
var Textarea = (props) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
25102
25102
|
"textarea",
|
|
25103
25103
|
{
|
|
25104
|
-
maxLength: props.maxLength ??
|
|
25104
|
+
maxLength: props.maxLength ?? 1500,
|
|
25105
25105
|
...props,
|
|
25106
25106
|
style: {
|
|
25107
25107
|
width: "100%",
|
|
@@ -25452,7 +25452,7 @@ var IssueDetails = ({
|
|
|
25452
25452
|
textTransform: "uppercase",
|
|
25453
25453
|
letterSpacing: "0.08em"
|
|
25454
25454
|
},
|
|
25455
|
-
children: "
|
|
25455
|
+
children: issue.ref && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { style: { fontFamily: "monospace", color: GUI_THEME.dim }, children: "#" + issue.ref })
|
|
25456
25456
|
}
|
|
25457
25457
|
),
|
|
25458
25458
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { variant: "ghost", onClick: onClose, children: "\xD7" })
|
|
@@ -25782,8 +25782,8 @@ var TicketCard = ({
|
|
|
25782
25782
|
cursor: ticket.readonly ? "default" : "grab",
|
|
25783
25783
|
background: isSelected ? "rgba(118,228,255,0.08)" : "rgba(185, 192, 255, 0.06)",
|
|
25784
25784
|
padding: "12px",
|
|
25785
|
-
minHeight: "
|
|
25786
|
-
borderRadius: "
|
|
25785
|
+
minHeight: "58px",
|
|
25786
|
+
borderRadius: "8px",
|
|
25787
25787
|
marginBottom: 4,
|
|
25788
25788
|
border: `1px solid ${isSelected ? GUI_THEME.accent : "transparent"}`
|
|
25789
25789
|
},
|
|
@@ -25823,6 +25823,32 @@ var TicketCard = ({
|
|
|
25823
25823
|
flex: 1
|
|
25824
25824
|
},
|
|
25825
25825
|
children: [
|
|
25826
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
25827
|
+
"div",
|
|
25828
|
+
{
|
|
25829
|
+
style: {
|
|
25830
|
+
overflow: "hidden",
|
|
25831
|
+
textOverflow: "ellipsis",
|
|
25832
|
+
whiteSpace: "nowrap",
|
|
25833
|
+
fontWeight: 500,
|
|
25834
|
+
fontSize: 12
|
|
25835
|
+
},
|
|
25836
|
+
children: ticket.ref && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
25837
|
+
"span",
|
|
25838
|
+
{
|
|
25839
|
+
style: {
|
|
25840
|
+
fontFamily: "monospace",
|
|
25841
|
+
marginRight: 6,
|
|
25842
|
+
color: GUI_THEME.dim
|
|
25843
|
+
},
|
|
25844
|
+
children: [
|
|
25845
|
+
"#",
|
|
25846
|
+
ticket.ref
|
|
25847
|
+
]
|
|
25848
|
+
}
|
|
25849
|
+
)
|
|
25850
|
+
}
|
|
25851
|
+
),
|
|
25826
25852
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
25827
25853
|
"div",
|
|
25828
25854
|
{
|
|
@@ -25927,7 +25953,8 @@ var TicketCard = ({
|
|
|
25927
25953
|
display: "flex",
|
|
25928
25954
|
alignItems: "flex-start",
|
|
25929
25955
|
flexShrink: 0,
|
|
25930
|
-
paddingTop: 2
|
|
25956
|
+
paddingTop: 2,
|
|
25957
|
+
marginTop: "-4px"
|
|
25931
25958
|
},
|
|
25932
25959
|
children: ticket.assignees.map((assignee, idx) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(User, { user: assignee, index: idx, isFocus: isSelected }))
|
|
25933
25960
|
}
|
|
@@ -26184,6 +26211,10 @@ var moveIssue = (setState, socketRef) => (issueId, parentId, targetIndex) => {
|
|
|
26184
26211
|
);
|
|
26185
26212
|
};
|
|
26186
26213
|
|
|
26214
|
+
// source/lib/utils/node-ref.ts
|
|
26215
|
+
var NODE_REF_LENGTH = 7;
|
|
26216
|
+
var nodeRef = (id) => id.slice(-NODE_REF_LENGTH).toUpperCase();
|
|
26217
|
+
|
|
26187
26218
|
// source/gui/client/lib/gui-state-helper.tsx
|
|
26188
26219
|
var getResultValue = (payload) => {
|
|
26189
26220
|
if (!payload) return void 0;
|
|
@@ -26195,15 +26226,20 @@ var getResultValue = (payload) => {
|
|
|
26195
26226
|
}
|
|
26196
26227
|
return payload;
|
|
26197
26228
|
};
|
|
26198
|
-
var
|
|
26199
|
-
|
|
26200
|
-
|
|
26201
|
-
|
|
26202
|
-
|
|
26203
|
-
|
|
26204
|
-
}
|
|
26205
|
-
return null;
|
|
26229
|
+
var findByRefOrId = (nodes, refOrId) => {
|
|
26230
|
+
const byId = nodes.find((node) => node.id === refOrId);
|
|
26231
|
+
if (byId) return byId;
|
|
26232
|
+
const ref = refOrId.replace(/-/g, "").toUpperCase();
|
|
26233
|
+
const byRef = nodes.filter((node) => node.ref === ref);
|
|
26234
|
+
return byRef.length === 1 ? byRef[0] ?? null : null;
|
|
26206
26235
|
};
|
|
26236
|
+
var findIssue = (state, issueRefOrId) => findByRefOrId(
|
|
26237
|
+
state.boards.flatMap(
|
|
26238
|
+
(board) => board.swimlanes.flatMap((swimlane) => swimlane.issues)
|
|
26239
|
+
),
|
|
26240
|
+
issueRefOrId
|
|
26241
|
+
);
|
|
26242
|
+
var findBoard = (state, boardRefOrId) => findByRefOrId(state.boards, boardRefOrId);
|
|
26207
26243
|
var updateIssueInGuiState = (state, issueId, updateIssue) => ({
|
|
26208
26244
|
...state,
|
|
26209
26245
|
boards: state.boards.map((board) => ({
|
|
@@ -26248,15 +26284,15 @@ var App = () => {
|
|
|
26248
26284
|
const [createIssueModal, setCreateIssueModal] = (0, import_react7.useState)(null);
|
|
26249
26285
|
const boardMenuRef = (0, import_react7.useRef)(null);
|
|
26250
26286
|
const socketRef = (0, import_react7.useRef)(null);
|
|
26251
|
-
const selectedIssueId = issueId ?? null;
|
|
26252
26287
|
const selectedTab = searchParams.get("tab") === "comments" ? "comments" : "overview";
|
|
26253
26288
|
const navigate = useNavigate();
|
|
26289
|
+
const selectedBoard = (state && boardId ? findBoard(state, boardId) : null) ?? state?.boards[0] ?? null;
|
|
26290
|
+
const boardSlug = selectedBoard?.ref ?? boardId;
|
|
26291
|
+
const selectedIssue = state && issueId ? findIssue(state, issueId) : null;
|
|
26254
26292
|
const closeIssueDetails = () => {
|
|
26255
|
-
if (!
|
|
26256
|
-
void navigate(`/board/${
|
|
26293
|
+
if (!boardSlug) return;
|
|
26294
|
+
void navigate(`/board/${boardSlug}`);
|
|
26257
26295
|
};
|
|
26258
|
-
const selectedBoard = state?.boards.find((board) => board.id === boardId) ?? state?.boards[0] ?? null;
|
|
26259
|
-
const selectedIssue = state && selectedIssueId ? findIssue(state, selectedIssueId) : null;
|
|
26260
26296
|
const commentsByIssueId = state?.commentsByIssueId ?? {};
|
|
26261
26297
|
const requestState = () => {
|
|
26262
26298
|
socketRef.current?.send(JSON.stringify({ type: "state:get" }));
|
|
@@ -26285,7 +26321,9 @@ var App = () => {
|
|
|
26285
26321
|
if (message.type === "issue:created") {
|
|
26286
26322
|
const created = getResultValue(message.payload);
|
|
26287
26323
|
if (created && boardId) {
|
|
26288
|
-
void navigate(
|
|
26324
|
+
void navigate(
|
|
26325
|
+
`/board/${boardId}/${nodeRef(created.id)}?tab=overview`
|
|
26326
|
+
);
|
|
26289
26327
|
}
|
|
26290
26328
|
}
|
|
26291
26329
|
if (message.type === "failed") {
|
|
@@ -26305,7 +26343,7 @@ var App = () => {
|
|
|
26305
26343
|
}, [boardId, navigate]);
|
|
26306
26344
|
(0, import_react7.useEffect)(() => {
|
|
26307
26345
|
if (!boardId && state?.boards[0]) {
|
|
26308
|
-
navigate(`/board/${state.boards[0].
|
|
26346
|
+
void navigate(`/board/${state.boards[0].ref}`, { replace: true });
|
|
26309
26347
|
}
|
|
26310
26348
|
}, [boardId, state, navigate]);
|
|
26311
26349
|
(0, import_react7.useEffect)(() => {
|
|
@@ -26325,12 +26363,12 @@ var App = () => {
|
|
|
26325
26363
|
socketRef.current?.send(JSON.stringify({ type, payload }));
|
|
26326
26364
|
};
|
|
26327
26365
|
const selectIssue = (nextIssueId) => {
|
|
26328
|
-
if (!
|
|
26329
|
-
void navigate(`/board/${
|
|
26366
|
+
if (!boardSlug) return;
|
|
26367
|
+
void navigate(`/board/${boardSlug}/${nodeRef(nextIssueId)}?tab=overview`);
|
|
26330
26368
|
};
|
|
26331
26369
|
const selectIssueComments = (nextIssueId) => {
|
|
26332
|
-
if (!
|
|
26333
|
-
void navigate(`/board/${
|
|
26370
|
+
if (!boardSlug) return;
|
|
26371
|
+
void navigate(`/board/${boardSlug}/${nodeRef(nextIssueId)}?tab=comments`);
|
|
26334
26372
|
};
|
|
26335
26373
|
const changeIssueDetailsTab = (nextTab) => {
|
|
26336
26374
|
setSearchParams(
|
|
@@ -26449,7 +26487,7 @@ var App = () => {
|
|
|
26449
26487
|
const selectBoard = (nextBoardId) => {
|
|
26450
26488
|
setBoardMenuOpen(false);
|
|
26451
26489
|
clearDragState();
|
|
26452
|
-
void navigate(`/board/${nextBoardId}`);
|
|
26490
|
+
void navigate(`/board/${nodeRef(nextBoardId)}`);
|
|
26453
26491
|
};
|
|
26454
26492
|
const openCreateIssueModal = (swimlaneId) => {
|
|
26455
26493
|
setCreateIssueModal({
|
|
@@ -26550,7 +26588,7 @@ var App = () => {
|
|
|
26550
26588
|
{
|
|
26551
26589
|
swimlane,
|
|
26552
26590
|
selected: false,
|
|
26553
|
-
selectedIssueId,
|
|
26591
|
+
selectedIssueId: selectedIssue?.id ?? null,
|
|
26554
26592
|
commentsByIssueId,
|
|
26555
26593
|
dragOver: dragOverSwimlaneId === swimlane.id,
|
|
26556
26594
|
dropIndex: dropTarget?.swimlaneId === swimlane.id ? dropTarget.index : null,
|