@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,184 @@
|
|
|
1
|
+
import { jsx as r, jsxs as a } from "react/jsx-runtime";
|
|
2
|
+
import * as p from "react";
|
|
3
|
+
import { cn as d } from "@devalok/shilp-sutra/ui";
|
|
4
|
+
import { EmptyState as m } from "@devalok/shilp-sutra/composed";
|
|
5
|
+
import { IconActivity as l, IconCalendarEvent as f, IconTag as x, IconFlag as h, IconEye as y, IconCircleCheck as b, IconGitPullRequest as w, IconPaperclip as v, IconMessage as k, IconUserMinus as N, IconUserPlus as D, IconArrowRight as C, IconEdit as I, IconPlus as A } from "@tabler/icons-react";
|
|
6
|
+
const T = {
|
|
7
|
+
"task.created": {
|
|
8
|
+
icon: A,
|
|
9
|
+
color: "text-success-text",
|
|
10
|
+
dotColor: "bg-success",
|
|
11
|
+
getDescription: () => "created this task"
|
|
12
|
+
},
|
|
13
|
+
"task.updated": {
|
|
14
|
+
icon: I,
|
|
15
|
+
color: "text-category-slate-text",
|
|
16
|
+
dotColor: "bg-category-slate",
|
|
17
|
+
getDescription: (e) => {
|
|
18
|
+
const t = e.metadata;
|
|
19
|
+
return (t == null ? void 0 : t.field) === "title" ? "updated the title" : (t == null ? void 0 : t.field) === "description" ? "updated the description" : (t == null ? void 0 : t.field) === "priority" ? `changed priority to ${(t == null ? void 0 : t.newValue) || "unknown"}` : (t == null ? void 0 : t.field) === "dueDate" ? "updated the due date" : (t == null ? void 0 : t.field) === "labels" ? "updated labels" : "updated this task";
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"task.moved": {
|
|
23
|
+
icon: C,
|
|
24
|
+
color: "text-warning-text",
|
|
25
|
+
dotColor: "bg-warning",
|
|
26
|
+
getDescription: (e) => {
|
|
27
|
+
const t = e.metadata, c = (t == null ? void 0 : t.fromColumn) || "unknown", n = (t == null ? void 0 : t.toColumn) || "unknown";
|
|
28
|
+
return `moved from ${c} to ${n}`;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"task.assigned": {
|
|
32
|
+
icon: D,
|
|
33
|
+
color: "text-category-cyan-text",
|
|
34
|
+
dotColor: "bg-category-cyan",
|
|
35
|
+
getDescription: (e) => {
|
|
36
|
+
const t = e.metadata;
|
|
37
|
+
return `assigned ${(t == null ? void 0 : t.assigneeName) || "a user"}`;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"task.unassigned": {
|
|
41
|
+
icon: N,
|
|
42
|
+
color: "text-text-secondary",
|
|
43
|
+
dotColor: "bg-icon-disabled",
|
|
44
|
+
getDescription: (e) => {
|
|
45
|
+
const t = e.metadata;
|
|
46
|
+
return `removed ${(t == null ? void 0 : t.assigneeName) || "a user"}`;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"task.commented": {
|
|
50
|
+
icon: k,
|
|
51
|
+
color: "text-interactive",
|
|
52
|
+
dotColor: "bg-interactive",
|
|
53
|
+
getDescription: () => "added a comment"
|
|
54
|
+
},
|
|
55
|
+
"task.file_uploaded": {
|
|
56
|
+
icon: v,
|
|
57
|
+
color: "text-category-indigo-text",
|
|
58
|
+
dotColor: "bg-category-indigo",
|
|
59
|
+
getDescription: (e) => {
|
|
60
|
+
const t = e.metadata;
|
|
61
|
+
return `uploaded ${(t == null ? void 0 : t.fileName) || "a file"}`;
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"task.review_requested": {
|
|
65
|
+
icon: w,
|
|
66
|
+
color: "text-warning-text",
|
|
67
|
+
dotColor: "bg-warning",
|
|
68
|
+
getDescription: (e) => {
|
|
69
|
+
const t = e.metadata;
|
|
70
|
+
return `requested review from ${(t == null ? void 0 : t.reviewerName) || "a reviewer"}`;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"task.review_completed": {
|
|
74
|
+
icon: b,
|
|
75
|
+
color: "text-success-text",
|
|
76
|
+
dotColor: "bg-success",
|
|
77
|
+
getDescription: (e) => {
|
|
78
|
+
const t = e.metadata;
|
|
79
|
+
return `${(t == null ? void 0 : t.status) || "reviewed"} the task`;
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"task.visibility_changed": {
|
|
83
|
+
icon: y,
|
|
84
|
+
color: "text-text-tertiary",
|
|
85
|
+
dotColor: "bg-icon-secondary",
|
|
86
|
+
getDescription: (e) => {
|
|
87
|
+
const t = e.metadata;
|
|
88
|
+
return `changed visibility to ${(t == null ? void 0 : t.visibility) || "unknown"}`;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"task.priority_changed": {
|
|
92
|
+
icon: h,
|
|
93
|
+
color: "text-error-text",
|
|
94
|
+
dotColor: "bg-error",
|
|
95
|
+
getDescription: (e) => {
|
|
96
|
+
const t = e.metadata;
|
|
97
|
+
return `changed priority to ${(t == null ? void 0 : t.priority) || "unknown"}`;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"task.labels_changed": {
|
|
101
|
+
icon: x,
|
|
102
|
+
color: "text-category-amber-text",
|
|
103
|
+
dotColor: "bg-category-amber",
|
|
104
|
+
getDescription: () => "updated labels"
|
|
105
|
+
},
|
|
106
|
+
"task.due_date_changed": {
|
|
107
|
+
icon: f,
|
|
108
|
+
color: "text-warning-text",
|
|
109
|
+
dotColor: "bg-warning",
|
|
110
|
+
getDescription: (e) => {
|
|
111
|
+
const t = e.metadata;
|
|
112
|
+
return t != null && t.dueDate ? `set due date to ${t.dueDate}` : "updated the due date";
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}, $ = {
|
|
116
|
+
icon: l,
|
|
117
|
+
color: "text-text-placeholder",
|
|
118
|
+
dotColor: "bg-icon-disabled",
|
|
119
|
+
getDescription: (e) => e.action
|
|
120
|
+
};
|
|
121
|
+
function _(e) {
|
|
122
|
+
const t = new Date(e), n = (/* @__PURE__ */ new Date()).getTime() - t.getTime(), o = Math.floor(n / 6e4), i = Math.floor(o / 60), s = Math.floor(i / 24);
|
|
123
|
+
return o < 1 ? "Just now" : o < 60 ? `${o}m ago` : i < 24 ? `${i}h ago` : s < 7 ? `${s}d ago` : t.toLocaleDateString("en-IN", {
|
|
124
|
+
month: "short",
|
|
125
|
+
day: "numeric",
|
|
126
|
+
hour: "numeric",
|
|
127
|
+
minute: "2-digit"
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function M(e) {
|
|
131
|
+
const t = e.metadata;
|
|
132
|
+
return t != null && t.actorName ? t.actorName : e.actorType === "SYSTEM" ? "System" : e.actorType === "AGENT" ? "AI Agent" : "Someone";
|
|
133
|
+
}
|
|
134
|
+
const E = p.forwardRef(
|
|
135
|
+
function({ activities: t, className: c }, n) {
|
|
136
|
+
return t.length === 0 ? /* @__PURE__ */ r(
|
|
137
|
+
m,
|
|
138
|
+
{
|
|
139
|
+
ref: n,
|
|
140
|
+
icon: l,
|
|
141
|
+
title: "No activity yet",
|
|
142
|
+
description: "Actions on this task will appear here",
|
|
143
|
+
compact: !0,
|
|
144
|
+
className: c
|
|
145
|
+
}
|
|
146
|
+
) : /* @__PURE__ */ a("div", { ref: n, className: d("relative", c), children: [
|
|
147
|
+
/* @__PURE__ */ r("div", { className: "absolute left-[11px] top-2 bottom-2 w-px bg-border" }),
|
|
148
|
+
/* @__PURE__ */ r("div", { className: "space-y-ds-05", children: t.map((o) => {
|
|
149
|
+
const i = T[o.action] || $, s = i.icon, u = M(o), g = i.getDescription(o);
|
|
150
|
+
return /* @__PURE__ */ a("div", { className: "relative flex gap-ds-04 pl-0", children: [
|
|
151
|
+
/* @__PURE__ */ r("div", { className: "relative z-raised flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-ds-full bg-layer-01", children: /* @__PURE__ */ r(
|
|
152
|
+
"div",
|
|
153
|
+
{
|
|
154
|
+
className: d(
|
|
155
|
+
"flex h-ico-md w-ico-md items-center justify-center rounded-ds-full bg-layer-02"
|
|
156
|
+
),
|
|
157
|
+
children: /* @__PURE__ */ r(
|
|
158
|
+
s,
|
|
159
|
+
{
|
|
160
|
+
className: d("h-3 w-3", i.color),
|
|
161
|
+
stroke: 2
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
) }),
|
|
166
|
+
/* @__PURE__ */ a("div", { className: "flex-1 min-w-0 pt-ds-01", children: [
|
|
167
|
+
/* @__PURE__ */ a("p", { className: "text-ds-sm", children: [
|
|
168
|
+
/* @__PURE__ */ r("span", { className: "font-medium text-text-primary", children: u }),
|
|
169
|
+
/* @__PURE__ */ a("span", { className: "text-text-tertiary", children: [
|
|
170
|
+
" ",
|
|
171
|
+
g
|
|
172
|
+
] })
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ r("p", { className: "mt-ds-01 text-ds-xs text-text-placeholder", children: _(o.timestamp) })
|
|
175
|
+
] })
|
|
176
|
+
] }, o.id);
|
|
177
|
+
}) })
|
|
178
|
+
] });
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
E.displayName = "ActivityTab";
|
|
182
|
+
export {
|
|
183
|
+
E as ActivityTab
|
|
184
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface CommentAuthor {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
email?: string;
|
|
6
|
+
image?: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface Comment {
|
|
9
|
+
id: string;
|
|
10
|
+
taskId: string;
|
|
11
|
+
authorType: 'INTERNAL' | 'CLIENT';
|
|
12
|
+
authorId: string;
|
|
13
|
+
content: string;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
internalAuthor?: CommentAuthor | null;
|
|
17
|
+
clientAuthor?: {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
email: string;
|
|
21
|
+
} | null;
|
|
22
|
+
}
|
|
23
|
+
interface ConversationTabProps {
|
|
24
|
+
comments: Comment[];
|
|
25
|
+
taskVisibility: 'INTERNAL' | 'EVERYONE';
|
|
26
|
+
onPostComment: (content: string, authorType: 'INTERNAL' | 'CLIENT') => void;
|
|
27
|
+
className?: string;
|
|
28
|
+
/** When true, the viewer is a client -- adjusts warnings, labels, and author type */
|
|
29
|
+
clientMode?: boolean;
|
|
30
|
+
/** Optional rich text editor component. Falls back to plain textarea. */
|
|
31
|
+
renderEditor?: (props: {
|
|
32
|
+
content: string;
|
|
33
|
+
onChange: (content: string) => void;
|
|
34
|
+
placeholder: string;
|
|
35
|
+
}) => React.ReactNode;
|
|
36
|
+
/** Optional rich text viewer component. Falls back to plain text display. */
|
|
37
|
+
renderViewer?: (props: {
|
|
38
|
+
content: string;
|
|
39
|
+
className?: string;
|
|
40
|
+
}) => React.ReactNode;
|
|
41
|
+
}
|
|
42
|
+
declare const ConversationTab: React.ForwardRefExoticComponent<ConversationTabProps & React.RefAttributes<HTMLDivElement>>;
|
|
43
|
+
export { ConversationTab };
|
|
44
|
+
export type { ConversationTabProps };
|
|
45
|
+
//# sourceMappingURL=conversation-tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-tab.d.ts","sourceRoot":"","sources":["../../src/tasks/conversation-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAA;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACrC,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAClE;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,cAAc,EAAE,UAAU,GAAG,UAAU,CAAA;IACvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,QAAQ,KAAK,IAAI,CAAA;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,yEAAyE;IACzE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QACrB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QACnC,WAAW,EAAE,MAAM,CAAA;KACpB,KAAK,KAAK,CAAC,SAAS,CAAA;IACrB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;CACnF;AAuDD,QAAA,MAAM,eAAe,6FAqJpB,CAAA;AAID,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,YAAY,EAAE,oBAAoB,EAAE,CAAA"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { jsxs as a, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import * as m from "react";
|
|
3
|
+
import { cn as g } from "@devalok/shilp-sutra/ui";
|
|
4
|
+
import { Avatar as y, AvatarImage as v, AvatarFallback as w } from "@devalok/shilp-sutra/ui";
|
|
5
|
+
import { EmptyState as T } from "@devalok/shilp-sutra/composed";
|
|
6
|
+
import { IconMessageCircle as C, IconSend as A } from "@tabler/icons-react";
|
|
7
|
+
import { getInitials as I } from "@devalok/shilp-sutra/composed";
|
|
8
|
+
function E(e) {
|
|
9
|
+
const n = new Date(e), u = (/* @__PURE__ */ new Date()).getTime() - n.getTime(), o = Math.floor(u / 6e4), s = Math.floor(o / 60), l = Math.floor(s / 24);
|
|
10
|
+
return o < 1 ? "Just now" : o < 60 ? `${o}m ago` : s < 24 ? `${s}h ago` : l < 7 ? `${l}d ago` : n.toLocaleDateString("en-IN", {
|
|
11
|
+
month: "short",
|
|
12
|
+
day: "numeric",
|
|
13
|
+
hour: "numeric",
|
|
14
|
+
minute: "2-digit"
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function k(e) {
|
|
18
|
+
return e.authorType === "INTERNAL" && e.internalAuthor ? e.internalAuthor : e.authorType === "CLIENT" && e.clientAuthor ? {
|
|
19
|
+
id: e.clientAuthor.id,
|
|
20
|
+
name: e.clientAuthor.name,
|
|
21
|
+
email: e.clientAuthor.email,
|
|
22
|
+
image: null
|
|
23
|
+
} : { id: e.authorId, name: "Unknown", image: null };
|
|
24
|
+
}
|
|
25
|
+
function R(e) {
|
|
26
|
+
return e.replace(/<[^>]*>/g, "");
|
|
27
|
+
}
|
|
28
|
+
const L = m.forwardRef(
|
|
29
|
+
function({
|
|
30
|
+
comments: n,
|
|
31
|
+
taskVisibility: x,
|
|
32
|
+
onPostComment: u,
|
|
33
|
+
className: o,
|
|
34
|
+
clientMode: s = !1,
|
|
35
|
+
renderEditor: l,
|
|
36
|
+
renderViewer: h
|
|
37
|
+
}, b) {
|
|
38
|
+
const [d, p] = m.useState(""), c = m.useRef(null), N = () => {
|
|
39
|
+
const r = d.trim();
|
|
40
|
+
r.replace(/<[^>]*>/g, "").trim() && (u(r, s ? "CLIENT" : "INTERNAL"), p(""));
|
|
41
|
+
};
|
|
42
|
+
return m.useEffect(() => {
|
|
43
|
+
c.current && (c.current.scrollTop = c.current.scrollHeight);
|
|
44
|
+
}, [n.length]), /* @__PURE__ */ a("div", { ref: b, className: g("flex flex-col", o), children: [
|
|
45
|
+
n.length > 0 ? /* @__PURE__ */ t(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
ref: c,
|
|
49
|
+
className: "flex-1 space-y-ds-05 overflow-y-auto",
|
|
50
|
+
children: n.map((r) => {
|
|
51
|
+
const i = k(r), f = r.authorType === "CLIENT";
|
|
52
|
+
return /* @__PURE__ */ a("div", { className: "flex gap-ds-03", children: [
|
|
53
|
+
/* @__PURE__ */ a(y, { className: "h-ds-xs-plus w-ds-xs-plus shrink-0 mt-ds-01", children: [
|
|
54
|
+
i.image && /* @__PURE__ */ t(v, { src: i.image, alt: i.name }),
|
|
55
|
+
/* @__PURE__ */ t(
|
|
56
|
+
w,
|
|
57
|
+
{
|
|
58
|
+
className: g(
|
|
59
|
+
"text-ds-xs font-semibold",
|
|
60
|
+
/* avatar initials — below scale, leave as-is */
|
|
61
|
+
f ? "bg-warning-surface text-text-warning" : "bg-layer-03 text-text-on-color"
|
|
62
|
+
),
|
|
63
|
+
children: I(i.name)
|
|
64
|
+
}
|
|
65
|
+
)
|
|
66
|
+
] }),
|
|
67
|
+
/* @__PURE__ */ a("div", { className: "flex-1 min-w-0", children: [
|
|
68
|
+
/* @__PURE__ */ a("div", { className: "flex items-baseline gap-ds-03", children: [
|
|
69
|
+
/* @__PURE__ */ t("span", { className: "text-ds-md font-medium text-text-primary", children: i.name }),
|
|
70
|
+
s ? !f && /* @__PURE__ */ t("span", { className: "rounded bg-layer-03 px-ds-02 py-px text-ds-xs font-semibold uppercase tracking-wider text-text-on-color", children: "Team" }) : f && /* @__PURE__ */ t("span", { className: "rounded bg-warning-surface px-ds-02 py-px text-ds-xs font-semibold uppercase tracking-wider text-text-warning", children: "Client" }),
|
|
71
|
+
/* @__PURE__ */ t("span", { className: "text-ds-sm text-text-placeholder", children: E(r.createdAt) })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ t("div", { className: "mt-ds-02", children: h ? h({
|
|
74
|
+
content: r.content,
|
|
75
|
+
className: "[&_.ProseMirror]:!min-h-0 [&_.ProseMirror]:!p-0"
|
|
76
|
+
}) : /* @__PURE__ */ t("p", { className: "text-ds-md text-text-secondary whitespace-pre-wrap", children: R(r.content) }) })
|
|
77
|
+
] })
|
|
78
|
+
] }, r.id);
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
) : /* @__PURE__ */ t(
|
|
82
|
+
T,
|
|
83
|
+
{
|
|
84
|
+
icon: C,
|
|
85
|
+
title: "No comments yet",
|
|
86
|
+
description: "Start a conversation about this task",
|
|
87
|
+
compact: !0
|
|
88
|
+
}
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ a("div", { className: "mt-ds-05 space-y-ds-03", children: [
|
|
91
|
+
x === "EVERYONE" && !s && /* @__PURE__ */ t("p", { className: "text-ds-xs text-text-warning", children: "This task is visible to clients. Comments may be seen by external users." }),
|
|
92
|
+
l ? l({
|
|
93
|
+
content: d,
|
|
94
|
+
onChange: p,
|
|
95
|
+
placeholder: "Write a comment..."
|
|
96
|
+
}) : /* @__PURE__ */ t(
|
|
97
|
+
"textarea",
|
|
98
|
+
{
|
|
99
|
+
value: d,
|
|
100
|
+
onChange: (r) => p(r.target.value),
|
|
101
|
+
placeholder: "Write a comment...",
|
|
102
|
+
rows: 3,
|
|
103
|
+
className: "w-full resize-none rounded-ds-md border border-border bg-transparent px-ds-04 py-ds-03 text-ds-md text-text-primary placeholder:text-text-placeholder outline-none focus:border-border-subtle"
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ t("div", { className: "flex justify-end", children: /* @__PURE__ */ a(
|
|
107
|
+
"button",
|
|
108
|
+
{
|
|
109
|
+
type: "button",
|
|
110
|
+
onClick: N,
|
|
111
|
+
disabled: !d.replace(/<[^>]*>/g, "").trim(),
|
|
112
|
+
className: "inline-flex items-center gap-ds-02b rounded-ds-lg bg-interactive px-ds-04 py-ds-02b text-ds-sm font-semibold text-text-on-color transition-colors hover:bg-interactive-hover disabled:opacity-[0.38] disabled:cursor-not-allowed",
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ t(A, { className: "h-ico-sm w-ico-sm", stroke: 2 }),
|
|
115
|
+
"Comment"
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
) })
|
|
119
|
+
] })
|
|
120
|
+
] });
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
L.displayName = "ConversationTab";
|
|
124
|
+
export {
|
|
125
|
+
L as ConversationTab
|
|
126
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface TaskFile {
|
|
3
|
+
id: string;
|
|
4
|
+
taskId: string;
|
|
5
|
+
title: string;
|
|
6
|
+
fileUrl: string;
|
|
7
|
+
downloadUrl?: string;
|
|
8
|
+
fileType: string | null;
|
|
9
|
+
uploadedBy: {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
image: string | null;
|
|
13
|
+
};
|
|
14
|
+
createdAt: string;
|
|
15
|
+
}
|
|
16
|
+
interface FilesTabProps {
|
|
17
|
+
files: TaskFile[];
|
|
18
|
+
onUpload: (file: File, title?: string) => void;
|
|
19
|
+
onDelete: (fileId: string) => void;
|
|
20
|
+
isUploading?: boolean;
|
|
21
|
+
className?: string;
|
|
22
|
+
/** When true, hide upload/delete controls (client view) */
|
|
23
|
+
readOnly?: boolean;
|
|
24
|
+
}
|
|
25
|
+
declare const FilesTab: React.ForwardRefExoticComponent<FilesTabProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
export { FilesTab };
|
|
27
|
+
export type { FilesTabProps };
|
|
28
|
+
//# sourceMappingURL=files-tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files-tab.d.ts","sourceRoot":"","sources":["../../src/tasks/files-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA+B9B,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACrB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAkCD,QAAA,MAAM,QAAQ,sFA2Lb,CAAA;AAID,OAAO,EAAE,QAAQ,EAAE,CAAA;AACnB,YAAY,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { jsxs as r, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import * as d from "react";
|
|
3
|
+
import { cn as h } from "@devalok/shilp-sutra/ui";
|
|
4
|
+
import { Dialog as I, DialogTrigger as C, DialogContent as j, DialogHeader as T, DialogTitle as k, DialogDescription as z, DialogFooter as L, DialogClose as u } from "@devalok/shilp-sutra/ui";
|
|
5
|
+
import { Button as f } from "@devalok/shilp-sutra/ui";
|
|
6
|
+
import { EmptyState as R } from "@devalok/shilp-sutra/composed";
|
|
7
|
+
import { IconUpload as S, IconDownload as O, IconTrash as U, IconPaperclip as B, IconFile as x, IconPhoto as P, IconFileText as A, IconFileCode as E, IconFileSpreadsheet as H, IconFileZip as Z } from "@tabler/icons-react";
|
|
8
|
+
function _(i) {
|
|
9
|
+
if (!i) return x;
|
|
10
|
+
const s = i.toLowerCase();
|
|
11
|
+
return ["jpg", "jpeg", "png", "gif", "svg", "webp", "bmp"].includes(s) ? P : ["pdf", "doc", "docx", "txt", "rtf"].includes(s) ? A : ["js", "ts", "jsx", "tsx", "py", "rb", "go", "rs", "html", "css", "json"].includes(s) ? E : ["xls", "xlsx", "csv"].includes(s) ? H : ["zip", "tar", "gz", "rar", "7z"].includes(s) ? Z : x;
|
|
12
|
+
}
|
|
13
|
+
function q(i) {
|
|
14
|
+
return new Date(i).toLocaleDateString("en-IN", {
|
|
15
|
+
month: "short",
|
|
16
|
+
day: "numeric",
|
|
17
|
+
year: "numeric"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const G = d.forwardRef(
|
|
21
|
+
function({
|
|
22
|
+
files: s,
|
|
23
|
+
onUpload: c,
|
|
24
|
+
onDelete: g,
|
|
25
|
+
isUploading: m = !1,
|
|
26
|
+
className: v,
|
|
27
|
+
readOnly: p = !1
|
|
28
|
+
}, y) {
|
|
29
|
+
const a = d.useRef(null), [b, o] = d.useState(!1), D = (t) => {
|
|
30
|
+
var l;
|
|
31
|
+
const n = (l = t.target.files) == null ? void 0 : l[0];
|
|
32
|
+
n && c(n), a.current && (a.current.value = "");
|
|
33
|
+
}, N = (t) => {
|
|
34
|
+
var l;
|
|
35
|
+
t.preventDefault(), o(!1);
|
|
36
|
+
const n = (l = t.dataTransfer.files) == null ? void 0 : l[0];
|
|
37
|
+
n && c(n);
|
|
38
|
+
}, w = (t) => {
|
|
39
|
+
t.preventDefault(), o(!0);
|
|
40
|
+
}, F = () => {
|
|
41
|
+
o(!1);
|
|
42
|
+
};
|
|
43
|
+
return /* @__PURE__ */ r("div", { ref: y, className: h("flex flex-col", v), children: [
|
|
44
|
+
!p && /* @__PURE__ */ r(
|
|
45
|
+
"div",
|
|
46
|
+
{
|
|
47
|
+
role: "region",
|
|
48
|
+
"aria-label": "File upload drop zone",
|
|
49
|
+
onDrop: N,
|
|
50
|
+
onDragOver: w,
|
|
51
|
+
onDragLeave: F,
|
|
52
|
+
className: h(
|
|
53
|
+
"rounded-ds-lg border-2 border-dashed transition-colors",
|
|
54
|
+
b ? "border-interactive bg-interactive/5" : "border-border"
|
|
55
|
+
),
|
|
56
|
+
children: [
|
|
57
|
+
/* @__PURE__ */ r("div", { className: "flex flex-col items-center gap-ds-03 py-ds-06", children: [
|
|
58
|
+
/* @__PURE__ */ e("div", { className: "flex h-ds-sm-plus w-ds-sm-plus items-center justify-center rounded-ds-lg bg-layer-02", children: /* @__PURE__ */ e(
|
|
59
|
+
S,
|
|
60
|
+
{
|
|
61
|
+
className: "h-ico-sm w-ico-sm text-text-placeholder",
|
|
62
|
+
stroke: 1.5
|
|
63
|
+
}
|
|
64
|
+
) }),
|
|
65
|
+
/* @__PURE__ */ r("div", { className: "text-center", children: [
|
|
66
|
+
/* @__PURE__ */ e(
|
|
67
|
+
"button",
|
|
68
|
+
{
|
|
69
|
+
type: "button",
|
|
70
|
+
onClick: () => {
|
|
71
|
+
var t;
|
|
72
|
+
return (t = a.current) == null ? void 0 : t.click();
|
|
73
|
+
},
|
|
74
|
+
disabled: m,
|
|
75
|
+
className: "text-ds-md font-medium text-interactive transition-colors hover:underline disabled:opacity-[0.38]",
|
|
76
|
+
children: m ? "Uploading..." : "Click to upload"
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ r("span", { className: "text-ds-md text-text-placeholder", children: [
|
|
80
|
+
" ",
|
|
81
|
+
"or drag and drop"
|
|
82
|
+
] })
|
|
83
|
+
] })
|
|
84
|
+
] }),
|
|
85
|
+
/* @__PURE__ */ e(
|
|
86
|
+
"input",
|
|
87
|
+
{
|
|
88
|
+
ref: a,
|
|
89
|
+
type: "file",
|
|
90
|
+
onChange: D,
|
|
91
|
+
className: "hidden"
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
s.length > 0 ? /* @__PURE__ */ e("div", { className: "mt-ds-05 space-y-ds-02", children: s.map((t) => {
|
|
98
|
+
const n = _(t.fileType);
|
|
99
|
+
return /* @__PURE__ */ r(
|
|
100
|
+
"div",
|
|
101
|
+
{
|
|
102
|
+
className: "group flex items-center gap-ds-04 rounded-ds-lg px-ds-03 py-ds-03 transition-colors hover:bg-field",
|
|
103
|
+
children: [
|
|
104
|
+
/* @__PURE__ */ e("div", { className: "flex h-ds-sm w-ds-sm shrink-0 items-center justify-center rounded-ds-lg bg-layer-02", children: /* @__PURE__ */ e(
|
|
105
|
+
n,
|
|
106
|
+
{
|
|
107
|
+
className: "h-ico-sm w-ico-sm text-text-tertiary",
|
|
108
|
+
stroke: 1.5
|
|
109
|
+
}
|
|
110
|
+
) }),
|
|
111
|
+
/* @__PURE__ */ r("div", { className: "flex-1 min-w-0", children: [
|
|
112
|
+
/* @__PURE__ */ e("p", { className: "truncate text-ds-md font-medium text-text-primary", children: t.title }),
|
|
113
|
+
/* @__PURE__ */ r("p", { className: "text-ds-sm text-text-placeholder", children: [
|
|
114
|
+
q(t.createdAt),
|
|
115
|
+
/* @__PURE__ */ e("span", { className: "mx-ds-02b", children: "by" }),
|
|
116
|
+
t.uploadedBy.name
|
|
117
|
+
] })
|
|
118
|
+
] }),
|
|
119
|
+
/* @__PURE__ */ r("div", { className: "flex items-center gap-ds-02 opacity-0 transition-opacity group-hover:opacity-100", children: [
|
|
120
|
+
t.downloadUrl && /* @__PURE__ */ e(
|
|
121
|
+
"a",
|
|
122
|
+
{
|
|
123
|
+
href: t.downloadUrl,
|
|
124
|
+
target: "_blank",
|
|
125
|
+
rel: "noopener noreferrer",
|
|
126
|
+
className: "inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-ds-md transition-colors hover:bg-layer-02",
|
|
127
|
+
title: "Download",
|
|
128
|
+
children: /* @__PURE__ */ e(O, { className: "h-ico-sm w-ico-sm text-text-tertiary" })
|
|
129
|
+
}
|
|
130
|
+
),
|
|
131
|
+
!p && /* @__PURE__ */ r(I, { children: [
|
|
132
|
+
/* @__PURE__ */ e(C, { asChild: !0, children: /* @__PURE__ */ e(
|
|
133
|
+
"button",
|
|
134
|
+
{
|
|
135
|
+
type: "button",
|
|
136
|
+
className: "inline-flex h-ds-xs-plus w-ds-xs-plus items-center justify-center rounded-ds-md transition-colors hover:bg-error-surface",
|
|
137
|
+
title: "Delete",
|
|
138
|
+
children: /* @__PURE__ */ e(U, { className: "h-ico-sm w-ico-sm text-text-error" })
|
|
139
|
+
}
|
|
140
|
+
) }),
|
|
141
|
+
/* @__PURE__ */ r(j, { children: [
|
|
142
|
+
/* @__PURE__ */ r(T, { children: [
|
|
143
|
+
/* @__PURE__ */ e(k, { children: "Delete file?" }),
|
|
144
|
+
/* @__PURE__ */ r(z, { children: [
|
|
145
|
+
'"',
|
|
146
|
+
t.title,
|
|
147
|
+
'" will be permanently deleted. This cannot be undone.'
|
|
148
|
+
] })
|
|
149
|
+
] }),
|
|
150
|
+
/* @__PURE__ */ r(L, { children: [
|
|
151
|
+
/* @__PURE__ */ e(u, { asChild: !0, children: /* @__PURE__ */ e(f, { variant: "secondary", size: "sm", children: "Cancel" }) }),
|
|
152
|
+
/* @__PURE__ */ e(u, { asChild: !0, children: /* @__PURE__ */ e(
|
|
153
|
+
f,
|
|
154
|
+
{
|
|
155
|
+
variant: "error",
|
|
156
|
+
size: "sm",
|
|
157
|
+
onClick: () => g(t.id),
|
|
158
|
+
children: "Delete"
|
|
159
|
+
}
|
|
160
|
+
) })
|
|
161
|
+
] })
|
|
162
|
+
] })
|
|
163
|
+
] })
|
|
164
|
+
] })
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
t.id
|
|
168
|
+
);
|
|
169
|
+
}) }) : /* @__PURE__ */ e("div", { className: "mt-ds-03", children: /* @__PURE__ */ e(
|
|
170
|
+
R,
|
|
171
|
+
{
|
|
172
|
+
icon: B,
|
|
173
|
+
title: "No files attached",
|
|
174
|
+
description: "Upload files to share with your team",
|
|
175
|
+
compact: !0
|
|
176
|
+
}
|
|
177
|
+
) })
|
|
178
|
+
] });
|
|
179
|
+
}
|
|
180
|
+
);
|
|
181
|
+
G.displayName = "FilesTab";
|
|
182
|
+
export {
|
|
183
|
+
G as FilesTab
|
|
184
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { TaskDetailPanel, type TaskDetailPanelProps, type FullTask } from './task-detail-panel';
|
|
2
|
+
export { TaskProperties, type TaskPropertiesProps, type TaskData, type Member, type Column } from './task-properties';
|
|
3
|
+
export { ActivityTab, type ActivityTabProps, type AuditLogEntry } from './activity-tab';
|
|
4
|
+
export { ConversationTab, type ConversationTabProps, type Comment } from './conversation-tab';
|
|
5
|
+
export { FilesTab, type FilesTabProps, type TaskFile } from './files-tab';
|
|
6
|
+
export { ReviewTab, type ReviewTabProps, type ReviewRequest } from './review-tab';
|
|
7
|
+
export { SubtasksTab, type SubtasksTabProps, type Subtask } from './subtasks-tab';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tasks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrH,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACvF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC7F,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TaskDetailPanel as e } from "./task-detail-panel.js";
|
|
2
|
+
import { TaskProperties as a } from "./task-properties.js";
|
|
3
|
+
import { ActivityTab as f } from "./activity-tab.js";
|
|
4
|
+
import { ConversationTab as m } from "./conversation-tab.js";
|
|
5
|
+
import { FilesTab as x } from "./files-tab.js";
|
|
6
|
+
import { ReviewTab as b } from "./review-tab.js";
|
|
7
|
+
import { SubtasksTab as l } from "./subtasks-tab.js";
|
|
8
|
+
export {
|
|
9
|
+
f as ActivityTab,
|
|
10
|
+
m as ConversationTab,
|
|
11
|
+
x as FilesTab,
|
|
12
|
+
b as ReviewTab,
|
|
13
|
+
l as SubtasksTab,
|
|
14
|
+
e as TaskDetailPanel,
|
|
15
|
+
a as TaskProperties
|
|
16
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface ReviewUser {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
image: string | null;
|
|
6
|
+
}
|
|
7
|
+
export interface ReviewRequest {
|
|
8
|
+
id: string;
|
|
9
|
+
taskId: string;
|
|
10
|
+
status: 'PENDING' | 'APPROVED' | 'CHANGES_REQUESTED' | 'REJECTED';
|
|
11
|
+
feedback: string | null;
|
|
12
|
+
requestedBy: ReviewUser;
|
|
13
|
+
reviewer: ReviewUser;
|
|
14
|
+
createdAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
}
|
|
17
|
+
interface Member {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
image?: string | null;
|
|
21
|
+
}
|
|
22
|
+
interface ReviewTabProps {
|
|
23
|
+
reviews: ReviewRequest[];
|
|
24
|
+
members: Member[];
|
|
25
|
+
onRequestReview: (reviewerId: string) => void;
|
|
26
|
+
onUpdateStatus: (reviewId: string, status: ReviewRequest['status'], feedback?: string) => void;
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
declare const ReviewTab: React.ForwardRefExoticComponent<ReviewTabProps & React.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export { ReviewTab };
|
|
31
|
+
export type { ReviewTabProps };
|
|
32
|
+
//# sourceMappingURL=review-tab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-tab.d.ts","sourceRoot":"","sources":["../../src/tasks/review-tab.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAwB9B,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,mBAAmB,GAAG,UAAU,CAAA;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,EAAE,UAAU,CAAA;IACvB,QAAQ,EAAE,UAAU,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,UAAU,cAAc;IACtB,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,cAAc,EAAE,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,QAAQ,CAAC,EAAE,MAAM,KACd,IAAI,CAAA;IACT,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA6BD,QAAA,MAAM,SAAS,uFA8Kd,CAAA;AAID,OAAO,EAAE,SAAS,EAAE,CAAA;AACpB,YAAY,EAAE,cAAc,EAAE,CAAA"}
|