@devalok/shilp-sutra-karm 0.18.0 → 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.
Files changed (115) hide show
  1. package/dist/_chunks/task-detail-panel.js +1339 -1144
  2. package/dist/tasks/activity-tab.d.ts +2 -11
  3. package/dist/tasks/activity-tab.d.ts.map +1 -1
  4. package/dist/tasks/conversation-tab.d.ts +2 -21
  5. package/dist/tasks/conversation-tab.d.ts.map +1 -1
  6. package/dist/tasks/files-tab.d.ts +2 -18
  7. package/dist/tasks/files-tab.d.ts.map +1 -1
  8. package/dist/tasks/index.d.ts +12 -6
  9. package/dist/tasks/index.d.ts.map +1 -1
  10. package/dist/tasks/index.js +765 -8
  11. package/dist/tasks/pickers/index.d.ts +16 -0
  12. package/dist/tasks/pickers/index.d.ts.map +1 -0
  13. package/dist/tasks/pickers/task-assignee-picker.d.ts +14 -0
  14. package/dist/tasks/pickers/task-assignee-picker.d.ts.map +1 -0
  15. package/dist/tasks/pickers/task-column-picker.d.ts +13 -0
  16. package/dist/tasks/pickers/task-column-picker.d.ts.map +1 -0
  17. package/dist/tasks/pickers/task-date-picker.d.ts +12 -0
  18. package/dist/tasks/pickers/task-date-picker.d.ts.map +1 -0
  19. package/dist/tasks/pickers/task-label-editor.d.ts +13 -0
  20. package/dist/tasks/pickers/task-label-editor.d.ts.map +1 -0
  21. package/dist/tasks/pickers/task-member-picker.d.ts +14 -0
  22. package/dist/tasks/pickers/task-member-picker.d.ts.map +1 -0
  23. package/dist/tasks/pickers/task-priority-picker.d.ts +12 -0
  24. package/dist/tasks/pickers/task-priority-picker.d.ts.map +1 -0
  25. package/dist/tasks/pickers/task-visibility-picker.d.ts +13 -0
  26. package/dist/tasks/pickers/task-visibility-picker.d.ts.map +1 -0
  27. package/dist/tasks/review-tab.d.ts +4 -20
  28. package/dist/tasks/review-tab.d.ts.map +1 -1
  29. package/dist/tasks/subtasks-tab.d.ts +2 -18
  30. package/dist/tasks/subtasks-tab.d.ts.map +1 -1
  31. package/dist/tasks/tabs/activity-entry.d.ts +9 -0
  32. package/dist/tasks/tabs/activity-entry.d.ts.map +1 -0
  33. package/dist/tasks/tabs/activity-timeline.d.ts +8 -0
  34. package/dist/tasks/tabs/activity-timeline.d.ts.map +1 -0
  35. package/dist/tasks/tabs/file-drop-zone.d.ts +10 -0
  36. package/dist/tasks/tabs/file-drop-zone.d.ts.map +1 -0
  37. package/dist/tasks/tabs/file-item.d.ts +11 -0
  38. package/dist/tasks/tabs/file-item.d.ts.map +1 -0
  39. package/dist/tasks/tabs/file-list.d.ts +8 -0
  40. package/dist/tasks/tabs/file-list.d.ts.map +1 -0
  41. package/dist/tasks/tabs/index.d.ts +34 -0
  42. package/dist/tasks/tabs/index.d.ts.map +1 -0
  43. package/dist/tasks/tabs/message-bubble.d.ts +14 -0
  44. package/dist/tasks/tabs/message-bubble.d.ts.map +1 -0
  45. package/dist/tasks/tabs/message-input.d.ts +16 -0
  46. package/dist/tasks/tabs/message-input.d.ts.map +1 -0
  47. package/dist/tasks/tabs/message-list.d.ts +9 -0
  48. package/dist/tasks/tabs/message-list.d.ts.map +1 -0
  49. package/dist/tasks/tabs/review-card.d.ts +10 -0
  50. package/dist/tasks/tabs/review-card.d.ts.map +1 -0
  51. package/dist/tasks/tabs/review-request-button.d.ts +10 -0
  52. package/dist/tasks/tabs/review-request-button.d.ts.map +1 -0
  53. package/dist/tasks/tabs/review-response-form.d.ts +11 -0
  54. package/dist/tasks/tabs/review-response-form.d.ts.map +1 -0
  55. package/dist/tasks/tabs/subtask-add-form.d.ts +9 -0
  56. package/dist/tasks/tabs/subtask-add-form.d.ts.map +1 -0
  57. package/dist/tasks/tabs/subtask-item.d.ts +12 -0
  58. package/dist/tasks/tabs/subtask-item.d.ts.map +1 -0
  59. package/dist/tasks/tabs/subtask-list.d.ts +8 -0
  60. package/dist/tasks/tabs/subtask-list.d.ts.map +1 -0
  61. package/dist/tasks/tabs/subtask-progress.d.ts +9 -0
  62. package/dist/tasks/tabs/subtask-progress.d.ts.map +1 -0
  63. package/dist/tasks/tabs/visibility-warning.d.ts +7 -0
  64. package/dist/tasks/tabs/visibility-warning.d.ts.map +1 -0
  65. package/dist/tasks/task-panel.d.ts +104 -0
  66. package/dist/tasks/task-panel.d.ts.map +1 -0
  67. package/dist/tasks/task-properties.d.ts +2 -12
  68. package/dist/tasks/task-properties.d.ts.map +1 -1
  69. package/dist/tasks/task-types.d.ts +104 -0
  70. package/dist/tasks/task-types.d.ts.map +1 -0
  71. package/docs/components/admin/admin-dashboard.md +215 -0
  72. package/docs/components/admin/admin-types.md +167 -0
  73. package/docs/components/admin/admin-utils.md +165 -0
  74. package/docs/components/admin/break-admin.md +167 -0
  75. package/docs/components/board/board-column.md +35 -0
  76. package/docs/components/board/board-provider.md +89 -0
  77. package/docs/components/board/board-toolbar.md +36 -0
  78. package/docs/components/board/board-types.md +62 -0
  79. package/docs/components/board/bulk-action-bar.md +38 -0
  80. package/docs/components/board/column-empty.md +33 -0
  81. package/docs/components/board/column-header.md +36 -0
  82. package/docs/components/board/kanban-board.md +53 -0
  83. package/docs/components/board/task-card.md +62 -0
  84. package/docs/components/board/task-context-menu.md +36 -0
  85. package/docs/components/chat/chat-input.md +37 -0
  86. package/docs/components/chat/chat-panel.md +58 -0
  87. package/docs/components/chat/conversation-list.md +47 -0
  88. package/docs/components/chat/message-list.md +44 -0
  89. package/docs/components/chat/streaming-text.md +29 -0
  90. package/docs/components/client/accent-provider.md +29 -0
  91. package/docs/components/client/client-portal-header.md +40 -0
  92. package/docs/components/client/project-card.md +39 -0
  93. package/docs/components/dashboard/attendance-cta.md +47 -0
  94. package/docs/components/dashboard/daily-brief.md +45 -0
  95. package/docs/components/dashboard/scratchpad-widget.md +52 -0
  96. package/docs/components/dashboard/sidebar-scratchpad.md +39 -0
  97. package/docs/components/other/karm-command-registry.md +61 -0
  98. package/docs/components/other/page-skeletons.md +52 -0
  99. package/docs/components/tasks/activity-tab.md +45 -0
  100. package/docs/components/tasks/conversation-tab.md +56 -0
  101. package/docs/components/tasks/files-tab.md +55 -0
  102. package/docs/components/tasks/review-tab.md +53 -0
  103. package/docs/components/tasks/subtasks-tab.md +61 -0
  104. package/docs/components/tasks/task-assignee-picker.md +36 -0
  105. package/docs/components/tasks/task-column-picker.md +37 -0
  106. package/docs/components/tasks/task-date-picker.md +49 -0
  107. package/docs/components/tasks/task-detail-panel.md +275 -0
  108. package/docs/components/tasks/task-label-editor.md +42 -0
  109. package/docs/components/tasks/task-member-picker.md +35 -0
  110. package/docs/components/tasks/task-panel.md +89 -0
  111. package/docs/components/tasks/task-priority-picker.md +37 -0
  112. package/docs/components/tasks/task-properties.md +84 -0
  113. package/docs/components/tasks/task-visibility-picker.md +38 -0
  114. package/llms.txt +40 -13
  115. package/package.json +82 -80
