things-api 0.10.0 → 0.12.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/README.md +50 -13
- package/dist/audit/schema.d.ts +7 -0
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/clock.d.ts +8 -0
- package/dist/cli/clock.js +24 -0
- package/dist/cli/clock.js.map +1 -0
- package/dist/cli/commands/area.d.ts +18 -11
- package/dist/cli/commands/area.js +61 -74
- package/dist/cli/commands/area.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -2
- package/dist/cli/commands/doctor.js +11 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install-skill.d.ts +60 -0
- package/dist/cli/commands/install-skill.js +256 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/mcp.js +9 -0
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/project.d.ts +1 -0
- package/dist/cli/commands/project.js +27 -34
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.d.ts +15 -2
- package/dist/cli/commands/reads.js +144 -44
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/setup.js +7 -2
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +38 -14
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/todo.js +15 -9
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +797 -174
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/did-you-mean.d.ts +14 -3
- package/dist/cli/did-you-mean.js +26 -3
- package/dist/cli/did-you-mean.js.map +1 -1
- package/dist/cli/glyphs.d.ts +32 -2
- package/dist/cli/glyphs.js +83 -12
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.js +121 -16
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +33 -2
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/move-hint.d.ts +46 -0
- package/dist/cli/move-hint.js +196 -0
- package/dist/cli/move-hint.js.map +1 -0
- package/dist/cli/period.d.ts +2 -8
- package/dist/cli/period.js +44 -30
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.d.ts +43 -5
- package/dist/cli/read-driver.js +91 -15
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +19 -8
- package/dist/cli/render.js +70 -27
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/resolve-invocation.d.ts +2 -2
- package/dist/cli/resolve-invocation.js +3 -3
- package/dist/cli/resolve-invocation.js.map +1 -1
- package/dist/cli/skill-check.d.ts +27 -0
- package/dist/cli/skill-check.js +99 -0
- package/dist/cli/skill-check.js.map +1 -0
- package/dist/cli/skill.d.ts +70 -0
- package/dist/cli/skill.js +152 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tag-filters.d.ts +6 -2
- package/dist/cli/tag-filters.js +8 -6
- package/dist/cli/tag-filters.js.map +1 -1
- package/dist/cli/verb-hint.js +28 -3
- package/dist/cli/verb-hint.js.map +1 -1
- package/dist/cli/version.d.ts +4 -0
- package/dist/cli/version.js +18 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/client.d.ts +171 -27
- package/dist/client.js +279 -40
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +66 -2
- package/dist/config.js +120 -12
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +186 -28
- package/dist/contracts.js +22 -1
- package/dist/contracts.js.map +1 -1
- package/dist/diagnose.d.ts +34 -2
- package/dist/diagnose.js +36 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/index.d.ts +25 -9
- package/dist/index.js +22 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.js +1157 -684
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/clock.d.ts +61 -0
- package/dist/model/clock.js +71 -0
- package/dist/model/clock.js.map +1 -0
- package/dist/model/dates.d.ts +26 -3
- package/dist/model/dates.js +84 -3
- package/dist/model/dates.js.map +1 -1
- package/dist/model/entities.d.ts +60 -3
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.d.ts +4 -2
- package/dist/model/mappers.js +66 -9
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/recurrence.d.ts +8 -1
- package/dist/model/recurrence.js.map +1 -1
- package/dist/read/area-filter.d.ts +76 -0
- package/dist/read/area-filter.js +59 -0
- package/dist/read/area-filter.js.map +1 -0
- package/dist/read/area-view.d.ts +12 -12
- package/dist/read/area-view.js +58 -34
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.d.ts +1 -1
- package/dist/read/detail.js +26 -12
- package/dist/read/detail.js.map +1 -1
- package/dist/read/log-boundary.d.ts +1 -1
- package/dist/read/log-boundary.js +13 -3
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +18 -0
- package/dist/read/predicates.js +19 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.d.ts +32 -16
- package/dist/read/project-view.js +80 -45
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/pseudo-area.d.ts +29 -0
- package/dist/read/pseudo-area.js +27 -0
- package/dist/read/pseudo-area.js.map +1 -0
- package/dist/read/queries.d.ts +108 -19
- package/dist/read/queries.js +212 -35
- package/dist/read/queries.js.map +1 -1
- package/dist/read/scope.d.ts +126 -0
- package/dist/read/scope.js +162 -0
- package/dist/read/scope.js.map +1 -0
- package/dist/read/search-rank.d.ts +2 -5
- package/dist/read/shape.d.ts +162 -0
- package/dist/read/shape.js +686 -0
- package/dist/read/shape.js.map +1 -0
- package/dist/read/show-target.d.ts +9 -1
- package/dist/read/show-target.js +45 -4
- package/dist/read/show-target.js.map +1 -1
- package/dist/read/snapshot.d.ts +1 -1
- package/dist/read/snapshot.js +9 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/stage.d.ts +199 -0
- package/dist/read/stage.js +125 -0
- package/dist/read/stage.js.map +1 -0
- package/dist/read/truncation.d.ts +8 -6
- package/dist/read/truncation.js +35 -10
- package/dist/read/truncation.js.map +1 -1
- package/dist/read/views.d.ts +61 -20
- package/dist/read/views.js +240 -82
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +9 -0
- package/dist/surface-copy.js +9 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/write/accessibility-probe.d.ts +1 -1
- package/dist/write/accessibility-probe.js +8 -0
- package/dist/write/accessibility-probe.js.map +1 -1
- package/dist/write/automation-probe.d.ts +1 -1
- package/dist/write/automation-probe.js +8 -0
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/batch.d.ts +49 -10
- package/dist/write/batch.js +423 -70
- package/dist/write/batch.js.map +1 -1
- package/dist/write/commands.d.ts +1 -1
- package/dist/write/commands.js +316 -66
- package/dist/write/commands.js.map +1 -1
- package/dist/write/guards.d.ts +1 -1
- package/dist/write/guards.js +94 -10
- package/dist/write/guards.js.map +1 -1
- package/dist/write/heading.d.ts +10 -1
- package/dist/write/heading.js +35 -5
- package/dist/write/heading.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +2 -2
- package/dist/write/make-repeating-project.js +9 -9
- package/dist/write/make-repeating-project.js.map +1 -1
- package/dist/write/move.d.ts +130 -0
- package/dist/write/move.js +1533 -0
- package/dist/write/move.js.map +1 -0
- package/dist/write/operations.d.ts +105 -19
- package/dist/write/operations.js +56 -7
- package/dist/write/operations.js.map +1 -1
- package/dist/write/opid.d.ts +31 -0
- package/dist/write/opid.js +30 -0
- package/dist/write/opid.js.map +1 -0
- package/dist/write/pipeline.d.ts +122 -3
- package/dist/write/pipeline.js +309 -52
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/planner.js +8 -1
- package/dist/write/planner.js.map +1 -1
- package/dist/write/pre-state.d.ts +197 -6
- package/dist/write/pre-state.js +427 -20
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/recurrence-rule-blob.d.ts +65 -0
- package/dist/write/recurrence-rule-blob.js +150 -0
- package/dist/write/recurrence-rule-blob.js.map +1 -0
- package/dist/write/reorder.d.ts +23 -3
- package/dist/write/reorder.js +1871 -85
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/reversibility.js +19 -7
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/scope-guard.d.ts +31 -0
- package/dist/write/scope-guard.js +162 -0
- package/dist/write/scope-guard.js.map +1 -0
- package/dist/write/undo.js +120 -13
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/applescript.js +16 -7
- package/dist/write/vectors/applescript.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +5 -7
- package/dist/write/vectors/registry.js +49 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/shortcuts.js +1 -1
- package/dist/write/vectors/shortcuts.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +44 -0
- package/dist/write/vectors/simulator.js +1192 -0
- package/dist/write/vectors/simulator.js.map +1 -0
- package/dist/write/vectors/types.d.ts +46 -0
- package/dist/write/vectors/ui-certification.d.ts +10 -4
- package/dist/write/vectors/ui-certification.js +43 -10
- package/dist/write/vectors/ui-certification.js.map +1 -1
- package/dist/write/vectors/ui-drag.d.ts +21 -1
- package/dist/write/vectors/ui-drag.js +138 -27
- package/dist/write/vectors/ui-drag.js.map +1 -1
- package/dist/write/vectors/ui-recipes.d.ts +34 -1
- package/dist/write/vectors/ui-recipes.js +217 -6
- package/dist/write/vectors/ui-recipes.js.map +1 -1
- package/dist/write/vectors/ui.d.ts +40 -1
- package/dist/write/vectors/ui.js +196 -39
- package/dist/write/vectors/ui.js.map +1 -1
- package/dist/write/verify/delta.d.ts +127 -2
- package/dist/write/verify/delta.js +255 -16
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +7 -1
- package/dist/write/verify/poller.js +20 -1
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +24 -3
- package/schema/envelope.schema.json +383 -0
- package/skills/things-cli/SKILL.md +70 -0
- package/skills/things-cli/references/banner.md +35 -0
- package/skills/things-cli/references/contracts.md +62 -0
- package/skills/things-cli/references/errors.md +49 -0
- package/skills/things-cli/references/gui.md +11 -0
- package/skills/things-cli/references/model.md +60 -0
- package/skills/things-cli/references/ordering.md +71 -0
package/dist/model/dates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/model/dates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/model/dates.ts"],"names":[],"mappings":"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"}
|
package/dist/model/entities.d.ts
CHANGED
|
@@ -12,6 +12,17 @@ export type TaskType = "to-do" | "project" | "heading";
|
|
|
12
12
|
export interface Ref {
|
|
13
13
|
uuid: string;
|
|
14
14
|
title: string;
|
|
15
|
+
/**
|
|
16
|
+
* Set (and only ever `true`) when this ref points at a repeating-template
|
|
17
|
+
* PROJECT — the blueprint row whose `rt1_recurrenceRule`/`repeater` is
|
|
18
|
+
* non-null (probe-verified: the template's CHILDREN are plain rows, so the
|
|
19
|
+
* fact lives on the parent project). Only container/project refs ever carry
|
|
20
|
+
* it — area and heading refs never do — so a consumer reads its absence as
|
|
21
|
+
* "not a template". It disambiguates the two identical-looking same-title
|
|
22
|
+
* copies a project conversion leaves behind (the template blueprint vs. its
|
|
23
|
+
* spawned instance; see RepeatingInfo). Omitted when false (never `false`).
|
|
24
|
+
*/
|
|
25
|
+
isRepeatingTemplate?: true;
|
|
15
26
|
}
|
|
16
27
|
/**
|
|
17
28
|
* A surfaced tag: its NAME only. Tag uuids are a fully internal implementation
|
|
@@ -44,6 +55,16 @@ export interface RepeatingInfo {
|
|
|
44
55
|
deadlined?: boolean;
|
|
45
56
|
/** Templates, detail reads only: the decoded repeat rule (read-only; undecodable rules are omitted). */
|
|
46
57
|
rule?: RepeatRule;
|
|
58
|
+
/**
|
|
59
|
+
* Templates, detail reads only: the uuid of this template's LATEST spawned
|
|
60
|
+
* instance — the GUI "Show Latest" pick, `max(creationDate)` among the
|
|
61
|
+
* template's instances (SL1, docs/lab/sl1-show-latest.md). Populated by the
|
|
62
|
+
* detail read (src/read/detail.ts); the shaping transform emits it NESTED
|
|
63
|
+
* inside the wire `repeating` object (the complete series state), the backward
|
|
64
|
+
* pointer symmetric to the forward `nextOccurrence`. Omitted when the template
|
|
65
|
+
* has no instances. Never on a list/card row (token economy).
|
|
66
|
+
*/
|
|
67
|
+
latestInstance?: string;
|
|
47
68
|
}
|
|
48
69
|
interface TaskCommon {
|
|
49
70
|
uuid: string;
|
|
@@ -61,14 +82,50 @@ interface TaskCommon {
|
|
|
61
82
|
/** The "When" date (packed int in DB), null when unscheduled. */
|
|
62
83
|
startDate: IsoDate | null;
|
|
63
84
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
85
|
+
* Today-view section ("today" | "evening"), meaningful ONLY for items actually
|
|
86
|
+
* in Today under the evaluation clock: start=active, dated, and not
|
|
87
|
+
* future-scheduled (overdue rows stay in Today). Anytime (undated) and
|
|
88
|
+
* Upcoming (future startDate) rows carry a raw startBucket in the DB but are
|
|
89
|
+
* NOT in Today, so this is null for them.
|
|
90
|
+
*
|
|
91
|
+
* INTERNAL-ONLY (R10.1): this field is NOT on the JSON wire — it was retired
|
|
92
|
+
* as redundant with the presence-keyed {@link TaskCommon.evening} marker
|
|
93
|
+
* (`todaySection === "evening"` ⇔ `evening: true`). It survives on the
|
|
94
|
+
* in-memory entity for the human render (evening styling) and the write-verify
|
|
95
|
+
* schedule delta, which still read it; the read-shaping transform deletes it
|
|
96
|
+
* from the emitted copy. Use TodayView.evening for UI-faithful placement.
|
|
67
97
|
*/
|
|
68
98
|
todaySection: TodaySection | null;
|
|
99
|
+
/**
|
|
100
|
+
* Presence-keyed Today-view marker (`true` or absent) — derived with the Today
|
|
101
|
+
* view's own two-arm membership (a scheduled `startDate <= today`, OR an
|
|
102
|
+
* undated due/overdue deadline that is not suppressed; see
|
|
103
|
+
* src/read/stage.ts and views.ts todayView). It is a SEPARATE axis from
|
|
104
|
+
* {@link stage-taxonomy}: an item can be `anytime`/`someday`/`inbox`/`upcoming`
|
|
105
|
+
* and still be in Today. Set only when true (never `false`).
|
|
106
|
+
*/
|
|
107
|
+
today?: true;
|
|
108
|
+
/**
|
|
109
|
+
* Presence-keyed This-Evening marker (`true` or absent) — the evening
|
|
110
|
+
* sub-section of Today (`startBucket=1` AND `startDate` exactly today). Implies
|
|
111
|
+
* {@link TaskCommon.today}. Set only when true.
|
|
112
|
+
*/
|
|
113
|
+
evening?: true;
|
|
69
114
|
deadline: IsoDate | null;
|
|
70
115
|
/** Time-of-day reminder (`HH:mm`, 24h); requires a scheduled startDate. */
|
|
71
116
|
reminder: ReminderTime | null;
|
|
117
|
+
/**
|
|
118
|
+
* Presence-keyed marker (`true` or absent): the stored {@link reminder} STILL
|
|
119
|
+
* RENDERS under the evaluation clock — i.e. `reminder` is set AND `startDate`
|
|
120
|
+
* is today-or-future (src/read/stage.ts `reminderIsLive`). §9n: once
|
|
121
|
+
* `startDate` goes strictly past, the GUI hides the reminder bell while the DB
|
|
122
|
+
* keeps the byte forever, so a stale reminder is presentation-dead — this
|
|
123
|
+
* marker is absent for it. Computed at materialize (mappers) with the response
|
|
124
|
+
* clock, exactly like the {@link today}/{@link evening} markers. INTERNAL: it
|
|
125
|
+
* gates the read-shaping `reminder` emit and the human-render bell, and is
|
|
126
|
+
* stripped from the JSON wire by the shaping transform. Set only when true.
|
|
127
|
+
*/
|
|
128
|
+
reminderLive?: true;
|
|
72
129
|
area: Ref | null;
|
|
73
130
|
/** Direct tags only, by name — mirrors DB truth (inherited tags are computed; see inheritedTags). */
|
|
74
131
|
tags: TagRef[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/model/entities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../../src/model/entities.ts"],"names":[],"mappings":"AAiOA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAA6B;IACzD,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;CACb,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,CAAC,EAAE,MAAM;IACT,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,WAAW;CACf,CAAC;AACF,MAAM,CAAC,MAAM,mBAAmB,GAA+B;IAC7D,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,SAAS;CACb,CAAC;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAiC;IACjE,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,SAAS;CACb,CAAC"}
|
package/dist/model/mappers.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface TaskRow {
|
|
|
19
19
|
startBucket: number | null;
|
|
20
20
|
reminderTime: number | null;
|
|
21
21
|
deadline: number | null;
|
|
22
|
+
/** Dismissed-deadline suppression marker (packed date) — gates the Today deadline arm. */
|
|
23
|
+
deadlineSuppressionDate: number | null;
|
|
22
24
|
index: number | null;
|
|
23
25
|
todayIndex: number | null;
|
|
24
26
|
area: string | null;
|
|
@@ -56,7 +58,7 @@ export type RefResolver = (uuid: string | null) => Ref | null;
|
|
|
56
58
|
export declare class EnumDomainError extends RangeError {
|
|
57
59
|
constructor(field: string, value: unknown, uuid: string);
|
|
58
60
|
}
|
|
59
|
-
export declare function mapTodo(row: TaskRow, refs: RefResolver, tags: Ref[]): Todo;
|
|
60
|
-
export declare function mapProject(row: TaskRow, refs: RefResolver, tags: Ref[]): Project;
|
|
61
|
+
export declare function mapTodo(row: TaskRow, refs: RefResolver, tags: Ref[], packedToday: number): Todo;
|
|
62
|
+
export declare function mapProject(row: TaskRow, refs: RefResolver, tags: Ref[], packedToday: number): Project;
|
|
61
63
|
export declare function mapHeading(row: TaskRow, refs: RefResolver): Heading;
|
|
62
64
|
export declare function mapChecklistItem(row: ChecklistRow): ChecklistItem;
|
package/dist/model/mappers.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { START_STATE_FROM_DB, TASK_STATUS_FROM_DB, TODAY_SECTION_FROM_DB, } from "./entities.js";
|
|
6
6
|
import { decodeEpochReal, decodePackedDate, decodeReminderTime } from "./dates.js";
|
|
7
|
+
import { reminderIsLive } from "../read/stage.js";
|
|
7
8
|
export class EnumDomainError extends RangeError {
|
|
8
9
|
constructor(field, value, uuid) {
|
|
9
10
|
super(`unexpected ${field}=${String(value)} on ${uuid} — out of the validated enum domain; ` +
|
|
@@ -23,12 +24,30 @@ function mapStart(row) {
|
|
|
23
24
|
throw new EnumDomainError("start", row.start, row.uuid);
|
|
24
25
|
return start;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
/**
|
|
28
|
+
* `todaySection` is meaningful ONLY for items actually in the Today view. The
|
|
29
|
+
* DB stores a raw `startBucket` (0/1) on EVERY active row — prod carries
|
|
30
|
+
* startBucket=0 on every undated Anytime to-do, and future-scheduled
|
|
31
|
+
* (Upcoming) rows carry it too — so the raw bucket cannot be surfaced as-is:
|
|
32
|
+
* emitting "today" for an Anytime/Upcoming item wrongly implies Today
|
|
33
|
+
* membership (architecture.md; the MCP server note). We gate on the injected
|
|
34
|
+
* clock's `packedToday`: the field is emitted only when the row is active,
|
|
35
|
+
* dated, and not future-scheduled ("evening" via startBucket=1, else "today");
|
|
36
|
+
* overdue scheduled rows (startDate < today) stay in Today and keep it.
|
|
37
|
+
* Undated or future-dated rows OMIT the field (null).
|
|
38
|
+
*/
|
|
39
|
+
function mapTodaySection(row, packedToday) {
|
|
27
40
|
if (row.startBucket === null)
|
|
28
41
|
return null;
|
|
29
42
|
const section = TODAY_SECTION_FROM_DB[row.startBucket];
|
|
30
43
|
if (!section)
|
|
31
44
|
throw new EnumDomainError("startBucket", row.startBucket, row.uuid);
|
|
45
|
+
if ((row.start ?? 0) !== 1)
|
|
46
|
+
return null; // not start=active → not in Today
|
|
47
|
+
if (row.startDate === null)
|
|
48
|
+
return null; // undated (Anytime)
|
|
49
|
+
if (row.startDate > packedToday)
|
|
50
|
+
return null; // future startDate (Upcoming)
|
|
32
51
|
return section;
|
|
33
52
|
}
|
|
34
53
|
function mapRepeating(row) {
|
|
@@ -47,8 +66,46 @@ function mapRepeating(row) {
|
|
|
47
66
|
}
|
|
48
67
|
return info;
|
|
49
68
|
}
|
|
50
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The presence-keyed Today / This-Evening markers, derived with the Today view's
|
|
71
|
+
* OWN two-arm membership (src/read/views.ts todayView) so a marked item always
|
|
72
|
+
* agrees with the view: a SCHEDULED arm (a `startDate <= today` on a start=active
|
|
73
|
+
* or start=someday row) OR a DEADLINE arm (an undated row whose deadline is
|
|
74
|
+
* due/overdue and not dismissed — the `deadlineSuppressionDate` guard, oddities
|
|
75
|
+
* §8e). Evening is the This-Evening sub-section (`startBucket=1` AND `startDate`
|
|
76
|
+
* exactly today), and implies today. Repeating templates are never in Today
|
|
77
|
+
* (the view excludes them), so they never mark. The closed-and-swept (logged)
|
|
78
|
+
* gate is applied downstream at the emit boundary (which knows `stage`), since
|
|
79
|
+
* the logbook boundary is not visible here.
|
|
80
|
+
*/
|
|
81
|
+
function todayMarkers(row, packedToday) {
|
|
82
|
+
const isTemplate = row.rt1_recurrenceRule !== null || row.repeater !== null;
|
|
83
|
+
if (isTemplate)
|
|
84
|
+
return {};
|
|
85
|
+
const start = row.start ?? 0;
|
|
86
|
+
const scheduledArm = row.startDate !== null && row.startDate <= packedToday && (start === 1 || start === 2);
|
|
87
|
+
const deadlineArm = row.startDate === null &&
|
|
88
|
+
row.deadline !== null &&
|
|
89
|
+
row.deadline <= packedToday &&
|
|
90
|
+
(row.deadlineSuppressionDate === null || row.deadlineSuppressionDate < row.deadline);
|
|
91
|
+
if (!scheduledArm && !deadlineArm)
|
|
92
|
+
return {};
|
|
93
|
+
const evening = row.startBucket === 1 && start === 1 && row.startDate === packedToday;
|
|
94
|
+
return evening ? { today: true, evening: true } : { today: true };
|
|
95
|
+
}
|
|
96
|
+
function commonFields(row, refs, tags, packedToday) {
|
|
97
|
+
const startDate = decodePackedDate(row.startDate);
|
|
98
|
+
const reminder = decodeReminderTime(row.reminderTime);
|
|
99
|
+
// §9n: a reminder byte renders only while startDate is today-or-future — a
|
|
100
|
+
// strictly-past startDate leaves the byte in the DB but presentation-dead.
|
|
101
|
+
// Bake that liveness into a presence-keyed marker under the response clock (as
|
|
102
|
+
// todayMarkers bakes Today/Evening), so the read-emit boundary and the human
|
|
103
|
+
// render gate on it without re-consulting a clock. decodePackedDate(packedToday)
|
|
104
|
+
// is today's ISO; reminderIsLive keeps null-startDate reminders (defensive).
|
|
105
|
+
const reminderLive = reminder !== null && reminderIsLive(startDate, decodePackedDate(packedToday) ?? "");
|
|
51
106
|
return {
|
|
107
|
+
...todayMarkers(row, packedToday),
|
|
108
|
+
...(reminderLive ? { reminderLive: true } : {}),
|
|
52
109
|
uuid: row.uuid,
|
|
53
110
|
title: row.title ?? "",
|
|
54
111
|
notes: row.notes ?? "",
|
|
@@ -59,8 +116,8 @@ function commonFields(row, refs, tags) {
|
|
|
59
116
|
logged: mapStatus(row) !== "open",
|
|
60
117
|
trashed: row.trashed === 1,
|
|
61
118
|
start: mapStart(row),
|
|
62
|
-
startDate
|
|
63
|
-
todaySection: mapTodaySection(row),
|
|
119
|
+
startDate,
|
|
120
|
+
todaySection: mapTodaySection(row, packedToday),
|
|
64
121
|
// A template's own `deadline` column is not a real date: it is NULL
|
|
65
122
|
// (deadline-less) or a far-future sentinel (4001-01-01, deadlined) that
|
|
66
123
|
// flags whether spawned instances deadline. Surface it via
|
|
@@ -68,7 +125,7 @@ function commonFields(row, refs, tags) {
|
|
|
68
125
|
deadline: row.rt1_recurrenceRule !== null || row.repeater !== null
|
|
69
126
|
? null
|
|
70
127
|
: decodePackedDate(row.deadline),
|
|
71
|
-
reminder
|
|
128
|
+
reminder,
|
|
72
129
|
// The EFFECTIVE area: a to-do nested in a project (own `area` NULL) reports
|
|
73
130
|
// its container's area, restoring useful area info omit-empty (#163) would
|
|
74
131
|
// otherwise hide. Projects and area-direct to-dos are unaffected (effective
|
|
@@ -82,9 +139,9 @@ function commonFields(row, refs, tags) {
|
|
|
82
139
|
stopped: decodeEpochReal(row.stopDate),
|
|
83
140
|
};
|
|
84
141
|
}
|
|
85
|
-
export function mapTodo(row, refs, tags) {
|
|
142
|
+
export function mapTodo(row, refs, tags, packedToday) {
|
|
86
143
|
return {
|
|
87
|
-
...commonFields(row, refs, tags),
|
|
144
|
+
...commonFields(row, refs, tags, packedToday),
|
|
88
145
|
type: "to-do",
|
|
89
146
|
project: refs(row.project),
|
|
90
147
|
heading: refs(row.heading),
|
|
@@ -92,9 +149,9 @@ export function mapTodo(row, refs, tags) {
|
|
|
92
149
|
openChecklistItemsCount: row.openChecklistItemsCount ?? 0,
|
|
93
150
|
};
|
|
94
151
|
}
|
|
95
|
-
export function mapProject(row, refs, tags) {
|
|
152
|
+
export function mapProject(row, refs, tags, packedToday) {
|
|
96
153
|
return {
|
|
97
|
-
...commonFields(row, refs, tags),
|
|
154
|
+
...commonFields(row, refs, tags, packedToday),
|
|
98
155
|
type: "project",
|
|
99
156
|
untrashedLeafActionsCount: row.untrashedLeafActionsCount ?? 0,
|
|
100
157
|
openUntrashedLeafActionsCount: row.openUntrashedLeafActionsCount ?? 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/model/mappers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GAUtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/model/mappers.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,7 +48,14 @@ export interface RepeatRule {
|
|
|
48
48
|
type: "fixed" | "after-completion";
|
|
49
49
|
unit: "daily" | "weekly" | "monthly" | "yearly";
|
|
50
50
|
interval: number;
|
|
51
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* Days the instance's start precedes its event date (≤ 0). CAVEAT (UIC7,
|
|
53
|
+
* oddities §8p): a GUI reschedule from a fixed to an after-completion rule
|
|
54
|
+
* PRESERVES this offset (and the deadline) from the old rule — an
|
|
55
|
+
* after-completion rule can therefore legitimately carry a non-zero `ts`
|
|
56
|
+
* (deadline = start − ts), so consumers must not assume after-completion ⇒
|
|
57
|
+
* ts=0. The calendar `offsets`, by contrast, reset to the unit nominal.
|
|
58
|
+
*/
|
|
52
59
|
startOffsetDays: number;
|
|
53
60
|
offsets: RepeatOffset[];
|
|
54
61
|
endDate: IsoDate | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/model/recurrence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recurrence.js","sourceRoot":"","sources":["../../src/model/recurrence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `--area` view filter: a pure POST-FILTER applied to an already-computed
|
|
3
|
+
* list view, restricting it to one area. It NEVER changes a view's membership
|
|
4
|
+
* or ordering logic — it runs after the view is shaped and BEFORE any row cap /
|
|
5
|
+
* truncation, so `--limit` (and the grouped per-block caps) size the filtered
|
|
6
|
+
* result, not the raw one.
|
|
7
|
+
*
|
|
8
|
+
* KEEP RULE (transitive): a row survives when its EFFECTIVE area is the target —
|
|
9
|
+
* its own `area`, or (for a to-do nested in a project, directly or via a
|
|
10
|
+
* heading) its containing project's area. Project rows survive when the
|
|
11
|
+
* project's own area is the target. Everything else is dropped: other areas,
|
|
12
|
+
* area-less loose items, area-less projects and their children, and Inbox rows.
|
|
13
|
+
* The entity's `area` Ref already IS this effective area (queries.ts
|
|
14
|
+
* EFFECTIVE_AREA, surfaced by mappers.ts), so the rule is a single comparison.
|
|
15
|
+
*
|
|
16
|
+
* The filtering lives here in the library layer, not in the CLI/MCP consumers:
|
|
17
|
+
* both surfaces enable it by passing an `area` ref, and the client applies it
|
|
18
|
+
* uniformly across every shaped view (flat lists, the Today split, and the
|
|
19
|
+
* grouped sidebar catalogues).
|
|
20
|
+
*/
|
|
21
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
22
|
+
import type { IsoDate } from "../model/dates.ts";
|
|
23
|
+
import type { ListItem, SidebarSection, TodayView } from "./views.ts";
|
|
24
|
+
/**
|
|
25
|
+
* The resolved target of an `area` filter — the area's uuid and title. Surfaced
|
|
26
|
+
* as the additive `meta.filter.area` annotation so a consumer knows exactly
|
|
27
|
+
* which area the returned rows were scoped to.
|
|
28
|
+
*/
|
|
29
|
+
export interface AreaFilterTarget {
|
|
30
|
+
uuid: string;
|
|
31
|
+
title: string;
|
|
32
|
+
}
|
|
33
|
+
/** The additive `meta.filter` annotation, emitted only when a filter is active. */
|
|
34
|
+
export interface ViewFilterMeta {
|
|
35
|
+
area: AreaFilterTarget;
|
|
36
|
+
}
|
|
37
|
+
/** A per-read `area` scope accepted by the flat/grouped/Today view reads. */
|
|
38
|
+
export interface AreaScopedRead {
|
|
39
|
+
/**
|
|
40
|
+
* Restrict the computed view to one area (uuid or unique name): its direct
|
|
41
|
+
* items and its projects' children (heading-nested included). Unresolvable
|
|
42
|
+
* or ambiguous references throw {@link ReferenceResolutionError}, exactly like
|
|
43
|
+
* every other ref argument.
|
|
44
|
+
*/
|
|
45
|
+
area?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve an area ref (uuid or unique name) to its uuid + title via the SAME
|
|
49
|
+
* resolver the `things areas <ref>` view command uses, then read the title for
|
|
50
|
+
* the {@link ViewFilterMeta} annotation. Throws on an unresolvable/ambiguous
|
|
51
|
+
* ref, carrying the standard machine-readable candidate shape.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveAreaFilter(db: DatabaseSync, ref: string): AreaFilterTarget;
|
|
54
|
+
/**
|
|
55
|
+
* The transitive keep-rule: the row's EFFECTIVE area is the target. The reserved
|
|
56
|
+
* {@link LOOSE_REF} sentinel selects the area-less rows instead — an effective
|
|
57
|
+
* area of null (the row's own area is null AND, for a project child, its project
|
|
58
|
+
* carries no area either; `item.area` already IS that effective area).
|
|
59
|
+
*/
|
|
60
|
+
export declare function itemInArea(item: ListItem, areaUuid: string): boolean;
|
|
61
|
+
/** Filter a flat view (upcoming) to the target area. */
|
|
62
|
+
export declare function filterListByArea<T extends ListItem>(items: T[], areaUuid: string): T[];
|
|
63
|
+
/**
|
|
64
|
+
* Filter the grouped sidebar catalogue (anytime/someday) to the target area:
|
|
65
|
+
* each section's items are filtered by the keep-rule and empty sections drop.
|
|
66
|
+
* A section is already grouped by effective area, so at most one survives — but
|
|
67
|
+
* the per-item pass keeps the rule identical to the flat/Today paths.
|
|
68
|
+
*/
|
|
69
|
+
export declare function filterSectionsByArea(sections: SidebarSection[], areaUuid: string): SidebarSection[];
|
|
70
|
+
/**
|
|
71
|
+
* Filter the Today split to the target area. The badge is recomputed over the
|
|
72
|
+
* surviving OPEN members so it reflects exactly the rows the view now returns —
|
|
73
|
+
* the same treatment {@link todayView} gives its `eveningOnly` filter — never a
|
|
74
|
+
* count that includes dropped rows.
|
|
75
|
+
*/
|
|
76
|
+
export declare function filterTodayByArea(view: TodayView, areaUuid: string, todayIso: IsoDate): TodayView;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { resolveAreaUuid } from "./queries.js";
|
|
2
|
+
import { isLooseRef, LOOSE_REF } from "./pseudo-area.js";
|
|
3
|
+
/**
|
|
4
|
+
* Resolve an area ref (uuid or unique name) to its uuid + title via the SAME
|
|
5
|
+
* resolver the `things areas <ref>` view command uses, then read the title for
|
|
6
|
+
* the {@link ViewFilterMeta} annotation. Throws on an unresolvable/ambiguous
|
|
7
|
+
* ref, carrying the standard machine-readable candidate shape.
|
|
8
|
+
*/
|
|
9
|
+
export function resolveAreaFilter(db, ref) {
|
|
10
|
+
// The reserved `loose` ref addresses the NULL area (area-less items) as a
|
|
11
|
+
// pseudo-area — no real uuid to resolve. The sentinel uuid `loose` is itself
|
|
12
|
+
// a valid read-surface ref (it round-trips), so `meta.filter.area` stays
|
|
13
|
+
// consumable. See itemInArea + the native-query loose clauses (logbook/search).
|
|
14
|
+
if (isLooseRef(ref))
|
|
15
|
+
return { uuid: LOOSE_REF, title: "Loose" };
|
|
16
|
+
const uuid = resolveAreaUuid(db, ref);
|
|
17
|
+
const row = db.prepare("SELECT title FROM TMArea WHERE uuid = ?").get(uuid);
|
|
18
|
+
return { uuid, title: row?.title ?? "" };
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The transitive keep-rule: the row's EFFECTIVE area is the target. The reserved
|
|
22
|
+
* {@link LOOSE_REF} sentinel selects the area-less rows instead — an effective
|
|
23
|
+
* area of null (the row's own area is null AND, for a project child, its project
|
|
24
|
+
* carries no area either; `item.area` already IS that effective area).
|
|
25
|
+
*/
|
|
26
|
+
export function itemInArea(item, areaUuid) {
|
|
27
|
+
if (areaUuid === LOOSE_REF)
|
|
28
|
+
return item.area == null;
|
|
29
|
+
return item.area?.uuid === areaUuid;
|
|
30
|
+
}
|
|
31
|
+
/** Filter a flat view (upcoming) to the target area. */
|
|
32
|
+
export function filterListByArea(items, areaUuid) {
|
|
33
|
+
return items.filter((i) => itemInArea(i, areaUuid));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Filter the grouped sidebar catalogue (anytime/someday) to the target area:
|
|
37
|
+
* each section's items are filtered by the keep-rule and empty sections drop.
|
|
38
|
+
* A section is already grouped by effective area, so at most one survives — but
|
|
39
|
+
* the per-item pass keeps the rule identical to the flat/Today paths.
|
|
40
|
+
*/
|
|
41
|
+
export function filterSectionsByArea(sections, areaUuid) {
|
|
42
|
+
return sections
|
|
43
|
+
.map((s) => ({ area: s.area, items: s.items.filter((i) => itemInArea(i, areaUuid)) }))
|
|
44
|
+
.filter((s) => s.items.length > 0);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Filter the Today split to the target area. The badge is recomputed over the
|
|
48
|
+
* surviving OPEN members so it reflects exactly the rows the view now returns —
|
|
49
|
+
* the same treatment {@link todayView} gives its `eveningOnly` filter — never a
|
|
50
|
+
* count that includes dropped rows.
|
|
51
|
+
*/
|
|
52
|
+
export function filterTodayByArea(view, areaUuid, todayIso) {
|
|
53
|
+
const today = view.today.filter((i) => itemInArea(i, areaUuid));
|
|
54
|
+
const evening = view.evening.filter((i) => itemInArea(i, areaUuid));
|
|
55
|
+
const open = [...today, ...evening].filter((i) => i.status === "open");
|
|
56
|
+
const dueOrOverdue = open.filter((i) => i.deadline !== null && i.deadline <= todayIso).length;
|
|
57
|
+
return { today, evening, badge: { dueOrOverdue, other: open.length - dueOrOverdue } };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=area-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-filter.js","sourceRoot":"","sources":["../../src/read/area-filter.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA6BzD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAgB,EAAE,GAAW;IAC7D,0EAA0E;IAC1E,6EAA6E;IAC7E,yEAAyE;IACzE,gFAAgF;IAChF,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,IAAI,CAE7D,CAAC;IACd,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAc,EAAE,QAAgB;IACzD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IACrD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC;AACtC,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAqB,KAAU,EAAE,QAAgB;IAC/E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAA0B,EAC1B,QAAgB;IAEhB,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;SACrF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,QAAgB,EAAE,QAAiB;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC9F,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,EAAE,CAAC;AACxF,CAAC"}
|
package/dist/read/area-view.d.ts
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Composite area view mirroring the native UI: the area's direct to-dos
|
|
3
3
|
* (active first), its projects as rows in sidebar order, later items
|
|
4
|
-
* (scheduled by date / repeating templates / someday)
|
|
4
|
+
* (scheduled by date / repeating templates / someday). Trashed children are
|
|
5
|
+
* excluded entirely (GUI-faithful — §6½/PLOG1-a) and the area logbook is a
|
|
6
|
+
* bounded QUERY (`things logbook --area <ref>`), not a view section.
|
|
5
7
|
* Structural twin of project-view.ts; area to-dos are never headed.
|
|
6
8
|
*/
|
|
7
9
|
import type { DatabaseSync } from "node:sqlite";
|
|
8
10
|
import type { Area, IsoDateGroup, Project, Todo } from "../model/entities.ts";
|
|
9
11
|
import { type ViewFilter } from "./views.ts";
|
|
10
12
|
export interface AreaView {
|
|
11
|
-
area
|
|
13
|
+
/** The area, or `null` for the `loose` pseudo-area (the NULL-area composite). */
|
|
14
|
+
area: Area | null;
|
|
12
15
|
/** Open, unscheduled/current direct to-dos, by index. */
|
|
13
16
|
active: Todo[];
|
|
14
17
|
/** The area's open projects in sidebar order (someday projects included). */
|
|
15
18
|
projects: Project[];
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
logged: Todo[];
|
|
24
|
-
trashed: Todo[];
|
|
19
|
+
/** Future-dated direct to-dos grouped by date ascending. */
|
|
20
|
+
scheduled: IsoDateGroup<Todo>[];
|
|
21
|
+
/** Someday (incubated, undated) direct to-dos. */
|
|
22
|
+
someday: Todo[];
|
|
23
|
+
/** Repeating template rows owned by this area (invisible in list views). */
|
|
24
|
+
repeating: Todo[];
|
|
25
25
|
}
|
|
26
26
|
/** A someday project row: open, incubated, no start date. */
|
|
27
27
|
export declare const isSomedayProjectRow: (p: Project) => boolean;
|
|
@@ -30,4 +30,4 @@ export declare const isScheduledProjectRow: (p: Project, todayIso: string) => bo
|
|
|
30
30
|
/** An active project row — everything that is neither someday nor future-scheduled. */
|
|
31
31
|
export declare const isActiveProjectRow: (p: Project, todayIso: string) => boolean;
|
|
32
32
|
/** Resolves by uuid or unique (case-insensitive) title; throws like the ref resolvers. */
|
|
33
|
-
export declare function areaView(db: DatabaseSync, ref: string, now?: Date, filter?: ViewFilter): AreaView;
|
|
33
|
+
export declare function areaView(db: DatabaseSync, ref: string, now?: Date, filter?: ViewFilter, zone?: string): AreaView;
|