@lotics/app-sdk 0.124.10 → 0.124.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared_types.d.ts +153 -48
- package/package.json +3 -4
package/dist/shared_types.d.ts
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export type AppAbsence = { member: { id: string; name: string; }; stand_in: { id: string; name: string; }; starts_on: string; ends_on: string; group_ids: string[]; };
|
|
7
7
|
/** A files cell entry; `url`/`thumbnail_url` are presigned (24h) and load from the sandboxed frame. */
|
|
8
|
-
export
|
|
8
|
+
export interface AppFile {
|
|
9
9
|
id: string;
|
|
10
10
|
filename: string;
|
|
11
11
|
mime_type: string;
|
|
12
12
|
url: string;
|
|
13
13
|
thumbnail_url?: string;
|
|
14
14
|
/** Bytes; absent on older files — sort by the raw number, format at display. */
|
|
15
|
-
size?: number;
|
|
15
|
+
size?: number | null;
|
|
16
16
|
/** ISO upload timestamp. */
|
|
17
17
|
created_at?: string;
|
|
18
18
|
/** The document template the file was generated from (`dtl_…`); absent on a file a person brought. */
|
|
@@ -22,11 +22,23 @@ export type AppFile = {
|
|
|
22
22
|
* on every read of an app not declaring `capabilities.photo_places` or by a caller outside its organization.
|
|
23
23
|
*/
|
|
24
24
|
place?: PhotoPlace;
|
|
25
|
-
}
|
|
26
|
-
export type AppLoadTiming = {
|
|
27
|
-
|
|
25
|
+
}
|
|
26
|
+
export type AppLoadTiming = { boot_ms?: number | undefined; page_bytes?: number | undefined; page_connect_ms?: number | undefined; page_decoded_bytes?: number | undefined; page_download_ms?: number | undefined; page_ttfb_ms?: number | undefined; };
|
|
27
|
+
/** What a body read needs of a table: its id, its name for a refusal, and its fields. */
|
|
28
|
+
export type BodyTable = { id: string; name: string; fields: (TableField)[]; title_field_key: string | null; };
|
|
29
|
+
/** One bound: a number, an ISO date (`2026-03-01`, `2026-03-01T09:30`), `{ "now": true }` — the day or the moment of reading — or `{ "record": "<alias>" }`. */
|
|
30
|
+
export type Bound = string | number | RecordBound | { now: true; };
|
|
31
|
+
/** A comparison: any of `gt`, `gte`, `lt`, `lte`, each ANDed. */
|
|
32
|
+
export type Compared = { gt?: Bound | undefined; gte?: Bound | undefined; lt?: Bound | undefined; lte?: Bound | undefined; };
|
|
33
|
+
/** One node of the page as the model reads it. */
|
|
34
|
+
export type ComposeNode = ComposeRows | { use: "Column"; children: ComposeOf<ComposeRows>[]; } | { use: "Bar"; children: ComposeOf<ComposeRows>[]; } | { use: "Group"; title: string; children: ComposeOf<ComposeRows>[]; } | { use: "Panel"; title: string; children: ComposeOf<ComposeRows>[]; } | { use: "Title"; } | { use: "Status"; } | { use: "Field"; field: string; } | { use: "Document"; field: string; } | { use: "Act"; act: string; } | { use: "Copy"; field: string; as: "plain" | "raw"; };
|
|
35
|
+
/** One node of a page over what its `Rows` pieces are: the piece it mounts (`use`), that piece's props, and what it holds. */
|
|
36
|
+
export type ComposeOf<Rows extends { use: "Rows"; child: string; create?: false | undefined; remove?: true | undefined; }> = Rows | { use: "Column"; children: ComposeOf<Rows>[]; } | { use: "Bar"; children: ComposeOf<Rows>[]; } | { use: "Group"; title: string; children: ComposeOf<Rows>[]; } | { use: "Panel"; title: string; children: ComposeOf<Rows>[]; } | { use: "Title"; } | { use: "Status"; } | { use: "Field"; field: string; } | { use: "Document"; field: string; } | { use: "Act"; act: string; } | { use: "Copy"; field: string; as: "plain" | "raw"; };
|
|
37
|
+
/** A `Rows` piece as the model reads it: the acts of its rows are the app's, each `of` the child. */
|
|
38
|
+
export type ComposeRows = { use: "Rows"; child: string; create?: false | undefined; remove?: true | undefined; };
|
|
39
|
+
export interface ExportCall {
|
|
28
40
|
params?: { [x: string]: unknown; };
|
|
29
|
-
filter?:
|
|
41
|
+
filter?: QueryFilterGroup<string> | QueryFilterCondition<string>;
|
|
30
42
|
sort?: readonly QuerySortKey<string>[];
|
|
31
43
|
/**
|
|
32
44
|
* A register's tabs, each one's rows beside the call's own (the open tab's): a template reads them under each
|
|
@@ -34,24 +46,29 @@ export type ExportCall = {
|
|
|
34
46
|
*/
|
|
35
47
|
tabs?: readonly ExportTab[];
|
|
36
48
|
report: ExportReport;
|
|
37
|
-
file:
|
|
49
|
+
file: ExportFile;
|
|
38
50
|
/**
|
|
39
51
|
* The words each option key of a select column prints as, by the column, in either file: a cell the server names
|
|
40
52
|
* by its field's option prints as that.
|
|
41
53
|
*/
|
|
42
54
|
labels?: { readonly [x: string]: Readonly<Record<string, string>>; };
|
|
43
|
-
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The file an export makes: the default report workbook — its words in `language`, the rows under `columns` on the
|
|
58
|
+
* tab `sheet` — or a template the query declares under `templates`, by its name there.
|
|
59
|
+
*/
|
|
60
|
+
export type ExportFile = { kind: "workbook"; language: ReportLanguage; sheet: string; columns: ReportColumn[]; } | { kind: "template"; template: string; };
|
|
44
61
|
export type ExportNarrowing = { status?: string[] | undefined; filters?: Record<string, { kind: "ids"; ids: string[]; unset?: true | undefined; } | { kind: "members"; mine: boolean; ids: string[]; unset?: true | undefined; } | { kind: "dates"; from: string | null; to: string | null; unset?: true | undefined; } | { kind: "yes_no"; value: boolean; } | { kind: "number"; min: number | null; max: number | null; unit?: string | undefined; } | { kind: "bands"; bands: { min: number | null; max: number | null; }[]; } | null> | undefined; search?: string | undefined; overdue?: true | undefined; waiting?: boolean | undefined; tab?: string | undefined; period?: { from: string; to: string; } | undefined; window?: { from: string; to: string; } | undefined; sort?: { field: string; dir: "asc" | "desc"; } | undefined; group?: string | null | undefined; folder?: string | undefined; per?: string | undefined; };
|
|
45
62
|
/**
|
|
46
63
|
* What an export states of its rows beside them: the page's title, one line per thing narrowing them, and the
|
|
47
64
|
* figures over them as the screen drew them.
|
|
48
65
|
*/
|
|
49
|
-
export
|
|
66
|
+
export interface ExportReport {
|
|
50
67
|
title: string;
|
|
51
68
|
lines: string[];
|
|
52
69
|
readings: ReportReading[];
|
|
53
70
|
/** Each date filter narrowing the rows, by field alias: its bounds, a day or a minute of one, with no zone. */
|
|
54
|
-
dates?: { [x: string]: { from?: string
|
|
71
|
+
dates?: { [x: string]: { from?: string; to?: string; }; };
|
|
55
72
|
/** The file's name, in the template grammar over the report; absent, the template's name, or `title`. */
|
|
56
73
|
filename?: string;
|
|
57
74
|
/** The period a register's tabs read their rows over: its bounds, a day or a minute of one, with no zone. */
|
|
@@ -63,21 +80,21 @@ export type ExportReport = {
|
|
|
63
80
|
* scalar, null where the row holds none.
|
|
64
81
|
*/
|
|
65
82
|
per_row?: { [x: string]: string | number | boolean | null; };
|
|
66
|
-
}
|
|
83
|
+
}
|
|
67
84
|
/** One tab of the register: its rows read as the export's own are — same query and params — under its own filter and order. */
|
|
68
|
-
export
|
|
85
|
+
export interface ExportTab {
|
|
69
86
|
tab: string;
|
|
70
87
|
label: string;
|
|
71
|
-
filter?:
|
|
88
|
+
filter?: QueryFilterGroup<string> | QueryFilterCondition<string>;
|
|
72
89
|
sort?: readonly QuerySortKey<string>[];
|
|
73
90
|
/**
|
|
74
91
|
* A tab of totals over the period: the declared query `query` read again under `params` (the period's two days), its
|
|
75
92
|
* rows joined to the tab's by the link column `via`, and the columns `columns` each one's `alias` and header.
|
|
76
93
|
*/
|
|
77
94
|
totals?: { query: string; params: Record<string, string>; via: string; columns: { alias: string; label: string; }[]; };
|
|
78
|
-
}
|
|
95
|
+
}
|
|
79
96
|
/** The file an app export made, as a link to download it: no workspace file, so no id, and kept a day. */
|
|
80
|
-
export
|
|
97
|
+
export interface ExportedFile {
|
|
81
98
|
filename: string;
|
|
82
99
|
mime_type: string;
|
|
83
100
|
/** Signed for at most an hour, for the caller who exported. */
|
|
@@ -86,17 +103,17 @@ export type ExportedFile = {
|
|
|
86
103
|
size: number;
|
|
87
104
|
/** When the server made it, ISO 8601. */
|
|
88
105
|
created_at: string;
|
|
89
|
-
}
|
|
106
|
+
}
|
|
90
107
|
export type ListOutsideLinksResult = { record_title: string; outside: { key: string; title: string; live: OutsideLink | null; last_closed: OutsideLink | null; }[]; };
|
|
91
|
-
export type OutsideLink = { id: string; outside_key: string; record_id: string; recipient: string; issued_by_member_id: string; created_at: string; expires_at: string; opened_at: string | null; revoked_at: string | null; revoked_reason: "
|
|
108
|
+
export type OutsideLink = { id: string; outside_key: string; record_id: string; recipient: string; issued_by_member_id: string; created_at: string; expires_at: string; opened_at: string | null; revoked_at: string | null; revoked_reason: "issuer_left" | "left_stage" | "owner_changed" | "record_deleted" | "replaced" | "revoked" | "used" | null; };
|
|
92
109
|
/** Where a device stood: degrees north and east, and how many metres off it said it may be. */
|
|
93
|
-
export
|
|
110
|
+
export interface PhotoPlace {
|
|
94
111
|
latitude: number;
|
|
95
112
|
longitude: number;
|
|
96
113
|
accuracy: number;
|
|
97
|
-
}
|
|
114
|
+
}
|
|
98
115
|
/** What an aggregate asks: output columns to group by, an output date grouped by its day, an output number summed. */
|
|
99
|
-
export
|
|
116
|
+
export interface QueryAggregate {
|
|
100
117
|
by?: readonly string[];
|
|
101
118
|
/**
|
|
102
119
|
* The `by` columns grouped by the band of their number in place of its value, each with its ascending
|
|
@@ -105,44 +122,114 @@ export type QueryAggregate = {
|
|
|
105
122
|
bands?: { readonly [x: string]: readonly number[]; };
|
|
106
123
|
day?: string;
|
|
107
124
|
sum?: string;
|
|
108
|
-
}
|
|
125
|
+
}
|
|
109
126
|
/** A column's order — applied after the named query, bounded to its projected columns. */
|
|
110
|
-
export
|
|
127
|
+
export interface QueryFieldSortKey<C extends string = string> {
|
|
128
|
+
field_key: C;
|
|
129
|
+
order: "asc" | "desc";
|
|
130
|
+
/** Where blank cells sit; `"bottom"` when omitted. */
|
|
131
|
+
blank_position?: "bottom" | "top";
|
|
132
|
+
}
|
|
111
133
|
/**
|
|
112
134
|
* Runtime filter applied after the named query, bounded to its projected
|
|
113
135
|
* columns — by `C` at compile time and again on the server.
|
|
114
136
|
*/
|
|
115
|
-
export type QueryFilter =
|
|
116
|
-
export type QueryFilterCondition =
|
|
117
|
-
export
|
|
118
|
-
|
|
137
|
+
export type QueryFilter<C extends string = string> = QueryFilterGroup<C> | QueryFilterCondition<C>;
|
|
138
|
+
export type QueryFilterCondition<C extends string = string> = QueryFilterFieldCondition<C> | QueryFilterRecordIdCondition;
|
|
139
|
+
export interface QueryFilterFieldCondition<C extends string = string> {
|
|
140
|
+
node_type: "condition";
|
|
141
|
+
field_key: C;
|
|
142
|
+
type?: string;
|
|
143
|
+
operator: string;
|
|
144
|
+
value?: unknown;
|
|
145
|
+
/** A comparison on a figure read in each row's own unit or currency: the option, by key, its value is in. */
|
|
146
|
+
unit_option?: string;
|
|
147
|
+
}
|
|
148
|
+
export interface QueryFilterGroup<C extends string = string> {
|
|
149
|
+
node_type: "group";
|
|
150
|
+
logic: "and" | "or";
|
|
151
|
+
children: (QueryFilterGroup<C> | QueryFilterCondition<C>)[];
|
|
152
|
+
}
|
|
119
153
|
/** A condition on the row's own id — no `field_key`, since no field holds it. */
|
|
120
|
-
export
|
|
154
|
+
export interface QueryFilterRecordIdCondition {
|
|
121
155
|
node_type: "condition";
|
|
122
156
|
type: "record_id";
|
|
123
157
|
operator: string;
|
|
124
|
-
value?:
|
|
125
|
-
}
|
|
158
|
+
value?: unknown;
|
|
159
|
+
}
|
|
126
160
|
/**
|
|
127
161
|
* The rows each filter keeps, in turn, before the rest — a row with the first it meets, those meeting none last;
|
|
128
162
|
* each part in the keys after. At most 8 filters.
|
|
129
163
|
*/
|
|
130
|
-
export
|
|
164
|
+
export interface QueryFirstSortKey<C extends string = string> {
|
|
165
|
+
first: QueryFilter<C>[];
|
|
166
|
+
}
|
|
131
167
|
/**
|
|
132
168
|
* One row of a query whose columns codegen could not read (a dynamic alias, a
|
|
133
169
|
* bare `from_table`). Values stay `unknown` — the cell readers narrow them.
|
|
134
170
|
* Only the two addressing columns are typed, because they are handed raw to a
|
|
135
171
|
* `record_id` / `table_id`; every other `__*` column has a reader that owns it.
|
|
136
172
|
*/
|
|
137
|
-
export
|
|
173
|
+
export interface QueryRow {
|
|
174
|
+
[key: string]: unknown;
|
|
138
175
|
/** The record this row came from: null on a grouped row, which stands for no one record. */
|
|
139
|
-
__source_record_id?: string;
|
|
176
|
+
__source_record_id?: string | null;
|
|
140
177
|
/** The table that record lives in: null on a grouped row. */
|
|
141
|
-
__source_table_id?: string;
|
|
142
|
-
}
|
|
178
|
+
__source_table_id?: string | null;
|
|
179
|
+
}
|
|
143
180
|
/** One key of a read's order; each breaks the ties of the ones before it. */
|
|
144
|
-
export type QuerySortKey = QueryFieldSortKey | QueryFirstSortKey
|
|
145
|
-
export type QueryWriteShape = { columns: Record<string, { table_id: string; field_key: string; } | { table_id: string; via: string; target_table_id: string; field_key: string; } | null>; rows?: { table_id: string; closed: boolean; sort: { field_key: string; order: "asc" | "desc"; }[];
|
|
181
|
+
export type QuerySortKey<C extends string = string> = QueryFieldSortKey<C> | QueryFirstSortKey<C>;
|
|
182
|
+
export type QueryWriteShape = { columns: Record<string, { table_id: string; field_key: string; } | { table_id: string; via: string; target_table_id: string; field_key: string; } | null>; rows?: { table_id: string; filter?: TableRecordFilters | undefined; closed: boolean; sort: { field_key: string; order: "asc" | "desc"; }[]; } | undefined; totals?: { table_id: string; filter?: TableRecordFilters | undefined; by: { output: string; field_key: string; }[]; aggregates: { output: string; operation: "avg" | "checked" | "count" | "date_range" | "earliest" | "empty" | "filled" | "latest" | "max" | "median" | "min" | "percent_checked" | "percent_empty" | "percent_filled" | "percent_unchecked" | "percent_unique" | "range" | "selected" | "string_agg" | "sum" | "unchecked" | "unique"; field_key?: string | undefined; }[]; } | undefined; };
|
|
183
|
+
/** A bound read from a field of the record a List stands beside: the day or figure that field holds when the rows are read. */
|
|
184
|
+
export type RecordBound = { record: string; };
|
|
185
|
+
export interface ReportColumn {
|
|
186
|
+
/** Each row's cell by it. */
|
|
187
|
+
key: string;
|
|
188
|
+
header: string;
|
|
189
|
+
/** A `date` cell is an ISO day or moment. */
|
|
190
|
+
type: "date" | "number" | "text";
|
|
191
|
+
}
|
|
192
|
+
export type ReportLanguage = "en" | "vi";
|
|
193
|
+
export interface ReportPart {
|
|
194
|
+
label: string;
|
|
195
|
+
value: number;
|
|
196
|
+
/** Its share of the whole, 0–1; none where the whole is unknown or nothing. */
|
|
197
|
+
share: number | null;
|
|
198
|
+
}
|
|
199
|
+
export interface ReportPivotColumn {
|
|
200
|
+
label: string;
|
|
201
|
+
total: number | null;
|
|
202
|
+
}
|
|
203
|
+
export interface ReportPivotRow {
|
|
204
|
+
label: string;
|
|
205
|
+
/** Its figure under every column, in their order. */
|
|
206
|
+
values: number[];
|
|
207
|
+
total: number | null;
|
|
208
|
+
}
|
|
209
|
+
export interface ReportPoint {
|
|
210
|
+
/** The period as its axis names it. */
|
|
211
|
+
label: string;
|
|
212
|
+
value: number;
|
|
213
|
+
/** Still running, or cut by the window's edge. */
|
|
214
|
+
partial: boolean;
|
|
215
|
+
}
|
|
216
|
+
export type ReportReading = { kind: "failed"; label: string; } | (ReportReadingHead & { kind: "metric"; value: number | null; }) | (ReportReadingHead & { kind: "breakdown"; byLabel: string; parts: ReportPart[]; total: number | null; }) | (ReportReadingHead & { kind: "trend"; points: ReportPoint[]; }) | (ReportReadingHead & { kind: "pivot"; rowsLabel: string; columnsLabel: string; columns: ReportPivotColumn[]; rows: ReportPivotRow[]; total: number | null; });
|
|
217
|
+
/** What every reading of numbers states beside its figures. */
|
|
218
|
+
export interface ReportReadingHead {
|
|
219
|
+
label: string;
|
|
220
|
+
/** What its figures are: the summed field's name, or a count's word. */
|
|
221
|
+
valueLabel: string;
|
|
222
|
+
/** The unit or currency its figures read in; none for a count or a plain number. */
|
|
223
|
+
unit: string | null;
|
|
224
|
+
/** The read behind it was cut: its figures stand, every total over them is left out (`null`). */
|
|
225
|
+
truncated: boolean;
|
|
226
|
+
}
|
|
227
|
+
export interface ResolvedLink {
|
|
228
|
+
/** A `rec_…` id, to correlate or filter. */
|
|
229
|
+
id: string;
|
|
230
|
+
/** The primary-field value, to render. */
|
|
231
|
+
display: string;
|
|
232
|
+
}
|
|
146
233
|
/**
|
|
147
234
|
* A member, in the one shape a `select_member` cell and the `useMembers`
|
|
148
235
|
* roster both return. `email`, `image`, `groups`, `role` and `joined` reach
|
|
@@ -150,20 +237,20 @@ export type QueryWriteShape = { columns: Record<string, { table_id: string; fiel
|
|
|
150
237
|
* and `archived`. Absent is not empty: `image: null` is "no photo", a missing
|
|
151
238
|
* `image` is "not told".
|
|
152
239
|
*/
|
|
153
|
-
export
|
|
240
|
+
export interface ResolvedMember {
|
|
154
241
|
id: string;
|
|
155
242
|
/** `null` for an id outside the org (a removed member). */
|
|
156
243
|
name: string | null;
|
|
157
|
-
email?: string;
|
|
244
|
+
email?: string | null;
|
|
158
245
|
/** Presigned; `null` without a photo. */
|
|
159
|
-
image?: string;
|
|
246
|
+
image?: string | null;
|
|
160
247
|
/** Group names — the platform's "department"; `[]` when in none. */
|
|
161
248
|
groups?: string[];
|
|
162
249
|
/**
|
|
163
250
|
* The organization PERMISSION level, not a job title — "who is this person"
|
|
164
251
|
* is `groups`. Raw: translate it yourself.
|
|
165
252
|
*/
|
|
166
|
-
role?: "
|
|
253
|
+
role?: "admin" | "member" | "owner";
|
|
167
254
|
/** ISO timestamp of joining the organization. */
|
|
168
255
|
joined?: string;
|
|
169
256
|
/**
|
|
@@ -171,9 +258,9 @@ export type ResolvedMember = {
|
|
|
171
258
|
* one, since a departed member cannot be assigned.
|
|
172
259
|
*/
|
|
173
260
|
archived?: true;
|
|
174
|
-
}
|
|
261
|
+
}
|
|
175
262
|
/** The server resolves each `select` cell to `ResolvedOption[]` before the app sees it. */
|
|
176
|
-
export
|
|
263
|
+
export interface ResolvedOption {
|
|
177
264
|
key: string;
|
|
178
265
|
/** The key, for an option deleted after the cell was written. */
|
|
179
266
|
label: string;
|
|
@@ -184,12 +271,12 @@ export type ResolvedOption = {
|
|
|
184
271
|
color?: string;
|
|
185
272
|
/** A brand or icon mark, from `useFieldOptions` only. */
|
|
186
273
|
mark?: { kind: "brand"; name: string; } | { kind: "icon"; name: string; };
|
|
187
|
-
}
|
|
188
|
-
export type SpecFile = { version: 29; app: { alias: string; label: string; locale: "vi" | "en"; description?: string | undefined; }; entities: Record<string, { alias: string; label: string; table: string; fields: Record<string, { alias: string; id: string; type: "number" | "boolean" | "date" | "text" | "select" | "select_member" | "select_record_link" | "files" | "formula" | "rollup" | "lookup" | "autonumber"; label: string; result?: "number" | "boolean" | "date" | "text" | "select" | "select_member" | "select_record_link" | "files" | "formula" | "rollup" | "lookup" | "autonumber" | undefined; description?: string | undefined; format?: "datetime" | "text" | "link" | "markdown" | undefined; multi?: true | undefined; required?: true | undefined; readonly?: true | undefined; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; limit?: { field: string; } | { value: number; } | undefined; gate?: { field: string; } | { value: number; } | undefined; tolerance?: number | undefined; due?: true | undefined; frees?: true | undefined; summed?: true | undefined; accumulates?: true | undefined; whole?: true | undefined; restates?: string | undefined; starts?: "today" | "me" | undefined; default?: string | number | boolean | string[] | undefined; options?: { alias: string; label: string; id: string; color?: "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose" | "slate" | "gray" | "zinc" | "neutral" | "stone" | undefined; mark?: { kind: string; name: string; } | undefined; }[] | undefined; link?: string | undefined; accept?: string | undefined; image?: string | undefined; party?: "person" | "organization" | undefined; pictures?: { query: string; param: string; } | undefined; face?: Record<string, string> | undefined; default_from?: { link: string; field: string; } | undefined; reads?: string[] | undefined; through?: { link: string; field: string; } | undefined; pick?: { query: string; param?: string | undefined; same?: { field: string; param: string; }[] | undefined; } | undefined; picks_only?: true | undefined; suggest?: { query: string; param: string; column: string; } | undefined; applies?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }>; title: string; list: { query: string; param?: string | undefined; }; singular?: string | undefined; subtitle?: string[] | undefined; image?: string | undefined; mark?: string | undefined; description?: string | undefined; party?: "person" | "organization" | undefined; mine?: string | undefined; status?: { field: string; closed?: string[] | undefined; history?: string | undefined; dates?: Record<string, string> | undefined; stages?: Record<string, { owner: { kind: "member"; column: string; label: string; } | { kind: "group"; group: string; label: string; }; within?: number | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; }> | undefined; maker?: string | undefined; moves?: { query: string; param: string; link: string; status: string; at: string; went: Record<string, string>; by?: string | undefined; } | undefined; } | undefined; settled?: string | undefined; task?: { close?: { to: string; act?: string | undefined; } | undefined; reopen?: { to: string; act?: string | undefined; } | undefined; member?: string | undefined; } | undefined; progress?: { entity: string; via: string; read: { query: string; param: string; }; passed?: string | undefined; }[] | undefined; figure?: string | undefined; scan?: { read: "text" | "iso6346"; agent: string; } | { read: "code"; } | undefined; place?: { address: string; latitude: string; longitude: string; accuracy?: string | undefined; } | undefined; on_site?: { photos: string[]; latitude: string; longitude: string; radius: number; place?: string | undefined; } | undefined; pin?: { on: string; x: string; y: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; listed?: string[] | undefined; one?: { query: string; param?: string | undefined; } | undefined; create?: { workflow: string; fields: string[]; picker?: string[] | undefined; } | undefined; update?: { workflow: string; fields?: string[] | undefined; } | undefined; remove?: { workflow: string; with?: string[] | undefined; } | undefined; }>; lists: { entity: string; register: { columns: string[]; filters: (string | { field: string; tiers: number[]; })[]; layout: "table" | "cards" | "calendar" | "roster" | "lanes" | "gantt" | "plan"; book?: true | undefined; search?: string[] | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; group?: string | undefined; tabs?: { tab: string; label: string; term?: { kind: "in"; field: string; } | { kind: "open"; from: string; to: string; } | undefined; totals?: { via: string; read: { query: string; }; columns: { alias: string; label: string; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; }[]; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; }[] | undefined; period?: "today" | "week" | "month" | "quarter" | "year" | { days: number; } | undefined; roster?: { entity: string; via: string; read: { query: string; param: string; }; day?: string | undefined; end?: string | undefined; expect?: string | undefined; of?: string | undefined; cadence?: { on: ("mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun")[]; from?: string | undefined; until?: string | undefined; } | undefined; create?: string[] | undefined; } | undefined; lanes?: { field: string; start: string; end?: string | undefined; loads?: { value: string; against: string; }[] | undefined; read?: { query: string; param: string; } | undefined; } | undefined; gantt?: { start: string; end: string; milestones?: string[] | undefined; planned?: { start?: string | undefined; end?: string | undefined; } | undefined; progress?: string | undefined; after?: string | undefined; } | undefined; plan?: { at: string; across: string; up: string; place: { entity: string; kind: string; kinds: { bay: string; area: string; landmark: string; }; x: string; y: string; across: string; up: string; sheet?: string | undefined; scale?: string | undefined; width?: string | undefined; depth?: string | undefined; reach_from?: string | undefined; stacked?: string | undefined; reaches?: { first: string; last: string; both: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; }; fill?: string | undefined; mark?: { field: string; option: string; } | undefined; size?: { field: string; options: Record<string, { across: number; along: number; up: number; }>; } | undefined; load?: { query: string; param?: string | undefined; } | undefined; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; opens?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; remove?: false | undefined; create?: string[] | undefined; add_label?: string | undefined; heading?: string | undefined; export?: { query: string; key: string; label?: string | undefined; description?: string | undefined; template?: string | undefined; filename?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; per?: string | undefined; per_row?: string[] | undefined; books?: string[] | undefined; }[] | undefined; readings?: ({ entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "up" | "down" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "breakdown"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { over: string; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "trend"; value?: string | undefined; ahead?: true | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "pivot"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "shortfall"; across?: string | undefined; value?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { planned: { start: string; end: string; }; done: string; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "progress"; finished?: string | undefined; weight?: string | undefined; measured?: { via: string; read: { query: string; param: string; }; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { columns: string[]; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "list"; app?: { id: string; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; })[] | undefined; attention?: false | undefined; }; key?: string | undefined; label?: string | undefined; scope?: { field: string; entity: string; param: string; counts: { query: string; param?: string | undefined; }; } | undefined; books?: { entity: string; fields?: Record<string, string> | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; create?: string[] | undefined; }[] | undefined; owns?: { queries: string[]; workflows: string[]; } | undefined; }[]; pages: Record<string, { sections: { fields: string[]; blocks: ({ kind: "timeline"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; at: string; by?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "rows"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; columns: string[]; create?: string[] | undefined; add_label?: string | undefined; totals?: Record<string, string> | undefined; narrower?: string[] | undefined; soonest?: string[] | undefined; expect?: string | undefined; of?: string | undefined; where?: { field: string; options: string[]; }[] | undefined; filters?: (string | { field: string; tiers: number[]; })[] | undefined; search?: string[] | undefined; group?: string | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; edits?: string[] | undefined; remove?: false | undefined; pick?: { read: { query: string; param?: string | undefined; }; back: string; same?: { field: string; param: string; }[] | undefined; admits?: { query: string; param?: string | undefined; } | undefined; } | undefined; checklist?: { photo?: string | undefined; clause?: string | undefined; words?: string[] | undefined; failed?: string[] | undefined; passed?: string | undefined; } | undefined; compare?: { before: string; after: string; } | undefined; current?: string | undefined; post?: { text: string; media: string; network: string; networks: Record<string, "x" | "facebook" | "instagram" | "threads" | "linkedin">; bodies?: string[] | undefined; compute?: { expression: string; reads: Record<string, { from: "row"; field: string; } | { from: "record"; field: string; } | { from: "place"; field: string; } | { from: "formula"; expression: string; }>; } | undefined; link?: string | undefined; group?: string | undefined; } | undefined; under?: { field: string; entity: string; via: string; back: string; read: { query: string; param?: string | undefined; }; where?: { field: string; options: string[]; }[] | undefined; } | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "agenda"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; columns: string[]; day: string; time?: string | undefined; part?: string | undefined; start?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "files"; fields: string[]; title: string; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "text"; field: string; title: string; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "figures"; fields: string[]; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "statement"; title: string; lines: { field: string; op?: "plus" | "minus" | "times" | "equals" | undefined; rate?: string | undefined; parts?: { entity: string; read: { query: string; param: string; }; same: string; columns: string[]; figure: string; before?: { field: string; param: string; } | undefined; } | undefined; }[]; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "reading"; reading: { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "up" | "down" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "breakdown"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { over: string; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "trend"; value?: string | undefined; ahead?: true | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "pivot"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "shortfall"; across?: string | undefined; value?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { planned: { start: string; end: string; }; done: string; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "progress"; finished?: string | undefined; weight?: string | undefined; measured?: { via: string; read: { query: string; param: string; }; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { columns: string[]; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "list"; app?: { id: string; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; }; via: string; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "list"; reading: { columns: string[]; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "list"; app?: { id: string; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; }; via: string; same?: { field: string; param: string; } | undefined; bounds?: { field: string; param: string; of: "number" | "date"; lookup?: true | undefined; }[] | undefined; open?: "in_place" | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | { kind: "funnel"; entity: string; read: { query: string; param?: string | undefined; }; label: string; steps: string[]; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; })[]; acts: string[]; title?: string | undefined; description?: string | undefined; at?: string[] | undefined; reads?: string[] | undefined; entry?: string[] | undefined; acts_last?: true | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; page?: string | undefined; side?: true | undefined; }[]; door?: "page" | "drawer" | "beside" | undefined; outside?: { key: string; entity: string; title: string; at: string[]; fields: string[]; one: { query: string; param: string; }; blocks: { kind: "list"; reading: { columns: string[]; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "list"; app?: { id: string; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; }; via: string; same?: { field: string; param: string; } | undefined; bounds?: { field: string; param: string; of: "number" | "date"; lookup?: true | undefined; }[] | undefined; open?: "in_place" | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; }[]; acts: string[]; description?: string | undefined; }[] | undefined; comments?: true | undefined; moves?: { kind: "timeline"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; at: string; by?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; } | undefined; compose?: { use: "Rows"; child: string; create?: false | undefined; remove?: true | undefined; } | { use: "Title"; } | { use: "Status"; } | { use: "Field"; field: string; } | { use: "Document"; field: string; } | { use: "Act"; act: string; } | { use: "Copy"; field: string; as: "plain" | "raw"; } | { use: "Column"; children: ComposeNode[]; } | { use: "Bar"; children: ComposeNode[]; } | { use: "Group"; title: string; children: ComposeNode[]; } | { use: "Panel"; title: string; children: ComposeNode[]; } | undefined; }>; acts: { alias: string; label: string; on: "record" | "rows" | "view"; of: string; workflow?: string | undefined; open?: { app: string; } | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; to?: string | undefined; writes?: true | undefined; into?: string | undefined; paper?: { entity: string; option: string; } | undefined; marks?: Record<string, boolean> | undefined; requires?: string[] | undefined; recommends?: string[] | undefined; asks?: (string | { input: string; label: string; type: "number" | "member" | "date" | "file" | "text" | "select" | "link" | "long_text"; options?: { alias: string; label: string; color?: "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose" | "slate" | "gray" | "zinc" | "neutral" | "stone" | undefined; mark?: { kind: string; name: string; } | undefined; }[] | undefined; entity?: string | undefined; required?: true | undefined; default?: string | undefined; accept?: string | undefined; })[] | undefined; starts?: Record<string, "today" | "me"> | undefined; makes?: string | undefined; papers?: { template: string; label: string; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }[] | undefined; archive?: string | undefined; intake?: { agent: string; papers: { entity: string; kind: string; files: string; }; fields: string[]; parties?: { link: string; fields: string[]; }[] | undefined; rows?: { entity: string; fields: string[]; key?: string[] | undefined; }[] | undefined; } | undefined; recording?: { into: string; via: string; audio: string; transcript: string; video?: string | undefined; agent?: string | undefined; } | undefined; sign?: { into: string; by: string; at: string; witness?: string | undefined; } | undefined; review?: true | undefined; confirm?: string | true | undefined; danger?: true | undefined; }[]; checks: { field: string; of: string; blocks?: string[] | "all" | undefined; resolve?: string | undefined; reads?: string[] | undefined; }[]; } | { version: 29; app: { alias: string; label: string; locale: "vi" | "en"; description?: string | undefined; }; dashboard: ({ entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "up" | "down" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "breakdown"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { over: string; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "trend"; value?: string | undefined; ahead?: true | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "pivot"; value?: string | undefined; over?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { by: string; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "shortfall"; across?: string | undefined; value?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; } | { columns: string[]; entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; kind: "list"; app?: { id: string; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; })[]; entities: Record<string, { alias: string; label: string; table: string; fields: Record<string, { alias: string; id: string; type: "number" | "boolean" | "date" | "text" | "select" | "select_member" | "select_record_link" | "files" | "formula" | "rollup" | "lookup" | "autonumber"; label: string; result?: "number" | "boolean" | "date" | "text" | "select" | "select_member" | "select_record_link" | "files" | "formula" | "rollup" | "lookup" | "autonumber" | undefined; description?: string | undefined; format?: "datetime" | "text" | "link" | "markdown" | undefined; multi?: true | undefined; required?: true | undefined; readonly?: true | undefined; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; limit?: { field: string; } | { value: number; } | undefined; gate?: { field: string; } | { value: number; } | undefined; tolerance?: number | undefined; due?: true | undefined; frees?: true | undefined; summed?: true | undefined; accumulates?: true | undefined; whole?: true | undefined; restates?: string | undefined; starts?: "today" | "me" | undefined; default?: string | number | boolean | string[] | undefined; options?: { alias: string; label: string; id: string; color?: "red" | "orange" | "amber" | "yellow" | "lime" | "green" | "emerald" | "teal" | "cyan" | "sky" | "blue" | "indigo" | "violet" | "purple" | "fuchsia" | "pink" | "rose" | "slate" | "gray" | "zinc" | "neutral" | "stone" | undefined; mark?: { kind: string; name: string; } | undefined; }[] | undefined; link?: string | undefined; accept?: string | undefined; image?: string | undefined; party?: "person" | "organization" | undefined; pictures?: { query: string; param: string; } | undefined; face?: Record<string, string> | undefined; default_from?: { link: string; field: string; } | undefined; reads?: string[] | undefined; through?: { link: string; field: string; } | undefined; pick?: { query: string; param?: string | undefined; same?: { field: string; param: string; }[] | undefined; } | undefined; picks_only?: true | undefined; suggest?: { query: string; param: string; column: string; } | undefined; applies?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }>; title: string; list: { query: string; param?: string | undefined; }; singular?: string | undefined; subtitle?: string[] | undefined; image?: string | undefined; mark?: string | undefined; description?: string | undefined; party?: "person" | "organization" | undefined; mine?: string | undefined; status?: { field: string; closed?: string[] | undefined; history?: string | undefined; dates?: Record<string, string> | undefined; stages?: Record<string, { owner: { kind: "member"; column: string; label: string; } | { kind: "group"; group: string; label: string; }; within?: number | undefined; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; compare: Compared; of: "number" | "date" | "datetime"; zone?: string | undefined; } | { field: string; empty: boolean; })[] | undefined; }> | undefined; maker?: string | undefined; moves?: { query: string; param: string; link: string; status: string; at: string; went: Record<string, string>; by?: string | undefined; } | undefined; } | undefined; settled?: string | undefined; task?: { close?: { to: string; act?: string | undefined; } | undefined; reopen?: { to: string; act?: string | undefined; } | undefined; member?: string | undefined; } | undefined; progress?: { entity: string; via: string; read: { query: string; param: string; }; passed?: string | undefined; }[] | undefined; figure?: string | undefined; scan?: { read: "text" | "iso6346"; agent: string; } | { read: "code"; } | undefined; place?: { address: string; latitude: string; longitude: string; accuracy?: string | undefined; } | undefined; on_site?: { photos: string[]; latitude: string; longitude: string; radius: number; place?: string | undefined; } | undefined; pin?: { on: string; x: string; y: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; listed?: string[] | undefined; one?: { query: string; param?: string | undefined; } | undefined; create?: { workflow: string; fields: string[]; picker?: string[] | undefined; } | undefined; update?: { workflow: string; fields?: string[] | undefined; } | undefined; remove?: { workflow: string; with?: string[] | undefined; } | undefined; }>; tabs?: { tab: string; label: string; }[] | undefined; period?: "month" | "quarter" | "year" | { days: 30; } | undefined; };
|
|
189
|
-
export type TableField = { key: string;
|
|
190
|
-
export type TableRecordFilters = TableRecordFiltersConditionNode |
|
|
191
|
-
export type TableRecordFiltersConditionNode = { node_type: "condition"; field_key?: string
|
|
192
|
-
export type TableRecordFiltersGroupNode = { node_type: "group"; logic: "and" | "or"; children: (
|
|
274
|
+
}
|
|
275
|
+
export type SpecFile = { version: 29; app: { alias: string; label: string; description?: string | undefined; locale: ReportLanguage; }; entities: Record<string, { alias: string; label: string; singular?: string | undefined; table: string; fields: Record<string, { alias: string; id: string; type: "autonumber" | "boolean" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text"; result?: "autonumber" | "boolean" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text" | undefined; label: string; description?: string | undefined; format?: "datetime" | "link" | "markdown" | "text" | undefined; multi?: true | undefined; required?: true | undefined; readonly?: true | undefined; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; limit?: { field: string; } | { value: number; } | undefined; gate?: { field: string; } | { value: number; } | undefined; tolerance?: number | undefined; due?: true | undefined; frees?: true | undefined; summed?: true | undefined; accumulates?: true | undefined; whole?: true | undefined; restates?: string | undefined; starts?: "me" | "today" | undefined; default?: string | number | boolean | string[] | undefined; options?: { alias: string; label: string; color?: "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "neutral" | "orange" | "pink" | "purple" | "red" | "rose" | "sky" | "slate" | "stone" | "teal" | "violet" | "yellow" | "zinc" | undefined; mark?: { kind: string; name: string; } | undefined; id: string; }[] | undefined; link?: string | undefined; accept?: string | undefined; image?: string | undefined; party?: "organization" | "person" | undefined; pictures?: { query: string; param: string; } | undefined; face?: Record<string, string> | undefined; default_from?: { link: string; field: string; } | undefined; reads?: string[] | undefined; through?: { link: string; field: string; } | undefined; pick?: { query: string; param?: string | undefined; same?: { field: string; param: string; }[] | undefined; } | undefined; picks_only?: true | undefined; suggest?: { query: string; param: string; column: string; } | undefined; applies?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }>; title: string; subtitle?: string[] | undefined; image?: string | undefined; mark?: string | undefined; description?: string | undefined; party?: "organization" | "person" | undefined; mine?: string | undefined; status?: { field: string; closed?: string[] | undefined; history?: string | undefined; dates?: Record<string, string> | undefined; stages?: Record<string, { owner: { kind: "member"; column: string; label: string; } | { kind: "group"; group: string; label: string; }; within?: number | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; }> | undefined; maker?: string | undefined; moves?: { query: string; param: string; link: string; status: string; at: string; by?: string | undefined; went: Record<string, string>; } | undefined; } | undefined; settled?: string | undefined; task?: { close?: { to: string; act?: string | undefined; } | undefined; reopen?: { to: string; act?: string | undefined; } | undefined; member?: string | undefined; } | undefined; progress?: { entity: string; via: string; passed?: string | undefined; read: { query: string; param: string; }; }[] | undefined; figure?: string | undefined; scan?: { read: "iso6346" | "text"; agent: string; } | { read: "code"; } | undefined; place?: { address: string; latitude: string; longitude: string; accuracy?: string | undefined; } | undefined; on_site?: { photos: string[]; place?: string | undefined; latitude: string; longitude: string; radius: number; } | undefined; pin?: { on: string; x: string; y: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; list: { query: string; param?: string | undefined; }; listed?: string[] | undefined; one?: { query: string; param?: string | undefined; } | undefined; create?: { workflow: string; fields: string[]; picker?: string[] | undefined; } | undefined; update?: { workflow: string; fields?: string[] | undefined; } | undefined; remove?: { workflow: string; with?: string[] | undefined; } | undefined; }>; lists: { key?: string | undefined; label?: string | undefined; entity: string; scope?: { field: string; entity: string; param: string; counts: { query: string; param?: string | undefined; }; } | undefined; register: { columns: string[]; filters: (string | { field: string; tiers: number[]; })[]; book?: true | undefined; search?: string[] | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; group?: string | undefined; tabs?: { tab: string; label: string; term?: { kind: "in"; field: string; } | { kind: "open"; from: string; to: string; } | undefined; totals?: { via: string; read: { query: string; }; columns: { alias: string; label: string; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; }[]; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; }[] | undefined; period?: "month" | "quarter" | "today" | "week" | "year" | { days: number; } | undefined; layout: "calendar" | "cards" | "gantt" | "lanes" | "plan" | "roster" | "table"; roster?: { entity: string; via: string; day?: string | undefined; end?: string | undefined; expect?: string | undefined; of?: string | undefined; cadence?: { on: ("fri" | "mon" | "sat" | "sun" | "thu" | "tue" | "wed")[]; from?: string | undefined; until?: string | undefined; } | undefined; read: { query: string; param: string; }; create?: string[] | undefined; } | undefined; lanes?: { field: string; start: string; end?: string | undefined; loads?: { value: string; against: string; }[] | undefined; read?: { query: string; param: string; } | undefined; } | undefined; gantt?: { start: string; end: string; milestones?: string[] | undefined; planned?: { start?: string | undefined; end?: string | undefined; } | undefined; progress?: string | undefined; after?: string | undefined; } | undefined; plan?: { at: string; across: string; up: string; fill?: string | undefined; mark?: { field: string; option: string; } | undefined; size?: { field: string; options: Record<string, { across: number; along: number; up: number; }>; } | undefined; place: { entity: string; kind: string; kinds: { bay: string; area: string; landmark: string; }; sheet?: string | undefined; scale?: string | undefined; x: string; y: string; width?: string | undefined; depth?: string | undefined; across: string; up: string; reach_from?: string | undefined; stacked?: string | undefined; reaches?: { first: string; last: string; both: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; }; load?: { query: string; param?: string | undefined; } | undefined; } | undefined; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; opens?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; remove?: false | undefined; create?: string[] | undefined; add_label?: string | undefined; heading?: string | undefined; export?: { label?: string | undefined; description?: string | undefined; query: string; template?: string | undefined; filename?: string | undefined; where?: ({ field: string; options: string[]; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; per?: string | undefined; per_row?: string[] | undefined; books?: string[] | undefined; key: string; }[] | undefined; readings?: ({ entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "down" | "up" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "breakdown"; by: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "trend"; over: string; value?: string | undefined; ahead?: true | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "pivot"; rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "shortfall"; by: string; across?: string | undefined; value?: string | undefined; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "progress"; planned: { start: string; end: string; }; done: string; finished?: string | undefined; weight?: string | undefined; measured?: { via: string; read: { query: string; param: string; }; } | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "list"; columns: string[]; app?: { id: string; } | undefined; })[] | undefined; attention?: false | undefined; }; books?: { entity: string; fields?: Record<string, string> | undefined; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; create?: string[] | undefined; }[] | undefined; owns?: { queries: string[]; workflows: string[]; } | undefined; }[]; pages: Record<string, { door?: "beside" | "drawer" | "page" | undefined; sections: { title?: string | undefined; description?: string | undefined; at?: string[] | undefined; fields: string[]; reads?: string[] | undefined; blocks: ({ kind: "timeline"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; at: string; by?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "list"; reading: { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "list"; columns: string[]; app?: { id: string; } | undefined; }; via: string; same?: { field: string; param: string; } | undefined; bounds?: { field: string; param: string; of: "date" | "number"; lookup?: true | undefined; }[] | undefined; open?: "in_place" | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "rows"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; columns: string[]; create?: string[] | undefined; add_label?: string | undefined; totals?: Record<string, string> | undefined; narrower?: string[] | undefined; soonest?: string[] | undefined; expect?: string | undefined; of?: string | undefined; where?: { field: string; options: string[]; }[] | undefined; filters?: (string | { field: string; tiers: number[]; })[] | undefined; search?: string[] | undefined; group?: string | undefined; sort?: { field: string; desc?: true | undefined; }[] | undefined; edits?: string[] | undefined; remove?: false | undefined; pick?: { read: { query: string; param?: string | undefined; }; back: string; same?: { field: string; param: string; }[] | undefined; admits?: { query: string; param?: string | undefined; } | undefined; } | undefined; checklist?: { photo?: string | undefined; clause?: string | undefined; words?: string[] | undefined; failed?: string[] | undefined; passed?: string | undefined; } | undefined; compare?: { before: string; after: string; } | undefined; current?: string | undefined; post?: { bodies?: string[] | undefined; text: string; compute?: { expression: string; reads: Record<string, { from: "row"; field: string; } | { from: "record"; field: string; } | { from: "place"; field: string; } | { from: "formula"; expression: string; }>; } | undefined; media: string; link?: string | undefined; network: string; group?: string | undefined; networks: Record<string, "facebook" | "instagram" | "linkedin" | "threads" | "x">; } | undefined; under?: { field: string; entity: string; via: string; back: string; read: { query: string; param?: string | undefined; }; where?: { field: string; options: string[]; }[] | undefined; } | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "agenda"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; columns: string[]; day: string; time?: string | undefined; part?: string | undefined; start?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "files"; fields: string[]; title: string; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "text"; field: string; title: string; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "figures"; fields: string[]; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "statement"; title: string; lines: { field: string; op?: "equals" | "minus" | "plus" | "times" | undefined; rate?: string | undefined; parts?: { entity: string; read: { query: string; param: string; }; same: string; before?: { field: string; param: string; } | undefined; columns: string[]; figure: string; } | undefined; }[]; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "reading"; reading: { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "down" | "up" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "breakdown"; by: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "trend"; over: string; value?: string | undefined; ahead?: true | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "pivot"; rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "shortfall"; by: string; across?: string | undefined; value?: string | undefined; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "progress"; planned: { start: string; end: string; }; done: string; finished?: string | undefined; weight?: string | undefined; measured?: { via: string; read: { query: string; param: string; }; } | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "list"; columns: string[]; app?: { id: string; } | undefined; }; via: string; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | { kind: "funnel"; entity: string; read: { query: string; param?: string | undefined; }; label: string; steps: string[]; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; })[]; acts: string[]; entry?: string[] | undefined; acts_last?: true | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; page?: string | undefined; side?: true | undefined; }[]; outside?: { key: string; entity: string; title: string; description?: string | undefined; at: string[]; fields: string[]; one: { query: string; param: string; }; blocks: { kind: "list"; reading: { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "list"; columns: string[]; app?: { id: string; } | undefined; }; via: string; same?: { field: string; param: string; } | undefined; bounds?: { field: string; param: string; of: "date" | "number"; lookup?: true | undefined; }[] | undefined; open?: "in_place" | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; }[]; acts: string[]; }[] | undefined; comments?: true | undefined; moves?: { kind: "timeline"; entity: string; via: string; read: { query: string; param?: string | undefined; }; title: string; at: string; by?: string | undefined; create?: string[] | undefined; add_label?: string | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; } | undefined; compose?: { use: "Title"; } | { use: "Status"; } | { use: "Field"; field: string; } | { use: "Document"; field: string; } | { use: "Act"; act: string; } | ComposeRows | { use: "Copy"; field: string; as: "plain" | "raw"; } | { use: "Column"; children: ComposeNode[]; } | { use: "Bar"; children: ComposeNode[]; } | { use: "Group"; title: string; children: ComposeNode[]; } | { use: "Panel"; title: string; children: ComposeNode[]; } | undefined; }>; acts: { alias: string; label: string; on: "record" | "rows" | "view"; of: string; workflow?: string | undefined; open?: { app: string; } | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; to?: string | undefined; writes?: true | undefined; into?: string | undefined; paper?: { entity: string; option: string; } | undefined; marks?: Record<string, boolean> | undefined; requires?: string[] | undefined; recommends?: string[] | undefined; asks?: (string | { input: string; label: string; type: "date" | "file" | "link" | "long_text" | "member" | "number" | "select" | "text"; options?: { alias: string; label: string; color?: "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "neutral" | "orange" | "pink" | "purple" | "red" | "rose" | "sky" | "slate" | "stone" | "teal" | "violet" | "yellow" | "zinc" | undefined; mark?: { kind: string; name: string; } | undefined; }[] | undefined; entity?: string | undefined; required?: true | undefined; default?: string | undefined; accept?: string | undefined; })[] | undefined; starts?: Record<string, "me" | "today"> | undefined; makes?: string | undefined; papers?: { template: string; label: string; when?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }[] | undefined; archive?: string | undefined; intake?: { agent: string; papers: { entity: string; kind: string; files: string; }; fields: string[]; parties?: { link: string; fields: string[]; }[] | undefined; rows?: { entity: string; fields: string[]; key?: string[] | undefined; }[] | undefined; } | undefined; recording?: { into: string; via: string; audio: string; transcript: string; video?: string | undefined; agent?: string | undefined; } | undefined; sign?: { into: string; by: string; at: string; witness?: string | undefined; } | undefined; review?: true | undefined; confirm?: string | true | undefined; danger?: true | undefined; }[]; checks: { field: string; of: string; blocks?: "all" | string[] | undefined; resolve?: string | undefined; reads?: string[] | undefined; }[]; } | { version: 29; app: { alias: string; label: string; description?: string | undefined; locale: ReportLanguage; }; dashboard: ({ entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "metric"; value?: string | undefined; average?: true | undefined; over?: string | undefined; target?: number | undefined; better?: "down" | "up" | undefined; bound?: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; } | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "breakdown"; by: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "trend"; over: string; value?: string | undefined; ahead?: true | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "pivot"; rows: string | { field: string; tiers: number[]; }; columns: string | { field: string; tiers: number[]; }; value?: string | undefined; over?: string | undefined; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "shortfall"; by: string; across?: string | undefined; value?: string | undefined; on_hand: { entity: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; by: string; across?: string | undefined; value?: string | undefined; }; } | { entity: string; label: string; read: { query: string; param?: string | undefined; aggregate?: { by?: string[] | undefined; bands?: Record<string, number[]> | undefined; day?: string | undefined; sum?: string | undefined; } | undefined; }; where?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; } | { field: string; member: "me"; })[] | undefined; tab?: string | undefined; kind: "list"; columns: string[]; app?: { id: string; } | undefined; })[]; tabs?: { tab: string; label: string; }[] | undefined; period?: "month" | "quarter" | "year" | { days: 30; } | undefined; entities: Record<string, { alias: string; label: string; singular?: string | undefined; table: string; fields: Record<string, { alias: string; id: string; type: "autonumber" | "boolean" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text"; result?: "autonumber" | "boolean" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text" | undefined; label: string; description?: string | undefined; format?: "datetime" | "link" | "markdown" | "text" | undefined; multi?: true | undefined; required?: true | undefined; readonly?: true | undefined; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; limit?: { field: string; } | { value: number; } | undefined; gate?: { field: string; } | { value: number; } | undefined; tolerance?: number | undefined; due?: true | undefined; frees?: true | undefined; summed?: true | undefined; accumulates?: true | undefined; whole?: true | undefined; restates?: string | undefined; starts?: "me" | "today" | undefined; default?: string | number | boolean | string[] | undefined; options?: { alias: string; label: string; color?: "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "neutral" | "orange" | "pink" | "purple" | "red" | "rose" | "sky" | "slate" | "stone" | "teal" | "violet" | "yellow" | "zinc" | undefined; mark?: { kind: string; name: string; } | undefined; id: string; }[] | undefined; link?: string | undefined; accept?: string | undefined; image?: string | undefined; party?: "organization" | "person" | undefined; pictures?: { query: string; param: string; } | undefined; face?: Record<string, string> | undefined; default_from?: { link: string; field: string; } | undefined; reads?: string[] | undefined; through?: { link: string; field: string; } | undefined; pick?: { query: string; param?: string | undefined; same?: { field: string; param: string; }[] | undefined; } | undefined; picks_only?: true | undefined; suggest?: { query: string; param: string; column: string; } | undefined; applies?: ({ field: string; options: string[]; } | { field: string; value: boolean; })[] | undefined; }>; title: string; subtitle?: string[] | undefined; image?: string | undefined; mark?: string | undefined; description?: string | undefined; party?: "organization" | "person" | undefined; mine?: string | undefined; status?: { field: string; closed?: string[] | undefined; history?: string | undefined; dates?: Record<string, string> | undefined; stages?: Record<string, { owner: { kind: "member"; column: string; label: string; } | { kind: "group"; group: string; label: string; }; within?: number | undefined; when?: ({ field: string; options: string[]; } | { field: string; compare: Compared; of: "date" | "datetime" | "number"; zone?: string | undefined; } | { field: string; empty: boolean; } | { field: string; value: boolean; })[] | undefined; }> | undefined; maker?: string | undefined; moves?: { query: string; param: string; link: string; status: string; at: string; by?: string | undefined; went: Record<string, string>; } | undefined; } | undefined; settled?: string | undefined; task?: { close?: { to: string; act?: string | undefined; } | undefined; reopen?: { to: string; act?: string | undefined; } | undefined; member?: string | undefined; } | undefined; progress?: { entity: string; via: string; passed?: string | undefined; read: { query: string; param: string; }; }[] | undefined; figure?: string | undefined; scan?: { read: "iso6346" | "text"; agent: string; } | { read: "code"; } | undefined; place?: { address: string; latitude: string; longitude: string; accuracy?: string | undefined; } | undefined; on_site?: { photos: string[]; place?: string | undefined; latitude: string; longitude: string; radius: number; } | undefined; pin?: { on: string; x: string; y: string; } | undefined; size?: { across: string; along: string; up: string; } | undefined; list: { query: string; param?: string | undefined; }; listed?: string[] | undefined; one?: { query: string; param?: string | undefined; } | undefined; create?: { workflow: string; fields: string[]; picker?: string[] | undefined; } | undefined; update?: { workflow: string; fields?: string[] | undefined; } | undefined; remove?: { workflow: string; with?: string[] | undefined; } | undefined; }>; };
|
|
276
|
+
export type TableField = { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "number"; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; format: "currency" | "number" | "percentage"; currency?: string | null | undefined; unit?: string | null | undefined; unit_field?: string | null | undefined; currency_field?: string | null | undefined; default_value?: number | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "text"; unique?: boolean | undefined; format?: "link" | "markdown" | "text" | undefined; default_value?: string | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "date"; format?: "date" | "date_range" | "datetime" | "datetime_range" | undefined; timezone?: string | undefined; derive_from?: "created_at" | "updated_at" | undefined; default_value?: string | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "boolean"; default_value?: boolean | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "select"; options: { key: string; alias?: string | undefined; name: string; color: "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "neutral" | "orange" | "pink" | "purple" | "red" | "rose" | "sky" | "slate" | "stone" | "teal" | "violet" | "yellow" | "zinc"; mark?: { kind: string; name: string; } | undefined; }[]; multi?: boolean | undefined; default_value?: string[] | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "select_member"; multi?: boolean | undefined; default_value?: string[] | null | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "select_record_link"; table_id: string; paired_field_key?: string | undefined; cardinality?: "many" | "one" | undefined; default_from?: { link_field_key: string; through?: string[] | undefined; field_key: string; options?: Record<string, string> | undefined; } | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "rollup"; source_field_key: string; aggregate_option: { operation: "checked" | "percent_checked" | "percent_unchecked" | "unchecked"; field_key: string; } | { operation: "empty" | "filled" | "percent_empty" | "percent_filled" | "selected"; field_key: string; } | { operation: "empty" | "filled" | "percent_empty" | "percent_filled" | "percent_unique" | "unique"; field_key: string; } | { operation: "empty" | "filled" | "percent_empty" | "percent_filled" | "percent_unique" | "selected" | "unique"; field_key: string; } | { operation: "date_range" | "earliest" | "empty" | "filled" | "latest" | "percent_empty" | "percent_filled" | "percent_unique" | "unique"; field_key: string; } | { operation: "avg" | "empty" | "filled" | "max" | "median" | "min" | "percent_empty" | "percent_filled" | "percent_unique" | "range" | "sum" | "unique"; field_key: string; } | { operation: "avg" | "date_range" | "earliest" | "empty" | "filled" | "latest" | "max" | "median" | "min" | "percent_empty" | "percent_filled" | "percent_unique" | "range" | "sum" | "unique"; field_key: string; } | { operation: "avg" | "checked" | "date_range" | "earliest" | "empty" | "filled" | "latest" | "max" | "median" | "min" | "percent_checked" | "percent_empty" | "percent_filled" | "percent_unchecked" | "percent_unique" | "range" | "sum" | "unchecked" | "unique"; field_key: string; } | { operation: "count"; field_key?: string | undefined; }; filter?: TableRecordFiltersGroupNode | undefined; aggregate_field_type?: "autonumber" | "boolean" | "button" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text" | undefined; aggregate_field_notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; aggregate_field_format?: string | undefined; aggregate_field_currency?: string | undefined; aggregate_field_unit?: string | undefined; aggregate_field_unit_field?: string | undefined; aggregate_field_currency_field?: string | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "lookup"; source_field_key: string; lookup_field_key: string; lookup_field_type?: "autonumber" | "boolean" | "button" | "date" | "files" | "formula" | "lookup" | "number" | "rollup" | "select" | "select_member" | "select_record_link" | "text" | undefined; lookup_field_notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; lookup_field_format?: string | undefined; lookup_field_currency?: string | undefined; lookup_field_unit?: string | undefined; lookup_field_options?: { key: string; name: string; color?: string | undefined; mark?: { kind: string; name: string; } | undefined; }[] | undefined; lookup_field_autonumber?: boolean | undefined; order_by?: { field_key: string; direction: "asc" | "desc"; } | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "files"; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "formula"; formula: { expression: string; notation?: { style: "decimal"; } | { style: "currency"; currency: string | { per_row: string; }; } | { style: "unit"; unit: string | { per_row: string; }; } | undefined; link?: true | undefined; format?: "currency" | "link" | "number" | "percentage" | undefined; currency?: string | undefined; unit?: string | undefined; unit_field?: string | undefined; currency_field?: string | undefined; options?: { key: string; alias?: string | undefined; name: string; color: "amber" | "blue" | "cyan" | "emerald" | "fuchsia" | "gray" | "green" | "indigo" | "lime" | "neutral" | "orange" | "pink" | "purple" | "red" | "rose" | "sky" | "slate" | "stone" | "teal" | "violet" | "yellow" | "zinc"; mark?: { kind: string; name: string; } | undefined; }[] | undefined; output_type?: "boolean" | "date" | "datetime" | "number" | "select" | "text" | undefined; volatile?: boolean | undefined; }; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "button"; text: string; workflow_id?: string | null | undefined; } | { key: string; alias?: string | undefined; name: string; description: string; confirm_before_update?: boolean | undefined; required?: boolean | undefined; type: "autonumber"; prefix?: string | undefined; padding?: number | undefined; template?: string | undefined; };
|
|
277
|
+
export type TableRecordFilters = TableRecordFiltersConditionNode | TableRecordFiltersGroupNode | TableRecordFiltersTraversalNode;
|
|
278
|
+
export type TableRecordFiltersConditionNode = { node_type: "condition"; field_key?: string; type?: string; operator: string; value?: unknown; unit_option?: string; };
|
|
279
|
+
export type TableRecordFiltersGroupNode = { node_type: "group"; logic: "and" | "or"; children: (TableRecordFiltersConditionNode | TableRecordFiltersTraversalNode | TableRecordFiltersGroupNode)[]; };
|
|
193
280
|
/**
|
|
194
281
|
* Traversal node — filter the current table by a field on a record reachable
|
|
195
282
|
* through one or more `select_record_link` hops. ANY semantics: a row matches
|
|
@@ -203,3 +290,21 @@ export type TableRecordFiltersGroupNode = { node_type: "group"; logic: "and" | "
|
|
|
203
290
|
* Max path depth and inner-condition syntax are validated by `validateFilters`.
|
|
204
291
|
*/
|
|
205
292
|
export type TableRecordFiltersTraversalNode = { node_type: "traversal"; path: string[]; condition: TableRecordFiltersConditionNode; };
|
|
293
|
+
/**
|
|
294
|
+
* The presigned files, skipping any without a `url`. A lookup arrives one
|
|
295
|
+
* level deeper, flattened as in readLinks.
|
|
296
|
+
*/
|
|
297
|
+
export declare const readFiles: (v: unknown) => AppFile[];
|
|
298
|
+
/**
|
|
299
|
+
* Every linked record. A lookup of a link arrives one level deeper (one link
|
|
300
|
+
* cell per linked row); it is flattened here, in order, each id once.
|
|
301
|
+
*/
|
|
302
|
+
export declare const readLinks: (v: unknown) => ResolvedLink[];
|
|
303
|
+
/** `[]` for an empty or malformed cell; malformed entries are dropped. */
|
|
304
|
+
export declare const readMembers: (value: unknown) => ResolvedMember[];
|
|
305
|
+
/**
|
|
306
|
+
* `[]` for an empty or malformed cell; a bare string (options unresolved
|
|
307
|
+
* server-side) becomes `{ key, label: key }`; malformed entries are dropped.
|
|
308
|
+
*/
|
|
309
|
+
export declare const readSelect: (value: unknown) => ResolvedOption[];
|
|
310
|
+
export declare const row: { opt: (v: unknown) => string | null; text: (v: unknown) => string; num: (v: unknown) => number | null; bool: (v: unknown) => boolean | null; date: (v: unknown) => Date | null; datetime: (v: unknown) => Date | null; link: (v: unknown) => ResolvedLink | null; };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lotics/app-sdk",
|
|
3
|
-
"version": "0.124.
|
|
3
|
+
"version": "0.124.12",
|
|
4
4
|
"description": "The SDK a Lotics custom-code app reads and writes through — typed hooks over the host bridge, cell readers, mount() and AppRouter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"access": "public"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "
|
|
26
|
+
"build": "tsrs -p tsconfig.build.json && node scripts/build_sdk.mjs",
|
|
27
27
|
"lint": "oxlint",
|
|
28
28
|
"test": "vitest run",
|
|
29
29
|
"typecheck": "tsrs --noEmit",
|
|
@@ -43,14 +43,13 @@
|
|
|
43
43
|
"@types/node": "^24.19.2",
|
|
44
44
|
"@types/react": "^19.3.0",
|
|
45
45
|
"@types/react-dom": "~19.3.0",
|
|
46
|
-
"@typescript/native-preview": "^7.0.0-dev.20260707.2",
|
|
47
46
|
"@vitejs/plugin-react": "^6.1.2",
|
|
48
47
|
"esbuild": "^0.28.2",
|
|
49
48
|
"jsdom": "^30.1.3",
|
|
50
49
|
"react": "^19.3.1",
|
|
51
50
|
"react-dom": "^19.3.1",
|
|
52
51
|
"react-router": "^8.5.0",
|
|
53
|
-
"
|
|
52
|
+
"tsrs": "0.18.0-ts7.1.0-dev.20260929",
|
|
54
53
|
"vite": "^8.3.5"
|
|
55
54
|
},
|
|
56
55
|
"engines": {
|