@devalok/shilp-sutra-karm 0.19.0 → 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 +902 -634
- 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/index.d.ts +1 -0
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +18 -17
- 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/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/task-action-row.md +159 -0
- package/package.json +82 -82
|
@@ -7,33 +7,57 @@
|
|
|
7
7
|
## Props
|
|
8
8
|
items: ScratchpadItem[] (REQUIRED)
|
|
9
9
|
onToggle: (id: string, done: boolean) => void (REQUIRED)
|
|
10
|
+
onAdd: (text: string) => void — enables quick-add input
|
|
11
|
+
onDelete: (id: string) => void — enables delete button on items
|
|
12
|
+
onEdit: (id: string, text: string) => void — enables inline editing (double-click)
|
|
13
|
+
onReorder: (items: ScratchpadItem[]) => void — enables drag-to-reorder
|
|
14
|
+
onPromote: (id: string) => void — enables promote-to-task button
|
|
15
|
+
maxItems: number (default: 20)
|
|
10
16
|
defaultOpen: boolean (default: true)
|
|
11
17
|
badgeCount: number
|
|
12
18
|
className: string
|
|
13
19
|
|
|
14
20
|
## Related Types
|
|
15
|
-
ScratchpadItem: { id: string; text: string; done: boolean }
|
|
21
|
+
ScratchpadItem: { id: string; text: string; done: boolean }
|
|
16
22
|
|
|
17
23
|
## Defaults
|
|
18
|
-
defaultOpen=true
|
|
24
|
+
maxItems=20, defaultOpen=true
|
|
19
25
|
|
|
20
26
|
## Example
|
|
21
27
|
```jsx
|
|
22
28
|
<SidebarScratchpad
|
|
23
29
|
items={scratchpadItems}
|
|
24
30
|
onToggle={(id, done) => toggleItem(id, done)}
|
|
31
|
+
onAdd={(text) => addItem(text)}
|
|
32
|
+
onDelete={(id) => deleteItem(id)}
|
|
33
|
+
onEdit={(id, text) => editItem(id, text)}
|
|
34
|
+
onReorder={(items) => reorderItems(items)}
|
|
35
|
+
onPromote={(id) => promoteToTask(id)}
|
|
36
|
+
maxItems={20}
|
|
25
37
|
badgeCount={scratchpadItems.filter(i => !i.done).length}
|
|
26
38
|
/>
|
|
27
39
|
```
|
|
28
40
|
|
|
29
41
|
## Gotchas
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Only supports toggling done state via checkboxes
|
|
42
|
+
- Compact sidebar layout built on the composable Scratchpad compound component
|
|
43
|
+
- Renders Scratchpad.Collapse > Scratchpad.List (compact) + Scratchpad.AddInput
|
|
33
44
|
- Collapsible header with chevron; uses CSS grid-rows transition for smooth collapse
|
|
34
45
|
- badgeCount shows a pill badge in the header; hidden when badgeCount is undefined, null, or 0
|
|
35
46
|
- Extends React.HTMLAttributes<HTMLDivElement>
|
|
47
|
+
- onAdd, onDelete, onEdit, onReorder, onPromote are all optional; features auto-enable when callbacks are provided
|
|
48
|
+
- AddInput uses compact placeholders: "Quick add..." and "+ Add..."
|
|
49
|
+
- List renders in compact mode (smaller text and spacing)
|
|
36
50
|
|
|
37
51
|
## Changes
|
|
52
|
+
### v0.20.0
|
|
53
|
+
- **Added** `onAdd` prop — enables quick-add input
|
|
54
|
+
- **Added** `onDelete` prop — enables delete button on items
|
|
55
|
+
- **Added** `onEdit` prop — inline editing via double-click
|
|
56
|
+
- **Added** `onReorder` prop — drag-to-reorder via @dnd-kit
|
|
57
|
+
- **Added** `onPromote` prop — promote-to-task button
|
|
58
|
+
- **Added** `maxItems` prop (default: 20)
|
|
59
|
+
- **Changed** Internally rebuilt on composable Scratchpad compound component
|
|
60
|
+
- **Changed** No longer read-only — supports full CRUD when callbacks provided
|
|
61
|
+
|
|
38
62
|
### v0.18.0
|
|
39
63
|
- **Added** Initial release
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# WeekHeatmap
|
|
2
|
+
|
|
3
|
+
Composable weekly task-completion heatmap with day cells, streak indicator, summary stats, and progress bar.
|
|
4
|
+
|
|
5
|
+
- Import: @devalok/shilp-sutra-karm/dashboard
|
|
6
|
+
- Server-safe: No
|
|
7
|
+
- Category: dashboard
|
|
8
|
+
|
|
9
|
+
## Compound Parts
|
|
10
|
+
|
|
11
|
+
| Part | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `WeekHeatmap` | Props shorthand — renders Root + DayStrip + Streak + Summary + ProgressBar |
|
|
14
|
+
| `WeekHeatmap.Root` | Context provider + layout wrapper |
|
|
15
|
+
| `WeekHeatmap.DayStrip` | 7-column grid of Day cells with keyboard navigation and MotionStagger animation |
|
|
16
|
+
| `WeekHeatmap.Day` | Individual day cell with tooltip, status color, and click/keyboard activation |
|
|
17
|
+
| `WeekHeatmap.Summary` | Text line showing completed/remaining/overdue counts |
|
|
18
|
+
| `WeekHeatmap.ProgressBar` | Progress bar colored by success, driven by totalCompleted/totalTasks |
|
|
19
|
+
| `WeekHeatmap.Streak` | Streak badge (hidden when streak <= 1) |
|
|
20
|
+
|
|
21
|
+
## Props (Root / Shorthand)
|
|
22
|
+
|
|
23
|
+
| Prop | Type | Default | Description |
|
|
24
|
+
|------|------|---------|-------------|
|
|
25
|
+
| days | WeekDay[] | REQUIRED | Array of 7 day objects |
|
|
26
|
+
| onDayClick | (date: string) => void | — | Called when a past or today day cell is clicked |
|
|
27
|
+
| overdue | number | — | Overdue task count shown in Summary |
|
|
28
|
+
| today | string | — | ISO date override for "today" (defaults to actual today) |
|
|
29
|
+
| className | string | — | Additional CSS classes |
|
|
30
|
+
|
|
31
|
+
## Props (DayStrip)
|
|
32
|
+
|
|
33
|
+
| Prop | Type | Default | Description |
|
|
34
|
+
|------|------|---------|-------------|
|
|
35
|
+
| className | string | — | Additional CSS classes |
|
|
36
|
+
|
|
37
|
+
## Props (Summary, ProgressBar, Streak)
|
|
38
|
+
|
|
39
|
+
All accept `className` and standard `HTMLDivElement` attributes. They read data from context.
|
|
40
|
+
|
|
41
|
+
## Related Types
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
interface WeekDay {
|
|
45
|
+
date: string // ISO date string (YYYY-MM-DD)
|
|
46
|
+
completed: number
|
|
47
|
+
total: number
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type DayStatus = 'complete' | 'partial' | 'none' | 'today' | 'future' | 'empty'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Day Status Colors
|
|
54
|
+
|
|
55
|
+
| Status | Condition | Color |
|
|
56
|
+
|--------|-----------|-------|
|
|
57
|
+
| complete | Past day, completed === total | success-9 |
|
|
58
|
+
| partial | Past day, completed > 0 but < total | warning-9 |
|
|
59
|
+
| none | Past day, completed === 0 | error-9 |
|
|
60
|
+
| today | date === today | info-9 with ring |
|
|
61
|
+
| future | date > today | surface-3 |
|
|
62
|
+
| empty | total === 0 | surface-2 dashed border |
|
|
63
|
+
|
|
64
|
+
## Defaults
|
|
65
|
+
today = new Date().toISOString().split('T')[0]
|
|
66
|
+
|
|
67
|
+
## Example
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
// Props shorthand
|
|
71
|
+
<WeekHeatmap days={days} onDayClick={(date) => navigate(date)} overdue={2} />
|
|
72
|
+
|
|
73
|
+
// Composable — custom arrangement
|
|
74
|
+
<WeekHeatmap.Root days={days} onDayClick={fn}>
|
|
75
|
+
<WeekHeatmap.DayStrip />
|
|
76
|
+
<WeekHeatmap.Streak />
|
|
77
|
+
<WeekHeatmap.Summary />
|
|
78
|
+
<WeekHeatmap.ProgressBar />
|
|
79
|
+
</WeekHeatmap.Root>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Gotchas
|
|
83
|
+
- DayStrip uses `role="grid"` with `role="row"` and `role="gridcell"` for a11y
|
|
84
|
+
- Keyboard navigation: ArrowLeft/ArrowRight moves focus between days, Home/End jump to first/last, Enter/Space activates onDayClick
|
|
85
|
+
- Uses roving tabIndex pattern — only the focused day has tabIndex=0
|
|
86
|
+
- Today's cell gets a MotionPop bounce animation; other days use MotionStagger fade-in
|
|
87
|
+
- Clicking a future or empty day does nothing (no onDayClick fired)
|
|
88
|
+
- Streak counts consecutive past days where completed === total; hidden when streak <= 1
|
|
89
|
+
- ProgressBar uses core Progress component with `color="success"` and `size="sm"`
|
|
90
|
+
- Each Day cell shows a Tooltip with full date and completion count on hover
|
|
91
|
+
- Extends `React.HTMLAttributes<HTMLDivElement>` (Root omits `onDayClick` from native HTML)
|
|
92
|
+
|
|
93
|
+
## Changes
|
|
94
|
+
### v0.20.0
|
|
95
|
+
- **Added** Initial release — composable WeekHeatmap with Root, DayStrip, Day, Summary, ProgressBar, Streak
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# TaskActionRow
|
|
2
|
+
|
|
3
|
+
Composable task row for action lists, "my tasks", and dashboard views. Shows checkbox, priority, title, labels, project badge, due date, status badge, and navigate button.
|
|
4
|
+
|
|
5
|
+
- Import: @devalok/shilp-sutra-karm/tasks
|
|
6
|
+
- Server-safe: No
|
|
7
|
+
- Category: tasks
|
|
8
|
+
|
|
9
|
+
## Compound Parts
|
|
10
|
+
|
|
11
|
+
| Part | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `TaskActionRow` | Props shorthand — renders selected sub-components via show* flags |
|
|
14
|
+
| `TaskActionRow.Root` | Context provider + row wrapper with separator, click, and keyboard activation |
|
|
15
|
+
| `TaskActionRow.Checkbox` | Completion checkbox; stops propagation to avoid triggering row click |
|
|
16
|
+
| `TaskActionRow.Priority` | PriorityIndicator in compact display mode |
|
|
17
|
+
| `TaskActionRow.Title` | Task title text with optional truncation |
|
|
18
|
+
| `TaskActionRow.Labels` | Label badges with overflow count (+N) |
|
|
19
|
+
| `TaskActionRow.ProjectBadge` | Project name badge with optional click handler |
|
|
20
|
+
| `TaskActionRow.DueDate` | Formatted short date with overdue/today color coding |
|
|
21
|
+
| `TaskActionRow.StatusBadge` | StatusBadge mapped from task.stage |
|
|
22
|
+
| `TaskActionRow.Navigate` | Hover-reveal chevron button for opening the task |
|
|
23
|
+
|
|
24
|
+
## Props (Shorthand)
|
|
25
|
+
|
|
26
|
+
| Prop | Type | Default | Description |
|
|
27
|
+
|------|------|---------|-------------|
|
|
28
|
+
| task | TaskActionRowTask | REQUIRED | Task data object |
|
|
29
|
+
| onClick | () => void | — | Row click handler; adds role="button" and keyboard activation |
|
|
30
|
+
| onComplete | (taskId: string) => void \| Promise<void> | — | Checkbox completion callback |
|
|
31
|
+
| onContextMenu | (e: React.MouseEvent) => void | — | Right-click handler |
|
|
32
|
+
| showCheckbox | boolean | — | Show completion checkbox |
|
|
33
|
+
| showPriority | boolean | — | Show priority indicator |
|
|
34
|
+
| showLabels | boolean | — | Show label badges |
|
|
35
|
+
| showProject | boolean | — | Show project name badge |
|
|
36
|
+
| showDueDate | boolean | — | Show due date |
|
|
37
|
+
| showNavigate | boolean | — | Show navigate chevron button |
|
|
38
|
+
| showStatusBadge | boolean | — | Show stage status badge |
|
|
39
|
+
| truncateTitle | boolean | — | Truncate long titles with ellipsis |
|
|
40
|
+
| showSeparator | boolean | true | Show bottom border separator |
|
|
41
|
+
| maxLabels | number | 2 | Max visible labels before +N overflow |
|
|
42
|
+
| navigateHref | string | — | URL for navigate button |
|
|
43
|
+
| onProjectClick | (e: React.MouseEvent) => void | — | Project badge click handler |
|
|
44
|
+
| onNavigateClick | (e: React.MouseEvent) => void | — | Navigate button click handler |
|
|
45
|
+
| className | string | — | Additional CSS classes |
|
|
46
|
+
|
|
47
|
+
## Props (Root)
|
|
48
|
+
|
|
49
|
+
| Prop | Type | Default | Description |
|
|
50
|
+
|------|------|---------|-------------|
|
|
51
|
+
| task | TaskActionRowTask | REQUIRED | Task data object |
|
|
52
|
+
| children | ReactNode | REQUIRED | Sub-components |
|
|
53
|
+
| onClick | () => void | — | Row click handler |
|
|
54
|
+
| onContextMenu | (e: React.MouseEvent) => void | — | Right-click handler |
|
|
55
|
+
| showSeparator | boolean | true | Show bottom border |
|
|
56
|
+
| className | string | — | Additional CSS classes |
|
|
57
|
+
|
|
58
|
+
## Props (Checkbox)
|
|
59
|
+
|
|
60
|
+
| Prop | Type | Default | Description |
|
|
61
|
+
|------|------|---------|-------------|
|
|
62
|
+
| onComplete | (taskId: string) => void \| Promise<void> | — | Called when checkbox is checked |
|
|
63
|
+
|
|
64
|
+
## Props (Title)
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
|------|------|---------|-------------|
|
|
68
|
+
| truncate | boolean | — | Enable text truncation |
|
|
69
|
+
| className | string | — | Additional CSS classes |
|
|
70
|
+
|
|
71
|
+
## Props (Labels)
|
|
72
|
+
|
|
73
|
+
| Prop | Type | Default | Description |
|
|
74
|
+
|------|------|---------|-------------|
|
|
75
|
+
| max | number | — | Max visible labels; overflow shows +N badge |
|
|
76
|
+
|
|
77
|
+
## Props (ProjectBadge)
|
|
78
|
+
|
|
79
|
+
| Prop | Type | Default | Description |
|
|
80
|
+
|------|------|---------|-------------|
|
|
81
|
+
| onClick | (e: React.MouseEvent) => void | — | Click handler; stops propagation |
|
|
82
|
+
|
|
83
|
+
## Props (Navigate)
|
|
84
|
+
|
|
85
|
+
| Prop | Type | Default | Description |
|
|
86
|
+
|------|------|---------|-------------|
|
|
87
|
+
| href | string | — | URL to navigate to on click |
|
|
88
|
+
| onClick | (e: React.MouseEvent) => void | — | Click handler (takes priority over href) |
|
|
89
|
+
|
|
90
|
+
## Related Types
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
type Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT'
|
|
94
|
+
|
|
95
|
+
interface TaskActionRowTask {
|
|
96
|
+
id: string
|
|
97
|
+
title: string
|
|
98
|
+
priority: Priority
|
|
99
|
+
dueDate?: string | null
|
|
100
|
+
projectName?: string
|
|
101
|
+
projectId?: string
|
|
102
|
+
stage?: string
|
|
103
|
+
isOverdue?: boolean
|
|
104
|
+
labels?: string[]
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Due Date Colors
|
|
109
|
+
|
|
110
|
+
| Condition | Color |
|
|
111
|
+
|-----------|-------|
|
|
112
|
+
| isOverdue | error-11 + font-medium |
|
|
113
|
+
| today | warning-11 |
|
|
114
|
+
| default | surface-fg-muted |
|
|
115
|
+
|
|
116
|
+
## Defaults
|
|
117
|
+
showSeparator=true, maxLabels=2
|
|
118
|
+
|
|
119
|
+
## Example
|
|
120
|
+
|
|
121
|
+
```tsx
|
|
122
|
+
// Props shorthand
|
|
123
|
+
<TaskActionRow
|
|
124
|
+
task={task}
|
|
125
|
+
onClick={() => openTask(task.id)}
|
|
126
|
+
onComplete={(id) => completeTask(id)}
|
|
127
|
+
showCheckbox
|
|
128
|
+
showPriority
|
|
129
|
+
showLabels
|
|
130
|
+
showDueDate
|
|
131
|
+
showNavigate
|
|
132
|
+
truncateTitle
|
|
133
|
+
/>
|
|
134
|
+
|
|
135
|
+
// Composable — custom layout
|
|
136
|
+
<TaskActionRow.Root task={task} onClick={() => openTask(task.id)}>
|
|
137
|
+
<TaskActionRow.Checkbox onComplete={completeTask} />
|
|
138
|
+
<TaskActionRow.Priority />
|
|
139
|
+
<TaskActionRow.Title truncate />
|
|
140
|
+
<TaskActionRow.Labels max={3} />
|
|
141
|
+
<TaskActionRow.DueDate />
|
|
142
|
+
<TaskActionRow.Navigate onClick={(e) => handleNav(e)} />
|
|
143
|
+
</TaskActionRow.Root>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Gotchas
|
|
147
|
+
- Root adds `role="button"` and `tabIndex={0}` only when `onClick` is provided
|
|
148
|
+
- Keyboard activation: Enter or Space triggers onClick on Root
|
|
149
|
+
- Checkbox stops click propagation to avoid triggering the row's onClick
|
|
150
|
+
- Navigate button is hover-reveal (opacity-0 by default, visible on group-hover/group-focus-within)
|
|
151
|
+
- ProjectBadge stops propagation on click to avoid triggering row onClick
|
|
152
|
+
- Navigate button stops propagation; if both href and onClick are provided, onClick takes priority
|
|
153
|
+
- Labels, ProjectBadge, DueDate, StatusBadge return null when their data is missing from the task
|
|
154
|
+
- StatusBadge maps task.stage (case-insensitive) to StatusBadge status values; unrecognized stages return null
|
|
155
|
+
- Priority, DueDate, and StatusBadge sub-components accept no custom props
|
|
156
|
+
|
|
157
|
+
## Changes
|
|
158
|
+
### v0.20.0
|
|
159
|
+
- **Added** Initial release — composable TaskActionRow with Root, Checkbox, Priority, Title, Labels, ProjectBadge, DueDate, StatusBadge, Navigate
|
package/package.json
CHANGED
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@devalok/shilp-sutra-karm",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Domain components for Karm — board, tasks, chat, dashboard, client, and admin",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "./dist/index.js",
|
|
8
|
-
"module": "./dist/index.js",
|
|
9
|
-
"types": "./dist/index.d.ts",
|
|
10
|
-
"sideEffects": [
|
|
11
|
-
"**/*.css"
|
|
12
|
-
],
|
|
13
|
-
"exports": {
|
|
14
|
-
".": {
|
|
15
|
-
"import": "./dist/index.js",
|
|
16
|
-
"default": "./dist/index.js",
|
|
17
|
-
"types": "./dist/index.d.ts"
|
|
18
|
-
},
|
|
19
|
-
"./board": {
|
|
20
|
-
"import": "./dist/board/index.js",
|
|
21
|
-
"default": "./dist/board/index.js",
|
|
22
|
-
"types": "./dist/board/index.d.ts"
|
|
23
|
-
},
|
|
24
|
-
"./tasks": {
|
|
25
|
-
"import": "./dist/tasks/index.js",
|
|
26
|
-
"default": "./dist/tasks/index.js",
|
|
27
|
-
"types": "./dist/tasks/index.d.ts"
|
|
28
|
-
},
|
|
29
|
-
"./chat": {
|
|
30
|
-
"import": "./dist/chat/index.js",
|
|
31
|
-
"default": "./dist/chat/index.js",
|
|
32
|
-
"types": "./dist/chat/index.d.ts"
|
|
33
|
-
},
|
|
34
|
-
"./dashboard": {
|
|
35
|
-
"import": "./dist/dashboard/index.js",
|
|
36
|
-
"default": "./dist/dashboard/index.js",
|
|
37
|
-
"types": "./dist/dashboard/index.d.ts"
|
|
38
|
-
},
|
|
39
|
-
"./client": {
|
|
40
|
-
"import": "./dist/client/index.js",
|
|
41
|
-
"default": "./dist/client/index.js",
|
|
42
|
-
"types": "./dist/client/index.d.ts"
|
|
43
|
-
},
|
|
44
|
-
"./admin": {
|
|
45
|
-
"import": "./dist/admin/index.js",
|
|
46
|
-
"default": "./dist/admin/index.js",
|
|
47
|
-
"types": "./dist/admin/index.d.ts"
|
|
48
|
-
},
|
|
49
|
-
"./docs/*": "./docs/components/*"
|
|
50
|
-
},
|
|
51
|
-
"files": [
|
|
52
|
-
"dist",
|
|
53
|
-
"docs/components",
|
|
54
|
-
"README.md",
|
|
55
|
-
"llms.txt"
|
|
56
|
-
],
|
|
57
|
-
"scripts": {
|
|
58
|
-
"build": "vite build && node scripts/inject-use-client.mjs",
|
|
59
|
-
"typecheck": "tsc --noEmit",
|
|
60
|
-
"lint": "eslint src/",
|
|
61
|
-
"prepublishOnly": "pnpm build"
|
|
62
|
-
},
|
|
63
|
-
"peerDependencies": {
|
|
64
|
-
"@devalok/shilp-sutra": ">=0.18.0",
|
|
65
|
-
"@tabler/icons-react": "^3.0.0",
|
|
66
|
-
"framer-motion": "^12.0.0",
|
|
67
|
-
"react": "^18 || ^19",
|
|
68
|
-
"react-dom": "^18 || ^19"
|
|
69
|
-
},
|
|
70
|
-
"devDependencies": {
|
|
71
|
-
"@devalok/shilp-sutra": "workspace:*",
|
|
72
|
-
"@dnd-kit/core": "^6.3.1",
|
|
73
|
-
"@dnd-kit/sortable": "^10.0.0",
|
|
74
|
-
"@dnd-kit/utilities": "^3.2.2",
|
|
75
|
-
"class-variance-authority": "^0.7.1",
|
|
76
|
-
"clsx": "^2.1.1",
|
|
77
|
-
"date-fns": "^4.1.0",
|
|
78
|
-
"framer-motion": "^12.36.0",
|
|
79
|
-
"react-markdown": "^10.1.0",
|
|
80
|
-
"tailwind-merge": "^3.0.1"
|
|
81
|
-
}
|
|
82
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@devalok/shilp-sutra-karm",
|
|
3
|
+
"version": "0.20.0",
|
|
4
|
+
"description": "Domain components for Karm — board, tasks, chat, dashboard, client, and admin",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"sideEffects": [
|
|
11
|
+
"**/*.css"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"default": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./board": {
|
|
20
|
+
"import": "./dist/board/index.js",
|
|
21
|
+
"default": "./dist/board/index.js",
|
|
22
|
+
"types": "./dist/board/index.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./tasks": {
|
|
25
|
+
"import": "./dist/tasks/index.js",
|
|
26
|
+
"default": "./dist/tasks/index.js",
|
|
27
|
+
"types": "./dist/tasks/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./chat": {
|
|
30
|
+
"import": "./dist/chat/index.js",
|
|
31
|
+
"default": "./dist/chat/index.js",
|
|
32
|
+
"types": "./dist/chat/index.d.ts"
|
|
33
|
+
},
|
|
34
|
+
"./dashboard": {
|
|
35
|
+
"import": "./dist/dashboard/index.js",
|
|
36
|
+
"default": "./dist/dashboard/index.js",
|
|
37
|
+
"types": "./dist/dashboard/index.d.ts"
|
|
38
|
+
},
|
|
39
|
+
"./client": {
|
|
40
|
+
"import": "./dist/client/index.js",
|
|
41
|
+
"default": "./dist/client/index.js",
|
|
42
|
+
"types": "./dist/client/index.d.ts"
|
|
43
|
+
},
|
|
44
|
+
"./admin": {
|
|
45
|
+
"import": "./dist/admin/index.js",
|
|
46
|
+
"default": "./dist/admin/index.js",
|
|
47
|
+
"types": "./dist/admin/index.d.ts"
|
|
48
|
+
},
|
|
49
|
+
"./docs/*": "./docs/components/*"
|
|
50
|
+
},
|
|
51
|
+
"files": [
|
|
52
|
+
"dist",
|
|
53
|
+
"docs/components",
|
|
54
|
+
"README.md",
|
|
55
|
+
"llms.txt"
|
|
56
|
+
],
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "vite build && node scripts/inject-use-client.mjs",
|
|
59
|
+
"typecheck": "tsc --noEmit",
|
|
60
|
+
"lint": "eslint src/",
|
|
61
|
+
"prepublishOnly": "pnpm build"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"@devalok/shilp-sutra": ">=0.18.0",
|
|
65
|
+
"@tabler/icons-react": "^3.0.0",
|
|
66
|
+
"framer-motion": "^12.0.0",
|
|
67
|
+
"react": "^18 || ^19",
|
|
68
|
+
"react-dom": "^18 || ^19"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@devalok/shilp-sutra": "workspace:*",
|
|
72
|
+
"@dnd-kit/core": "^6.3.1",
|
|
73
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
74
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
75
|
+
"class-variance-authority": "^0.7.1",
|
|
76
|
+
"clsx": "^2.1.1",
|
|
77
|
+
"date-fns": "^4.1.0",
|
|
78
|
+
"framer-motion": "^12.36.0",
|
|
79
|
+
"react-markdown": "^10.1.0",
|
|
80
|
+
"tailwind-merge": "^3.0.1"
|
|
81
|
+
}
|
|
82
|
+
}
|