@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.
Files changed (182) hide show
  1. package/dist/admin/adjustments/approved-adjustments.d.ts +10 -0
  2. package/dist/admin/adjustments/approved-adjustments.d.ts.map +1 -0
  3. package/dist/admin/adjustments/approved-adjustments.js +42 -0
  4. package/dist/admin/adjustments/index.d.ts +2 -0
  5. package/dist/admin/adjustments/index.d.ts.map +1 -0
  6. package/dist/admin/break/break-admin-skeleton.d.ts +3 -0
  7. package/dist/admin/break/break-admin-skeleton.d.ts.map +1 -0
  8. package/dist/admin/break/break-admin-skeleton.js +58 -0
  9. package/dist/admin/break/break-admin.d.ts +79 -0
  10. package/dist/admin/break/break-admin.d.ts.map +1 -0
  11. package/dist/admin/break/break-admin.js +346 -0
  12. package/dist/admin/break/break-balance.d.ts +14 -0
  13. package/dist/admin/break/break-balance.d.ts.map +1 -0
  14. package/dist/admin/break/break-balance.js +41 -0
  15. package/dist/admin/break/breaks.d.ts +21 -0
  16. package/dist/admin/break/breaks.d.ts.map +1 -0
  17. package/dist/admin/break/breaks.js +90 -0
  18. package/dist/admin/break/delete-break.d.ts +10 -0
  19. package/dist/admin/break/delete-break.d.ts.map +1 -0
  20. package/dist/admin/break/delete-break.js +53 -0
  21. package/dist/admin/break/edit-break-balance.d.ts +15 -0
  22. package/dist/admin/break/edit-break-balance.d.ts.map +1 -0
  23. package/dist/admin/break/edit-break-balance.js +111 -0
  24. package/dist/admin/break/edit-break.d.ts +23 -0
  25. package/dist/admin/break/edit-break.d.ts.map +1 -0
  26. package/dist/admin/break/edit-break.js +485 -0
  27. package/dist/admin/break/header.d.ts +22 -0
  28. package/dist/admin/break/header.d.ts.map +1 -0
  29. package/dist/admin/break/header.js +228 -0
  30. package/dist/admin/break/index.d.ts +18 -0
  31. package/dist/admin/break/index.d.ts.map +1 -0
  32. package/dist/admin/break/leave-request.d.ts +17 -0
  33. package/dist/admin/break/leave-request.d.ts.map +1 -0
  34. package/dist/admin/break/leave-request.js +162 -0
  35. package/dist/admin/break/use-break-date-picker.d.ts +25 -0
  36. package/dist/admin/break/use-break-date-picker.d.ts.map +1 -0
  37. package/dist/admin/break/use-break-date-picker.js +42 -0
  38. package/dist/admin/dashboard/admin-dashboard.d.ts +109 -0
  39. package/dist/admin/dashboard/admin-dashboard.d.ts.map +1 -0
  40. package/dist/admin/dashboard/admin-dashboard.js +336 -0
  41. package/dist/admin/dashboard/associate-detail.d.ts +36 -0
  42. package/dist/admin/dashboard/associate-detail.d.ts.map +1 -0
  43. package/dist/admin/dashboard/associate-detail.js +269 -0
  44. package/dist/admin/dashboard/attendance-overview.d.ts +11 -0
  45. package/dist/admin/dashboard/attendance-overview.d.ts.map +1 -0
  46. package/dist/admin/dashboard/attendance-overview.js +137 -0
  47. package/dist/admin/dashboard/break-request.d.ts +25 -0
  48. package/dist/admin/dashboard/break-request.d.ts.map +1 -0
  49. package/dist/admin/dashboard/break-request.js +174 -0
  50. package/dist/admin/dashboard/calendar.d.ts +7 -0
  51. package/dist/admin/dashboard/calendar.d.ts.map +1 -0
  52. package/dist/admin/dashboard/calendar.js +140 -0
  53. package/dist/admin/dashboard/correction-list.d.ts +21 -0
  54. package/dist/admin/dashboard/correction-list.d.ts.map +1 -0
  55. package/dist/admin/dashboard/correction-list.js +99 -0
  56. package/dist/admin/dashboard/dashboard-header.d.ts +18 -0
  57. package/dist/admin/dashboard/dashboard-header.d.ts.map +1 -0
  58. package/dist/admin/dashboard/dashboard-header.js +153 -0
  59. package/dist/admin/dashboard/dashboard-skeleton.d.ts +3 -0
  60. package/dist/admin/dashboard/dashboard-skeleton.d.ts.map +1 -0
  61. package/dist/admin/dashboard/dashboard-skeleton.js +110 -0
  62. package/dist/admin/dashboard/index.d.ts +13 -0
  63. package/dist/admin/dashboard/index.d.ts.map +1 -0
  64. package/dist/admin/dashboard/leave-requests.d.ts +26 -0
  65. package/dist/admin/dashboard/leave-requests.d.ts.map +1 -0
  66. package/dist/admin/dashboard/leave-requests.js +197 -0
  67. package/dist/admin/dashboard/render-date.d.ts +16 -0
  68. package/dist/admin/dashboard/render-date.d.ts.map +1 -0
  69. package/dist/admin/dashboard/render-date.js +143 -0
  70. package/dist/admin/dashboard/use-calendar-navigation.d.ts +60 -0
  71. package/dist/admin/dashboard/use-calendar-navigation.d.ts.map +1 -0
  72. package/dist/admin/dashboard/use-calendar-navigation.js +168 -0
  73. package/dist/admin/dashboard/use-leave-request-interaction.d.ts +21 -0
  74. package/dist/admin/dashboard/use-leave-request-interaction.d.ts.map +1 -0
  75. package/dist/admin/dashboard/use-leave-request-interaction.js +33 -0
  76. package/dist/admin/icons.d.ts +2 -0
  77. package/dist/admin/icons.d.ts.map +1 -0
  78. package/dist/admin/index.d.ts +9 -0
  79. package/dist/admin/index.d.ts.map +1 -0
  80. package/dist/admin/index.js +62 -0
  81. package/dist/admin/types.d.ts +113 -0
  82. package/dist/admin/types.d.ts.map +1 -0
  83. package/dist/admin/utils/date-range-utils.d.ts +35 -0
  84. package/dist/admin/utils/date-range-utils.d.ts.map +1 -0
  85. package/dist/admin/utils/date-range-utils.js +36 -0
  86. package/dist/admin/utils/date-utils.d.ts +29 -0
  87. package/dist/admin/utils/date-utils.d.ts.map +1 -0
  88. package/dist/admin/utils/date-utils.js +118 -0
  89. package/dist/admin/utils/emoji-utils.d.ts +3 -0
  90. package/dist/admin/utils/emoji-utils.d.ts.map +1 -0
  91. package/dist/admin/utils/emoji-utils.js +16 -0
  92. package/dist/admin/utils/render-adjustment-type.d.ts +17 -0
  93. package/dist/admin/utils/render-adjustment-type.d.ts.map +1 -0
  94. package/dist/admin/utils/render-adjustment-type.js +19 -0
  95. package/dist/admin/utils/render-status.d.ts +3 -0
  96. package/dist/admin/utils/render-status.d.ts.map +1 -0
  97. package/dist/admin/utils/render-status.js +21 -0
  98. package/dist/board/board-column.d.ts +20 -0
  99. package/dist/board/board-column.d.ts.map +1 -0
  100. package/dist/board/board-column.js +233 -0
  101. package/dist/board/index.d.ts +4 -0
  102. package/dist/board/index.d.ts.map +1 -0
  103. package/dist/board/index.js +9 -0
  104. package/dist/board/kanban-board.d.ts +17 -0
  105. package/dist/board/kanban-board.d.ts.map +1 -0
  106. package/dist/board/kanban-board.js +218 -0
  107. package/dist/board/task-card.d.ts +25 -0
  108. package/dist/board/task-card.d.ts.map +1 -0
  109. package/dist/board/task-card.js +169 -0
  110. package/dist/chat/chat-input.d.ts +10 -0
  111. package/dist/chat/chat-input.d.ts.map +1 -0
  112. package/dist/chat/chat-input.js +52 -0
  113. package/dist/chat/chat-panel.d.ts +31 -0
  114. package/dist/chat/chat-panel.d.ts.map +1 -0
  115. package/dist/chat/chat-panel.js +150 -0
  116. package/dist/chat/conversation-list.d.ts +17 -0
  117. package/dist/chat/conversation-list.d.ts.map +1 -0
  118. package/dist/chat/conversation-list.js +98 -0
  119. package/dist/chat/index.d.ts +6 -0
  120. package/dist/chat/index.d.ts.map +1 -0
  121. package/dist/chat/index.js +12 -0
  122. package/dist/chat/message-list.d.ts +16 -0
  123. package/dist/chat/message-list.d.ts.map +1 -0
  124. package/dist/chat/message-list.js +69 -0
  125. package/dist/chat/streaming-text.d.ts +6 -0
  126. package/dist/chat/streaming-text.d.ts.map +1 -0
  127. package/dist/chat/streaming-text.js +29 -0
  128. package/dist/client/accent-provider.d.ts +14 -0
  129. package/dist/client/accent-provider.d.ts.map +1 -0
  130. package/dist/client/accent-provider.js +21 -0
  131. package/dist/client/client-portal-header.d.ts +10 -0
  132. package/dist/client/client-portal-header.d.ts.map +1 -0
  133. package/dist/client/client-portal-header.js +47 -0
  134. package/dist/client/index.d.ts +4 -0
  135. package/dist/client/index.d.ts.map +1 -0
  136. package/dist/client/index.js +8 -0
  137. package/dist/client/project-card.d.ts +11 -0
  138. package/dist/client/project-card.d.ts.map +1 -0
  139. package/dist/client/project-card.js +59 -0
  140. package/dist/dashboard/attendance-cta.d.ts +22 -0
  141. package/dist/dashboard/attendance-cta.d.ts.map +1 -0
  142. package/dist/dashboard/attendance-cta.js +127 -0
  143. package/dist/dashboard/daily-brief.d.ts +13 -0
  144. package/dist/dashboard/daily-brief.d.ts.map +1 -0
  145. package/dist/dashboard/daily-brief.js +66 -0
  146. package/dist/dashboard/index.d.ts +3 -0
  147. package/dist/dashboard/index.d.ts.map +1 -0
  148. package/dist/dashboard/index.js +6 -0
  149. package/dist/index.d.ts +9 -0
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +93 -0
  152. package/dist/page-skeletons.d.ts +5 -0
  153. package/dist/page-skeletons.d.ts.map +1 -0
  154. package/dist/page-skeletons.js +129 -0
  155. package/dist/tasks/activity-tab.d.ts +20 -0
  156. package/dist/tasks/activity-tab.d.ts.map +1 -0
  157. package/dist/tasks/activity-tab.js +184 -0
  158. package/dist/tasks/conversation-tab.d.ts +45 -0
  159. package/dist/tasks/conversation-tab.d.ts.map +1 -0
  160. package/dist/tasks/conversation-tab.js +126 -0
  161. package/dist/tasks/files-tab.d.ts +28 -0
  162. package/dist/tasks/files-tab.d.ts.map +1 -0
  163. package/dist/tasks/files-tab.js +184 -0
  164. package/dist/tasks/index.d.ts +8 -0
  165. package/dist/tasks/index.d.ts.map +1 -0
  166. package/dist/tasks/index.js +16 -0
  167. package/dist/tasks/review-tab.d.ts +32 -0
  168. package/dist/tasks/review-tab.d.ts.map +1 -0
  169. package/dist/tasks/review-tab.js +169 -0
  170. package/dist/tasks/subtasks-tab.d.ts +36 -0
  171. package/dist/tasks/subtasks-tab.d.ts.map +1 -0
  172. package/dist/tasks/subtasks-tab.js +153 -0
  173. package/dist/tasks/task-constants.d.ts +9 -0
  174. package/dist/tasks/task-constants.d.ts.map +1 -0
  175. package/dist/tasks/task-constants.js +21 -0
  176. package/dist/tasks/task-detail-panel.d.ts +93 -0
  177. package/dist/tasks/task-detail-panel.d.ts.map +1 -0
  178. package/dist/tasks/task-detail-panel.js +208 -0
  179. package/dist/tasks/task-properties.d.ts +60 -0
  180. package/dist/tasks/task-properties.d.ts.map +1 -0
  181. package/dist/tasks/task-properties.js +316 -0
  182. package/package.json +67 -0
