@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.
Files changed (93) hide show
  1. package/dist/_chunks/render-adjustment-type.js +50 -48
  2. package/dist/_chunks/sidebar-scratchpad.js +714 -326
  3. package/dist/_chunks/task-detail-panel.js +902 -634
  4. package/dist/_chunks/vendor.js +1154 -1123
  5. package/dist/dashboard/index.d.ts +20 -0
  6. package/dist/dashboard/index.d.ts.map +1 -1
  7. package/dist/dashboard/index.js +451 -5
  8. package/dist/dashboard/project-health-card.d.ts +22 -0
  9. package/dist/dashboard/project-health-card.d.ts.map +1 -0
  10. package/dist/dashboard/scratchpad/index.d.ts +13 -0
  11. package/dist/dashboard/scratchpad/index.d.ts.map +1 -0
  12. package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts +11 -0
  13. package/dist/dashboard/scratchpad/scratchpad-add-input.d.ts.map +1 -0
  14. package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts +15 -0
  15. package/dist/dashboard/scratchpad/scratchpad-collapse.d.ts.map +1 -0
  16. package/dist/dashboard/scratchpad/scratchpad-context.d.ts +44 -0
  17. package/dist/dashboard/scratchpad/scratchpad-context.d.ts.map +1 -0
  18. package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts +13 -0
  19. package/dist/dashboard/scratchpad/scratchpad-empty-state.d.ts.map +1 -0
  20. package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts +7 -0
  21. package/dist/dashboard/scratchpad/scratchpad-filter-toggle.d.ts.map +1 -0
  22. package/dist/dashboard/scratchpad/scratchpad-header.d.ts +9 -0
  23. package/dist/dashboard/scratchpad/scratchpad-header.d.ts.map +1 -0
  24. package/dist/dashboard/scratchpad/scratchpad-item.d.ts +13 -0
  25. package/dist/dashboard/scratchpad/scratchpad-item.d.ts.map +1 -0
  26. package/dist/dashboard/scratchpad/scratchpad-list.d.ts +9 -0
  27. package/dist/dashboard/scratchpad/scratchpad-list.d.ts.map +1 -0
  28. package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts +11 -0
  29. package/dist/dashboard/scratchpad/scratchpad-progress-ring.d.ts.map +1 -0
  30. package/dist/dashboard/scratchpad/scratchpad-root.d.ts +8 -0
  31. package/dist/dashboard/scratchpad/scratchpad-root.d.ts.map +1 -0
  32. package/dist/dashboard/scratchpad/scratchpad.d.ts +29 -0
  33. package/dist/dashboard/scratchpad/scratchpad.d.ts.map +1 -0
  34. package/dist/dashboard/scratchpad-widget.d.ts +5 -5
  35. package/dist/dashboard/scratchpad-widget.d.ts.map +1 -1
  36. package/dist/dashboard/sidebar-scratchpad.d.ts +8 -1
  37. package/dist/dashboard/sidebar-scratchpad.d.ts.map +1 -1
  38. package/dist/dashboard/week-heatmap/index.d.ts +10 -0
  39. package/dist/dashboard/week-heatmap/index.d.ts.map +1 -0
  40. package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts +31 -0
  41. package/dist/dashboard/week-heatmap/week-heatmap-context.d.ts.map +1 -0
  42. package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts +7 -0
  43. package/dist/dashboard/week-heatmap/week-heatmap-day-strip.d.ts.map +1 -0
  44. package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts +15 -0
  45. package/dist/dashboard/week-heatmap/week-heatmap-day.d.ts.map +1 -0
  46. package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts +7 -0
  47. package/dist/dashboard/week-heatmap/week-heatmap-progress-bar.d.ts.map +1 -0
  48. package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts +8 -0
  49. package/dist/dashboard/week-heatmap/week-heatmap-root.d.ts.map +1 -0
  50. package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts +7 -0
  51. package/dist/dashboard/week-heatmap/week-heatmap-streak.d.ts.map +1 -0
  52. package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts +7 -0
  53. package/dist/dashboard/week-heatmap/week-heatmap-summary.d.ts.map +1 -0
  54. package/dist/dashboard/week-heatmap/week-heatmap.d.ts +33 -0
  55. package/dist/dashboard/week-heatmap/week-heatmap.d.ts.map +1 -0
  56. package/dist/index.d.ts +1 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +57 -56
  59. package/dist/tasks/index.d.ts +1 -0
  60. package/dist/tasks/index.d.ts.map +1 -1
  61. package/dist/tasks/index.js +18 -17
  62. package/dist/tasks/task-action-row/index.d.ts +3 -0
  63. package/dist/tasks/task-action-row/index.d.ts.map +1 -0
  64. package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts +8 -0
  65. package/dist/tasks/task-action-row/task-action-row-checkbox.d.ts.map +1 -0
  66. package/dist/tasks/task-action-row/task-action-row-context.d.ts +21 -0
  67. package/dist/tasks/task-action-row/task-action-row-context.d.ts.map +1 -0
  68. package/dist/tasks/task-action-row/task-action-row-due-date.d.ts +5 -0
  69. package/dist/tasks/task-action-row/task-action-row-due-date.d.ts.map +1 -0
  70. package/dist/tasks/task-action-row/task-action-row-labels.d.ts +8 -0
  71. package/dist/tasks/task-action-row/task-action-row-labels.d.ts.map +1 -0
  72. package/dist/tasks/task-action-row/task-action-row-navigate.d.ts +9 -0
  73. package/dist/tasks/task-action-row/task-action-row-navigate.d.ts.map +1 -0
  74. package/dist/tasks/task-action-row/task-action-row-priority.d.ts +5 -0
  75. package/dist/tasks/task-action-row/task-action-row-priority.d.ts.map +1 -0
  76. package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts +8 -0
  77. package/dist/tasks/task-action-row/task-action-row-project-badge.d.ts.map +1 -0
  78. package/dist/tasks/task-action-row/task-action-row-root.d.ts +14 -0
  79. package/dist/tasks/task-action-row/task-action-row-root.d.ts.map +1 -0
  80. package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts +5 -0
  81. package/dist/tasks/task-action-row/task-action-row-status-badge.d.ts.map +1 -0
  82. package/dist/tasks/task-action-row/task-action-row-title.d.ts +9 -0
  83. package/dist/tasks/task-action-row/task-action-row-title.d.ts.map +1 -0
  84. package/dist/tasks/task-action-row/task-action-row.d.ts +48 -0
  85. package/dist/tasks/task-action-row/task-action-row.d.ts.map +1 -0
  86. package/dist/tasks/task-detail-panel.d.ts.map +1 -1
  87. package/docs/components/dashboard/project-health-card.md +90 -0
  88. package/docs/components/dashboard/scratchpad-widget.md +17 -0
  89. package/docs/components/dashboard/scratchpad.md +151 -0
  90. package/docs/components/dashboard/sidebar-scratchpad.md +29 -5
  91. package/docs/components/dashboard/week-heatmap.md +95 -0
  92. package/docs/components/tasks/task-action-row.md +159 -0
  93. package/package.json +82 -82