@@ -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 interface Member {
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;AAiC9B,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,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"}
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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"}
@@ -0,0 +1,215 @@
1
+ # AdminDashboard
2
+
3
+ - Import: @devalok/shilp-sutra-karm/admin
4
+ - Server-safe: No
5
+ - Category: admin
6
+
7
+ Compound component for the admin attendance dashboard. Uses React Context internally.
8
+ All sub-components must be rendered inside `<AdminDashboard.Root>`.
9
+
10
+ Exports: AdminDashboard (compound), AdminDashboard.Content, AdminDashboardSkeleton, Calendar, BreakRequestCard, LeaveRequests, DashboardHeader, AttendanceOverview, AssociateDetail, CorrectionList, RenderDate
11
+
12
+ ## Props
13
+
14
+ ### AdminDashboard.Root (AdminDashboardRootProps)
15
+ currentUserId: string (REQUIRED)
16
+ currentUserRole: UserRole (REQUIRED)
17
+ currentUser?: AdminUser
18
+ assetsBaseUrl: string (default: "")
19
+ userImages: Record<string, string> (default: {})
20
+ isLoading: boolean (default: false)
21
+ onAssociateChange: (user: AdminUser | null) => void
22
+ children: ReactNode (REQUIRED)
23
+ ...HTMLDivElement attributes (className, etc.)
24
+
25
+ ### AdminDashboard.Calendar (AdminDashboardCalendarProps)
26
+ dateAttendanceMap: Map<string, DateAttendanceInfo> | null (default: null)
27
+ onDateChange: (date: string) => void
28
+ onTimeFrameChange: (timeFrame: string) => void
29
+ users: AdminUser[] (default: [])
30
+ selectedUserAttendance: AttendanceRecord | null (default: null)
31
+ ...HTMLDivElement attributes
32
+
33
+ ### AdminDashboard.AttendanceOverview (AdminDashboardAttendanceOverviewProps)
34
+ groupedAttendance?: GroupedAttendance | null (default: null)
35
+ users?: AdminUser[] (default: [])
36
+ ...HTMLDivElement attributes
37
+
38
+ ### AdminDashboard.AssociateDetail (AdminDashboardAssociateDetailProps)
39
+ attendance: AttendanceRecord | null (default: null)
40
+ tasks: TaskItem[] (default: [])
41
+ breakRequest: BreakRequest | null (default: null)
42
+ onUpdateAttendanceStatus: (params: { userId: string; date: string; isPresent: boolean }) => void | Promise<void>
43
+ onToggleTaskStatus: (taskId: string, newStatus: string) => void | Promise<void>
44
+ onAddTask: (title: string, assigneeId: string) => void | Promise<void>
45
+ onReorderTasks: (draggedTaskId: string, targetTaskId: string) => void | Promise<void>
46
+ onCancelBreak: (params: { requestId: string; deleteSingleDay: boolean; dateToCancel: string | Date; userId: string }) => void | Promise<void>
47
+ onRefreshSelectedUserAttendance: () => void | Promise<void>
48
+ onRefreshAttendanceData: () => void | Promise<void>
49
+ ...HTMLDivElement attributes
50
+
51
+ ### AdminDashboard.LeaveRequests (AdminDashboardLeaveRequestsProps)
52
+ requests?: BreakRequest[] (default: [])
53
+ corrections?: AttendanceCorrection[] (default: [])
54
+ onApproveBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
55
+ onRejectBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
56
+ onApproveCorrection: (correctionId: string) => void | Promise<void>
57
+ onRejectCorrection: (correctionId: string) => void | Promise<void>
58
+ ...HTMLDivElement attributes
59
+
60
+ ### AdminDashboard.Content (AdminDashboardContentProps)
61
+ children: ReactNode (REQUIRED)
62
+ ...HTMLDivElement attributes
63
+
64
+ ### Calendar (CalendarProps) — standalone
65
+ onDateSelect: (date: Date) => void (REQUIRED)
66
+ hasCorrection: (date: Date) => boolean
67
+ ...HTMLDivElement attributes
68
+
69
+ ### BreakRequestCard (BreakRequestProps) — standalone
70
+ selectedDate: string | Date (REQUIRED)
71
+ userId: string (REQUIRED)
72
+ breakRequest: BreakRequest | null
73
+ assetsBaseUrl: string
74
+ onCancelBreak: (params: { requestId: string; deleteSingleDay: boolean; dateToCancel: string | Date; userId: string }) => void | Promise<void>
75
+ onRefreshAttendance: () => void | Promise<void>
76
+ onRefreshGroupedAttendance: () => void | Promise<void>
77
+ ...HTMLDivElement attributes
78
+
79
+ ### LeaveRequests (LeaveRequestsProps) — standalone
80
+ requests: BreakRequest[] (REQUIRED)
81
+ currentUserId: string (REQUIRED)
82
+ userImages: Record<string, string>
83
+ activeTimeFrame: string
84
+ onApproveBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
85
+ onRejectBreak: (params: { requestId: string; adminComment: string; userId: string }) => void | Promise<void>
86
+ ...HTMLDivElement attributes
87
+
88
+ ### DashboardHeader (DashboardHeaderProps) — standalone
89
+ selectedMonth: string (REQUIRED)
90
+ yearsList: string[] (REQUIRED)
91
+ isTodaySelected: boolean (REQUIRED)
92
+ selectedAssociate: AdminUser | null (REQUIRED)
93
+ users: AdminUser[] (REQUIRED)
94
+ userImages: Record<string, string> (REQUIRED)
95
+ activeTimeFrame: string (REQUIRED)
96
+ onMonthSelection: (monthYear: string) => void (REQUIRED)
97
+ onTodayClick: () => void (REQUIRED)
98
+ onSelectAssociate: (user: AdminUser | null) => void (REQUIRED)
99
+ onTimeFrameChange: (id: string) => void (REQUIRED)
100
+ onDateChange: (direction: "prev" | "next") => void (REQUIRED)
101
+ ...HTMLDivElement attributes
102
+
103
+ ### AttendanceOverview (AttendanceOverviewProps) — standalone
104
+ isFutureDate: boolean (REQUIRED)
105
+ users: AdminUser[] (REQUIRED)
106
+ groupedAttendance: GroupedAttendance | null (REQUIRED)
107
+ userImages: Record<string, string> (REQUIRED)
108
+ selectedDate: string (REQUIRED)
109
+ ...HTMLDivElement attributes
110
+
111
+ ### AssociateDetail (AssociateDetailProps) — standalone
112
+ selectedAssociate: AdminUser (REQUIRED)
113
+ selectedDate: string (REQUIRED)
114
+ selectedUserAttendance: AttendanceRecord | null (REQUIRED)
115
+ userTasks: TaskItem[] (REQUIRED)
116
+ selectedBreakRequest: BreakRequest | null (REQUIRED)
117
+ isFutureDate: boolean (REQUIRED)
118
+ assetsBaseUrl: string (REQUIRED)
119
+ onUpdateAttendanceStatus: (params: { userId: string; date: string; isPresent: boolean }) => void | Promise<void>
120
+ onToggleTaskStatus: (taskId: string, newStatus: string) => void | Promise<void>
121
+ onAddTask: (title: string, assigneeId: string) => void | Promise<void>
122
+ onReorderTasks: (draggedTaskId: string, targetTaskId: string) => void | Promise<void>
123
+ onCancelBreak: (params: { requestId: string; deleteSingleDay: boolean; dateToCancel: string | Date; userId: string }) => void | Promise<void>
124
+ onRefreshSelectedUserAttendance: () => void | Promise<void>
125
+ onRefreshAttendanceData: () => void | Promise<void>
126
+ ...HTMLDivElement attributes
127
+
128
+ ### CorrectionList (CorrectionListProps) — standalone
129
+ corrections: AttendanceCorrection[] (REQUIRED)
130
+ currentUserId: string (REQUIRED)
131
+ userImages: Record<string, string> (REQUIRED)
132
+ assetsBaseUrl: string (REQUIRED)
133
+ activeTimeFrame: string (REQUIRED)
134
+ onApproveCorrection: (correctionId: string) => void | Promise<void>
135
+ onRejectCorrection: (correctionId: string) => void | Promise<void>
136
+ ...HTMLDivElement attributes
137
+
138
+ ### RenderDate (RenderDateProps) — standalone
139
+ day: DayInfo (REQUIRED)
140
+ isAdmin: boolean (REQUIRED)
141
+ selectedDate: string | Date (REQUIRED)
142
+ dateAttendanceMap: Map<string, DateAttendanceInfo> | null (REQUIRED)
143
+ activeTimeFrame: string (REQUIRED)
144
+ ...HTMLDivElement attributes
145
+
146
+ ### AdminDashboardSkeleton (DashboardSkeleton)
147
+ ...HTMLDivElement attributes (className, etc.)
148
+
149
+ ## Supporting Types
150
+ TaskItem: { id: string; title: string; status: string; assigneeIds?: string; priority?: string }
151
+ AttendanceCorrection: { id: string; date: string; reason?: string; requestedDate?: string; correctionStatus: CorrectionStatus; user?: AdminUser }
152
+ DateAttendanceInfo: { status: AttendanceStatus | null; hasCorrectionOrApproval?: boolean; isBreakApproved?: boolean }
153
+
154
+ ## Defaults
155
+ assetsBaseUrl="", userImages={}, isLoading=false
156
+
157
+ ## Example
158
+ ```jsx
159
+ <AdminDashboard.Root
160
+ currentUserId="user-1"
161
+ currentUserRole="Admin"
162
+ currentUser={currentUser}
163
+ assetsBaseUrl="/assets"
164
+ userImages={userImageMap}
165
+ isLoading={isLoading}
166
+ onAssociateChange={(user) => setSelected(user)}
167
+ >
168
+ <AdminDashboard.Calendar
169
+ dateAttendanceMap={dateMap}
170
+ onDateChange={handleDateChange}
171
+ onTimeFrameChange={handleTimeFrameChange}
172
+ users={allUsers}
173
+ selectedUserAttendance={attendance}
174
+ />
175
+ <AdminDashboard.Content>
176
+ <AdminDashboard.AttendanceOverview
177
+ groupedAttendance={grouped}
178
+ users={allUsers}
179
+ />
180
+ <AdminDashboard.AssociateDetail
181
+ attendance={selectedAttendance}
182
+ tasks={tasks}
183
+ breakRequest={breakReq}
184
+ onUpdateAttendanceStatus={handleUpdateStatus}
185
+ onToggleTaskStatus={handleToggleTask}
186
+ onAddTask={handleAddTask}
187
+ />
188
+ <AdminDashboard.LeaveRequests
189
+ requests={pendingRequests}
190
+ corrections={corrections}
191
+ onApproveBreak={handleApproveBreak}
192
+ onRejectBreak={handleRejectBreak}
193
+ onApproveCorrection={handleApproveCorrection}
194
+ onRejectCorrection={handleRejectCorrection}
195
+ />
196
+ </AdminDashboard.Content>
197
+ </AdminDashboard.Root>
198
+ ```
199
+
200
+ ## Gotchas
201
+ - All sub-components must be inside `<AdminDashboard.Root>` or they throw a context error
202
+ - `AdminDashboard.AttendanceOverview` only renders when NO associate is selected
203
+ - `AdminDashboard.AssociateDetail` only renders when an associate IS selected
204
+ - `AdminDashboard.LeaveRequests` auto-hides when there are zero requests AND zero pending corrections
205
+ - `AdminDashboard.LeaveRequests` auto-switches tabs when new requests arrive
206
+ - The `Calendar` standalone export is a simpler calendar without the compound context — use it for non-admin pages
207
+ - `BreakRequestCard` standalone export displays a single break with cancel dialog — used inside AssociateDetail internally
208
+ - Date callbacks fire ISO-formatted strings via `format(date, "yyyy-MM-dd'T'HH:mm:ssxxx")`
209
+ - `isLoading=true` on Root renders `DashboardSkeleton` instead of children
210
+
211
+ ## Changes
212
+ ### v0.9.0
213
+ - **Added** Compound component API replacing 29-prop monolith (BREAKING)
214
+ - **Added** AdminDashboard.Content wrapper for rounded-corner management
215
+ - **Added** Standalone exports for Calendar, BreakRequestCard, LeaveRequests, DashboardHeader, AttendanceOverview, AssociateDetail, CorrectionList, RenderDate
@@ -0,0 +1,167 @@
1
+ # Admin Types
2
+
3
+ - Import: @devalok/shilp-sutra-karm/admin
4
+ - Server-safe: Yes
5
+ - Category: admin
6
+
7
+ Type-only exports for the admin module. No runtime code.
8
+
9
+ ## Types
10
+
11
+ ### UserRole
12
+ ```ts
13
+ type UserRole = 'Apprentice' | 'Associate' | 'Admin' | 'SuperAdmin'
14
+ ```
15
+
16
+ ### AttendanceStatus
17
+ ```ts
18
+ type AttendanceStatus = 'PRESENT' | 'ABSENT' | 'BREAK' | 'Not_Marked' | 'HOLIDAY' | 'WEEKEND'
19
+ ```
20
+
21
+ ### CorrectionStatus
22
+ ```ts
23
+ type CorrectionStatus = 'PENDING' | 'APPROVED' | 'REJECTED'
24
+ ```
25
+
26
+ ### BreakRequestStatus
27
+ ```ts
28
+ type BreakRequestStatus = 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED'
29
+ ```
30
+
31
+ ### AdminUser
32
+ ```ts
33
+ interface AdminUser {
34
+ id: string
35
+ name: string
36
+ firstName?: string
37
+ lastName?: string
38
+ email: string
39
+ devalokEmail?: string
40
+ designation: string | null
41
+ image: string | null
42
+ role: UserRole
43
+ isActive: boolean
44
+ createdAt: string | Date
45
+ }
46
+ ```
47
+
48
+ ### AttendanceRecord
49
+ ```ts
50
+ interface AttendanceRecord {
51
+ id: string
52
+ userId: string
53
+ date: string
54
+ timeIn: string | null
55
+ timeOut: string | null
56
+ status: AttendanceStatus
57
+ correctionStatus?: CorrectionStatus | null
58
+ reason?: string | null
59
+ adminComment?: string | null
60
+ requestedDate?: string | null
61
+ newTimeIn?: string | null
62
+ newTimeOut?: string | null
63
+ oldTimeIn?: string | null
64
+ oldTimeOut?: string | null
65
+ user?: AdminUser
66
+ }
67
+ ```
68
+
69
+ ### BreakRequest
70
+ ```ts
71
+ interface BreakRequest {
72
+ id: string
73
+ userId: string
74
+ startDate: string
75
+ endDate: string
76
+ numberOfDays: number
77
+ reason: string
78
+ status: BreakRequestStatus
79
+ adminComment?: string | null
80
+ correction?: boolean
81
+ user?: Pick<AdminUser, 'id' | 'name' | 'firstName' | 'image'>
82
+ }
83
+ ```
84
+
85
+ ### BreakBalanceData
86
+ ```ts
87
+ interface BreakBalanceData {
88
+ id: string
89
+ userId: string
90
+ totalDays: number
91
+ usedDays?: number
92
+ carryForward: number
93
+ cashout: number
94
+ yearlyBalance?: number
95
+ other?: number
96
+ user?: Pick<AdminUser, 'id' | 'name' | 'firstName' | 'image'>
97
+ createdAt: string
98
+ updatedAt: string
99
+ }
100
+ ```
101
+
102
+ ### Adjustment
103
+ ```ts
104
+ interface Adjustment {
105
+ id: string
106
+ userId: string
107
+ numberOfDays: number
108
+ type: string
109
+ reason: string
110
+ status: string
111
+ comment: string | null
112
+ approvedBy: string | null
113
+ createdAt: string
114
+ updatedAt: string
115
+ user?: Pick<AdminUser, 'name' | 'email'>
116
+ approver?: Pick<AdminUser, 'name' | 'email'>
117
+ }
118
+ ```
119
+
120
+ ### GroupedAttendance
121
+ ```ts
122
+ interface GroupedAttendance {
123
+ present: Array<{ user: AdminUser; attendance: AttendanceRecord }>
124
+ absent: Array<{ user: AdminUser; attendance?: AttendanceRecord }>
125
+ onBreak: Array<{ user: AdminUser; attendance: AttendanceRecord; breakRequest?: BreakRequest }>
126
+ yetToMark: Array<{ user: AdminUser }>
127
+ }
128
+ ```
129
+
130
+ ### DayInfo
131
+ ```ts
132
+ interface DayInfo {
133
+ day: string
134
+ date: number
135
+ fullDate: Date
136
+ isToday: boolean
137
+ isActive: boolean
138
+ isPadding?: boolean
139
+ hasBreak?: boolean
140
+ isAbsent?: boolean
141
+ isDisabled?: boolean
142
+ }
143
+ ```
144
+
145
+ ### RealtimeCallbacks
146
+ ```ts
147
+ interface RealtimeCallbacks {
148
+ onBreakRequestCreated?: (data: BreakRequest) => void
149
+ onBreakRequestApproved?: (data: BreakRequest) => void
150
+ onBreakRequestRejected?: (data: BreakRequest) => void
151
+ onBreakRequestCancelled?: (data: BreakRequest) => void
152
+ onAttendanceCorrectionCreated?: (data: AttendanceRecord) => void
153
+ onAttendanceCorrectionProcessed?: (data: AttendanceRecord) => void
154
+ onTaskUpdated?: (data: unknown) => void
155
+ }
156
+ ```
157
+
158
+ ## Gotchas
159
+ - `AttendanceStatus` includes `'Not_Marked'` (mixed case with underscore) — not `'NOT_MARKED'`
160
+ - `BreakRequest.correction` is a boolean flag that indicates the request is an attendance correction, not a break
161
+ - `AdminUser.designation` and `AdminUser.image` are nullable (`string | null`)
162
+ - `AdminUser.createdAt` accepts both `string` and `Date`
163
+ - `DayInfo` is used by the calendar components — `isPadding` marks days from adjacent months
164
+
165
+ ## Changes
166
+ ### v0.9.0
167
+ - **Added** Initial release with all admin domain types