@@ -0,0 +1,218 @@
1
+ import { jsxs as C, jsx as p } from "react/jsx-runtime";
2
+ import * as Z from "react";
3
+ import { useState as B, useRef as _, useCallback as v, useEffect as P, useMemo as R } from "react";
4
+ import { createPortal as V } from "react-dom";
5
+ import { useSensors as T, useSensor as N, PointerSensor as M, TouchSensor as tt, KeyboardSensor as nt, DndContext as rt, closestCorners as et, DragOverlay as st } from "@dnd-kit/core";
6
+ import { sortableKeyboardCoordinates as ot, SortableContext as it, horizontalListSortingStrategy as at } from "@dnd-kit/sortable";
7
+ import { BoardColumn as ct } from "./board-column.js";
8
+ import { TaskCardOverlay as dt } from "./task-card.js";
9
+ import { IconPlus as lt } from "@tabler/icons-react";
10
+ import { Button as ut } from "@devalok/shilp-sutra/ui";
11
+ function ft() {
12
+ return {
13
+ onDragStart({ active: h }) {
14
+ const d = h.data.current;
15
+ return (d == null ? void 0 : d.type) === "task" ? `Picked up task: ${d.task.title}` : "Picked up item";
16
+ },
17
+ onDragOver({ active: h, over: d }) {
18
+ if (!d) return;
19
+ const a = h.data.current;
20
+ if ((a == null ? void 0 : a.type) === "task")
21
+ return `Task ${a.task.title} is over ${d.id}`;
22
+ },
23
+ onDragEnd({ active: h, over: d }) {
24
+ if (!d) return "Dropped item";
25
+ const a = h.data.current;
26
+ return (a == null ? void 0 : a.type) === "task" ? `Dropped task: ${a.task.title}` : "Dropped item";
27
+ },
28
+ onDragCancel() {
29
+ return "Dragging cancelled";
30
+ }
31
+ };
32
+ }
33
+ const mt = Z.forwardRef(
34
+ function({
35
+ initialData: d,
36
+ onTaskMove: a,
37
+ onTaskAdd: I,
38
+ onColumnRename: y,
39
+ onColumnDelete: S,
40
+ onColumnToggleVisibility: D,
41
+ onClickTask: $,
42
+ onAddColumn: E
43
+ }, g) {
44
+ const [j, x] = B(d), [O, K] = B(null), [w, A] = B(!1), W = _(null), z = v((t) => {
45
+ W.current = t, typeof g == "function" ? g(t) : g && (g.current = t);
46
+ }, [g]);
47
+ P(() => {
48
+ x(d);
49
+ }, [d]), P(() => {
50
+ A(!0);
51
+ }, []);
52
+ const G = T(
53
+ N(M, {
54
+ activationConstraint: {
55
+ distance: 5
56
+ }
57
+ }),
58
+ N(tt, {
59
+ activationConstraint: {
60
+ delay: 200,
61
+ tolerance: 5
62
+ }
63
+ }),
64
+ N(nt, {
65
+ coordinateGetter: ot
66
+ })
67
+ ), L = R(() => ft(), []), m = j.columns, q = m.map((t) => `column-${t.id}`), k = v(
68
+ (t) => {
69
+ for (const n of m)
70
+ if (n.tasks.some((i) => i.id === t))
71
+ return n.id;
72
+ return null;
73
+ },
74
+ [m]
75
+ ), b = v(
76
+ (t, n, i, o) => {
77
+ x((l) => {
78
+ const u = l.columns.map((c) => ({
79
+ ...c,
80
+ tasks: [...c.tasks]
81
+ })), e = u.find((c) => c.id === n), f = u.find((c) => c.id === i);
82
+ if (!e || !f) return l;
83
+ const r = e.tasks.findIndex((c) => c.id === t);
84
+ if (r === -1) return l;
85
+ const [s] = e.tasks.splice(r, 1);
86
+ return f.tasks.splice(o, 0, s), { columns: u };
87
+ });
88
+ },
89
+ []
90
+ ), F = v((t) => {
91
+ const n = t.active.data.current;
92
+ (n == null ? void 0 : n.type) === "task" && K(n.task);
93
+ }, []), H = v(
94
+ (t) => {
95
+ const { active: n, over: i } = t;
96
+ if (!i) return;
97
+ const o = n.id, l = i.id, u = k(o);
98
+ if (!u) return;
99
+ let e = null, f = 0;
100
+ if (l.startsWith("column-")) {
101
+ e = l.replace("column-", "");
102
+ const r = m.find((s) => s.id === e);
103
+ f = (r == null ? void 0 : r.tasks.length) ?? 0;
104
+ } else if (e = k(l), e) {
105
+ const r = m.find((s) => s.id === e);
106
+ f = (r == null ? void 0 : r.tasks.findIndex((s) => s.id === l)) ?? 0;
107
+ }
108
+ !e || u === e || b(o, u, e, f);
109
+ },
110
+ [m, k, b]
111
+ ), J = v(
112
+ (t) => {
113
+ const { active: n, over: i } = t;
114
+ if (K(null), !i) return;
115
+ const o = n.id, l = i.id, u = k(o);
116
+ if (!u) return;
117
+ let e, f;
118
+ if (l.startsWith("column-")) {
119
+ e = l.replace("column-", "");
120
+ const r = m.find((s) => s.id === e);
121
+ if (f = (r == null ? void 0 : r.tasks.length) ?? 0, u === e) {
122
+ const s = r == null ? void 0 : r.tasks.findIndex((c) => c.id === o);
123
+ s !== void 0 && s >= 0 && (f = s);
124
+ }
125
+ } else {
126
+ e = k(l) ?? u;
127
+ const r = m.find((s) => s.id === e);
128
+ f = (r == null ? void 0 : r.tasks.findIndex((s) => s.id === l)) ?? 0;
129
+ }
130
+ if (u === e) {
131
+ const r = m.find((c) => c.id === e), s = r == null ? void 0 : r.tasks.findIndex((c) => c.id === o);
132
+ s !== void 0 && s !== f && b(o, u, e, f);
133
+ }
134
+ a == null || a(o, e, f);
135
+ },
136
+ [m, k, b, a]
137
+ ), Q = (t, n) => {
138
+ I == null || I(t, n);
139
+ }, U = (t, n) => {
140
+ x((i) => ({
141
+ columns: i.columns.map(
142
+ (o) => o.id === t ? { ...o, name: n } : o
143
+ )
144
+ })), y == null || y(t, n);
145
+ }, X = (t) => {
146
+ x((n) => ({
147
+ columns: n.columns.filter((i) => i.id !== t)
148
+ })), S == null || S(t);
149
+ }, Y = (t, n) => {
150
+ x((i) => ({
151
+ columns: i.columns.map(
152
+ (o) => o.id === t ? { ...o, isClientVisible: n } : o
153
+ )
154
+ })), D == null || D(t, n);
155
+ };
156
+ return /* @__PURE__ */ C(
157
+ rt,
158
+ {
159
+ sensors: G,
160
+ collisionDetection: et,
161
+ onDragStart: F,
162
+ onDragOver: H,
163
+ onDragEnd: J,
164
+ accessibility: { announcements: L },
165
+ children: [
166
+ /* @__PURE__ */ C(
167
+ "div",
168
+ {
169
+ ref: z,
170
+ className: "no-scrollbar flex h-full gap-ds-05 overflow-x-auto pb-ds-05",
171
+ children: [
172
+ /* @__PURE__ */ p(
173
+ it,
174
+ {
175
+ items: q,
176
+ strategy: at,
177
+ children: m.map((t, n) => /* @__PURE__ */ p("div", { className: "group flex-shrink-0", children: /* @__PURE__ */ p(
178
+ ct,
179
+ {
180
+ column: t,
181
+ index: n,
182
+ onAddTask: Q,
183
+ onClickTask: $,
184
+ onRenameColumn: U,
185
+ onDeleteColumn: X,
186
+ onToggleVisibility: Y
187
+ }
188
+ ) }, t.id))
189
+ }
190
+ ),
191
+ /* @__PURE__ */ p("div", { className: "flex-shrink-0", children: /* @__PURE__ */ C(
192
+ ut,
193
+ {
194
+ variant: "ghost",
195
+ onClick: E,
196
+ className: "h-ds-md w-[300px] justify-start gap-ds-03 rounded-ds-xl border border-dashed border-border/60 bg-layer-02 text-text-tertiary hover:border-border-interactive hover:bg-interactive-subtle/50 hover:text-interactive",
197
+ children: [
198
+ /* @__PURE__ */ p(lt, { className: "h-ico-sm w-ico-sm" }),
199
+ "Add column"
200
+ ]
201
+ }
202
+ ) })
203
+ ]
204
+ }
205
+ ),
206
+ w && V(
207
+ /* @__PURE__ */ p(st, { dropAnimation: null, children: O ? /* @__PURE__ */ p(dt, { task: O }) : null }),
208
+ document.body
209
+ )
210
+ ]
211
+ }
212
+ );
213
+ }
214
+ );
215
+ mt.displayName = "KanbanBoard";
216
+ export {
217
+ mt as KanbanBoard
218
+ };
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+ export interface BoardTask {
3
+ id: string;
4
+ title: string;
5
+ priority: string;
6
+ labels: string[];
7
+ dueDate: string | null;
8
+ isBlocked: boolean;
9
+ assignees: {
10
+ id: string;
11
+ name: string;
12
+ image: string | null;
13
+ }[];
14
+ }
15
+ export interface TaskCardProps {
16
+ task: BoardTask;
17
+ onClickTask?: (taskId: string) => void;
18
+ }
19
+ declare const TaskCard: React.ForwardRefExoticComponent<TaskCardProps & React.RefAttributes<HTMLDivElement>>;
20
+ export { TaskCard };
21
+ export interface TaskCardOverlayProps {
22
+ task: BoardTask;
23
+ }
24
+ export declare const TaskCardOverlay: React.ForwardRefExoticComponent<TaskCardOverlayProps & React.RefAttributes<HTMLDivElement>>;
25
+ //# sourceMappingURL=task-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-card.d.ts","sourceRoot":"","sources":["../../src/board/task-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAgB9B,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAA;CAChE;AAqKD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAA;IACf,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AAED,QAAA,MAAM,QAAQ,sFA6Cb,CAAA;AAID,OAAO,EAAE,QAAQ,EAAE,CAAA;AAMnB,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,eAAO,MAAM,eAAe,6FAQ3B,CAAA"}
@@ -0,0 +1,169 @@
1
+ import { jsx as t, jsxs as l } from "react/jsx-runtime";
2
+ import * as m from "react";
3
+ import { useSortable as x } from "@dnd-kit/sortable";
4
+ import { CSS as v } from "@dnd-kit/utilities";
5
+ import { cva as y } from "class-variance-authority";
6
+ import { cn as c } from "@devalok/shilp-sutra/ui";
7
+ import { Badge as N } from "@devalok/shilp-sutra/ui";
8
+ import { AvatarGroup as w } from "@devalok/shilp-sutra/composed";
9
+ import { IconGripVertical as T, IconCalendar as D } from "@tabler/icons-react";
10
+ import { PRIORITY_LABELS as C, PRIORITY_DOT_COLORS as R } from "../tasks/task-constants.js";
11
+ function O(e) {
12
+ const a = new Date(e), s = /* @__PURE__ */ new Date(), r = a.getTime() - s.getTime(), i = Math.ceil(r / (1e3 * 60 * 60 * 24));
13
+ return i < 0 ? { label: "Overdue", className: "text-text-error" } : i === 0 ? { label: "Today", className: "text-warning" } : i === 1 ? { label: "Tomorrow", className: "text-text-warning" } : {
14
+ label: a.toLocaleDateString("en-IN", { month: "short", day: "numeric" }),
15
+ className: "text-text-tertiary"
16
+ };
17
+ }
18
+ const I = y(
19
+ "group/card relative rounded-ds-lg border border-border/60 bg-layer-01 p-ds-04 shadow-01 transition-[color,background-color,border-color,box-shadow] duration-fast-02 ease-productive-standard hover:shadow-02 hover:border-border cursor-pointer",
20
+ {
21
+ variants: {
22
+ state: {
23
+ default: "",
24
+ dragging: "opacity-[0.38]",
25
+ overlay: "rotate-[2deg] shadow-03 border-border-interactive/60 ring-1 ring-interactive/40"
26
+ },
27
+ blocked: {
28
+ true: "border-l-2 border-l-error",
29
+ false: ""
30
+ }
31
+ },
32
+ defaultVariants: {
33
+ state: "default",
34
+ blocked: !1
35
+ }
36
+ }
37
+ );
38
+ function f({
39
+ task: e,
40
+ isDragging: a,
41
+ isDragOverlay: s,
42
+ dragHandleProps: r,
43
+ onClickTask: i
44
+ }) {
45
+ const n = e.dueDate ? O(e.dueDate) : null;
46
+ return (
47
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
48
+ /* @__PURE__ */ l(
49
+ "div",
50
+ {
51
+ className: I({
52
+ state: s ? "overlay" : a ? "dragging" : "default",
53
+ blocked: e.isBlocked
54
+ }),
55
+ onClick: () => i == null ? void 0 : i(e.id),
56
+ children: [
57
+ /* @__PURE__ */ l("div", { className: "flex items-start gap-ds-02b", children: [
58
+ /* @__PURE__ */ t(
59
+ "button",
60
+ {
61
+ className: c(
62
+ "mt-ds-01 flex-shrink-0 cursor-grab rounded p-ds-01 opacity-0 transition-opacity",
63
+ "group-hover/card:opacity-[0.38] hover:!opacity-100",
64
+ "active:cursor-grabbing",
65
+ s && "opacity-[0.38]"
66
+ ),
67
+ ...(r == null ? void 0 : r.attributes) ?? {},
68
+ ...(r == null ? void 0 : r.listeners) ?? {},
69
+ "aria-label": `Drag handle for task: ${e.title}`,
70
+ "aria-roledescription": "sortable",
71
+ onClick: (o) => o.stopPropagation(),
72
+ children: /* @__PURE__ */ t(T, { className: "h-ico-sm w-ico-sm text-icon-secondary" })
73
+ }
74
+ ),
75
+ /* @__PURE__ */ t("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ t("p", { className: "text-ds-md font-medium text-text-primary line-clamp-2", children: e.title }) })
76
+ ] }),
77
+ /* @__PURE__ */ l("div", { className: "mt-ds-03 flex items-center gap-ds-03", children: [
78
+ /* @__PURE__ */ t(
79
+ "div",
80
+ {
81
+ className: c(
82
+ "h-2 w-2 rounded-ds-full flex-shrink-0",
83
+ R[e.priority]
84
+ ),
85
+ title: C[e.priority]
86
+ }
87
+ ),
88
+ e.labels.length > 0 && /* @__PURE__ */ l("div", { className: "flex items-center gap-ds-02 overflow-hidden", children: [
89
+ e.labels.slice(0, 2).map((o) => /* @__PURE__ */ t(N, { size: "sm", variant: "neutral", className: "max-w-[80px] truncate", children: o }, o)),
90
+ e.labels.length > 2 && /* @__PURE__ */ l("span", { className: "text-ds-xs text-text-tertiary", children: [
91
+ "+",
92
+ e.labels.length - 2
93
+ ] })
94
+ ] }),
95
+ /* @__PURE__ */ t("div", { className: "flex-1" }),
96
+ n && /* @__PURE__ */ l(
97
+ "div",
98
+ {
99
+ className: c(
100
+ "flex items-center gap-ds-01 text-ds-xs leading-tight",
101
+ n.className
102
+ ),
103
+ children: [
104
+ /* @__PURE__ */ t(D, { className: "h-2.5 w-2.5" }),
105
+ /* @__PURE__ */ t("span", { children: n.label })
106
+ ]
107
+ }
108
+ ),
109
+ e.assignees.length > 0 && /* @__PURE__ */ t(
110
+ w,
111
+ {
112
+ users: e.assignees,
113
+ size: "sm",
114
+ max: 2,
115
+ showTooltip: !1
116
+ }
117
+ )
118
+ ] })
119
+ ]
120
+ }
121
+ )
122
+ );
123
+ }
124
+ const S = m.forwardRef(
125
+ function({ task: a, onClickTask: s }, r) {
126
+ const {
127
+ attributes: i,
128
+ listeners: n,
129
+ setNodeRef: o,
130
+ transform: u,
131
+ transition: p,
132
+ isDragging: h
133
+ } = x({
134
+ id: a.id,
135
+ data: {
136
+ type: "task",
137
+ task: a
138
+ }
139
+ }), b = m.useCallback(
140
+ (d) => {
141
+ o(d), typeof r == "function" ? r(d) : r && (r.current = d);
142
+ },
143
+ [r, o]
144
+ ), g = {
145
+ transform: v.Transform.toString(u),
146
+ transition: p
147
+ };
148
+ return /* @__PURE__ */ t("div", { ref: b, style: g, children: /* @__PURE__ */ t(
149
+ f,
150
+ {
151
+ task: a,
152
+ isDragging: h,
153
+ dragHandleProps: { attributes: i, listeners: n },
154
+ onClickTask: s
155
+ }
156
+ ) });
157
+ }
158
+ );
159
+ S.displayName = "TaskCard";
160
+ const L = m.forwardRef(
161
+ function({ task: a }, s) {
162
+ return /* @__PURE__ */ t("div", { ref: s, children: /* @__PURE__ */ t(f, { task: a, isDragOverlay: !0 }) });
163
+ }
164
+ );
165
+ L.displayName = "TaskCardOverlay";
166
+ export {
167
+ S as TaskCard,
168
+ L as TaskCardOverlay
169
+ };
@@ -0,0 +1,10 @@
1
+ import * as React from 'react';
2
+ export interface ChatInputProps {
3
+ onSubmit: (message: string) => void;
4
+ onCancel?: () => void;
5
+ isStreaming?: boolean;
6
+ placeholder?: string;
7
+ disclaimer?: string;
8
+ }
9
+ export declare const ChatInput: React.ForwardRefExoticComponent<ChatInputProps & React.RefAttributes<HTMLDivElement>>;
10
+ //# sourceMappingURL=chat-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-input.d.ts","sourceRoot":"","sources":["../../src/chat/chat-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,uFAyErB,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { jsxs as c, jsx as t } from "react/jsx-runtime";
2
+ import * as b from "react";
3
+ import { useState as y, useRef as g, useCallback as o } from "react";
4
+ import { IconSquare as N, IconSend as w } from "@tabler/icons-react";
5
+ import { Button as m } from "@devalok/shilp-sutra/ui";
6
+ const k = b.forwardRef(
7
+ function({
8
+ onSubmit: d,
9
+ onCancel: h,
10
+ isStreaming: s = !1,
11
+ placeholder: p = "Ask Karm AI...",
12
+ disclaimer: l = "AI responses may be inaccurate. Verify important information."
13
+ }, u) {
14
+ const [r, i] = y(""), a = g(null), f = o(() => {
15
+ const e = a.current;
16
+ e && (e.style.height = "auto", e.style.height = Math.min(e.scrollHeight, 160) + "px");
17
+ }, []), n = o(() => {
18
+ const e = r.trim();
19
+ !e || s || (i(""), a.current && (a.current.style.height = "auto"), d(e));
20
+ }, [r, s, d]), x = o(
21
+ (e) => {
22
+ e.key === "Enter" && !e.shiftKey && (e.preventDefault(), n());
23
+ },
24
+ [n]
25
+ );
26
+ return /* @__PURE__ */ c("div", { ref: u, className: "border-t border-border bg-layer-01 p-ds-04", children: [
27
+ /* @__PURE__ */ c("div", { className: "flex items-end gap-ds-03 rounded-ds-xl border border-border bg-field px-ds-04 py-ds-03", children: [
28
+ /* @__PURE__ */ t(
29
+ "textarea",
30
+ {
31
+ ref: a,
32
+ value: r,
33
+ onChange: (e) => {
34
+ i(e.target.value), f();
35
+ },
36
+ onKeyDown: x,
37
+ placeholder: p,
38
+ disabled: s,
39
+ rows: 1,
40
+ className: "text-ds-md no-scrollbar max-h-[160px] min-h-ds-xs flex-1 resize-none bg-transparent text-text-primary placeholder:text-text-placeholder focus:outline-none disabled:opacity-[0.38]"
41
+ }
42
+ ),
43
+ s ? /* @__PURE__ */ t(m, { variant: "error", size: "icon-sm", className: "h-ds-sm w-ds-sm shrink-0 rounded-ds-lg", onClick: h, "aria-label": "Stop generating", children: /* @__PURE__ */ t(N, { className: "h-ico-sm w-ico-sm" }) }) : /* @__PURE__ */ t(m, { size: "icon-sm", className: "h-ds-sm w-ds-sm shrink-0 rounded-ds-lg", onClick: n, disabled: !r.trim(), "aria-label": "Send message", children: /* @__PURE__ */ t(w, { className: "h-ico-sm w-ico-sm" }) })
44
+ ] }),
45
+ l && /* @__PURE__ */ t("p", { className: "text-ds-sm mt-ds-02b text-center text-text-placeholder", children: l })
46
+ ] });
47
+ }
48
+ );
49
+ k.displayName = "ChatInput";
50
+ export {
51
+ k as ChatInput
52
+ };
@@ -0,0 +1,31 @@
1
+ import { ChatMessage } from './message-list';
2
+ import { Conversation } from './conversation-list';
3
+ import * as React from 'react';
4
+ export interface Agent {
5
+ id: string;
6
+ name: string;
7
+ desc: string;
8
+ }
9
+ export interface ChatPanelProps {
10
+ isOpen: boolean;
11
+ onOpenChange: (open: boolean) => void;
12
+ messages: ChatMessage[];
13
+ conversations: Conversation[];
14
+ agents?: Agent[];
15
+ selectedAgentId?: string;
16
+ activeConversationId?: string | null;
17
+ isStreaming?: boolean;
18
+ streamingText?: string;
19
+ isLoadingMessages?: boolean;
20
+ isLoadingConversations?: boolean;
21
+ onSendMessage: (message: string) => void;
22
+ onCancelStream?: () => void;
23
+ onSelectAgent?: (agentId: string) => void;
24
+ onStartNewChat?: () => void;
25
+ onSelectConversation?: (id: string) => void;
26
+ onArchiveConversation?: (id: string) => void;
27
+ onDeleteConversation?: (id: string) => void;
28
+ }
29
+ declare const ChatPanel: React.ForwardRefExoticComponent<ChatPanelProps & React.RefAttributes<HTMLDivElement>>;
30
+ export { ChatPanel };
31
+ //# sourceMappingURL=chat-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-panel.d.ts","sourceRoot":"","sources":["../../src/chat/chat-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE9D,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAezE,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,aAAa,EAAE,YAAY,EAAE,CAAA;IAC7B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C;AAiBD,QAAA,MAAM,SAAS,uFAwJd,CAAA;AAID,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -0,0 +1,150 @@
1
+ import { jsx as e, jsxs as d, Fragment as M } from "react/jsx-runtime";
2
+ import * as P from "react";
3
+ import { useState as T } from "react";
4
+ import { Sheet as j, SheetContent as I, SheetTitle as C } from "@devalok/shilp-sutra/ui";
5
+ import { MessageList as H } from "./message-list.js";
6
+ import { ChatInput as L } from "./chat-input.js";
7
+ import { ConversationList as E } from "./conversation-list.js";
8
+ import { cn as F } from "@devalok/shilp-sutra/ui";
9
+ import { IconChevronDown as G, IconMessagePlus as R, IconHistory as K, IconX as U } from "@tabler/icons-react";
10
+ import { DropdownMenu as V, DropdownMenuTrigger as X, DropdownMenuContent as _, DropdownMenuItem as q } from "@devalok/shilp-sutra/ui";
11
+ const z = [
12
+ { id: "devadoot", name: "Devadoot", desc: "General Assistant" },
13
+ { id: "prahari", name: "Prahari", desc: "Attendance & Time" },
14
+ { id: "sutradhar", name: "Sutradhar", desc: "Tasks & Projects" },
15
+ { id: "sahayak", name: "Sahayak", desc: "Team Helper" },
16
+ { id: "vidwan", name: "Vidwan", desc: "Knowledge Expert" },
17
+ { id: "sanchalak", name: "Sanchalak", desc: "Manager Advisor" },
18
+ { id: "dwar-palak", name: "Dwar-Palak", desc: "Access Control" }
19
+ ], A = P.forwardRef(
20
+ function({
21
+ isOpen: p,
22
+ onOpenChange: m,
23
+ messages: x,
24
+ conversations: f,
25
+ agents: i = z,
26
+ selectedAgentId: n = "devadoot",
27
+ activeConversationId: b,
28
+ isStreaming: h = !1,
29
+ streamingText: u = "",
30
+ isLoadingMessages: y = !1,
31
+ isLoadingConversations: w = !1,
32
+ onSendMessage: N,
33
+ onCancelStream: v,
34
+ onSelectAgent: o,
35
+ onStartNewChat: a,
36
+ onSelectConversation: c,
37
+ onArchiveConversation: k,
38
+ onDeleteConversation: D
39
+ }, g) {
40
+ const [t, l] = T(!1), r = i.find((s) => s.id === n) ?? i[0];
41
+ return /* @__PURE__ */ e(j, { open: p, onOpenChange: m, children: /* @__PURE__ */ d(
42
+ I,
43
+ {
44
+ ref: g,
45
+ side: "right",
46
+ className: "flex w-full flex-col gap-0 border-l border-border bg-layer-01 p-0 sm:max-w-[480px] [&>button]:hidden",
47
+ children: [
48
+ /* @__PURE__ */ e(C, { className: "sr-only", children: "AI Chat" }),
49
+ /* @__PURE__ */ d("div", { className: "flex items-center gap-ds-03 border-b border-border px-ds-05 py-ds-04", children: [
50
+ /* @__PURE__ */ e("div", { className: "flex-1", children: /* @__PURE__ */ d(V, { children: [
51
+ /* @__PURE__ */ e(X, { asChild: !0, children: /* @__PURE__ */ d(
52
+ "button",
53
+ {
54
+ className: "flex items-center gap-ds-02b rounded-ds-lg px-ds-03 py-ds-02b transition-colors hover:bg-layer-02",
55
+ children: [
56
+ /* @__PURE__ */ e("span", { className: "text-ds-base text-text-primary", children: r == null ? void 0 : r.name }),
57
+ /* @__PURE__ */ e("span", { className: "text-ds-sm text-text-placeholder", children: r == null ? void 0 : r.desc }),
58
+ /* @__PURE__ */ e(G, { className: "h-ico-sm w-ico-sm text-text-placeholder" })
59
+ ]
60
+ }
61
+ ) }),
62
+ /* @__PURE__ */ e(_, { align: "start", className: "w-64", children: i.map((s) => /* @__PURE__ */ e(
63
+ q,
64
+ {
65
+ onClick: () => o == null ? void 0 : o(s.id),
66
+ className: n === s.id ? "bg-layer-02" : "",
67
+ children: /* @__PURE__ */ d("div", { className: "flex flex-col", children: [
68
+ /* @__PURE__ */ e("span", { className: "text-ds-md text-text-primary", children: s.name }),
69
+ /* @__PURE__ */ e("span", { className: "text-ds-sm text-text-placeholder", children: s.desc })
70
+ ] })
71
+ },
72
+ s.id
73
+ )) })
74
+ ] }) }),
75
+ /* @__PURE__ */ e(
76
+ "button",
77
+ {
78
+ onClick: () => {
79
+ a == null || a(), l(!1);
80
+ },
81
+ className: "flex h-ds-sm w-ds-sm items-center justify-center rounded-ds-lg text-text-secondary transition-colors hover:bg-layer-02",
82
+ "aria-label": "New chat",
83
+ children: /* @__PURE__ */ e(R, { className: "h-ico-sm w-ico-sm" })
84
+ }
85
+ ),
86
+ /* @__PURE__ */ e(
87
+ "button",
88
+ {
89
+ onClick: () => l(!t),
90
+ className: F(
91
+ "flex h-ds-sm w-ds-sm items-center justify-center rounded-ds-lg transition-colors hover:bg-layer-02",
92
+ t ? "bg-layer-02 text-text-primary" : "text-text-secondary"
93
+ ),
94
+ "aria-label": "Conversation history",
95
+ children: /* @__PURE__ */ e(K, { className: "h-ico-sm w-ico-sm" })
96
+ }
97
+ ),
98
+ /* @__PURE__ */ e(
99
+ "button",
100
+ {
101
+ onClick: () => m(!1),
102
+ className: "flex h-ds-sm w-ds-sm items-center justify-center rounded-ds-lg text-text-secondary transition-colors hover:bg-layer-02",
103
+ "aria-label": "Close chat",
104
+ children: /* @__PURE__ */ e(U, { className: "h-ico-sm w-ico-sm" })
105
+ }
106
+ )
107
+ ] }),
108
+ t ? /* @__PURE__ */ e(
109
+ E,
110
+ {
111
+ conversations: f,
112
+ activeConversationId: b,
113
+ isLoading: w,
114
+ onSelect: (s) => {
115
+ c == null || c(s), l(!1);
116
+ },
117
+ onNewChat: () => {
118
+ a == null || a(), l(!1);
119
+ },
120
+ onArchive: k,
121
+ onDelete: D
122
+ }
123
+ ) : /* @__PURE__ */ d(M, { children: [
124
+ /* @__PURE__ */ e(
125
+ H,
126
+ {
127
+ messages: x,
128
+ isStreaming: h,
129
+ streamingText: u,
130
+ isLoadingMessages: y
131
+ }
132
+ ),
133
+ /* @__PURE__ */ e(
134
+ L,
135
+ {
136
+ onSubmit: N,
137
+ onCancel: v,
138
+ isStreaming: h
139
+ }
140
+ )
141
+ ] })
142
+ ]
143
+ }
144
+ ) });
145
+ }
146
+ );
147
+ A.displayName = "ChatPanel";
148
+ export {
149
+ A as ChatPanel
150
+ };