@devalok/shilp-sutra-karm 0.18.1 → 0.19.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/_chunks/task-detail-panel.js +1339 -1144
- package/dist/tasks/activity-tab.d.ts +2 -11
- package/dist/tasks/activity-tab.d.ts.map +1 -1
- package/dist/tasks/conversation-tab.d.ts +2 -21
- package/dist/tasks/conversation-tab.d.ts.map +1 -1
- package/dist/tasks/files-tab.d.ts +2 -18
- package/dist/tasks/files-tab.d.ts.map +1 -1
- package/dist/tasks/index.d.ts +12 -6
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +765 -8
- package/dist/tasks/pickers/index.d.ts +16 -0
- package/dist/tasks/pickers/index.d.ts.map +1 -0
- package/dist/tasks/pickers/task-assignee-picker.d.ts +14 -0
- package/dist/tasks/pickers/task-assignee-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-column-picker.d.ts +13 -0
- package/dist/tasks/pickers/task-column-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-date-picker.d.ts +12 -0
- package/dist/tasks/pickers/task-date-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-label-editor.d.ts +13 -0
- package/dist/tasks/pickers/task-label-editor.d.ts.map +1 -0
- package/dist/tasks/pickers/task-member-picker.d.ts +14 -0
- package/dist/tasks/pickers/task-member-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-priority-picker.d.ts +12 -0
- package/dist/tasks/pickers/task-priority-picker.d.ts.map +1 -0
- package/dist/tasks/pickers/task-visibility-picker.d.ts +13 -0
- package/dist/tasks/pickers/task-visibility-picker.d.ts.map +1 -0
- package/dist/tasks/review-tab.d.ts +4 -20
- package/dist/tasks/review-tab.d.ts.map +1 -1
- package/dist/tasks/subtasks-tab.d.ts +2 -18
- package/dist/tasks/subtasks-tab.d.ts.map +1 -1
- package/dist/tasks/tabs/activity-entry.d.ts +9 -0
- package/dist/tasks/tabs/activity-entry.d.ts.map +1 -0
- package/dist/tasks/tabs/activity-timeline.d.ts +8 -0
- package/dist/tasks/tabs/activity-timeline.d.ts.map +1 -0
- package/dist/tasks/tabs/file-drop-zone.d.ts +10 -0
- package/dist/tasks/tabs/file-drop-zone.d.ts.map +1 -0
- package/dist/tasks/tabs/file-item.d.ts +11 -0
- package/dist/tasks/tabs/file-item.d.ts.map +1 -0
- package/dist/tasks/tabs/file-list.d.ts +8 -0
- package/dist/tasks/tabs/file-list.d.ts.map +1 -0
- package/dist/tasks/tabs/index.d.ts +34 -0
- package/dist/tasks/tabs/index.d.ts.map +1 -0
- package/dist/tasks/tabs/message-bubble.d.ts +14 -0
- package/dist/tasks/tabs/message-bubble.d.ts.map +1 -0
- package/dist/tasks/tabs/message-input.d.ts +16 -0
- package/dist/tasks/tabs/message-input.d.ts.map +1 -0
- package/dist/tasks/tabs/message-list.d.ts +9 -0
- package/dist/tasks/tabs/message-list.d.ts.map +1 -0
- package/dist/tasks/tabs/review-card.d.ts +10 -0
- package/dist/tasks/tabs/review-card.d.ts.map +1 -0
- package/dist/tasks/tabs/review-request-button.d.ts +10 -0
- package/dist/tasks/tabs/review-request-button.d.ts.map +1 -0
- package/dist/tasks/tabs/review-response-form.d.ts +11 -0
- package/dist/tasks/tabs/review-response-form.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-add-form.d.ts +9 -0
- package/dist/tasks/tabs/subtask-add-form.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-item.d.ts +12 -0
- package/dist/tasks/tabs/subtask-item.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-list.d.ts +8 -0
- package/dist/tasks/tabs/subtask-list.d.ts.map +1 -0
- package/dist/tasks/tabs/subtask-progress.d.ts +9 -0
- package/dist/tasks/tabs/subtask-progress.d.ts.map +1 -0
- package/dist/tasks/tabs/visibility-warning.d.ts +7 -0
- package/dist/tasks/tabs/visibility-warning.d.ts.map +1 -0
- package/dist/tasks/task-panel.d.ts +104 -0
- package/dist/tasks/task-panel.d.ts.map +1 -0
- package/dist/tasks/task-properties.d.ts +2 -12
- package/dist/tasks/task-properties.d.ts.map +1 -1
- package/dist/tasks/task-types.d.ts +104 -0
- package/dist/tasks/task-types.d.ts.map +1 -0
- package/docs/components/admin/admin-dashboard.md +6 -6
- package/docs/components/admin/admin-utils.md +2 -2
- package/docs/components/admin/break-admin.md +14 -14
- package/docs/components/board/board-provider.md +16 -0
- package/docs/components/board/column-empty.md +1 -1
- package/docs/components/board/task-card.md +4 -0
- package/docs/components/chat/streaming-text.md +1 -1
- package/docs/components/client/client-portal-header.md +2 -2
- package/docs/components/dashboard/attendance-cta.md +3 -3
- package/docs/components/dashboard/daily-brief.md +1 -1
- package/docs/components/tasks/activity-tab.md +4 -0
- package/docs/components/tasks/conversation-tab.md +4 -0
- package/docs/components/tasks/files-tab.md +4 -0
- package/docs/components/tasks/review-tab.md +5 -1
- package/docs/components/tasks/subtasks-tab.md +5 -0
- package/docs/components/tasks/task-assignee-picker.md +36 -0
- package/docs/components/tasks/task-column-picker.md +37 -0
- package/docs/components/tasks/task-date-picker.md +49 -0
- package/docs/components/tasks/task-detail-panel.md +256 -84
- package/docs/components/tasks/task-label-editor.md +42 -0
- package/docs/components/tasks/task-member-picker.md +35 -0
- package/docs/components/tasks/task-panel.md +89 -0
- package/docs/components/tasks/task-priority-picker.md +37 -0
- package/docs/components/tasks/task-properties.md +5 -0
- package/docs/components/tasks/task-visibility-picker.md +38 -0
- package/llms.txt +40 -13
- package/package.json +82 -82
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
interface TaskPanelTabProps {
|
|
4
|
+
/** Unique tab identifier */
|
|
5
|
+
id: string;
|
|
6
|
+
/** Optional icon rendered in the tab trigger */
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
/** Tab trigger label */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Tab panel content */
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Declarative tab definition for TaskPanel.Tabs.
|
|
15
|
+
* Does not render anything on its own — TaskPanelTabs extracts props from these children.
|
|
16
|
+
*/
|
|
17
|
+
declare function TaskPanelTab(_props: TaskPanelTabProps): React.ReactElement | null;
|
|
18
|
+
declare namespace TaskPanelTab {
|
|
19
|
+
var displayName: string;
|
|
20
|
+
}
|
|
21
|
+
interface TaskPanelRootProps {
|
|
22
|
+
children: React.ReactNode;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
declare function TaskPanelRoot({ children, className }: TaskPanelRootProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare namespace TaskPanelRoot {
|
|
27
|
+
var displayName: string;
|
|
28
|
+
}
|
|
29
|
+
interface TaskPanelHeaderProps {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
className?: string;
|
|
32
|
+
}
|
|
33
|
+
declare function TaskPanelHeader({ children, className }: TaskPanelHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
declare namespace TaskPanelHeader {
|
|
35
|
+
var displayName: string;
|
|
36
|
+
}
|
|
37
|
+
interface TaskPanelTitleProps {
|
|
38
|
+
/** Current title value */
|
|
39
|
+
value: string;
|
|
40
|
+
/** Whether the title can be edited inline */
|
|
41
|
+
editable?: boolean;
|
|
42
|
+
/** Called when the user commits a title change */
|
|
43
|
+
onUpdate?: (title: string) => void;
|
|
44
|
+
/** When true, shows a small "Subtask" label above the title */
|
|
45
|
+
subtask?: boolean;
|
|
46
|
+
className?: string;
|
|
47
|
+
}
|
|
48
|
+
declare function TaskPanelTitle({ value, editable, onUpdate, subtask, className, }: TaskPanelTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
declare namespace TaskPanelTitle {
|
|
50
|
+
var displayName: string;
|
|
51
|
+
}
|
|
52
|
+
interface TaskPanelPropertiesProps {
|
|
53
|
+
children: React.ReactNode;
|
|
54
|
+
className?: string;
|
|
55
|
+
}
|
|
56
|
+
declare function TaskPanelProperties({ children, className }: TaskPanelPropertiesProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
declare namespace TaskPanelProperties {
|
|
58
|
+
var displayName: string;
|
|
59
|
+
}
|
|
60
|
+
interface TaskPanelPropertyProps {
|
|
61
|
+
/** Icon element rendered at the start of the label area */
|
|
62
|
+
icon: React.ReactNode;
|
|
63
|
+
/** Human-readable property label */
|
|
64
|
+
label: string;
|
|
65
|
+
/** Property value / control */
|
|
66
|
+
children: React.ReactNode;
|
|
67
|
+
className?: string;
|
|
68
|
+
}
|
|
69
|
+
declare function TaskPanelProperty({ icon, label, children, className }: TaskPanelPropertyProps): import("react/jsx-runtime").JSX.Element;
|
|
70
|
+
declare namespace TaskPanelProperty {
|
|
71
|
+
var displayName: string;
|
|
72
|
+
}
|
|
73
|
+
interface TaskPanelTabsProps {
|
|
74
|
+
/** Default active tab id */
|
|
75
|
+
defaultTab: string;
|
|
76
|
+
/** Called when the active tab changes */
|
|
77
|
+
onTabChange?: (tab: string) => void;
|
|
78
|
+
/** Must contain TaskPanel.Tab children */
|
|
79
|
+
children: React.ReactNode;
|
|
80
|
+
className?: string;
|
|
81
|
+
}
|
|
82
|
+
declare function TaskPanelTabs({ defaultTab, onTabChange, children, className, }: TaskPanelTabsProps): import("react/jsx-runtime").JSX.Element;
|
|
83
|
+
declare namespace TaskPanelTabs {
|
|
84
|
+
var displayName: string;
|
|
85
|
+
}
|
|
86
|
+
interface TaskPanelLoadingProps {
|
|
87
|
+
className?: string;
|
|
88
|
+
}
|
|
89
|
+
declare function TaskPanelLoading({ className }: TaskPanelLoadingProps): import("react/jsx-runtime").JSX.Element;
|
|
90
|
+
declare namespace TaskPanelLoading {
|
|
91
|
+
var displayName: string;
|
|
92
|
+
}
|
|
93
|
+
declare const TaskPanel: typeof TaskPanelRoot & {
|
|
94
|
+
Header: typeof TaskPanelHeader;
|
|
95
|
+
Title: typeof TaskPanelTitle;
|
|
96
|
+
Properties: typeof TaskPanelProperties;
|
|
97
|
+
Property: typeof TaskPanelProperty;
|
|
98
|
+
Tabs: typeof TaskPanelTabs;
|
|
99
|
+
Tab: typeof TaskPanelTab;
|
|
100
|
+
Loading: typeof TaskPanelLoading;
|
|
101
|
+
};
|
|
102
|
+
export { TaskPanel };
|
|
103
|
+
export type { TaskPanelRootProps, TaskPanelHeaderProps, TaskPanelTitleProps, TaskPanelPropertiesProps, TaskPanelPropertyProps, TaskPanelTabsProps, TaskPanelTabProps, TaskPanelLoadingProps, };
|
|
104
|
+
//# sourceMappingURL=task-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Member, Column } from './task-types';
|
|
2
3
|
import * as React from 'react';
|
|
3
|
-
export
|
|
4
|
-
id: string;
|
|
5
|
-
name: string;
|
|
6
|
-
email?: string;
|
|
7
|
-
image?: string | null;
|
|
8
|
-
}
|
|
9
|
-
export interface Column {
|
|
10
|
-
id: string;
|
|
11
|
-
name: string;
|
|
12
|
-
isDefault?: boolean;
|
|
13
|
-
isTerminal?: boolean;
|
|
14
|
-
}
|
|
4
|
+
export type { Member, Column };
|
|
15
5
|
interface TaskData {
|
|
16
6
|
id: string;
|
|
17
7
|
columnId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-properties.d.ts","sourceRoot":"","sources":["../../src/tasks/task-properties.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"task-properties.d.ts","sourceRoot":"","sources":["../../src/tasks/task-properties.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA6B9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAClD,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AAM9B,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;IAC9C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,UAAU,GAAG,UAAU,CAAA;CACpC;AAED,UAAU,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACxE,IAAI,EAAE,QAAQ,CAAA;IACd,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,uEAAuE;IACvE,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAA;IAC1E,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,KAAK,EAAE,IAAI,GAAG,IAAI,CAAA;QAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAA;QACrC,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,KAAK,KAAK,CAAC,SAAS,CAAA;IACrB,gGAAgG;IAChG,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAA;CACvC;AA0DD,QAAA,MAAM,cAAc,4FAoXnB,CAAA;AAID,OAAO,EAAE,cAAc,EAAE,CAAA;AACzB,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export type Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';
|
|
3
|
+
export type Visibility = 'INTERNAL' | 'EVERYONE';
|
|
4
|
+
export type CommentAuthorType = 'INTERNAL' | 'CLIENT';
|
|
5
|
+
export interface LabelOption {
|
|
6
|
+
name: string;
|
|
7
|
+
color?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Member {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
email?: string;
|
|
13
|
+
image?: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface Column {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
isDefault?: boolean;
|
|
19
|
+
isTerminal?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface Subtask {
|
|
22
|
+
id: string;
|
|
23
|
+
title: string;
|
|
24
|
+
priority: Priority;
|
|
25
|
+
columnId: string;
|
|
26
|
+
column?: {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
isTerminal?: boolean;
|
|
30
|
+
};
|
|
31
|
+
assignees: {
|
|
32
|
+
user: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
image?: string | null;
|
|
36
|
+
};
|
|
37
|
+
}[];
|
|
38
|
+
}
|
|
39
|
+
export interface ReviewUser {
|
|
40
|
+
id: string;
|
|
41
|
+
name: string;
|
|
42
|
+
image: string | null;
|
|
43
|
+
}
|
|
44
|
+
export interface ReviewRequest {
|
|
45
|
+
id: string;
|
|
46
|
+
taskId: string;
|
|
47
|
+
status: 'PENDING' | 'APPROVED' | 'CHANGES_REQUESTED' | 'REJECTED';
|
|
48
|
+
feedback: string | null;
|
|
49
|
+
requestedBy: ReviewUser;
|
|
50
|
+
reviewer: ReviewUser;
|
|
51
|
+
createdAt: string;
|
|
52
|
+
updatedAt: string;
|
|
53
|
+
}
|
|
54
|
+
export interface CommentAuthor {
|
|
55
|
+
id: string;
|
|
56
|
+
name: string;
|
|
57
|
+
email?: string;
|
|
58
|
+
image?: string | null;
|
|
59
|
+
}
|
|
60
|
+
export interface Comment {
|
|
61
|
+
id: string;
|
|
62
|
+
taskId: string;
|
|
63
|
+
authorType: CommentAuthorType;
|
|
64
|
+
authorId: string;
|
|
65
|
+
content: string;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
updatedAt: string;
|
|
68
|
+
internalAuthor?: CommentAuthor | null;
|
|
69
|
+
clientAuthor?: {
|
|
70
|
+
id: string;
|
|
71
|
+
name: string;
|
|
72
|
+
email: string;
|
|
73
|
+
} | null;
|
|
74
|
+
}
|
|
75
|
+
export interface TaskFile {
|
|
76
|
+
id: string;
|
|
77
|
+
taskId: string;
|
|
78
|
+
title: string;
|
|
79
|
+
fileUrl: string;
|
|
80
|
+
downloadUrl?: string;
|
|
81
|
+
fileType: string | null;
|
|
82
|
+
uploadedBy: {
|
|
83
|
+
id: string;
|
|
84
|
+
name: string;
|
|
85
|
+
image: string | null;
|
|
86
|
+
};
|
|
87
|
+
createdAt: string;
|
|
88
|
+
/** External link (e.g. Google Drive) displayed alongside the download button */
|
|
89
|
+
externalUrl?: string;
|
|
90
|
+
/** Label for the external link tooltip (default: "Open externally") */
|
|
91
|
+
externalLabel?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface AuditLogEntry {
|
|
94
|
+
id: string;
|
|
95
|
+
timestamp: string;
|
|
96
|
+
actorType: 'USER' | 'CLIENT' | 'SYSTEM' | 'AGENT';
|
|
97
|
+
actorId: string | null;
|
|
98
|
+
action: string;
|
|
99
|
+
entityType: string;
|
|
100
|
+
entityId: string;
|
|
101
|
+
projectId: string | null;
|
|
102
|
+
metadata: Record<string, unknown> | null;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=task-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-types.d.ts","sourceRoot":"","sources":["../../src/tasks/task-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
Compound component for the admin attendance dashboard. Uses React Context internally.
|
|
8
8
|
All sub-components must be rendered inside `<AdminDashboard.Root>`.
|
|
9
9
|
|
|
10
|
-
Exports: AdminDashboard (compound), AdminDashboardSkeleton, Calendar, BreakRequestCard, LeaveRequests, DashboardHeader, AttendanceOverview, AssociateDetail, CorrectionList, RenderDate
|
|
10
|
+
Exports: AdminDashboard (compound), AdminDashboard.Content, AdminDashboardSkeleton, Calendar, BreakRequestCard, LeaveRequests, DashboardHeader, AttendanceOverview, AssociateDetail, CorrectionList, RenderDate
|
|
11
11
|
|
|
12
12
|
## Props
|
|
13
13
|
|
|
14
14
|
### AdminDashboard.Root (AdminDashboardRootProps)
|
|
15
15
|
currentUserId: string (REQUIRED)
|
|
16
16
|
currentUserRole: UserRole (REQUIRED)
|
|
17
|
-
currentUser
|
|
17
|
+
currentUser?: AdminUser
|
|
18
18
|
assetsBaseUrl: string (default: "")
|
|
19
19
|
userImages: Record<string, string> (default: {})
|
|
20
20
|
isLoading: boolean (default: false)
|
|
@@ -31,8 +31,8 @@ Exports: AdminDashboard (compound), AdminDashboardSkeleton, Calendar, BreakReque
|
|
|
31
31
|
...HTMLDivElement attributes
|
|
32
32
|
|
|
33
33
|
### AdminDashboard.AttendanceOverview (AdminDashboardAttendanceOverviewProps)
|
|
34
|
-
groupedAttendance
|
|
35
|
-
users
|
|
34
|
+
groupedAttendance?: GroupedAttendance | null (default: null)
|
|
35
|
+
users?: AdminUser[] (default: [])
|
|
36
36
|
...HTMLDivElement attributes
|
|
37
37
|
|
|
38
38
|
### AdminDashboard.AssociateDetail (AdminDashboardAssociateDetailProps)
|
|
@@ -49,8 +49,8 @@ Exports: AdminDashboard (compound), AdminDashboardSkeleton, Calendar, BreakReque
|
|
|
49
49
|
...HTMLDivElement attributes
|
|
50
50
|
|
|
51
51
|
### AdminDashboard.LeaveRequests (AdminDashboardLeaveRequestsProps)
|
|
52
|
-
requests
|
|
53
|
-
corrections
|
|
52
|
+
requests?: BreakRequest[] (default: [])
|
|
53
|
+
corrections?: AttendanceCorrection[] (default: [])
|
|
54
54
|
onApproveBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
|
|
55
55
|
onRejectBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
|
|
56
56
|
onApproveCorrection: (correctionId: string) => void | Promise<void>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
Utility functions for date formatting, status rendering, and emoji handling.
|
|
8
8
|
|
|
9
|
-
Exports: AdjustmentType, renderAdjustmentType, renderStatus, formatDate, formatDateIST, formatTimeIST, formatDateWithWeekday, formatOptionalDate, getDaySuffix, isSameDay, getWeekDays, getMonthDays, getStartOfDay, getEndOfDay, removeAllEmojis, removeEmojiAtStart
|
|
9
|
+
Exports: AdjustmentType, renderAdjustmentType, renderStatus, formatDate, formatDateIST, formatTimeIST, formatDateWithWeekday, formatOptionalDate, getDaySuffix, isSameDay, getWeekDays, getMonthDays, getStartOfDay, getEndOfDay, removeAllEmojis, removeEmojiAtStart
|
|
10
10
|
|
|
11
11
|
## Functions
|
|
12
12
|
|
|
@@ -82,7 +82,7 @@ Checks if two dates are the same calendar day. Returns `false` if either argumen
|
|
|
82
82
|
```ts
|
|
83
83
|
function getWeekDays(currentDate: string | Date, selectedDate: string | Date): WeekDay[]
|
|
84
84
|
```
|
|
85
|
-
Returns 7-day array (Sun-Sat) for the week containing `currentDate`. Each entry has `{ day, date, fullDate, isToday, isActive }`.
|
|
85
|
+
Returns 7-day array (Sun-Sat) for the week containing `currentDate`. Each entry has `{ day, date, fullDate, isToday, isActive, hasBreak?, isAbsent? }`.
|
|
86
86
|
|
|
87
87
|
### getMonthDays
|
|
88
88
|
```ts
|
|
@@ -24,20 +24,20 @@ Exports: BreakAdmin (compound), BreakAdminHeader, Breaks, LeaveRequest, BreakBal
|
|
|
24
24
|
isLoadingBreaks: boolean (default: false)
|
|
25
25
|
isLoadingRequests: boolean (default: false)
|
|
26
26
|
isLoadingBalance: boolean (default: false)
|
|
27
|
-
existingBreaks
|
|
28
|
-
filters
|
|
29
|
-
onFilterChange
|
|
30
|
-
onApproveRequest
|
|
31
|
-
onRejectRequest
|
|
32
|
-
onApproveCashout
|
|
33
|
-
onRejectCashout
|
|
34
|
-
onRefresh
|
|
35
|
-
onSaveBreak
|
|
36
|
-
onDeleteBreak
|
|
37
|
-
onSaveBalance
|
|
38
|
-
onFetchMonthBreaks
|
|
39
|
-
realtimeCallbacks
|
|
40
|
-
children
|
|
27
|
+
existingBreaks?: BreakRequest[]
|
|
28
|
+
filters?: BreakAdminFilters
|
|
29
|
+
onFilterChange?: (filters: BreakAdminFilters) => void
|
|
30
|
+
onApproveRequest?: (requestId: string, comment?: string, isCorrection?: boolean, request?: BreakRequest) => void
|
|
31
|
+
onRejectRequest?: (requestId: string, comment?: string, isCorrection?: boolean, request?: BreakRequest) => void
|
|
32
|
+
onApproveCashout?: (requestId: string) => void
|
|
33
|
+
onRejectCashout?: (requestId: string) => void
|
|
34
|
+
onRefresh?: () => void
|
|
35
|
+
onSaveBreak?: (data: { requestId: string; userId: string; status: string; adminComment: string; startDate: string; endDate: string; isEditing: boolean }) => void
|
|
36
|
+
onDeleteBreak?: () => void
|
|
37
|
+
onSaveBalance?: (data: { userId: string; cashOutDays: number; carryForward: number; year: number }) => void
|
|
38
|
+
onFetchMonthBreaks?: (month: number, year: number) => Promise<BreakRequest[]>
|
|
39
|
+
realtimeCallbacks?: RealtimeCallbacks
|
|
40
|
+
children?: ReactNode
|
|
41
41
|
...HTMLDivElement attributes
|
|
42
42
|
|
|
43
43
|
### BreakAdmin.Header
|
|
@@ -51,6 +51,22 @@
|
|
|
51
51
|
setHighlightMyTasks: (on: boolean) => void
|
|
52
52
|
activeTask: BoardTask | null
|
|
53
53
|
setActiveTask: (task: BoardTask | null) => void
|
|
54
|
+
onTaskMove: (taskId: string, toColumnId: string, newOrder: number) => void
|
|
55
|
+
onTaskAdd: (columnId: string, options: NewTaskOptions) => void
|
|
56
|
+
onBulkAction: (action: BulkAction) => void
|
|
57
|
+
onColumnReorder: (columnId: string, newIndex: number) => void
|
|
58
|
+
onColumnRename: (columnId: string, name: string) => void
|
|
59
|
+
onColumnDelete: (columnId: string) => void
|
|
60
|
+
onColumnToggleVisibility: (columnId: string, visible: boolean) => void
|
|
61
|
+
onColumnWipLimitChange: (columnId: string, limit: number | null) => void
|
|
62
|
+
onClickTask: (taskId: string) => void
|
|
63
|
+
onAddColumn: () => void
|
|
64
|
+
onQuickPriorityChange: (taskId: string, priority: string) => void
|
|
65
|
+
onQuickAssign: (taskId: string, userId: string) => void
|
|
66
|
+
onQuickDueDateChange: (taskId: string, date: string | null) => void
|
|
67
|
+
onQuickLabelAdd: (taskId: string, label: string) => void
|
|
68
|
+
onQuickVisibilityChange: (taskId: string, visibility: string) => void
|
|
69
|
+
onQuickDelete: (taskId: string) => void
|
|
54
70
|
|
|
55
71
|
## Example
|
|
56
72
|
```jsx
|
|
@@ -24,7 +24,7 @@ Cycles through 4 SVG illustrations by column index:
|
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
## Gotchas
|
|
27
|
-
- When isDropTarget=true, shows "Drop tasks here" text instead of the default empty state
|
|
27
|
+
- When isDropTarget=true, shows "Drop tasks here" text instead of the default empty state ("No tasks yet" + "Add a task" button).
|
|
28
28
|
- Illustrations use currentColor (inherits text-surface-fg-subtle).
|
|
29
29
|
- Forwards ref to outer div.
|
|
30
30
|
|
|
@@ -26,10 +26,14 @@
|
|
|
26
26
|
selected: boolean (default: false) — adds accent ring
|
|
27
27
|
dimmed: boolean (default: false) — reduces opacity
|
|
28
28
|
|
|
29
|
+
> **Note:** These are INTERNAL visual states derived from board context (selectedTaskIds, focusedTaskId, highlightMyTasks, drag state, task.isBlocked). Consumers only pass `task: BoardTask` and standard HTML attributes — the component resolves variant values internally.
|
|
30
|
+
|
|
29
31
|
## Compact Card Variants (CVA)
|
|
30
32
|
selected: boolean (default: false)
|
|
31
33
|
dimmed: boolean (default: false)
|
|
32
34
|
|
|
35
|
+
> **Note:** Same as above — these are INTERNAL visual states. Consumers only pass `task: BoardTask` and standard HTML attributes.
|
|
36
|
+
|
|
33
37
|
## Example
|
|
34
38
|
```jsx
|
|
35
39
|
{/* Used automatically by BoardColumn based on viewMode */}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
## Gotchas
|
|
21
21
|
- Shows a pulsing cursor block after the text while isComplete=false
|
|
22
22
|
- When isComplete=true, the cursor disappears and the full text is announced to screen readers via aria-live="polite"
|
|
23
|
-
- While streaming (isComplete=false), aria-live is
|
|
23
|
+
- While streaming (isComplete=false), the sr-only announcement span outputs an empty string — aria-live='polite' is always present on the inner span but announces nothing until isComplete=true. The outer container always carries aria-live='off'.
|
|
24
24
|
- Text is rendered with ReactMarkdown — supports markdown formatting
|
|
25
25
|
- Extends React.HTMLAttributes<HTMLDivElement>
|
|
26
26
|
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
## Gotchas
|
|
34
34
|
- Renders four different states based on attendance data:
|
|
35
35
|
1. **Unmarked + canMark**: Large greeting card with gradient background and "Mark Attendance" button
|
|
36
|
-
2. **Marked (PRESENT)**:
|
|
37
|
-
3. **On Break (BREAK)**:
|
|
38
|
-
4. **Unmarked + cannot mark**:
|
|
36
|
+
2. **Marked (PRESENT)**: Greeting card with success badge showing check-in time
|
|
37
|
+
3. **On Break (BREAK)**: Greeting card with warning badge showing break reason
|
|
38
|
+
4. **Unmarked + cannot mark**: Greeting card with "Attendance window closed" info badge (no Mark button)
|
|
39
39
|
- Greeting is time-based: "Good morning" (before 12), "Good afternoon" (12-17), "Good evening" (after 17)
|
|
40
40
|
- Only the first name (split on space) is displayed in the greeting
|
|
41
41
|
- Date is formatted in en-IN locale with IST timezone
|
|
@@ -37,5 +37,9 @@
|
|
|
37
37
|
- Forwards ref to outer div.
|
|
38
38
|
|
|
39
39
|
## Changes
|
|
40
|
+
### v0.19.0
|
|
41
|
+
- **Added** Decomposed into composable pieces: `ActivityTimeline`, `ActivityEntry` — importable from `@devalok/shilp-sutra-karm/tasks`
|
|
42
|
+
- ActivityTab remains as a pre-assembled default; use the pieces for custom layouts
|
|
43
|
+
|
|
40
44
|
### v0.18.0
|
|
41
45
|
- **Added** Initial release
|
|
@@ -48,5 +48,9 @@
|
|
|
48
48
|
- Forwards ref to outer div.
|
|
49
49
|
|
|
50
50
|
## Changes
|
|
51
|
+
### v0.19.0
|
|
52
|
+
- **Added** Decomposed into composable pieces: `MessageList`, `MessageBubble`, `MessageInput`, `VisibilityWarning` — importable from `@devalok/shilp-sutra-karm/tasks`
|
|
53
|
+
- ConversationTab remains as a pre-assembled default; use the pieces for custom layouts
|
|
54
|
+
|
|
51
55
|
### v0.18.0
|
|
52
56
|
- **Added** Initial release
|
|
@@ -47,5 +47,9 @@
|
|
|
47
47
|
- Forwards ref to outer div.
|
|
48
48
|
|
|
49
49
|
## Changes
|
|
50
|
+
### v0.19.0
|
|
51
|
+
- **Added** Decomposed into composable pieces: `FileDropZone`, `FileList`, `FileItem` — importable from `@devalok/shilp-sutra-karm/tasks`
|
|
52
|
+
- FilesTab remains as a pre-assembled default; use the pieces for custom layouts
|
|
53
|
+
|
|
50
54
|
### v0.18.0
|
|
51
55
|
- **Added** Initial release
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
## Member Shape
|
|
25
25
|
id: string
|
|
26
26
|
name: string
|
|
27
|
-
image
|
|
27
|
+
image?: string | null
|
|
28
28
|
|
|
29
29
|
## Example
|
|
30
30
|
```jsx
|
|
@@ -45,5 +45,9 @@
|
|
|
45
45
|
- Forwards ref to outer div.
|
|
46
46
|
|
|
47
47
|
## Changes
|
|
48
|
+
### v0.19.0
|
|
49
|
+
- **Added** Decomposed into composable pieces: `ReviewCard`, `ReviewResponseForm`, `ReviewRequestButton` — importable from `@devalok/shilp-sutra-karm/tasks`
|
|
50
|
+
- ReviewTab remains as a pre-assembled default; use the pieces for custom layouts
|
|
51
|
+
|
|
48
52
|
### v0.18.0
|
|
49
53
|
- **Added** Initial release
|
|
@@ -48,9 +48,14 @@
|
|
|
48
48
|
- Clicking a subtask row triggers onClickSubtask (if provided).
|
|
49
49
|
- In readOnly mode, checkboxes are non-interactive and the "Add subtask" button is hidden.
|
|
50
50
|
- "Add subtask" inline form with Enter to submit, Escape to cancel.
|
|
51
|
+
- projectId, parentTaskId, and defaultColumnId are defined in the interface and required by the type but are not currently used in the component's rendering logic. They are reserved for future navigation/creation features.
|
|
51
52
|
- Empty state: "No subtasks".
|
|
52
53
|
- Forwards ref to outer div.
|
|
53
54
|
|
|
54
55
|
## Changes
|
|
56
|
+
### v0.19.0
|
|
57
|
+
- **Added** Decomposed into composable pieces: `SubtaskProgress`, `SubtaskList`, `SubtaskItem`, `SubtaskAddForm` — importable from `@devalok/shilp-sutra-karm/tasks`
|
|
58
|
+
- SubtasksTab remains as a pre-assembled default; use the pieces for custom layouts
|
|
59
|
+
|
|
55
60
|
### v0.18.0
|
|
56
61
|
- **Added** Initial release
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# TaskAssigneePicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: tasks
|
|
6
|
+
|
|
7
|
+
Multi-select assignee picker. Displays assigned members as removable chips with avatars and provides a "+" button to add more via the core MemberPicker.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
members: Member[] (REQUIRED — full list of available members)
|
|
11
|
+
value: Member[] (REQUIRED — currently assigned members)
|
|
12
|
+
onAssign: (userId: string) => void (REQUIRED — called when a member is added)
|
|
13
|
+
onUnassign: (userId: string) => void (REQUIRED — called when a member is removed)
|
|
14
|
+
readOnly?: boolean (default: false — hides remove buttons and add button)
|
|
15
|
+
className?: string
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
```jsx
|
|
19
|
+
<TaskAssigneePicker
|
|
20
|
+
members={projectMembers}
|
|
21
|
+
value={task.assignees}
|
|
22
|
+
onAssign={(userId) => assignUser(task.id, userId)}
|
|
23
|
+
onUnassign={(userId) => unassignUser(task.id, userId)}
|
|
24
|
+
/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Gotchas
|
|
28
|
+
- Unlike TaskMemberPicker (single-select), this is multi-select with separate onAssign/onUnassign callbacks.
|
|
29
|
+
- Each assignee chip shows first name only (splits on space).
|
|
30
|
+
- The "+" button opens a MemberPicker with `multiple` mode. Toggling an already-assigned member calls onUnassign.
|
|
31
|
+
- In readOnly mode with no assignees, displays "None".
|
|
32
|
+
- Forwards ref to the outer `<div>`, not a button.
|
|
33
|
+
|
|
34
|
+
## Changes
|
|
35
|
+
### v0.19.0
|
|
36
|
+
- **Added** Initial release
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TaskColumnPicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: tasks
|
|
6
|
+
|
|
7
|
+
Popover-based picker for selecting a board column (status). Displays the current column name and opens a dropdown with all available columns.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
columns: Column[] (REQUIRED — array of { id, name, isDefault?, isTerminal? })
|
|
11
|
+
value: string (REQUIRED — currently selected column id)
|
|
12
|
+
onChange: (columnId: string) => void (REQUIRED)
|
|
13
|
+
readOnly?: boolean (default: false — renders as plain text)
|
|
14
|
+
className?: string
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
```jsx
|
|
18
|
+
<TaskColumnPicker
|
|
19
|
+
columns={[
|
|
20
|
+
{ id: 'todo', name: 'To Do' },
|
|
21
|
+
{ id: 'in-progress', name: 'In Progress' },
|
|
22
|
+
{ id: 'done', name: 'Done', isTerminal: true },
|
|
23
|
+
]}
|
|
24
|
+
value={task.columnId}
|
|
25
|
+
onChange={(columnId) => updateTask({ columnId })}
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Gotchas
|
|
30
|
+
- If `value` does not match any column id, the trigger displays "Select column".
|
|
31
|
+
- The selected column is highlighted with `text-accent-11` and shows a check icon.
|
|
32
|
+
- Forwards ref to the trigger button.
|
|
33
|
+
- In readOnly mode, renders a plain `<span>` instead of a button.
|
|
34
|
+
|
|
35
|
+
## Changes
|
|
36
|
+
### v0.19.0
|
|
37
|
+
- **Added** Initial release
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# TaskDatePicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: tasks
|
|
6
|
+
|
|
7
|
+
Date picker with optional quick-select presets. Uses a native `<input type="date">` inside a popover, with preset buttons for common due dates.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
value: Date | string | null (REQUIRED — current date value)
|
|
11
|
+
onChange: (date: Date | null) => void (REQUIRED — null means cleared)
|
|
12
|
+
presets?: boolean (default: true — show quick-select preset buttons)
|
|
13
|
+
readOnly?: boolean (default: false — renders as plain text)
|
|
14
|
+
className?: string
|
|
15
|
+
|
|
16
|
+
## Presets
|
|
17
|
+
When `presets` is true, the popover includes a "Quick select" section with:
|
|
18
|
+
- Today
|
|
19
|
+
- Tomorrow
|
|
20
|
+
- Next Monday
|
|
21
|
+
- +7 days
|
|
22
|
+
- +14 days
|
|
23
|
+
- Clear
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
```jsx
|
|
27
|
+
<TaskDatePicker
|
|
28
|
+
value={task.dueDate}
|
|
29
|
+
onChange={(date) => updateTask({ dueDate: date })}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
{/* Without presets */}
|
|
33
|
+
<TaskDatePicker
|
|
34
|
+
value={task.startDate}
|
|
35
|
+
onChange={(date) => updateTask({ startDate: date })}
|
|
36
|
+
presets={false}
|
|
37
|
+
/>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Gotchas
|
|
41
|
+
- Accepts both `Date` objects and ISO date strings as `value`. Internally normalizes to `Date`.
|
|
42
|
+
- An inline clear button (X icon) appears next to the trigger when a date is set.
|
|
43
|
+
- The popover contains a native date input as the primary selector, with presets below it.
|
|
44
|
+
- Date display format: "Mar 14, 2026" (en-US, short month).
|
|
45
|
+
- Forwards ref to the trigger button.
|
|
46
|
+
|
|
47
|
+
## Changes
|
|
48
|
+
### v0.19.0
|
|
49
|
+
- **Added** Initial release
|