@syncropel/projections 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/schema.d.ts CHANGED
@@ -14,9 +14,12 @@
14
14
  * library-workspace nodes — `popover`, `slider`, `rating`, `thumbnail` —
15
15
  * plus `data-table` sticky columns and `meter` / `rating` / `thumbnail`
16
16
  * cell kinds. v0.6 adds two configuration-control nodes — `facet-grid`
17
- * (a faceted filter) and `column-config` (a grid column picker). Every
18
- * addition is additive + backwards-compatible: every v0.1–v0.5 document
19
- * remains valid. See ADR-102 through ADR-106.
17
+ * (a faceted filter) and `column-config` (a grid column picker). v0.7
18
+ * adds no node types — it is pure grammar: the host action grammar
19
+ * (`emit` / `set-state` / `navigate` / `open-pane`), the `QueryBinding`
20
+ * forms, and the expression sublanguage in `expr.ts`. Every addition is
21
+ * additive + backwards-compatible: every v0.1–v0.6 document remains
22
+ * valid. See ADR-102 through ADR-109.
20
23
  */
21
24
  /**
22
25
  * An SRP v0.1 document — the top-level envelope a Tier-1 extension emits.
@@ -30,7 +33,7 @@ export interface SRPDocument {
30
33
  * enforcement boundary — node validity is decided by `NODE_TYPES`
31
34
  * membership.
32
35
  */
33
- srp: "0.1" | "0.2" | "0.3" | "0.4" | "0.5" | "0.6";
36
+ srp: "0.1" | "0.2" | "0.3" | "0.4" | "0.5" | "0.6" | "0.7";
34
37
  meta?: SRPMeta;
35
38
  root: SRPNode;
36
39
  }
@@ -50,7 +53,7 @@ export type NodeType = (typeof NODE_TYPES)[number];
50
53
  interface NodeBase {
51
54
  when?: string;
52
55
  bind?: Record<string, unknown>;
53
- actions?: Record<string, ActionDesc>;
56
+ actions?: Record<string, SRPAction>;
54
57
  }
55
58
  export type Gap = "none" | "xs" | "sm" | "md" | "lg" | "xl";
56
59
  export type Padding = "none" | "xs" | "sm" | "md" | "lg";
@@ -116,10 +119,94 @@ export type ChartKind = "line" | "area" | "bar" | "pie";
116
119
  * Covers act types, domain objects, thread states, and the AITL marker.
117
120
  */
118
121
  export type GlyphKind = "INTEND" | "DO" | "KNOW" | "LEARN" | "GET" | "PUT" | "CALL" | "MAP" | "AITL" | "thread" | "fork" | "record-parent" | "namespace" | "actor" | "file" | "pattern" | "page" | "view" | "state-open" | "state-active" | "state-converged" | "state-closed" | "state-abandoned";
122
+ /**
123
+ * The legacy (SRP ≤ v0.6) action form — an opaque intent name dispatched
124
+ * to a host-supplied handler. Still valid in v0.7 as the escape hatch for
125
+ * a non-generic host; new workspace records SHOULD prefer the v0.7 verbs.
126
+ */
119
127
  export interface ActionDesc {
120
128
  intent: string;
121
129
  payload?: Record<string, unknown>;
122
130
  }
131
+ /**
132
+ * A record-emit specification. String values anywhere in `body` (and in
133
+ * `thread`) may carry `{…}` interpolation resolved against the action
134
+ * scope (`form.*`, `row.*`, `state.*`). `thread: "$new"` directs the host
135
+ * to allocate a fresh `th_` id.
136
+ */
137
+ export interface EmitSpec {
138
+ /** Act type — INTEND | DO | KNOW | LEARN | GET | PUT | CALL | MAP. */
139
+ act: string;
140
+ /** Target thread id, or `"$new"` for a host-generated fresh thread. */
141
+ thread: string;
142
+ /** The record body. */
143
+ body: Record<string, unknown>;
144
+ }
145
+ /**
146
+ * v0.7 — emit a record via the SDK. Capability-checked by the generic
147
+ * host against the workspace record's `meta.capabilities.emit`
148
+ * (ADR-109 D5). An optional `id` keys the mutation lifecycle (ADR-109 D3);
149
+ * `optimistic` supplies a body the host inserts immediately and rolls
150
+ * back on failure.
151
+ */
152
+ export interface EmitAction {
153
+ emit: EmitSpec;
154
+ id?: string;
155
+ optimistic?: Record<string, unknown>;
156
+ /**
157
+ * v0.7 — actions dispatched *after* the emit resolves successfully.
158
+ * The host runs them in order once the record is emitted (used to
159
+ * close + clear a composer after a create). They do not run on
160
+ * failure — so an error guard inside the still-open form can show.
161
+ */
162
+ onSuccess?: SRPAction[];
163
+ }
164
+ /** v0.7 — write the host state bag (ADR-109 D6). */
165
+ export interface SetStateAction {
166
+ setState: {
167
+ key: string;
168
+ value: unknown;
169
+ };
170
+ }
171
+ /** v0.7 — route the viewer. Scope-checked against `meta.capabilities.navigate`. */
172
+ export interface NavigateAction {
173
+ /** Target path; may carry `{…}` interpolation. */
174
+ navigate: string;
175
+ }
176
+ /** v0.7 — open a record in a `<WorkspaceShell>` region. */
177
+ export interface OpenPaneAction {
178
+ openPane: {
179
+ region: string;
180
+ record: string;
181
+ };
182
+ }
183
+ /**
184
+ * An SRP action — what an event binding triggers. v0.7 adds four
185
+ * self-describing verbs a generic host executes with no workspace-specific
186
+ * code; the legacy `ActionDesc` form remains a member for compatibility.
187
+ */
188
+ export type SRPAction = ActionDesc | EmitAction | SetStateAction | NavigateAction | OpenPaneAction;
189
+ /**
190
+ * v0.7 — a named query binding (ADR-109 D4). A node's `bind.query` is
191
+ * either a raw {@link VQLQuery} (legacy) or a `QueryBinding`. `name` lets
192
+ * the host expose a query-count via the expression path
193
+ * `query.<name>.count`. Exactly one of `filter` / `fold` is set:
194
+ * `filter` is a raw ADR-037 VQL query; `fold` names a server-side
195
+ * projection/fold endpoint (e.g. `"tasks.snapshot"`).
196
+ */
197
+ export interface QueryBinding {
198
+ name: string;
199
+ filter?: VQLQuery;
200
+ fold?: string;
201
+ /**
202
+ * v0.7 — an optional client-side row filter: an expression
203
+ * (see `expr.ts`) evaluated per row against `{ row, state }`. Rows for
204
+ * which it is falsy are dropped *after* fetch. This is the host-owned
205
+ * post-fetch transform that lets filter state (`@state.*`) narrow a
206
+ * query without re-hitting the server (ADR-109 D6).
207
+ */
208
+ where?: string;
209
+ }
123
210
  /**
124
211
  * VQL (Value Query Language) — the query shape a Syncropel server resolves
125
212
  * against its record store. Used by `record-line-list` nodes that bind to
@@ -205,7 +292,7 @@ export interface RecordLineListNode extends NodeBase {
205
292
  empty?: string;
206
293
  };
207
294
  bind: {
208
- query: VQLQuery;
295
+ query: VQLQuery | QueryBinding;
209
296
  } | {
210
297
  items: string[];
211
298
  };
@@ -261,7 +348,7 @@ export interface ButtonNode extends NodeBase {
261
348
  loading?: boolean;
262
349
  };
263
350
  actions?: {
264
- onClick?: ActionDesc;
351
+ onClick?: SRPAction;
265
352
  };
266
353
  }
267
354
  export interface IconButtonNode extends NodeBase {
@@ -275,7 +362,7 @@ export interface IconButtonNode extends NodeBase {
275
362
  loading?: boolean;
276
363
  };
277
364
  actions?: {
278
- onClick?: ActionDesc;
365
+ onClick?: SRPAction;
279
366
  };
280
367
  }
281
368
  export interface CopyButtonNode extends NodeBase {
@@ -297,7 +384,7 @@ export interface SelectNode extends NodeBase {
297
384
  value: string;
298
385
  };
299
386
  actions?: {
300
- onChange?: ActionDesc;
387
+ onChange?: SRPAction;
301
388
  };
302
389
  }
303
390
  export interface EmptyStateNode extends NodeBase {
@@ -345,7 +432,7 @@ export interface TabsNode extends NodeBase {
345
432
  active: string;
346
433
  };
347
434
  actions?: {
348
- onTabChange?: ActionDesc;
435
+ onTabChange?: SRPAction;
349
436
  };
350
437
  /** Panels, parallel to `props.tabs` by index. */
351
438
  children?: SRPNode[];
@@ -399,6 +486,7 @@ export interface TableSort {
399
486
  * with the row merged into the payload as `row`.
400
487
  */
401
488
  export interface TableRowAction {
489
+ /** Stable identifier for this row action (also the legacy intent name). */
402
490
  intent: string;
403
491
  /** A semantic glyph for an icon-only affordance. */
404
492
  glyph?: GlyphKind;
@@ -406,6 +494,12 @@ export interface TableRowAction {
406
494
  label?: string;
407
495
  /** Which side of the row the action cell sits on. Default `leading`. */
408
496
  position?: RowActionPosition;
497
+ /**
498
+ * v0.7 — the action a click triggers. When set, the host dispatches
499
+ * this `SRPAction` with the row as runtime context (`{row}`); when
500
+ * omitted, the legacy `{ intent, payload: { row } }` form is dispatched.
501
+ */
502
+ action?: SRPAction;
409
503
  }
410
504
  /**
411
505
  * SRP v0.3 — a `data-table` row accent. The row paints a left-border (and
@@ -452,15 +546,15 @@ export interface DataTableNode extends NodeBase {
452
546
  stickyColumns?: number;
453
547
  };
454
548
  bind: {
455
- query: VQLQuery;
549
+ query: VQLQuery | QueryBinding;
456
550
  } | {
457
551
  rows: Record<string, unknown>[];
458
552
  };
459
553
  actions?: {
460
- onRowClick?: ActionDesc;
461
- onSort?: ActionDesc;
554
+ onRowClick?: SRPAction;
555
+ onSort?: SRPAction;
462
556
  /** SRP v0.4 — fired (with `rows`) when the selection changes. */
463
- onSelectionChange?: ActionDesc;
557
+ onSelectionChange?: SRPAction;
464
558
  };
465
559
  }
