@devalok/shilp-sutra-karm 0.6.1 → 0.7.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAahE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,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,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;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,QAAQ,EAAE,OAAO,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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"}
|
package/llms.txt
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# @devalok/shilp-sutra-karm
|
|
2
|
+
|
|
3
|
+
> Domain-specific UI components for the Karm team-management platform.
|
|
4
|
+
> Built on top of @devalok/shilp-sutra (core design system).
|
|
5
|
+
> Peer dependency: @devalok/shilp-sutra >=0.3.0
|
|
6
|
+
|
|
7
|
+
## Install & Import
|
|
8
|
+
|
|
9
|
+
pnpm add @devalok/shilp-sutra-karm
|
|
10
|
+
|
|
11
|
+
// Per-module imports (recommended):
|
|
12
|
+
import { KanbanBoard } from '@devalok/shilp-sutra-karm/board'
|
|
13
|
+
import { TaskDetailPanel } from '@devalok/shilp-sutra-karm/tasks'
|
|
14
|
+
import { ChatPanel } from '@devalok/shilp-sutra-karm/chat'
|
|
15
|
+
import { AttendanceCTA, DailyBrief } from '@devalok/shilp-sutra-karm/dashboard'
|
|
16
|
+
import { AccentProvider, ClientPortalHeader, ProjectCard } from '@devalok/shilp-sutra-karm/client'
|
|
17
|
+
import { AdminDashboard, BreakAdmin } from '@devalok/shilp-sutra-karm/admin'
|
|
18
|
+
|
|
19
|
+
// Or from root barrel:
|
|
20
|
+
import { KanbanBoard, TaskDetailPanel, ChatPanel } from '@devalok/shilp-sutra-karm'
|
|
21
|
+
|
|
22
|
+
## Module Reference
|
|
23
|
+
|
|
24
|
+
### Board (`/board`)
|
|
25
|
+
- KanbanBoard: initialData(BoardData), onTaskMove, onTaskAdd, onColumnRename, onColumnDelete, onColumnToggleVisibility, onClickTask, onAddColumn
|
|
26
|
+
- BoardColumn: column(BoardColumnData), index, onAddTask, onClickTask, onRenameColumn, onDeleteColumn
|
|
27
|
+
- TaskCard: task(BoardTask), onClickTask
|
|
28
|
+
- TaskCardOverlay: task(BoardTask) — drag overlay variant
|
|
29
|
+
|
|
30
|
+
BoardTask shape: { id, title, priority, labels[], dueDate, isBlocked, assignees[] }
|
|
31
|
+
BoardData shape: { columns: [{ id, name, isClientVisible, tasks[] }] }
|
|
32
|
+
|
|
33
|
+
Uses dnd-kit for drag-and-drop. KanbanBoard manages all DnD state internally.
|
|
34
|
+
|
|
35
|
+
Column management callbacks: `onColumnRename`, `onColumnDelete`, `onColumnToggleVisibility`, and `onAddColumn`
|
|
36
|
+
are fire-and-forget — the board renders an "Add column" button and column header menus only when the
|
|
37
|
+
corresponding callbacks are provided. The consumer must build their own confirmation UI (e.g., ConfirmDialog)
|
|
38
|
+
and state updates. Example wiring a custom column header action:
|
|
39
|
+
|
|
40
|
+
<KanbanBoard
|
|
41
|
+
initialData={boardData}
|
|
42
|
+
onColumnRename={(columnId, name) => updateColumn(columnId, { name })}
|
|
43
|
+
onColumnDelete={(columnId) => {
|
|
44
|
+
setColumnToDelete(columnId) // open your own ConfirmDialog
|
|
45
|
+
}}
|
|
46
|
+
onColumnToggleVisibility={(columnId, visible) => updateColumn(columnId, { isClientVisible: visible })}
|
|
47
|
+
onAddColumn={() => setShowNewColumnDialog(true)}
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
### Tasks (`/tasks`)
|
|
51
|
+
- TaskDetailPanel: task(FullTask|null), open, onOpenChange, columns[], members[], activities[], clientMode?, onTitleUpdate, onPropertyUpdate, onAssign, onUnassign, onCreateSubtask, onToggleSubtask, onRequestReview, onUpdateReviewStatus + more callbacks
|
|
52
|
+
- TaskProperties: task, columns[], members[], onUpdate, onAssign, onUnassign, readOnly?, editableFields?, renderPriorityIndicator?, renderDatePicker?
|
|
53
|
+
- ActivityTab: activities(AuditLogEntry[])
|
|
54
|
+
- ConversationTab: comments[], taskVisibility, onPostComment, clientMode?, renderEditor?, renderViewer?
|
|
55
|
+
- FilesTab: files[], onUpload, onDelete, isUploading?, readOnly?
|
|
56
|
+
- ReviewTab: reviews[], members[], onRequestReview, onUpdateStatus
|
|
57
|
+
- SubtasksTab: subtasks[], onCreateSubtask, onToggleSubtask, onClickSubtask?, readOnly?
|
|
58
|
+
|
|
59
|
+
TaskDetailPanel opens as a Sheet with tabs: Properties, Subtasks, Review, Conversation, Files, Activity.
|
|
60
|
+
Supports clientMode for read-only client portal views.
|
|
61
|
+
Priority values: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT'
|
|
62
|
+
Visibility: 'INTERNAL' | 'EVERYONE'
|
|
63
|
+
|
|
64
|
+
### Chat (`/chat`)
|
|
65
|
+
- ChatPanel: isOpen, onOpenChange, messages[], conversations[], agents?[], selectedAgentId?, isStreaming?, streamingText?, onSendMessage, onCancelStream?, onSelectAgent?, onStartNewChat?, onSelectConversation?, onArchiveConversation?, onDeleteConversation?
|
|
66
|
+
- ChatInput: onSubmit, onCancel?, isStreaming?, placeholder?, disclaimer?
|
|
67
|
+
- MessageList: messages[], isStreaming?, streamingText?, isLoadingMessages?
|
|
68
|
+
- ConversationList: conversations[], activeConversationId?, onSelect, onNewChat, onArchive?, onDelete?
|
|
69
|
+
- StreamingText: text(string) — markdown renderer with animated cursor
|
|
70
|
+
|
|
71
|
+
ChatMessage shape: { id, role: 'USER'|'ASSISTANT'|'SYSTEM', content }
|
|
72
|
+
Agent shape: { id, name, desc }
|
|
73
|
+
Conversation shape: { id, title, updatedAt }
|
|
74
|
+
|
|
75
|
+
### Dashboard (`/dashboard`)
|
|
76
|
+
- AttendanceCTA: userName, attendance, canMarkAttendance, onMarkAttendance?, isSubmitting?, formatTime?
|
|
77
|
+
- DailyBrief: data({ brief: string[], generatedAt }|null), loading?
|
|
78
|
+
|
|
79
|
+
### Client Portal (`/client`)
|
|
80
|
+
- AccentProvider: accentCss?(string) — injects CSS custom properties on document root
|
|
81
|
+
- ClientPortalHeader: orgName, orgLogo?, userName, userAvatar?
|
|
82
|
+
- ProjectCard: name, description?, status('active'|'completed'|'paused'), taskCount?, completedTasks?
|
|
83
|
+
|
|
84
|
+
### Admin (`/admin`)
|
|
85
|
+
AdminDashboard and BreakAdmin are COMPOUND components with sub-components accessed via dot notation.
|
|
86
|
+
|
|
87
|
+
AdminDashboard compound:
|
|
88
|
+
<AdminDashboard.Root currentUserId={...} currentUserRole={...} assetsBaseUrl={...} userImages={...}>
|
|
89
|
+
<AdminDashboard.Calendar dateAttendanceMap={...} />
|
|
90
|
+
<AdminDashboard.AttendanceOverview groupedAttendance={...} users={...} />
|
|
91
|
+
<AdminDashboard.LeaveRequests requests={...} corrections={...} />
|
|
92
|
+
<AdminDashboard.AssociateDetail attendance={...} tasks={...} corrections={...} />
|
|
93
|
+
</AdminDashboard.Root>
|
|
94
|
+
|
|
95
|
+
BreakAdmin compound:
|
|
96
|
+
<BreakAdmin.Root currentUser={...} breaks={...} users={...} breakBalanceData={...} userImages={...} onApproveRequest={...} onRejectRequest={...} ...>
|
|
97
|
+
<BreakAdmin.Header />
|
|
98
|
+
<BreakAdmin.Breaks />
|
|
99
|
+
<BreakAdmin.LeaveRequest />
|
|
100
|
+
<BreakAdmin.BreakBalance />
|
|
101
|
+
<BreakAdmin.EditBreak />
|
|
102
|
+
<BreakAdmin.EditBreakBalance />
|
|
103
|
+
<BreakAdmin.DeleteBreak />
|
|
104
|
+
<BreakAdmin.ApprovedAdjustments />
|
|
105
|
+
</BreakAdmin.Root>
|
|
106
|
+
|
|
107
|
+
UserRole: 'Apprentice' | 'Associate' | 'Admin' | 'SuperAdmin'
|
|
108
|
+
AttendanceStatus: 'PRESENT' | 'ABSENT' | 'BREAK' | 'Not_Marked' | 'HOLIDAY' | 'WEEKEND'
|
|
109
|
+
BreakRequestStatus: 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED'
|
|
110
|
+
|
|
111
|
+
### Utility Exports
|
|
112
|
+
- Date formatting: formatDate, formatDateIST, formatTimeIST, formatDateWithWeekday, formatOptionalDate
|
|
113
|
+
- Date helpers: getDaySuffix, isSameDay, getWeekDays, getMonthDays, getStartOfDay, getEndOfDay
|
|
114
|
+
- String helpers: removeAllEmojis, removeEmojiAtStart
|
|
115
|
+
- Rendering: renderAdjustmentType, renderStatus
|
|
116
|
+
|
|
117
|
+
### Loading Skeletons
|
|
118
|
+
- DevsabhaSkeleton, BandwidthSkeleton — domain-specific page skeletons
|
|
119
|
+
|
|
120
|
+
## Key Patterns
|
|
121
|
+
|
|
122
|
+
- All components are callback-driven (emit updates via on* props, no internal state management)
|
|
123
|
+
- Admin components use compound pattern with React Context (AdminDashboard.Root provides context to children)
|
|
124
|
+
- Client mode: TaskDetailPanel, TaskProperties, FilesTab support readOnly + editableFields for client portal
|
|
125
|
+
- Chat supports streaming: pass isStreaming + streamingText for live AI responses
|
|
126
|
+
- Board uses dnd-kit: KanbanBoard handles all drag state, emits onTaskMove with final position
|
|
127
|
+
- All dates default to IST (Asia/Kolkata) timezone in admin utilities
|
|
128
|
+
|
|
129
|
+
## Common Mistakes -- DO NOT
|
|
130
|
+
|
|
131
|
+
- DO NOT manage DnD state outside KanbanBoard — it handles sensors, collision detection, and sorting internally
|
|
132
|
+
- DO NOT forget to pass both open AND onOpenChange to TaskDetailPanel (it's a controlled Sheet)
|
|
133
|
+
- DO NOT use AdminDashboard sub-components outside AdminDashboard.Root — they depend on context
|
|
134
|
+
- DO NOT use BreakAdmin sub-components outside BreakAdmin.Root — same compound pattern
|
|
135
|
+
- DO NOT pass raw Date objects for task dates — use ISO strings (the components parse them internally)
|
|
136
|
+
- DO NOT forget the peer dependency: @devalok/shilp-sutra must be installed for UI primitives
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devalok/shilp-sutra-karm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Domain components for Karm — board, tasks, chat, dashboard, client, and admin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist",
|
|
42
|
-
"README.md"
|
|
42
|
+
"README.md",
|
|
43
|
+
"llms.txt"
|
|
43
44
|
],
|
|
44
45
|
"scripts": {
|
|
45
46
|
"build": "vite build && node scripts/inject-use-client.mjs",
|