@devalok/shilp-sutra-karm 0.3.1 → 0.6.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/README.md +97 -6
- package/dist/admin/break/break-admin.js +2 -2
- package/dist/admin/break/delete-break.js +4 -4
- package/dist/admin/break/edit-break-balance.js +7 -7
- package/dist/admin/break/edit-break.js +2 -2
- package/dist/admin/dashboard/calendar.js +28 -28
- package/dist/admin/dashboard/dashboard-header.js +15 -15
- package/dist/client/project-card.js +10 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +93 -76
- package/dist/tasks/activity-tab.js +1 -1
- package/dist/tasks/conversation-tab.js +25 -25
- package/dist/tasks/files-tab.js +1 -1
- package/dist/tasks/review-tab.js +1 -1
- package/dist/tasks/subtasks-tab.js +1 -1
- package/dist/tasks/task-detail-panel.d.ts.map +1 -1
- package/dist/tasks/task-detail-panel.js +45 -44
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
# @devalok/shilp-sutra-karm
|
|
2
2
|
|
|
3
|
-
Domain components for project management --
|
|
3
|
+
Domain-specific UI components for project management applications -- kanban boards, task panels, AI chat, attendance dashboards, client portals, and admin tools.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@devalok/shilp-sutra-karm)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## When to use Karm vs Core
|
|
11
|
+
|
|
12
|
+
| Need | Package |
|
|
13
|
+
|------|---------|
|
|
14
|
+
| Generic UI primitives (Button, Dialog, Table, Badge, etc.) | `@devalok/shilp-sutra` (core) |
|
|
15
|
+
| Project management features (boards, tasks, chat, admin) | `@devalok/shilp-sutra-karm` |
|
|
16
|
+
|
|
17
|
+
Karm builds on top of core. It provides opinionated, domain-specific components that combine multiple core primitives into ready-to-use features for project management and team collaboration apps.
|
|
18
|
+
|
|
10
19
|
## Install
|
|
11
20
|
|
|
12
21
|
```bash
|
|
13
22
|
pnpm add @devalok/shilp-sutra-karm @devalok/shilp-sutra
|
|
14
23
|
```
|
|
15
24
|
|
|
16
|
-
**Note:** `@devalok/shilp-sutra >=0.3.0` is a required peer dependency.
|
|
17
|
-
|
|
18
25
|
## Peer Dependencies
|
|
19
26
|
|
|
20
27
|
| Package | Version | Required |
|
|
21
28
|
|---------|---------|----------|
|
|
22
|
-
| `@devalok/shilp-sutra` | `>=0.
|
|
29
|
+
| `@devalok/shilp-sutra` | `>=0.1.0` | Yes |
|
|
23
30
|
| `react` | `^18 \|\| ^19` | Yes |
|
|
24
31
|
| `react-dom` | `^18 \|\| ^19` | Yes |
|
|
25
32
|
|
|
@@ -32,15 +39,99 @@ import { KanbanBoard } from '@devalok/shilp-sutra-karm/board'
|
|
|
32
39
|
import { TaskDetailPanel } from '@devalok/shilp-sutra-karm/tasks'
|
|
33
40
|
import { ChatPanel } from '@devalok/shilp-sutra-karm/chat'
|
|
34
41
|
import { AttendanceCTA, DailyBrief } from '@devalok/shilp-sutra-karm/dashboard'
|
|
35
|
-
import {
|
|
42
|
+
import { ClientPortalHeader, ProjectCard } from '@devalok/shilp-sutra-karm/client'
|
|
36
43
|
import { AdminDashboard, BreakAdmin } from '@devalok/shilp-sutra-karm/admin'
|
|
37
44
|
```
|
|
38
45
|
|
|
46
|
+
## Component Inventory
|
|
47
|
+
|
|
48
|
+
### Board (`@devalok/shilp-sutra-karm/board`)
|
|
49
|
+
|
|
50
|
+
Drag-and-drop kanban board with sortable columns and task cards.
|
|
51
|
+
|
|
52
|
+
| Component | Description |
|
|
53
|
+
|-----------|-------------|
|
|
54
|
+
| `KanbanBoard` | Full kanban board with columns, drag-and-drop, and task management |
|
|
55
|
+
| `BoardColumn` | Single sortable column with task list and add-task action |
|
|
56
|
+
| `TaskCard` | Draggable task card with priority, labels, assignees, and due date |
|
|
57
|
+
|
|
58
|
+
### Tasks (`@devalok/shilp-sutra-karm/tasks`)
|
|
59
|
+
|
|
60
|
+
Task detail panel with tabbed content (conversation, files, subtasks, reviews, activity).
|
|
61
|
+
|
|
62
|
+
| Component | Description |
|
|
63
|
+
|-----------|-------------|
|
|
64
|
+
| `TaskDetailPanel` | Sheet-based task detail view with all tabs |
|
|
65
|
+
| `TaskProperties` | Editable task metadata (status, priority, assignees, dates) |
|
|
66
|
+
| `ConversationTab` | Threaded comments on a task |
|
|
67
|
+
| `FilesTab` | File attachments with upload and delete |
|
|
68
|
+
| `SubtasksTab` | Nested subtask list with create and status toggle |
|
|
69
|
+
| `ReviewTab` | Review request and approval workflow |
|
|
70
|
+
| `ActivityTab` | Audit log of task changes |
|
|
71
|
+
|
|
72
|
+
### Chat (`@devalok/shilp-sutra-karm/chat`)
|
|
73
|
+
|
|
74
|
+
AI-powered chat panel with streaming support and conversation history.
|
|
75
|
+
|
|
76
|
+
| Component | Description |
|
|
77
|
+
|-----------|-------------|
|
|
78
|
+
| `ChatPanel` | Full chat interface with conversation list and message area |
|
|
79
|
+
| `ChatInput` | Message input with agent selector and submit |
|
|
80
|
+
| `MessageList` | Scrollable message thread with markdown rendering |
|
|
81
|
+
| `ConversationList` | Sidebar list of past conversations |
|
|
82
|
+
| `StreamingText` | Animated streaming text display for AI responses |
|
|
83
|
+
|
|
84
|
+
### Dashboard (`@devalok/shilp-sutra-karm/dashboard`)
|
|
85
|
+
|
|
86
|
+
Employee-facing attendance and daily brief widgets.
|
|
87
|
+
|
|
88
|
+
| Component | Description |
|
|
89
|
+
|-----------|-------------|
|
|
90
|
+
| `AttendanceCTA` | Attendance marking card with status display |
|
|
91
|
+
| `DailyBrief` | Daily summary card with tasks, meetings, and announcements |
|
|
92
|
+
|
|
93
|
+
### Client (`@devalok/shilp-sutra-karm/client`)
|
|
94
|
+
|
|
95
|
+
Client portal components with brand accent theming.
|
|
96
|
+
|
|
97
|
+
| Component | Description |
|
|
98
|
+
|-----------|-------------|
|
|
99
|
+
| `ClientPortalHeader` | Portal header with org branding and user menu |
|
|
100
|
+
| `ProjectCard` | Project summary card for client-facing views |
|
|
101
|
+
| `AccentProvider` | CSS custom property provider for client brand colors |
|
|
102
|
+
|
|
103
|
+
### Admin (`@devalok/shilp-sutra-karm/admin`)
|
|
104
|
+
|
|
105
|
+
Admin dashboard, break/leave management, attendance tracking, and adjustments.
|
|
106
|
+
|
|
107
|
+
| Component | Description |
|
|
108
|
+
|-----------|-------------|
|
|
109
|
+
| `AdminDashboard` | Compound admin view with attendance overview, calendar, and associate detail |
|
|
110
|
+
| `BreakAdmin` | Compound break management panel (header, balance, breaks list, requests) |
|
|
111
|
+
| `BreakAdminHeader` | Filter bar for break admin |
|
|
112
|
+
| `BreakBalance` | Break balance summary table with edit |
|
|
113
|
+
| `Breaks` | Break list with edit and delete actions |
|
|
114
|
+
| `EditBreak` | Break edit dialog |
|
|
115
|
+
| `DeleteBreak` | Break delete confirmation dialog |
|
|
116
|
+
| `EditBreakBalance` | Balance adjustment dialog |
|
|
117
|
+
| `LeaveRequest` | Individual leave request card with approve/reject |
|
|
118
|
+
| `LeaveRequests` | Pending leave requests list |
|
|
119
|
+
| `AttendanceOverview` | Team attendance summary cards |
|
|
120
|
+
| `AssociateDetail` | Individual associate detail with attendance, tasks, and breaks |
|
|
121
|
+
| `DashboardHeader` | Admin dashboard header with date and user selector |
|
|
122
|
+
| `Calendar` | Monthly attendance calendar with day status |
|
|
123
|
+
| `CorrectionList` | Attendance correction requests list |
|
|
124
|
+
| `RenderDate` | Date display utility component |
|
|
125
|
+
| `ApprovedAdjustments` | Approved break adjustment history table |
|
|
126
|
+
| `BreakAdminSkeleton` | Loading skeleton for BreakAdmin |
|
|
127
|
+
| `DashboardSkeleton` | Loading skeleton for AdminDashboard |
|
|
128
|
+
| `renderAdjustmentType` | Utility to render adjustment type labels |
|
|
129
|
+
|
|
39
130
|
## Sub-path Exports
|
|
40
131
|
|
|
41
132
|
| Import path | Contents |
|
|
42
133
|
|-------------|----------|
|
|
43
|
-
| `@devalok/shilp-sutra-karm` | All domain components |
|
|
134
|
+
| `@devalok/shilp-sutra-karm` | All domain components (barrel) |
|
|
44
135
|
| `@devalok/shilp-sutra-karm/board` | Kanban board with drag-and-drop |
|
|
45
136
|
| `@devalok/shilp-sutra-karm/tasks` | Task detail panel, properties, tabs |
|
|
46
137
|
| `@devalok/shilp-sutra-karm/chat` | AI chat panel, message list, streaming |
|
|
@@ -84,7 +84,7 @@ const L = B.forwardRef(
|
|
|
84
84
|
] }),
|
|
85
85
|
/* @__PURE__ */ e("span", { className: "text-success-text", children: "approved successfully" })
|
|
86
86
|
] }),
|
|
87
|
-
color: "
|
|
87
|
+
color: "neutral",
|
|
88
88
|
style: { marginBottom: "var(--spacing-04)", border: "none" }
|
|
89
89
|
});
|
|
90
90
|
} catch (r) {
|
|
@@ -119,7 +119,7 @@ const L = B.forwardRef(
|
|
|
119
119
|
] }),
|
|
120
120
|
/* @__PURE__ */ e("span", { className: "text-error-text", children: "rejected" })
|
|
121
121
|
] }),
|
|
122
|
-
color: "
|
|
122
|
+
color: "neutral",
|
|
123
123
|
style: { marginBottom: "var(--spacing-04)", border: "none" }
|
|
124
124
|
});
|
|
125
125
|
} catch (r) {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as r, jsx as t } from "react/jsx-runtime";
|
|
3
3
|
import * as u from "react";
|
|
4
|
-
import { useState as
|
|
4
|
+
import { useState as c, useRef as p } from "react";
|
|
5
5
|
import { useToast as x } from "@devalok/shilp-sutra/hooks";
|
|
6
6
|
import { Dialog as h, DialogTrigger as g, DialogContent as b } from "@devalok/shilp-sutra/ui";
|
|
7
7
|
import { Button as D } from "@devalok/shilp-sutra/ui";
|
|
8
8
|
import { IconButton as k } from "@devalok/shilp-sutra/ui";
|
|
9
9
|
import { IconTrash as w } from "@tabler/icons-react";
|
|
10
10
|
const y = u.forwardRef(function({ id: B, userId: v, onDelete: l }, I) {
|
|
11
|
-
const [
|
|
11
|
+
const [d, s] = c(!1), { toast: a } = x(), [m, o] = c(!1), i = p(null);
|
|
12
12
|
return /* @__PURE__ */ r(h, { open: m, onOpenChange: o, children: [
|
|
13
13
|
/* @__PURE__ */ t(g, { asChild: !0, children: /* @__PURE__ */ t(k, { icon: /* @__PURE__ */ t(w, {}), size: "md", "aria-label": "Delete break" }) }),
|
|
14
14
|
/* @__PURE__ */ r(b, { className: "flex w-[335px] flex-col items-center gap-ds-06 p-ds-06 max-md:w-[90%] max-md:rounded-ds-lg", children: [
|
|
@@ -22,7 +22,7 @@ const y = u.forwardRef(function({ id: B, userId: v, onDelete: l }, I) {
|
|
|
22
22
|
try {
|
|
23
23
|
l && l(), a({
|
|
24
24
|
description: "Break request deleted successfully",
|
|
25
|
-
color: "
|
|
25
|
+
color: "neutral"
|
|
26
26
|
}), o(!1);
|
|
27
27
|
} catch (f) {
|
|
28
28
|
console.error("Error deleting break request:", f), a({
|
|
@@ -42,7 +42,7 @@ const y = u.forwardRef(function({ id: B, userId: v, onDelete: l }, I) {
|
|
|
42
42
|
var e;
|
|
43
43
|
return (e = i.current) == null ? void 0 : e.requestSubmit();
|
|
44
44
|
},
|
|
45
|
-
disabled:
|
|
45
|
+
disabled: d,
|
|
46
46
|
children: "Yes, Delete"
|
|
47
47
|
}
|
|
48
48
|
) })
|
|
@@ -14,9 +14,9 @@ const I = y.forwardRef(function({
|
|
|
14
14
|
var e;
|
|
15
15
|
const [s, l] = o(!1), [c, u] = o(
|
|
16
16
|
typeof (r == null ? void 0 : r.cashout) == "number" ? r.cashout : 0
|
|
17
|
-
), [
|
|
17
|
+
), [m, h] = o(
|
|
18
18
|
(r == null ? void 0 : r.carryForward) || 0
|
|
19
|
-
),
|
|
19
|
+
), d = w(null), { toast: f } = N();
|
|
20
20
|
g(() => {
|
|
21
21
|
u(
|
|
22
22
|
typeof (r == null ? void 0 : r.cashout) == "number" ? r.cashout : 0
|
|
@@ -28,11 +28,11 @@ const I = y.forwardRef(function({
|
|
|
28
28
|
n && n({
|
|
29
29
|
userId: r.userId,
|
|
30
30
|
cashOutDays: c,
|
|
31
|
-
carryForward:
|
|
31
|
+
carryForward: m,
|
|
32
32
|
year: (/* @__PURE__ */ new Date()).getFullYear()
|
|
33
33
|
}), f({
|
|
34
34
|
description: "Break balance updated successfully",
|
|
35
|
-
color: "
|
|
35
|
+
color: "neutral"
|
|
36
36
|
});
|
|
37
37
|
} catch (x) {
|
|
38
38
|
console.error("Error updating break balance:", x), f({
|
|
@@ -65,7 +65,7 @@ const I = y.forwardRef(function({
|
|
|
65
65
|
/* @__PURE__ */ a(
|
|
66
66
|
"form",
|
|
67
67
|
{
|
|
68
|
-
ref:
|
|
68
|
+
ref: d,
|
|
69
69
|
onSubmit: b,
|
|
70
70
|
id: "updatebreakbalanceform",
|
|
71
71
|
className: "flex w-full flex-col gap-ds-05",
|
|
@@ -86,7 +86,7 @@ const I = y.forwardRef(function({
|
|
|
86
86
|
] }),
|
|
87
87
|
/* @__PURE__ */ a("div", { className: "flex w-full items-center justify-between", children: [
|
|
88
88
|
/* @__PURE__ */ t("div", { className: "text-ds-sm font-semibold uppercase tracking-wider text-text-placeholder", children: "Carry forward" }),
|
|
89
|
-
/* @__PURE__ */ t("div", { className: "flex w-[100px] items-center justify-center", children: /* @__PURE__ */ t("div", { className: "text-ds-base font-semibold text-text-secondary", children:
|
|
89
|
+
/* @__PURE__ */ t("div", { className: "flex w-[100px] items-center justify-center", children: /* @__PURE__ */ t("div", { className: "text-ds-base font-semibold text-text-secondary", children: m }) })
|
|
90
90
|
] }),
|
|
91
91
|
/* @__PURE__ */ t(
|
|
92
92
|
p,
|
|
@@ -95,7 +95,7 @@ const I = y.forwardRef(function({
|
|
|
95
95
|
fullWidth: !0,
|
|
96
96
|
onClick: () => {
|
|
97
97
|
var i;
|
|
98
|
-
return (i =
|
|
98
|
+
return (i = d.current) == null ? void 0 : i.requestSubmit();
|
|
99
99
|
},
|
|
100
100
|
disabled: s,
|
|
101
101
|
children: "Update"
|
|
@@ -81,7 +81,7 @@ const bt = X.forwardRef(function({
|
|
|
81
81
|
m({
|
|
82
82
|
title: "Action Required",
|
|
83
83
|
description: "Please update the status",
|
|
84
|
-
color: "
|
|
84
|
+
color: "neutral"
|
|
85
85
|
});
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
@@ -97,7 +97,7 @@ const bt = X.forwardRef(function({
|
|
|
97
97
|
isEditing: !0
|
|
98
98
|
}), m({
|
|
99
99
|
description: "Break request updated successfully",
|
|
100
|
-
color: "
|
|
100
|
+
color: "neutral"
|
|
101
101
|
});
|
|
102
102
|
} catch (a) {
|
|
103
103
|
console.error("Error updating break request:", a), m({
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
2
|
+
import { jsxs as r, jsx as a } from "react/jsx-runtime";
|
|
3
3
|
import * as v from "react";
|
|
4
4
|
import { DropdownMenu as g, DropdownMenuTrigger as y, DropdownMenuContent as b, DropdownMenuItem as w } from "@devalok/shilp-sutra/ui";
|
|
5
5
|
import { SegmentedControl as D } from "@devalok/shilp-sutra/ui";
|
|
@@ -10,28 +10,28 @@ import { format as o } from "date-fns";
|
|
|
10
10
|
import { IconChevronDown as T, IconChevronLeft as C, IconChevronRight as k } from "@tabler/icons-react";
|
|
11
11
|
const F = v.forwardRef(
|
|
12
12
|
function({ onDateSelect: m, hasCorrection: i }, u) {
|
|
13
|
-
const t = M(),
|
|
13
|
+
const t = M(), d = (e) => {
|
|
14
14
|
t.navigateDate(e);
|
|
15
15
|
}, f = (e) => {
|
|
16
16
|
t.selectMonth(e);
|
|
17
17
|
}, p = () => {
|
|
18
|
-
const e = [],
|
|
18
|
+
const e = [], c = new Date(t.currentDate).getFullYear();
|
|
19
19
|
for (let n = 0; n < 12; n++) {
|
|
20
|
-
const x = new Date(
|
|
21
|
-
e.push(`${o(x, "MMMM")} ${
|
|
20
|
+
const x = new Date(c, n, 1);
|
|
21
|
+
e.push(`${o(x, "MMMM")} ${c}`);
|
|
22
22
|
}
|
|
23
23
|
return e;
|
|
24
24
|
}, h = (e, l) => {
|
|
25
25
|
t.activeTimeFrame === "weekly" ? t.selectDate(e, l) : t.selectDayMonthly(l), m(l);
|
|
26
26
|
};
|
|
27
|
-
return /* @__PURE__ */
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
/* @__PURE__ */
|
|
27
|
+
return /* @__PURE__ */ r("div", { ref: u, className: "w-full", children: [
|
|
28
|
+
/* @__PURE__ */ r("div", { className: "mb-ds-06 flex w-full items-center justify-start", children: [
|
|
29
|
+
/* @__PURE__ */ r(g, { children: [
|
|
30
|
+
/* @__PURE__ */ r(y, { className: "text-ds-xl flex items-center gap-ds-03 text-text-secondary", children: [
|
|
31
31
|
t.selectedMonth,
|
|
32
|
-
/* @__PURE__ */
|
|
32
|
+
/* @__PURE__ */ a(T, {})
|
|
33
33
|
] }),
|
|
34
|
-
/* @__PURE__ */
|
|
34
|
+
/* @__PURE__ */ a(b, { children: p().map((e) => /* @__PURE__ */ a(
|
|
35
35
|
w,
|
|
36
36
|
{
|
|
37
37
|
onSelect: () => f(e),
|
|
@@ -40,12 +40,12 @@ const F = v.forwardRef(
|
|
|
40
40
|
e
|
|
41
41
|
)) })
|
|
42
42
|
] }),
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ r("div", { className: "ml-auto flex items-center gap-ds-05", children: [
|
|
44
|
+
/* @__PURE__ */ a(
|
|
45
45
|
D,
|
|
46
46
|
{
|
|
47
47
|
size: "md",
|
|
48
|
-
|
|
48
|
+
variant: "tonal",
|
|
49
49
|
options: [
|
|
50
50
|
{ id: "weekly", text: "Weekly" },
|
|
51
51
|
{ id: "monthly", text: "Monthly" }
|
|
@@ -54,29 +54,29 @@ const F = v.forwardRef(
|
|
|
54
54
|
onSelect: (e) => t.setActiveTimeFrame(e)
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
-
/* @__PURE__ */
|
|
57
|
+
/* @__PURE__ */ r("div", { className: "flex gap-0", children: [
|
|
58
|
+
/* @__PURE__ */ a(
|
|
59
59
|
"button",
|
|
60
60
|
{
|
|
61
61
|
"aria-label": "Previous",
|
|
62
|
-
onClick: () =>
|
|
62
|
+
onClick: () => d("prev"),
|
|
63
63
|
className: "rounded-ds-full p-ds-02 hover:bg-layer-02",
|
|
64
|
-
children: /* @__PURE__ */
|
|
64
|
+
children: /* @__PURE__ */ a(C, { className: "h-ico-md w-ico-md text-text-secondary" })
|
|
65
65
|
}
|
|
66
66
|
),
|
|
67
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ a(
|
|
68
68
|
"button",
|
|
69
69
|
{
|
|
70
70
|
"aria-label": "Next",
|
|
71
|
-
onClick: () =>
|
|
71
|
+
onClick: () => d("next"),
|
|
72
72
|
className: "rounded-ds-full p-ds-02 hover:bg-layer-02",
|
|
73
|
-
children: /* @__PURE__ */
|
|
73
|
+
children: /* @__PURE__ */ a(k, { className: "h-ico-md w-ico-md text-text-secondary" })
|
|
74
74
|
}
|
|
75
75
|
)
|
|
76
76
|
] })
|
|
77
77
|
] })
|
|
78
78
|
] }),
|
|
79
|
-
/* @__PURE__ */
|
|
79
|
+
/* @__PURE__ */ r(
|
|
80
80
|
"div",
|
|
81
81
|
{
|
|
82
82
|
className: s(
|
|
@@ -85,8 +85,8 @@ const F = v.forwardRef(
|
|
|
85
85
|
"w-full items-center overflow-hidden"
|
|
86
86
|
),
|
|
87
87
|
children: [
|
|
88
|
-
t.activeTimeFrame === "monthly" && ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"].map((e) => /* @__PURE__ */
|
|
89
|
-
t.days.map((e, l) => /* @__PURE__ */
|
|
88
|
+
t.activeTimeFrame === "monthly" && ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"].map((e) => /* @__PURE__ */ a("div", { className: "pb-ds-03 pt-ds-05 text-center", children: /* @__PURE__ */ a("span", { className: "text-ds-sm font-semibold uppercase tracking-wider text-text-tertiary", children: e }) }, e)),
|
|
89
|
+
t.days.map((e, l) => /* @__PURE__ */ r(
|
|
90
90
|
"button",
|
|
91
91
|
{
|
|
92
92
|
type: "button",
|
|
@@ -100,8 +100,8 @@ const F = v.forwardRef(
|
|
|
100
100
|
),
|
|
101
101
|
onClick: () => h(l, e.fullDate),
|
|
102
102
|
children: [
|
|
103
|
-
t.activeTimeFrame === "weekly" && /* @__PURE__ */
|
|
104
|
-
/* @__PURE__ */
|
|
103
|
+
t.activeTimeFrame === "weekly" && /* @__PURE__ */ a("span", { className: "text-ds-sm font-semibold uppercase tracking-wider mb-ds-03 text-text-tertiary", children: e.day }),
|
|
104
|
+
/* @__PURE__ */ r(
|
|
105
105
|
"div",
|
|
106
106
|
{
|
|
107
107
|
className: s(
|
|
@@ -110,7 +110,7 @@ const F = v.forwardRef(
|
|
|
110
110
|
t.activeTimeFrame === "monthly" && N(e.fullDate, new Date(t.selectedDate)) && "rounded-ds-full bg-interactive-subtle ring-2 ring-inset ring-interactive"
|
|
111
111
|
),
|
|
112
112
|
children: [
|
|
113
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ a(
|
|
114
114
|
"span",
|
|
115
115
|
{
|
|
116
116
|
className: s(
|
|
@@ -121,7 +121,7 @@ const F = v.forwardRef(
|
|
|
121
121
|
children: e.date
|
|
122
122
|
}
|
|
123
123
|
),
|
|
124
|
-
i && i(e.fullDate) && /* @__PURE__ */
|
|
124
|
+
i && i(e.fullDate) && /* @__PURE__ */ a("div", { className: "absolute z-raised mt-ds-06 h-ds-02b w-ds-02b translate-y-[5px] rounded-ds-full bg-text-error" })
|
|
125
125
|
]
|
|
126
126
|
}
|
|
127
127
|
)
|
|
@@ -12,8 +12,8 @@ const R = C.forwardRef(
|
|
|
12
12
|
selectedMonth: m,
|
|
13
13
|
yearsList: s,
|
|
14
14
|
isTodaySelected: u,
|
|
15
|
-
selectedAssociate:
|
|
16
|
-
users:
|
|
15
|
+
selectedAssociate: a,
|
|
16
|
+
users: l,
|
|
17
17
|
userImages: n,
|
|
18
18
|
activeTimeFrame: w,
|
|
19
19
|
onMonthSelection: v,
|
|
@@ -29,17 +29,17 @@ const R = C.forwardRef(
|
|
|
29
29
|
m,
|
|
30
30
|
/* @__PURE__ */ e(N, {})
|
|
31
31
|
] }),
|
|
32
|
-
/* @__PURE__ */ e(f, { className: "custom-scrollbar absolute ml-ds-08 max-h-[300px] overflow-y-auto rounded-ds-md border border-0 border-border p-0 shadow-brand", children: s.map((t,
|
|
32
|
+
/* @__PURE__ */ e(f, { className: "custom-scrollbar absolute ml-ds-08 max-h-[300px] overflow-y-auto rounded-ds-md border border-0 border-border p-0 shadow-brand", children: s.map((t, r) => /* @__PURE__ */ e(
|
|
33
33
|
o,
|
|
34
34
|
{
|
|
35
35
|
onSelect: () => {
|
|
36
36
|
v(t);
|
|
37
37
|
},
|
|
38
|
-
className: b("p-0",
|
|
38
|
+
className: b("p-0", r !== s.length - 1 ? "border-b border-b-border" : ""),
|
|
39
39
|
children: /* @__PURE__ */ e(
|
|
40
40
|
"span",
|
|
41
41
|
{
|
|
42
|
-
className: b("w-full py-ds-04 pl-ds-05 pr-ds-06", m === t ? "text-ds-md font-semibold bg-interactive text-text-on-color" : "text-ds-md text-text-secondary hover:bg-layer-02",
|
|
42
|
+
className: b("w-full py-ds-04 pl-ds-05 pr-ds-06", m === t ? "text-ds-md font-semibold bg-interactive text-text-on-color" : "text-ds-md text-text-secondary hover:bg-layer-02", r === 0 ? "rounded-t-[7px]" : r === s.length - 1 ? "rounded-b-[7px]" : ""),
|
|
43
43
|
children: t.split(" ")[1]
|
|
44
44
|
}
|
|
45
45
|
)
|
|
@@ -57,17 +57,17 @@ const R = C.forwardRef(
|
|
|
57
57
|
)
|
|
58
58
|
] }),
|
|
59
59
|
/* @__PURE__ */ d("div", { className: "flex w-full items-center justify-between gap-ds-05 md:mt-0 md:w-auto md:justify-start max-md:mt-[17px] max-lg:gap-[0.5rem]", children: [
|
|
60
|
-
/* @__PURE__ */ e("div", { className: "hidden md:flex", children:
|
|
60
|
+
/* @__PURE__ */ e("div", { className: "hidden md:flex", children: a ? /* @__PURE__ */ d("div", { className: "text-ds-md flex items-center justify-start rounded-ds-md bg-interactive px-ds-03 py-ds-02b text-text-on-color", children: [
|
|
61
61
|
/* @__PURE__ */ d("div", { className: "flex items-center justify-start gap-0", children: [
|
|
62
|
-
n[
|
|
62
|
+
n[a.id] ? /* @__PURE__ */ e(
|
|
63
63
|
"img",
|
|
64
64
|
{
|
|
65
|
-
src: n[
|
|
66
|
-
alt: `${
|
|
65
|
+
src: n[a.id],
|
|
66
|
+
alt: `${a.name}'s avatar`,
|
|
67
67
|
className: "h-ico-md w-ico-md rounded-ds-full"
|
|
68
68
|
}
|
|
69
|
-
) : /* @__PURE__ */ e("div", { className: "flex h-ico-md w-ico-md flex-shrink-0 items-center justify-center rounded-ds-full bg-layer-03", children: /* @__PURE__ */ e("span", { className: "text-interactive", children:
|
|
70
|
-
/* @__PURE__ */ e("span", { className: "text-ds-md ml-ds-01 mr-ds-02 text-text-on-color", children:
|
|
69
|
+
) : /* @__PURE__ */ e("div", { className: "flex h-ico-md w-ico-md flex-shrink-0 items-center justify-center rounded-ds-full bg-layer-03", children: /* @__PURE__ */ e("span", { className: "text-interactive", children: a.name.charAt(0) }) }),
|
|
70
|
+
/* @__PURE__ */ e("span", { className: "text-ds-md ml-ds-01 mr-ds-02 text-text-on-color", children: a.name })
|
|
71
71
|
] }),
|
|
72
72
|
/* @__PURE__ */ e(
|
|
73
73
|
"button",
|
|
@@ -86,15 +86,15 @@ const R = C.forwardRef(
|
|
|
86
86
|
] }),
|
|
87
87
|
/* @__PURE__ */ e(N, { className: "h-ico-sm w-ico-sm" })
|
|
88
88
|
] }),
|
|
89
|
-
/* @__PURE__ */ e(f, { className: "custom-scrollbar max-h-[400px] w-64 overflow-y-auto p-ds-03", children: (
|
|
89
|
+
/* @__PURE__ */ e(f, { className: "custom-scrollbar max-h-[400px] w-64 overflow-y-auto p-ds-03", children: (l == null ? void 0 : l.length) === 0 ? /* @__PURE__ */ e(o, { disabled: !0, children: "No users available" }) : l == null ? void 0 : l.map((t) => /* @__PURE__ */ d(
|
|
90
90
|
o,
|
|
91
91
|
{
|
|
92
92
|
onSelect: () => {
|
|
93
|
-
const
|
|
93
|
+
const r = {
|
|
94
94
|
...t,
|
|
95
95
|
createdAt: new Date(t.createdAt)
|
|
96
96
|
};
|
|
97
|
-
i(
|
|
97
|
+
i(r);
|
|
98
98
|
},
|
|
99
99
|
className: "flex items-center gap-ds-03 p-ds-03",
|
|
100
100
|
children: [
|
|
@@ -116,7 +116,7 @@ const R = C.forwardRef(
|
|
|
116
116
|
k,
|
|
117
117
|
{
|
|
118
118
|
size: "md",
|
|
119
|
-
|
|
119
|
+
variant: "tonal",
|
|
120
120
|
options: [
|
|
121
121
|
{ id: "weekly", text: "Weekly" },
|
|
122
122
|
{ id: "monthly", text: "Monthly" }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs as e, jsx as r } from "react/jsx-runtime";
|
|
3
|
-
import * as
|
|
3
|
+
import * as n from "react";
|
|
4
4
|
import { cn as p } from "@devalok/shilp-sutra/ui";
|
|
5
5
|
import { Badge as h } from "@devalok/shilp-sutra/ui";
|
|
6
6
|
import { Progress as b } from "@devalok/shilp-sutra/ui";
|
|
@@ -8,32 +8,32 @@ const f = {
|
|
|
8
8
|
active: "success",
|
|
9
9
|
completed: "info",
|
|
10
10
|
paused: "warning"
|
|
11
|
-
}, x =
|
|
11
|
+
}, x = n.forwardRef(
|
|
12
12
|
({
|
|
13
13
|
className: i,
|
|
14
14
|
name: c,
|
|
15
|
-
description:
|
|
16
|
-
status:
|
|
15
|
+
description: t,
|
|
16
|
+
status: a,
|
|
17
17
|
taskCount: s = 0,
|
|
18
18
|
completedTasks: d = 0,
|
|
19
|
-
...
|
|
20
|
-
},
|
|
19
|
+
...l
|
|
20
|
+
}, m) => {
|
|
21
21
|
const o = s > 0 ? Math.round(d / s * 100) : 0;
|
|
22
22
|
return /* @__PURE__ */ e(
|
|
23
23
|
"div",
|
|
24
24
|
{
|
|
25
|
-
ref:
|
|
25
|
+
ref: m,
|
|
26
26
|
className: p(
|
|
27
27
|
"group cursor-pointer rounded-ds-lg border border-border-subtle bg-layer-01 p-ds-05b shadow-01 transition-shadow duration-moderate-02 hover:shadow-02",
|
|
28
28
|
i
|
|
29
29
|
),
|
|
30
|
-
...
|
|
30
|
+
...l,
|
|
31
31
|
children: [
|
|
32
32
|
/* @__PURE__ */ e("div", { className: "mb-ds-04 flex items-start justify-between", children: [
|
|
33
33
|
/* @__PURE__ */ r("h3", { className: "font-display text-ds-base font-semibold text-text-primary", children: c }),
|
|
34
|
-
/* @__PURE__ */ r(h, {
|
|
34
|
+
/* @__PURE__ */ r(h, { color: f[a], size: "sm", children: a })
|
|
35
35
|
] }),
|
|
36
|
-
|
|
36
|
+
t && /* @__PURE__ */ r("p", { className: "mb-ds-05 line-clamp-2 text-ds-md text-text-secondary", children: t }),
|
|
37
37
|
/* @__PURE__ */ e("div", { className: "space-y-ds-03", children: [
|
|
38
38
|
/* @__PURE__ */ e("div", { className: "flex items-center justify-between text-ds-sm text-text-helper", children: [
|
|
39
39
|
/* @__PURE__ */ e("span", { children: [
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export { TaskDetailPanel, type TaskDetailPanelProps, type FullTask, TaskProperti
|
|
|
4
4
|
export { ChatPanel, type ChatPanelProps, type Agent, ChatInput, type ChatInputProps, MessageList, type ChatMessage, type MessageListProps, ConversationList, type Conversation, type ConversationListProps, StreamingText, type StreamingTextProps, } from './chat';
|
|
5
5
|
export { AttendanceCTA, type AttendanceCTAProps, DailyBrief, type DailyBriefProps, type BriefData, } from './dashboard';
|
|
6
6
|
export { AccentProvider, type AccentProviderProps, ClientPortalHeader, type ClientPortalHeaderProps, ProjectCard, type ProjectCardProps, } from './client';
|
|
7
|
-
export { SegmentedControl, type SegmentedControlProps, SegmentedControlItem, type SegmentedControlItemProps, segmentedControlItemVariants, type SegmentedControlSize, type
|
|
8
|
-
export { AdminDashboard, type AdminDashboardRootProps, type AdminDashboardCalendarProps, type AdminDashboardAttendanceOverviewProps, type AdminDashboardAssociateDetailProps, type AdminDashboardLeaveRequestsProps, type AdminDashboardContentProps, Calendar, type CalendarProps, BreakRequestCard, type BreakRequestProps, LeaveRequests, type LeaveRequestsProps, AdminDashboardSkeleton, RenderDate, type RenderDateProps, type DateAttendanceInfo, DashboardHeader, type DashboardHeaderProps, AttendanceOverview, type AttendanceOverviewProps, AssociateDetail, type AssociateDetailProps, CorrectionList, type CorrectionListProps, BreakAdmin, type BreakAdminProps, BreakAdminHeader, type BreakAdminHeaderProps, Breaks, type BreaksProps, LeaveRequest, type LeaveRequestProps, BreakBalance, type BreakBalanceProps, EditBreak, type EditBreakProps, EditBreakBalance, type EditBreakBalanceProps, DeleteBreak, type DeleteBreakProps, BreakAdminSkeleton, ApprovedAdjustments, type ApprovedAdjustmentsProps, AdjustmentType, renderAdjustmentType, type AdminUser, type AttendanceRecord, type GroupedAttendance, type RealtimeCallbacks, } from './admin';
|
|
7
|
+
export { SegmentedControl, type SegmentedControlProps, SegmentedControlItem, type SegmentedControlItemProps, segmentedControlItemVariants, type SegmentedControlSize, type SegmentedControlVariant, type SegmentedControlOption, } from '../../core/src/ui/segmented-control';
|
|
8
|
+
export { AdminDashboard, type AdminDashboardRootProps, type AdminDashboardCalendarProps, type AdminDashboardAttendanceOverviewProps, type AdminDashboardAssociateDetailProps, type AdminDashboardLeaveRequestsProps, type AdminDashboardContentProps, Calendar, type CalendarProps, BreakRequestCard, type BreakRequestProps, LeaveRequests, type LeaveRequestsProps, AdminDashboardSkeleton, RenderDate, type RenderDateProps, type DateAttendanceInfo, DashboardHeader, type DashboardHeaderProps, AttendanceOverview, type AttendanceOverviewProps, AssociateDetail, type AssociateDetailProps, CorrectionList, type CorrectionListProps, BreakAdmin, type BreakAdminProps, BreakAdminHeader, type BreakAdminHeaderProps, Breaks, type BreaksProps, LeaveRequest, type LeaveRequestProps, BreakBalance, type BreakBalanceProps, EditBreak, type EditBreakProps, EditBreakBalance, type EditBreakBalanceProps, DeleteBreak, type DeleteBreakProps, BreakAdminSkeleton, ApprovedAdjustments, type ApprovedAdjustmentsProps, AdjustmentType, renderAdjustmentType, renderStatus, formatDate, formatDateIST, formatTimeIST, formatDateWithWeekday, formatOptionalDate, getDaySuffix, isSameDay, getWeekDays, getMonthDays, getStartOfDay, getEndOfDay, removeAllEmojis, removeEmojiAtStart, type AdminUser, type AttendanceRecord, type GroupedAttendance, type RealtimeCallbacks, type TaskItem, type AttendanceCorrection, type BreakAdminFilters, type UserRole, type AttendanceStatus, type CorrectionStatus, type BreakRequestStatus, type BreakRequest, type BreakBalanceData, type Adjustment, type DayInfo, } from './admin';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGtE,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,QAAQ,EACR,eAAe,EACf,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,eAAe,EACf,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,QAAQ,EACR,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,OAAO,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,SAAS,EACT,KAAK,cAAc,EACnB,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,QAAQ,CAAA;AAGf,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,4BAA4B,EAC5B,KAAK,oBAAoB,EACzB,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,94 +1,111 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { BandwidthSkeleton as o, DevsabhaSkeleton as t } from "./page-skeletons.js";
|
|
3
3
|
import { KanbanBoard as m } from "./board/kanban-board.js";
|
|
4
|
-
import { BoardColumn as
|
|
5
|
-
import { TaskCard as x, TaskCardOverlay as
|
|
4
|
+
import { BoardColumn as p } from "./board/board-column.js";
|
|
5
|
+
import { TaskCard as x, TaskCardOverlay as s } from "./board/task-card.js";
|
|
6
6
|
import { TaskDetailPanel as i } from "./tasks/task-detail-panel.js";
|
|
7
7
|
import { TaskProperties as k } from "./tasks/task-properties.js";
|
|
8
8
|
import { ActivityTab as A } from "./tasks/activity-tab.js";
|
|
9
|
-
import { ConversationTab as
|
|
10
|
-
import { FilesTab as
|
|
11
|
-
import { ReviewTab as
|
|
12
|
-
import { SubtasksTab as
|
|
13
|
-
import { ChatPanel as
|
|
14
|
-
import { ChatInput as
|
|
15
|
-
import { MessageList as
|
|
16
|
-
import { ConversationList as
|
|
17
|
-
import { StreamingText as
|
|
18
|
-
import { AttendanceCTA as
|
|
19
|
-
import { DailyBrief as
|
|
20
|
-
import { AccentProvider as
|
|
21
|
-
import { ClientPortalHeader as
|
|
22
|
-
import { ProjectCard as
|
|
23
|
-
import { SegmentedControl as
|
|
9
|
+
import { ConversationTab as S } from "./tasks/conversation-tab.js";
|
|
10
|
+
import { FilesTab as B } from "./tasks/files-tab.js";
|
|
11
|
+
import { ReviewTab as b } from "./tasks/review-tab.js";
|
|
12
|
+
import { SubtasksTab as u } from "./tasks/subtasks-tab.js";
|
|
13
|
+
import { ChatPanel as g } from "./chat/chat-panel.js";
|
|
14
|
+
import { ChatInput as j } from "./chat/chat-input.js";
|
|
15
|
+
import { MessageList as E } from "./chat/message-list.js";
|
|
16
|
+
import { ConversationList as L } from "./chat/conversation-list.js";
|
|
17
|
+
import { StreamingText as R } from "./chat/streaming-text.js";
|
|
18
|
+
import { AttendanceCTA as w } from "./dashboard/attendance-cta.js";
|
|
19
|
+
import { DailyBrief as W } from "./dashboard/daily-brief.js";
|
|
20
|
+
import { AccentProvider as F } from "./client/accent-provider.js";
|
|
21
|
+
import { ClientPortalHeader as V } from "./client/client-portal-header.js";
|
|
22
|
+
import { ProjectCard as G } from "./client/project-card.js";
|
|
23
|
+
import { SegmentedControl as N, SegmentedControlItem as Q, segmentedControlItemVariants as U } from "@devalok/shilp-sutra/ui";
|
|
24
24
|
import { AdjustmentType as Y, renderAdjustmentType as Z } from "./admin/utils/render-adjustment-type.js";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
41
|
-
import {
|
|
42
|
-
import {
|
|
43
|
-
import {
|
|
44
|
-
import {
|
|
25
|
+
import { renderStatus as $ } from "./admin/utils/render-status.js";
|
|
26
|
+
import { formatDate as re, formatDateIST as oe, formatDateWithWeekday as te, formatOptionalDate as ae, formatTimeIST as me, getDaySuffix as fe, getEndOfDay as pe, getMonthDays as ne, getStartOfDay as xe, getWeekDays as se, isSameDay as de } from "./admin/utils/date-utils.js";
|
|
27
|
+
import { removeAllEmojis as le, removeEmojiAtStart as ke } from "./admin/utils/emoji-utils.js";
|
|
28
|
+
import { AdminDashboard as Ae } from "./admin/dashboard/admin-dashboard.js";
|
|
29
|
+
import { DashboardSkeleton as Se } from "./admin/dashboard/dashboard-skeleton.js";
|
|
30
|
+
import { ApprovedAdjustments as Be } from "./admin/adjustments/approved-adjustments.js";
|
|
31
|
+
import { AssociateDetail as be } from "./admin/dashboard/associate-detail.js";
|
|
32
|
+
import { AttendanceOverview as ue } from "./admin/dashboard/attendance-overview.js";
|
|
33
|
+
import { BreakAdmin as ge } from "./admin/break/break-admin.js";
|
|
34
|
+
import { BreakAdminHeader as je } from "./admin/break/header.js";
|
|
35
|
+
import { BreakAdminSkeleton as Ee } from "./admin/break/break-admin-skeleton.js";
|
|
36
|
+
import { BreakBalance as Le } from "./admin/break/break-balance.js";
|
|
37
|
+
import { BreakRequestCard as Re } from "./admin/dashboard/break-request.js";
|
|
38
|
+
import { Breaks as we } from "./admin/break/breaks.js";
|
|
39
|
+
import { Calendar as We } from "./admin/dashboard/calendar.js";
|
|
40
|
+
import { CorrectionList as Fe } from "./admin/dashboard/correction-list.js";
|
|
41
|
+
import { DashboardHeader as Ve } from "./admin/dashboard/dashboard-header.js";
|
|
42
|
+
import { DeleteBreak as Ge } from "./admin/break/delete-break.js";
|
|
43
|
+
import { EditBreak as Ne } from "./admin/break/edit-break.js";
|
|
44
|
+
import { EditBreakBalance as Ue } from "./admin/break/edit-break-balance.js";
|
|
45
|
+
import { LeaveRequest as Ye } from "./admin/break/leave-request.js";
|
|
46
|
+
import { LeaveRequests as _e } from "./admin/dashboard/leave-requests.js";
|
|
47
|
+
import { RenderDate as er } from "./admin/dashboard/render-date.js";
|
|
45
48
|
export {
|
|
46
|
-
|
|
49
|
+
F as AccentProvider,
|
|
47
50
|
A as ActivityTab,
|
|
48
51
|
Y as AdjustmentType,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
Ae as AdminDashboard,
|
|
53
|
+
Se as AdminDashboardSkeleton,
|
|
54
|
+
Be as ApprovedAdjustments,
|
|
55
|
+
be as AssociateDetail,
|
|
56
|
+
w as AttendanceCTA,
|
|
57
|
+
ue as AttendanceOverview,
|
|
55
58
|
o as BandwidthSkeleton,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
p as BoardColumn,
|
|
60
|
+
ge as BreakAdmin,
|
|
61
|
+
je as BreakAdminHeader,
|
|
62
|
+
Ee as BreakAdminSkeleton,
|
|
63
|
+
Le as BreakBalance,
|
|
64
|
+
Re as BreakRequestCard,
|
|
65
|
+
we as Breaks,
|
|
66
|
+
We as Calendar,
|
|
67
|
+
j as ChatInput,
|
|
68
|
+
g as ChatPanel,
|
|
69
|
+
V as ClientPortalHeader,
|
|
70
|
+
L as ConversationList,
|
|
71
|
+
S as ConversationTab,
|
|
72
|
+
Fe as CorrectionList,
|
|
73
|
+
W as DailyBrief,
|
|
74
|
+
Ve as DashboardHeader,
|
|
75
|
+
Ge as DeleteBreak,
|
|
73
76
|
t as DevsabhaSkeleton,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
Ne as EditBreak,
|
|
78
|
+
Ue as EditBreakBalance,
|
|
79
|
+
B as FilesTab,
|
|
77
80
|
m as KanbanBoard,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
81
|
+
Ye as LeaveRequest,
|
|
82
|
+
_e as LeaveRequests,
|
|
83
|
+
E as MessageList,
|
|
84
|
+
G as ProjectCard,
|
|
85
|
+
er as RenderDate,
|
|
86
|
+
b as ReviewTab,
|
|
87
|
+
N as SegmentedControl,
|
|
88
|
+
Q as SegmentedControlItem,
|
|
89
|
+
R as StreamingText,
|
|
90
|
+
u as SubtasksTab,
|
|
88
91
|
x as TaskCard,
|
|
89
|
-
|
|
92
|
+
s as TaskCardOverlay,
|
|
90
93
|
i as TaskDetailPanel,
|
|
91
94
|
k as TaskProperties,
|
|
95
|
+
re as formatDate,
|
|
96
|
+
oe as formatDateIST,
|
|
97
|
+
te as formatDateWithWeekday,
|
|
98
|
+
ae as formatOptionalDate,
|
|
99
|
+
me as formatTimeIST,
|
|
100
|
+
fe as getDaySuffix,
|
|
101
|
+
pe as getEndOfDay,
|
|
102
|
+
ne as getMonthDays,
|
|
103
|
+
xe as getStartOfDay,
|
|
104
|
+
se as getWeekDays,
|
|
105
|
+
de as isSameDay,
|
|
106
|
+
le as removeAllEmojis,
|
|
107
|
+
ke as removeEmojiAtStart,
|
|
92
108
|
Z as renderAdjustmentType,
|
|
93
|
-
|
|
109
|
+
$ as renderStatus,
|
|
110
|
+
U as segmentedControlItemVariants
|
|
94
111
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as a, jsx as
|
|
2
|
+
import { jsxs as a, jsx as e } from "react/jsx-runtime";
|
|
3
3
|
import * as m from "react";
|
|
4
4
|
import { cn as g } from "@devalok/shilp-sutra/ui";
|
|
5
5
|
import { Avatar as y, AvatarImage as v, AvatarFallback as w } from "@devalok/shilp-sutra/ui";
|
|
6
6
|
import { EmptyState as T } from "@devalok/shilp-sutra/composed";
|
|
7
7
|
import { IconMessageCircle as C, IconSend as A } from "@tabler/icons-react";
|
|
8
8
|
import { getInitials as I } from "@devalok/shilp-sutra/composed";
|
|
9
|
-
function E(
|
|
10
|
-
const n = new Date(
|
|
9
|
+
function E(t) {
|
|
10
|
+
const n = new Date(t), u = (/* @__PURE__ */ new Date()).getTime() - n.getTime(), o = Math.floor(u / 6e4), s = Math.floor(o / 60), l = Math.floor(s / 24);
|
|
11
11
|
return o < 1 ? "Just now" : o < 60 ? `${o}m ago` : s < 24 ? `${s}h ago` : l < 7 ? `${l}d ago` : n.toLocaleDateString("en-IN", {
|
|
12
12
|
month: "short",
|
|
13
13
|
day: "numeric",
|
|
@@ -15,16 +15,16 @@ function E(e) {
|
|
|
15
15
|
minute: "2-digit"
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
function k(
|
|
19
|
-
return
|
|
20
|
-
id:
|
|
21
|
-
name:
|
|
22
|
-
email:
|
|
18
|
+
function k(t) {
|
|
19
|
+
return t.authorType === "INTERNAL" && t.internalAuthor ? t.internalAuthor : t.authorType === "CLIENT" && t.clientAuthor ? {
|
|
20
|
+
id: t.clientAuthor.id,
|
|
21
|
+
name: t.clientAuthor.name,
|
|
22
|
+
email: t.clientAuthor.email,
|
|
23
23
|
image: null
|
|
24
|
-
} : { id:
|
|
24
|
+
} : { id: t.authorId, name: "Unknown", image: null };
|
|
25
25
|
}
|
|
26
|
-
function R(
|
|
27
|
-
return
|
|
26
|
+
function R(t) {
|
|
27
|
+
return t.replace(/<[^>]*>/g, "");
|
|
28
28
|
}
|
|
29
29
|
const L = m.forwardRef(
|
|
30
30
|
function({
|
|
@@ -43,7 +43,7 @@ const L = m.forwardRef(
|
|
|
43
43
|
return m.useEffect(() => {
|
|
44
44
|
c.current && (c.current.scrollTop = c.current.scrollHeight);
|
|
45
45
|
}, [n.length]), /* @__PURE__ */ a("div", { ref: b, className: g("flex flex-col", o), children: [
|
|
46
|
-
n.length > 0 ? /* @__PURE__ */
|
|
46
|
+
n.length > 0 ? /* @__PURE__ */ e(
|
|
47
47
|
"div",
|
|
48
48
|
{
|
|
49
49
|
ref: c,
|
|
@@ -52,8 +52,8 @@ const L = m.forwardRef(
|
|
|
52
52
|
const i = k(r), f = r.authorType === "CLIENT";
|
|
53
53
|
return /* @__PURE__ */ a("div", { className: "flex gap-ds-03", children: [
|
|
54
54
|
/* @__PURE__ */ a(y, { className: "h-ds-xs-plus w-ds-xs-plus shrink-0 mt-ds-01", children: [
|
|
55
|
-
i.image && /* @__PURE__ */
|
|
56
|
-
/* @__PURE__ */
|
|
55
|
+
i.image && /* @__PURE__ */ e(v, { src: i.image, alt: i.name }),
|
|
56
|
+
/* @__PURE__ */ e(
|
|
57
57
|
w,
|
|
58
58
|
{
|
|
59
59
|
className: g(
|
|
@@ -67,34 +67,34 @@ const L = m.forwardRef(
|
|
|
67
67
|
] }),
|
|
68
68
|
/* @__PURE__ */ a("div", { className: "flex-1 min-w-0", children: [
|
|
69
69
|
/* @__PURE__ */ a("div", { className: "flex items-baseline gap-ds-03", children: [
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
-
s ? !f && /* @__PURE__ */
|
|
72
|
-
/* @__PURE__ */
|
|
70
|
+
/* @__PURE__ */ e("span", { className: "text-ds-md font-medium text-text-primary", children: i.name }),
|
|
71
|
+
s ? !f && /* @__PURE__ */ e("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__ */ e("span", { className: "rounded bg-warning-surface px-ds-02 py-px text-ds-xs font-semibold uppercase tracking-wider text-text-warning", children: "Client" }),
|
|
72
|
+
/* @__PURE__ */ e("span", { className: "text-ds-sm text-text-placeholder", children: E(r.createdAt) })
|
|
73
73
|
] }),
|
|
74
|
-
/* @__PURE__ */
|
|
74
|
+
/* @__PURE__ */ e("div", { className: "mt-ds-02", children: h ? h({
|
|
75
75
|
content: r.content,
|
|
76
76
|
className: "[&_.ProseMirror]:!min-h-0 [&_.ProseMirror]:!p-0"
|
|
77
|
-
}) : /* @__PURE__ */
|
|
77
|
+
}) : /* @__PURE__ */ e("p", { className: "text-ds-md text-text-secondary whitespace-pre-wrap", children: R(r.content) }) })
|
|
78
78
|
] })
|
|
79
79
|
] }, r.id);
|
|
80
80
|
})
|
|
81
81
|
}
|
|
82
|
-
) : /* @__PURE__ */
|
|
82
|
+
) : /* @__PURE__ */ e(
|
|
83
83
|
T,
|
|
84
84
|
{
|
|
85
|
-
icon: C,
|
|
85
|
+
icon: /* @__PURE__ */ e(C, {}),
|
|
86
86
|
title: "No comments yet",
|
|
87
87
|
description: "Start a conversation about this task",
|
|
88
88
|
compact: !0
|
|
89
89
|
}
|
|
90
90
|
),
|
|
91
91
|
/* @__PURE__ */ a("div", { className: "mt-ds-05 space-y-ds-03", children: [
|
|
92
|
-
x === "EVERYONE" && !s && /* @__PURE__ */
|
|
92
|
+
x === "EVERYONE" && !s && /* @__PURE__ */ e("p", { className: "text-ds-xs text-text-warning", children: "This task is visible to clients. Comments may be seen by external users." }),
|
|
93
93
|
l ? l({
|
|
94
94
|
content: d,
|
|
95
95
|
onChange: p,
|
|
96
96
|
placeholder: "Write a comment..."
|
|
97
|
-
}) : /* @__PURE__ */
|
|
97
|
+
}) : /* @__PURE__ */ e(
|
|
98
98
|
"textarea",
|
|
99
99
|
{
|
|
100
100
|
value: d,
|
|
@@ -104,7 +104,7 @@ const L = m.forwardRef(
|
|
|
104
104
|
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"
|
|
105
105
|
}
|
|
106
106
|
),
|
|
107
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ e("div", { className: "flex justify-end", children: /* @__PURE__ */ a(
|
|
108
108
|
"button",
|
|
109
109
|
{
|
|
110
110
|
type: "button",
|
|
@@ -112,7 +112,7 @@ const L = m.forwardRef(
|
|
|
112
112
|
disabled: !d.replace(/<[^>]*>/g, "").trim(),
|
|
113
113
|
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",
|
|
114
114
|
children: [
|
|
115
|
-
/* @__PURE__ */
|
|
115
|
+
/* @__PURE__ */ e(A, { className: "h-ico-sm w-ico-sm", stroke: 2 }),
|
|
116
116
|
"Comment"
|
|
117
117
|
]
|
|
118
118
|
}
|
package/dist/tasks/files-tab.js
CHANGED
|
@@ -171,7 +171,7 @@ const G = d.forwardRef(
|
|
|
171
171
|
}) }) : /* @__PURE__ */ e("div", { className: "mt-ds-03", children: /* @__PURE__ */ e(
|
|
172
172
|
R,
|
|
173
173
|
{
|
|
174
|
-
icon: B,
|
|
174
|
+
icon: /* @__PURE__ */ e(B, {}),
|
|
175
175
|
title: "No files attached",
|
|
176
176
|
description: "Upload files to share with your team",
|
|
177
177
|
compact: !0
|
package/dist/tasks/review-tab.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as r, jsxs as a, Fragment as
|
|
2
|
+
import { jsx as r, jsxs as a, Fragment as ie } from "react/jsx-runtime";
|
|
3
3
|
import * as c from "react";
|
|
4
|
-
import { cn as
|
|
5
|
-
import { Sheet as
|
|
6
|
-
import { VisuallyHidden as
|
|
4
|
+
import { cn as _ } from "@devalok/shilp-sutra/ui";
|
|
5
|
+
import { Sheet as re, SheetContent as se, SheetTitle as le } from "@devalok/shilp-sutra/ui";
|
|
6
|
+
import { VisuallyHidden as ae } from "@devalok/shilp-sutra/ui";
|
|
7
7
|
import { Skeleton as t } from "@devalok/shilp-sutra/ui";
|
|
8
|
-
import { Tabs as
|
|
9
|
-
import { TaskProperties as
|
|
10
|
-
import { SubtasksTab as
|
|
11
|
-
import { ReviewTab as
|
|
12
|
-
import { ConversationTab as
|
|
13
|
-
import { FilesTab as
|
|
14
|
-
import { ActivityTab as
|
|
15
|
-
import { IconListCheck as
|
|
8
|
+
import { Tabs as ce, TabsList as te, TabsTrigger as de } from "@devalok/shilp-sutra/ui";
|
|
9
|
+
import { TaskProperties as fe } from "./task-properties.js";
|
|
10
|
+
import { SubtasksTab as me } from "./subtasks-tab.js";
|
|
11
|
+
import { ReviewTab as ne } from "./review-tab.js";
|
|
12
|
+
import { ConversationTab as oe } from "./conversation-tab.js";
|
|
13
|
+
import { FilesTab as be } from "./files-tab.js";
|
|
14
|
+
import { ActivityTab as pe } from "./activity-tab.js";
|
|
15
|
+
import { IconListCheck as he, IconGitPullRequest as ue, IconMessageCircle as ve, IconPaperclip as xe, IconActivity as ye } from "@tabler/icons-react";
|
|
16
16
|
const z = [
|
|
17
|
-
{ id: "subtasks", label: "Subtasks", icon:
|
|
18
|
-
{ id: "review", label: "Review", icon:
|
|
19
|
-
{ id: "conversation", label: "Conversation", icon:
|
|
20
|
-
{ id: "files", label: "Files", icon:
|
|
21
|
-
{ id: "activity", label: "Activity", icon:
|
|
17
|
+
{ id: "subtasks", label: "Subtasks", icon: he },
|
|
18
|
+
{ id: "review", label: "Review", icon: ue },
|
|
19
|
+
{ id: "conversation", label: "Conversation", icon: ve },
|
|
20
|
+
{ id: "files", label: "Files", icon: xe },
|
|
21
|
+
{ id: "activity", label: "Activity", icon: ye }
|
|
22
22
|
];
|
|
23
|
-
function
|
|
23
|
+
function Ne() {
|
|
24
24
|
return /* @__PURE__ */ a("div", { className: "space-y-ds-06 p-ds-06", children: [
|
|
25
25
|
/* @__PURE__ */ r(t, { className: "h-ds-xs-plus w-3/4 bg-field" }),
|
|
26
26
|
/* @__PURE__ */ r("div", { className: "space-y-ds-04", children: Array.from({ length: 6 }).map((V, i) => /* @__PURE__ */ a("div", { className: "flex items-center gap-ds-04", children: [
|
|
@@ -35,7 +35,7 @@ function ye() {
|
|
|
35
35
|
] })
|
|
36
36
|
] });
|
|
37
37
|
}
|
|
38
|
-
const
|
|
38
|
+
const Te = c.forwardRef(function({
|
|
39
39
|
task: i,
|
|
40
40
|
loading: G = !1,
|
|
41
41
|
open: b,
|
|
@@ -63,40 +63,41 @@ const Ne = c.forwardRef(function({
|
|
|
63
63
|
renderPriorityIndicator: X,
|
|
64
64
|
renderDatePicker: Y,
|
|
65
65
|
isUploading: Z = !1
|
|
66
|
-
},
|
|
67
|
-
var
|
|
66
|
+
}, $) {
|
|
67
|
+
var C, K, L;
|
|
68
68
|
const [d, B] = c.useState(s ? "conversation" : "subtasks"), [E, m] = c.useState(!1), [O, n] = c.useState(""), o = c.useRef(null);
|
|
69
69
|
c.useEffect(() => {
|
|
70
70
|
i && (n(i.title), m(!1));
|
|
71
71
|
}, [i == null ? void 0 : i.id]), c.useEffect(() => {
|
|
72
72
|
b && B(s ? "conversation" : "subtasks");
|
|
73
73
|
}, [b, s]);
|
|
74
|
-
const
|
|
74
|
+
const q = (e) => {
|
|
75
75
|
B(e), D == null || D(e);
|
|
76
76
|
}, S = () => {
|
|
77
77
|
m(!1);
|
|
78
78
|
const e = O.trim();
|
|
79
79
|
e && e !== (i == null ? void 0 : i.title) ? p == null || p(e) : i && n(i.title);
|
|
80
|
-
},
|
|
80
|
+
}, R = (e) => {
|
|
81
81
|
e.key === "Enter" && (e.preventDefault(), S()), e.key === "Escape" && (m(!1), i && n(i.title));
|
|
82
82
|
};
|
|
83
83
|
c.useEffect(() => {
|
|
84
84
|
E && o.current && (o.current.focus(), o.current.select());
|
|
85
85
|
}, [E]);
|
|
86
|
-
const
|
|
87
|
-
return /* @__PURE__ */ r(
|
|
88
|
-
|
|
86
|
+
const F = (C = f.find((e) => e.isTerminal)) == null ? void 0 : C.id, k = ((K = f.find((e) => e.isDefault)) == null ? void 0 : K.id) || ((L = f[0]) == null ? void 0 : L.id) || "", M = s ? z.filter((e) => e.id === "conversation") : z, U = P || (i == null ? void 0 : i.comments) || [];
|
|
87
|
+
return /* @__PURE__ */ r(re, { open: b, onOpenChange: H, children: /* @__PURE__ */ a(
|
|
88
|
+
se,
|
|
89
89
|
{
|
|
90
|
+
ref: $,
|
|
90
91
|
side: "right",
|
|
91
|
-
className:
|
|
92
|
+
className: _(
|
|
92
93
|
/* intentional: task detail side panel takes 40% of screen, min 380px for form usability */
|
|
93
94
|
"w-full sm:max-w-none sm:w-[40%] min-w-[380px] p-0",
|
|
94
95
|
"flex flex-col overflow-hidden",
|
|
95
96
|
"border-l border-border bg-layer-01"
|
|
96
97
|
),
|
|
97
98
|
children: [
|
|
98
|
-
/* @__PURE__ */ r(
|
|
99
|
-
G || !i ? /* @__PURE__ */ r(
|
|
99
|
+
/* @__PURE__ */ r(ae, { children: /* @__PURE__ */ r(le, { children: (i == null ? void 0 : i.title) || "Task Details" }) }),
|
|
100
|
+
G || !i ? /* @__PURE__ */ r(Ne, {}) : /* @__PURE__ */ a(ie, { children: [
|
|
100
101
|
/* @__PURE__ */ a("div", { className: "shrink-0 border-b border-border px-ds-06 pb-ds-05 pt-ds-06", children: [
|
|
101
102
|
!s && E ? /* @__PURE__ */ r(
|
|
102
103
|
"input",
|
|
@@ -106,7 +107,7 @@ const Ne = c.forwardRef(function({
|
|
|
106
107
|
value: O,
|
|
107
108
|
onChange: (e) => n(e.target.value),
|
|
108
109
|
onBlur: S,
|
|
109
|
-
onKeyDown:
|
|
110
|
+
onKeyDown: R,
|
|
110
111
|
className: "w-full bg-transparent text-ds-lg font-semibold text-text-primary outline-none"
|
|
111
112
|
}
|
|
112
113
|
) : (
|
|
@@ -115,7 +116,7 @@ const Ne = c.forwardRef(function({
|
|
|
115
116
|
"h2",
|
|
116
117
|
{
|
|
117
118
|
onClick: s ? void 0 : () => m(!0),
|
|
118
|
-
className:
|
|
119
|
+
className: _(
|
|
119
120
|
"text-ds-lg font-semibold text-text-primary",
|
|
120
121
|
!s && "cursor-text hover:text-interactive transition-colors"
|
|
121
122
|
),
|
|
@@ -127,7 +128,7 @@ const Ne = c.forwardRef(function({
|
|
|
127
128
|
] }),
|
|
128
129
|
/* @__PURE__ */ a("div", { className: "flex-1 overflow-y-auto", children: [
|
|
129
130
|
/* @__PURE__ */ r("div", { className: "border-b border-border px-ds-06 py-ds-05", children: /* @__PURE__ */ r(
|
|
130
|
-
|
|
131
|
+
fe,
|
|
131
132
|
{
|
|
132
133
|
task: i,
|
|
133
134
|
columns: f,
|
|
@@ -143,19 +144,19 @@ const Ne = c.forwardRef(function({
|
|
|
143
144
|
renderDatePicker: Y
|
|
144
145
|
}
|
|
145
146
|
) }),
|
|
146
|
-
/* @__PURE__ */ r("div", { className: "sticky top-0 z-raised bg-layer-01 px-ds-06", children: /* @__PURE__ */ r(
|
|
147
|
+
/* @__PURE__ */ r("div", { className: "sticky top-0 z-raised bg-layer-01 px-ds-06", children: /* @__PURE__ */ r(ce, { value: d, onValueChange: q, children: /* @__PURE__ */ r(te, { variant: "line", children: M.map((e) => /* @__PURE__ */ a(de, { value: e.id, children: [
|
|
147
148
|
/* @__PURE__ */ r(e.icon, { className: "h-ico-sm w-ico-sm", stroke: 1.5 }),
|
|
148
149
|
e.label
|
|
149
150
|
] }, e.id)) }) }) }),
|
|
150
151
|
/* @__PURE__ */ a("div", { className: "px-ds-06 py-ds-05", children: [
|
|
151
152
|
d === "subtasks" && /* @__PURE__ */ r(
|
|
152
|
-
|
|
153
|
+
me,
|
|
153
154
|
{
|
|
154
155
|
subtasks: i.subtasks ?? [],
|
|
155
|
-
terminalColumnId:
|
|
156
|
+
terminalColumnId: F,
|
|
156
157
|
projectId: i.projectId,
|
|
157
158
|
parentTaskId: i.id,
|
|
158
|
-
defaultColumnId:
|
|
159
|
+
defaultColumnId: k,
|
|
159
160
|
onCreateSubtask: s ? () => {
|
|
160
161
|
} : (e) => x == null ? void 0 : x(e),
|
|
161
162
|
onToggleSubtask: s ? () => {
|
|
@@ -164,18 +165,18 @@ const Ne = c.forwardRef(function({
|
|
|
164
165
|
}
|
|
165
166
|
),
|
|
166
167
|
d === "review" && !s && /* @__PURE__ */ r(
|
|
167
|
-
|
|
168
|
+
ne,
|
|
168
169
|
{
|
|
169
170
|
reviews: i.reviewRequests,
|
|
170
171
|
members: j,
|
|
171
172
|
onRequestReview: (e) => N == null ? void 0 : N(e),
|
|
172
|
-
onUpdateStatus: (e, l,
|
|
173
|
+
onUpdateStatus: (e, l, ee) => T == null ? void 0 : T(e, l, ee)
|
|
173
174
|
}
|
|
174
175
|
),
|
|
175
176
|
d === "conversation" && /* @__PURE__ */ r(
|
|
176
|
-
|
|
177
|
+
oe,
|
|
177
178
|
{
|
|
178
|
-
comments:
|
|
179
|
+
comments: U,
|
|
179
180
|
taskVisibility: i.visibility,
|
|
180
181
|
onPostComment: (e, l) => w == null ? void 0 : w(e, l),
|
|
181
182
|
clientMode: s,
|
|
@@ -184,7 +185,7 @@ const Ne = c.forwardRef(function({
|
|
|
184
185
|
}
|
|
185
186
|
),
|
|
186
187
|
d === "files" && /* @__PURE__ */ r(
|
|
187
|
-
|
|
188
|
+
be,
|
|
188
189
|
{
|
|
189
190
|
files: i.files ?? [],
|
|
190
191
|
onUpload: s ? () => {
|
|
@@ -195,7 +196,7 @@ const Ne = c.forwardRef(function({
|
|
|
195
196
|
readOnly: s
|
|
196
197
|
}
|
|
197
198
|
),
|
|
198
|
-
d === "activity" && /* @__PURE__ */ r(
|
|
199
|
+
d === "activity" && /* @__PURE__ */ r(pe, { activities: J })
|
|
199
200
|
] })
|
|
200
201
|
] })
|
|
201
202
|
] })
|
|
@@ -203,7 +204,7 @@ const Ne = c.forwardRef(function({
|
|
|
203
204
|
}
|
|
204
205
|
) });
|
|
205
206
|
});
|
|
206
|
-
|
|
207
|
+
Te.displayName = "TaskDetailPanel";
|
|
207
208
|
export {
|
|
208
|
-
|
|
209
|
+
Te as TaskDetailPanel
|
|
209
210
|
};
|