466
560
  /**
@@ -486,11 +580,11 @@ export interface BoardNode extends NodeBase {
486
580
  cardChipField?: string;
487
581
  };
488
582
  bind: {
489
- query: VQLQuery;
583
+ query: VQLQuery | QueryBinding;
490
584
  };
491
585
  actions?: {
492
- onCardClick?: ActionDesc;
493
- onCardMove?: ActionDesc;
586
+ onCardClick?: SRPAction;
587
+ onCardMove?: SRPAction;
494
588
  };
495
589
  }
496
590
  /**
@@ -511,8 +605,8 @@ export interface TextInputNode extends NodeBase {
511
605
  value: string;
512
606
  };
513
607
  actions?: {
514
- onChange?: ActionDesc;
515
- onSubmit?: ActionDesc;
608
+ onChange?: SRPAction;
609
+ onSubmit?: SRPAction;
516
610
  };
517
611
  }
518
612
  /**
@@ -526,7 +620,7 @@ export interface FormNode extends NodeBase {
526
620
  busy?: boolean;
527
621
  };
528
622
  actions?: {
529
- onSubmit?: ActionDesc;
623
+ onSubmit?: SRPAction;
530
624
  };
531
625
  children?: SRPNode[];
532
626
  }
@@ -555,7 +649,7 @@ export interface SegmentedNode extends NodeBase {
555
649
  value: string;
556
650
  };
557
651
  actions?: {
558
- onChange?: ActionDesc;
652
+ onChange?: SRPAction;
559
653
  };
560
654
  }
561
655
  /**
@@ -723,8 +817,8 @@ export interface TreeNode extends NodeBase {
723
817
  expanded?: string[];
724
818
  };
725
819
  actions?: {
726
- onSelect?: ActionDesc;
727
- onToggle?: ActionDesc;
820
+ onSelect?: SRPAction;
821
+ onToggle?: SRPAction;
728
822
  };
729
823
  }
730
824
  /**
@@ -745,7 +839,7 @@ export interface TagInputNode extends NodeBase {
745
839
  tags: string[];
746
840
  };
747
841
  actions?: {
748
- onChange?: ActionDesc;
842
+ onChange?: SRPAction;
749
843
  };
750
844
  }
751
845
  /** Which edge of the trigger a `popover` panel aligns to. */
@@ -803,7 +897,7 @@ export interface SliderNode extends NodeBase {
803
897
  value: number;
804
898
  };
805
899
  actions?: {
806
- onChange?: ActionDesc;
900
+ onChange?: SRPAction;
807
901
  };
808
902
  }
809
903
  /**
@@ -825,7 +919,7 @@ export interface RatingNode extends NodeBase {
825
919
  value: number;
826
920
  };
827
921
  actions?: {
828
- onChange?: ActionDesc;
922
+ onChange?: SRPAction;
829
923
  };
830
924
  }
831
925
  /**
@@ -884,9 +978,9 @@ export interface FacetGridNode extends NodeBase {
884
978
  };
885
979
  actions?: {
886
980
  /** Category tab changed — payload `{ facet }`. */
887
- onFacetChange?: ActionDesc;
981
+ onFacetChange?: SRPAction;
888
982
  /** A chip toggled — payload `{ facet, value }`. */
889
- onToggle?: ActionDesc;
983
+ onToggle?: SRPAction;
890
984
  };
891
985
  }
892
986
  /** One configurable column in a `column-config`. */
@@ -921,7 +1015,7 @@ export interface ColumnConfigNode extends NodeBase {
921
1015
  };
922
1016
  actions?: {
923
1017
  /** Visibility or order changed — payload `{ visible }`. */
924
- onChange?: ActionDesc;
1018
+ onChange?: SRPAction;
925
1019
  };
926
1020
  }
927
1021
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/schema.js CHANGED
@@ -14,9 +14,12 @@
14
14
  * library-workspace nodes — `popover`, `slider`, `rating`, `thumbnail` —
15
15
  * plus `data-table` sticky columns and `meter` / `rating` / `thumbnail`
16
16
  * cell kinds. v0.6 adds two configuration-control nodes — `facet-grid`
17
- * (a faceted filter) and `column-config` (a grid column picker). Every
18
- * addition is additive + backwards-compatible: every v0.1–v0.5 document
19
- * remains valid. See ADR-102 through ADR-106.
17
+ * (a faceted filter) and `column-config` (a grid column picker). v0.7
18
+ * adds no node types — it is pure grammar: the host action grammar
19
+ * (`emit` / `set-state` / `navigate` / `open-pane`), the `QueryBinding`
20
+ * forms, and the expression sublanguage in `expr.ts`. Every addition is
21
+ * additive + backwards-compatible: every v0.1–v0.6 document remains
22
+ * valid. See ADR-102 through ADR-109.
20
23
  */
