wicked-crew 0.16.12 → 0.16.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +2 -1
  2. package/dist/api/chat-history.d.ts +6 -0
  3. package/dist/api/chat-history.d.ts.map +1 -1
  4. package/dist/api/chat-history.js +21 -0
  5. package/dist/api/chat-history.js.map +1 -1
  6. package/dist/api/chat-proposals.d.ts +61 -6
  7. package/dist/api/chat-proposals.d.ts.map +1 -1
  8. package/dist/api/chat-proposals.js +252 -24
  9. package/dist/api/chat-proposals.js.map +1 -1
  10. package/dist/api/routes.d.ts +14 -2
  11. package/dist/api/routes.d.ts.map +1 -1
  12. package/dist/api/routes.js +119 -9
  13. package/dist/api/routes.js.map +1 -1
  14. package/dist/api/run-timing-index.d.ts +18 -0
  15. package/dist/api/run-timing-index.d.ts.map +1 -1
  16. package/dist/api/run-timing-index.js +34 -0
  17. package/dist/api/run-timing-index.js.map +1 -1
  18. package/dist/api/server.d.ts.map +1 -1
  19. package/dist/api/server.js +100 -1
  20. package/dist/api/server.js.map +1 -1
  21. package/dist/apps/spec.d.ts +3009 -0
  22. package/dist/apps/spec.d.ts.map +1 -0
  23. package/dist/apps/spec.js +870 -0
  24. package/dist/apps/spec.js.map +1 -0
  25. package/dist/cli/index.js +3 -3
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/core/run-boot-resume.d.ts +4 -1
  28. package/dist/core/run-boot-resume.d.ts.map +1 -1
  29. package/dist/core/run-boot-resume.js +6 -1
  30. package/dist/core/run-boot-resume.js.map +1 -1
  31. package/dist/editors/csp.d.ts +24 -4
  32. package/dist/editors/csp.d.ts.map +1 -1
  33. package/dist/editors/csp.js +35 -8
  34. package/dist/editors/csp.js.map +1 -1
  35. package/dist/editors/routes.d.ts +4 -1
  36. package/dist/editors/routes.d.ts.map +1 -1
  37. package/dist/editors/routes.js +30 -3
  38. package/dist/editors/routes.js.map +1 -1
  39. package/dist/editors/webrtc-guard.d.ts +94 -0
  40. package/dist/editors/webrtc-guard.d.ts.map +1 -0
  41. package/dist/editors/webrtc-guard.js +506 -0
  42. package/dist/editors/webrtc-guard.js.map +1 -0
  43. package/dist/interactive/bridge-pool.d.ts +11 -2
  44. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  45. package/dist/interactive/bridge-pool.js +10 -1
  46. package/dist/interactive/bridge-pool.js.map +1 -1
  47. package/dist/interactive/doc-binding.d.ts +156 -0
  48. package/dist/interactive/doc-binding.d.ts.map +1 -0
  49. package/dist/interactive/doc-binding.js +277 -0
  50. package/dist/interactive/doc-binding.js.map +1 -0
  51. package/dist/interactive/doc-delete-routes.d.ts +3 -0
  52. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  53. package/dist/interactive/doc-delete-routes.js +4 -0
  54. package/dist/interactive/doc-delete-routes.js.map +1 -1
  55. package/dist/interactive/draft-events.d.ts +89 -3
  56. package/dist/interactive/draft-events.d.ts.map +1 -1
  57. package/dist/interactive/draft-events.js +438 -27
  58. package/dist/interactive/draft-events.js.map +1 -1
  59. package/dist/interactive/edit-events.d.ts +2 -0
  60. package/dist/interactive/edit-events.d.ts.map +1 -1
  61. package/dist/interactive/edit-events.js +11 -0
  62. package/dist/interactive/edit-events.js.map +1 -1
  63. package/dist/interactive/proposal-create.d.ts +143 -0
  64. package/dist/interactive/proposal-create.d.ts.map +1 -0
  65. package/dist/interactive/proposal-create.js +318 -0
  66. package/dist/interactive/proposal-create.js.map +1 -0
  67. package/dist/interactive/proxy-routes.d.ts +60 -3
  68. package/dist/interactive/proxy-routes.d.ts.map +1 -1
  69. package/dist/interactive/proxy-routes.js +209 -3
  70. package/dist/interactive/proxy-routes.js.map +1 -1
  71. package/dist/interactive/source-packet.d.ts +126 -0
  72. package/dist/interactive/source-packet.d.ts.map +1 -0
  73. package/dist/interactive/source-packet.js +482 -0
  74. package/dist/interactive/source-packet.js.map +1 -0
  75. package/dist/studio/assets/{index-C_UIgTiy.js → index-u4O_7N-b.js} +1 -1
  76. package/dist/studio/editors/wicked-deck/editor.json +1 -1
  77. package/dist/studio/editors/wicked-deck/index.html +1 -1
  78. package/dist/studio/editors/wicked-doc/editor.json +1 -1
  79. package/dist/studio/editors/wicked-doc/index.html +1 -1
  80. package/dist/studio/editors/wicked-insights/editor.json +1 -1
  81. package/dist/studio/editors/wicked-insights/index.html +1 -1
  82. package/dist/studio/editors/wicked-page/editor.json +1 -1
  83. package/dist/studio/editors/wicked-page/index.html +1 -1
  84. package/dist/studio/editors/wicked-video/editor.json +1 -1
  85. package/dist/studio/editors/wicked-video/index.html +1 -1
  86. package/dist/studio/index.html +1 -1
  87. package/dist/studio/testid-inventory.json +1 -1
  88. package/endpoint-manifest.json +1 -1
  89. package/package.json +4 -3