@@ -5,7 +5,7 @@ import { cn as p } from "@devalok/shilp-sutra/ui/lib/utils";
5
5
  import { Tabs as J, TabsList as ee, TabsTrigger as se, TabsContent as te } from "@devalok/shilp-sutra/ui";
6
6
  import { Skeleton as v } from "@devalok/shilp-sutra/ui/skeleton";
7
7
  import { P as ae } from "../_chunks/task-detail-panel.js";
8
- import { b as We, A as qe, c as ze, C as Qe, d as Ue, e as Xe, f as Ze, F as Je, M as es, g as ss, h as ts, i as as, j as rs, k as ns, R as cs, l as is, m as ls, n as os, o as ds, S as us, T as fs, a as ms, V as ps } from "../_chunks/task-detail-panel.js";
8
+ import { c as We, A as qe, d as ze, C as Qe, e as Ue, f as Xe, g as Ze, F as Je, M as es, h as ss, i as ts, j as as, k as rs, l as ns, R as cs, m as is, n as ls, o as os, p as ds, S as us, T as fs, a as ms, b as ps, V as gs } from "../_chunks/task-detail-panel.js";
9
9
  import { Avatar as M, AvatarImage as O, AvatarFallback as A } from "@devalok/shilp-sutra/ui/avatar";
10
10
  import { MemberPicker as _ } from "@devalok/shilp-sutra/composed/member-picker";
11
11
  import { getInitials as L } from "@devalok/shilp-sutra/composed/lib/string-utils";
@@ -393,7 +393,7 @@ function De() {
393
393
  const r = /* @__PURE__ */ new Date(), s = r.getDay(), n = s === 0 ? 1 : 8 - s, l = new Date(r);
394
394
  return l.setDate(r.getDate() + n), l;
395
395
  }