21
24
  /**
22
25
  * The 39 canonical node-type discriminator strings (19 v0.1 + 5 v0.2 +
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqFH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;IACR,aAAa;IACb,aAAa;IACb,QAAQ;IACR,aAAa;IACb,aAAa;IACb,UAAU;IACV,6CAA6C;IAC7C,MAAM;IACN,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,MAAM;IACN,4BAA4B;IAC5B,WAAW;IACX,uCAAuC;IACvC,OAAO;IACP,OAAO;IACP,QAAQ;IACR,UAAU;IACV,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,qCAAqC;IACrC,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,yCAAyC;IACzC,YAAY;IACZ,eAAe;CACP,CAAC","sourcesContent":["/**\n * SRP v0.6 — TypeScript schema types.\n *\n * The Syncropel Rendering Protocol is a narrow JSON schema of block-level\n * primitives for declarative UI documents. See the spec and examples at\n * https://syncropel.com.\n *\n * v0.2 adds five interactive container + input nodes (tabs, data-table,\n * board, text-input, form). v0.3 adds the `segmented` node plus a\n * polished-data-grid increment to `data-table`. v0.4 adds eight\n * visualization + hierarchy nodes — `meter`, `gauge`, `avatar`,\n * `progress`, `sparkline`, `chart`, `tree`, `tag-input` — plus\n * `data-table` row selection and a two-line cell kind. v0.5 adds four\n * library-workspace nodes — `popover`, `slider`, `rating`, `thumbnail` —\n * plus `data-table` sticky columns and `meter` / `rating` / `thumbnail`\n * cell kinds. v0.6 adds two configuration-control nodes — `facet-grid`\n * (a faceted filter) and `column-config` (a grid column picker). Every\n * addition is additive + backwards-compatible: every v0.1–v0.5 document\n * remains valid. See ADR-102 through ADR-106.\n */\n\n// ---------------------------------------------------------------------------\n// Document envelope\n// ---------------------------------------------------------------------------\n\n/**\n * An SRP v0.1 document — the top-level envelope a Tier-1 extension emits.\n */\nexport interface SRPDocument {\n /**\n * Protocol version. A `\"0.2\"` document may use the v0.2 node additions;\n * a `\"0.3\"` document may additionally use `segmented` + the data-grid\n * props; a `\"0.4\"` document may additionally use the visualization +\n * hierarchy nodes. The version is a capability advertisement, not an\n * enforcement boundary — node validity is decided by `NODE_TYPES`\n * membership.\n */\n srp: \"0.1\" | \"0.2\" | \"0.3\" | \"0.4\" | \"0.5\" | \"0.6\";\n meta?: SRPMeta;\n root: SRPNode;\n}\n\nexport interface SRPMeta {\n name?: string;\n version?: string;\n description?: string;\n publisher?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Discriminated union of all 33 node types\n// ---------------------------------------------------------------------------\n\nexport type SRPNode =\n // Containers (5)\n | ColumnNode\n | RowNode\n | GridNode\n | CardNode\n | DividerNode\n // Record rendering (3)\n | RecordLineNode\n | RecordLineListNode\n | ChipNode\n // Data display (4)\n | HeadingNode\n | TextNode\n | StatNode\n | KeyValueNode\n // Interactive (4)\n | ButtonNode\n | IconButtonNode\n | CopyButtonNode\n | SelectNode\n // Feedback (3)\n | EmptyStateNode\n | ErrorStateNode\n | SkeletonNode\n // Interactive containers + inputs — SRP v0.2 (5)\n | TabsNode\n | DataTableNode\n | BoardNode\n | TextInputNode\n | FormNode\n // Choice control — SRP v0.3 (1)\n | SegmentedNode\n // Visualization + hierarchy — SRP v0.4 (8)\n | MeterNode\n | GaugeNode\n | AvatarNode\n | ProgressNode\n | SparklineNode\n | ChartNode\n | TreeNode\n | TagInputNode\n // Library-workspace nodes — SRP v0.5 (4)\n | PopoverNode\n | SliderNode\n | RatingNode\n | ThumbnailNode\n // Configuration-control nodes — SRP v0.6 (2)\n | FacetGridNode\n | ColumnConfigNode;\n\n/**\n * The 39 canonical node-type discriminator strings (19 v0.1 + 5 v0.2 +\n * 1 v0.3 + 8 v0.4 + 4 v0.5 + 2 v0.6).\n */\nexport const NODE_TYPES = [\n \"column\",\n \"row\",\n \"grid\",\n \"card\",\n \"divider\",\n \"record-line\",\n \"record-line-list\",\n \"chip\",\n \"heading\",\n \"text\",\n \"stat\",\n \"key-value\",\n \"button\",\n \"icon-button\",\n \"copy-button\",\n \"select\",\n \"empty-state\",\n \"error-state\",\n \"skeleton\",\n // SRP v0.2 — interactive containers + inputs\n \"tabs\",\n \"data-table\",\n \"board\",\n \"text-input\",\n \"form\",\n // SRP v0.3 — choice control\n \"segmented\",\n // SRP v0.4 — visualization + hierarchy\n \"meter\",\n \"gauge\",\n \"avatar\",\n \"progress\",\n \"sparkline\",\n \"chart\",\n \"tree\",\n \"tag-input\",\n // SRP v0.5 — library-workspace nodes\n \"popover\",\n \"slider\",\n \"rating\",\n \"thumbnail\",\n // SRP v0.6 — configuration-control nodes\n \"facet-grid\",\n \"column-config\",\n] as const;\n\nexport type NodeType = (typeof NODE_TYPES)[number];\n\n// ---------------------------------------------------------------------------\n// Fields every node may carry\n// ---------------------------------------------------------------------------\n\ninterface NodeBase {\n when?: string;\n bind?: Record<string, unknown>;\n actions?: Record<string, ActionDesc>;\n}\n\n// ---------------------------------------------------------------------------\n// Token unions (mirror @syncropel/react token scales)\n// ---------------------------------------------------------------------------\n\nexport type Gap = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type Padding = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type DividerSpacing = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type Cols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport type ColumnAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\nexport type RowAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type Justify =\n | \"start\"\n | \"center\"\n | \"end\"\n | \"between\"\n | \"around\"\n | \"evenly\";\n\nexport type RecordLineVariant =\n | \"feed\"\n | \"compact\"\n | \"detail\"\n | \"search\"\n | \"thread\";\n\nexport type ChipTone = \"default\" | \"info\" | \"warn\" | \"error\";\n\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type TextWeight = \"normal\" | \"medium\" | \"semibold\";\nexport type TextTone =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\";\n\nexport type SkeletonShape = \"rect\" | \"circle\" | \"text\";\n\n// --- SRP v0.2 tokens ---\nexport type TableColumnAlign = \"start\" | \"end\";\nexport type DataTableVariant = \"default\" | \"compact\";\nexport type TextInputKind = \"text\" | \"search\";\n/**\n * How a `data-table` column renders its cell value. `text` (default) is a\n * plain string; `chip` renders the value as a compact metadata chip;\n * `lines` (SRP v0.4) renders a two-line cell — the value at `key` as the\n * primary line and the value at the column's `subKey` as a muted subtitle.\n *\n * SRP v0.5 adds three visual cell kinds: `meter` renders a numeric `0..1`\n * value as an inline bar (recoloured by the column's `thresholds`);\n * `rating` renders a numeric value as a row of stars (count from the\n * column's `max`); `thumbnail` renders a URL-valued cell as a small image.\n */\nexport type TableCellKind =\n | \"text\"\n | \"chip\"\n | \"lines\"\n | \"meter\"\n | \"rating\"\n | \"thumbnail\";\n\n// --- SRP v0.3 tokens ---\n\n/**\n * A row accent tone — `data-table` `rowTone` paints a left-border (and a\n * subtle tint) keyed off a column value. Wider than `ChipTone`: it adds\n * `accent` and `success` so a row can read as \"in progress\" / \"done\".\n */\nexport type RowTone =\n | \"default\"\n | \"accent\"\n | \"success\"\n | \"warn\"\n | \"error\"\n | \"info\";\n\n/** Sort direction for a `data-table` column. */\nexport type SortDirection = \"asc\" | \"desc\";\n\n/** Which side of the row a `data-table` `rowActions` cell sits on. */\nexport type RowActionPosition = \"leading\" | \"trailing\";\n\n/**\n * How a `segmented` control presents. `solid` (default) is a light pill\n * group; `underline` is a borderless tab strip (active option underlined).\n * Added in SRP v0.3.1.\n */\nexport type SegmentedVariant = \"solid\" | \"underline\";\n\n// --- SRP v0.4 tokens ---\n\n/**\n * A visualization tone — shared by `meter`, `gauge`, `progress`,\n * `sparkline`, and `chart`. Drives the fill / stroke colour. Added SRP v0.4.\n */\nexport type VizTone =\n | \"neutral\"\n | \"accent\"\n | \"success\"\n | \"warn\"\n | \"error\"\n | \"info\";\n\n/** A visualization size step — shared by the SRP v0.4 viz nodes. */\nexport type VizSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\n/** How a `meter` renders its fill — one bar, or a row of discrete cells. */\nexport type MeterVariant = \"continuous\" | \"segmented\";\n\n/** How a `sparkline` renders its series. */\nexport type SparklineVariant = \"line\" | \"bar\";\n\n/** The plot kind a `chart` draws. */\nexport type ChartKind = \"line\" | \"area\" | \"bar\" | \"pie\";\n\n/**\n * Glyph kinds — the closed enumeration of semantic symbols the palette renders.\n * Covers act types, domain objects, thread states, and the AITL marker.\n */\nexport type GlyphKind =\n // Act types (coordination)\n | \"INTEND\"\n | \"DO\"\n | \"KNOW\"\n | \"LEARN\"\n // Act types (effects)\n | \"GET\"\n | \"PUT\"\n | \"CALL\"\n | \"MAP\"\n // AITL marker\n | \"AITL\"\n // Domain objects\n | \"thread\"\n | \"fork\"\n | \"record-parent\"\n | \"namespace\"\n | \"actor\"\n | \"file\"\n | \"pattern\"\n | \"page\"\n | \"view\"\n // Thread states\n | \"state-open\"\n | \"state-active\"\n | \"state-converged\"\n | \"state-closed\"\n | \"state-abandoned\";\n\n// ---------------------------------------------------------------------------\n// Actions + queries\n// ---------------------------------------------------------------------------\n\nexport interface ActionDesc {\n intent: string;\n payload?: Record<string, unknown>;\n}\n\n/**\n * VQL (Value Query Language) — the query shape a Syncropel server resolves\n * against its record store. Used by `record-line-list` nodes that bind to\n * a live query rather than a static list of record ids.\n *\n * The shape is deliberately open (index signature) — additional fields\n * are protocol extensions the server understands.\n */\nexport interface VQLQuery {\n act?: string;\n actor?: string;\n thread?: string;\n kind?: string;\n since?: number;\n limit?: number;\n [k: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Container node definitions (5)\n// ---------------------------------------------------------------------------\n\nexport interface ColumnNode extends NodeBase {\n type: \"column\";\n props?: { gap?: Gap; align?: ColumnAlign; justify?: Justify };\n children?: SRPNode[];\n}\n\nexport interface RowNode extends NodeBase {\n type: \"row\";\n props?: {\n gap?: Gap;\n align?: RowAlign;\n justify?: Justify;\n wrap?: boolean;\n };\n children?: SRPNode[];\n}\n\nexport interface GridNode extends NodeBase {\n type: \"grid\";\n props: { cols: Cols; gap?: Gap; rowGap?: Gap; colGap?: Gap };\n children?: SRPNode[];\n}\n\nexport interface CardNode extends NodeBase {\n type: \"card\";\n props?: { padding?: Padding; interactive?: boolean };\n children?: SRPNode[];\n}\n\nexport interface DividerNode extends NodeBase {\n type: \"divider\";\n props?: { orientation?: \"horizontal\" | \"vertical\"; spacing?: DividerSpacing };\n}\n\n// ---------------------------------------------------------------------------\n// Record-rendering (3)\n// ---------------------------------------------------------------------------\n\nexport interface RecordLineNode extends NodeBase {\n type: \"record-line\";\n props: {\n variant: RecordLineVariant;\n /**\n * SRP v0.3 — an optional dotted body path (`body.priority`). When set,\n * the line renders a small chip carrying that field's value. Lets\n * `board` cards (which render through `record-line`) show a priority\n * or status chip.\n */\n chipField?: string;\n };\n bind: { record: string };\n}\n\nexport interface RecordLineListNode extends NodeBase {\n type: \"record-line-list\";\n props: { variant: RecordLineVariant; max?: number; empty?: string };\n bind: { query: VQLQuery } | { items: string[] };\n}\n\nexport interface ChipNode extends NodeBase {\n type: \"chip\";\n props: { label: string; tone?: ChipTone; glyph?: GlyphKind };\n}\n\n// ---------------------------------------------------------------------------\n// Data display (4)\n// ---------------------------------------------------------------------------\n\nexport interface HeadingNode extends NodeBase {\n type: \"heading\";\n props: { level: 1 | 2 | 3 | 4 | 5 | 6; text: string };\n}\n\nexport interface TextNode extends NodeBase {\n type: \"text\";\n props: {\n text: string;\n size?: TextSize;\n weight?: TextWeight;\n tone?: TextTone;\n inline?: boolean;\n };\n}\n\nexport interface StatNode extends NodeBase {\n type: \"stat\";\n props: {\n label: string;\n value: string | number;\n delta?: string | number;\n deltaTone?: \"auto\" | \"neutral\";\n };\n}\n\nexport interface KeyValueNode extends NodeBase {\n type: \"key-value\";\n props: { label: string; value: string };\n}\n\n// ---------------------------------------------------------------------------\n// Interactive (4)\n// ---------------------------------------------------------------------------\n\nexport interface ButtonNode extends NodeBase {\n type: \"button\";\n props: {\n label: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n };\n actions?: { onClick?: ActionDesc };\n}\n\nexport interface IconButtonNode extends NodeBase {\n type: \"icon-button\";\n props: {\n glyph: GlyphKind;\n ariaLabel: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n };\n actions?: { onClick?: ActionDesc };\n}\n\nexport interface CopyButtonNode extends NodeBase {\n type: \"copy-button\";\n props: { value: string; label?: string };\n}\n\nexport interface SelectNode extends NodeBase {\n type: \"select\";\n props: { options: { label: string; value: string }[] };\n bind: { value: string };\n actions?: { onChange?: ActionDesc };\n}\n\n// ---------------------------------------------------------------------------\n// Feedback (3)\n// ---------------------------------------------------------------------------\n\nexport interface EmptyStateNode extends NodeBase {\n type: \"empty-state\";\n props: {\n message: string;\n action?: { label: string; intent: string };\n };\n}\n\nexport interface ErrorStateNode extends NodeBase {\n type: \"error-state\";\n props: {\n message: string;\n retry?: { intent: string };\n };\n}\n\nexport interface SkeletonNode extends NodeBase {\n type: \"skeleton\";\n props?: {\n shape?: SkeletonShape;\n width?: string | number | \"full\";\n height?: string | number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.2 — interactive containers + inputs (5)\n//\n// All five reuse the v0.1 contract: `props` is static config, `bind` is\n// host-supplied state, `actions` declares intents the host dispatches. SRP\n// owns layout + shape; the host owns state + behaviour. See ADR-102 and the\n// SRP v0.2 design spec.\n// ---------------------------------------------------------------------------\n\n/**\n * A container whose children are panels; one panel shows at a time. The host\n * supplies the active tab id via `bind.active` and renders the panel whose\n * index matches it in `props.tabs`.\n */\nexport interface TabsNode extends NodeBase {\n type: \"tabs\";\n props: { tabs: { id: string; label: string; glyph?: GlyphKind }[] };\n bind: { active: string };\n actions?: { onTabChange?: ActionDesc };\n /** Panels, parallel to `props.tabs` by index. */\n children?: SRPNode[];\n}\n\n/** A single `data-table` column definition. */\nexport interface DataTableColumnDef {\n /** Dotted path into each row (`body.goal`, `actor`). */\n key: string;\n label: string;\n align?: TableColumnAlign;\n width?: string;\n /** How the cell value renders. Default `text`. */\n kind?: TableCellKind;\n /**\n * SRP v0.3 — for a `kind: \"chip\"` column, a map from cell value to chip\n * tone. A value with no entry renders a `default`-tone chip.\n */\n tones?: Record<string, ChipTone>;\n /**\n * SRP v0.3 — an explicit value order for sorting this column. When the\n * column is the sort key, rows order by each value's index in this list\n * (so `critical` < `high` < `medium` < `low`, not alphabetical). Values\n * absent from the list sort after the listed ones.\n */\n order?: string[];\n /**\n * SRP v0.4 — for a `kind: \"lines\"` column, the dotted path whose value\n * renders as the muted second line beneath the `key` value.\n */\n subKey?: string;\n /**\n * SRP v0.5 — for a `kind: \"meter\"` column, value-keyed recolouring of\n * the inline bar (energy low→high, score bands). List in ascending `at`.\n */\n thresholds?: VizThreshold[];\n /**\n * SRP v0.5 — for a `kind: \"rating\"` column, the number of stars. Also\n * the default tone source for a `meter` cell when no `thresholds` match.\n * Default 5.\n */\n max?: number;\n}\n\n/** SRP v0.3 — a `data-table` sort descriptor. */\nexport interface TableSort {\n key: string;\n direction: SortDirection;\n}\n\n/**\n * SRP v0.3 — a per-row action affordance on a `data-table`. Rendered as a\n * small button in a leading or trailing cell; a click dispatches `intent`\n * with the row merged into the payload as `row`.\n */\nexport interface TableRowAction {\n intent: string;\n /** A semantic glyph for an icon-only affordance. */\n glyph?: GlyphKind;\n /** A text label — used when no `glyph` is given (or as the aria-label). */\n label?: string;\n /** Which side of the row the action cell sits on. Default `leading`. */\n position?: RowActionPosition;\n}\n\n/**\n * SRP v0.3 — a `data-table` row accent. The row paints a left-border (and\n * a subtle tint) whose tone is looked up from `tones` by the value at\n * `key`. A value with no entry gets no accent.\n */\nexport interface TableRowTone {\n /** Dotted path into the row whose value selects the tone. */\n key: string;\n tones: Record<string, RowTone>;\n}\n\n/**\n * A columnar record list — richer than `record-line-list`: explicit columns,\n * alignment, optional sort. `column.key` is a dotted path into each row.\n *\n * SRP v0.3 adds the polished-data-grid props: column `tones` + `order`,\n * `defaultSort`, `rowActions`, and `rowTone`. SRP v0.4 adds `selectable`\n * (a leading checkbox column with multi-select) — all optional + additive.\n */\nexport interface DataTableNode extends NodeBase {\n type: \"data-table\";\n props: {\n columns: DataTableColumnDef[];\n variant?: DataTableVariant;\n sortable?: boolean;\n empty?: string;\n /** SRP v0.3 — the sort applied before any header interaction. */\n defaultSort?: TableSort;\n /** SRP v0.3 — per-row action affordances. */\n rowActions?: TableRowAction[];\n /** SRP v0.3 — a value-keyed row accent. */\n rowTone?: TableRowTone;\n /**\n * SRP v0.4 — render a leading checkbox column with a select-all\n * header. The table owns selection state and dispatches\n * `onSelectionChange` with the selected rows.\n */\n selectable?: boolean;\n /**\n * SRP v0.5 — pin the first N columns (and the leading checkbox /\n * action cells) so they stay visible while the rest scroll\n * horizontally. Default 0 (no pinned columns).\n */\n stickyColumns?: number;\n };\n bind: { query: VQLQuery } | { rows: Record<string, unknown>[] };\n actions?: {\n onRowClick?: ActionDesc;\n onSort?: ActionDesc;\n /** SRP v0.4 — fired (with `rows`) when the selection changes. */\n onSelectionChange?: ActionDesc;\n };\n}\n\n/**\n * A kanban board — records bucketed into columns by the `props.groupBy` field.\n * A record lands in the column whose `id` equals its `groupBy` value; records\n * matching no column are dropped. `onCardMove` is advisory — a host MAY\n * support drag; a board without drag is read-only and still valid.\n */\nexport interface BoardNode extends NodeBase {\n type: \"board\";\n props: {\n columns: { id: string; label: string }[];\n groupBy: string;\n cardVariant?: RecordLineVariant;\n /**\n * SRP v0.3 — a dotted body path passed through to each card's\n * `record-line` as its `chipField`, so cards show a metadata chip\n * (e.g. `body.priority`).\n */\n cardChipField?: string;\n };\n bind: { query: VQLQuery };\n actions?: { onCardClick?: ActionDesc; onCardMove?: ActionDesc };\n}\n\n/**\n * An editable text field — the `select` of free text. The host owns\n * `bind.value` and re-renders on change (identical ownership model to\n * `select`).\n */\nexport interface TextInputNode extends NodeBase {\n type: \"text-input\";\n props?: {\n placeholder?: string;\n multiline?: boolean;\n inputKind?: TextInputKind;\n size?: TextSize;\n disabled?: boolean;\n };\n bind: { value: string };\n actions?: { onChange?: ActionDesc; onSubmit?: ActionDesc };\n}\n\n/**\n * A container that groups inputs and declares a submit intent. The host\n * collects child input values (by their `bind`) and dispatches `onSubmit`.\n */\nexport interface FormNode extends NodeBase {\n type: \"form\";\n props?: { submitLabel?: string; busy?: boolean };\n actions?: { onSubmit?: ActionDesc };\n children?: SRPNode[];\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.3 — choice control (1)\n//\n// `segmented` is the third stateful input (alongside `select` + `text-input`)\n// and reuses the same ownership model: `bind.value` is host-supplied, a\n// pick dispatches `onChange`. See ADR-103.\n// ---------------------------------------------------------------------------\n\n/** One option in a `segmented` control. */\nexport interface SegmentedOption {\n value: string;\n label: string;\n /** An optional count/marker rendered as a small badge on the option. */\n badge?: string | number;\n}\n\n/**\n * A row of mutually-exclusive options — a filter/choice control. Distinct\n * from `tabs`: it has no panels, it is purely a bound value. The host owns\n * `bind.value`; picking an option dispatches `onChange` with the new value.\n */\nexport interface SegmentedNode extends NodeBase {\n type: \"segmented\";\n props: {\n options: SegmentedOption[];\n size?: ButtonSize;\n /** Presentation — `solid` (light pill group, default) or `underline`\n * (borderless tab strip). Added in SRP v0.3.1. */\n variant?: SegmentedVariant;\n };\n bind: { value: string };\n actions?: { onChange?: ActionDesc };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.4 — visualization + hierarchy nodes (8)\n//\n// `meter`, `gauge`, `progress`, `sparkline`, `chart` are read-only data\n// displays — `props` carries the values, there is no `bind`. `avatar` is a\n// read-only identity token. `tree` + `tag-input` are interactive: they\n// reuse the v0.1 ownership model — `bind` is host state, `actions` declares\n// dispatched intents. Music-specific widgets (waveforms, transition tables)\n// are NOT in SRP — a renderer registers those as plug-in node types. See\n// ADR-104.\n// ---------------------------------------------------------------------------\n\n/**\n * A value→tone threshold for a `meter`. The meter's value selects the\n * highest threshold whose `at` it reaches; that tone recolours the fill.\n * List thresholds in ascending `at` order.\n */\nexport interface VizThreshold {\n at: number;\n tone: VizTone;\n}\n\n/**\n * A horizontal bar gauge — renders a `0..1` reading as a proportional\n * fill. `continuous` is a single bar; `segmented` is a row of discrete\n * cells. `thresholds` recolours the meter by value (energy low→high,\n * trust score, match confidence).\n */\nexport interface MeterNode extends NodeBase {\n type: \"meter\";\n props: {\n /** The reading, clamped to `0..1`. */\n value: number;\n tone?: VizTone;\n variant?: MeterVariant;\n /** Cell count when `variant: \"segmented\"`. Default 5. */\n segments?: number;\n /** Value-keyed recolouring; overrides `tone` for the matched band. */\n thresholds?: VizThreshold[];\n size?: VizSize;\n /** Optional caption rendered beside the bar. */\n label?: string;\n };\n}\n\n/** A coloured band on a `gauge` arc — e.g. a Dial zone. */\nexport interface GaugeZone {\n from: number;\n to: number;\n tone: VizTone;\n label?: string;\n}\n\n/**\n * A radial arc gauge — renders a `0..1` reading on a 270° arc. Doubles as\n * the Syncropel Dial (the `d ∈ [0,1]` control surface, F3): `zones` paints\n * the REPLAY / ADAPT / EXPLORE / CREATE bands.\n */\nexport interface GaugeNode extends NodeBase {\n type: \"gauge\";\n props: {\n /** The reading, clamped to `0..1`. */\n value: number;\n label?: string;\n tone?: VizTone;\n /** Coloured arc bands — drawn behind the value sweep. */\n zones?: GaugeZone[];\n size?: VizSize;\n /** Render the numeric value in the arc centre. Default true. */\n showValue?: boolean;\n /** How the centre value reads. Default `decimal`. */\n format?: \"percent\" | \"decimal\";\n };\n}\n\n/**\n * A compact identity token — an image (`src`), or initials derived from\n * `name`, or a semantic `glyph` fallback. Square, rounded.\n */\nexport interface AvatarNode extends NodeBase {\n type: \"avatar\";\n props: {\n /** Display name — the source of initials + the accessible label. */\n name: string;\n src?: string;\n glyph?: GlyphKind;\n size?: VizSize;\n };\n}\n\n/**\n * A progress bar. With `value` it fills proportionally (determinate);\n * with `indeterminate` it animates with no known extent. Distinct from\n * `meter`: `progress` reads as \"advancing toward done\", `meter` as a\n * static measurement.\n */\nexport interface ProgressNode extends NodeBase {\n type: \"progress\";\n props?: {\n /** The fraction complete, `0..1`. Omit when `indeterminate`. */\n value?: number;\n indeterminate?: boolean;\n tone?: VizTone;\n label?: string;\n /** Render the percentage as text. Default false. */\n showValue?: boolean;\n size?: VizSize;\n };\n}\n\n/**\n * A tiny inline chart — a bare series with no axes or legend, for\n * trend-at-a-glance (cost over time, dispatch throughput, energy shape).\n */\nexport interface SparklineNode extends NodeBase {\n type: \"sparkline\";\n props: {\n values: number[];\n variant?: SparklineVariant;\n tone?: VizTone;\n /** Width in px, or `\"full\"` to fill the container. Default 96. */\n width?: number | \"full\";\n /** Height in px. Default 24. */\n height?: number;\n };\n}\n\n/** One point in a `chart` series. */\nexport interface ChartPoint {\n x: string | number;\n y: number;\n}\n\n/** One series in a `chart` — or, for a `pie`, one ring of slices. */\nexport interface ChartSeries {\n label?: string;\n tone?: VizTone;\n points: ChartPoint[];\n}\n\n/**\n * A labelled chart — a `line` / `area` / `bar` plot, or a `pie` whose\n * slices are `series[0].points`. Richer than `sparkline`: axes, a legend,\n * a title.\n */\nexport interface ChartNode extends NodeBase {\n type: \"chart\";\n props: {\n kind: ChartKind;\n series: ChartSeries[];\n title?: string;\n /** Plot height in px. Default 200. */\n height?: number;\n /** Draw axes + gridlines (ignored for `pie`). Default true. */\n showAxis?: boolean;\n /** Draw a series legend. Default false. */\n showLegend?: boolean;\n };\n}\n\n/** One node in a `tree`. Recursive — `children` nest arbitrarily deep. */\nexport interface TreeItem {\n id: string;\n label: string;\n glyph?: GlyphKind;\n /** A small trailing count / marker. */\n badge?: string | number;\n children?: TreeItem[];\n}\n\n/**\n * A hierarchical, collapsible list — playlist folders, namespace trees,\n * thread forks, file browsers. The host owns `bind.selected` /\n * `bind.expanded`; a click dispatches `onSelect` / `onToggle`. When `bind`\n * is omitted the tree manages expand/collapse internally.\n */\nexport interface TreeNode extends NodeBase {\n type: \"tree\";\n props: {\n items: TreeItem[];\n /** Item ids expanded on first render. */\n defaultExpanded?: string[];\n };\n bind?: { selected?: string; expanded?: string[] };\n actions?: { onSelect?: ActionDesc; onToggle?: ActionDesc };\n}\n\n/**\n * An editable set of tags — type-and-enter to add, click ✕ to remove,\n * optional autocomplete `suggestions`. The fourth stateful input\n * (alongside `select`, `text-input`, `segmented`); the host owns\n * `bind.tags` and re-renders on `onChange`.\n */\nexport interface TagInputNode extends NodeBase {\n type: \"tag-input\";\n props?: {\n placeholder?: string;\n suggestions?: string[];\n size?: TextSize;\n disabled?: boolean;\n };\n bind: { tags: string[] };\n actions?: { onChange?: ActionDesc };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.5 — library-workspace nodes (4)\n//\n// `popover` is a container whose children are an anchored panel — it owns\n// its own open/close state, so it needs no `bind`. `slider` + `rating` are\n// the fifth + sixth stateful inputs (alongside select / text-input /\n// segmented / tag-input): the host owns `bind.value`, a change dispatches\n// `onChange`. `thumbnail` is a read-only rectangular image token. These\n// four close the gap between the visualization palette and a full\n// library-management workspace (a configurable grid + filter + column\n// popovers + a record editor). See ADR-105.\n// ---------------------------------------------------------------------------\n\n/** Which edge of the trigger a `popover` panel aligns to. */\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\n/** Corner rounding for a `thumbnail`. */\nexport type ThumbnailRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\n/** Aspect ratio for a `thumbnail`. */\nexport type ThumbnailAspect = \"square\" | \"video\" | \"wide\";\n\n/**\n * A trigger button paired with an anchored panel. Clicking the trigger\n * opens `children` in a popover; an outside click or `Escape` closes it.\n * The popover owns its open state — it is presentation, not host state —\n * so there is no `bind`. The toolbar Columns + Filters controls of a\n * library view are `popover` nodes wrapping a `column-config` / `facet`\n * panel.\n */\nexport interface PopoverNode extends NodeBase {\n type: \"popover\";\n props: {\n /** The trigger button's label. */\n label: string;\n /** An optional leading glyph on the trigger. */\n glyph?: GlyphKind;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Which trigger edge the panel aligns to. Default `start`. */\n align?: PopoverAlign;\n /** A small count/marker badge on the trigger (e.g. active filters). */\n badge?: string | number;\n };\n /** The popover panel content. */\n children?: SRPNode[];\n}\n\n/**\n * A draggable numeric input — the continuous sibling of `select`. The host\n * owns `bind.value`; a drag (or arrow key) dispatches `onChange` with the\n * new value. Distinct from `meter` (read-only measurement) and `progress`\n * (advancing-toward-done): `slider` is an editable control.\n */\nexport interface SliderNode extends NodeBase {\n type: \"slider\";\n props: {\n min: number;\n max: number;\n /** Snap increment. Default 1. */\n step?: number;\n tone?: VizTone;\n label?: string;\n /** Render the current value as text beside the track. Default false. */\n showValue?: boolean;\n size?: VizSize;\n disabled?: boolean;\n };\n bind: { value: number };\n actions?: { onChange?: ActionDesc };\n}\n\n/**\n * A row of stars. With `readOnly` it is a display (a table cell, a card\n * field); otherwise it is an input — clicking a star dispatches `onChange`\n * with the new value. The host owns `bind.value`.\n */\nexport interface RatingNode extends NodeBase {\n type: \"rating\";\n props?: {\n /** Star count. Default 5. */\n max?: number;\n size?: VizSize;\n /** Display only — no interaction, no `onChange`. Default false. */\n readOnly?: boolean;\n tone?: VizTone;\n };\n bind: { value: number };\n actions?: { onChange?: ActionDesc };\n}\n\n/**\n * A rectangular image token — album art, a file preview, a cover. An\n * `src` image, or a semantic `glyph` fallback when `src` is absent or\n * fails to load. Distinct from `avatar` (a square identity token that\n * derives initials from a name): `thumbnail` is content imagery with a\n * configurable aspect ratio.\n */\nexport interface ThumbnailNode extends NodeBase {\n type: \"thumbnail\";\n props: {\n /** Accessible description — required even when `src` is set. */\n alt: string;\n src?: string;\n /** Fallback glyph when `src` is absent or fails to load. */\n glyph?: GlyphKind;\n size?: VizSize;\n /** Corner rounding. Default `sm`. */\n radius?: ThumbnailRadius;\n /** Aspect ratio. Default `square`. */\n aspect?: ThumbnailAspect;\n };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.6 — configuration-control nodes (2)\n//\n// `facet-grid` + `column-config` are the declarative bodies of the\n// Filters and Columns popovers of a library workspace. Both are stateful\n// inputs in the v0.1 ownership model — the host owns `bind`, an\n// interaction dispatches an intent. They pair with `data-table`:\n// `facet-grid` chooses which rows it shows, `column-config` chooses which\n// columns. See ADR-106.\n// ---------------------------------------------------------------------------\n\n/** One selectable option within a `facet-grid` category. */\nexport interface FacetOption {\n value: string;\n label: string;\n /** A corpus count rendered as a trailing badge on the chip. */\n count?: number;\n}\n\n/** One category (tab) of a `facet-grid` — e.g. genre, mood, vibe. */\nexport interface FacetCategory {\n id: string;\n label: string;\n options: FacetOption[];\n}\n\n/**\n * A faceted filter — a row of category tabs, and beneath the active tab a\n * wrapped grid of selectable, count-bearing chips. The host owns the\n * active category (`bind.active`) and the selected values per category\n * (`bind.selected`); a tab pick dispatches `onFacetChange`, a chip toggle\n * dispatches `onToggle`. The Filters panel's tag section of a library\n * view is a `facet-grid`.\n */\nexport interface FacetGridNode extends NodeBase {\n type: \"facet-grid\";\n props: {\n facets: FacetCategory[];\n };\n bind: {\n /** The active category id. */\n active: string;\n /** Selected values, keyed by category id. */\n selected?: Record<string, string[]>;\n };\n actions?: {\n /** Category tab changed — payload `{ facet }`. */\n onFacetChange?: ActionDesc;\n /** A chip toggled — payload `{ facet, value }`. */\n onToggle?: ActionDesc;\n };\n}\n\n/** One configurable column in a `column-config`. */\nexport interface ColumnConfigColumn {\n id: string;\n label: string;\n}\n\n/** A named visible-column set a `column-config` can apply in one click. */\nexport interface ColumnConfigPreset {\n id: string;\n label: string;\n /** The visible column ids, in order. */\n columns: string[];\n}\n\n/**\n * A grid column picker — preset buttons plus a drag-to-reorder list of\n * visibility checkboxes. The host owns `bind.visible` (the visible column\n * ids, in display order); any change dispatches `onChange` with the new\n * order. Pairs with `data-table` — `bind.visible` selects + orders the\n * table's columns. The Columns panel of a library view is a\n * `column-config`.\n */\nexport interface ColumnConfigNode extends NodeBase {\n type: \"column-config\";\n props: {\n columns: ColumnConfigColumn[];\n presets?: ColumnConfigPreset[];\n };\n bind: {\n /** The visible column ids, in display order. */\n visible: string[];\n };\n actions?: {\n /** Visibility or order changed — payload `{ visible }`. */\n onChange?: ActionDesc;\n };\n}\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAqFH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;IACR,aAAa;IACb,aAAa;IACb,QAAQ;IACR,aAAa;IACb,aAAa;IACb,UAAU;IACV,6CAA6C;IAC7C,MAAM;IACN,YAAY;IACZ,OAAO;IACP,YAAY;IACZ,MAAM;IACN,4BAA4B;IAC5B,WAAW;IACX,uCAAuC;IACvC,OAAO;IACP,OAAO;IACP,QAAQ;IACR,UAAU;IACV,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,qCAAqC;IACrC,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,yCAAyC;IACzC,YAAY;IACZ,eAAe;CACP,CAAC","sourcesContent":["/**\n * SRP v0.6 — TypeScript schema types.\n *\n * The Syncropel Rendering Protocol is a narrow JSON schema of block-level\n * primitives for declarative UI documents. See the spec and examples at\n * https://syncropel.com.\n *\n * v0.2 adds five interactive container + input nodes (tabs, data-table,\n * board, text-input, form). v0.3 adds the `segmented` node plus a\n * polished-data-grid increment to `data-table`. v0.4 adds eight\n * visualization + hierarchy nodes — `meter`, `gauge`, `avatar`,\n * `progress`, `sparkline`, `chart`, `tree`, `tag-input` — plus\n * `data-table` row selection and a two-line cell kind. v0.5 adds four\n * library-workspace nodes — `popover`, `slider`, `rating`, `thumbnail` —\n * plus `data-table` sticky columns and `meter` / `rating` / `thumbnail`\n * cell kinds. v0.6 adds two configuration-control nodes — `facet-grid`\n * (a faceted filter) and `column-config` (a grid column picker). v0.7\n * adds no node types — it is pure grammar: the host action grammar\n * (`emit` / `set-state` / `navigate` / `open-pane`), the `QueryBinding`\n * forms, and the expression sublanguage in `expr.ts`. Every addition is\n * additive + backwards-compatible: every v0.1–v0.6 document remains\n * valid. See ADR-102 through ADR-109.\n */\n\n// ---------------------------------------------------------------------------\n// Document envelope\n// ---------------------------------------------------------------------------\n\n/**\n * An SRP v0.1 document — the top-level envelope a Tier-1 extension emits.\n */\nexport interface SRPDocument {\n /**\n * Protocol version. A `\"0.2\"` document may use the v0.2 node additions;\n * a `\"0.3\"` document may additionally use `segmented` + the data-grid\n * props; a `\"0.4\"` document may additionally use the visualization +\n * hierarchy nodes. The version is a capability advertisement, not an\n * enforcement boundary — node validity is decided by `NODE_TYPES`\n * membership.\n */\n srp: \"0.1\" | \"0.2\" | \"0.3\" | \"0.4\" | \"0.5\" | \"0.6\" | \"0.7\";\n meta?: SRPMeta;\n root: SRPNode;\n}\n\nexport interface SRPMeta {\n name?: string;\n version?: string;\n description?: string;\n publisher?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Discriminated union of all 33 node types\n// ---------------------------------------------------------------------------\n\nexport type SRPNode =\n // Containers (5)\n | ColumnNode\n | RowNode\n | GridNode\n | CardNode\n | DividerNode\n // Record rendering (3)\n | RecordLineNode\n | RecordLineListNode\n | ChipNode\n // Data display (4)\n | HeadingNode\n | TextNode\n | StatNode\n | KeyValueNode\n // Interactive (4)\n | ButtonNode\n | IconButtonNode\n | CopyButtonNode\n | SelectNode\n // Feedback (3)\n | EmptyStateNode\n | ErrorStateNode\n | SkeletonNode\n // Interactive containers + inputs — SRP v0.2 (5)\n | TabsNode\n | DataTableNode\n | BoardNode\n | TextInputNode\n | FormNode\n // Choice control — SRP v0.3 (1)\n | SegmentedNode\n // Visualization + hierarchy — SRP v0.4 (8)\n | MeterNode\n | GaugeNode\n | AvatarNode\n | ProgressNode\n | SparklineNode\n | ChartNode\n | TreeNode\n | TagInputNode\n // Library-workspace nodes — SRP v0.5 (4)\n | PopoverNode\n | SliderNode\n | RatingNode\n | ThumbnailNode\n // Configuration-control nodes — SRP v0.6 (2)\n | FacetGridNode\n | ColumnConfigNode;\n\n/**\n * The 39 canonical node-type discriminator strings (19 v0.1 + 5 v0.2 +\n * 1 v0.3 + 8 v0.4 + 4 v0.5 + 2 v0.6).\n */\nexport const NODE_TYPES = [\n \"column\",\n \"row\",\n \"grid\",\n \"card\",\n \"divider\",\n \"record-line\",\n \"record-line-list\",\n \"chip\",\n \"heading\",\n \"text\",\n \"stat\",\n \"key-value\",\n \"button\",\n \"icon-button\",\n \"copy-button\",\n \"select\",\n \"empty-state\",\n \"error-state\",\n \"skeleton\",\n // SRP v0.2 — interactive containers + inputs\n \"tabs\",\n \"data-table\",\n \"board\",\n \"text-input\",\n \"form\",\n // SRP v0.3 — choice control\n \"segmented\",\n // SRP v0.4 — visualization + hierarchy\n \"meter\",\n \"gauge\",\n \"avatar\",\n \"progress\",\n \"sparkline\",\n \"chart\",\n \"tree\",\n \"tag-input\",\n // SRP v0.5 — library-workspace nodes\n \"popover\",\n \"slider\",\n \"rating\",\n \"thumbnail\",\n // SRP v0.6 — configuration-control nodes\n \"facet-grid\",\n \"column-config\",\n] as const;\n\nexport type NodeType = (typeof NODE_TYPES)[number];\n\n// ---------------------------------------------------------------------------\n// Fields every node may carry\n// ---------------------------------------------------------------------------\n\ninterface NodeBase {\n when?: string;\n bind?: Record<string, unknown>;\n actions?: Record<string, SRPAction>;\n}\n\n// ---------------------------------------------------------------------------\n// Token unions (mirror @syncropel/react token scales)\n// ---------------------------------------------------------------------------\n\nexport type Gap = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type Padding = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type DividerSpacing = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type Cols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n\nexport type ColumnAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\nexport type RowAlign = \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\nexport type Justify =\n | \"start\"\n | \"center\"\n | \"end\"\n | \"between\"\n | \"around\"\n | \"evenly\";\n\nexport type RecordLineVariant =\n | \"feed\"\n | \"compact\"\n | \"detail\"\n | \"search\"\n | \"thread\";\n\nexport type ChipTone = \"default\" | \"info\" | \"warn\" | \"error\";\n\nexport type TextSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type TextWeight = \"normal\" | \"medium\" | \"semibold\";\nexport type TextTone =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"success\"\n | \"warning\"\n | \"danger\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\";\n\nexport type SkeletonShape = \"rect\" | \"circle\" | \"text\";\n\n// --- SRP v0.2 tokens ---\nexport type TableColumnAlign = \"start\" | \"end\";\nexport type DataTableVariant = \"default\" | \"compact\";\nexport type TextInputKind = \"text\" | \"search\";\n/**\n * How a `data-table` column renders its cell value. `text` (default) is a\n * plain string; `chip` renders the value as a compact metadata chip;\n * `lines` (SRP v0.4) renders a two-line cell — the value at `key` as the\n * primary line and the value at the column's `subKey` as a muted subtitle.\n *\n * SRP v0.5 adds three visual cell kinds: `meter` renders a numeric `0..1`\n * value as an inline bar (recoloured by the column's `thresholds`);\n * `rating` renders a numeric value as a row of stars (count from the\n * column's `max`); `thumbnail` renders a URL-valued cell as a small image.\n */\nexport type TableCellKind =\n | \"text\"\n | \"chip\"\n | \"lines\"\n | \"meter\"\n | \"rating\"\n | \"thumbnail\";\n\n// --- SRP v0.3 tokens ---\n\n/**\n * A row accent tone — `data-table` `rowTone` paints a left-border (and a\n * subtle tint) keyed off a column value. Wider than `ChipTone`: it adds\n * `accent` and `success` so a row can read as \"in progress\" / \"done\".\n */\nexport type RowTone =\n | \"default\"\n | \"accent\"\n | \"success\"\n | \"warn\"\n | \"error\"\n | \"info\";\n\n/** Sort direction for a `data-table` column. */\nexport type SortDirection = \"asc\" | \"desc\";\n\n/** Which side of the row a `data-table` `rowActions` cell sits on. */\nexport type RowActionPosition = \"leading\" | \"trailing\";\n\n/**\n * How a `segmented` control presents. `solid` (default) is a light pill\n * group; `underline` is a borderless tab strip (active option underlined).\n * Added in SRP v0.3.1.\n */\nexport type SegmentedVariant = \"solid\" | \"underline\";\n\n// --- SRP v0.4 tokens ---\n\n/**\n * A visualization tone — shared by `meter`, `gauge`, `progress`,\n * `sparkline`, and `chart`. Drives the fill / stroke colour. Added SRP v0.4.\n */\nexport type VizTone =\n | \"neutral\"\n | \"accent\"\n | \"success\"\n | \"warn\"\n | \"error\"\n | \"info\";\n\n/** A visualization size step — shared by the SRP v0.4 viz nodes. */\nexport type VizSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\n/** How a `meter` renders its fill — one bar, or a row of discrete cells. */\nexport type MeterVariant = \"continuous\" | \"segmented\";\n\n/** How a `sparkline` renders its series. */\nexport type SparklineVariant = \"line\" | \"bar\";\n\n/** The plot kind a `chart` draws. */\nexport type ChartKind = \"line\" | \"area\" | \"bar\" | \"pie\";\n\n/**\n * Glyph kinds — the closed enumeration of semantic symbols the palette renders.\n * Covers act types, domain objects, thread states, and the AITL marker.\n */\nexport type GlyphKind =\n // Act types (coordination)\n | \"INTEND\"\n | \"DO\"\n | \"KNOW\"\n | \"LEARN\"\n // Act types (effects)\n | \"GET\"\n | \"PUT\"\n | \"CALL\"\n | \"MAP\"\n // AITL marker\n | \"AITL\"\n // Domain objects\n | \"thread\"\n | \"fork\"\n | \"record-parent\"\n | \"namespace\"\n | \"actor\"\n | \"file\"\n | \"pattern\"\n | \"page\"\n | \"view\"\n // Thread states\n | \"state-open\"\n | \"state-active\"\n | \"state-converged\"\n | \"state-closed\"\n | \"state-abandoned\";\n\n// ---------------------------------------------------------------------------\n// Actions + queries\n// ---------------------------------------------------------------------------\n\n/**\n * The legacy (SRP ≤ v0.6) action form — an opaque intent name dispatched\n * to a host-supplied handler. Still valid in v0.7 as the escape hatch for\n * a non-generic host; new workspace records SHOULD prefer the v0.7 verbs.\n */\nexport interface ActionDesc {\n intent: string;\n payload?: Record<string, unknown>;\n}\n\n// --- SRP v0.7 — the host action grammar (ADR-109 D1) -----------------------\n\n/**\n * A record-emit specification. String values anywhere in `body` (and in\n * `thread`) may carry `{…}` interpolation resolved against the action\n * scope (`form.*`, `row.*`, `state.*`). `thread: \"$new\"` directs the host\n * to allocate a fresh `th_` id.\n */\nexport interface EmitSpec {\n /** Act type — INTEND | DO | KNOW | LEARN | GET | PUT | CALL | MAP. */\n act: string;\n /** Target thread id, or `\"$new\"` for a host-generated fresh thread. */\n thread: string;\n /** The record body. */\n body: Record<string, unknown>;\n}\n\n/**\n * v0.7 — emit a record via the SDK. Capability-checked by the generic\n * host against the workspace record's `meta.capabilities.emit`\n * (ADR-109 D5). An optional `id` keys the mutation lifecycle (ADR-109 D3);\n * `optimistic` supplies a body the host inserts immediately and rolls\n * back on failure.\n */\nexport interface EmitAction {\n emit: EmitSpec;\n id?: string;\n optimistic?: Record<string, unknown>;\n /**\n * v0.7 — actions dispatched *after* the emit resolves successfully.\n * The host runs them in order once the record is emitted (used to\n * close + clear a composer after a create). They do not run on\n * failure — so an error guard inside the still-open form can show.\n */\n onSuccess?: SRPAction[];\n}\n\n/** v0.7 — write the host state bag (ADR-109 D6). */\nexport interface SetStateAction {\n setState: { key: string; value: unknown };\n}\n\n/** v0.7 — route the viewer. Scope-checked against `meta.capabilities.navigate`. */\nexport interface NavigateAction {\n /** Target path; may carry `{…}` interpolation. */\n navigate: string;\n}\n\n/** v0.7 — open a record in a `<WorkspaceShell>` region. */\nexport interface OpenPaneAction {\n openPane: { region: string; record: string };\n}\n\n/**\n * An SRP action — what an event binding triggers. v0.7 adds four\n * self-describing verbs a generic host executes with no workspace-specific\n * code; the legacy `ActionDesc` form remains a member for compatibility.\n */\nexport type SRPAction =\n | ActionDesc\n | EmitAction\n | SetStateAction\n | NavigateAction\n | OpenPaneAction;\n\n/**\n * v0.7 — a named query binding (ADR-109 D4). A node's `bind.query` is\n * either a raw {@link VQLQuery} (legacy) or a `QueryBinding`. `name` lets\n * the host expose a query-count via the expression path\n * `query.<name>.count`. Exactly one of `filter` / `fold` is set:\n * `filter` is a raw ADR-037 VQL query; `fold` names a server-side\n * projection/fold endpoint (e.g. `\"tasks.snapshot\"`).\n */\nexport interface QueryBinding {\n name: string;\n filter?: VQLQuery;\n fold?: string;\n /**\n * v0.7 — an optional client-side row filter: an expression\n * (see `expr.ts`) evaluated per row against `{ row, state }`. Rows for\n * which it is falsy are dropped *after* fetch. This is the host-owned\n * post-fetch transform that lets filter state (`@state.*`) narrow a\n * query without re-hitting the server (ADR-109 D6).\n */\n where?: string;\n}\n\n/**\n * VQL (Value Query Language) — the query shape a Syncropel server resolves\n * against its record store. Used by `record-line-list` nodes that bind to\n * a live query rather than a static list of record ids.\n *\n * The shape is deliberately open (index signature) — additional fields\n * are protocol extensions the server understands.\n */\nexport interface VQLQuery {\n act?: string;\n actor?: string;\n thread?: string;\n kind?: string;\n since?: number;\n limit?: number;\n [k: string]: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Container node definitions (5)\n// ---------------------------------------------------------------------------\n\nexport interface ColumnNode extends NodeBase {\n type: \"column\";\n props?: { gap?: Gap; align?: ColumnAlign; justify?: Justify };\n children?: SRPNode[];\n}\n\nexport interface RowNode extends NodeBase {\n type: \"row\";\n props?: {\n gap?: Gap;\n align?: RowAlign;\n justify?: Justify;\n wrap?: boolean;\n };\n children?: SRPNode[];\n}\n\nexport interface GridNode extends NodeBase {\n type: \"grid\";\n props: { cols: Cols; gap?: Gap; rowGap?: Gap; colGap?: Gap };\n children?: SRPNode[];\n}\n\nexport interface CardNode extends NodeBase {\n type: \"card\";\n props?: { padding?: Padding; interactive?: boolean };\n children?: SRPNode[];\n}\n\nexport interface DividerNode extends NodeBase {\n type: \"divider\";\n props?: { orientation?: \"horizontal\" | \"vertical\"; spacing?: DividerSpacing };\n}\n\n// ---------------------------------------------------------------------------\n// Record-rendering (3)\n// ---------------------------------------------------------------------------\n\nexport interface RecordLineNode extends NodeBase {\n type: \"record-line\";\n props: {\n variant: RecordLineVariant;\n /**\n * SRP v0.3 — an optional dotted body path (`body.priority`). When set,\n * the line renders a small chip carrying that field's value. Lets\n * `board` cards (which render through `record-line`) show a priority\n * or status chip.\n */\n chipField?: string;\n };\n bind: { record: string };\n}\n\nexport interface RecordLineListNode extends NodeBase {\n type: \"record-line-list\";\n props: { variant: RecordLineVariant; max?: number; empty?: string };\n bind: { query: VQLQuery | QueryBinding } | { items: string[] };\n}\n\nexport interface ChipNode extends NodeBase {\n type: \"chip\";\n props: { label: string; tone?: ChipTone; glyph?: GlyphKind };\n}\n\n// ---------------------------------------------------------------------------\n// Data display (4)\n// ---------------------------------------------------------------------------\n\nexport interface HeadingNode extends NodeBase {\n type: \"heading\";\n props: { level: 1 | 2 | 3 | 4 | 5 | 6; text: string };\n}\n\nexport interface TextNode extends NodeBase {\n type: \"text\";\n props: {\n text: string;\n size?: TextSize;\n weight?: TextWeight;\n tone?: TextTone;\n inline?: boolean;\n };\n}\n\nexport interface StatNode extends NodeBase {\n type: \"stat\";\n props: {\n label: string;\n value: string | number;\n delta?: string | number;\n deltaTone?: \"auto\" | \"neutral\";\n };\n}\n\nexport interface KeyValueNode extends NodeBase {\n type: \"key-value\";\n props: { label: string; value: string };\n}\n\n// ---------------------------------------------------------------------------\n// Interactive (4)\n// ---------------------------------------------------------------------------\n\nexport interface ButtonNode extends NodeBase {\n type: \"button\";\n props: {\n label: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n };\n actions?: { onClick?: SRPAction };\n}\n\nexport interface IconButtonNode extends NodeBase {\n type: \"icon-button\";\n props: {\n glyph: GlyphKind;\n ariaLabel: string;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean;\n loading?: boolean;\n };\n actions?: { onClick?: SRPAction };\n}\n\nexport interface CopyButtonNode extends NodeBase {\n type: \"copy-button\";\n props: { value: string; label?: string };\n}\n\nexport interface SelectNode extends NodeBase {\n type: \"select\";\n props: { options: { label: string; value: string }[] };\n bind: { value: string };\n actions?: { onChange?: SRPAction };\n}\n\n// ---------------------------------------------------------------------------\n// Feedback (3)\n// ---------------------------------------------------------------------------\n\nexport interface EmptyStateNode extends NodeBase {\n type: \"empty-state\";\n props: {\n message: string;\n action?: { label: string; intent: string };\n };\n}\n\nexport interface ErrorStateNode extends NodeBase {\n type: \"error-state\";\n props: {\n message: string;\n retry?: { intent: string };\n };\n}\n\nexport interface SkeletonNode extends NodeBase {\n type: \"skeleton\";\n props?: {\n shape?: SkeletonShape;\n width?: string | number | \"full\";\n height?: string | number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.2 — interactive containers + inputs (5)\n//\n// All five reuse the v0.1 contract: `props` is static config, `bind` is\n// host-supplied state, `actions` declares intents the host dispatches. SRP\n// owns layout + shape; the host owns state + behaviour. See ADR-102 and the\n// SRP v0.2 design spec.\n// ---------------------------------------------------------------------------\n\n/**\n * A container whose children are panels; one panel shows at a time. The host\n * supplies the active tab id via `bind.active` and renders the panel whose\n * index matches it in `props.tabs`.\n */\nexport interface TabsNode extends NodeBase {\n type: \"tabs\";\n props: { tabs: { id: string; label: string; glyph?: GlyphKind }[] };\n bind: { active: string };\n actions?: { onTabChange?: SRPAction };\n /** Panels, parallel to `props.tabs` by index. */\n children?: SRPNode[];\n}\n\n/** A single `data-table` column definition. */\nexport interface DataTableColumnDef {\n /** Dotted path into each row (`body.goal`, `actor`). */\n key: string;\n label: string;\n align?: TableColumnAlign;\n width?: string;\n /** How the cell value renders. Default `text`. */\n kind?: TableCellKind;\n /**\n * SRP v0.3 — for a `kind: \"chip\"` column, a map from cell value to chip\n * tone. A value with no entry renders a `default`-tone chip.\n */\n tones?: Record<string, ChipTone>;\n /**\n * SRP v0.3 — an explicit value order for sorting this column. When the\n * column is the sort key, rows order by each value's index in this list\n * (so `critical` < `high` < `medium` < `low`, not alphabetical). Values\n * absent from the list sort after the listed ones.\n */\n order?: string[];\n /**\n * SRP v0.4 — for a `kind: \"lines\"` column, the dotted path whose value\n * renders as the muted second line beneath the `key` value.\n */\n subKey?: string;\n /**\n * SRP v0.5 — for a `kind: \"meter\"` column, value-keyed recolouring of\n * the inline bar (energy low→high, score bands). List in ascending `at`.\n */\n thresholds?: VizThreshold[];\n /**\n * SRP v0.5 — for a `kind: \"rating\"` column, the number of stars. Also\n * the default tone source for a `meter` cell when no `thresholds` match.\n * Default 5.\n */\n max?: number;\n}\n\n/** SRP v0.3 — a `data-table` sort descriptor. */\nexport interface TableSort {\n key: string;\n direction: SortDirection;\n}\n\n/**\n * SRP v0.3 — a per-row action affordance on a `data-table`. Rendered as a\n * small button in a leading or trailing cell; a click dispatches `intent`\n * with the row merged into the payload as `row`.\n */\nexport interface TableRowAction {\n /** Stable identifier for this row action (also the legacy intent name). */\n intent: string;\n /** A semantic glyph for an icon-only affordance. */\n glyph?: GlyphKind;\n /** A text label — used when no `glyph` is given (or as the aria-label). */\n label?: string;\n /** Which side of the row the action cell sits on. Default `leading`. */\n position?: RowActionPosition;\n /**\n * v0.7 — the action a click triggers. When set, the host dispatches\n * this `SRPAction` with the row as runtime context (`{row}`); when\n * omitted, the legacy `{ intent, payload: { row } }` form is dispatched.\n */\n action?: SRPAction;\n}\n\n/**\n * SRP v0.3 — a `data-table` row accent. The row paints a left-border (and\n * a subtle tint) whose tone is looked up from `tones` by the value at\n * `key`. A value with no entry gets no accent.\n */\nexport interface TableRowTone {\n /** Dotted path into the row whose value selects the tone. */\n key: string;\n tones: Record<string, RowTone>;\n}\n\n/**\n * A columnar record list — richer than `record-line-list`: explicit columns,\n * alignment, optional sort. `column.key` is a dotted path into each row.\n *\n * SRP v0.3 adds the polished-data-grid props: column `tones` + `order`,\n * `defaultSort`, `rowActions`, and `rowTone`. SRP v0.4 adds `selectable`\n * (a leading checkbox column with multi-select) — all optional + additive.\n */\nexport interface DataTableNode extends NodeBase {\n type: \"data-table\";\n props: {\n columns: DataTableColumnDef[];\n variant?: DataTableVariant;\n sortable?: boolean;\n empty?: string;\n /** SRP v0.3 — the sort applied before any header interaction. */\n defaultSort?: TableSort;\n /** SRP v0.3 — per-row action affordances. */\n rowActions?: TableRowAction[];\n /** SRP v0.3 — a value-keyed row accent. */\n rowTone?: TableRowTone;\n /**\n * SRP v0.4 — render a leading checkbox column with a select-all\n * header. The table owns selection state and dispatches\n * `onSelectionChange` with the selected rows.\n */\n selectable?: boolean;\n /**\n * SRP v0.5 — pin the first N columns (and the leading checkbox /\n * action cells) so they stay visible while the rest scroll\n * horizontally. Default 0 (no pinned columns).\n */\n stickyColumns?: number;\n };\n bind: { query: VQLQuery | QueryBinding } | { rows: Record<string, unknown>[] };\n actions?: {\n onRowClick?: SRPAction;\n onSort?: SRPAction;\n /** SRP v0.4 — fired (with `rows`) when the selection changes. */\n onSelectionChange?: SRPAction;\n };\n}\n\n/**\n * A kanban board — records bucketed into columns by the `props.groupBy` field.\n * A record lands in the column whose `id` equals its `groupBy` value; records\n * matching no column are dropped. `onCardMove` is advisory — a host MAY\n * support drag; a board without drag is read-only and still valid.\n */\nexport interface BoardNode extends NodeBase {\n type: \"board\";\n props: {\n columns: { id: string; label: string }[];\n groupBy: string;\n cardVariant?: RecordLineVariant;\n /**\n * SRP v0.3 — a dotted body path passed through to each card's\n * `record-line` as its `chipField`, so cards show a metadata chip\n * (e.g. `body.priority`).\n */\n cardChipField?: string;\n };\n bind: { query: VQLQuery | QueryBinding };\n actions?: { onCardClick?: SRPAction; onCardMove?: SRPAction };\n}\n\n/**\n * An editable text field — the `select` of free text. The host owns\n * `bind.value` and re-renders on change (identical ownership model to\n * `select`).\n */\nexport interface TextInputNode extends NodeBase {\n type: \"text-input\";\n props?: {\n placeholder?: string;\n multiline?: boolean;\n inputKind?: TextInputKind;\n size?: TextSize;\n disabled?: boolean;\n };\n bind: { value: string };\n actions?: { onChange?: SRPAction; onSubmit?: SRPAction };\n}\n\n/**\n * A container that groups inputs and declares a submit intent. The host\n * collects child input values (by their `bind`) and dispatches `onSubmit`.\n */\nexport interface FormNode extends NodeBase {\n type: \"form\";\n props?: { submitLabel?: string; busy?: boolean };\n actions?: { onSubmit?: SRPAction };\n children?: SRPNode[];\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.3 — choice control (1)\n//\n// `segmented` is the third stateful input (alongside `select` + `text-input`)\n// and reuses the same ownership model: `bind.value` is host-supplied, a\n// pick dispatches `onChange`. See ADR-103.\n// ---------------------------------------------------------------------------\n\n/** One option in a `segmented` control. */\nexport interface SegmentedOption {\n value: string;\n label: string;\n /** An optional count/marker rendered as a small badge on the option. */\n badge?: string | number;\n}\n\n/**\n * A row of mutually-exclusive options — a filter/choice control. Distinct\n * from `tabs`: it has no panels, it is purely a bound value. The host owns\n * `bind.value`; picking an option dispatches `onChange` with the new value.\n */\nexport interface SegmentedNode extends NodeBase {\n type: \"segmented\";\n props: {\n options: SegmentedOption[];\n size?: ButtonSize;\n /** Presentation — `solid` (light pill group, default) or `underline`\n * (borderless tab strip). Added in SRP v0.3.1. */\n variant?: SegmentedVariant;\n };\n bind: { value: string };\n actions?: { onChange?: SRPAction };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.4 — visualization + hierarchy nodes (8)\n//\n// `meter`, `gauge`, `progress`, `sparkline`, `chart` are read-only data\n// displays — `props` carries the values, there is no `bind`. `avatar` is a\n// read-only identity token. `tree` + `tag-input` are interactive: they\n// reuse the v0.1 ownership model — `bind` is host state, `actions` declares\n// dispatched intents. Music-specific widgets (waveforms, transition tables)\n// are NOT in SRP — a renderer registers those as plug-in node types. See\n// ADR-104.\n// ---------------------------------------------------------------------------\n\n/**\n * A value→tone threshold for a `meter`. The meter's value selects the\n * highest threshold whose `at` it reaches; that tone recolours the fill.\n * List thresholds in ascending `at` order.\n */\nexport interface VizThreshold {\n at: number;\n tone: VizTone;\n}\n\n/**\n * A horizontal bar gauge — renders a `0..1` reading as a proportional\n * fill. `continuous` is a single bar; `segmented` is a row of discrete\n * cells. `thresholds` recolours the meter by value (energy low→high,\n * trust score, match confidence).\n */\nexport interface MeterNode extends NodeBase {\n type: \"meter\";\n props: {\n /** The reading, clamped to `0..1`. */\n value: number;\n tone?: VizTone;\n variant?: MeterVariant;\n /** Cell count when `variant: \"segmented\"`. Default 5. */\n segments?: number;\n /** Value-keyed recolouring; overrides `tone` for the matched band. */\n thresholds?: VizThreshold[];\n size?: VizSize;\n /** Optional caption rendered beside the bar. */\n label?: string;\n };\n}\n\n/** A coloured band on a `gauge` arc — e.g. a Dial zone. */\nexport interface GaugeZone {\n from: number;\n to: number;\n tone: VizTone;\n label?: string;\n}\n\n/**\n * A radial arc gauge — renders a `0..1` reading on a 270° arc. Doubles as\n * the Syncropel Dial (the `d ∈ [0,1]` control surface, F3): `zones` paints\n * the REPLAY / ADAPT / EXPLORE / CREATE bands.\n */\nexport interface GaugeNode extends NodeBase {\n type: \"gauge\";\n props: {\n /** The reading, clamped to `0..1`. */\n value: number;\n label?: string;\n tone?: VizTone;\n /** Coloured arc bands — drawn behind the value sweep. */\n zones?: GaugeZone[];\n size?: VizSize;\n /** Render the numeric value in the arc centre. Default true. */\n showValue?: boolean;\n /** How the centre value reads. Default `decimal`. */\n format?: \"percent\" | \"decimal\";\n };\n}\n\n/**\n * A compact identity token — an image (`src`), or initials derived from\n * `name`, or a semantic `glyph` fallback. Square, rounded.\n */\nexport interface AvatarNode extends NodeBase {\n type: \"avatar\";\n props: {\n /** Display name — the source of initials + the accessible label. */\n name: string;\n src?: string;\n glyph?: GlyphKind;\n size?: VizSize;\n };\n}\n\n/**\n * A progress bar. With `value` it fills proportionally (determinate);\n * with `indeterminate` it animates with no known extent. Distinct from\n * `meter`: `progress` reads as \"advancing toward done\", `meter` as a\n * static measurement.\n */\nexport interface ProgressNode extends NodeBase {\n type: \"progress\";\n props?: {\n /** The fraction complete, `0..1`. Omit when `indeterminate`. */\n value?: number;\n indeterminate?: boolean;\n tone?: VizTone;\n label?: string;\n /** Render the percentage as text. Default false. */\n showValue?: boolean;\n size?: VizSize;\n };\n}\n\n/**\n * A tiny inline chart — a bare series with no axes or legend, for\n * trend-at-a-glance (cost over time, dispatch throughput, energy shape).\n */\nexport interface SparklineNode extends NodeBase {\n type: \"sparkline\";\n props: {\n values: number[];\n variant?: SparklineVariant;\n tone?: VizTone;\n /** Width in px, or `\"full\"` to fill the container. Default 96. */\n width?: number | \"full\";\n /** Height in px. Default 24. */\n height?: number;\n };\n}\n\n/** One point in a `chart` series. */\nexport interface ChartPoint {\n x: string | number;\n y: number;\n}\n\n/** One series in a `chart` — or, for a `pie`, one ring of slices. */\nexport interface ChartSeries {\n label?: string;\n tone?: VizTone;\n points: ChartPoint[];\n}\n\n/**\n * A labelled chart — a `line` / `area` / `bar` plot, or a `pie` whose\n * slices are `series[0].points`. Richer than `sparkline`: axes, a legend,\n * a title.\n */\nexport interface ChartNode extends NodeBase {\n type: \"chart\";\n props: {\n kind: ChartKind;\n series: ChartSeries[];\n title?: string;\n /** Plot height in px. Default 200. */\n height?: number;\n /** Draw axes + gridlines (ignored for `pie`). Default true. */\n showAxis?: boolean;\n /** Draw a series legend. Default false. */\n showLegend?: boolean;\n };\n}\n\n/** One node in a `tree`. Recursive — `children` nest arbitrarily deep. */\nexport interface TreeItem {\n id: string;\n label: string;\n glyph?: GlyphKind;\n /** A small trailing count / marker. */\n badge?: string | number;\n children?: TreeItem[];\n}\n\n/**\n * A hierarchical, collapsible list — playlist folders, namespace trees,\n * thread forks, file browsers. The host owns `bind.selected` /\n * `bind.expanded`; a click dispatches `onSelect` / `onToggle`. When `bind`\n * is omitted the tree manages expand/collapse internally.\n */\nexport interface TreeNode extends NodeBase {\n type: \"tree\";\n props: {\n items: TreeItem[];\n /** Item ids expanded on first render. */\n defaultExpanded?: string[];\n };\n bind?: { selected?: string; expanded?: string[] };\n actions?: { onSelect?: SRPAction; onToggle?: SRPAction };\n}\n\n/**\n * An editable set of tags — type-and-enter to add, click ✕ to remove,\n * optional autocomplete `suggestions`. The fourth stateful input\n * (alongside `select`, `text-input`, `segmented`); the host owns\n * `bind.tags` and re-renders on `onChange`.\n */\nexport interface TagInputNode extends NodeBase {\n type: \"tag-input\";\n props?: {\n placeholder?: string;\n suggestions?: string[];\n size?: TextSize;\n disabled?: boolean;\n };\n bind: { tags: string[] };\n actions?: { onChange?: SRPAction };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.5 — library-workspace nodes (4)\n//\n// `popover` is a container whose children are an anchored panel — it owns\n// its own open/close state, so it needs no `bind`. `slider` + `rating` are\n// the fifth + sixth stateful inputs (alongside select / text-input /\n// segmented / tag-input): the host owns `bind.value`, a change dispatches\n// `onChange`. `thumbnail` is a read-only rectangular image token. These\n// four close the gap between the visualization palette and a full\n// library-management workspace (a configurable grid + filter + column\n// popovers + a record editor). See ADR-105.\n// ---------------------------------------------------------------------------\n\n/** Which edge of the trigger a `popover` panel aligns to. */\nexport type PopoverAlign = \"start\" | \"center\" | \"end\";\n\n/** Corner rounding for a `thumbnail`. */\nexport type ThumbnailRadius = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\n/** Aspect ratio for a `thumbnail`. */\nexport type ThumbnailAspect = \"square\" | \"video\" | \"wide\";\n\n/**\n * A trigger button paired with an anchored panel. Clicking the trigger\n * opens `children` in a popover; an outside click or `Escape` closes it.\n * The popover owns its open state — it is presentation, not host state —\n * so there is no `bind`. The toolbar Columns + Filters controls of a\n * library view are `popover` nodes wrapping a `column-config` / `facet`\n * panel.\n */\nexport interface PopoverNode extends NodeBase {\n type: \"popover\";\n props: {\n /** The trigger button's label. */\n label: string;\n /** An optional leading glyph on the trigger. */\n glyph?: GlyphKind;\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Which trigger edge the panel aligns to. Default `start`. */\n align?: PopoverAlign;\n /** A small count/marker badge on the trigger (e.g. active filters). */\n badge?: string | number;\n };\n /** The popover panel content. */\n children?: SRPNode[];\n}\n\n/**\n * A draggable numeric input — the continuous sibling of `select`. The host\n * owns `bind.value`; a drag (or arrow key) dispatches `onChange` with the\n * new value. Distinct from `meter` (read-only measurement) and `progress`\n * (advancing-toward-done): `slider` is an editable control.\n */\nexport interface SliderNode extends NodeBase {\n type: \"slider\";\n props: {\n min: number;\n max: number;\n /** Snap increment. Default 1. */\n step?: number;\n tone?: VizTone;\n label?: string;\n /** Render the current value as text beside the track. Default false. */\n showValue?: boolean;\n size?: VizSize;\n disabled?: boolean;\n };\n bind: { value: number };\n actions?: { onChange?: SRPAction };\n}\n\n/**\n * A row of stars. With `readOnly` it is a display (a table cell, a card\n * field); otherwise it is an input — clicking a star dispatches `onChange`\n * with the new value. The host owns `bind.value`.\n */\nexport interface RatingNode extends NodeBase {\n type: \"rating\";\n props?: {\n /** Star count. Default 5. */\n max?: number;\n size?: VizSize;\n /** Display only — no interaction, no `onChange`. Default false. */\n readOnly?: boolean;\n tone?: VizTone;\n };\n bind: { value: number };\n actions?: { onChange?: SRPAction };\n}\n\n/**\n * A rectangular image token — album art, a file preview, a cover. An\n * `src` image, or a semantic `glyph` fallback when `src` is absent or\n * fails to load. Distinct from `avatar` (a square identity token that\n * derives initials from a name): `thumbnail` is content imagery with a\n * configurable aspect ratio.\n */\nexport interface ThumbnailNode extends NodeBase {\n type: \"thumbnail\";\n props: {\n /** Accessible description — required even when `src` is set. */\n alt: string;\n src?: string;\n /** Fallback glyph when `src` is absent or fails to load. */\n glyph?: GlyphKind;\n size?: VizSize;\n /** Corner rounding. Default `sm`. */\n radius?: ThumbnailRadius;\n /** Aspect ratio. Default `square`. */\n aspect?: ThumbnailAspect;\n };\n}\n\n// ---------------------------------------------------------------------------\n// SRP v0.6 — configuration-control nodes (2)\n//\n// `facet-grid` + `column-config` are the declarative bodies of the\n// Filters and Columns popovers of a library workspace. Both are stateful\n// inputs in the v0.1 ownership model — the host owns `bind`, an\n// interaction dispatches an intent. They pair with `data-table`:\n// `facet-grid` chooses which rows it shows, `column-config` chooses which\n// columns. See ADR-106.\n// ---------------------------------------------------------------------------\n\n/** One selectable option within a `facet-grid` category. */\nexport interface FacetOption {\n value: string;\n label: string;\n /** A corpus count rendered as a trailing badge on the chip. */\n count?: number;\n}\n\n/** One category (tab) of a `facet-grid` — e.g. genre, mood, vibe. */\nexport interface FacetCategory {\n id: string;\n label: string;\n options: FacetOption[];\n}\n\n/**\n * A faceted filter — a row of category tabs, and beneath the active tab a\n * wrapped grid of selectable, count-bearing chips. The host owns the\n * active category (`bind.active`) and the selected values per category\n * (`bind.selected`); a tab pick dispatches `onFacetChange`, a chip toggle\n * dispatches `onToggle`. The Filters panel's tag section of a library\n * view is a `facet-grid`.\n */\nexport interface FacetGridNode extends NodeBase {\n type: \"facet-grid\";\n props: {\n facets: FacetCategory[];\n };\n bind: {\n /** The active category id. */\n active: string;\n /** Selected values, keyed by category id. */\n selected?: Record<string, string[]>;\n };\n actions?: {\n /** Category tab changed — payload `{ facet }`. */\n onFacetChange?: SRPAction;\n /** A chip toggled — payload `{ facet, value }`. */\n onToggle?: SRPAction;\n };\n}\n\n/** One configurable column in a `column-config`. */\nexport interface ColumnConfigColumn {\n id: string;\n label: string;\n}\n\n/** A named visible-column set a `column-config` can apply in one click. */\nexport interface ColumnConfigPreset {\n id: string;\n label: string;\n /** The visible column ids, in order. */\n columns: string[];\n}\n\n/**\n * A grid column picker — preset buttons plus a drag-to-reorder list of\n * visibility checkboxes. The host owns `bind.visible` (the visible column\n * ids, in display order); any change dispatches `onChange` with the new\n * order. Pairs with `data-table` — `bind.visible` selects + orders the\n * table's columns. The Columns panel of a library view is a\n * `column-config`.\n */\nexport interface ColumnConfigNode extends NodeBase {\n type: \"column-config\";\n props: {\n columns: ColumnConfigColumn[];\n presets?: ColumnConfigPreset[];\n };\n bind: {\n /** The visible column ids, in display order. */\n visible: string[];\n };\n actions?: {\n /** Visibility or order changed — payload `{ visible }`. */\n onChange?: SRPAction;\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Runtime validators for SRP v0.1 – v0.6 documents.
2
+ * Runtime validators for SRP v0.1 – v0.7 documents.
3
3
  *
4
4
  * Pure functions — no dependencies. Return a ValidationResult with either a
5
5
  * `valid: true` flag or a list of errors keyed by path.
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOxD,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,qBAAqB,GACrB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAahD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAmC1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAM1E;AAw7CD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAG9D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,OAAO,CAGxD"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOxD,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB,cAAc,GACd,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,qBAAqB,GACrB,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC;AAahD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAoC1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAM1E;AAw7CD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAG9D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,OAAO,CAGxD"}