@devalok/shilp-sutra-karm 0.18.1 → 0.20.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/render-adjustment-type.js +50 -48
- package/dist/_chunks/sidebar-scratchpad.js +714 -326
- package/dist/_chunks/task-detail-panel.js +1638 -1175
- package/dist/_chunks/vendor.js +1154 -1123
- package/dist/dashboard/index.d.ts +20 -0
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +451 -5
- package/dist/dashboard/project-health-card.d.ts +22 -0
- package/dist/dashboard/project-health-card.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/index.d.ts +13 -0
- package/dist/dashboard/scratchpad/index.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts +11 -0
- package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts +15 -0
- package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-context.d.ts +44 -0
- package/dist/dashboard/scratchpad/scratchpad-context.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts +13 -0
- package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts +7 -0
- package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-header.d.ts +9 -0
- package/dist/dashboard/scratchpad/scratchpad-header.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-item.d.ts +13 -0
- package/dist/dashboard/scratchpad/scratchpad-item.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-list.d.ts +9 -0
- package/dist/dashboard/scratchpad/scratchpad-list.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts +11 -0
- package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad-root.d.ts +8 -0
- package/dist/dashboard/scratchpad/scratchpad-root.d.ts.map +1 -0
- package/dist/dashboard/scratchpad/scratchpad.d.ts +29 -0
- package/dist/dashboard/scratchpad/scratchpad.d.ts.map +1 -0
- package/dist/dashboard/scratchpad-widget.d.ts +5 -5
- package/dist/dashboard/scratchpad-widget.d.ts.map +1 -1
- package/dist/dashboard/sidebar-scratchpad.d.ts +8 -1
- package/dist/dashboard/sidebar-scratchpad.d.ts.map +1 -1
- package/dist/dashboard/week-heatmap/index.d.ts +10 -0
- package/dist/dashboard/week-heatmap/index.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts +31 -0
- package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts +15 -0
- package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts +8 -0
- package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts +7 -0
- package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts.map +1 -0
- package/dist/dashboard/week-heatmap/week-heatmap.d.ts +33 -0
- package/dist/dashboard/week-heatmap/week-heatmap.d.ts.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -56
- 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 +13 -6
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +766 -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-action-row/index.d.ts +3 -0
- package/dist/tasks/task-action-row/index.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-context.d.ts +21 -0
- package/dist/tasks/task-action-row/task-action-row-context.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-due-date.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-due-date.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-labels.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-labels.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-navigate.d.ts +9 -0
- package/dist/tasks/task-action-row/task-action-row-navigate.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-priority.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-priority.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts +8 -0
- package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-root.d.ts +14 -0
- package/dist/tasks/task-action-row/task-action-row-root.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts +5 -0
- package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row-title.d.ts +9 -0
- package/dist/tasks/task-action-row/task-action-row-title.d.ts.map +1 -0
- package/dist/tasks/task-action-row/task-action-row.d.ts +48 -0
- package/dist/tasks/task-action-row/task-action-row.d.ts.map +1 -0
- package/dist/tasks/task-detail-panel.d.ts.map +1 -1
- 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/dashboard/project-health-card.md +90 -0
- package/docs/components/dashboard/scratchpad-widget.md +17 -0
- package/docs/components/dashboard/scratchpad.md +151 -0
- package/docs/components/dashboard/sidebar-scratchpad.md +29 -5
- package/docs/components/dashboard/week-heatmap.md +95 -0
- 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-action-row.md +159 -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 +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TaskPriorityPicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: tasks
|
|
6
|
+
|
|
7
|
+
Popover-based picker for task priority. Each priority level has a distinct icon and color.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
value: Priority (REQUIRED — 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT')
|
|
11
|
+
onChange: (priority: Priority) => void (REQUIRED)
|
|
12
|
+
readOnly?: boolean (default: false — renders as non-interactive indicator)
|
|
13
|
+
className?: string
|
|
14
|
+
|
|
15
|
+
## Priority Icons
|
|
16
|
+
URGENT: IconAlertTriangleFilled (text-error-9)
|
|
17
|
+
HIGH: IconArrowUp (text-warning-9)
|
|
18
|
+
MEDIUM: IconMinus (text-surface-fg-muted)
|
|
19
|
+
LOW: IconArrowDown (text-surface-fg-subtle)
|
|
20
|
+
|
|
21
|
+
## Example
|
|
22
|
+
```jsx
|
|
23
|
+
<TaskPriorityPicker
|
|
24
|
+
value={task.priority}
|
|
25
|
+
onChange={(priority) => updateTask({ priority })}
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Gotchas
|
|
30
|
+
- Icon-per-level design: each priority has a unique icon and semantic color, not just a label.
|
|
31
|
+
- Priority labels are sourced from the shared `PRIORITY_LABELS` constant in `task-constants`.
|
|
32
|
+
- The selected priority row has a highlighted background and check icon.
|
|
33
|
+
- Forwards ref to the trigger button.
|
|
34
|
+
|
|
35
|
+
## Changes
|
|
36
|
+
### v0.19.0
|
|
37
|
+
- **Added** Initial release
|
|
@@ -72,8 +72,13 @@
|
|
|
72
72
|
- onUpdate field values: 'columnId', 'ownerId', 'priority', 'dueDate', 'labels', 'visibility'.
|
|
73
73
|
- Uses MemberPicker from core composed library for owner/assignee selection.
|
|
74
74
|
- onConfirmVisibilityChange is a guard hook: when provided and user switches to EVERYONE, it is called instead of onUpdate, allowing a confirmation dialog.
|
|
75
|
+
- Priority and Due Date rows are always rendered as interactive popovers regardless of readOnly. Enforcement of readOnly for these fields is done at the callback level. If using TaskProperties standalone in readOnly mode, supply a no-op onUpdate to prevent unintended changes.
|
|
75
76
|
- Forwards ref to outer div.
|
|
76
77
|
|
|
77
78
|
## Changes
|
|
79
|
+
### v0.19.0
|
|
80
|
+
- **Added** Property logic extracted into 7 standalone pickers: `TaskColumnPicker`, `TaskPriorityPicker`, `TaskMemberPicker`, `TaskAssigneePicker`, `TaskDatePicker`, `TaskLabelEditor`, `TaskVisibilityPicker`
|
|
81
|
+
- TaskProperties remains as a pre-assembled default; use individual pickers with `TaskPanel.Property` for custom layouts
|
|
82
|
+
|
|
78
83
|
### v0.18.0
|
|
79
84
|
- **Added** Initial release
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# TaskVisibilityPicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: tasks
|
|
6
|
+
|
|
7
|
+
Popover-based picker for task visibility with an optional confirmation dialog when switching to public ("Everyone") visibility.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
value: Visibility (REQUIRED — 'INTERNAL' | 'EVERYONE')
|
|
11
|
+
onChange: (visibility: Visibility) => void (REQUIRED)
|
|
12
|
+
confirmOnPublic?: boolean (default: false — when true, shows a confirmation dialog before switching to EVERYONE)
|
|
13
|
+
readOnly?: boolean (default: false — renders as non-interactive display)
|
|
14
|
+
className?: string
|
|
15
|
+
|
|
16
|
+
## Visibility Options
|
|
17
|
+
INTERNAL: IconLock — "Internal" — "Only team members"
|
|
18
|
+
EVERYONE: IconWorld — "Everyone" — "Visible to clients"
|
|
19
|
+
|
|
20
|
+
## Example
|
|
21
|
+
```jsx
|
|
22
|
+
<TaskVisibilityPicker
|
|
23
|
+
value={task.visibility}
|
|
24
|
+
onChange={(visibility) => updateTask({ visibility })}
|
|
25
|
+
confirmOnPublic
|
|
26
|
+
/>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Gotchas
|
|
30
|
+
- When `confirmOnPublic` is true and the user selects "Everyone", a confirmation Dialog appears warning that the task will become visible to clients. The change only applies after the user clicks "Confirm".
|
|
31
|
+
- Switching to "Internal" never requires confirmation.
|
|
32
|
+
- Selecting the already-active option closes the popover without calling onChange.
|
|
33
|
+
- Each option row shows an icon, label, and description. The selected option has a highlighted background and check icon.
|
|
34
|
+
- Forwards ref to the trigger button.
|
|
35
|
+
|
|
36
|
+
## Changes
|
|
37
|
+
### v0.19.0
|
|
38
|
+
- **Added** Initial release
|
package/llms.txt
CHANGED
|
@@ -10,14 +10,14 @@ pnpm add @devalok/shilp-sutra-karm
|
|
|
10
10
|
|
|
11
11
|
// Per-module imports (recommended):
|
|
12
12
|
import { KanbanBoard } from '@devalok/shilp-sutra-karm/board'
|
|
13
|
-
import {
|
|
13
|
+
import { TaskPanel, TaskColumnPicker, SubtasksTab } from '@devalok/shilp-sutra-karm/tasks'
|
|
14
14
|
import { ChatPanel } from '@devalok/shilp-sutra-karm/chat'
|
|
15
15
|
import { AttendanceCTA, DailyBrief } from '@devalok/shilp-sutra-karm/dashboard'
|
|
16
16
|
import { AccentProvider, ClientPortalHeader, ProjectCard } from '@devalok/shilp-sutra-karm/client'
|
|
17
17
|
import { AdminDashboard, BreakAdmin } from '@devalok/shilp-sutra-karm/admin'
|
|
18
18
|
|
|
19
19
|
// Or from root barrel:
|
|
20
|
-
import { KanbanBoard,
|
|
20
|
+
import { KanbanBoard, TaskPanel, ChatPanel } from '@devalok/shilp-sutra-karm'
|
|
21
21
|
|
|
22
22
|
## Module Reference
|
|
23
23
|
|
|
@@ -50,17 +50,42 @@ and state updates. Example wiring a custom column header action:
|
|
|
50
50
|
/>
|
|
51
51
|
|
|
52
52
|
### Tasks (`/tasks`)
|
|
53
|
+
|
|
54
|
+
**TaskPanel (v2 composition API — recommended)**
|
|
55
|
+
Headless compound component. Shell subcomponents:
|
|
56
|
+
- TaskPanel (root): children, className — flex column container
|
|
57
|
+
- TaskPanel.Header: children, className — top section with border
|
|
58
|
+
- TaskPanel.Title: value, editable?, onUpdate?, subtask?, className — inline-editable heading
|
|
59
|
+
- TaskPanel.Properties: children, className — property rows container
|
|
60
|
+
- TaskPanel.Property: icon, label, children, className — single property row (120px label + flex value)
|
|
61
|
+
- TaskPanel.Tabs: defaultTab, onTabChange?, children — tab system (children must be TaskPanel.Tab)
|
|
62
|
+
- TaskPanel.Tab: id, label, icon?, children — declarative tab definition
|
|
63
|
+
- TaskPanel.Loading: className — skeleton placeholder
|
|
64
|
+
|
|
65
|
+
**Pickers (7)** — all support readOnly?, className?, forwardRef
|
|
66
|
+
- TaskColumnPicker: columns[], value(string), onChange(id)
|
|
67
|
+
- TaskPriorityPicker: value(Priority), onChange(priority)
|
|
68
|
+
- TaskMemberPicker: members[], value(string|null), onChange(id|null), placeholder?
|
|
69
|
+
- TaskAssigneePicker: members[], value(Member[]), onAssign(id), onUnassign(id)
|
|
70
|
+
- TaskDatePicker: value(Date|string|null), onChange(date|null), presets?(default:true)
|
|
71
|
+
- TaskLabelEditor: value(string[]), onChange(labels), availableLabels?(LabelOption[])
|
|
72
|
+
- TaskVisibilityPicker: value(Visibility), onChange(v), confirmOnPublic?
|
|
73
|
+
|
|
74
|
+
**Tab Pieces (16)** — for custom tab layouts
|
|
75
|
+
Subtasks: SubtaskProgress(completed,total), SubtaskList(children), SubtaskItem(subtask,isComplete,onToggle?,onClick?), SubtaskAddForm(onCreate)
|
|
76
|
+
Conversation: MessageList(children,autoScroll?), MessageBubble(comment,clientMode?,renderViewer?), MessageInput(onSubmit,renderEditor?,clientMode?), VisibilityWarning
|
|
77
|
+
Files: FileDropZone(onUpload,isUploading?,accept?), FileList(children), FileItem(file,onDelete?,readOnly?)
|
|
78
|
+
Review: ReviewCard(review,onUpdateStatus?), ReviewResponseForm(reviewId,onSubmit), ReviewRequestButton(members,onRequest)
|
|
79
|
+
Activity: ActivityTimeline(children), ActivityEntry(entry)
|
|
80
|
+
|
|
81
|
+
**Pre-assembled tabs** (unchanged from v0.18.0, usable inside TaskPanel.Tab):
|
|
82
|
+
- SubtasksTab, ConversationTab, FilesTab, ReviewTab, ActivityTab
|
|
83
|
+
|
|
84
|
+
**TaskDetailPanel (deprecated)** — monolithic v0.18.0 component, still exported. Migrate to TaskPanel.
|
|
53
85
|
- TaskDetailPanel: task(FullTask|null), open, onOpenChange, columns[], members[], activities[], clientMode?, onTitleUpdate, onPropertyUpdate, onAssign, onUnassign, onCreateSubtask, onToggleSubtask, onRequestReview, onUpdateReviewStatus + more callbacks
|
|
54
86
|
- TaskProperties: task, columns[], members[], onUpdate, onAssign, onUnassign, readOnly?, editableFields?, renderPriorityIndicator?, renderDatePicker?
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- FilesTab: files[], onUpload, onDelete, isUploading?, readOnly?
|
|
58
|
-
- ReviewTab: reviews[], members[], onRequestReview, onUpdateStatus
|
|
59
|
-
- SubtasksTab: subtasks[], onCreateSubtask, onToggleSubtask, onClickSubtask?, readOnly?
|
|
60
|
-
|
|
61
|
-
Type: ExtraTab = { id: string, label: string, icon?: ReactNode, content: ReactNode, position?: 'before' | 'after' }
|
|
62
|
-
TaskDetailPanel opens as a Sheet with tabs: Properties, Subtasks, Review, Conversation, Files, Activity. Supports extraTabs?: ExtraTab[] for custom tabs.
|
|
63
|
-
Supports clientMode for read-only client portal views.
|
|
87
|
+
|
|
88
|
+
Shared types: Priority, Visibility, CommentAuthorType, LabelOption, Member, Column, Subtask, ReviewRequest, Comment, TaskFile, AuditLogEntry
|
|
64
89
|
Priority values: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT'
|
|
65
90
|
Visibility: 'INTERNAL' | 'EVERYONE'
|
|
66
91
|
|
|
@@ -128,7 +153,7 @@ BreakRequestStatus: 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED'
|
|
|
128
153
|
|
|
129
154
|
- All components are callback-driven (emit updates via on* props, no internal state management)
|
|
130
155
|
- Admin components use compound pattern with React Context (AdminDashboard.Root provides context to children)
|
|
131
|
-
- Client mode: TaskDetailPanel, TaskProperties, FilesTab support readOnly + editableFields for client portal
|
|
156
|
+
- Client mode: All pickers support readOnly. TaskDetailPanel (deprecated), TaskProperties, FilesTab support readOnly + editableFields for client portal. With TaskPanel v2, control client mode by choosing which pickers/tabs to render.
|
|
132
157
|
- Chat supports streaming: pass isStreaming + streamingText for live AI responses
|
|
133
158
|
- Board uses dnd-kit: KanbanBoard handles all drag state, emits onTaskMove with final position
|
|
134
159
|
- All dates default to IST (Asia/Kolkata) timezone in admin utilities
|
|
@@ -136,7 +161,9 @@ BreakRequestStatus: 'PENDING' | 'APPROVED' | 'REJECTED' | 'CANCELLED'
|
|
|
136
161
|
## Common Mistakes -- DO NOT
|
|
137
162
|
|
|
138
163
|
- DO NOT manage DnD state outside KanbanBoard — it handles sensors, collision detection, and sorting internally
|
|
139
|
-
- DO NOT
|
|
164
|
+
- DO NOT use TaskDetailPanel for new code — use TaskPanel composition API instead
|
|
165
|
+
- DO NOT forget to pass both open AND onOpenChange to TaskDetailPanel if still using the deprecated API (it's a controlled Sheet)
|
|
166
|
+
- DO NOT use TaskPanel.Tab outside TaskPanel.Tabs — Tabs extracts props from Tab children
|
|
140
167
|
- DO NOT use AdminDashboard sub-components outside AdminDashboard.Root — they depend on context
|
|
141
168
|
- DO NOT use BreakAdmin sub-components outside BreakAdmin.Root — same compound pattern
|
|
142
169
|
- DO NOT pass raw Date objects for task dates — use ISO strings (the components parse them internally)
|