396
- function S(r) {
396
+ function R(r) {
397
397
  const s = /* @__PURE__ */ new Date();
398
398
  return s.setDate(s.getDate() + r), s;
399
399
  }
@@ -453,7 +453,7 @@ const Ie = i.forwardRef(
453
453
  "button",
454
454
  {
455
455
  type: "button",
456
- onClick: () => a(S(1)),
456
+ onClick: () => a(R(1)),
457
457
  className: "rounded-ds-md px-ds-03 py-ds-02 text-left text-ds-sm text-surface-fg transition-colors hover:bg-surface-3",
458
458
  children: "Tomorrow"
459
459
  }
@@ -471,7 +471,7 @@ const Ie = i.forwardRef(
471
471
  "button",
472
472
  {
473
473
  type: "button",
474
- onClick: () => a(S(7)),
474
+ onClick: () => a(R(7)),
475
475
  className: "rounded-ds-md px-ds-03 py-ds-02 text-left text-ds-sm text-surface-fg transition-colors hover:bg-surface-3",
476
476
  children: "+7 days"
477
477
  }
@@ -480,7 +480,7 @@ const Ie = i.forwardRef(
480
480
  "button",
481
481
  {
482
482
  type: "button",
483
- onClick: () => a(S(14)),
483
+ onClick: () => a(R(14)),
484
484
  className: "rounded-ds-md px-ds-03 py-ds-02 text-left text-ds-sm text-surface-fg transition-colors hover:bg-surface-3",
485
485
  children: "+14 days"
486
486
  }
@@ -514,7 +514,7 @@ const Ie = i.forwardRef(
514
514
  }
515
515
  );
516
516
  Ie.displayName = "TaskDatePicker";
517
- const Se = i.forwardRef(
517
+ const Re = i.forwardRef(
518
518
  function({ value: s, onChange: n, availableLabels: l = [], readOnly: f, className: u }, h) {
519
519
  const [o, t] = i.useState(""), [m, g] = i.useState(!1), [a, k] = i.useState(!1), x = i.useRef(null), y = i.useRef(!1), N = i.useMemo(() => {
520
520
  const d = /* @__PURE__ */ new Map();
@@ -636,8 +636,8 @@ const Se = i.forwardRef(
636
636
  ] });
637
637
  }
638
638
  );
639
- Se.displayName = "TaskLabelEditor";
640
- const R = [
639
+ Re.displayName = "TaskLabelEditor";
640
+ const S = [
641
641
  {
642
642
  value: "INTERNAL",
643
643
  icon: oe,
@@ -650,9 +650,9 @@ const R = [
650
650
  label: "Everyone",
651
651
  description: "Visible to clients"
652
652
  }
653
- ], Re = i.forwardRef(
653
+ ], Se = i.forwardRef(
654
654
  function({ value: s, onChange: n, confirmOnPublic: l, readOnly: f, className: u }, h) {
655
- const [o, t] = i.useState(!1), [m, g] = i.useState(!1), a = R.find((N) => N.value === s) ?? R[0], k = a.icon, x = (N) => {
655
+ const [o, t] = i.useState(!1), [m, g] = i.useState(!1), a = S.find((N) => N.value === s) ?? S[0], k = a.icon, x = (N) => {
656
656
  if (N === s) {
657
657
  t(!1);
658
658
  return;
@@ -692,7 +692,7 @@ const R = [
692
692
  className: "w-[220px] border-surface-border-strong bg-surface-1 p-ds-02",
693
693
  align: "start",
694
694
  sideOffset: 4,
695
- children: R.map((N) => {
695
+ children: S.map((N) => {
696
696
  const w = N.icon;
697
697
  return /* @__PURE__ */ c(
698
698
  "button",
@@ -732,7 +732,7 @@ const R = [
732
732
  ] });
733
733
  }
734
734
  );
735
- Re.displayName = "TaskVisibilityPicker";
735
+ Se.displayName = "TaskVisibilityPicker";
736
736
  export {
737
737
  We as ActivityEntry,
738
738
  qe as ActivityTab,
@@ -754,15 +754,16 @@ export {
754
754
  os as SubtaskList,
755
755
  ds as SubtaskProgress,
756
756
  us as SubtasksTab,
757
+ fs as TaskActionRow,
757
758
  Te as TaskAssigneePicker,
758
759
  Ne as TaskColumnPicker,
759
760
  Ie as TaskDatePicker,
760
- fs as TaskDetailPanel,
761
- Se as TaskLabelEditor,
761
+ ms as TaskDetailPanel,
762
+ Re as TaskLabelEditor,
762
763
  ve as TaskMemberPicker,
763
764
  Ke as TaskPanel,
764
765
  we as TaskPriorityPicker,
765
- ms as TaskProperties,
766
- Re as TaskVisibilityPicker,
767
- ps as VisibilityWarning
766
+ ps as TaskProperties,
767
+ Se as TaskVisibilityPicker,
768
+ gs as VisibilityWarning
768
769
  };
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ export { TaskActionRow, type TaskActionRowProps, type TaskActionRowTask, type TaskActionRowContextValue, type TaskActionRowRootProps, type TaskActionRowCheckboxProps, type TaskActionRowTitleProps, type TaskActionRowLabelsProps, type TaskActionRowProjectBadgeProps, type TaskActionRowNavigateProps, } from './task-action-row';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ export interface TaskActionRowCheckboxProps {
4
+ onComplete?: (taskId: string) => void | Promise<void>;
5
+ }
6
+ declare const TaskActionRowCheckbox: React.ForwardRefExoticComponent<TaskActionRowCheckboxProps & React.RefAttributes<HTMLButtonElement>>;
7
+ export { TaskActionRowCheckbox };
8
+ //# sourceMappingURL=task-action-row-checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-checkbox.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-checkbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtD;AAED,QAAA,MAAM,qBAAqB,sGAoC1B,CAAA;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { Priority } from '../task-types';
3
+ import * as React from 'react';
4
+ export interface TaskActionRowTask {
5
+ id: string;
6
+ title: string;
7
+ priority: Priority;
8
+ dueDate?: string | null;
9
+ projectName?: string;
10
+ projectId?: string;
11
+ stage?: string;
12
+ isOverdue?: boolean;
13
+ labels?: string[];
14
+ }
15
+ export interface TaskActionRowContextValue {
16
+ task: TaskActionRowTask;
17
+ }
18
+ declare const TaskActionRowContext: React.Context<TaskActionRowContextValue | null>;
19
+ export declare function useTaskActionRow(): TaskActionRowContextValue;
20
+ export { TaskActionRowContext };
21
+ //# sourceMappingURL=task-action-row-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-context.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,iBAAiB,CAAA;CACxB;AAED,QAAA,MAAM,oBAAoB,iDAA8D,CAAA;AAExF,wBAAgB,gBAAgB,IAAI,yBAAyB,CAM5D;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ declare const TaskActionRowDueDate: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
4
+ export { TaskActionRowDueDate };
5
+ //# sourceMappingURL=task-action-row-due-date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-due-date.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-due-date.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAmB9B,QAAA,MAAM,oBAAoB,4GAuBzB,CAAA;AAGD,OAAO,EAAE,oBAAoB,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ export interface TaskActionRowLabelsProps {
4
+ max?: number;
5
+ }
6
+ declare const TaskActionRowLabels: React.ForwardRefExoticComponent<TaskActionRowLabelsProps & React.RefAttributes<HTMLDivElement>>;
7
+ export { TaskActionRowLabels };
8
+ //# sourceMappingURL=task-action-row-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-labels.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-labels.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,QAAA,MAAM,mBAAmB,iGAwBxB,CAAA;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ export interface TaskActionRowNavigateProps {
4
+ href?: string;
5
+ onClick?: (e: React.MouseEvent) => void;
6
+ }
7
+ declare const TaskActionRowNavigate: React.ForwardRefExoticComponent<TaskActionRowNavigateProps & React.RefAttributes<HTMLButtonElement>>;
8
+ export { TaskActionRowNavigate };
9
+ //# sourceMappingURL=task-action-row-navigate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-navigate.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-navigate.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;CACxC;AAED,QAAA,MAAM,qBAAqB,sGA0B1B,CAAA;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ declare const TaskActionRowPriority: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ export { TaskActionRowPriority };
5
+ //# sourceMappingURL=task-action-row-priority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-priority.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-priority.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,QAAA,MAAM,qBAAqB,2GAY1B,CAAA;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ export interface TaskActionRowProjectBadgeProps {
4
+ onClick?: (e: React.MouseEvent) => void;
5
+ }
6
+ declare const TaskActionRowProjectBadge: React.ForwardRefExoticComponent<TaskActionRowProjectBadgeProps & React.RefAttributes<HTMLSpanElement>>;
7
+ export { TaskActionRowProjectBadge };
8
+ //# sourceMappingURL=task-action-row-project-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-project-badge.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-project-badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;CACxC;AAED,QAAA,MAAM,yBAAyB,wGA6B9B,CAAA;AAGD,OAAO,EAAE,yBAAyB,EAAE,CAAA"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { TaskActionRowTask } from './task-action-row-context';
3
+ import * as React from 'react';
4
+ export interface TaskActionRowRootProps {
5
+ task: TaskActionRowTask;
6
+ children: React.ReactNode;
7
+ onClick?: () => void;
8
+ onContextMenu?: (e: React.MouseEvent) => void;
9
+ showSeparator?: boolean;
10
+ className?: string;
11
+ }
12
+ declare const TaskActionRowRoot: React.ForwardRefExoticComponent<TaskActionRowRootProps & React.RefAttributes<HTMLDivElement>>;
13
+ export { TaskActionRowRoot };
14
+ //# sourceMappingURL=task-action-row-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-root.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-root.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAExF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,iBAAiB,+FAiCtB,CAAA;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ declare const TaskActionRowStatusBadge: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
4
+ export { TaskActionRowStatusBadge };
5
+ //# sourceMappingURL=task-action-row-status-badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-status-badge.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-status-badge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAe9B,QAAA,MAAM,wBAAwB,4GAoB7B,CAAA;AAGD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ export interface TaskActionRowTitleProps {
4
+ truncate?: boolean;
5
+ className?: string;
6
+ }
7
+ declare const TaskActionRowTitle: React.ForwardRefExoticComponent<TaskActionRowTitleProps & React.RefAttributes<HTMLSpanElement>>;
8
+ export { TaskActionRowTitle };
9
+ //# sourceMappingURL=task-action-row-title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row-title.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row-title.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,kBAAkB,iGAiBvB,CAAA;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { TaskActionRowRootProps } from './task-action-row-root';
3
+ import { TaskActionRowCheckboxProps } from './task-action-row-checkbox';
4
+ import { TaskActionRowTitleProps } from './task-action-row-title';
5
+ import { TaskActionRowLabelsProps } from './task-action-row-labels';
6
+ import { TaskActionRowProjectBadgeProps } from './task-action-row-project-badge';
7
+ import { TaskActionRowNavigateProps } from './task-action-row-navigate';
8
+ import { TaskActionRowTask } from './task-action-row-context';
9
+ import * as React from 'react';
10
+ export interface TaskActionRowProps {
11
+ task: TaskActionRowTask;
12
+ onClick?: () => void;
13
+ onComplete?: (taskId: string) => void | Promise<void>;
14
+ onContextMenu?: (e: React.MouseEvent) => void;
15
+ showCheckbox?: boolean;
16
+ showPriority?: boolean;
17
+ showLabels?: boolean;
18
+ showProject?: boolean;
19
+ showDueDate?: boolean;
20
+ showNavigate?: boolean;
21
+ showStatusBadge?: boolean;
22
+ truncateTitle?: boolean;
23
+ showSeparator?: boolean;
24
+ maxLabels?: number;
25
+ navigateHref?: string;
26
+ onProjectClick?: (e: React.MouseEvent) => void;
27
+ onNavigateClick?: (e: React.MouseEvent) => void;
28
+ className?: string;
29
+ }
30
+ export declare const TaskActionRow: React.ForwardRefExoticComponent<TaskActionRowProps & React.RefAttributes<HTMLDivElement>> & {
31
+ Root: React.ForwardRefExoticComponent<TaskActionRowRootProps & React.RefAttributes<HTMLDivElement>>;
32
+ Checkbox: React.ForwardRefExoticComponent<TaskActionRowCheckboxProps & React.RefAttributes<HTMLButtonElement>>;
33
+ Priority: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLDivElement>>;
34
+ Title: React.ForwardRefExoticComponent<TaskActionRowTitleProps & React.RefAttributes<HTMLSpanElement>>;
35
+ Labels: React.ForwardRefExoticComponent<TaskActionRowLabelsProps & React.RefAttributes<HTMLDivElement>>;
36
+ ProjectBadge: React.ForwardRefExoticComponent<TaskActionRowProjectBadgeProps & React.RefAttributes<HTMLSpanElement>>;
37
+ DueDate: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
38
+ StatusBadge: React.ForwardRefExoticComponent<Omit<Record<string, never>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
39
+ Navigate: React.ForwardRefExoticComponent<TaskActionRowNavigateProps & React.RefAttributes<HTMLButtonElement>>;
40
+ };
41
+ export type { TaskActionRowTask, TaskActionRowContextValue, } from './task-action-row-context';
42
+ export type { TaskActionRowRootProps };
43
+ export type { TaskActionRowCheckboxProps };
44
+ export type { TaskActionRowTitleProps };
45
+ export type { TaskActionRowLabelsProps };
46
+ export type { TaskActionRowProjectBadgeProps };
47
+ export type { TaskActionRowNavigateProps };
48
+ //# sourceMappingURL=task-action-row.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-action-row.d.ts","sourceRoot":"","sources":["../../../src/tasks/task-action-row/task-action-row.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAEnG,OAAO,EAAsB,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAuB,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAA6B,KAAK,8BAA8B,EAAE,MAAM,iCAAiC,CAAA;AAGhH,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AACnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAMlE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC9C,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAqDD,eAAO,MAAM,aAAa;;;;;;;;;;CAUxB,CAAA;AAGF,YAAY,EACV,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,sBAAsB,EAAE,CAAA;AACtC,YAAY,EAAE,0BAA0B,EAAE,CAAA;AAC1C,YAAY,EAAE,uBAAuB,EAAE,CAAA;AACvC,YAAY,EAAE,wBAAwB,EAAE,CAAA;AACxC,YAAY,EAAE,8BAA8B,EAAE,CAAA;AAC9C,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-detail-panel.d.ts","sourceRoot":"","sources":["../../src/tasks/task-detail-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ # ProjectHealthCard
2
+
3
+ Props-driven card showing project completion progress, status badge, sparkline trend, and context line.
4
+
5
+ - Import: @devalok/shilp-sutra-karm/dashboard
6
+ - Server-safe: No
7
+ - Category: dashboard
8
+
9
+ ## Props
10
+
11
+ | Prop | Type | Default | Description |
12
+ |------|------|---------|-------------|
13
+ | project | ProjectHealthData | REQUIRED | Project data object |
14
+ | onClick | () => void | — | Makes card clickable with hover state and keyboard activation |
15
+ | loading | boolean | false | Shows skeleton placeholder when true |
16
+ | className | string | — | Additional CSS classes |
17
+
18
+ ## Related Types
19
+
20
+ ```typescript
21
+ interface ProjectHealthData {
22
+ id: string
23
+ name: string
24
+ completed: number
25
+ total: number
26
+ overdue?: number
27
+ urgent?: number
28
+ contextLine?: string
29
+ /** 7 values (0-1) for sparkline trend chart */
30
+ trend?: number[]
31
+ }
32
+ ```
33
+
34
+ ## Status Badge Severity
35
+
36
+ | Condition | Badge |
37
+ |-----------|-------|
38
+ | urgent > 0 | `solid` / `error` — "{urgent} urgent" |
39
+ | overdue > 0 (no urgent) | `subtle` / `warning` — "{overdue} overdue" |
40
+ | neither | `subtle` / `success` — "on track" |
41
+
42
+ ## Progress Bar Color
43
+
44
+ | Percentage | Color |
45
+ |------------|-------|
46
+ | > 75% | success |
47
+ | 25%–75% | warning |
48
+ | < 25% | error |
49
+
50
+ ## Sparkline
51
+
52
+ - Rendered as an inline SVG (48x20) when `trend` has >= 2 values
53
+ - Uses Catmull-Rom spline interpolation for smooth curves
54
+ - Color determined by comparing average of first 3 vs last 3 values:
55
+ - Improving (diff > 0.05): success stroke/fill
56
+ - Declining (diff < -0.05): error stroke/fill
57
+ - Flat: warning stroke/fill
58
+ - Fewer than 6 data points always renders warning color
59
+
60
+ ## Defaults
61
+ loading=false
62
+
63
+ ## Example
64
+
65
+ ```tsx
66
+ <ProjectHealthCard
67
+ project={{
68
+ id: 'proj-1',
69
+ name: 'Website Redesign',
70
+ completed: 12,
71
+ total: 20,
72
+ overdue: 3,
73
+ contextLine: 'Sprint 4 of 6',
74
+ trend: [0.3, 0.4, 0.5, 0.55, 0.6, 0.65, 0.7],
75
+ }}
76
+ onClick={() => navigateToProject('proj-1')}
77
+ />
78
+ ```
79
+
80
+ ## Gotchas
81
+ - Extends `Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'>` — native onClick is replaced by the typed onClick prop
82
+ - When `onClick` is provided, the card gets `role="button"`, `tabIndex={0}`, and keyboard activation (Enter/Space)
83
+ - When `onClick` is provided, the card uses `whileTap={{ scale: 0.98 }}` for press feedback
84
+ - `loading=true` renders a skeleton with no project data — use for async loading states
85
+ - The sparkline is `aria-hidden="true"` — it is decorative only
86
+ - `contextLine` and overdue count are combined in a third row separated by a middot
87
+
88
+ ## Changes
89
+ ### v0.20.0
90
+ - **Added** Initial release — project health card with progress bar, status badge, sparkline, and loading skeleton
@@ -10,6 +10,9 @@
10
10
  onToggle: (id: string, done: boolean) => void (REQUIRED)
11
11
  onAdd: (text: string) => void (REQUIRED)
12
12
  onDelete: (id: string) => void (REQUIRED)
13
+ onEdit: (id: string, text: string) => void — enables inline editing (double-click)
14
+ onReorder: (items: ScratchpadItem[]) => void — enables drag-to-reorder via @dnd-kit
15
+ onPromote: (id: string) => void — enables promote-to-task button on items
13
16
  title: string (default: "My Scratchpad")
14
17
  resetLabel: string
15
18
  emptyText: string (default: "Nothing here yet. Add a task!")
@@ -30,6 +33,9 @@
30
33
  onToggle={(id, done) => toggleItem(id, done)}
31
34
  onAdd={(text) => addItem(text)}
32
35
  onDelete={(id) => deleteItem(id)}
36
+ onEdit={(id, text) => editItem(id, text)}
37
+ onReorder={(items) => reorderItems(items)}
38
+ onPromote={(id) => promoteToTask(id)}
33
39
  maxItems={5}
34
40
  />
35
41
  ```
@@ -46,7 +52,18 @@
46
52
  - resetLabel renders as footer text below the item list (e.g., "Resets daily at midnight")
47
53
  - When loading=true, shows a shimmer skeleton placeholder
48
54
  - Uses framer-motion AnimatePresence for item enter/exit animations
55
+ - Internally uses the composable Scratchpad compound component — see scratchpad.md for details
56
+ - onEdit, onReorder, onPromote are optional; features auto-enable when callbacks are provided
57
+ - onEdit: double-click item text to enter inline edit mode; Enter confirms, Escape cancels
58
+ - onReorder: items become draggable with @dnd-kit; drag handle appears on hover
59
+ - onPromote: arrow-up button appears on each item on hover
49
60
 
50
61
  ## Changes
62
+ ### v0.20.0
63
+ - **Added** `onEdit` prop — inline editing via double-click
64
+ - **Added** `onReorder` prop — drag-to-reorder via @dnd-kit
65
+ - **Added** `onPromote` prop — promote-to-task button on items
66
+ - **Changed** Internally rebuilt on composable Scratchpad compound component
67
+
51
68
  ### v0.18.0
52
69
  - **Added** Initial release
@@ -0,0 +1,151 @@
1
+ # Scratchpad (Composable)
2
+
3
+ Compound component for building custom scratchpad UIs with drag-to-reorder, inline editing, promote-to-task, and filter completed toggle.
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
+ | `Scratchpad.Root` | Context provider + layout div. All other parts must be children. |
14
+ | `Scratchpad.Header` | Title bar with optional children slot (e.g. ProgressRing, FilterToggle) |
15
+ | `Scratchpad.List` | Item list with optional @dnd-kit drag-to-reorder and AnimatePresence |
16
+ | `Scratchpad.Item` | Single item row: checkbox, text, inline edit, drag handle, promote/delete buttons |
17
+ | `Scratchpad.AddInput` | "Add a task" trigger that expands to an inline input + Add button |
18
+ | `Scratchpad.EmptyState` | Empty placeholder shown when visibleItems is empty |
19
+ | `Scratchpad.ProgressRing` | SVG ring showing items.length / maxItems with completion pulse |
20
+ | `Scratchpad.FilterToggle` | Eye icon button toggling show/hide completed items |
21
+ | `Scratchpad.Collapse` | Collapsible section with chevron header, CSS grid-rows transition, badge count |
22
+
23
+ ## Props (Root)
24
+
25
+ | Prop | Type | Default | Description |
26
+ |------|------|---------|-------------|
27
+ | items | ScratchpadItem[] | REQUIRED | Full item list |
28
+ | onToggle | (id: string, done: boolean) => void | REQUIRED | Toggle item completion |
29
+ | onAdd | (text: string) => void | — | Enables AddInput when provided |
30
+ | onDelete | (id: string) => void | — | Enables delete button on items |
31
+ | onEdit | (id: string, text: string) => void | — | Enables inline editing (double-click) |
32
+ | onReorder | (items: ScratchpadItem[]) => void | — | Enables drag-to-reorder via @dnd-kit |
33
+ | onPromote | (id: string) => void | — | Enables promote-to-task button on items |
34
+ | maxItems | number | 20 | Maximum item count; AddInput hides when reached |
35
+ | defaultShowCompleted | boolean | true | Initial filter toggle state |
36
+ | className | string | — | Additional CSS classes |
37
+
38
+ ## Props (Header)
39
+
40
+ | Prop | Type | Default | Description |
41
+ |------|------|---------|-------------|
42
+ | title | string | "Scratchpad" | Header title text |
43
+ | children | ReactNode | — | Slot for ProgressRing, FilterToggle, etc. |
44
+
45
+ ## Props (List)
46
+
47
+ | Prop | Type | Default | Description |
48
+ |------|------|---------|-------------|
49
+ | compact | boolean | false | Compact layout passed to each item |
50
+
51
+ ## Props (Item)
52
+
53
+ | Prop | Type | Default | Description |
54
+ |------|------|---------|-------------|
55
+ | item | ScratchpadItem | REQUIRED | The item data |
56
+ | compact | boolean | false | Compact sizing |
57
+ | sortable | boolean | false | Whether dnd-kit drag is active |
58
+
59
+ ## Props (AddInput)
60
+
61
+ | Prop | Type | Default | Description |
62
+ |------|------|---------|-------------|
63
+ | placeholder | string | "What needs doing?" | Input placeholder |
64
+ | triggerLabel | string | "+ Add a task..." | Button label before expanding |
65
+
66
+ ## Props (EmptyState)
67
+
68
+ | Prop | Type | Default | Description |
69
+ |------|------|---------|-------------|
70
+ | icon | React.ComponentType<{ className?: string }> | — | Icon shown above message |
71
+ | message | string | "Nothing here yet. Add a task!" | Empty state text |
72
+
73
+ ## Props (ProgressRing)
74
+
75
+ | Prop | Type | Default | Description |
76
+ |------|------|---------|-------------|
77
+ | size | "sm" \| "md" | "md" | Ring diameter: sm=16px, md=20px |
78
+
79
+ ## Props (FilterToggle)
80
+
81
+ No custom props. Extends `Omit<ButtonHTMLAttributes, 'children'>`.
82
+
83
+ ## Props (Collapse)
84
+
85
+ | Prop | Type | Default | Description |
86
+ |------|------|---------|-------------|
87
+ | label | string | "Scratchpad" | Header label text |
88
+ | defaultOpen | boolean | true | Whether expanded initially |
89
+ | badgeCount | number | — | Badge pill count in header (hidden when 0 or undefined) |
90
+ | headerClassName | string | — | Override header text styling |
91
+
92
+ ## Related Types
93
+
94
+ ```typescript
95
+ interface ScratchpadItem {
96
+ id: string
97
+ text: string
98
+ done: boolean
99
+ }
100
+ ```
101
+
102
+ ## Context-Driven Feature Visibility
103
+
104
+ Features auto-enable based on which callbacks are provided to Root:
105
+
106
+ | Callback | Enables |
107
+ |----------|---------|
108
+ | onAdd | AddInput component renders |
109
+ | onDelete | Delete (X) button on each item |
110
+ | onEdit | Double-click inline editing on items |
111
+ | onReorder | Drag handles + @dnd-kit SortableContext on List |
112
+ | onPromote | Promote (arrow-up) button on each item |
113
+
114
+ ## Example
115
+
116
+ ```tsx
117
+ <Scratchpad.Root
118
+ items={items}
119
+ onToggle={toggle}
120
+ onAdd={add}
121
+ onDelete={del}
122
+ onEdit={edit}
123
+ onReorder={reorder}
124
+ onPromote={promote}
125
+ >
126
+ <Scratchpad.Header title="My Scratchpad">
127
+ <Scratchpad.FilterToggle />
128
+ <Scratchpad.ProgressRing />
129
+ </Scratchpad.Header>
130
+ <Scratchpad.EmptyState />
131
+ <Scratchpad.List />
132
+ <Scratchpad.AddInput />
133
+ </Scratchpad.Root>
134
+ ```
135
+
136
+ ## Gotchas
137
+ - All sub-components must be inside `Scratchpad.Root` — they use React context
138
+ - Root extends `Omit<HTMLDivElement, 'onToggle'>` to avoid conflict with native onToggle
139
+ - Drag-to-reorder uses @dnd-kit with PointerSensor (5px activation distance) and KeyboardSensor
140
+ - When sortable, List does NOT render `role="list"` because dnd-kit adds `role="button"` to items
141
+ - Inline editing activates on double-click; Enter confirms, Escape cancels, blur confirms
142
+ - AddInput auto-hides when items.length >= maxItems
143
+ - EmptyState auto-hides when visibleItems.length > 0
144
+ - FilterToggle shows IconEye when completed shown, IconEyeOff when hidden
145
+ - ProgressRing pulses (scale animation) when all items are done
146
+ - Items animate in/out with framer-motion (opacity + x slide)
147
+ - Collapse uses CSS `grid-template-rows` transition for smooth open/close
148
+
149
+ ## Changes
150
+ ### v0.20.0
151
+ - **Added** Initial release — 9-part composable scratchpad: Root, Header, List, Item, AddInput, EmptyState, ProgressRing, FilterToggle, Collapse