epiq 1.0.1 → 1.2.0
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 +59 -22
- package/dist/index.js +54 -54
- package/dist/mcp.js +48 -48
- package/package.json +1 -1
- package/readme.md +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.0
|
|
24914
|
+
var EPIQ_VERSION = "1.2.0";
|
|
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,19 @@ var getResultValue = (payload) => {
|
|
|
26195
26226
|
}
|
|
26196
26227
|
return payload;
|
|
26197
26228
|
};
|
|
26198
|
-
var
|
|
26229
|
+
var matchesRefOrId = (node, refOrId) => node.id === refOrId || node.ref === refOrId.replace(/-/g, "").toUpperCase();
|
|
26230
|
+
var findIssue = (state, issueRefOrId) => {
|
|
26199
26231
|
for (const board of state.boards) {
|
|
26200
26232
|
for (const swimlane of board.swimlanes) {
|
|
26201
|
-
const issue = swimlane.issues.find(
|
|
26233
|
+
const issue = swimlane.issues.find(
|
|
26234
|
+
(issue2) => matchesRefOrId(issue2, issueRefOrId)
|
|
26235
|
+
);
|
|
26202
26236
|
if (issue) return issue;
|
|
26203
26237
|
}
|
|
26204
26238
|
}
|
|
26205
26239
|
return null;
|
|
26206
26240
|
};
|
|
26241
|
+
var findBoard = (state, boardRefOrId) => state.boards.find((board) => matchesRefOrId(board, boardRefOrId)) ?? null;
|
|
26207
26242
|
var updateIssueInGuiState = (state, issueId, updateIssue) => ({
|
|
26208
26243
|
...state,
|
|
26209
26244
|
boards: state.boards.map((board) => ({
|
|
@@ -26248,15 +26283,15 @@ var App = () => {
|
|
|
26248
26283
|
const [createIssueModal, setCreateIssueModal] = (0, import_react7.useState)(null);
|
|
26249
26284
|
const boardMenuRef = (0, import_react7.useRef)(null);
|
|
26250
26285
|
const socketRef = (0, import_react7.useRef)(null);
|
|
26251
|
-
const selectedIssueId = issueId ?? null;
|
|
26252
26286
|
const selectedTab = searchParams.get("tab") === "comments" ? "comments" : "overview";
|
|
26253
26287
|
const navigate = useNavigate();
|
|
26288
|
+
const selectedBoard = (state && boardId ? findBoard(state, boardId) : null) ?? state?.boards[0] ?? null;
|
|
26289
|
+
const boardSlug = selectedBoard?.ref ?? boardId;
|
|
26290
|
+
const selectedIssue = state && issueId ? findIssue(state, issueId) : null;
|
|
26254
26291
|
const closeIssueDetails = () => {
|
|
26255
|
-
if (!
|
|
26256
|
-
void navigate(`/board/${
|
|
26292
|
+
if (!boardSlug) return;
|
|
26293
|
+
void navigate(`/board/${boardSlug}`);
|
|
26257
26294
|
};
|
|
26258
|
-
const selectedBoard = state?.boards.find((board) => board.id === boardId) ?? state?.boards[0] ?? null;
|
|
26259
|
-
const selectedIssue = state && selectedIssueId ? findIssue(state, selectedIssueId) : null;
|
|
26260
26295
|
const commentsByIssueId = state?.commentsByIssueId ?? {};
|
|
26261
26296
|
const requestState = () => {
|
|
26262
26297
|
socketRef.current?.send(JSON.stringify({ type: "state:get" }));
|
|
@@ -26285,7 +26320,9 @@ var App = () => {
|
|
|
26285
26320
|
if (message.type === "issue:created") {
|
|
26286
26321
|
const created = getResultValue(message.payload);
|
|
26287
26322
|
if (created && boardId) {
|
|
26288
|
-
void navigate(
|
|
26323
|
+
void navigate(
|
|
26324
|
+
`/board/${boardId}/${nodeRef(created.id)}?tab=overview`
|
|
26325
|
+
);
|
|
26289
26326
|
}
|
|
26290
26327
|
}
|
|
26291
26328
|
if (message.type === "failed") {
|
|
@@ -26305,7 +26342,7 @@ var App = () => {
|
|
|
26305
26342
|
}, [boardId, navigate]);
|
|
26306
26343
|
(0, import_react7.useEffect)(() => {
|
|
26307
26344
|
if (!boardId && state?.boards[0]) {
|
|
26308
|
-
navigate(`/board/${state.boards[0].
|
|
26345
|
+
void navigate(`/board/${state.boards[0].ref}`, { replace: true });
|
|
26309
26346
|
}
|
|
26310
26347
|
}, [boardId, state, navigate]);
|
|
26311
26348
|
(0, import_react7.useEffect)(() => {
|
|
@@ -26325,12 +26362,12 @@ var App = () => {
|
|
|
26325
26362
|
socketRef.current?.send(JSON.stringify({ type, payload }));
|
|
26326
26363
|
};
|
|
26327
26364
|
const selectIssue = (nextIssueId) => {
|
|
26328
|
-
if (!
|
|
26329
|
-
void navigate(`/board/${
|
|
26365
|
+
if (!boardSlug) return;
|
|
26366
|
+
void navigate(`/board/${boardSlug}/${nodeRef(nextIssueId)}?tab=overview`);
|
|
26330
26367
|
};
|
|
26331
26368
|
const selectIssueComments = (nextIssueId) => {
|
|
26332
|
-
if (!
|
|
26333
|
-
void navigate(`/board/${
|
|
26369
|
+
if (!boardSlug) return;
|
|
26370
|
+
void navigate(`/board/${boardSlug}/${nodeRef(nextIssueId)}?tab=comments`);
|
|
26334
26371
|
};
|
|
26335
26372
|
const changeIssueDetailsTab = (nextTab) => {
|
|
26336
26373
|
setSearchParams(
|
|
@@ -26449,7 +26486,7 @@ var App = () => {
|
|
|
26449
26486
|
const selectBoard = (nextBoardId) => {
|
|
26450
26487
|
setBoardMenuOpen(false);
|
|
26451
26488
|
clearDragState();
|
|
26452
|
-
void navigate(`/board/${nextBoardId}`);
|
|
26489
|
+
void navigate(`/board/${nodeRef(nextBoardId)}`);
|
|
26453
26490
|
};
|
|
26454
26491
|
const openCreateIssueModal = (swimlaneId) => {
|
|
26455
26492
|
setCreateIssueModal({
|
|
@@ -26550,7 +26587,7 @@ var App = () => {
|
|
|
26550
26587
|
{
|
|
26551
26588
|
swimlane,
|
|
26552
26589
|
selected: false,
|
|
26553
|
-
selectedIssueId,
|
|
26590
|
+
selectedIssueId: selectedIssue?.id ?? null,
|
|
26554
26591
|
commentsByIssueId,
|
|
26555
26592
|
dragOver: dragOverSwimlaneId === swimlane.id,
|
|
26556
26593
|
dropIndex: dropTarget?.swimlaneId === swimlane.id ? dropTarget.index : null,
|