@fayz-ai/tasks 0.0.0-stage → 0.49.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 (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -2
  3. package/dist/chunk-5DWYILP2.js +102 -0
  4. package/dist/chunk-5DWYILP2.js.map +1 -0
  5. package/dist/chunk-BHNXKHFW.js +29 -0
  6. package/dist/chunk-BHNXKHFW.js.map +1 -0
  7. package/dist/chunk-H435KYKF.js +26 -0
  8. package/dist/chunk-H435KYKF.js.map +1 -0
  9. package/dist/chunk-IHQV22ML.js +128 -0
  10. package/dist/chunk-IHQV22ML.js.map +1 -0
  11. package/dist/chunk-IYQSFHSK.js +175 -0
  12. package/dist/chunk-IYQSFHSK.js.map +1 -0
  13. package/dist/chunk-KM7XZUFP.js +114 -0
  14. package/dist/chunk-KM7XZUFP.js.map +1 -0
  15. package/dist/chunk-KUO4ZJPR.js +187 -0
  16. package/dist/chunk-KUO4ZJPR.js.map +1 -0
  17. package/dist/chunk-KXUCWLLG.js +80 -0
  18. package/dist/chunk-KXUCWLLG.js.map +1 -0
  19. package/dist/chunk-LY4RNYRG.js +57 -0
  20. package/dist/chunk-LY4RNYRG.js.map +1 -0
  21. package/dist/chunk-Q5FSJ2D6.js +60 -0
  22. package/dist/chunk-Q5FSJ2D6.js.map +1 -0
  23. package/dist/chunk-WNIXFQM4.js +22 -0
  24. package/dist/chunk-WNIXFQM4.js.map +1 -0
  25. package/dist/chunk-XVAIXG7V.js +42 -0
  26. package/dist/chunk-XVAIXG7V.js.map +1 -0
  27. package/dist/components/TaskCard.d.ts +17 -0
  28. package/dist/components/TaskCard.d.ts.map +1 -0
  29. package/dist/components/TaskCard.js +7 -0
  30. package/dist/components/TaskCard.js.map +1 -0
  31. package/dist/components/TaskDetail.d.ts +21 -0
  32. package/dist/components/TaskDetail.d.ts.map +1 -0
  33. package/dist/components/TaskDetail.js +10 -0
  34. package/dist/components/TaskDetail.js.map +1 -0
  35. package/dist/components/TaskLabelBadge.d.ts +11 -0
  36. package/dist/components/TaskLabelBadge.d.ts.map +1 -0
  37. package/dist/components/TaskLabelBadge.js +4 -0
  38. package/dist/components/TaskLabelBadge.js.map +1 -0
  39. package/dist/components/TaskPriorityBadge.d.ts +7 -0
  40. package/dist/components/TaskPriorityBadge.d.ts.map +1 -0
  41. package/dist/components/TaskPriorityBadge.js +3 -0
  42. package/dist/components/TaskPriorityBadge.js.map +1 -0
  43. package/dist/components/TaskQuickAdd.d.ts +8 -0
  44. package/dist/components/TaskQuickAdd.d.ts.map +1 -0
  45. package/dist/components/TaskQuickAdd.js +3 -0
  46. package/dist/components/TaskQuickAdd.js.map +1 -0
  47. package/dist/components/TaskSourceBadge.d.ts +5 -0
  48. package/dist/components/TaskSourceBadge.d.ts.map +1 -0
  49. package/dist/components/TaskSourceBadge.js +4 -0
  50. package/dist/components/TaskSourceBadge.js.map +1 -0
  51. package/dist/components/TaskStatusGroup.d.ts +16 -0
  52. package/dist/components/TaskStatusGroup.d.ts.map +1 -0
  53. package/dist/components/TaskStatusGroup.js +3 -0
  54. package/dist/components/TaskStatusGroup.js.map +1 -0
  55. package/dist/components/TasksFilterBar.d.ts +13 -0
  56. package/dist/components/TasksFilterBar.d.ts.map +1 -0
  57. package/dist/components/TasksFilterBar.js +4 -0
  58. package/dist/components/TasksFilterBar.js.map +1 -0
  59. package/dist/data/mock.d.ts +3 -0
  60. package/dist/data/mock.d.ts.map +1 -0
  61. package/dist/data/mock.js +4 -0
  62. package/dist/data/mock.js.map +1 -0
  63. package/dist/data/provider.d.ts +13 -0
  64. package/dist/data/provider.d.ts.map +1 -0
  65. package/dist/data/provider.js +3 -0
  66. package/dist/data/provider.js.map +1 -0
  67. package/dist/data/supabase.d.ts +9 -0
  68. package/dist/data/supabase.d.ts.map +1 -0
  69. package/dist/data/supabase.js +4 -0
  70. package/dist/data/supabase.js.map +1 -0
  71. package/dist/domain/task.d.ts +121 -0
  72. package/dist/domain/task.d.ts.map +1 -0
  73. package/dist/domain/task.js +3 -0
  74. package/dist/domain/task.js.map +1 -0
  75. package/dist/store.d.ts +35 -0
  76. package/dist/store.d.ts.map +1 -0
  77. package/dist/store.js +6 -0
  78. package/dist/store.js.map +1 -0
  79. package/dist/views/TasksPanel.d.ts +8 -0
  80. package/dist/views/TasksPanel.d.ts.map +1 -0
  81. package/dist/views/TasksPanel.js +103 -0
  82. package/dist/views/TasksPanel.js.map +1 -0
  83. package/package.json +51 -3
@@ -0,0 +1,42 @@
1
+ import { useState, useCallback } from 'react';
2
+ import { Plus } from 'lucide-react';
3
+ import { useTranslation } from '@fayz-ai/core';
4
+ import { Input } from '@fayz-ai/ui';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ // src/components/TaskQuickAdd.tsx
8
+ function TaskQuickAdd({ parentId, onCreate }) {
9
+ const t = useTranslation();
10
+ const [title, setTitle] = useState("");
11
+ const [loading, setLoading] = useState(false);
12
+ const handleSubmit = useCallback(async (e) => {
13
+ e.preventDefault();
14
+ const trimmed = title.trim();
15
+ if (!trimmed || loading) return;
16
+ setLoading(true);
17
+ try {
18
+ await onCreate({ title: trimmed, parentId: parentId ?? null });
19
+ setTitle("");
20
+ } finally {
21
+ setLoading(false);
22
+ }
23
+ }, [title, loading, onCreate, parentId]);
24
+ return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "flex items-center gap-2 px-3 py-2 border-b", children: [
25
+ /* @__PURE__ */ jsx(Plus, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
26
+ /* @__PURE__ */ jsx(
27
+ Input,
28
+ {
29
+ type: "text",
30
+ value: title,
31
+ onChange: (e) => setTitle(e.target.value),
32
+ placeholder: parentId ? t("tasks.detail.addSubtask") : t("tasks.quickAdd.placeholder"),
33
+ className: "h-auto rounded-none border-0 bg-transparent p-0 shadow-none placeholder:text-muted-foreground/60 focus-visible:ring-0 focus-visible:ring-offset-0",
34
+ disabled: loading
35
+ }
36
+ )
37
+ ] });
38
+ }
39
+
40
+ export { TaskQuickAdd };
41
+ //# sourceMappingURL=chunk-XVAIXG7V.js.map
42
+ //# sourceMappingURL=chunk-XVAIXG7V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TaskQuickAdd.tsx"],"names":[],"mappings":";;;;;;;AAWO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,QAAA,EAAS,EAAsB;AACtE,EAAA,MAAM,IAAI,cAAA,EAAe;AACzB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA;AAE5C,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,OAAO,CAAA,KAAuB;AAC7D,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACzB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,EAAE,KAAA,EAAO,SAAS,QAAA,EAAU,QAAA,IAAY,MAAM,CAAA;AAC7D,MAAA,QAAA,CAAS,EAAE,CAAA;AAAA,IACb,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,QAAQ,CAAC,CAAA;AAEvC,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAU,YAAA,EAAc,WAAU,4CAAA,EACtC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,wCAAA,EAAyC,CAAA;AAAA,oBACzD,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACxC,aAAa,QAAA,GAAW,CAAA,CAAE,yBAAyB,CAAA,GAAI,EAAE,4BAA4B,CAAA;AAAA,QACrF,SAAA,EAAU,mJAAA;AAAA,QACV,QAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ","file":"chunk-XVAIXG7V.js","sourcesContent":["import React, { useCallback, useState } from 'react'\nimport { Plus } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Input } from '@fayz-ai/ui'\nimport type { CreateTaskInput } from '../domain/task'\n\nexport interface TaskQuickAddProps {\n parentId?: string | null\n onCreate(input: CreateTaskInput): Promise<unknown>\n}\n\nexport function TaskQuickAdd({ parentId, onCreate }: TaskQuickAddProps) {\n const t = useTranslation()\n const [title, setTitle] = useState('')\n const [loading, setLoading] = useState(false)\n\n const handleSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n const trimmed = title.trim()\n if (!trimmed || loading) return\n setLoading(true)\n try {\n await onCreate({ title: trimmed, parentId: parentId ?? null })\n setTitle('')\n } finally {\n setLoading(false)\n }\n }, [title, loading, onCreate, parentId])\n\n return (\n <form onSubmit={handleSubmit} className=\"flex items-center gap-2 px-3 py-2 border-b\">\n <Plus className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <Input\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n placeholder={parentId ? t('tasks.detail.addSubtask') : t('tasks.quickAdd.placeholder')}\n className=\"h-auto rounded-none border-0 bg-transparent p-0 shadow-none placeholder:text-muted-foreground/60 focus-visible:ring-0 focus-visible:ring-offset-0\"\n disabled={loading}\n />\n </form>\n )\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type Task, type TaskLabel, type UpdateTaskInput } from '../domain/task';
3
+ export interface TaskCardProps {
4
+ task: Task;
5
+ labels: TaskLabel[];
6
+ locale?: string;
7
+ subtaskCount?: {
8
+ done: number;
9
+ total: number;
10
+ };
11
+ /** Off inside a group whose header already names the source. */
12
+ showSource?: boolean;
13
+ onSelect(id: string): void;
14
+ onUpdate(id: string, input: UpdateTaskInput): void;
15
+ }
16
+ export declare function TaskCard({ task, labels, locale, subtaskCount, showSource, onSelect, onUpdate }: TaskCardProps): React.JSX.Element;
17
+ //# sourceMappingURL=TaskCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskCard.d.ts","sourceRoot":"","sources":["../../src/components/TaskCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAEL,KAAK,IAAI,EAAoB,KAAK,SAAS,EAAE,KAAK,eAAe,EAClE,MAAM,gBAAgB,CAAA;AAyBvB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9C,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;CACnD;AAED,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,qBA4DpH"}
@@ -0,0 +1,7 @@
1
+ export { TaskCard } from '../chunk-KXUCWLLG.js';
2
+ import '../chunk-BHNXKHFW.js';
3
+ import '../chunk-WNIXFQM4.js';
4
+ import '../chunk-H435KYKF.js';
5
+ import '../chunk-5DWYILP2.js';
6
+ //# sourceMappingURL=TaskCard.js.map
7
+ //# sourceMappingURL=TaskCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskCard.js"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type CreateTaskInput, type Task, type TaskLabel, type UpdateTaskInput } from '../domain/task';
3
+ export interface TaskDetailProps {
4
+ task: Task | undefined;
5
+ labels: TaskLabel[];
6
+ locale?: string;
7
+ subtasks?: Task[];
8
+ onSelect(id: string | null): void;
9
+ onUpdate(id: string, input: UpdateTaskInput): void;
10
+ onDelete(id: string): void;
11
+ onCreate(input: CreateTaskInput): Promise<unknown>;
12
+ /** Hands the task to the assistant. The button is drawn only when the host has one. */
13
+ onDelegate?(prompt: string): void;
14
+ /**
15
+ * Where the delete action goes when a host owns the chrome (the rail's header).
16
+ * Without it the panel draws its own back-and-delete bar.
17
+ */
18
+ renderActions?(actions: React.ReactNode): React.ReactNode;
19
+ }
20
+ export declare function TaskDetail({ task, labels, locale, subtasks, onSelect, onUpdate, onDelete, onCreate, onDelegate, renderActions, }: TaskDetailProps): React.JSX.Element;
21
+ //# sourceMappingURL=TaskDetail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDetail.d.ts","sourceRoot":"","sources":["../../src/components/TaskDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAM/D,OAAO,EAEL,KAAK,eAAe,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAsC,KAAK,eAAe,EAC1G,MAAM,gBAAgB,CAAA;AAmBvB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,GAAG,SAAS,CAAA;IACtB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD,uFAAuF;IACvF,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC;;;OAGG;IACH,aAAa,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;CAC1D;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,GACvG,EAAE,eAAe,qBA6KjB"}
@@ -0,0 +1,10 @@
1
+ export { TaskDetail } from '../chunk-KUO4ZJPR.js';
2
+ import '../chunk-KXUCWLLG.js';
3
+ import '../chunk-BHNXKHFW.js';
4
+ import '../chunk-WNIXFQM4.js';
5
+ import '../chunk-XVAIXG7V.js';
6
+ import '../chunk-H435KYKF.js';
7
+ import '../chunk-5DWYILP2.js';
8
+ import '../chunk-LY4RNYRG.js';
9
+ //# sourceMappingURL=TaskDetail.js.map
10
+ //# sourceMappingURL=TaskDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskDetail.js"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { type TaskLabel } from '../domain/task';
3
+ export declare function TaskLabelBadge({ label }: {
4
+ label: TaskLabel;
5
+ }): React.JSX.Element;
6
+ export declare function TaskLabelBadges({ labelIds, labels, max }: {
7
+ labelIds: string[];
8
+ labels: TaskLabel[];
9
+ max?: number;
10
+ }): React.JSX.Element | null;
11
+ //# sourceMappingURL=TaskLabelBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskLabelBadge.d.ts","sourceRoot":"","sources":["../../src/components/TaskLabelBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE9D,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,qBAS7D;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAO,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,4BAcvH"}
@@ -0,0 +1,4 @@
1
+ export { TaskLabelBadge, TaskLabelBadges } from '../chunk-BHNXKHFW.js';
2
+ import '../chunk-5DWYILP2.js';
3
+ //# sourceMappingURL=TaskLabelBadge.js.map
4
+ //# sourceMappingURL=TaskLabelBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskLabelBadge.js"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { TaskPriority } from '../domain/task';
3
+ export declare function TaskPriorityBadge({ priority, showLabel }: {
4
+ priority: TaskPriority;
5
+ showLabel?: boolean;
6
+ }): React.JSX.Element;
7
+ //# sourceMappingURL=TaskPriorityBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskPriorityBadge.d.ts","sourceRoot":"","sources":["../../src/components/TaskPriorityBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AASlD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,qBASzG"}
@@ -0,0 +1,3 @@
1
+ export { TaskPriorityBadge } from '../chunk-WNIXFQM4.js';
2
+ //# sourceMappingURL=TaskPriorityBadge.js.map
3
+ //# sourceMappingURL=TaskPriorityBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskPriorityBadge.js"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { CreateTaskInput } from '../domain/task';
3
+ export interface TaskQuickAddProps {
4
+ parentId?: string | null;
5
+ onCreate(input: CreateTaskInput): Promise<unknown>;
6
+ }
7
+ export declare function TaskQuickAdd({ parentId, onCreate }: TaskQuickAddProps): React.JSX.Element;
8
+ //# sourceMappingURL=TaskQuickAdd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskQuickAdd.d.ts","sourceRoot":"","sources":["../../src/components/TaskQuickAdd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAIpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACnD;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,iBAAiB,qBA+BrE"}
@@ -0,0 +1,3 @@
1
+ export { TaskQuickAdd } from '../chunk-XVAIXG7V.js';
2
+ //# sourceMappingURL=TaskQuickAdd.js.map
3
+ //# sourceMappingURL=TaskQuickAdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskQuickAdd.js"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare function TaskSourceBadge({ source }: {
3
+ source: string | null;
4
+ }): React.JSX.Element | null;
5
+ //# sourceMappingURL=TaskSourceBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskSourceBadge.d.ts","sourceRoot":"","sources":["../../src/components/TaskSourceBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,4BAiBpE"}
@@ -0,0 +1,4 @@
1
+ export { TaskSourceBadge } from '../chunk-H435KYKF.js';
2
+ import '../chunk-5DWYILP2.js';
3
+ //# sourceMappingURL=TaskSourceBadge.js.map
4
+ //# sourceMappingURL=TaskSourceBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskSourceBadge.js"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import type { Task, TaskStatus } from '../domain/task';
3
+ export declare const STATUS_DOT_CLASS: Record<TaskStatus, string>;
4
+ export interface TaskGroupProps {
5
+ title: string;
6
+ dotClass: string;
7
+ tasks: Task[];
8
+ defaultCollapsed?: boolean;
9
+ renderTask(task: Task): React.ReactNode;
10
+ }
11
+ /** One collapsible section of the list; `title` and `dotClass` let a non-status group share the shape. */
12
+ export declare function TaskGroup({ title, dotClass, tasks, defaultCollapsed, renderTask }: TaskGroupProps): React.JSX.Element | null;
13
+ export declare function TaskStatusGroup({ status, ...rest }: {
14
+ status: TaskStatus;
15
+ } & Pick<TaskGroupProps, 'tasks' | 'renderTask'>): React.JSX.Element;
16
+ //# sourceMappingURL=TaskStatusGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskStatusGroup.d.ts","sourceRoot":"","sources":["../../src/components/TaskStatusGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAIvC,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEtD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAKvD,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,SAAS,CAAA;CACxC;AAED,0GAA0G;AAC1G,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAwB,EAAE,UAAU,EAAE,EAAE,cAAc,4BAwBzG;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,YAAY,CAAC,qBAUzH"}
@@ -0,0 +1,3 @@
1
+ export { STATUS_DOT_CLASS, TaskGroup, TaskStatusGroup } from '../chunk-LY4RNYRG.js';
2
+ //# sourceMappingURL=TaskStatusGroup.js.map
3
+ //# sourceMappingURL=TaskStatusGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TaskStatusGroup.js"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { type TaskFilter, type TasksSummary } from '../domain/task';
3
+ export interface TasksFilterBarProps {
4
+ activeFilter: TaskFilter;
5
+ summary: TasksSummary | null;
6
+ mine: boolean;
7
+ /** "Mine" is offered only once we know who is asking. */
8
+ currentUserId: string | null;
9
+ onFilterChange(filter: TaskFilter): void;
10
+ onMineChange(mine: boolean): void;
11
+ }
12
+ export declare function TasksFilterBar({ activeFilter, summary, mine, currentUserId, onFilterChange, onMineChange }: TasksFilterBarProps): React.JSX.Element;
13
+ //# sourceMappingURL=TasksFilterBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TasksFilterBar.d.ts","sourceRoot":"","sources":["../../src/components/TasksFilterBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAgC,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAajG,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,UAAU,CAAA;IACxB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,yDAAyD;IACzD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACxC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CAClC;AAED,wBAAgB,cAAc,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,mBAAmB,qBA0C/H"}
@@ -0,0 +1,4 @@
1
+ export { TasksFilterBar } from '../chunk-Q5FSJ2D6.js';
2
+ import '../chunk-5DWYILP2.js';
3
+ //# sourceMappingURL=TasksFilterBar.js.map
4
+ //# sourceMappingURL=TasksFilterBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"TasksFilterBar.js"}
@@ -0,0 +1,3 @@
1
+ import type { TasksDataProvider } from './provider';
2
+ export declare function createMockTasksProvider(): TasksDataProvider;
3
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AA+DnD,wBAAgB,uBAAuB,IAAI,iBAAiB,CAsE3D"}
@@ -0,0 +1,4 @@
1
+ export { createMockTasksProvider } from '../chunk-IHQV22ML.js';
2
+ import '../chunk-5DWYILP2.js';
3
+ //# sourceMappingURL=mock.js.map
4
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"mock.js"}
@@ -0,0 +1,13 @@
1
+ import type { CreateTaskInput, Task, TaskLabel, TaskQuery, TaskStatus, TasksSummary, UpdateTaskInput } from '../domain/task';
2
+ export interface TasksDataProvider {
3
+ getTasks(query: TaskQuery): Promise<Task[]>;
4
+ getTaskById(id: string): Promise<Task | null>;
5
+ getSubtasks(parentId: string): Promise<Task[]>;
6
+ createTask(input: CreateTaskInput): Promise<Task>;
7
+ updateTask(id: string, input: UpdateTaskInput): Promise<Task>;
8
+ deleteTask(id: string): Promise<void>;
9
+ reorderTask(id: string, newPosition: number, status: TaskStatus): Promise<void>;
10
+ getLabels(): Promise<TaskLabel[]>;
11
+ getSummary(): Promise<TasksSummary>;
12
+ }
13
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/data/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EACvF,MAAM,gBAAgB,CAAA;AAEvB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC7C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9C,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;IACjC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;CACpC"}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=provider.js.map
3
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"provider.js"}
@@ -0,0 +1,9 @@
1
+ import { type EntityDef } from '@fayz-ai/core';
2
+ import type { TasksDataProvider } from './provider';
3
+ export declare function createSupabaseTasksProvider(): TasksDataProvider;
4
+ /**
5
+ * Declared as an entity so the agent can read and close tasks in every app, although the surface is a
6
+ * rail tab. Unit narrowing is left out on purpose: resolveDataProvider turns it on from `scoped_resources`.
7
+ */
8
+ export declare const taskEntityDef: EntityDef;
9
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/data/supabase.ts"],"names":[],"mappings":"AACA,OAAO,EAC4E,KAAK,SAAS,EAChG,MAAM,eAAe,CAAA;AAKtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAiFnD,wBAAgB,2BAA2B,IAAI,iBAAiB,CAiJ/D;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SA4B3B,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { createSupabaseTasksProvider, taskEntityDef } from '../chunk-IYQSFHSK.js';
2
+ import '../chunk-5DWYILP2.js';
3
+ //# sourceMappingURL=supabase.js.map
4
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"supabase.js"}
@@ -0,0 +1,121 @@
1
+ export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'cancelled';
2
+ export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
3
+ export type TaskFilter = TaskStatus | 'all';
4
+ export type TaskDueTone = 'overdue' | 'today' | 'none';
5
+ export declare const TASK_STATUSES: TaskStatus[];
6
+ export declare const TASK_PRIORITIES: TaskPriority[];
7
+ export declare const TASK_FILTERS: readonly ["all", "todo", "in_progress", "done"];
8
+ /** Tasks the setup wizard seeded. Paired with a `sourceKey` from the catalog. */
9
+ export declare const ONBOARDING_TASK_SOURCE = "onboarding";
10
+ export interface Task {
11
+ id: string;
12
+ title: string;
13
+ description: string | null;
14
+ status: TaskStatus;
15
+ priority: TaskPriority;
16
+ dueDate: string | null;
17
+ completedAt: string | null;
18
+ assignedToId: string | null;
19
+ assignedToName: string | null;
20
+ parentId: string | null;
21
+ labels: string[];
22
+ position: number;
23
+ /** Which feature created this row ('onboarding', 'agent'), null when a person did. */
24
+ source: string | null;
25
+ /** Stable key within that source — what makes re-seeding idempotent. */
26
+ sourceKey: string | null;
27
+ createdBy: string | null;
28
+ createdByName: string | null;
29
+ tenantId: string;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ }
33
+ export interface TaskLabel {
34
+ id: string;
35
+ name: string;
36
+ color: string;
37
+ isActive: boolean;
38
+ tenantId: string;
39
+ createdAt: string;
40
+ }
41
+ export interface CreateTaskInput {
42
+ title: string;
43
+ description?: string;
44
+ status?: TaskStatus;
45
+ priority?: TaskPriority;
46
+ dueDate?: string | null;
47
+ assignedToId?: string | null;
48
+ assignedToName?: string | null;
49
+ parentId?: string | null;
50
+ labels?: string[];
51
+ source?: string | null;
52
+ sourceKey?: string | null;
53
+ }
54
+ export interface UpdateTaskInput {
55
+ title?: string;
56
+ description?: string | null;
57
+ status?: TaskStatus;
58
+ priority?: TaskPriority;
59
+ dueDate?: string | null;
60
+ assignedToId?: string | null;
61
+ labels?: string[];
62
+ position?: number;
63
+ }
64
+ export interface TaskQuery {
65
+ status?: TaskStatus | TaskStatus[];
66
+ priority?: TaskPriority | TaskPriority[];
67
+ assignedToId?: string;
68
+ parentId?: string | null;
69
+ search?: string;
70
+ overdue?: boolean;
71
+ }
72
+ export interface TasksSummary {
73
+ total: number;
74
+ todo: number;
75
+ inProgress: number;
76
+ done: number;
77
+ overdue: number;
78
+ dueToday: number;
79
+ highPriority: number;
80
+ }
81
+ export interface TaskListScope {
82
+ filter: TaskFilter;
83
+ mine: boolean;
84
+ currentUserId: string | null;
85
+ }
86
+ export declare const EMPTY_TASKS_SUMMARY: TasksSummary;
87
+ /** Due dates are calendar days compared as 'YYYY-MM-DD' strings, in UTC. */
88
+ export declare function isoDay(at?: Date): string;
89
+ export declare function isOpen(task: Pick<Task, 'status'>): boolean;
90
+ export declare function isHighPriority(priority: TaskPriority): boolean;
91
+ export declare function isOverdue(task: Pick<Task, 'status' | 'dueDate'>, today: string): boolean;
92
+ export declare function isDueToday(task: Pick<Task, 'status' | 'dueDate'>, today: string): boolean;
93
+ /** How a row colours its date. Only a done task goes quiet; a cancelled one still shows. */
94
+ export declare function dueTone(task: Pick<Task, 'status' | 'dueDate'>, today: string): TaskDueTone;
95
+ /** Counts over top-level tasks; the caller is the one that knows how to leave subtasks out. */
96
+ export declare function summarizeTasks(tasks: Pick<Task, 'status' | 'priority' | 'dueDate'>[], today: string): TasksSummary;
97
+ /** What the rail badge counts. */
98
+ export declare function openCount(summary: TasksSummary | null): number;
99
+ export declare function countForFilter(summary: TasksSummary | null, filter: TaskFilter): number | undefined;
100
+ /** The checklist latches on completedAt, so it moves with the status instead of being set by hand. */
101
+ export declare function completedAtFor(status: TaskStatus, now: string): string | null;
102
+ export declare function toggledStatus(task: Pick<Task, 'status'>): TaskStatus;
103
+ /** A new task goes to the end of its column: one past the highest position among its siblings. */
104
+ export declare function nextPosition(siblingPositions: number[]): number;
105
+ /** The tab is the workspace's: "mine" narrows only once we know who is asking. */
106
+ export declare function listQuery(scope: TaskListScope, query?: TaskQuery): TaskQuery;
107
+ /** The setup checklist reads as one thing, so it is lifted out before the status grouping runs. */
108
+ export declare function splitOnboardingTasks(tasks: Task[]): {
109
+ onboarding: Task[];
110
+ rest: Task[];
111
+ };
112
+ /** Status sections in board order. Cancelled appears only when something is in it. */
113
+ export declare function groupByStatus(tasks: Task[]): Array<{
114
+ status: TaskStatus;
115
+ tasks: Task[];
116
+ }>;
117
+ /** 'medium' is the default nobody chose, so it earns no mark on a row. */
118
+ export declare function showsPriority(task: Pick<Task, 'priority'>): boolean;
119
+ /** `labels` also holds free-form strings (the notes bridge writes 'note:<id>'); only real labels resolve. */
120
+ export declare function resolveLabels(labelIds: string[], labels: TaskLabel[]): TaskLabel[];
121
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/domain/task.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAA;AACtE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;AAC/D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,KAAK,CAAA;AAC3C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AAEtD,eAAO,MAAM,aAAa,EAAE,UAAU,EAAiD,CAAA;AACvF,eAAO,MAAM,eAAe,EAAE,YAAY,EAAwC,CAAA;AAClF,eAAO,MAAM,YAAY,iDAAkF,CAAA;AAE3G,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,eAAe,CAAA;AAElD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,QAAQ,EAAE,YAAY,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,wEAAwE;IACxE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IAClC,QAAQ,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;IACxC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,YAEjC,CAAA;AAED,4EAA4E;AAC5E,wBAAgB,MAAM,CAAC,EAAE,GAAE,IAAiB,GAAG,MAAM,CAEpD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAE1D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAExF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzF;AAED,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAI1F;AAED,+FAA+F;AAC/F,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC,EAAE,EACtD,KAAK,EAAE,MAAM,GACZ,YAAY,CAUd;AAED,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,MAAM,CAE9D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CASnG;AAED,sGAAsG;AACtG,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,UAAU,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAO5E;AAED,mGAAmG;AACnG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG;IAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAAC,IAAI,EAAE,IAAI,EAAE,CAAA;CAAE,CAQxF;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,CAAC,CAIzF;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,OAAO,CAEnE;AAED,6GAA6G;AAC7G,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAElF"}
@@ -0,0 +1,3 @@
1
+ export { EMPTY_TASKS_SUMMARY, ONBOARDING_TASK_SOURCE, TASK_FILTERS, TASK_PRIORITIES, TASK_STATUSES, completedAtFor, countForFilter, dueTone, groupByStatus, isDueToday, isHighPriority, isOpen, isOverdue, isoDay, listQuery, nextPosition, openCount, resolveLabels, showsPriority, splitOnboardingTasks, summarizeTasks, toggledStatus } from '../chunk-5DWYILP2.js';
2
+ //# sourceMappingURL=task.js.map
3
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"task.js"}
@@ -0,0 +1,35 @@
1
+ import type { TasksDataProvider } from './data/provider';
2
+ import { type CreateTaskInput, type Task, type TaskFilter, type TaskLabel, type TaskQuery, type TaskStatus, type TasksSummary, type UpdateTaskInput } from './domain/task';
3
+ /** Non-React readers (the plugin's adapters, the onboarding seam). */
4
+ export declare function getTasksProvider(): TasksDataProvider;
5
+ /** For tests, and for an app that brings its own backend. */
6
+ export declare function setTasksProvider(next: TasksDataProvider | null): void;
7
+ export interface TasksUIState {
8
+ tasks: Task[];
9
+ tasksLoading: boolean;
10
+ labels: TaskLabel[];
11
+ summary: TasksSummary | null;
12
+ summaryLoading: boolean;
13
+ drawerOpen: boolean;
14
+ selectedTaskId: string | null;
15
+ activeFilter: TaskFilter;
16
+ /** Opt-in "assigned to me". Off by default — the tab is the workspace's. */
17
+ mine: boolean;
18
+ currentUserId: string | null;
19
+ fetchTasks(query?: TaskQuery): Promise<void>;
20
+ fetchLabels(): Promise<void>;
21
+ fetchSummary(): Promise<void>;
22
+ createTask(input: CreateTaskInput): Promise<Task>;
23
+ updateTask(id: string, input: UpdateTaskInput): Promise<Task>;
24
+ deleteTask(id: string): Promise<void>;
25
+ reorderTask(id: string, newPosition: number, status: TaskStatus): Promise<void>;
26
+ openDrawer(): void;
27
+ closeDrawer(): void;
28
+ toggleDrawer(): void;
29
+ selectTask(id: string | null): void;
30
+ setFilter(filter: TaskFilter): void;
31
+ setMine(mine: boolean): void;
32
+ setCurrentUserId(id: string | null): void;
33
+ }
34
+ export declare const useTasksStore: import("zustand").UseBoundStore<import("zustand").StoreApi<TasksUIState>>;
35
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAEL,KAAK,eAAe,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EACjG,KAAK,YAAY,EAAE,KAAK,eAAe,EACxC,MAAM,eAAe,CAAA;AAMtB,sEAAsE;AACtE,wBAAgB,gBAAgB,IAAI,iBAAiB,CAGpD;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAErE;AAYD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,YAAY,EAAE,OAAO,CAAA;IACrB,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IAEvB,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,YAAY,EAAE,UAAU,CAAA;IACxB,4EAA4E;IAC5E,IAAI,EAAE,OAAO,CAAA;IACb,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5B,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/E,UAAU,IAAI,IAAI,CAAA;IAClB,WAAW,IAAI,IAAI,CAAA;IACnB,YAAY,IAAI,IAAI,CAAA;IACpB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACnC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;CAC1C;AAED,eAAO,MAAM,aAAa,2EAsGvB,CAAA"}
package/dist/store.js ADDED
@@ -0,0 +1,6 @@
1
+ export { getTasksProvider, setTasksProvider, useTasksStore } from './chunk-KM7XZUFP.js';
2
+ import './chunk-IHQV22ML.js';
3
+ import './chunk-IYQSFHSK.js';
4
+ import './chunk-5DWYILP2.js';
5
+ //# sourceMappingURL=store.js.map
6
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"store.js"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { type TaskDetailProps } from '../components/TaskDetail';
3
+ export type TasksPanelProps = Pick<TaskDetailProps, 'locale' | 'onDelegate' | 'renderActions'>;
4
+ /** The task list with no box around it: the host decides whether it is a rail tab or a sheet. */
5
+ export declare function TasksPanel({ locale, onDelegate, renderActions }: TasksPanelProps): React.JSX.Element;
6
+ /** One-line summary of what needs attention ("3 atrasadas · 2 para hoje"). */
7
+ export declare function useTasksSummaryLine(): string;
8
+ //# sourceMappingURL=TasksPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TasksPanel.d.ts","sourceRoot":"","sources":["../../src/views/TasksPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AASzB,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE3E,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,YAAY,GAAG,eAAe,CAAC,CAAA;AAE9F,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,eAAe,qBAuFhF;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C"}