@@ -0,0 +1,3009 @@
1
+ /**
2
+ * `apps.json`, the app spec (DES-APPS-001 §4, rev 11): the runtime schema crew checks every tree
3
+ * against, mirroring the wire contract's `AppSpec` (`wicked-crew-api-types`; the drift guard in
4
+ * `tests/wire-contract.test.ts` holds the two equal in both directions).
5
+ *
6
+ * Two layers, both pure:
7
+ * - {@link AppSpecSchema}: the shape and every per-field limit, strict at every level, so a key crew
8
+ * does not know is refused rather than dropped (an agent writes this file: what crew cannot read, it
9
+ * does not accept).
10
+ * - {@link checkSpec}: what a shape cannot say. Ids are unique; every binding names a query, action,
11
+ * filter, form field, row column or page that exists; a viewer-bound parameter is never bound by a
12
+ * component; a link leaves only for a listed host over https; a pie has one series.
13
+ *
14
+ * Both answer findings (`AppCheckFinding`, stage `spec`) with a JSON path into the document, so the
15
+ * staged check, the builder and `apps_check` all name the same place.
16
+ */
17
+ import { z } from 'zod';
18
+ import type { AppBindingRef, AppCheckFinding, AppParamSchema, AppSpec } from '../core/types.js';
19
+ /** Page and component ids: unique across the app. */
20
+ export declare const APP_ELEMENT_ID_RE: RegExp;
21
+ /** Query and action ids. A query id is a file name (`queries/<id>.sql`), so lower case only. */
22
+ export declare const APP_NAMED_ID_RE: RegExp;
23
+ /** The whole `apps.json`. */
24
+ export declare const AppSpecSchema: z.ZodObject<{
25
+ schema: z.ZodLiteral<"wicked.apps/v1">;
26
+ name: z.ZodString;
27
+ description: z.ZodOptional<z.ZodString>;
28
+ theme: z.ZodOptional<z.ZodObject<{
29
+ mode: z.ZodOptional<z.ZodEnum<["light", "dark", "auto"]>>;
30
+ accent: z.ZodOptional<z.ZodString>;
31
+ palette: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
32
+ density: z.ZodOptional<z.ZodEnum<["comfortable", "compact"]>>;
33
+ }, "strict", z.ZodTypeAny, {
34
+ mode?: "auto" | "light" | "dark" | undefined;
35
+ accent?: string | undefined;
36
+ palette?: string[] | undefined;
37
+ density?: "comfortable" | "compact" | undefined;
38
+ }, {
39
+ mode?: "auto" | "light" | "dark" | undefined;
40
+ accent?: string | undefined;
41
+ palette?: string[] | undefined;
42
+ density?: "comfortable" | "compact" | undefined;
43
+ }>>;
44
+ pages: z.ZodArray<z.ZodObject<{
45
+ id: z.ZodString;
46
+ title: z.ZodString;
47
+ components: z.ZodArray<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
48
+ type: z.ZodLiteral<"table">;
49
+ data: z.ZodObject<{
50
+ query: z.ZodString;
51
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
52
+ }, "strict", z.ZodTypeAny, {
53
+ query: string;
54
+ params?: Record<string, AppBindingRef> | undefined;
55
+ }, {
56
+ query: string;
57
+ params?: Record<string, AppBindingRef> | undefined;
58
+ }>;
59
+ columns: z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ column: z.ZodString;
61
+ label: z.ZodOptional<z.ZodString>;
62
+ format: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
63
+ kind: z.ZodLiteral<"currency">;
64
+ currency: z.ZodString;
65
+ decimals: z.ZodOptional<z.ZodNumber>;
66
+ }, "strict", z.ZodTypeAny, {
67
+ kind: "currency";
68
+ currency: string;
69
+ decimals?: number | undefined;
70
+ }, {
71
+ kind: "currency";
72
+ currency: string;
73
+ decimals?: number | undefined;
74
+ }>, z.ZodObject<{
75
+ kind: z.ZodEnum<["text", "number", "percent", "date", "datetime", "duration"]>;
76
+ decimals: z.ZodOptional<z.ZodNumber>;
77
+ }, "strict", z.ZodTypeAny, {
78
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
79
+ decimals?: number | undefined;
80
+ }, {
81
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
82
+ decimals?: number | undefined;
83
+ }>]>>;
84
+ }, "strict", z.ZodTypeAny, {
85
+ column: string;
86
+ label?: string | undefined;
87
+ format?: {
88
+ kind: "currency";
89
+ currency: string;
90
+ decimals?: number | undefined;
91
+ } | {
92
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
93
+ decimals?: number | undefined;
94
+ } | undefined;
95
+ }, {
96
+ column: string;
97
+ label?: string | undefined;
98
+ format?: {
99
+ kind: "currency";
100
+ currency: string;
101
+ decimals?: number | undefined;
102
+ } | {
103
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
104
+ decimals?: number | undefined;
105
+ } | undefined;
106
+ }>, "many">>;
107
+ rowActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
108
+ label: z.ZodString;
109
+ action: z.ZodString;
110
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
111
+ }, "strict", z.ZodTypeAny, {
112
+ label: string;
113
+ action: string;
114
+ params?: Record<string, AppBindingRef> | undefined;
115
+ }, {
116
+ label: string;
117
+ action: string;
118
+ params?: Record<string, AppBindingRef> | undefined;
119
+ }>, "many">>;
120
+ pageSize: z.ZodOptional<z.ZodNumber>;
121
+ id: z.ZodString;
122
+ box: z.ZodEffects<z.ZodObject<{
123
+ x: z.ZodNumber;
124
+ y: z.ZodNumber;
125
+ w: z.ZodNumber;
126
+ h: z.ZodNumber;
127
+ }, "strict", z.ZodTypeAny, {
128
+ x: number;
129
+ y: number;
130
+ h: number;
131
+ w: number;
132
+ }, {
133
+ x: number;
134
+ y: number;
135
+ h: number;
136
+ w: number;
137
+ }>, {
138
+ x: number;
139
+ y: number;
140
+ h: number;
141
+ w: number;
142
+ }, {
143
+ x: number;
144
+ y: number;
145
+ h: number;
146
+ w: number;
147
+ }>;
148
+ title: z.ZodOptional<z.ZodString>;
149
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
150
+ }, "strict", z.ZodTypeAny, {
151
+ id: string;
152
+ data: {
153
+ query: string;
154
+ params?: Record<string, AppBindingRef> | undefined;
155
+ };
156
+ type: "table";
157
+ box: {
158
+ x: number;
159
+ y: number;
160
+ h: number;
161
+ w: number;
162
+ };
163
+ title?: string | undefined;
164
+ pageSize?: number | undefined;
165
+ columns?: {
166
+ column: string;
167
+ label?: string | undefined;
168
+ format?: {
169
+ kind: "currency";
170
+ currency: string;
171
+ decimals?: number | undefined;
172
+ } | {
173
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
174
+ decimals?: number | undefined;
175
+ } | undefined;
176
+ }[] | undefined;
177
+ rowActions?: {
178
+ label: string;
179
+ action: string;
180
+ params?: Record<string, AppBindingRef> | undefined;
181
+ }[] | undefined;
182
+ hideOnPhone?: boolean | undefined;
183
+ }, {
184
+ id: string;
185
+ data: {
186
+ query: string;
187
+ params?: Record<string, AppBindingRef> | undefined;
188
+ };
189
+ type: "table";
190
+ box: {
191
+ x: number;
192
+ y: number;
193
+ h: number;
194
+ w: number;
195
+ };
196
+ title?: string | undefined;
197
+ pageSize?: number | undefined;
198
+ columns?: {
199
+ column: string;
200
+ label?: string | undefined;
201
+ format?: {
202
+ kind: "currency";
203
+ currency: string;
204
+ decimals?: number | undefined;
205
+ } | {
206
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
207
+ decimals?: number | undefined;
208
+ } | undefined;
209
+ }[] | undefined;
210
+ rowActions?: {
211
+ label: string;
212
+ action: string;
213
+ params?: Record<string, AppBindingRef> | undefined;
214
+ }[] | undefined;
215
+ hideOnPhone?: boolean | undefined;
216
+ }>, z.ZodObject<{
217
+ type: z.ZodLiteral<"chart">;
218
+ chart: z.ZodEnum<["line", "bar", "area", "pie"]>;
219
+ data: z.ZodObject<{
220
+ query: z.ZodString;
221
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
222
+ }, "strict", z.ZodTypeAny, {
223
+ query: string;
224
+ params?: Record<string, AppBindingRef> | undefined;
225
+ }, {
226
+ query: string;
227
+ params?: Record<string, AppBindingRef> | undefined;
228
+ }>;
229
+ x: z.ZodString;
230
+ series: z.ZodArray<z.ZodObject<{
231
+ column: z.ZodString;
232
+ label: z.ZodOptional<z.ZodString>;
233
+ color: z.ZodOptional<z.ZodString>;
234
+ }, "strict", z.ZodTypeAny, {
235
+ column: string;
236
+ label?: string | undefined;
237
+ color?: string | undefined;
238
+ }, {
239
+ column: string;
240
+ label?: string | undefined;
241
+ color?: string | undefined;
242
+ }>, "many">;
243
+ stacked: z.ZodOptional<z.ZodBoolean>;
244
+ id: z.ZodString;
245
+ box: z.ZodEffects<z.ZodObject<{
246
+ x: z.ZodNumber;
247
+ y: z.ZodNumber;
248
+ w: z.ZodNumber;
249
+ h: z.ZodNumber;
250
+ }, "strict", z.ZodTypeAny, {
251
+ x: number;
252
+ y: number;
253
+ h: number;
254
+ w: number;
255
+ }, {
256
+ x: number;
257
+ y: number;
258
+ h: number;
259
+ w: number;
260
+ }>, {
261
+ x: number;
262
+ y: number;
263
+ h: number;
264
+ w: number;
265
+ }, {
266
+ x: number;
267
+ y: number;
268
+ h: number;
269
+ w: number;
270
+ }>;
271
+ title: z.ZodOptional<z.ZodString>;
272
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
273
+ }, "strict", z.ZodTypeAny, {
274
+ x: string;
275
+ id: string;
276
+ data: {
277
+ query: string;
278
+ params?: Record<string, AppBindingRef> | undefined;
279
+ };
280
+ type: "chart";
281
+ chart: "area" | "line" | "bar" | "pie";
282
+ series: {
283
+ column: string;
284
+ label?: string | undefined;
285
+ color?: string | undefined;
286
+ }[];
287
+ box: {
288
+ x: number;
289
+ y: number;
290
+ h: number;
291
+ w: number;
292
+ };
293
+ title?: string | undefined;
294
+ hideOnPhone?: boolean | undefined;
295
+ stacked?: boolean | undefined;
296
+ }, {
297
+ x: string;
298
+ id: string;
299
+ data: {
300
+ query: string;
301
+ params?: Record<string, AppBindingRef> | undefined;
302
+ };
303
+ type: "chart";
304
+ chart: "area" | "line" | "bar" | "pie";
305
+ series: {
306
+ column: string;
307
+ label?: string | undefined;
308
+ color?: string | undefined;
309
+ }[];
310
+ box: {
311
+ x: number;
312
+ y: number;
313
+ h: number;
314
+ w: number;
315
+ };
316
+ title?: string | undefined;
317
+ hideOnPhone?: boolean | undefined;
318
+ stacked?: boolean | undefined;
319
+ }>, z.ZodObject<{
320
+ type: z.ZodLiteral<"kpi">;
321
+ data: z.ZodObject<{
322
+ query: z.ZodString;
323
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
324
+ }, "strict", z.ZodTypeAny, {
325
+ query: string;
326
+ params?: Record<string, AppBindingRef> | undefined;
327
+ }, {
328
+ query: string;
329
+ params?: Record<string, AppBindingRef> | undefined;
330
+ }>;
331
+ value: z.ZodString;
332
+ format: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
333
+ kind: z.ZodLiteral<"currency">;
334
+ currency: z.ZodString;
335
+ decimals: z.ZodOptional<z.ZodNumber>;
336
+ }, "strict", z.ZodTypeAny, {
337
+ kind: "currency";
338
+ currency: string;
339
+ decimals?: number | undefined;
340
+ }, {
341
+ kind: "currency";
342
+ currency: string;
343
+ decimals?: number | undefined;
344
+ }>, z.ZodObject<{
345
+ kind: z.ZodEnum<["text", "number", "percent", "date", "datetime", "duration"]>;
346
+ decimals: z.ZodOptional<z.ZodNumber>;
347
+ }, "strict", z.ZodTypeAny, {
348
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
349
+ decimals?: number | undefined;
350
+ }, {
351
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
352
+ decimals?: number | undefined;
353
+ }>]>>;
354
+ delta: z.ZodOptional<z.ZodString>;
355
+ caption: z.ZodOptional<z.ZodString>;
356
+ id: z.ZodString;
357
+ box: z.ZodEffects<z.ZodObject<{
358
+ x: z.ZodNumber;
359
+ y: z.ZodNumber;
360
+ w: z.ZodNumber;
361
+ h: z.ZodNumber;
362
+ }, "strict", z.ZodTypeAny, {
363
+ x: number;
364
+ y: number;
365
+ h: number;
366
+ w: number;
367
+ }, {
368
+ x: number;
369
+ y: number;
370
+ h: number;
371
+ w: number;
372
+ }>, {
373
+ x: number;
374
+ y: number;
375
+ h: number;
376
+ w: number;
377
+ }, {
378
+ x: number;
379
+ y: number;
380
+ h: number;
381
+ w: number;
382
+ }>;
383
+ title: z.ZodOptional<z.ZodString>;
384
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
385
+ }, "strict", z.ZodTypeAny, {
386
+ id: string;
387
+ value: string;
388
+ data: {
389
+ query: string;
390
+ params?: Record<string, AppBindingRef> | undefined;
391
+ };
392
+ type: "kpi";
393
+ box: {
394
+ x: number;
395
+ y: number;
396
+ h: number;
397
+ w: number;
398
+ };
399
+ title?: string | undefined;
400
+ format?: {
401
+ kind: "currency";
402
+ currency: string;
403
+ decimals?: number | undefined;
404
+ } | {
405
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
406
+ decimals?: number | undefined;
407
+ } | undefined;
408
+ caption?: string | undefined;
409
+ hideOnPhone?: boolean | undefined;
410
+ delta?: string | undefined;
411
+ }, {
412
+ id: string;
413
+ value: string;
414
+ data: {
415
+ query: string;
416
+ params?: Record<string, AppBindingRef> | undefined;
417
+ };
418
+ type: "kpi";
419
+ box: {
420
+ x: number;
421
+ y: number;
422
+ h: number;
423
+ w: number;
424
+ };
425
+ title?: string | undefined;
426
+ format?: {
427
+ kind: "currency";
428
+ currency: string;
429
+ decimals?: number | undefined;
430
+ } | {
431
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
432
+ decimals?: number | undefined;
433
+ } | undefined;
434
+ caption?: string | undefined;
435
+ hideOnPhone?: boolean | undefined;
436
+ delta?: string | undefined;
437
+ }>, z.ZodObject<{
438
+ type: z.ZodLiteral<"text">;
439
+ text: z.ZodString;
440
+ style: z.ZodOptional<z.ZodEnum<["heading", "body", "caption"]>>;
441
+ id: z.ZodString;
442
+ box: z.ZodEffects<z.ZodObject<{
443
+ x: z.ZodNumber;
444
+ y: z.ZodNumber;
445
+ w: z.ZodNumber;
446
+ h: z.ZodNumber;
447
+ }, "strict", z.ZodTypeAny, {
448
+ x: number;
449
+ y: number;
450
+ h: number;
451
+ w: number;
452
+ }, {
453
+ x: number;
454
+ y: number;
455
+ h: number;
456
+ w: number;
457
+ }>, {
458
+ x: number;
459
+ y: number;
460
+ h: number;
461
+ w: number;
462
+ }, {
463
+ x: number;
464
+ y: number;
465
+ h: number;
466
+ w: number;
467
+ }>;
468
+ title: z.ZodOptional<z.ZodString>;
469
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
470
+ }, "strict", z.ZodTypeAny, {
471
+ id: string;
472
+ text: string;
473
+ type: "text";
474
+ box: {
475
+ x: number;
476
+ y: number;
477
+ h: number;
478
+ w: number;
479
+ };
480
+ title?: string | undefined;
481
+ style?: "heading" | "body" | "caption" | undefined;
482
+ hideOnPhone?: boolean | undefined;
483
+ }, {
484
+ id: string;
485
+ text: string;
486
+ type: "text";
487
+ box: {
488
+ x: number;
489
+ y: number;
490
+ h: number;
491
+ w: number;
492
+ };
493
+ title?: string | undefined;
494
+ style?: "heading" | "body" | "caption" | undefined;
495
+ hideOnPhone?: boolean | undefined;
496
+ }>, z.ZodObject<{
497
+ type: z.ZodLiteral<"filter">;
498
+ filter: z.ZodEnum<["select", "date-range", "search"]>;
499
+ label: z.ZodOptional<z.ZodString>;
500
+ options: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
501
+ kind: z.ZodLiteral<"query">;
502
+ query: z.ZodObject<{
503
+ query: z.ZodString;
504
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
505
+ }, "strict", z.ZodTypeAny, {
506
+ query: string;
507
+ params?: Record<string, AppBindingRef> | undefined;
508
+ }, {
509
+ query: string;
510
+ params?: Record<string, AppBindingRef> | undefined;
511
+ }>;
512
+ value: z.ZodString;
513
+ label: z.ZodOptional<z.ZodString>;
514
+ }, "strict", z.ZodTypeAny, {
515
+ value: string;
516
+ kind: "query";
517
+ query: {
518
+ query: string;
519
+ params?: Record<string, AppBindingRef> | undefined;
520
+ };
521
+ label?: string | undefined;
522
+ }, {
523
+ value: string;
524
+ kind: "query";
525
+ query: {
526
+ query: string;
527
+ params?: Record<string, AppBindingRef> | undefined;
528
+ };
529
+ label?: string | undefined;
530
+ }>, z.ZodObject<{
531
+ kind: z.ZodLiteral<"values">;
532
+ values: z.ZodArray<z.ZodObject<{
533
+ value: z.ZodString;
534
+ label: z.ZodOptional<z.ZodString>;
535
+ }, "strict", z.ZodTypeAny, {
536
+ value: string;
537
+ label?: string | undefined;
538
+ }, {
539
+ value: string;
540
+ label?: string | undefined;
541
+ }>, "many">;
542
+ }, "strict", z.ZodTypeAny, {
543
+ values: {
544
+ value: string;
545
+ label?: string | undefined;
546
+ }[];
547
+ kind: "values";
548
+ }, {
549
+ values: {
550
+ value: string;
551
+ label?: string | undefined;
552
+ }[];
553
+ kind: "values";
554
+ }>]>>;
555
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
556
+ lastDays: z.ZodNumber;
557
+ }, "strict", z.ZodTypeAny, {
558
+ lastDays: number;
559
+ }, {
560
+ lastDays: number;
561
+ }>]>>;
562
+ id: z.ZodString;
563
+ box: z.ZodEffects<z.ZodObject<{
564
+ x: z.ZodNumber;
565
+ y: z.ZodNumber;
566
+ w: z.ZodNumber;
567
+ h: z.ZodNumber;
568
+ }, "strict", z.ZodTypeAny, {
569
+ x: number;
570
+ y: number;
571
+ h: number;
572
+ w: number;
573
+ }, {
574
+ x: number;
575
+ y: number;
576
+ h: number;
577
+ w: number;
578
+ }>, {
579
+ x: number;
580
+ y: number;
581
+ h: number;
582
+ w: number;
583
+ }, {
584
+ x: number;
585
+ y: number;
586
+ h: number;
587
+ w: number;
588
+ }>;
589
+ title: z.ZodOptional<z.ZodString>;
590
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
591
+ }, "strict", z.ZodTypeAny, {
592
+ id: string;
593
+ filter: "search" | "select" | "date-range";
594
+ type: "filter";
595
+ box: {
596
+ x: number;
597
+ y: number;
598
+ h: number;
599
+ w: number;
600
+ };
601
+ title?: string | undefined;
602
+ default?: string | {
603
+ lastDays: number;
604
+ } | undefined;
605
+ label?: string | undefined;
606
+ options?: {
607
+ value: string;
608
+ kind: "query";
609
+ query: {
610
+ query: string;
611
+ params?: Record<string, AppBindingRef> | undefined;
612
+ };
613
+ label?: string | undefined;
614
+ } | {
615
+ values: {
616
+ value: string;
617
+ label?: string | undefined;
618
+ }[];
619
+ kind: "values";
620
+ } | undefined;
621
+ hideOnPhone?: boolean | undefined;
622
+ }, {
623
+ id: string;
624
+ filter: "search" | "select" | "date-range";
625
+ type: "filter";
626
+ box: {
627
+ x: number;
628
+ y: number;
629
+ h: number;
630
+ w: number;
631
+ };
632
+ title?: string | undefined;
633
+ default?: string | {
634
+ lastDays: number;
635
+ } | undefined;
636
+ label?: string | undefined;
637
+ options?: {
638
+ value: string;
639
+ kind: "query";
640
+ query: {
641
+ query: string;
642
+ params?: Record<string, AppBindingRef> | undefined;
643
+ };
644
+ label?: string | undefined;
645
+ } | {
646
+ values: {
647
+ value: string;
648
+ label?: string | undefined;
649
+ }[];
650
+ kind: "values";
651
+ } | undefined;
652
+ hideOnPhone?: boolean | undefined;
653
+ }>, z.ZodObject<{
654
+ type: z.ZodLiteral<"form">;
655
+ fields: z.ZodArray<z.ZodObject<{
656
+ name: z.ZodString;
657
+ label: z.ZodOptional<z.ZodString>;
658
+ input: z.ZodEnum<["text", "textarea", "number", "date", "checkbox", "select"]>;
659
+ required: z.ZodOptional<z.ZodBoolean>;
660
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
661
+ value: z.ZodString;
662
+ label: z.ZodOptional<z.ZodString>;
663
+ }, "strict", z.ZodTypeAny, {
664
+ value: string;
665
+ label?: string | undefined;
666
+ }, {
667
+ value: string;
668
+ label?: string | undefined;
669
+ }>, "many">>;
670
+ }, "strict", z.ZodTypeAny, {
671
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
672
+ name: string;
673
+ required?: boolean | undefined;
674
+ label?: string | undefined;
675
+ options?: {
676
+ value: string;
677
+ label?: string | undefined;
678
+ }[] | undefined;
679
+ }, {
680
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
681
+ name: string;
682
+ required?: boolean | undefined;
683
+ label?: string | undefined;
684
+ options?: {
685
+ value: string;
686
+ label?: string | undefined;
687
+ }[] | undefined;
688
+ }>, "many">;
689
+ submit: z.ZodObject<{
690
+ label: z.ZodString;
691
+ action: z.ZodString;
692
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
693
+ }, "strict", z.ZodTypeAny, {
694
+ label: string;
695
+ action: string;
696
+ params?: Record<string, AppBindingRef> | undefined;
697
+ }, {
698
+ label: string;
699
+ action: string;
700
+ params?: Record<string, AppBindingRef> | undefined;
701
+ }>;
702
+ id: z.ZodString;
703
+ box: z.ZodEffects<z.ZodObject<{
704
+ x: z.ZodNumber;
705
+ y: z.ZodNumber;
706
+ w: z.ZodNumber;
707
+ h: z.ZodNumber;
708
+ }, "strict", z.ZodTypeAny, {
709
+ x: number;
710
+ y: number;
711
+ h: number;
712
+ w: number;
713
+ }, {
714
+ x: number;
715
+ y: number;
716
+ h: number;
717
+ w: number;
718
+ }>, {
719
+ x: number;
720
+ y: number;
721
+ h: number;
722
+ w: number;
723
+ }, {
724
+ x: number;
725
+ y: number;
726
+ h: number;
727
+ w: number;
728
+ }>;
729
+ title: z.ZodOptional<z.ZodString>;
730
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
731
+ }, "strict", z.ZodTypeAny, {
732
+ id: string;
733
+ type: "form";
734
+ fields: {
735
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
736
+ name: string;
737
+ required?: boolean | undefined;
738
+ label?: string | undefined;
739
+ options?: {
740
+ value: string;
741
+ label?: string | undefined;
742
+ }[] | undefined;
743
+ }[];
744
+ box: {
745
+ x: number;
746
+ y: number;
747
+ h: number;
748
+ w: number;
749
+ };
750
+ submit: {
751
+ label: string;
752
+ action: string;
753
+ params?: Record<string, AppBindingRef> | undefined;
754
+ };
755
+ title?: string | undefined;
756
+ hideOnPhone?: boolean | undefined;
757
+ }, {
758
+ id: string;
759
+ type: "form";
760
+ fields: {
761
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
762
+ name: string;
763
+ required?: boolean | undefined;
764
+ label?: string | undefined;
765
+ options?: {
766
+ value: string;
767
+ label?: string | undefined;
768
+ }[] | undefined;
769
+ }[];
770
+ box: {
771
+ x: number;
772
+ y: number;
773
+ h: number;
774
+ w: number;
775
+ };
776
+ submit: {
777
+ label: string;
778
+ action: string;
779
+ params?: Record<string, AppBindingRef> | undefined;
780
+ };
781
+ title?: string | undefined;
782
+ hideOnPhone?: boolean | undefined;
783
+ }>, z.ZodObject<{
784
+ type: z.ZodLiteral<"button">;
785
+ action: z.ZodObject<{
786
+ label: z.ZodString;
787
+ action: z.ZodString;
788
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
789
+ }, "strict", z.ZodTypeAny, {
790
+ label: string;
791
+ action: string;
792
+ params?: Record<string, AppBindingRef> | undefined;
793
+ }, {
794
+ label: string;
795
+ action: string;
796
+ params?: Record<string, AppBindingRef> | undefined;
797
+ }>;
798
+ id: z.ZodString;
799
+ box: z.ZodEffects<z.ZodObject<{
800
+ x: z.ZodNumber;
801
+ y: z.ZodNumber;
802
+ w: z.ZodNumber;
803
+ h: z.ZodNumber;
804
+ }, "strict", z.ZodTypeAny, {
805
+ x: number;
806
+ y: number;
807
+ h: number;
808
+ w: number;
809
+ }, {
810
+ x: number;
811
+ y: number;
812
+ h: number;
813
+ w: number;
814
+ }>, {
815
+ x: number;
816
+ y: number;
817
+ h: number;
818
+ w: number;
819
+ }, {
820
+ x: number;
821
+ y: number;
822
+ h: number;
823
+ w: number;
824
+ }>;
825
+ title: z.ZodOptional<z.ZodString>;
826
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
827
+ }, "strict", z.ZodTypeAny, {
828
+ id: string;
829
+ action: {
830
+ label: string;
831
+ action: string;
832
+ params?: Record<string, AppBindingRef> | undefined;
833
+ };
834
+ type: "button";
835
+ box: {
836
+ x: number;
837
+ y: number;
838
+ h: number;
839
+ w: number;
840
+ };
841
+ title?: string | undefined;
842
+ hideOnPhone?: boolean | undefined;
843
+ }, {
844
+ id: string;
845
+ action: {
846
+ label: string;
847
+ action: string;
848
+ params?: Record<string, AppBindingRef> | undefined;
849
+ };
850
+ type: "button";
851
+ box: {
852
+ x: number;
853
+ y: number;
854
+ h: number;
855
+ w: number;
856
+ };
857
+ title?: string | undefined;
858
+ hideOnPhone?: boolean | undefined;
859
+ }>, z.ZodObject<{
860
+ type: z.ZodLiteral<"image">;
861
+ src: z.ZodEffects<z.ZodString, string, string>;
862
+ alt: z.ZodString;
863
+ id: z.ZodString;
864
+ box: z.ZodEffects<z.ZodObject<{
865
+ x: z.ZodNumber;
866
+ y: z.ZodNumber;
867
+ w: z.ZodNumber;
868
+ h: z.ZodNumber;
869
+ }, "strict", z.ZodTypeAny, {
870
+ x: number;
871
+ y: number;
872
+ h: number;
873
+ w: number;
874
+ }, {
875
+ x: number;
876
+ y: number;
877
+ h: number;
878
+ w: number;
879
+ }>, {
880
+ x: number;
881
+ y: number;
882
+ h: number;
883
+ w: number;
884
+ }, {
885
+ x: number;
886
+ y: number;
887
+ h: number;
888
+ w: number;
889
+ }>;
890
+ title: z.ZodOptional<z.ZodString>;
891
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
892
+ }, "strict", z.ZodTypeAny, {
893
+ id: string;
894
+ type: "image";
895
+ src: string;
896
+ box: {
897
+ x: number;
898
+ y: number;
899
+ h: number;
900
+ w: number;
901
+ };
902
+ alt: string;
903
+ title?: string | undefined;
904
+ hideOnPhone?: boolean | undefined;
905
+ }, {
906
+ id: string;
907
+ type: "image";
908
+ src: string;
909
+ box: {
910
+ x: number;
911
+ y: number;
912
+ h: number;
913
+ w: number;
914
+ };
915
+ alt: string;
916
+ title?: string | undefined;
917
+ hideOnPhone?: boolean | undefined;
918
+ }>, z.ZodObject<{
919
+ type: z.ZodLiteral<"link">;
920
+ label: z.ZodString;
921
+ to: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
922
+ kind: z.ZodLiteral<"page">;
923
+ page: z.ZodString;
924
+ params: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodType<AppBindingRef, z.ZodTypeDef, AppBindingRef>>, Record<string, AppBindingRef>, Record<string, AppBindingRef>>>;
925
+ }, "strict", z.ZodTypeAny, {
926
+ kind: "page";
927
+ page: string;
928
+ params?: Record<string, AppBindingRef> | undefined;
929
+ }, {
930
+ kind: "page";
931
+ page: string;
932
+ params?: Record<string, AppBindingRef> | undefined;
933
+ }>, z.ZodObject<{
934
+ kind: z.ZodLiteral<"href">;
935
+ href: z.ZodString;
936
+ }, "strict", z.ZodTypeAny, {
937
+ kind: "href";
938
+ href: string;
939
+ }, {
940
+ kind: "href";
941
+ href: string;
942
+ }>]>;
943
+ id: z.ZodString;
944
+ box: z.ZodEffects<z.ZodObject<{
945
+ x: z.ZodNumber;
946
+ y: z.ZodNumber;
947
+ w: z.ZodNumber;
948
+ h: z.ZodNumber;
949
+ }, "strict", z.ZodTypeAny, {
950
+ x: number;
951
+ y: number;
952
+ h: number;
953
+ w: number;
954
+ }, {
955
+ x: number;
956
+ y: number;
957
+ h: number;
958
+ w: number;
959
+ }>, {
960
+ x: number;
961
+ y: number;
962
+ h: number;
963
+ w: number;
964
+ }, {
965
+ x: number;
966
+ y: number;
967
+ h: number;
968
+ w: number;
969
+ }>;
970
+ title: z.ZodOptional<z.ZodString>;
971
+ hideOnPhone: z.ZodOptional<z.ZodBoolean>;
972
+ }, "strict", z.ZodTypeAny, {
973
+ id: string;
974
+ label: string;
975
+ to: {
976
+ kind: "page";
977
+ page: string;
978
+ params?: Record<string, AppBindingRef> | undefined;
979
+ } | {
980
+ kind: "href";
981
+ href: string;
982
+ };
983
+ type: "link";
984
+ box: {
985
+ x: number;
986
+ y: number;
987
+ h: number;
988
+ w: number;
989
+ };
990
+ title?: string | undefined;
991
+ hideOnPhone?: boolean | undefined;
992
+ }, {
993
+ id: string;
994
+ label: string;
995
+ to: {
996
+ kind: "page";
997
+ page: string;
998
+ params?: Record<string, AppBindingRef> | undefined;
999
+ } | {
1000
+ kind: "href";
1001
+ href: string;
1002
+ };
1003
+ type: "link";
1004
+ box: {
1005
+ x: number;
1006
+ y: number;
1007
+ h: number;
1008
+ w: number;
1009
+ };
1010
+ title?: string | undefined;
1011
+ hideOnPhone?: boolean | undefined;
1012
+ }>]>, "many">;
1013
+ }, "strict", z.ZodTypeAny, {
1014
+ title: string;
1015
+ id: string;
1016
+ components: ({
1017
+ id: string;
1018
+ data: {
1019
+ query: string;
1020
+ params?: Record<string, AppBindingRef> | undefined;
1021
+ };
1022
+ type: "table";
1023
+ box: {
1024
+ x: number;
1025
+ y: number;
1026
+ h: number;
1027
+ w: number;
1028
+ };
1029
+ title?: string | undefined;
1030
+ pageSize?: number | undefined;
1031
+ columns?: {
1032
+ column: string;
1033
+ label?: string | undefined;
1034
+ format?: {
1035
+ kind: "currency";
1036
+ currency: string;
1037
+ decimals?: number | undefined;
1038
+ } | {
1039
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
1040
+ decimals?: number | undefined;
1041
+ } | undefined;
1042
+ }[] | undefined;
1043
+ rowActions?: {
1044
+ label: string;
1045
+ action: string;
1046
+ params?: Record<string, AppBindingRef> | undefined;
1047
+ }[] | undefined;
1048
+ hideOnPhone?: boolean | undefined;
1049
+ } | {
1050
+ x: string;
1051
+ id: string;
1052
+ data: {
1053
+ query: string;
1054
+ params?: Record<string, AppBindingRef> | undefined;
1055
+ };
1056
+ type: "chart";
1057
+ chart: "area" | "line" | "bar" | "pie";
1058
+ series: {
1059
+ column: string;
1060
+ label?: string | undefined;
1061
+ color?: string | undefined;
1062
+ }[];
1063
+ box: {
1064
+ x: number;
1065
+ y: number;
1066
+ h: number;
1067
+ w: number;
1068
+ };
1069
+ title?: string | undefined;
1070
+ hideOnPhone?: boolean | undefined;
1071
+ stacked?: boolean | undefined;
1072
+ } | {
1073
+ id: string;
1074
+ value: string;
1075
+ data: {
1076
+ query: string;
1077
+ params?: Record<string, AppBindingRef> | undefined;
1078
+ };
1079
+ type: "kpi";
1080
+ box: {
1081
+ x: number;
1082
+ y: number;
1083
+ h: number;
1084
+ w: number;
1085
+ };
1086
+ title?: string | undefined;
1087
+ format?: {
1088
+ kind: "currency";
1089
+ currency: string;
1090
+ decimals?: number | undefined;
1091
+ } | {
1092
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
1093
+ decimals?: number | undefined;
1094
+ } | undefined;
1095
+ caption?: string | undefined;
1096
+ hideOnPhone?: boolean | undefined;
1097
+ delta?: string | undefined;
1098
+ } | {
1099
+ id: string;
1100
+ text: string;
1101
+ type: "text";
1102
+ box: {
1103
+ x: number;
1104
+ y: number;
1105
+ h: number;
1106
+ w: number;
1107
+ };
1108
+ title?: string | undefined;
1109
+ style?: "heading" | "body" | "caption" | undefined;
1110
+ hideOnPhone?: boolean | undefined;
1111
+ } | {
1112
+ id: string;
1113
+ filter: "search" | "select" | "date-range";
1114
+ type: "filter";
1115
+ box: {
1116
+ x: number;
1117
+ y: number;
1118
+ h: number;
1119
+ w: number;
1120
+ };
1121
+ title?: string | undefined;
1122
+ default?: string | {
1123
+ lastDays: number;
1124
+ } | undefined;
1125
+ label?: string | undefined;
1126
+ options?: {
1127
+ value: string;
1128
+ kind: "query";
1129
+ query: {
1130
+ query: string;
1131
+ params?: Record<string, AppBindingRef> | undefined;
1132
+ };
1133
+ label?: string | undefined;
1134
+ } | {
1135
+ values: {
1136
+ value: string;
1137
+ label?: string | undefined;
1138
+ }[];
1139
+ kind: "values";
1140
+ } | undefined;
1141
+ hideOnPhone?: boolean | undefined;
1142
+ } | {
1143
+ id: string;
1144
+ type: "form";
1145
+ fields: {
1146
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
1147
+ name: string;
1148
+ required?: boolean | undefined;
1149
+ label?: string | undefined;
1150
+ options?: {
1151
+ value: string;
1152
+ label?: string | undefined;
1153
+ }[] | undefined;
1154
+ }[];
1155
+ box: {
1156
+ x: number;
1157
+ y: number;
1158
+ h: number;
1159
+ w: number;
1160
+ };
1161
+ submit: {
1162
+ label: string;
1163
+ action: string;
1164
+ params?: Record<string, AppBindingRef> | undefined;
1165
+ };
1166
+ title?: string | undefined;
1167
+ hideOnPhone?: boolean | undefined;
1168
+ } | {
1169
+ id: string;
1170
+ action: {
1171
+ label: string;
1172
+ action: string;
1173
+ params?: Record<string, AppBindingRef> | undefined;
1174
+ };
1175
+ type: "button";
1176
+ box: {
1177
+ x: number;
1178
+ y: number;
1179
+ h: number;
1180
+ w: number;
1181
+ };
1182
+ title?: string | undefined;
1183
+ hideOnPhone?: boolean | undefined;
1184
+ } | {
1185
+ id: string;
1186
+ type: "image";
1187
+ src: string;
1188
+ box: {
1189
+ x: number;
1190
+ y: number;
1191
+ h: number;
1192
+ w: number;
1193
+ };
1194
+ alt: string;
1195
+ title?: string | undefined;
1196
+ hideOnPhone?: boolean | undefined;
1197
+ } | {
1198
+ id: string;
1199
+ label: string;
1200
+ to: {
1201
+ kind: "page";
1202
+ page: string;
1203
+ params?: Record<string, AppBindingRef> | undefined;
1204
+ } | {
1205
+ kind: "href";
1206
+ href: string;
1207
+ };
1208
+ type: "link";
1209
+ box: {
1210
+ x: number;
1211
+ y: number;
1212
+ h: number;
1213
+ w: number;
1214
+ };
1215
+ title?: string | undefined;
1216
+ hideOnPhone?: boolean | undefined;
1217
+ })[];
1218
+ }, {
1219
+ title: string;
1220
+ id: string;
1221
+ components: ({
1222
+ id: string;
1223
+ data: {
1224
+ query: string;
1225
+ params?: Record<string, AppBindingRef> | undefined;
1226
+ };
1227
+ type: "table";
1228
+ box: {
1229
+ x: number;
1230
+ y: number;
1231
+ h: number;
1232
+ w: number;
1233
+ };
1234
+ title?: string | undefined;
1235
+ pageSize?: number | undefined;
1236
+ columns?: {
1237
+ column: string;
1238
+ label?: string | undefined;
1239
+ format?: {
1240
+ kind: "currency";
1241
+ currency: string;
1242
+ decimals?: number | undefined;
1243
+ } | {
1244
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
1245
+ decimals?: number | undefined;
1246
+ } | undefined;
1247
+ }[] | undefined;
1248
+ rowActions?: {
1249
+ label: string;
1250
+ action: string;
1251
+ params?: Record<string, AppBindingRef> | undefined;
1252
+ }[] | undefined;
1253
+ hideOnPhone?: boolean | undefined;
1254
+ } | {
1255
+ x: string;
1256
+ id: string;
1257
+ data: {
1258
+ query: string;
1259
+ params?: Record<string, AppBindingRef> | undefined;
1260
+ };
1261
+ type: "chart";
1262
+ chart: "area" | "line" | "bar" | "pie";
1263
+ series: {
1264
+ column: string;
1265
+ label?: string | undefined;
1266
+ color?: string | undefined;
1267
+ }[];
1268
+ box: {
1269
+ x: number;
1270
+ y: number;
1271
+ h: number;
1272
+ w: number;
1273
+ };
1274
+ title?: string | undefined;
1275
+ hideOnPhone?: boolean | undefined;
1276
+ stacked?: boolean | undefined;
1277
+ } | {
1278
+ id: string;
1279
+ value: string;
1280
+ data: {
1281
+ query: string;
1282
+ params?: Record<string, AppBindingRef> | undefined;
1283
+ };
1284
+ type: "kpi";
1285
+ box: {
1286
+ x: number;
1287
+ y: number;
1288
+ h: number;
1289
+ w: number;
1290
+ };
1291
+ title?: string | undefined;
1292
+ format?: {
1293
+ kind: "currency";
1294
+ currency: string;
1295
+ decimals?: number | undefined;
1296
+ } | {
1297
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
1298
+ decimals?: number | undefined;
1299
+ } | undefined;
1300
+ caption?: string | undefined;
1301
+ hideOnPhone?: boolean | undefined;
1302
+ delta?: string | undefined;
1303
+ } | {
1304
+ id: string;
1305
+ text: string;
1306
+ type: "text";
1307
+ box: {
1308
+ x: number;
1309
+ y: number;
1310
+ h: number;
1311
+ w: number;
1312
+ };
1313
+ title?: string | undefined;
1314
+ style?: "heading" | "body" | "caption" | undefined;
1315
+ hideOnPhone?: boolean | undefined;
1316
+ } | {
1317
+ id: string;
1318
+ filter: "search" | "select" | "date-range";
1319
+ type: "filter";
1320
+ box: {
1321
+ x: number;
1322
+ y: number;
1323
+ h: number;
1324
+ w: number;
1325
+ };
1326
+ title?: string | undefined;
1327
+ default?: string | {
1328
+ lastDays: number;
1329
+ } | undefined;
1330
+ label?: string | undefined;
1331
+ options?: {
1332
+ value: string;
1333
+ kind: "query";
1334
+ query: {
1335
+ query: string;
1336
+ params?: Record<string, AppBindingRef> | undefined;
1337
+ };
1338
+ label?: string | undefined;
1339
+ } | {
1340
+ values: {
1341
+ value: string;
1342
+ label?: string | undefined;
1343
+ }[];
1344
+ kind: "values";
1345
+ } | undefined;
1346
+ hideOnPhone?: boolean | undefined;
1347
+ } | {
1348
+ id: string;
1349
+ type: "form";
1350
+ fields: {
1351
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
1352
+ name: string;
1353
+ required?: boolean | undefined;
1354
+ label?: string | undefined;
1355
+ options?: {
1356
+ value: string;
1357
+ label?: string | undefined;
1358
+ }[] | undefined;
1359
+ }[];
1360
+ box: {
1361
+ x: number;
1362
+ y: number;
1363
+ h: number;
1364
+ w: number;
1365
+ };
1366
+ submit: {
1367
+ label: string;
1368
+ action: string;
1369
+ params?: Record<string, AppBindingRef> | undefined;
1370
+ };
1371
+ title?: string | undefined;
1372
+ hideOnPhone?: boolean | undefined;
1373
+ } | {
1374
+ id: string;
1375
+ action: {
1376
+ label: string;
1377
+ action: string;
1378
+ params?: Record<string, AppBindingRef> | undefined;
1379
+ };
1380
+ type: "button";
1381
+ box: {
1382
+ x: number;
1383
+ y: number;
1384
+ h: number;
1385
+ w: number;
1386
+ };
1387
+ title?: string | undefined;
1388
+ hideOnPhone?: boolean | undefined;
1389
+ } | {
1390
+ id: string;
1391
+ type: "image";
1392
+ src: string;
1393
+ box: {
1394
+ x: number;
1395
+ y: number;
1396
+ h: number;
1397
+ w: number;
1398
+ };
1399
+ alt: string;
1400
+ title?: string | undefined;
1401
+ hideOnPhone?: boolean | undefined;
1402
+ } | {
1403
+ id: string;
1404
+ label: string;
1405
+ to: {
1406
+ kind: "page";
1407
+ page: string;
1408
+ params?: Record<string, AppBindingRef> | undefined;
1409
+ } | {
1410
+ kind: "href";
1411
+ href: string;
1412
+ };
1413
+ type: "link";
1414
+ box: {
1415
+ x: number;
1416
+ y: number;
1417
+ h: number;
1418
+ w: number;
1419
+ };
1420
+ title?: string | undefined;
1421
+ hideOnPhone?: boolean | undefined;
1422
+ })[];
1423
+ }>, "many">;
1424
+ queries: z.ZodArray<z.ZodObject<{
1425
+ id: z.ZodString;
1426
+ source: z.ZodString;
1427
+ kind: z.ZodEnum<["sql", "graphql", "rest", "mcp", "crew"]>;
1428
+ description: z.ZodOptional<z.ZodString>;
1429
+ params: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1430
+ type: z.ZodLiteral<"object">;
1431
+ properties: z.ZodRecord<z.ZodString, z.ZodObject<{
1432
+ type: z.ZodEnum<["string", "number", "integer", "boolean", "array"]>;
1433
+ items: z.ZodOptional<z.ZodObject<{
1434
+ type: z.ZodEnum<["string", "number", "integer"]>;
1435
+ }, "strict", z.ZodTypeAny, {
1436
+ type: "string" | "number" | "integer";
1437
+ }, {
1438
+ type: "string" | "number" | "integer";
1439
+ }>>;
1440
+ format: z.ZodOptional<z.ZodEnum<["date", "date-time", "uuid", "email"]>>;
1441
+ enum: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">>;
1442
+ minimum: z.ZodOptional<z.ZodNumber>;
1443
+ maximum: z.ZodOptional<z.ZodNumber>;
1444
+ minLength: z.ZodOptional<z.ZodNumber>;
1445
+ maxLength: z.ZodOptional<z.ZodNumber>;
1446
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1447
+ description: z.ZodOptional<z.ZodString>;
1448
+ from: z.ZodOptional<z.ZodEnum<["viewer.email", "viewer.name", "viewer.id", "viewer.groups"]>>;
1449
+ }, "strict", z.ZodTypeAny, {
1450
+ type: "string" | "number" | "boolean" | "integer" | "array";
1451
+ default?: string | number | boolean | undefined;
1452
+ items?: {
1453
+ type: "string" | "number" | "integer";
1454
+ } | undefined;
1455
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1456
+ description?: string | undefined;
1457
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1458
+ minimum?: number | undefined;
1459
+ maximum?: number | undefined;
1460
+ minLength?: number | undefined;
1461
+ maxLength?: number | undefined;
1462
+ enum?: (string | number)[] | undefined;
1463
+ }, {
1464
+ type: "string" | "number" | "boolean" | "integer" | "array";
1465
+ default?: string | number | boolean | undefined;
1466
+ items?: {
1467
+ type: "string" | "number" | "integer";
1468
+ } | undefined;
1469
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1470
+ description?: string | undefined;
1471
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1472
+ minimum?: number | undefined;
1473
+ maximum?: number | undefined;
1474
+ minLength?: number | undefined;
1475
+ maxLength?: number | undefined;
1476
+ enum?: (string | number)[] | undefined;
1477
+ }>>;
1478
+ required: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1479
+ }, "strict", z.ZodTypeAny, {
1480
+ type: "object";
1481
+ properties: Record<string, {
1482
+ type: "string" | "number" | "boolean" | "integer" | "array";
1483
+ default?: string | number | boolean | undefined;
1484
+ items?: {
1485
+ type: "string" | "number" | "integer";
1486
+ } | undefined;
1487
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1488
+ description?: string | undefined;
1489
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1490
+ minimum?: number | undefined;
1491
+ maximum?: number | undefined;
1492
+ minLength?: number | undefined;
1493
+ maxLength?: number | undefined;
1494
+ enum?: (string | number)[] | undefined;
1495
+ }>;
1496
+ required?: string[] | undefined;
1497
+ }, {
1498
+ type: "object";
1499
+ properties: Record<string, {
1500
+ type: "string" | "number" | "boolean" | "integer" | "array";
1501
+ default?: string | number | boolean | undefined;
1502
+ items?: {
1503
+ type: "string" | "number" | "integer";
1504
+ } | undefined;
1505
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1506
+ description?: string | undefined;
1507
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1508
+ minimum?: number | undefined;
1509
+ maximum?: number | undefined;
1510
+ minLength?: number | undefined;
1511
+ maxLength?: number | undefined;
1512
+ enum?: (string | number)[] | undefined;
1513
+ }>;
1514
+ required?: string[] | undefined;
1515
+ }>, {
1516
+ type: "object";
1517
+ properties: Record<string, {
1518
+ type: "string" | "number" | "boolean" | "integer" | "array";
1519
+ default?: string | number | boolean | undefined;
1520
+ items?: {
1521
+ type: "string" | "number" | "integer";
1522
+ } | undefined;
1523
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1524
+ description?: string | undefined;
1525
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1526
+ minimum?: number | undefined;
1527
+ maximum?: number | undefined;
1528
+ minLength?: number | undefined;
1529
+ maxLength?: number | undefined;
1530
+ enum?: (string | number)[] | undefined;
1531
+ }>;
1532
+ required?: string[] | undefined;
1533
+ }, {
1534
+ type: "object";
1535
+ properties: Record<string, {
1536
+ type: "string" | "number" | "boolean" | "integer" | "array";
1537
+ default?: string | number | boolean | undefined;
1538
+ items?: {
1539
+ type: "string" | "number" | "integer";
1540
+ } | undefined;
1541
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1542
+ description?: string | undefined;
1543
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1544
+ minimum?: number | undefined;
1545
+ maximum?: number | undefined;
1546
+ minLength?: number | undefined;
1547
+ maxLength?: number | undefined;
1548
+ enum?: (string | number)[] | undefined;
1549
+ }>;
1550
+ required?: string[] | undefined;
1551
+ }>>;
1552
+ output: z.ZodArray<z.ZodObject<{
1553
+ name: z.ZodString;
1554
+ type: z.ZodEnum<["string", "number", "integer", "boolean", "date", "datetime"]>;
1555
+ nullable: z.ZodOptional<z.ZodBoolean>;
1556
+ }, "strict", z.ZodTypeAny, {
1557
+ name: string;
1558
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
1559
+ nullable?: boolean | undefined;
1560
+ }, {
1561
+ name: string;
1562
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
1563
+ nullable?: boolean | undefined;
1564
+ }>, "many">;
1565
+ rowPath: z.ZodOptional<z.ZodString>;
1566
+ morePath: z.ZodOptional<z.ZodString>;
1567
+ refresh: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
1568
+ mode: z.ZodLiteral<"load">;
1569
+ }, "strict", z.ZodTypeAny, {
1570
+ mode: "load";
1571
+ }, {
1572
+ mode: "load";
1573
+ }>, z.ZodObject<{
1574
+ mode: z.ZodLiteral<"every">;
1575
+ seconds: z.ZodNumber;
1576
+ }, "strict", z.ZodTypeAny, {
1577
+ mode: "every";
1578
+ seconds: number;
1579
+ }, {
1580
+ mode: "every";
1581
+ seconds: number;
1582
+ }>, z.ZodObject<{
1583
+ mode: z.ZodLiteral<"events">;
1584
+ }, "strict", z.ZodTypeAny, {
1585
+ mode: "events";
1586
+ }, {
1587
+ mode: "events";
1588
+ }>]>>;
1589
+ public: z.ZodOptional<z.ZodBoolean>;
1590
+ }, "strict", z.ZodTypeAny, {
1591
+ source: string;
1592
+ id: string;
1593
+ kind: "mcp" | "crew" | "rest" | "sql" | "graphql";
1594
+ output: {
1595
+ name: string;
1596
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
1597
+ nullable?: boolean | undefined;
1598
+ }[];
1599
+ description?: string | undefined;
1600
+ public?: boolean | undefined;
1601
+ refresh?: {
1602
+ mode: "load";
1603
+ } | {
1604
+ mode: "every";
1605
+ seconds: number;
1606
+ } | {
1607
+ mode: "events";
1608
+ } | undefined;
1609
+ params?: {
1610
+ type: "object";
1611
+ properties: Record<string, {
1612
+ type: "string" | "number" | "boolean" | "integer" | "array";
1613
+ default?: string | number | boolean | undefined;
1614
+ items?: {
1615
+ type: "string" | "number" | "integer";
1616
+ } | undefined;
1617
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1618
+ description?: string | undefined;
1619
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1620
+ minimum?: number | undefined;
1621
+ maximum?: number | undefined;
1622
+ minLength?: number | undefined;
1623
+ maxLength?: number | undefined;
1624
+ enum?: (string | number)[] | undefined;
1625
+ }>;
1626
+ required?: string[] | undefined;
1627
+ } | undefined;
1628
+ rowPath?: string | undefined;
1629
+ morePath?: string | undefined;
1630
+ }, {
1631
+ source: string;
1632
+ id: string;
1633
+ kind: "mcp" | "crew" | "rest" | "sql" | "graphql";
1634
+ output: {
1635
+ name: string;
1636
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
1637
+ nullable?: boolean | undefined;
1638
+ }[];
1639
+ description?: string | undefined;
1640
+ public?: boolean | undefined;
1641
+ refresh?: {
1642
+ mode: "load";
1643
+ } | {
1644
+ mode: "every";
1645
+ seconds: number;
1646
+ } | {
1647
+ mode: "events";
1648
+ } | undefined;
1649
+ params?: {
1650
+ type: "object";
1651
+ properties: Record<string, {
1652
+ type: "string" | "number" | "boolean" | "integer" | "array";
1653
+ default?: string | number | boolean | undefined;
1654
+ items?: {
1655
+ type: "string" | "number" | "integer";
1656
+ } | undefined;
1657
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1658
+ description?: string | undefined;
1659
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1660
+ minimum?: number | undefined;
1661
+ maximum?: number | undefined;
1662
+ minLength?: number | undefined;
1663
+ maxLength?: number | undefined;
1664
+ enum?: (string | number)[] | undefined;
1665
+ }>;
1666
+ required?: string[] | undefined;
1667
+ } | undefined;
1668
+ rowPath?: string | undefined;
1669
+ morePath?: string | undefined;
1670
+ }>, "many">;
1671
+ actions: z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1672
+ id: z.ZodString;
1673
+ kind: z.ZodLiteral<"api">;
1674
+ source: z.ZodString;
1675
+ call: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1676
+ kind: z.ZodLiteral<"tool">;
1677
+ tool: z.ZodString;
1678
+ }, "strict", z.ZodTypeAny, {
1679
+ tool: string;
1680
+ kind: "tool";
1681
+ }, {
1682
+ tool: string;
1683
+ kind: "tool";
1684
+ }>, z.ZodObject<{
1685
+ kind: z.ZodLiteral<"mutation">;
1686
+ mutation: z.ZodEffects<z.ZodString, string, string>;
1687
+ }, "strict", z.ZodTypeAny, {
1688
+ kind: "mutation";
1689
+ mutation: string;
1690
+ }, {
1691
+ kind: "mutation";
1692
+ mutation: string;
1693
+ }>]>;
1694
+ args: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1695
+ kind: z.ZodLiteral<"param">;
1696
+ name: z.ZodString;
1697
+ }, "strict", z.ZodTypeAny, {
1698
+ name: string;
1699
+ kind: "param";
1700
+ }, {
1701
+ name: string;
1702
+ kind: "param";
1703
+ }>, z.ZodObject<{
1704
+ kind: z.ZodLiteral<"literal">;
1705
+ value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>;
1706
+ }, "strict", z.ZodTypeAny, {
1707
+ value: string | number | boolean | null;
1708
+ kind: "literal";
1709
+ }, {
1710
+ value: string | number | boolean | null;
1711
+ kind: "literal";
1712
+ }>, z.ZodObject<{
1713
+ kind: z.ZodLiteral<"viewer">;
1714
+ claim: z.ZodEnum<["email", "name", "id"]>;
1715
+ }, "strict", z.ZodTypeAny, {
1716
+ kind: "viewer";
1717
+ claim: "id" | "name" | "email";
1718
+ }, {
1719
+ kind: "viewer";
1720
+ claim: "id" | "name" | "email";
1721
+ }>, z.ZodObject<{
1722
+ kind: z.ZodLiteral<"crew">;
1723
+ value: z.ZodEnum<["now", "uuid"]>;
1724
+ }, "strict", z.ZodTypeAny, {
1725
+ value: "now" | "uuid";
1726
+ kind: "crew";
1727
+ }, {
1728
+ value: "now" | "uuid";
1729
+ kind: "crew";
1730
+ }>]>>, Record<string, {
1731
+ name: string;
1732
+ kind: "param";
1733
+ } | {
1734
+ value: string | number | boolean | null;
1735
+ kind: "literal";
1736
+ } | {
1737
+ kind: "viewer";
1738
+ claim: "id" | "name" | "email";
1739
+ } | {
1740
+ value: "now" | "uuid";
1741
+ kind: "crew";
1742
+ }>, Record<string, {
1743
+ name: string;
1744
+ kind: "param";
1745
+ } | {
1746
+ value: string | number | boolean | null;
1747
+ kind: "literal";
1748
+ } | {
1749
+ kind: "viewer";
1750
+ claim: "id" | "name" | "email";
1751
+ } | {
1752
+ value: "now" | "uuid";
1753
+ kind: "crew";
1754
+ }>>;
1755
+ params: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1756
+ type: z.ZodLiteral<"object">;
1757
+ properties: z.ZodRecord<z.ZodString, z.ZodObject<{
1758
+ type: z.ZodEnum<["string", "number", "integer", "boolean", "array"]>;
1759
+ items: z.ZodOptional<z.ZodObject<{
1760
+ type: z.ZodEnum<["string", "number", "integer"]>;
1761
+ }, "strict", z.ZodTypeAny, {
1762
+ type: "string" | "number" | "integer";
1763
+ }, {
1764
+ type: "string" | "number" | "integer";
1765
+ }>>;
1766
+ format: z.ZodOptional<z.ZodEnum<["date", "date-time", "uuid", "email"]>>;
1767
+ enum: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">>;
1768
+ minimum: z.ZodOptional<z.ZodNumber>;
1769
+ maximum: z.ZodOptional<z.ZodNumber>;
1770
+ minLength: z.ZodOptional<z.ZodNumber>;
1771
+ maxLength: z.ZodOptional<z.ZodNumber>;
1772
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
1773
+ description: z.ZodOptional<z.ZodString>;
1774
+ from: z.ZodOptional<z.ZodEnum<["viewer.email", "viewer.name", "viewer.id", "viewer.groups"]>>;
1775
+ }, "strict", z.ZodTypeAny, {
1776
+ type: "string" | "number" | "boolean" | "integer" | "array";
1777
+ default?: string | number | boolean | undefined;
1778
+ items?: {
1779
+ type: "string" | "number" | "integer";
1780
+ } | undefined;
1781
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1782
+ description?: string | undefined;
1783
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1784
+ minimum?: number | undefined;
1785
+ maximum?: number | undefined;
1786
+ minLength?: number | undefined;
1787
+ maxLength?: number | undefined;
1788
+ enum?: (string | number)[] | undefined;
1789
+ }, {
1790
+ type: "string" | "number" | "boolean" | "integer" | "array";
1791
+ default?: string | number | boolean | undefined;
1792
+ items?: {
1793
+ type: "string" | "number" | "integer";
1794
+ } | undefined;
1795
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1796
+ description?: string | undefined;
1797
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1798
+ minimum?: number | undefined;
1799
+ maximum?: number | undefined;
1800
+ minLength?: number | undefined;
1801
+ maxLength?: number | undefined;
1802
+ enum?: (string | number)[] | undefined;
1803
+ }>>;
1804
+ required: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1805
+ }, "strict", z.ZodTypeAny, {
1806
+ type: "object";
1807
+ properties: Record<string, {
1808
+ type: "string" | "number" | "boolean" | "integer" | "array";
1809
+ default?: string | number | boolean | undefined;
1810
+ items?: {
1811
+ type: "string" | "number" | "integer";
1812
+ } | undefined;
1813
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1814
+ description?: string | undefined;
1815
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1816
+ minimum?: number | undefined;
1817
+ maximum?: number | undefined;
1818
+ minLength?: number | undefined;
1819
+ maxLength?: number | undefined;
1820
+ enum?: (string | number)[] | undefined;
1821
+ }>;
1822
+ required?: string[] | undefined;
1823
+ }, {
1824
+ type: "object";
1825
+ properties: Record<string, {
1826
+ type: "string" | "number" | "boolean" | "integer" | "array";
1827
+ default?: string | number | boolean | undefined;
1828
+ items?: {
1829
+ type: "string" | "number" | "integer";
1830
+ } | undefined;
1831
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1832
+ description?: string | undefined;
1833
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1834
+ minimum?: number | undefined;
1835
+ maximum?: number | undefined;
1836
+ minLength?: number | undefined;
1837
+ maxLength?: number | undefined;
1838
+ enum?: (string | number)[] | undefined;
1839
+ }>;
1840
+ required?: string[] | undefined;
1841
+ }>, {
1842
+ type: "object";
1843
+ properties: Record<string, {
1844
+ type: "string" | "number" | "boolean" | "integer" | "array";
1845
+ default?: string | number | boolean | undefined;
1846
+ items?: {
1847
+ type: "string" | "number" | "integer";
1848
+ } | undefined;
1849
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1850
+ description?: string | undefined;
1851
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1852
+ minimum?: number | undefined;
1853
+ maximum?: number | undefined;
1854
+ minLength?: number | undefined;
1855
+ maxLength?: number | undefined;
1856
+ enum?: (string | number)[] | undefined;
1857
+ }>;
1858
+ required?: string[] | undefined;
1859
+ }, {
1860
+ type: "object";
1861
+ properties: Record<string, {
1862
+ type: "string" | "number" | "boolean" | "integer" | "array";
1863
+ default?: string | number | boolean | undefined;
1864
+ items?: {
1865
+ type: "string" | "number" | "integer";
1866
+ } | undefined;
1867
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1868
+ description?: string | undefined;
1869
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1870
+ minimum?: number | undefined;
1871
+ maximum?: number | undefined;
1872
+ minLength?: number | undefined;
1873
+ maxLength?: number | undefined;
1874
+ enum?: (string | number)[] | undefined;
1875
+ }>;
1876
+ required?: string[] | undefined;
1877
+ }>>;
1878
+ description: z.ZodOptional<z.ZodString>;
1879
+ }, "strict", z.ZodTypeAny, {
1880
+ source: string;
1881
+ id: string;
1882
+ kind: "api";
1883
+ args: Record<string, {
1884
+ name: string;
1885
+ kind: "param";
1886
+ } | {
1887
+ value: string | number | boolean | null;
1888
+ kind: "literal";
1889
+ } | {
1890
+ kind: "viewer";
1891
+ claim: "id" | "name" | "email";
1892
+ } | {
1893
+ value: "now" | "uuid";
1894
+ kind: "crew";
1895
+ }>;
1896
+ call: {
1897
+ tool: string;
1898
+ kind: "tool";
1899
+ } | {
1900
+ kind: "mutation";
1901
+ mutation: string;
1902
+ };
1903
+ description?: string | undefined;
1904
+ params?: {
1905
+ type: "object";
1906
+ properties: Record<string, {
1907
+ type: "string" | "number" | "boolean" | "integer" | "array";
1908
+ default?: string | number | boolean | undefined;
1909
+ items?: {
1910
+ type: "string" | "number" | "integer";
1911
+ } | undefined;
1912
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1913
+ description?: string | undefined;
1914
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1915
+ minimum?: number | undefined;
1916
+ maximum?: number | undefined;
1917
+ minLength?: number | undefined;
1918
+ maxLength?: number | undefined;
1919
+ enum?: (string | number)[] | undefined;
1920
+ }>;
1921
+ required?: string[] | undefined;
1922
+ } | undefined;
1923
+ }, {
1924
+ source: string;
1925
+ id: string;
1926
+ kind: "api";
1927
+ args: Record<string, {
1928
+ name: string;
1929
+ kind: "param";
1930
+ } | {
1931
+ value: string | number | boolean | null;
1932
+ kind: "literal";
1933
+ } | {
1934
+ kind: "viewer";
1935
+ claim: "id" | "name" | "email";
1936
+ } | {
1937
+ value: "now" | "uuid";
1938
+ kind: "crew";
1939
+ }>;
1940
+ call: {
1941
+ tool: string;
1942
+ kind: "tool";
1943
+ } | {
1944
+ kind: "mutation";
1945
+ mutation: string;
1946
+ };
1947
+ description?: string | undefined;
1948
+ params?: {
1949
+ type: "object";
1950
+ properties: Record<string, {
1951
+ type: "string" | "number" | "boolean" | "integer" | "array";
1952
+ default?: string | number | boolean | undefined;
1953
+ items?: {
1954
+ type: "string" | "number" | "integer";
1955
+ } | undefined;
1956
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
1957
+ description?: string | undefined;
1958
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
1959
+ minimum?: number | undefined;
1960
+ maximum?: number | undefined;
1961
+ minLength?: number | undefined;
1962
+ maxLength?: number | undefined;
1963
+ enum?: (string | number)[] | undefined;
1964
+ }>;
1965
+ required?: string[] | undefined;
1966
+ } | undefined;
1967
+ }>, z.ZodObject<{
1968
+ id: z.ZodString;
1969
+ kind: z.ZodLiteral<"row-write">;
1970
+ source: z.ZodString;
1971
+ table: z.ZodString;
1972
+ op: z.ZodEnum<["insert", "update", "delete"]>;
1973
+ set: z.ZodOptional<z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1974
+ kind: z.ZodLiteral<"param">;
1975
+ name: z.ZodString;
1976
+ }, "strict", z.ZodTypeAny, {
1977
+ name: string;
1978
+ kind: "param";
1979
+ }, {
1980
+ name: string;
1981
+ kind: "param";
1982
+ }>, z.ZodObject<{
1983
+ kind: z.ZodLiteral<"literal">;
1984
+ value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>;
1985
+ }, "strict", z.ZodTypeAny, {
1986
+ value: string | number | boolean | null;
1987
+ kind: "literal";
1988
+ }, {
1989
+ value: string | number | boolean | null;
1990
+ kind: "literal";
1991
+ }>, z.ZodObject<{
1992
+ kind: z.ZodLiteral<"viewer">;
1993
+ claim: z.ZodEnum<["email", "name", "id"]>;
1994
+ }, "strict", z.ZodTypeAny, {
1995
+ kind: "viewer";
1996
+ claim: "id" | "name" | "email";
1997
+ }, {
1998
+ kind: "viewer";
1999
+ claim: "id" | "name" | "email";
2000
+ }>, z.ZodObject<{
2001
+ kind: z.ZodLiteral<"crew">;
2002
+ value: z.ZodEnum<["now", "uuid"]>;
2003
+ }, "strict", z.ZodTypeAny, {
2004
+ value: "now" | "uuid";
2005
+ kind: "crew";
2006
+ }, {
2007
+ value: "now" | "uuid";
2008
+ kind: "crew";
2009
+ }>]>>, Record<string, {
2010
+ name: string;
2011
+ kind: "param";
2012
+ } | {
2013
+ value: string | number | boolean | null;
2014
+ kind: "literal";
2015
+ } | {
2016
+ kind: "viewer";
2017
+ claim: "id" | "name" | "email";
2018
+ } | {
2019
+ value: "now" | "uuid";
2020
+ kind: "crew";
2021
+ }>, Record<string, {
2022
+ name: string;
2023
+ kind: "param";
2024
+ } | {
2025
+ value: string | number | boolean | null;
2026
+ kind: "literal";
2027
+ } | {
2028
+ kind: "viewer";
2029
+ claim: "id" | "name" | "email";
2030
+ } | {
2031
+ value: "now" | "uuid";
2032
+ kind: "crew";
2033
+ }>>>;
2034
+ key: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodObject<{
2035
+ kind: z.ZodLiteral<"param">;
2036
+ name: z.ZodString;
2037
+ }, "strict", z.ZodTypeAny, {
2038
+ name: string;
2039
+ kind: "param";
2040
+ }, {
2041
+ name: string;
2042
+ kind: "param";
2043
+ }>>, Record<string, {
2044
+ name: string;
2045
+ kind: "param";
2046
+ }>, Record<string, {
2047
+ name: string;
2048
+ kind: "param";
2049
+ }>>;
2050
+ params: z.ZodOptional<z.ZodEffects<z.ZodObject<{
2051
+ type: z.ZodLiteral<"object">;
2052
+ properties: z.ZodRecord<z.ZodString, z.ZodObject<{
2053
+ type: z.ZodEnum<["string", "number", "integer", "boolean", "array"]>;
2054
+ items: z.ZodOptional<z.ZodObject<{
2055
+ type: z.ZodEnum<["string", "number", "integer"]>;
2056
+ }, "strict", z.ZodTypeAny, {
2057
+ type: "string" | "number" | "integer";
2058
+ }, {
2059
+ type: "string" | "number" | "integer";
2060
+ }>>;
2061
+ format: z.ZodOptional<z.ZodEnum<["date", "date-time", "uuid", "email"]>>;
2062
+ enum: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">>;
2063
+ minimum: z.ZodOptional<z.ZodNumber>;
2064
+ maximum: z.ZodOptional<z.ZodNumber>;
2065
+ minLength: z.ZodOptional<z.ZodNumber>;
2066
+ maxLength: z.ZodOptional<z.ZodNumber>;
2067
+ default: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>;
2068
+ description: z.ZodOptional<z.ZodString>;
2069
+ from: z.ZodOptional<z.ZodEnum<["viewer.email", "viewer.name", "viewer.id", "viewer.groups"]>>;
2070
+ }, "strict", z.ZodTypeAny, {
2071
+ type: "string" | "number" | "boolean" | "integer" | "array";
2072
+ default?: string | number | boolean | undefined;
2073
+ items?: {
2074
+ type: "string" | "number" | "integer";
2075
+ } | undefined;
2076
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2077
+ description?: string | undefined;
2078
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2079
+ minimum?: number | undefined;
2080
+ maximum?: number | undefined;
2081
+ minLength?: number | undefined;
2082
+ maxLength?: number | undefined;
2083
+ enum?: (string | number)[] | undefined;
2084
+ }, {
2085
+ type: "string" | "number" | "boolean" | "integer" | "array";
2086
+ default?: string | number | boolean | undefined;
2087
+ items?: {
2088
+ type: "string" | "number" | "integer";
2089
+ } | undefined;
2090
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2091
+ description?: string | undefined;
2092
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2093
+ minimum?: number | undefined;
2094
+ maximum?: number | undefined;
2095
+ minLength?: number | undefined;
2096
+ maxLength?: number | undefined;
2097
+ enum?: (string | number)[] | undefined;
2098
+ }>>;
2099
+ required: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2100
+ }, "strict", z.ZodTypeAny, {
2101
+ type: "object";
2102
+ properties: Record<string, {
2103
+ type: "string" | "number" | "boolean" | "integer" | "array";
2104
+ default?: string | number | boolean | undefined;
2105
+ items?: {
2106
+ type: "string" | "number" | "integer";
2107
+ } | undefined;
2108
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2109
+ description?: string | undefined;
2110
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2111
+ minimum?: number | undefined;
2112
+ maximum?: number | undefined;
2113
+ minLength?: number | undefined;
2114
+ maxLength?: number | undefined;
2115
+ enum?: (string | number)[] | undefined;
2116
+ }>;
2117
+ required?: string[] | undefined;
2118
+ }, {
2119
+ type: "object";
2120
+ properties: Record<string, {
2121
+ type: "string" | "number" | "boolean" | "integer" | "array";
2122
+ default?: string | number | boolean | undefined;
2123
+ items?: {
2124
+ type: "string" | "number" | "integer";
2125
+ } | undefined;
2126
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2127
+ description?: string | undefined;
2128
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2129
+ minimum?: number | undefined;
2130
+ maximum?: number | undefined;
2131
+ minLength?: number | undefined;
2132
+ maxLength?: number | undefined;
2133
+ enum?: (string | number)[] | undefined;
2134
+ }>;
2135
+ required?: string[] | undefined;
2136
+ }>, {
2137
+ type: "object";
2138
+ properties: Record<string, {
2139
+ type: "string" | "number" | "boolean" | "integer" | "array";
2140
+ default?: string | number | boolean | undefined;
2141
+ items?: {
2142
+ type: "string" | "number" | "integer";
2143
+ } | undefined;
2144
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2145
+ description?: string | undefined;
2146
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2147
+ minimum?: number | undefined;
2148
+ maximum?: number | undefined;
2149
+ minLength?: number | undefined;
2150
+ maxLength?: number | undefined;
2151
+ enum?: (string | number)[] | undefined;
2152
+ }>;
2153
+ required?: string[] | undefined;
2154
+ }, {
2155
+ type: "object";
2156
+ properties: Record<string, {
2157
+ type: "string" | "number" | "boolean" | "integer" | "array";
2158
+ default?: string | number | boolean | undefined;
2159
+ items?: {
2160
+ type: "string" | "number" | "integer";
2161
+ } | undefined;
2162
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2163
+ description?: string | undefined;
2164
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2165
+ minimum?: number | undefined;
2166
+ maximum?: number | undefined;
2167
+ minLength?: number | undefined;
2168
+ maxLength?: number | undefined;
2169
+ enum?: (string | number)[] | undefined;
2170
+ }>;
2171
+ required?: string[] | undefined;
2172
+ }>>;
2173
+ description: z.ZodOptional<z.ZodString>;
2174
+ }, "strict", z.ZodTypeAny, {
2175
+ source: string;
2176
+ id: string;
2177
+ kind: "row-write";
2178
+ key: Record<string, {
2179
+ name: string;
2180
+ kind: "param";
2181
+ }>;
2182
+ op: "delete" | "insert" | "update";
2183
+ table: string;
2184
+ description?: string | undefined;
2185
+ set?: Record<string, {
2186
+ name: string;
2187
+ kind: "param";
2188
+ } | {
2189
+ value: string | number | boolean | null;
2190
+ kind: "literal";
2191
+ } | {
2192
+ kind: "viewer";
2193
+ claim: "id" | "name" | "email";
2194
+ } | {
2195
+ value: "now" | "uuid";
2196
+ kind: "crew";
2197
+ }> | undefined;
2198
+ params?: {
2199
+ type: "object";
2200
+ properties: Record<string, {
2201
+ type: "string" | "number" | "boolean" | "integer" | "array";
2202
+ default?: string | number | boolean | undefined;
2203
+ items?: {
2204
+ type: "string" | "number" | "integer";
2205
+ } | undefined;
2206
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2207
+ description?: string | undefined;
2208
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2209
+ minimum?: number | undefined;
2210
+ maximum?: number | undefined;
2211
+ minLength?: number | undefined;
2212
+ maxLength?: number | undefined;
2213
+ enum?: (string | number)[] | undefined;
2214
+ }>;
2215
+ required?: string[] | undefined;
2216
+ } | undefined;
2217
+ }, {
2218
+ source: string;
2219
+ id: string;
2220
+ kind: "row-write";
2221
+ key: Record<string, {
2222
+ name: string;
2223
+ kind: "param";
2224
+ }>;
2225
+ op: "delete" | "insert" | "update";
2226
+ table: string;
2227
+ description?: string | undefined;
2228
+ set?: Record<string, {
2229
+ name: string;
2230
+ kind: "param";
2231
+ } | {
2232
+ value: string | number | boolean | null;
2233
+ kind: "literal";
2234
+ } | {
2235
+ kind: "viewer";
2236
+ claim: "id" | "name" | "email";
2237
+ } | {
2238
+ value: "now" | "uuid";
2239
+ kind: "crew";
2240
+ }> | undefined;
2241
+ params?: {
2242
+ type: "object";
2243
+ properties: Record<string, {
2244
+ type: "string" | "number" | "boolean" | "integer" | "array";
2245
+ default?: string | number | boolean | undefined;
2246
+ items?: {
2247
+ type: "string" | "number" | "integer";
2248
+ } | undefined;
2249
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2250
+ description?: string | undefined;
2251
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2252
+ minimum?: number | undefined;
2253
+ maximum?: number | undefined;
2254
+ minLength?: number | undefined;
2255
+ maxLength?: number | undefined;
2256
+ enum?: (string | number)[] | undefined;
2257
+ }>;
2258
+ required?: string[] | undefined;
2259
+ } | undefined;
2260
+ }>]>, "many">;
2261
+ linkHosts: z.ZodArray<z.ZodString, "many">;
2262
+ }, "strict", z.ZodTypeAny, {
2263
+ name: string;
2264
+ schema: "wicked.apps/v1";
2265
+ actions: ({
2266
+ source: string;
2267
+ id: string;
2268
+ kind: "api";
2269
+ args: Record<string, {
2270
+ name: string;
2271
+ kind: "param";
2272
+ } | {
2273
+ value: string | number | boolean | null;
2274
+ kind: "literal";
2275
+ } | {
2276
+ kind: "viewer";
2277
+ claim: "id" | "name" | "email";
2278
+ } | {
2279
+ value: "now" | "uuid";
2280
+ kind: "crew";
2281
+ }>;
2282
+ call: {
2283
+ tool: string;
2284
+ kind: "tool";
2285
+ } | {
2286
+ kind: "mutation";
2287
+ mutation: string;
2288
+ };
2289
+ description?: string | undefined;
2290
+ params?: {
2291
+ type: "object";
2292
+ properties: Record<string, {
2293
+ type: "string" | "number" | "boolean" | "integer" | "array";
2294
+ default?: string | number | boolean | undefined;
2295
+ items?: {
2296
+ type: "string" | "number" | "integer";
2297
+ } | undefined;
2298
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2299
+ description?: string | undefined;
2300
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2301
+ minimum?: number | undefined;
2302
+ maximum?: number | undefined;
2303
+ minLength?: number | undefined;
2304
+ maxLength?: number | undefined;
2305
+ enum?: (string | number)[] | undefined;
2306
+ }>;
2307
+ required?: string[] | undefined;
2308
+ } | undefined;
2309
+ } | {
2310
+ source: string;
2311
+ id: string;
2312
+ kind: "row-write";
2313
+ key: Record<string, {
2314
+ name: string;
2315
+ kind: "param";
2316
+ }>;
2317
+ op: "delete" | "insert" | "update";
2318
+ table: string;
2319
+ description?: string | undefined;
2320
+ set?: Record<string, {
2321
+ name: string;
2322
+ kind: "param";
2323
+ } | {
2324
+ value: string | number | boolean | null;
2325
+ kind: "literal";
2326
+ } | {
2327
+ kind: "viewer";
2328
+ claim: "id" | "name" | "email";
2329
+ } | {
2330
+ value: "now" | "uuid";
2331
+ kind: "crew";
2332
+ }> | undefined;
2333
+ params?: {
2334
+ type: "object";
2335
+ properties: Record<string, {
2336
+ type: "string" | "number" | "boolean" | "integer" | "array";
2337
+ default?: string | number | boolean | undefined;
2338
+ items?: {
2339
+ type: "string" | "number" | "integer";
2340
+ } | undefined;
2341
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2342
+ description?: string | undefined;
2343
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2344
+ minimum?: number | undefined;
2345
+ maximum?: number | undefined;
2346
+ minLength?: number | undefined;
2347
+ maxLength?: number | undefined;
2348
+ enum?: (string | number)[] | undefined;
2349
+ }>;
2350
+ required?: string[] | undefined;
2351
+ } | undefined;
2352
+ })[];
2353
+ pages: {
2354
+ title: string;
2355
+ id: string;
2356
+ components: ({
2357
+ id: string;
2358
+ data: {
2359
+ query: string;
2360
+ params?: Record<string, AppBindingRef> | undefined;
2361
+ };
2362
+ type: "table";
2363
+ box: {
2364
+ x: number;
2365
+ y: number;
2366
+ h: number;
2367
+ w: number;
2368
+ };
2369
+ title?: string | undefined;
2370
+ pageSize?: number | undefined;
2371
+ columns?: {
2372
+ column: string;
2373
+ label?: string | undefined;
2374
+ format?: {
2375
+ kind: "currency";
2376
+ currency: string;
2377
+ decimals?: number | undefined;
2378
+ } | {
2379
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
2380
+ decimals?: number | undefined;
2381
+ } | undefined;
2382
+ }[] | undefined;
2383
+ rowActions?: {
2384
+ label: string;
2385
+ action: string;
2386
+ params?: Record<string, AppBindingRef> | undefined;
2387
+ }[] | undefined;
2388
+ hideOnPhone?: boolean | undefined;
2389
+ } | {
2390
+ x: string;
2391
+ id: string;
2392
+ data: {
2393
+ query: string;
2394
+ params?: Record<string, AppBindingRef> | undefined;
2395
+ };
2396
+ type: "chart";
2397
+ chart: "area" | "line" | "bar" | "pie";
2398
+ series: {
2399
+ column: string;
2400
+ label?: string | undefined;
2401
+ color?: string | undefined;
2402
+ }[];
2403
+ box: {
2404
+ x: number;
2405
+ y: number;
2406
+ h: number;
2407
+ w: number;
2408
+ };
2409
+ title?: string | undefined;
2410
+ hideOnPhone?: boolean | undefined;
2411
+ stacked?: boolean | undefined;
2412
+ } | {
2413
+ id: string;
2414
+ value: string;
2415
+ data: {
2416
+ query: string;
2417
+ params?: Record<string, AppBindingRef> | undefined;
2418
+ };
2419
+ type: "kpi";
2420
+ box: {
2421
+ x: number;
2422
+ y: number;
2423
+ h: number;
2424
+ w: number;
2425
+ };
2426
+ title?: string | undefined;
2427
+ format?: {
2428
+ kind: "currency";
2429
+ currency: string;
2430
+ decimals?: number | undefined;
2431
+ } | {
2432
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
2433
+ decimals?: number | undefined;
2434
+ } | undefined;
2435
+ caption?: string | undefined;
2436
+ hideOnPhone?: boolean | undefined;
2437
+ delta?: string | undefined;
2438
+ } | {
2439
+ id: string;
2440
+ text: string;
2441
+ type: "text";
2442
+ box: {
2443
+ x: number;
2444
+ y: number;
2445
+ h: number;
2446
+ w: number;
2447
+ };
2448
+ title?: string | undefined;
2449
+ style?: "heading" | "body" | "caption" | undefined;
2450
+ hideOnPhone?: boolean | undefined;
2451
+ } | {
2452
+ id: string;
2453
+ filter: "search" | "select" | "date-range";
2454
+ type: "filter";
2455
+ box: {
2456
+ x: number;
2457
+ y: number;
2458
+ h: number;
2459
+ w: number;
2460
+ };
2461
+ title?: string | undefined;
2462
+ default?: string | {
2463
+ lastDays: number;
2464
+ } | undefined;
2465
+ label?: string | undefined;
2466
+ options?: {
2467
+ value: string;
2468
+ kind: "query";
2469
+ query: {
2470
+ query: string;
2471
+ params?: Record<string, AppBindingRef> | undefined;
2472
+ };
2473
+ label?: string | undefined;
2474
+ } | {
2475
+ values: {
2476
+ value: string;
2477
+ label?: string | undefined;
2478
+ }[];
2479
+ kind: "values";
2480
+ } | undefined;
2481
+ hideOnPhone?: boolean | undefined;
2482
+ } | {
2483
+ id: string;
2484
+ type: "form";
2485
+ fields: {
2486
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
2487
+ name: string;
2488
+ required?: boolean | undefined;
2489
+ label?: string | undefined;
2490
+ options?: {
2491
+ value: string;
2492
+ label?: string | undefined;
2493
+ }[] | undefined;
2494
+ }[];
2495
+ box: {
2496
+ x: number;
2497
+ y: number;
2498
+ h: number;
2499
+ w: number;
2500
+ };
2501
+ submit: {
2502
+ label: string;
2503
+ action: string;
2504
+ params?: Record<string, AppBindingRef> | undefined;
2505
+ };
2506
+ title?: string | undefined;
2507
+ hideOnPhone?: boolean | undefined;
2508
+ } | {
2509
+ id: string;
2510
+ action: {
2511
+ label: string;
2512
+ action: string;
2513
+ params?: Record<string, AppBindingRef> | undefined;
2514
+ };
2515
+ type: "button";
2516
+ box: {
2517
+ x: number;
2518
+ y: number;
2519
+ h: number;
2520
+ w: number;
2521
+ };
2522
+ title?: string | undefined;
2523
+ hideOnPhone?: boolean | undefined;
2524
+ } | {
2525
+ id: string;
2526
+ type: "image";
2527
+ src: string;
2528
+ box: {
2529
+ x: number;
2530
+ y: number;
2531
+ h: number;
2532
+ w: number;
2533
+ };
2534
+ alt: string;
2535
+ title?: string | undefined;
2536
+ hideOnPhone?: boolean | undefined;
2537
+ } | {
2538
+ id: string;
2539
+ label: string;
2540
+ to: {
2541
+ kind: "page";
2542
+ page: string;
2543
+ params?: Record<string, AppBindingRef> | undefined;
2544
+ } | {
2545
+ kind: "href";
2546
+ href: string;
2547
+ };
2548
+ type: "link";
2549
+ box: {
2550
+ x: number;
2551
+ y: number;
2552
+ h: number;
2553
+ w: number;
2554
+ };
2555
+ title?: string | undefined;
2556
+ hideOnPhone?: boolean | undefined;
2557
+ })[];
2558
+ }[];
2559
+ queries: {
2560
+ source: string;
2561
+ id: string;
2562
+ kind: "mcp" | "crew" | "rest" | "sql" | "graphql";
2563
+ output: {
2564
+ name: string;
2565
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
2566
+ nullable?: boolean | undefined;
2567
+ }[];
2568
+ description?: string | undefined;
2569
+ public?: boolean | undefined;
2570
+ refresh?: {
2571
+ mode: "load";
2572
+ } | {
2573
+ mode: "every";
2574
+ seconds: number;
2575
+ } | {
2576
+ mode: "events";
2577
+ } | undefined;
2578
+ params?: {
2579
+ type: "object";
2580
+ properties: Record<string, {
2581
+ type: "string" | "number" | "boolean" | "integer" | "array";
2582
+ default?: string | number | boolean | undefined;
2583
+ items?: {
2584
+ type: "string" | "number" | "integer";
2585
+ } | undefined;
2586
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2587
+ description?: string | undefined;
2588
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2589
+ minimum?: number | undefined;
2590
+ maximum?: number | undefined;
2591
+ minLength?: number | undefined;
2592
+ maxLength?: number | undefined;
2593
+ enum?: (string | number)[] | undefined;
2594
+ }>;
2595
+ required?: string[] | undefined;
2596
+ } | undefined;
2597
+ rowPath?: string | undefined;
2598
+ morePath?: string | undefined;
2599
+ }[];
2600
+ linkHosts: string[];
2601
+ description?: string | undefined;
2602
+ theme?: {
2603
+ mode?: "auto" | "light" | "dark" | undefined;
2604
+ accent?: string | undefined;
2605
+ palette?: string[] | undefined;
2606
+ density?: "comfortable" | "compact" | undefined;
2607
+ } | undefined;
2608
+ }, {
2609
+ name: string;
2610
+ schema: "wicked.apps/v1";
2611
+ actions: ({
2612
+ source: string;
2613
+ id: string;
2614
+ kind: "api";
2615
+ args: Record<string, {
2616
+ name: string;
2617
+ kind: "param";
2618
+ } | {
2619
+ value: string | number | boolean | null;
2620
+ kind: "literal";
2621
+ } | {
2622
+ kind: "viewer";
2623
+ claim: "id" | "name" | "email";
2624
+ } | {
2625
+ value: "now" | "uuid";
2626
+ kind: "crew";
2627
+ }>;
2628
+ call: {
2629
+ tool: string;
2630
+ kind: "tool";
2631
+ } | {
2632
+ kind: "mutation";
2633
+ mutation: string;
2634
+ };
2635
+ description?: string | undefined;
2636
+ params?: {
2637
+ type: "object";
2638
+ properties: Record<string, {
2639
+ type: "string" | "number" | "boolean" | "integer" | "array";
2640
+ default?: string | number | boolean | undefined;
2641
+ items?: {
2642
+ type: "string" | "number" | "integer";
2643
+ } | undefined;
2644
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2645
+ description?: string | undefined;
2646
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2647
+ minimum?: number | undefined;
2648
+ maximum?: number | undefined;
2649
+ minLength?: number | undefined;
2650
+ maxLength?: number | undefined;
2651
+ enum?: (string | number)[] | undefined;
2652
+ }>;
2653
+ required?: string[] | undefined;
2654
+ } | undefined;
2655
+ } | {
2656
+ source: string;
2657
+ id: string;
2658
+ kind: "row-write";
2659
+ key: Record<string, {
2660
+ name: string;
2661
+ kind: "param";
2662
+ }>;
2663
+ op: "delete" | "insert" | "update";
2664
+ table: string;
2665
+ description?: string | undefined;
2666
+ set?: Record<string, {
2667
+ name: string;
2668
+ kind: "param";
2669
+ } | {
2670
+ value: string | number | boolean | null;
2671
+ kind: "literal";
2672
+ } | {
2673
+ kind: "viewer";
2674
+ claim: "id" | "name" | "email";
2675
+ } | {
2676
+ value: "now" | "uuid";
2677
+ kind: "crew";
2678
+ }> | undefined;
2679
+ params?: {
2680
+ type: "object";
2681
+ properties: Record<string, {
2682
+ type: "string" | "number" | "boolean" | "integer" | "array";
2683
+ default?: string | number | boolean | undefined;
2684
+ items?: {
2685
+ type: "string" | "number" | "integer";
2686
+ } | undefined;
2687
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2688
+ description?: string | undefined;
2689
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2690
+ minimum?: number | undefined;
2691
+ maximum?: number | undefined;
2692
+ minLength?: number | undefined;
2693
+ maxLength?: number | undefined;
2694
+ enum?: (string | number)[] | undefined;
2695
+ }>;
2696
+ required?: string[] | undefined;
2697
+ } | undefined;
2698
+ })[];
2699
+ pages: {
2700
+ title: string;
2701
+ id: string;
2702
+ components: ({
2703
+ id: string;
2704
+ data: {
2705
+ query: string;
2706
+ params?: Record<string, AppBindingRef> | undefined;
2707
+ };
2708
+ type: "table";
2709
+ box: {
2710
+ x: number;
2711
+ y: number;
2712
+ h: number;
2713
+ w: number;
2714
+ };
2715
+ title?: string | undefined;
2716
+ pageSize?: number | undefined;
2717
+ columns?: {
2718
+ column: string;
2719
+ label?: string | undefined;
2720
+ format?: {
2721
+ kind: "currency";
2722
+ currency: string;
2723
+ decimals?: number | undefined;
2724
+ } | {
2725
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
2726
+ decimals?: number | undefined;
2727
+ } | undefined;
2728
+ }[] | undefined;
2729
+ rowActions?: {
2730
+ label: string;
2731
+ action: string;
2732
+ params?: Record<string, AppBindingRef> | undefined;
2733
+ }[] | undefined;
2734
+ hideOnPhone?: boolean | undefined;
2735
+ } | {
2736
+ x: string;
2737
+ id: string;
2738
+ data: {
2739
+ query: string;
2740
+ params?: Record<string, AppBindingRef> | undefined;
2741
+ };
2742
+ type: "chart";
2743
+ chart: "area" | "line" | "bar" | "pie";
2744
+ series: {
2745
+ column: string;
2746
+ label?: string | undefined;
2747
+ color?: string | undefined;
2748
+ }[];
2749
+ box: {
2750
+ x: number;
2751
+ y: number;
2752
+ h: number;
2753
+ w: number;
2754
+ };
2755
+ title?: string | undefined;
2756
+ hideOnPhone?: boolean | undefined;
2757
+ stacked?: boolean | undefined;
2758
+ } | {
2759
+ id: string;
2760
+ value: string;
2761
+ data: {
2762
+ query: string;
2763
+ params?: Record<string, AppBindingRef> | undefined;
2764
+ };
2765
+ type: "kpi";
2766
+ box: {
2767
+ x: number;
2768
+ y: number;
2769
+ h: number;
2770
+ w: number;
2771
+ };
2772
+ title?: string | undefined;
2773
+ format?: {
2774
+ kind: "currency";
2775
+ currency: string;
2776
+ decimals?: number | undefined;
2777
+ } | {
2778
+ kind: "number" | "text" | "date" | "datetime" | "duration" | "percent";
2779
+ decimals?: number | undefined;
2780
+ } | undefined;
2781
+ caption?: string | undefined;
2782
+ hideOnPhone?: boolean | undefined;
2783
+ delta?: string | undefined;
2784
+ } | {
2785
+ id: string;
2786
+ text: string;
2787
+ type: "text";
2788
+ box: {
2789
+ x: number;
2790
+ y: number;
2791
+ h: number;
2792
+ w: number;
2793
+ };
2794
+ title?: string | undefined;
2795
+ style?: "heading" | "body" | "caption" | undefined;
2796
+ hideOnPhone?: boolean | undefined;
2797
+ } | {
2798
+ id: string;
2799
+ filter: "search" | "select" | "date-range";
2800
+ type: "filter";
2801
+ box: {
2802
+ x: number;
2803
+ y: number;
2804
+ h: number;
2805
+ w: number;
2806
+ };
2807
+ title?: string | undefined;
2808
+ default?: string | {
2809
+ lastDays: number;
2810
+ } | undefined;
2811
+ label?: string | undefined;
2812
+ options?: {
2813
+ value: string;
2814
+ kind: "query";
2815
+ query: {
2816
+ query: string;
2817
+ params?: Record<string, AppBindingRef> | undefined;
2818
+ };
2819
+ label?: string | undefined;
2820
+ } | {
2821
+ values: {
2822
+ value: string;
2823
+ label?: string | undefined;
2824
+ }[];
2825
+ kind: "values";
2826
+ } | undefined;
2827
+ hideOnPhone?: boolean | undefined;
2828
+ } | {
2829
+ id: string;
2830
+ type: "form";
2831
+ fields: {
2832
+ input: "number" | "text" | "date" | "select" | "textarea" | "checkbox";
2833
+ name: string;
2834
+ required?: boolean | undefined;
2835
+ label?: string | undefined;
2836
+ options?: {
2837
+ value: string;
2838
+ label?: string | undefined;
2839
+ }[] | undefined;
2840
+ }[];
2841
+ box: {
2842
+ x: number;
2843
+ y: number;
2844
+ h: number;
2845
+ w: number;
2846
+ };
2847
+ submit: {
2848
+ label: string;
2849
+ action: string;
2850
+ params?: Record<string, AppBindingRef> | undefined;
2851
+ };
2852
+ title?: string | undefined;
2853
+ hideOnPhone?: boolean | undefined;
2854
+ } | {
2855
+ id: string;
2856
+ action: {
2857
+ label: string;
2858
+ action: string;
2859
+ params?: Record<string, AppBindingRef> | undefined;
2860
+ };
2861
+ type: "button";
2862
+ box: {
2863
+ x: number;
2864
+ y: number;
2865
+ h: number;
2866
+ w: number;
2867
+ };
2868
+ title?: string | undefined;
2869
+ hideOnPhone?: boolean | undefined;
2870
+ } | {
2871
+ id: string;
2872
+ type: "image";
2873
+ src: string;
2874
+ box: {
2875
+ x: number;
2876
+ y: number;
2877
+ h: number;
2878
+ w: number;
2879
+ };
2880
+ alt: string;
2881
+ title?: string | undefined;
2882
+ hideOnPhone?: boolean | undefined;
2883
+ } | {
2884
+ id: string;
2885
+ label: string;
2886
+ to: {
2887
+ kind: "page";
2888
+ page: string;
2889
+ params?: Record<string, AppBindingRef> | undefined;
2890
+ } | {
2891
+ kind: "href";
2892
+ href: string;
2893
+ };
2894
+ type: "link";
2895
+ box: {
2896
+ x: number;
2897
+ y: number;
2898
+ h: number;
2899
+ w: number;
2900
+ };
2901
+ title?: string | undefined;
2902
+ hideOnPhone?: boolean | undefined;
2903
+ })[];
2904
+ }[];
2905
+ queries: {
2906
+ source: string;
2907
+ id: string;
2908
+ kind: "mcp" | "crew" | "rest" | "sql" | "graphql";
2909
+ output: {
2910
+ name: string;
2911
+ type: "string" | "number" | "boolean" | "date" | "integer" | "datetime";
2912
+ nullable?: boolean | undefined;
2913
+ }[];
2914
+ description?: string | undefined;
2915
+ public?: boolean | undefined;
2916
+ refresh?: {
2917
+ mode: "load";
2918
+ } | {
2919
+ mode: "every";
2920
+ seconds: number;
2921
+ } | {
2922
+ mode: "events";
2923
+ } | undefined;
2924
+ params?: {
2925
+ type: "object";
2926
+ properties: Record<string, {
2927
+ type: "string" | "number" | "boolean" | "integer" | "array";
2928
+ default?: string | number | boolean | undefined;
2929
+ items?: {
2930
+ type: "string" | "number" | "integer";
2931
+ } | undefined;
2932
+ from?: "viewer.email" | "viewer.name" | "viewer.id" | "viewer.groups" | undefined;
2933
+ description?: string | undefined;
2934
+ format?: "date" | "email" | "uuid" | "date-time" | undefined;
2935
+ minimum?: number | undefined;
2936
+ maximum?: number | undefined;
2937
+ minLength?: number | undefined;
2938
+ maxLength?: number | undefined;
2939
+ enum?: (string | number)[] | undefined;
2940
+ }>;
2941
+ required?: string[] | undefined;
2942
+ } | undefined;
2943
+ rowPath?: string | undefined;
2944
+ morePath?: string | undefined;
2945
+ }[];
2946
+ linkHosts: string[];
2947
+ description?: string | undefined;
2948
+ theme?: {
2949
+ mode?: "auto" | "light" | "dark" | undefined;
2950
+ accent?: string | undefined;
2951
+ palette?: string[] | undefined;
2952
+ density?: "comfortable" | "compact" | undefined;
2953
+ } | undefined;
2954
+ }>;
2955
+ /** The largest `apps.json` crew reads (the spec, images included). */
2956
+ export declare const APP_SPEC_MAX_BYTES: number;
2957
+ /**
2958
+ * Bounds on the JSON's structure, checked BEFORE the schema sees it: zod records an over-long array and
2959
+ * still parses every element, so a 2 MB document of a million empty objects would cost a million
2960
+ * findings. Every legal spec is inside these: its longest list is 200, its deepest object 7 levels down,
2961
+ * and the node budget is above any legal spec's node count (it also bounds an edit body, which may be
2962
+ * larger than 2 MB, before the size check). Published with the contract (`AppSpec`).
2963
+ */
2964
+ export declare const APP_SPEC_LIMITS: {
2965
+ readonly depth: 16;
2966
+ readonly arrayLength: 200;
2967
+ readonly objectKeys: 256;
2968
+ readonly nodes: 1000000;
2969
+ };
2970
+ /**
2971
+ * The structure walk: depth, list length, key count and node count within {@link APP_SPEC_LIMITS}, and no
2972
+ * `__proto__` key (JSON makes it an own key, but a parsed record drops it, so crew would check a document
2973
+ * other than the one it was given). Iterative: depth is what it bounds.
2974
+ */
2975
+ export declare function structureFinding(value: unknown): AppCheckFinding | null;
2976
+ /** (tests) What the last {@link parseSpec} parsed: big-list elements, and whether the whole schema ran. */
2977
+ export declare const parseWork: {
2978
+ elements: number;
2979
+ whole: boolean;
2980
+ };
2981
+ /** The shape alone: the parsed spec, or the findings (at most 50). */
2982
+ export declare function parseSpec(value: unknown): {
2983
+ spec: AppSpec;
2984
+ findings: [];
2985
+ } | {
2986
+ spec: null;
2987
+ findings: AppCheckFinding[];
2988
+ };
2989
+ /** `apps.json` bytes → the parsed spec or findings: size, JSON, then {@link parseSpec} and {@link checkSpec}. */
2990
+ export declare function readSpec(bytes: Buffer | string): {
2991
+ spec: AppSpec;
2992
+ findings: [];
2993
+ } | {
2994
+ spec: null;
2995
+ findings: AppCheckFinding[];
2996
+ };
2997
+ /**
2998
+ * Why `value` does not satisfy the SCALAR declaration `decl`, or `null` when it does: type (integer
2999
+ * included), enum, numeric and length bounds, format. An `array` parameter is not a scalar (its values
3000
+ * are judged item by item by whoever validates a request).
3001
+ */
3002
+ export declare function paramValueProblem(decl: Pick<AppParamSchema, 'type' | 'format' | 'enum' | 'minimum' | 'maximum' | 'minLength' | 'maxLength'>, value: unknown): string | null;
3003
+ /**
3004
+ * What the schema cannot say (DES §6.2 "Spec schema, bindings exist, link hosts listed"). Empty when the
3005
+ * spec is consistent. Every name lookup is an OWN-property lookup: `constructor` or `toString` is a name
3006
+ * like any other, never something an object inherits.
3007
+ */
3008
+ export declare function checkSpec(spec: AppSpec): AppCheckFinding[];
3009
+ //# sourceMappingURL=spec.d.ts.map