@devalok/shilp-sutra-karm 0.1.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/admin/adjustments/approved-adjustments.d.ts +10 -0
- package/dist/admin/adjustments/approved-adjustments.d.ts.map +1 -0
- package/dist/admin/adjustments/approved-adjustments.js +42 -0
- package/dist/admin/adjustments/index.d.ts +2 -0
- package/dist/admin/adjustments/index.d.ts.map +1 -0
- package/dist/admin/break/break-admin-skeleton.d.ts +3 -0
- package/dist/admin/break/break-admin-skeleton.d.ts.map +1 -0
- package/dist/admin/break/break-admin-skeleton.js +58 -0
- package/dist/admin/break/break-admin.d.ts +79 -0
- package/dist/admin/break/break-admin.d.ts.map +1 -0
- package/dist/admin/break/break-admin.js +346 -0
- package/dist/admin/break/break-balance.d.ts +14 -0
- package/dist/admin/break/break-balance.d.ts.map +1 -0
- package/dist/admin/break/break-balance.js +41 -0
- package/dist/admin/break/breaks.d.ts +21 -0
- package/dist/admin/break/breaks.d.ts.map +1 -0
- package/dist/admin/break/breaks.js +90 -0
- package/dist/admin/break/delete-break.d.ts +10 -0
- package/dist/admin/break/delete-break.d.ts.map +1 -0
- package/dist/admin/break/delete-break.js +53 -0
- package/dist/admin/break/edit-break-balance.d.ts +15 -0
- package/dist/admin/break/edit-break-balance.d.ts.map +1 -0
- package/dist/admin/break/edit-break-balance.js +111 -0
- package/dist/admin/break/edit-break.d.ts +23 -0
- package/dist/admin/break/edit-break.d.ts.map +1 -0
- package/dist/admin/break/edit-break.js +485 -0
- package/dist/admin/break/header.d.ts +22 -0
- package/dist/admin/break/header.d.ts.map +1 -0
- package/dist/admin/break/header.js +228 -0
- package/dist/admin/break/index.d.ts +18 -0
- package/dist/admin/break/index.d.ts.map +1 -0
- package/dist/admin/break/leave-request.d.ts +17 -0
- package/dist/admin/break/leave-request.d.ts.map +1 -0
- package/dist/admin/break/leave-request.js +162 -0
- package/dist/admin/break/use-break-date-picker.d.ts +25 -0
- package/dist/admin/break/use-break-date-picker.d.ts.map +1 -0
- package/dist/admin/break/use-break-date-picker.js +42 -0
- package/dist/admin/dashboard/admin-dashboard.d.ts +109 -0
- package/dist/admin/dashboard/admin-dashboard.d.ts.map +1 -0
- package/dist/admin/dashboard/admin-dashboard.js +336 -0
- package/dist/admin/dashboard/associate-detail.d.ts +36 -0
- package/dist/admin/dashboard/associate-detail.d.ts.map +1 -0
- package/dist/admin/dashboard/associate-detail.js +269 -0
- package/dist/admin/dashboard/attendance-overview.d.ts +11 -0
- package/dist/admin/dashboard/attendance-overview.d.ts.map +1 -0
- package/dist/admin/dashboard/attendance-overview.js +137 -0
- package/dist/admin/dashboard/break-request.d.ts +25 -0
- package/dist/admin/dashboard/break-request.d.ts.map +1 -0
- package/dist/admin/dashboard/break-request.js +174 -0
- package/dist/admin/dashboard/calendar.d.ts +7 -0
- package/dist/admin/dashboard/calendar.d.ts.map +1 -0
- package/dist/admin/dashboard/calendar.js +140 -0
- package/dist/admin/dashboard/correction-list.d.ts +21 -0
- package/dist/admin/dashboard/correction-list.d.ts.map +1 -0
- package/dist/admin/dashboard/correction-list.js +99 -0
- package/dist/admin/dashboard/dashboard-header.d.ts +18 -0
- package/dist/admin/dashboard/dashboard-header.d.ts.map +1 -0
- package/dist/admin/dashboard/dashboard-header.js +153 -0
- package/dist/admin/dashboard/dashboard-skeleton.d.ts +3 -0
- package/dist/admin/dashboard/dashboard-skeleton.d.ts.map +1 -0
- package/dist/admin/dashboard/dashboard-skeleton.js +110 -0
- package/dist/admin/dashboard/index.d.ts +13 -0
- package/dist/admin/dashboard/index.d.ts.map +1 -0
- package/dist/admin/dashboard/leave-requests.d.ts +26 -0
- package/dist/admin/dashboard/leave-requests.d.ts.map +1 -0
- package/dist/admin/dashboard/leave-requests.js +197 -0
- package/dist/admin/dashboard/render-date.d.ts +16 -0
- package/dist/admin/dashboard/render-date.d.ts.map +1 -0
- package/dist/admin/dashboard/render-date.js +143 -0
- package/dist/admin/dashboard/use-calendar-navigation.d.ts +60 -0
- package/dist/admin/dashboard/use-calendar-navigation.d.ts.map +1 -0
- package/dist/admin/dashboard/use-calendar-navigation.js +168 -0
- package/dist/admin/dashboard/use-leave-request-interaction.d.ts +21 -0
- package/dist/admin/dashboard/use-leave-request-interaction.d.ts.map +1 -0
- package/dist/admin/dashboard/use-leave-request-interaction.js +33 -0
- package/dist/admin/icons.d.ts +2 -0
- package/dist/admin/icons.d.ts.map +1 -0
- package/dist/admin/index.d.ts +9 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +62 -0
- package/dist/admin/types.d.ts +113 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/utils/date-range-utils.d.ts +35 -0
- package/dist/admin/utils/date-range-utils.d.ts.map +1 -0
- package/dist/admin/utils/date-range-utils.js +36 -0
- package/dist/admin/utils/date-utils.d.ts +29 -0
- package/dist/admin/utils/date-utils.d.ts.map +1 -0
- package/dist/admin/utils/date-utils.js +118 -0
- package/dist/admin/utils/emoji-utils.d.ts +3 -0
- package/dist/admin/utils/emoji-utils.d.ts.map +1 -0
- package/dist/admin/utils/emoji-utils.js +16 -0
- package/dist/admin/utils/render-adjustment-type.d.ts +17 -0
- package/dist/admin/utils/render-adjustment-type.d.ts.map +1 -0
- package/dist/admin/utils/render-adjustment-type.js +19 -0
- package/dist/admin/utils/render-status.d.ts +3 -0
- package/dist/admin/utils/render-status.d.ts.map +1 -0
- package/dist/admin/utils/render-status.js +21 -0
- package/dist/board/board-column.d.ts +20 -0
- package/dist/board/board-column.d.ts.map +1 -0
- package/dist/board/board-column.js +233 -0
- package/dist/board/index.d.ts +4 -0
- package/dist/board/index.d.ts.map +1 -0
- package/dist/board/index.js +9 -0
- package/dist/board/kanban-board.d.ts +17 -0
- package/dist/board/kanban-board.d.ts.map +1 -0
- package/dist/board/kanban-board.js +218 -0
- package/dist/board/task-card.d.ts +25 -0
- package/dist/board/task-card.d.ts.map +1 -0
- package/dist/board/task-card.js +169 -0
- package/dist/chat/chat-input.d.ts +10 -0
- package/dist/chat/chat-input.d.ts.map +1 -0
- package/dist/chat/chat-input.js +52 -0
- package/dist/chat/chat-panel.d.ts +31 -0
- package/dist/chat/chat-panel.d.ts.map +1 -0
- package/dist/chat/chat-panel.js +150 -0
- package/dist/chat/conversation-list.d.ts +17 -0
- package/dist/chat/conversation-list.d.ts.map +1 -0
- package/dist/chat/conversation-list.js +98 -0
- package/dist/chat/index.d.ts +6 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +12 -0
- package/dist/chat/message-list.d.ts +16 -0
- package/dist/chat/message-list.d.ts.map +1 -0
- package/dist/chat/message-list.js +69 -0
- package/dist/chat/streaming-text.d.ts +6 -0
- package/dist/chat/streaming-text.d.ts.map +1 -0
- package/dist/chat/streaming-text.js +29 -0
- package/dist/client/accent-provider.d.ts +14 -0
- package/dist/client/accent-provider.d.ts.map +1 -0
- package/dist/client/accent-provider.js +21 -0
- package/dist/client/client-portal-header.d.ts +10 -0
- package/dist/client/client-portal-header.d.ts.map +1 -0
- package/dist/client/client-portal-header.js +47 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/project-card.d.ts +11 -0
- package/dist/client/project-card.d.ts.map +1 -0
- package/dist/client/project-card.js +59 -0
- package/dist/dashboard/attendance-cta.d.ts +22 -0
- package/dist/dashboard/attendance-cta.d.ts.map +1 -0
- package/dist/dashboard/attendance-cta.js +127 -0
- package/dist/dashboard/daily-brief.d.ts +13 -0
- package/dist/dashboard/daily-brief.d.ts.map +1 -0
- package/dist/dashboard/daily-brief.js +66 -0
- package/dist/dashboard/index.d.ts +3 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +6 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/page-skeletons.d.ts +5 -0
- package/dist/page-skeletons.d.ts.map +1 -0
- package/dist/page-skeletons.js +129 -0
- package/dist/tasks/activity-tab.d.ts +20 -0
- package/dist/tasks/activity-tab.d.ts.map +1 -0
- package/dist/tasks/activity-tab.js +184 -0
- package/dist/tasks/conversation-tab.d.ts +45 -0
- package/dist/tasks/conversation-tab.d.ts.map +1 -0
- package/dist/tasks/conversation-tab.js +126 -0
- package/dist/tasks/files-tab.d.ts +28 -0
- package/dist/tasks/files-tab.d.ts.map +1 -0
- package/dist/tasks/files-tab.js +184 -0
- package/dist/tasks/index.d.ts +8 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +16 -0
- package/dist/tasks/review-tab.d.ts +32 -0
- package/dist/tasks/review-tab.d.ts.map +1 -0
- package/dist/tasks/review-tab.js +169 -0
- package/dist/tasks/subtasks-tab.d.ts +36 -0
- package/dist/tasks/subtasks-tab.d.ts.map +1 -0
- package/dist/tasks/subtasks-tab.js +153 -0
- package/dist/tasks/task-constants.d.ts +9 -0
- package/dist/tasks/task-constants.d.ts.map +1 -0
- package/dist/tasks/task-constants.js +21 -0
- package/dist/tasks/task-detail-panel.d.ts +93 -0
- package/dist/tasks/task-detail-panel.d.ts.map +1 -0
- package/dist/tasks/task-detail-panel.js +208 -0
- package/dist/tasks/task-properties.d.ts +60 -0
- package/dist/tasks/task-properties.d.ts.map +1 -0
- package/dist/tasks/task-properties.js +316 -0
- package/package.json +67 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { jsxs as a, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import * as d from "react";
|
|
3
|
+
import { cn as p } from "@devalok/shilp-sutra/ui";
|
|
4
|
+
import { Avatar as R, AvatarImage as v, AvatarFallback as k } from "@devalok/shilp-sutra/ui";
|
|
5
|
+
import { Badge as I } from "@devalok/shilp-sutra/ui";
|
|
6
|
+
import { EmptyState as S } from "@devalok/shilp-sutra/composed";
|
|
7
|
+
import { MemberPicker as A } from "@devalok/shilp-sutra/composed";
|
|
8
|
+
import { IconCheck as C, IconMessage as P, IconX as D, IconGitPullRequest as T, IconPlus as M } from "@tabler/icons-react";
|
|
9
|
+
import { getInitials as q } from "@devalok/shilp-sutra/composed";
|
|
10
|
+
import { REVIEW_STATUS_MAP as O } from "./task-constants.js";
|
|
11
|
+
function _(l) {
|
|
12
|
+
return new Date(l).toLocaleDateString("en-IN", {
|
|
13
|
+
month: "short",
|
|
14
|
+
day: "numeric",
|
|
15
|
+
hour: "numeric",
|
|
16
|
+
minute: "2-digit"
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
const G = [
|
|
20
|
+
{ status: "APPROVED", label: "Approve", icon: C },
|
|
21
|
+
{ status: "CHANGES_REQUESTED", label: "Request Changes", icon: P },
|
|
22
|
+
{ status: "REJECTED", label: "Reject", icon: D }
|
|
23
|
+
], j = d.forwardRef(
|
|
24
|
+
function({
|
|
25
|
+
reviews: i,
|
|
26
|
+
members: m,
|
|
27
|
+
onRequestReview: b,
|
|
28
|
+
onUpdateStatus: h,
|
|
29
|
+
className: f
|
|
30
|
+
}, N) {
|
|
31
|
+
const [u, x] = d.useState({}), [g, n] = d.useState(null), y = d.useMemo(
|
|
32
|
+
() => m.map((e) => ({ id: e.id, name: e.name, avatar: e.image ?? void 0 })),
|
|
33
|
+
[m]
|
|
34
|
+
), E = (e, r) => {
|
|
35
|
+
h(e, r, u[e]), x((o) => {
|
|
36
|
+
const s = { ...o };
|
|
37
|
+
return delete s[e], s;
|
|
38
|
+
}), n(null);
|
|
39
|
+
};
|
|
40
|
+
return /* @__PURE__ */ a("div", { ref: N, className: p("flex flex-col", f), children: [
|
|
41
|
+
i.length > 0 ? /* @__PURE__ */ t("div", { className: "space-y-ds-04", children: i.map((e) => {
|
|
42
|
+
const r = O[e.status], o = g === e.id;
|
|
43
|
+
return /* @__PURE__ */ a(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
className: "rounded-ds-lg border border-border bg-layer-01 shadow-01 p-ds-04",
|
|
47
|
+
children: [
|
|
48
|
+
/* @__PURE__ */ a("div", { className: "flex items-center gap-ds-03", children: [
|
|
49
|
+
/* @__PURE__ */ a(R, { className: "h-ds-xs w-ds-xs shrink-0", children: [
|
|
50
|
+
e.reviewer.image && /* @__PURE__ */ t(
|
|
51
|
+
v,
|
|
52
|
+
{
|
|
53
|
+
src: e.reviewer.image,
|
|
54
|
+
alt: e.reviewer.name
|
|
55
|
+
}
|
|
56
|
+
),
|
|
57
|
+
/* @__PURE__ */ t(k, { className: "bg-layer-03 text-ds-xs font-semibold text-text-on-color", children: q(e.reviewer.name) })
|
|
58
|
+
] }),
|
|
59
|
+
/* @__PURE__ */ a("div", { className: "flex-1 min-w-0", children: [
|
|
60
|
+
/* @__PURE__ */ t("span", { className: "text-ds-md font-medium text-text-primary", children: e.reviewer.name }),
|
|
61
|
+
/* @__PURE__ */ a("span", { className: "ml-ds-03 text-ds-sm text-text-placeholder", children: [
|
|
62
|
+
"requested by ",
|
|
63
|
+
e.requestedBy.name
|
|
64
|
+
] })
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ t(
|
|
67
|
+
I,
|
|
68
|
+
{
|
|
69
|
+
variant: r.variant,
|
|
70
|
+
children: r.label
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
] }),
|
|
74
|
+
e.feedback && /* @__PURE__ */ t("div", { className: "mt-ds-03 rounded-ds-md bg-layer-02 px-ds-04 py-ds-03", children: /* @__PURE__ */ t("p", { className: "text-ds-sm text-text-secondary", children: e.feedback }) }),
|
|
75
|
+
e.status === "PENDING" && /* @__PURE__ */ t("div", { className: "mt-ds-03", children: o ? /* @__PURE__ */ a("div", { className: "space-y-ds-03", children: [
|
|
76
|
+
/* @__PURE__ */ t(
|
|
77
|
+
"textarea",
|
|
78
|
+
{
|
|
79
|
+
value: u[e.id] || "",
|
|
80
|
+
onChange: (s) => x((c) => ({
|
|
81
|
+
...c,
|
|
82
|
+
[e.id]: s.target.value
|
|
83
|
+
})),
|
|
84
|
+
placeholder: "Add feedback (optional)...",
|
|
85
|
+
rows: 2,
|
|
86
|
+
className: "w-full resize-none rounded-ds-md border border-border bg-transparent px-ds-03 py-ds-03 text-ds-sm text-text-primary placeholder:text-text-placeholder outline-none focus:border-border-subtle"
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
/* @__PURE__ */ a("div", { className: "flex items-center gap-ds-02b", children: [
|
|
90
|
+
G.map((s) => {
|
|
91
|
+
const c = s.icon;
|
|
92
|
+
return /* @__PURE__ */ a(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
type: "button",
|
|
96
|
+
onClick: () => E(e.id, s.status),
|
|
97
|
+
className: p(
|
|
98
|
+
"inline-flex items-center gap-ds-02 rounded-ds-md px-ds-03 py-ds-02 text-ds-sm font-semibold transition-colors",
|
|
99
|
+
s.status === "APPROVED" && "bg-success-surface text-text-success hover:opacity-90",
|
|
100
|
+
s.status === "CHANGES_REQUESTED" && "bg-warning-surface text-text-warning hover:opacity-90",
|
|
101
|
+
s.status === "REJECTED" && "bg-error-surface text-text-error hover:opacity-90"
|
|
102
|
+
),
|
|
103
|
+
children: [
|
|
104
|
+
/* @__PURE__ */ t(c, { className: "h-3 w-3", stroke: 2 }),
|
|
105
|
+
s.label
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
s.status
|
|
109
|
+
);
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ t(
|
|
112
|
+
"button",
|
|
113
|
+
{
|
|
114
|
+
type: "button",
|
|
115
|
+
onClick: () => n(null),
|
|
116
|
+
className: "ml-auto text-ds-sm text-text-placeholder hover:text-text-secondary",
|
|
117
|
+
children: "Cancel"
|
|
118
|
+
}
|
|
119
|
+
)
|
|
120
|
+
] })
|
|
121
|
+
] }) : /* @__PURE__ */ t(
|
|
122
|
+
"button",
|
|
123
|
+
{
|
|
124
|
+
type: "button",
|
|
125
|
+
onClick: () => n(e.id),
|
|
126
|
+
className: "text-ds-sm font-medium text-interactive transition-colors hover:underline",
|
|
127
|
+
children: "Respond"
|
|
128
|
+
}
|
|
129
|
+
) }),
|
|
130
|
+
/* @__PURE__ */ t("p", { className: "mt-ds-03 text-ds-xs text-text-placeholder", children: _(e.createdAt) })
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
e.id
|
|
134
|
+
);
|
|
135
|
+
}) }) : /* @__PURE__ */ t(
|
|
136
|
+
S,
|
|
137
|
+
{
|
|
138
|
+
icon: T,
|
|
139
|
+
title: "No reviews yet",
|
|
140
|
+
description: "Request a review from a team member",
|
|
141
|
+
compact: !0
|
|
142
|
+
}
|
|
143
|
+
),
|
|
144
|
+
/* @__PURE__ */ t(
|
|
145
|
+
A,
|
|
146
|
+
{
|
|
147
|
+
members: y,
|
|
148
|
+
selectedIds: [],
|
|
149
|
+
onSelect: (e) => b(e),
|
|
150
|
+
children: /* @__PURE__ */ a(
|
|
151
|
+
"button",
|
|
152
|
+
{
|
|
153
|
+
type: "button",
|
|
154
|
+
className: "mt-ds-04 inline-flex items-center gap-ds-02b rounded-ds-lg px-ds-03 py-ds-02b text-ds-md text-text-placeholder transition-colors hover:bg-field hover:text-text-secondary",
|
|
155
|
+
children: [
|
|
156
|
+
/* @__PURE__ */ t(M, { className: "h-ico-sm w-ico-sm", stroke: 1.5 }),
|
|
157
|
+
"Request Review"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
j.displayName = "ReviewTab";
|
|
167
|
+
export {
|
|
168
|
+
j as ReviewTab
|
|
169
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface Subtask {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
priority: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';
|
|
6
|
+
columnId: string;
|
|
7
|
+
column?: {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
isTerminal?: boolean;
|
|
11
|
+
};
|
|
12
|
+
assignees: {
|
|
13
|
+
user: {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
image?: string | null;
|
|
17
|
+
};
|
|
18
|
+
}[];
|
|
19
|
+
}
|
|
20
|
+
interface SubtasksTabProps {
|
|
21
|
+
subtasks: Subtask[];
|
|
22
|
+
terminalColumnId?: string;
|
|
23
|
+
projectId: string;
|
|
24
|
+
parentTaskId: string;
|
|
25
|
+
defaultColumnId: string;
|
|
26
|
+
onCreateSubtask: (title: string) => void;
|
|
27
|
+
onToggleSubtask: (taskId: string, isComplete: boolean) => void;
|
|
28
|
+
onClickSubtask?: (taskId: string) => void;
|
|
29
|
+
className?: string;
|
|
30
|
+
/** When true, hide create/toggle controls (client view) */
|
|
31
|
+
readOnly?: boolean;
|
|
32
|
+
}
|
|
33
|
+
declare const SubtasksTab: React.ForwardRefExoticComponent<SubtasksTabProps & React.RefAttributes<HTMLDivElement>>;
|
|
34
|
+
export { SubtasksTab };
|
|
35
|
+
export type { SubtasksTabProps };
|
|
36
|
+
//# sourceMappingURL=subtasks-tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtasks-tab.d.ts","sourceRoot":"","sources":["../../src/tasks/subtasks-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAsB9B,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC3D,SAAS,EAAE;QACT,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KAC1D,EAAE,CAAA;CACJ;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD,QAAA,MAAM,WAAW,yFAyLhB,CAAA;AAID,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { jsxs as r, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import * as l from "react";
|
|
3
|
+
import { cn as a } from "@devalok/shilp-sutra/ui";
|
|
4
|
+
import { Avatar as D, AvatarImage as E, AvatarFallback as P } from "@devalok/shilp-sutra/ui";
|
|
5
|
+
import { Progress as K } from "@devalok/shilp-sutra/ui";
|
|
6
|
+
import { EmptyState as j } from "@devalok/shilp-sutra/composed";
|
|
7
|
+
import { IconSquareCheck as q, IconSquare as B, IconListCheck as L, IconPlus as O } from "@tabler/icons-react";
|
|
8
|
+
import { getInitials as S } from "@devalok/shilp-sutra/composed";
|
|
9
|
+
import { PRIORITY_DOT_COLORS as _ } from "./task-constants.js";
|
|
10
|
+
const C = l.forwardRef(
|
|
11
|
+
function({
|
|
12
|
+
subtasks: d,
|
|
13
|
+
terminalColumnId: g,
|
|
14
|
+
onCreateSubtask: w,
|
|
15
|
+
onToggleSubtask: I,
|
|
16
|
+
onClickSubtask: s,
|
|
17
|
+
className: T,
|
|
18
|
+
readOnly: f = !1
|
|
19
|
+
}, A) {
|
|
20
|
+
const [c, h] = l.useState(""), [m, x] = l.useState(!1), u = l.useRef(null), v = d.filter(
|
|
21
|
+
(e) => {
|
|
22
|
+
var o;
|
|
23
|
+
return ((o = e.column) == null ? void 0 : o.isTerminal) || e.columnId === g;
|
|
24
|
+
}
|
|
25
|
+
).length, p = d.length, y = () => {
|
|
26
|
+
const e = c.trim();
|
|
27
|
+
e && (w(e), h(""));
|
|
28
|
+
}, R = (e) => {
|
|
29
|
+
e.key === "Enter" && (e.preventDefault(), y()), e.key === "Escape" && (x(!1), h(""));
|
|
30
|
+
};
|
|
31
|
+
return l.useEffect(() => {
|
|
32
|
+
m && u.current && u.current.focus();
|
|
33
|
+
}, [m]), /* @__PURE__ */ r("div", { ref: A, className: a("flex flex-col", T), children: [
|
|
34
|
+
p > 0 && /* @__PURE__ */ r("div", { className: "mb-ds-05 flex items-center gap-ds-04", children: [
|
|
35
|
+
/* @__PURE__ */ t(K, { value: p > 0 ? v / p * 100 : 0, className: "h-ds-02b" }),
|
|
36
|
+
/* @__PURE__ */ r("span", { className: "shrink-0 text-ds-sm font-medium text-text-placeholder", children: [
|
|
37
|
+
v,
|
|
38
|
+
"/",
|
|
39
|
+
p
|
|
40
|
+
] })
|
|
41
|
+
] }),
|
|
42
|
+
d.length > 0 ? /* @__PURE__ */ t("div", { className: "space-y-ds-01", children: d.map((e) => {
|
|
43
|
+
var N, b;
|
|
44
|
+
const o = ((N = e.column) == null ? void 0 : N.isTerminal) || e.columnId === g, i = (b = e.assignees[0]) == null ? void 0 : b.user;
|
|
45
|
+
return /* @__PURE__ */ r(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
role: "button",
|
|
49
|
+
tabIndex: 0,
|
|
50
|
+
className: a(
|
|
51
|
+
"group flex items-center gap-ds-03 rounded-ds-lg px-ds-03 py-ds-02b transition-colors",
|
|
52
|
+
"hover:bg-field cursor-pointer"
|
|
53
|
+
),
|
|
54
|
+
onClick: () => s == null ? void 0 : s(e.id),
|
|
55
|
+
onKeyDown: (n) => {
|
|
56
|
+
(n.key === "Enter" || n.key === " ") && (n.preventDefault(), s == null || s(e.id));
|
|
57
|
+
},
|
|
58
|
+
children: [
|
|
59
|
+
/* @__PURE__ */ t(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
type: "button",
|
|
63
|
+
onClick: (n) => {
|
|
64
|
+
n.stopPropagation(), f || I(e.id, !o);
|
|
65
|
+
},
|
|
66
|
+
className: a(
|
|
67
|
+
"shrink-0 rounded p-ds-01 transition-colors",
|
|
68
|
+
f ? "cursor-default" : "hover:bg-layer-02"
|
|
69
|
+
),
|
|
70
|
+
children: o ? /* @__PURE__ */ t(q, { className: "h-ico-sm w-ico-sm text-interactive", stroke: 1.5 }) : /* @__PURE__ */ t(B, { className: "h-ico-sm w-ico-sm text-text-placeholder", stroke: 1.5 })
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ t(
|
|
74
|
+
"div",
|
|
75
|
+
{
|
|
76
|
+
className: a(
|
|
77
|
+
"h-2 w-2 shrink-0 rounded-ds-full",
|
|
78
|
+
_[e.priority]
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
),
|
|
82
|
+
/* @__PURE__ */ t(
|
|
83
|
+
"span",
|
|
84
|
+
{
|
|
85
|
+
className: a(
|
|
86
|
+
"flex-1 truncate text-ds-md",
|
|
87
|
+
o ? "text-text-placeholder line-through" : "text-text-primary"
|
|
88
|
+
),
|
|
89
|
+
children: e.title
|
|
90
|
+
}
|
|
91
|
+
),
|
|
92
|
+
i && /* @__PURE__ */ r(D, { className: "h-ico-md w-ico-md shrink-0", children: [
|
|
93
|
+
i.image && /* @__PURE__ */ t(E, { src: i.image, alt: i.name }),
|
|
94
|
+
/* @__PURE__ */ t(P, { className: "bg-layer-03 text-ds-xs font-semibold text-text-on-color", children: S(i.name) })
|
|
95
|
+
] })
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
e.id
|
|
99
|
+
);
|
|
100
|
+
}) }) : !m && /* @__PURE__ */ t(
|
|
101
|
+
j,
|
|
102
|
+
{
|
|
103
|
+
icon: L,
|
|
104
|
+
title: "No subtasks",
|
|
105
|
+
description: "Break this task into smaller pieces",
|
|
106
|
+
compact: !0
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
!f && (m ? /* @__PURE__ */ r("div", { className: "mt-ds-03 flex items-center gap-ds-03 rounded-ds-lg border border-border bg-layer-01 shadow-01 px-ds-04 py-ds-03", children: [
|
|
110
|
+
/* @__PURE__ */ t(
|
|
111
|
+
"input",
|
|
112
|
+
{
|
|
113
|
+
ref: u,
|
|
114
|
+
type: "text",
|
|
115
|
+
value: c,
|
|
116
|
+
onChange: (e) => h(e.target.value),
|
|
117
|
+
onKeyDown: R,
|
|
118
|
+
onBlur: () => {
|
|
119
|
+
c.trim() || x(!1);
|
|
120
|
+
},
|
|
121
|
+
placeholder: "Subtask title...",
|
|
122
|
+
className: "flex-1 bg-transparent text-ds-md text-text-primary placeholder:text-text-placeholder outline-none"
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
/* @__PURE__ */ t(
|
|
126
|
+
"button",
|
|
127
|
+
{
|
|
128
|
+
type: "button",
|
|
129
|
+
onClick: y,
|
|
130
|
+
disabled: !c.trim(),
|
|
131
|
+
className: "inline-flex h-6 items-center gap-ds-02 rounded-ds-md bg-interactive px-ds-03 text-ds-sm font-semibold text-text-on-color transition-colors hover:bg-interactive-hover disabled:opacity-[0.38]",
|
|
132
|
+
children: "Add"
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
] }) : /* @__PURE__ */ r(
|
|
136
|
+
"button",
|
|
137
|
+
{
|
|
138
|
+
type: "button",
|
|
139
|
+
onClick: () => x(!0),
|
|
140
|
+
className: "mt-ds-03 inline-flex items-center gap-ds-02b rounded-ds-lg px-ds-03 py-ds-02b text-ds-md text-text-placeholder transition-colors hover:bg-field hover:text-text-secondary",
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ t(O, { className: "h-ico-sm w-ico-sm", stroke: 1.5 }),
|
|
143
|
+
"Add subtask"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
))
|
|
147
|
+
] });
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
C.displayName = "SubtasksTab";
|
|
151
|
+
export {
|
|
152
|
+
C as SubtasksTab
|
|
153
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const PRIORITY_LABELS: Record<string, string>;
|
|
2
|
+
export declare const PRIORITY_DOT_COLORS: Record<string, string>;
|
|
3
|
+
export type BadgeVariant = 'neutral' | 'info' | 'success' | 'error' | 'warning' | 'brand' | 'accent' | 'teal' | 'amber' | 'slate' | 'indigo' | 'cyan' | 'orange' | 'emerald';
|
|
4
|
+
export interface ReviewStatusConfig {
|
|
5
|
+
variant: BadgeVariant;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const REVIEW_STATUS_MAP: Record<string, ReviewStatusConfig>;
|
|
9
|
+
//# sourceMappingURL=task-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-constants.d.ts","sourceRoot":"","sources":["../../src/tasks/task-constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlD,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKtD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5K,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAKhE,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const r = {
|
|
2
|
+
LOW: "Low",
|
|
3
|
+
MEDIUM: "Medium",
|
|
4
|
+
HIGH: "High",
|
|
5
|
+
URGENT: "Urgent"
|
|
6
|
+
}, a = {
|
|
7
|
+
LOW: "bg-[var(--color-category-slate)]",
|
|
8
|
+
MEDIUM: "bg-[var(--color-warning)]",
|
|
9
|
+
HIGH: "bg-[var(--color-error)]",
|
|
10
|
+
URGENT: "bg-[var(--color-error)]"
|
|
11
|
+
}, e = {
|
|
12
|
+
PENDING: { variant: "warning", label: "Pending" },
|
|
13
|
+
APPROVED: { variant: "success", label: "Approved" },
|
|
14
|
+
CHANGES_REQUESTED: { variant: "brand", label: "Changes Requested" },
|
|
15
|
+
REJECTED: { variant: "error", label: "Rejected" }
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
a as PRIORITY_DOT_COLORS,
|
|
19
|
+
r as PRIORITY_LABELS,
|
|
20
|
+
e as REVIEW_STATUS_MAP
|
|
21
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Member, Column } from './task-properties';
|
|
2
|
+
import { Subtask } from './subtasks-tab';
|
|
3
|
+
import { ReviewRequest } from './review-tab';
|
|
4
|
+
import { Comment } from './conversation-tab';
|
|
5
|
+
import { TaskFile } from './files-tab';
|
|
6
|
+
import { AuditLogEntry } from './activity-tab';
|
|
7
|
+
import * as React from 'react';
|
|
8
|
+
export interface FullTask {
|
|
9
|
+
id: string;
|
|
10
|
+
title: string;
|
|
11
|
+
description: string | null;
|
|
12
|
+
projectId: string;
|
|
13
|
+
columnId: string;
|
|
14
|
+
column: {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
};
|
|
18
|
+
ownerId: string | null;
|
|
19
|
+
owner: Member | null;
|
|
20
|
+
priority: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';
|
|
21
|
+
dueDate: string | null;
|
|
22
|
+
labels: string[];
|
|
23
|
+
visibility: 'INTERNAL' | 'EVERYONE';
|
|
24
|
+
parentTaskId: string | null;
|
|
25
|
+
depth: number;
|
|
26
|
+
order: number;
|
|
27
|
+
isBlocked: boolean;
|
|
28
|
+
assignees: {
|
|
29
|
+
user: Member;
|
|
30
|
+
}[];
|
|
31
|
+
subtasks: Subtask[];
|
|
32
|
+
reviewRequests: ReviewRequest[];
|
|
33
|
+
comments: Comment[];
|
|
34
|
+
files: TaskFile[];
|
|
35
|
+
createdAt: string;
|
|
36
|
+
updatedAt: string;
|
|
37
|
+
}
|
|
38
|
+
interface TaskDetailPanelProps {
|
|
39
|
+
task: FullTask | null;
|
|
40
|
+
loading?: boolean;
|
|
41
|
+
open: boolean;
|
|
42
|
+
onOpenChange: (open: boolean) => void;
|
|
43
|
+
columns: Column[];
|
|
44
|
+
members: Member[];
|
|
45
|
+
activities?: AuditLogEntry[];
|
|
46
|
+
/** Override comments (e.g. enriched from a separate API) */
|
|
47
|
+
enrichedComments?: Comment[] | null;
|
|
48
|
+
/** Client portal mode: hides staff-only tabs/fields */
|
|
49
|
+
clientMode?: boolean;
|
|
50
|
+
/** Fields the client can edit (only used when clientMode=true) */
|
|
51
|
+
clientEditableFields?: string[];
|
|
52
|
+
onTitleUpdate?: (title: string) => void;
|
|
53
|
+
onPropertyUpdate?: (field: string, value: unknown) => void;
|
|
54
|
+
onAssign?: (userId: string) => void;
|
|
55
|
+
onUnassign?: (userId: string) => void;
|
|
56
|
+
onCreateSubtask?: (title: string) => void;
|
|
57
|
+
onToggleSubtask?: (taskId: string, isComplete: boolean) => void;
|
|
58
|
+
onRequestReview?: (reviewerId: string) => void;
|
|
59
|
+
onUpdateReviewStatus?: (reviewId: string, status: string, feedback?: string) => void;
|
|
60
|
+
onPostComment?: (content: string, authorType: 'INTERNAL' | 'CLIENT') => void;
|
|
61
|
+
onUploadFile?: (file: File, title?: string) => void;
|
|
62
|
+
onDeleteFile?: (fileId: string) => void;
|
|
63
|
+
onTabChange?: (tab: string) => void;
|
|
64
|
+
/** Optional render props for rich text editor/viewer in comments */
|
|
65
|
+
renderEditor?: (props: {
|
|
66
|
+
content: string;
|
|
67
|
+
onChange: (content: string) => void;
|
|
68
|
+
placeholder: string;
|
|
69
|
+
}) => React.ReactNode;
|
|
70
|
+
renderViewer?: (props: {
|
|
71
|
+
content: string;
|
|
72
|
+
className?: string;
|
|
73
|
+
}) => React.ReactNode;
|
|
74
|
+
/** Optional priority indicator component */
|
|
75
|
+
renderPriorityIndicator?: (props: {
|
|
76
|
+
priority: string;
|
|
77
|
+
}) => React.ReactNode;
|
|
78
|
+
/** Optional date picker component */
|
|
79
|
+
renderDatePicker?: (props: {
|
|
80
|
+
value: Date | null;
|
|
81
|
+
onChange: (date: Date | null) => void;
|
|
82
|
+
placeholder: string;
|
|
83
|
+
className?: string;
|
|
84
|
+
}) => React.ReactNode;
|
|
85
|
+
isUploading?: boolean;
|
|
86
|
+
}
|
|
87
|
+
declare function TaskDetailPanel({ task, loading, open, onOpenChange, columns, members, activities, enrichedComments, clientMode, clientEditableFields, onTitleUpdate, onPropertyUpdate, onAssign, onUnassign, onCreateSubtask, onToggleSubtask, onRequestReview, onUpdateReviewStatus, onPostComment, onUploadFile, onDeleteFile, onTabChange, renderEditor, renderViewer, renderPriorityIndicator, renderDatePicker, isUploading, }: TaskDetailPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
88
|
+
declare namespace TaskDetailPanel {
|
|
89
|
+
var displayName: string;
|
|
90
|
+
}
|
|
91
|
+
export { TaskDetailPanel };
|
|
92
|
+
export type { TaskDetailPanelProps };
|
|
93
|
+
//# sourceMappingURL=task-detail-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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"}
|