@elaraai/e3-ui 1.0.22 → 1.0.24

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.
@@ -34,8 +34,8 @@ import { NullType, BooleanType, ArrayType, StructType, VariantType, OptionType,
34
34
  import { type UIComponentType } from '@elaraai/east-ui';
35
35
  import { type BoundValue } from '../bind/data.js';
36
36
  import { type BoundFunc } from '../bind/func.js';
37
- import { ExperimentConfigType, ExperimentResultType, JournalType, PopulationType, DesignConfigType, ExperimentDesignType, EstimatorType, TargetUnitsType, BootstrapConfigType, RefuteSpecType, SignType } from './types.js';
38
- export { CiType, WeightingSchemeType, EstimatorType, TargetUnitsType, BootstrapConfigType, RefuteSpecType, ExperimentConfigType, BalanceRowType, OverlapDiagnosticType, RefutationType, DoseResponseType, ExperimentVerdictType, ExperimentResultType, JournalRowType, JournalType, ColumnMetaType, PopulationType, PresetType, } from './types.js';
37
+ import { ExperimentConfigType, ExperimentResultType, JournalType, ConfigurationType, DesignConfigType, ExperimentDesignType } from './types.js';
38
+ export { CiType, WeightingSchemeType, EstimatorType, TargetUnitsType, BootstrapConfigType, RefuteSpecType, ExperimentConfigType, BalanceRowType, OverlapDiagnosticType, RefutationType, DoseResponseType, ExperimentVerdictType, ExperimentResultType, JournalRowType, JournalType, ColumnMetaType, PopulationType, ConfigurationType, } from './types.js';
39
39
  /**
40
40
  * The `experiment` function signature: `(rows, config) → ExperimentResult`. The
41
41
  * renderer calls this on **Apply** with the bound `data` and the staged config.
@@ -59,11 +59,14 @@ export type ExperimentTabType = typeof ExperimentTabType;
59
59
  *
60
60
  * @property data - {@link DiffBindingType} for the input dataset — the renderer
61
61
  * introspects its row struct for the pickers and passes it to the function.
62
- * @property config - {@link DiffBindingType} for the staged {@link ExperimentConfigType}.
63
- * @property experiment - {@link FuncBindingType} for the single `experiment` function.
64
- * @property population - Optional {@link DiffBindingType} for the staged Step-4
65
- * population filter ({@link PopulationType}); narrows rows UI-side before the call.
62
+ * @property configs - {@link DiffBindingType} for the list of {@link ConfigurationType}
63
+ * questions (each carrying its config + optional precomputed result/design). The
64
+ * only config source; selecting one seeds the working config.
65
+ * @property experiment - Optional {@link FuncBindingType} for the universal estimator
66
+ * function; omitted when every shown question carries a precomputed result.
66
67
  * @property journal - Optional {@link DiffBindingType} for the committed-experiment journal.
68
+ * @property design - Optional {@link FuncBindingType} for the universal `design` function
69
+ * (the "Validate" tab); applies to any question.
67
70
  * @property columnMeta - Optional per-column display metadata.
68
71
  * @property readonly - Render without the Apply / Commit / edit affordances.
69
72
  * @property defaultTab - Initial result tab ({@link ExperimentTabType}).
@@ -81,7 +84,7 @@ export declare const ExperimentPayloadType: StructType<{
81
84
  readonly direct: NullType;
82
85
  }>;
83
86
  }>;
84
- readonly config: StructType<{
87
+ readonly configs: StructType<{
85
88
  readonly source: ArrayType<VariantType<{
86
89
  readonly field: import("@elaraai/east").StringType;
87
90
  }>>;
@@ -93,20 +96,8 @@ export declare const ExperimentPayloadType: StructType<{
93
96
  readonly direct: NullType;
94
97
  }>;
95
98
  }>;
96
- readonly experiment: StructType<{
99
+ readonly experiment: OptionType<StructType<{
97
100
  readonly name: import("@elaraai/east").StringType;
98
- }>;
99
- readonly population: OptionType<StructType<{
100
- readonly source: ArrayType<VariantType<{
101
- readonly field: import("@elaraai/east").StringType;
102
- }>>;
103
- readonly patch: OptionType<ArrayType<VariantType<{
104
- readonly field: import("@elaraai/east").StringType;
105
- }>>>;
106
- readonly mode: VariantType<{
107
- readonly staged: NullType;
108
- readonly direct: NullType;
109
- }>;
110
101
  }>>;
111
102
  readonly journal: OptionType<StructType<{
112
103
  readonly source: ArrayType<VariantType<{
@@ -120,7 +111,6 @@ export declare const ExperimentPayloadType: StructType<{
120
111
  readonly direct: NullType;
121
112
  }>;
122
113
  }>>;
123
- /** Optional `design` function → the validation-trial recipe ("Validate" tab). */
124
114
  readonly design: OptionType<StructType<{
125
115
  readonly name: import("@elaraai/east").StringType;
126
116
  }>>;
@@ -136,106 +126,6 @@ export declare const ExperimentPayloadType: StructType<{
136
126
  readonly dose: NullType;
137
127
  readonly validate: NullType;
138
128
  }>>;
139
- /** Optional developer-authored {@link PresetType} list — named vetted questions
140
- * rendered as a card grid; selecting one snaps the staged spec + scope. */
141
- readonly presets: OptionType<ArrayType<StructType<{
142
- readonly id: import("@elaraai/east").StringType;
143
- readonly label: import("@elaraai/east").StringType;
144
- readonly config: StructType<{
145
- readonly treatment: import("@elaraai/east").StringType;
146
- readonly outcome: import("@elaraai/east").StringType;
147
- readonly common_causes: ArrayType<import("@elaraai/east").StringType>;
148
- readonly categorical: OptionType<ArrayType<import("@elaraai/east").StringType>>;
149
- readonly method: OptionType<VariantType<{
150
- readonly linear_regression: NullType;
151
- readonly propensity_score_weighting: StructType<{
152
- readonly weighting_scheme: OptionType<VariantType<{
153
- readonly ips_weight: NullType;
154
- readonly ips_stabilized_weight: NullType;
155
- readonly ips_normalized_weight: NullType;
156
- }>>;
157
- }>;
158
- }>>;
159
- readonly estimand: OptionType<VariantType<{
160
- readonly ate: NullType;
161
- readonly att: NullType;
162
- readonly atc: NullType;
163
- }>>;
164
- readonly refute: OptionType<StructType<{
165
- readonly placebo: BooleanType;
166
- readonly random_common_cause: BooleanType;
167
- readonly data_subset: BooleanType;
168
- readonly sensitivity: OptionType<ArrayType<import("@elaraai/east").FloatType>>;
169
- }>>;
170
- readonly dose_feature: OptionType<import("@elaraai/east").StringType>;
171
- readonly min_overlap: OptionType<import("@elaraai/east").FloatType>;
172
- readonly min_treatment_variation: OptionType<import("@elaraai/east").FloatType>;
173
- readonly bootstrap: OptionType<StructType<{
174
- readonly reps: import("@elaraai/east").IntegerType;
175
- readonly cluster_column: OptionType<import("@elaraai/east").StringType>;
176
- readonly confidence_level: OptionType<import("@elaraai/east").FloatType>;
177
- }>>;
178
- readonly random_state: OptionType<import("@elaraai/east").IntegerType>;
179
- readonly strong_overlap: OptionType<import("@elaraai/east").FloatType>;
180
- readonly evalue_floor: OptionType<import("@elaraai/east").FloatType>;
181
- readonly expected_sign: OptionType<VariantType<{
182
- readonly positive: NullType;
183
- readonly negative: NullType;
184
- }>>;
185
- }>;
186
- readonly population: OptionType<ArrayType<VariantType<{
187
- readonly string: import("@elaraai/east").StructType<{
188
- readonly fieldId: import("@elaraai/east").StringType;
189
- readonly op: import("@elaraai/east").VariantType<{
190
- readonly eq: import("@elaraai/east").StringType;
191
- readonly neq: import("@elaraai/east").StringType;
192
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
193
- readonly notIn: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
194
- readonly contains: import("@elaraai/east").StringType;
195
- readonly matches: import("@elaraai/east").StringType;
196
- }>;
197
- }>;
198
- readonly integer: import("@elaraai/east").StructType<{
199
- readonly fieldId: import("@elaraai/east").StringType;
200
- readonly op: import("@elaraai/east").VariantType<{
201
- readonly eq: import("@elaraai/east").IntegerType;
202
- readonly neq: import("@elaraai/east").IntegerType;
203
- readonly lt: import("@elaraai/east").IntegerType;
204
- readonly lte: import("@elaraai/east").IntegerType;
205
- readonly gt: import("@elaraai/east").IntegerType;
206
- readonly gte: import("@elaraai/east").IntegerType;
207
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").IntegerType>;
208
- }>;
209
- }>;
210
- readonly float: import("@elaraai/east").StructType<{
211
- readonly fieldId: import("@elaraai/east").StringType;
212
- readonly op: import("@elaraai/east").VariantType<{
213
- readonly lt: import("@elaraai/east").FloatType;
214
- readonly lte: import("@elaraai/east").FloatType;
215
- readonly gt: import("@elaraai/east").FloatType;
216
- readonly gte: import("@elaraai/east").FloatType;
217
- }>;
218
- }>;
219
- readonly datetime: import("@elaraai/east").StructType<{
220
- readonly fieldId: import("@elaraai/east").StringType;
221
- readonly op: import("@elaraai/east").VariantType<{
222
- readonly before: import("@elaraai/east").DateTimeType;
223
- readonly after: import("@elaraai/east").DateTimeType;
224
- readonly between: import("@elaraai/east").StructType<{
225
- readonly from: import("@elaraai/east").DateTimeType;
226
- readonly to: import("@elaraai/east").DateTimeType;
227
- }>;
228
- }>;
229
- }>;
230
- readonly boolean: import("@elaraai/east").StructType<{
231
- readonly fieldId: import("@elaraai/east").StringType;
232
- readonly op: import("@elaraai/east").VariantType<{
233
- readonly is: import("@elaraai/east").BooleanType;
234
- }>;
235
- }>;
236
- }>>>;
237
- readonly group: OptionType<import("@elaraai/east").StringType>;
238
- }>>>;
239
129
  }>;
240
130
  /** Type alias for {@link ExperimentPayloadType}. */
241
131
  export type ExperimentPayloadType = typeof ExperimentPayloadType;
@@ -258,7 +148,7 @@ export declare const ExperimentComponent: import("@elaraai/east-ui").UIComponent
258
148
  readonly direct: NullType;
259
149
  }>;
260
150
  }>;
261
- readonly config: StructType<{
151
+ readonly configs: StructType<{
262
152
  readonly source: ArrayType<VariantType<{
263
153
  readonly field: import("@elaraai/east").StringType;
264
154
  }>>;
@@ -270,20 +160,8 @@ export declare const ExperimentComponent: import("@elaraai/east-ui").UIComponent
270
160
  readonly direct: NullType;
271
161
  }>;
272
162
  }>;
273
- readonly experiment: StructType<{
163
+ readonly experiment: OptionType<StructType<{
274
164
  readonly name: import("@elaraai/east").StringType;
275
- }>;
276
- readonly population: OptionType<StructType<{
277
- readonly source: ArrayType<VariantType<{
278
- readonly field: import("@elaraai/east").StringType;
279
- }>>;
280
- readonly patch: OptionType<ArrayType<VariantType<{
281
- readonly field: import("@elaraai/east").StringType;
282
- }>>>;
283
- readonly mode: VariantType<{
284
- readonly staged: NullType;
285
- readonly direct: NullType;
286
- }>;
287
165
  }>>;
288
166
  readonly journal: OptionType<StructType<{
289
167
  readonly source: ArrayType<VariantType<{
@@ -297,7 +175,6 @@ export declare const ExperimentComponent: import("@elaraai/east-ui").UIComponent
297
175
  readonly direct: NullType;
298
176
  }>;
299
177
  }>>;
300
- /** Optional `design` function → the validation-trial recipe ("Validate" tab). */
301
178
  readonly design: OptionType<StructType<{
302
179
  readonly name: import("@elaraai/east").StringType;
303
180
  }>>;
@@ -313,106 +190,6 @@ export declare const ExperimentComponent: import("@elaraai/east-ui").UIComponent
313
190
  readonly dose: NullType;
314
191
  readonly validate: NullType;
315
192
  }>>;
316
- /** Optional developer-authored {@link PresetType} list — named vetted questions
317
- * rendered as a card grid; selecting one snaps the staged spec + scope. */
318
- readonly presets: OptionType<ArrayType<StructType<{
319
- readonly id: import("@elaraai/east").StringType;
320
- readonly label: import("@elaraai/east").StringType;
321
- readonly config: StructType<{
322
- readonly treatment: import("@elaraai/east").StringType;
323
- readonly outcome: import("@elaraai/east").StringType;
324
- readonly common_causes: ArrayType<import("@elaraai/east").StringType>;
325
- readonly categorical: OptionType<ArrayType<import("@elaraai/east").StringType>>;
326
- readonly method: OptionType<VariantType<{
327
- readonly linear_regression: NullType;
328
- readonly propensity_score_weighting: StructType<{
329
- readonly weighting_scheme: OptionType<VariantType<{
330
- readonly ips_weight: NullType;
331
- readonly ips_stabilized_weight: NullType;
332
- readonly ips_normalized_weight: NullType;
333
- }>>;
334
- }>;
335
- }>>;
336
- readonly estimand: OptionType<VariantType<{
337
- readonly ate: NullType;
338
- readonly att: NullType;
339
- readonly atc: NullType;
340
- }>>;
341
- readonly refute: OptionType<StructType<{
342
- readonly placebo: BooleanType;
343
- readonly random_common_cause: BooleanType;
344
- readonly data_subset: BooleanType;
345
- readonly sensitivity: OptionType<ArrayType<import("@elaraai/east").FloatType>>;
346
- }>>;
347
- readonly dose_feature: OptionType<import("@elaraai/east").StringType>;
348
- readonly min_overlap: OptionType<import("@elaraai/east").FloatType>;
349
- readonly min_treatment_variation: OptionType<import("@elaraai/east").FloatType>;
350
- readonly bootstrap: OptionType<StructType<{
351
- readonly reps: import("@elaraai/east").IntegerType;
352
- readonly cluster_column: OptionType<import("@elaraai/east").StringType>;
353
- readonly confidence_level: OptionType<import("@elaraai/east").FloatType>;
354
- }>>;
355
- readonly random_state: OptionType<import("@elaraai/east").IntegerType>;
356
- readonly strong_overlap: OptionType<import("@elaraai/east").FloatType>;
357
- readonly evalue_floor: OptionType<import("@elaraai/east").FloatType>;
358
- readonly expected_sign: OptionType<VariantType<{
359
- readonly positive: NullType;
360
- readonly negative: NullType;
361
- }>>;
362
- }>;
363
- readonly population: OptionType<ArrayType<VariantType<{
364
- readonly string: import("@elaraai/east").StructType<{
365
- readonly fieldId: import("@elaraai/east").StringType;
366
- readonly op: import("@elaraai/east").VariantType<{
367
- readonly eq: import("@elaraai/east").StringType;
368
- readonly neq: import("@elaraai/east").StringType;
369
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
370
- readonly notIn: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
371
- readonly contains: import("@elaraai/east").StringType;
372
- readonly matches: import("@elaraai/east").StringType;
373
- }>;
374
- }>;
375
- readonly integer: import("@elaraai/east").StructType<{
376
- readonly fieldId: import("@elaraai/east").StringType;
377
- readonly op: import("@elaraai/east").VariantType<{
378
- readonly eq: import("@elaraai/east").IntegerType;
379
- readonly neq: import("@elaraai/east").IntegerType;
380
- readonly lt: import("@elaraai/east").IntegerType;
381
- readonly lte: import("@elaraai/east").IntegerType;
382
- readonly gt: import("@elaraai/east").IntegerType;
383
- readonly gte: import("@elaraai/east").IntegerType;
384
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").IntegerType>;
385
- }>;
386
- }>;
387
- readonly float: import("@elaraai/east").StructType<{
388
- readonly fieldId: import("@elaraai/east").StringType;
389
- readonly op: import("@elaraai/east").VariantType<{
390
- readonly lt: import("@elaraai/east").FloatType;
391
- readonly lte: import("@elaraai/east").FloatType;
392
- readonly gt: import("@elaraai/east").FloatType;
393
- readonly gte: import("@elaraai/east").FloatType;
394
- }>;
395
- }>;
396
- readonly datetime: import("@elaraai/east").StructType<{
397
- readonly fieldId: import("@elaraai/east").StringType;
398
- readonly op: import("@elaraai/east").VariantType<{
399
- readonly before: import("@elaraai/east").DateTimeType;
400
- readonly after: import("@elaraai/east").DateTimeType;
401
- readonly between: import("@elaraai/east").StructType<{
402
- readonly from: import("@elaraai/east").DateTimeType;
403
- readonly to: import("@elaraai/east").DateTimeType;
404
- }>;
405
- }>;
406
- }>;
407
- readonly boolean: import("@elaraai/east").StructType<{
408
- readonly fieldId: import("@elaraai/east").StringType;
409
- readonly op: import("@elaraai/east").VariantType<{
410
- readonly is: import("@elaraai/east").BooleanType;
411
- }>;
412
- }>;
413
- }>>>;
414
- readonly group: OptionType<import("@elaraai/east").StringType>;
415
- }>>>;
416
193
  }>>;
417
194
  /**
418
195
  * Per-column display config — the friendly label, unit suffix, and good
@@ -435,78 +212,20 @@ export interface ExperimentColumnConfig {
435
212
  export type ExperimentColumns<Row extends StructType> = {
436
213
  [K in Extract<keyof Row['fields'], string>]?: ExperimentColumnConfig;
437
214
  };
438
- /**
439
- * A preset's pre-baked experiment config — a friendly, mostly-optional shape over
440
- * {@link ExperimentConfigType}. The column-bearing fields are checked against the
441
- * bound row's columns (like {@link ExperimentColumns}); every other field is optional
442
- * and falls back to the library default (`none`) when omitted, so a preset author
443
- * writes only what the question actually pins.
444
- *
445
- * @typeParam Row - The input dataset's row struct.
446
- */
447
- export interface ExperimentPresetConfig<Row extends StructType> {
448
- /** Binary treatment column. */
449
- treatment: Extract<keyof Row['fields'], string>;
450
- /** Outcome column. */
451
- outcome: Extract<keyof Row['fields'], string>;
452
- /** Confounders to adjust for (the backdoor set). */
453
- common_causes: Extract<keyof Row['fields'], string>[];
454
- /** Confounder columns holding categories (one-hot encoded). */
455
- categorical?: Extract<keyof Row['fields'], string>[];
456
- /** Continuous column for the ALE dose-response curve. */
457
- dose_feature?: Extract<keyof Row['fields'], string>;
458
- /** Estimator (default: linear_regression). */
459
- method?: SubtypeExprOrValue<EstimatorType>;
460
- /** Target population (default: ate). */
461
- estimand?: SubtypeExprOrValue<TargetUnitsType>;
462
- /** Which robustness checks to run. */
463
- refute?: SubtypeExprOrValue<RefuteSpecType>;
464
- /** Bootstrap CI config. */
465
- bootstrap?: SubtypeExprOrValue<BootstrapConfigType>;
466
- /** Directional prior — flags an implausibly-signed effect. */
467
- expected_sign?: SubtypeExprOrValue<SignType>;
468
- /** Positivity refuse gate (default 0.10). */
469
- min_overlap?: number;
470
- /** Not-estimable guard (default 0.02). */
471
- min_treatment_variation?: number;
472
- /** Strong-overlap gate (default 0.55). */
473
- strong_overlap?: number;
474
- /** E-value floor (off by default). */
475
- evalue_floor?: number;
476
- /** Random seed — pin for a reproducible verdict. */
477
- random_state?: bigint;
478
- }
479
- /**
480
- * One developer-authored preset for {@link ExperimentOptions.presets} — a named,
481
- * vetted question (+ optional scope) selectable from the surface's preset grid.
482
- *
483
- * @typeParam Row - The input dataset's row struct.
484
- */
485
- export interface ExperimentPreset<Row extends StructType> {
486
- /** Stable, **unique** id — recorded in the journal and used as the selection
487
- * identity; keep it distinct from `label` so a renamed label never orphans a
488
- * committed row. Two presets must not share an id. */
489
- id: string;
490
- /** Display title on the card. */
491
- label: string;
492
- /** The vetted, pre-baked config. */
493
- config: ExperimentPresetConfig<Row>;
494
- /** Optional population scope applied on select (omit ⇒ clears the scope). */
495
- population?: SubtypeExprOrValue<PopulationType>;
496
- /** Optional section header — cards sharing a `group` are bucketed together. */
497
- group?: string;
498
- }
499
215
  /**
500
216
  * Options for {@link Experiment.Root}, generic over the input row struct.
501
217
  *
502
218
  * @typeParam Row - The input dataset's row struct — inferred from `data`.
503
219
  *
504
220
  * @property data - The {@link Data.bind} handle for the input dataset.
505
- * @property config - The {@link Data.bind} handle for the staged experiment config.
506
- * @property experiment - The {@link Func.bind} handle for the experiment function.
507
- * @property population - Optional {@link Data.bind} handle for the staged Step-4
508
- * population filter (a {@link PopulationType}); narrows the rows UI-side before
509
- * the call. Bind it (seeded) to start with filters applied.
221
+ * @property configs - The {@link Data.bind} handle for the list of
222
+ * {@link ConfigurationType} questions (each carrying its config + optional
223
+ * precomputed result/design). The only config source.
224
+ * @property experiment - Optional {@link Func.bind} handle for the universal
225
+ * estimator function; omit when every shown question carries a precomputed result.
226
+ * @property design - Optional {@link Func.bind} handle for the universal `design`
227
+ * function (adds the "Validate" tab); omit when no question needs the trial recipe
228
+ * or every shown question carries a precomputed `design`.
510
229
  * @property journal - Optional {@link Data.bind} handle for the committed-experiment journal.
511
230
  * @property columns - Optional per-column display config.
512
231
  * @property readonly - Render without mutation affordances.
@@ -514,27 +233,26 @@ export interface ExperimentPreset<Row extends StructType> {
514
233
  */
515
234
  export interface ExperimentOptions<Row extends StructType> {
516
235
  data: BoundValue<ArrayType<Row>>;
517
- config: BoundValue<ExperimentConfigType>;
518
- experiment: ExperimentFunc<Row>;
236
+ /** The questions — and their optional precomputed answers. The only config source. */
237
+ configs: BoundValue<ArrayType<ConfigurationType>>;
238
+ /** Optional universal estimator. One function serves every config; omit when every
239
+ * shown question carries a precomputed `result`. */
240
+ experiment?: ExperimentFunc<Row>;
519
241
  /** Optional `design` function — adds the "Validate" tab (the trial recipe). */
520
242
  design?: ExperimentDesignFunc<Row>;
521
- population?: BoundValue<PopulationType>;
522
243
  journal?: BoundValue<JournalType>;
523
244
  /** Per-column display config, keyed by the data row's fields (like `Table`). */
524
245
  columns?: ExperimentColumns<Row>;
525
- readonly?: SubtypeExprOrValue<OptionType<BooleanType>>;
246
+ readonly?: SubtypeExprOrValue<BooleanType>;
526
247
  defaultTab?: ExperimentTabLiteral;
527
- /** Developer-authored vetted questions — a card grid that snaps the staged spec
528
- * (and scope) on select. Column fields are checked against the row's columns. */
529
- presets?: Array<ExperimentPreset<Row>>;
530
248
  }
531
249
  /**
532
250
  * Build an Experiment surface bound to an input dataset + the single experiment
533
251
  * function.
534
252
  *
535
253
  * @typeParam Row - The input dataset's row struct, inferred from `data`.
536
- * @param options - {@link ExperimentOptions}. `data`, `config` and `experiment`
537
- * are required; the rest are optional.
254
+ * @param options - {@link ExperimentOptions}. `data` and `configs` are required;
255
+ * the rest are optional.
538
256
  * @returns An East expression of {@link UIComponentType}.
539
257
  */
540
258
  declare function createExperiment<Row extends StructType>(options: ExperimentOptions<Row>): ExprType<UIComponentType>;
@@ -564,7 +282,7 @@ export declare const Experiment: {
564
282
  readonly direct: NullType;
565
283
  }>;
566
284
  }>;
567
- readonly config: StructType<{
285
+ readonly configs: StructType<{
568
286
  readonly source: ArrayType<VariantType<{
569
287
  readonly field: import("@elaraai/east").StringType;
570
288
  }>>;
@@ -576,20 +294,8 @@ export declare const Experiment: {
576
294
  readonly direct: NullType;
577
295
  }>;
578
296
  }>;
579
- readonly experiment: StructType<{
297
+ readonly experiment: OptionType<StructType<{
580
298
  readonly name: import("@elaraai/east").StringType;
581
- }>;
582
- readonly population: OptionType<StructType<{
583
- readonly source: ArrayType<VariantType<{
584
- readonly field: import("@elaraai/east").StringType;
585
- }>>;
586
- readonly patch: OptionType<ArrayType<VariantType<{
587
- readonly field: import("@elaraai/east").StringType;
588
- }>>>;
589
- readonly mode: VariantType<{
590
- readonly staged: NullType;
591
- readonly direct: NullType;
592
- }>;
593
299
  }>>;
594
300
  readonly journal: OptionType<StructType<{
595
301
  readonly source: ArrayType<VariantType<{
@@ -603,7 +309,6 @@ export declare const Experiment: {
603
309
  readonly direct: NullType;
604
310
  }>;
605
311
  }>>;
606
- /** Optional `design` function → the validation-trial recipe ("Validate" tab). */
607
312
  readonly design: OptionType<StructType<{
608
313
  readonly name: import("@elaraai/east").StringType;
609
314
  }>>;
@@ -619,106 +324,6 @@ export declare const Experiment: {
619
324
  readonly dose: NullType;
620
325
  readonly validate: NullType;
621
326
  }>>;
622
- /** Optional developer-authored {@link PresetType} list — named vetted questions
623
- * rendered as a card grid; selecting one snaps the staged spec + scope. */
624
- readonly presets: OptionType<ArrayType<StructType<{
625
- readonly id: import("@elaraai/east").StringType;
626
- readonly label: import("@elaraai/east").StringType;
627
- readonly config: StructType<{
628
- readonly treatment: import("@elaraai/east").StringType;
629
- readonly outcome: import("@elaraai/east").StringType;
630
- readonly common_causes: ArrayType<import("@elaraai/east").StringType>;
631
- readonly categorical: OptionType<ArrayType<import("@elaraai/east").StringType>>;
632
- readonly method: OptionType<VariantType<{
633
- readonly linear_regression: NullType;
634
- readonly propensity_score_weighting: StructType<{
635
- readonly weighting_scheme: OptionType<VariantType<{
636
- readonly ips_weight: NullType;
637
- readonly ips_stabilized_weight: NullType;
638
- readonly ips_normalized_weight: NullType;
639
- }>>;
640
- }>;
641
- }>>;
642
- readonly estimand: OptionType<VariantType<{
643
- readonly ate: NullType;
644
- readonly att: NullType;
645
- readonly atc: NullType;
646
- }>>;
647
- readonly refute: OptionType<StructType<{
648
- readonly placebo: BooleanType;
649
- readonly random_common_cause: BooleanType;
650
- readonly data_subset: BooleanType;
651
- readonly sensitivity: OptionType<ArrayType<import("@elaraai/east").FloatType>>;
652
- }>>;
653
- readonly dose_feature: OptionType<import("@elaraai/east").StringType>;
654
- readonly min_overlap: OptionType<import("@elaraai/east").FloatType>;
655
- readonly min_treatment_variation: OptionType<import("@elaraai/east").FloatType>;
656
- readonly bootstrap: OptionType<StructType<{
657
- readonly reps: import("@elaraai/east").IntegerType;
658
- readonly cluster_column: OptionType<import("@elaraai/east").StringType>;
659
- readonly confidence_level: OptionType<import("@elaraai/east").FloatType>;
660
- }>>;
661
- readonly random_state: OptionType<import("@elaraai/east").IntegerType>;
662
- readonly strong_overlap: OptionType<import("@elaraai/east").FloatType>;
663
- readonly evalue_floor: OptionType<import("@elaraai/east").FloatType>;
664
- readonly expected_sign: OptionType<VariantType<{
665
- readonly positive: NullType;
666
- readonly negative: NullType;
667
- }>>;
668
- }>;
669
- readonly population: OptionType<ArrayType<VariantType<{
670
- readonly string: import("@elaraai/east").StructType<{
671
- readonly fieldId: import("@elaraai/east").StringType;
672
- readonly op: import("@elaraai/east").VariantType<{
673
- readonly eq: import("@elaraai/east").StringType;
674
- readonly neq: import("@elaraai/east").StringType;
675
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
676
- readonly notIn: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
677
- readonly contains: import("@elaraai/east").StringType;
678
- readonly matches: import("@elaraai/east").StringType;
679
- }>;
680
- }>;
681
- readonly integer: import("@elaraai/east").StructType<{
682
- readonly fieldId: import("@elaraai/east").StringType;
683
- readonly op: import("@elaraai/east").VariantType<{
684
- readonly eq: import("@elaraai/east").IntegerType;
685
- readonly neq: import("@elaraai/east").IntegerType;
686
- readonly lt: import("@elaraai/east").IntegerType;
687
- readonly lte: import("@elaraai/east").IntegerType;
688
- readonly gt: import("@elaraai/east").IntegerType;
689
- readonly gte: import("@elaraai/east").IntegerType;
690
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").IntegerType>;
691
- }>;
692
- }>;
693
- readonly float: import("@elaraai/east").StructType<{
694
- readonly fieldId: import("@elaraai/east").StringType;
695
- readonly op: import("@elaraai/east").VariantType<{
696
- readonly lt: import("@elaraai/east").FloatType;
697
- readonly lte: import("@elaraai/east").FloatType;
698
- readonly gt: import("@elaraai/east").FloatType;
699
- readonly gte: import("@elaraai/east").FloatType;
700
- }>;
701
- }>;
702
- readonly datetime: import("@elaraai/east").StructType<{
703
- readonly fieldId: import("@elaraai/east").StringType;
704
- readonly op: import("@elaraai/east").VariantType<{
705
- readonly before: import("@elaraai/east").DateTimeType;
706
- readonly after: import("@elaraai/east").DateTimeType;
707
- readonly between: import("@elaraai/east").StructType<{
708
- readonly from: import("@elaraai/east").DateTimeType;
709
- readonly to: import("@elaraai/east").DateTimeType;
710
- }>;
711
- }>;
712
- }>;
713
- readonly boolean: import("@elaraai/east").StructType<{
714
- readonly fieldId: import("@elaraai/east").StringType;
715
- readonly op: import("@elaraai/east").VariantType<{
716
- readonly is: import("@elaraai/east").BooleanType;
717
- }>;
718
- }>;
719
- }>>>;
720
- readonly group: OptionType<import("@elaraai/east").StringType>;
721
- }>>>;
722
327
  }>>;
723
328
  readonly Types: {
724
329
  /** Rendered payload struct (bindings + options). */
@@ -735,7 +340,7 @@ export declare const Experiment: {
735
340
  readonly direct: NullType;
736
341
  }>;
737
342
  }>;
738
- readonly config: StructType<{
343
+ readonly configs: StructType<{
739
344
  readonly source: ArrayType<VariantType<{
740
345
  readonly field: import("@elaraai/east").StringType;
741
346
  }>>;
@@ -747,20 +352,8 @@ export declare const Experiment: {
747
352
  readonly direct: NullType;
748
353
  }>;
749
354
  }>;
750
- readonly experiment: StructType<{
355
+ readonly experiment: OptionType<StructType<{
751
356
  readonly name: import("@elaraai/east").StringType;
752
- }>;
753
- readonly population: OptionType<StructType<{
754
- readonly source: ArrayType<VariantType<{
755
- readonly field: import("@elaraai/east").StringType;
756
- }>>;
757
- readonly patch: OptionType<ArrayType<VariantType<{
758
- readonly field: import("@elaraai/east").StringType;
759
- }>>>;
760
- readonly mode: VariantType<{
761
- readonly staged: NullType;
762
- readonly direct: NullType;
763
- }>;
764
357
  }>>;
765
358
  readonly journal: OptionType<StructType<{
766
359
  readonly source: ArrayType<VariantType<{
@@ -774,7 +367,6 @@ export declare const Experiment: {
774
367
  readonly direct: NullType;
775
368
  }>;
776
369
  }>>;
777
- /** Optional `design` function → the validation-trial recipe ("Validate" tab). */
778
370
  readonly design: OptionType<StructType<{
779
371
  readonly name: import("@elaraai/east").StringType;
780
372
  }>>;
@@ -790,106 +382,6 @@ export declare const Experiment: {
790
382
  readonly dose: NullType;
791
383
  readonly validate: NullType;
792
384
  }>>;
793
- /** Optional developer-authored {@link PresetType} list — named vetted questions
794
- * rendered as a card grid; selecting one snaps the staged spec + scope. */
795
- readonly presets: OptionType<ArrayType<StructType<{
796
- readonly id: import("@elaraai/east").StringType;
797
- readonly label: import("@elaraai/east").StringType;
798
- readonly config: StructType<{
799
- readonly treatment: import("@elaraai/east").StringType;
800
- readonly outcome: import("@elaraai/east").StringType;
801
- readonly common_causes: ArrayType<import("@elaraai/east").StringType>;
802
- readonly categorical: OptionType<ArrayType<import("@elaraai/east").StringType>>;
803
- readonly method: OptionType<VariantType<{
804
- readonly linear_regression: NullType;
805
- readonly propensity_score_weighting: StructType<{
806
- readonly weighting_scheme: OptionType<VariantType<{
807
- readonly ips_weight: NullType;
808
- readonly ips_stabilized_weight: NullType;
809
- readonly ips_normalized_weight: NullType;
810
- }>>;
811
- }>;
812
- }>>;
813
- readonly estimand: OptionType<VariantType<{
814
- readonly ate: NullType;
815
- readonly att: NullType;
816
- readonly atc: NullType;
817
- }>>;
818
- readonly refute: OptionType<StructType<{
819
- readonly placebo: BooleanType;
820
- readonly random_common_cause: BooleanType;
821
- readonly data_subset: BooleanType;
822
- readonly sensitivity: OptionType<ArrayType<import("@elaraai/east").FloatType>>;
823
- }>>;
824
- readonly dose_feature: OptionType<import("@elaraai/east").StringType>;
825
- readonly min_overlap: OptionType<import("@elaraai/east").FloatType>;
826
- readonly min_treatment_variation: OptionType<import("@elaraai/east").FloatType>;
827
- readonly bootstrap: OptionType<StructType<{
828
- readonly reps: import("@elaraai/east").IntegerType;
829
- readonly cluster_column: OptionType<import("@elaraai/east").StringType>;
830
- readonly confidence_level: OptionType<import("@elaraai/east").FloatType>;
831
- }>>;
832
- readonly random_state: OptionType<import("@elaraai/east").IntegerType>;
833
- readonly strong_overlap: OptionType<import("@elaraai/east").FloatType>;
834
- readonly evalue_floor: OptionType<import("@elaraai/east").FloatType>;
835
- readonly expected_sign: OptionType<VariantType<{
836
- readonly positive: NullType;
837
- readonly negative: NullType;
838
- }>>;
839
- }>;
840
- readonly population: OptionType<ArrayType<VariantType<{
841
- readonly string: import("@elaraai/east").StructType<{
842
- readonly fieldId: import("@elaraai/east").StringType;
843
- readonly op: import("@elaraai/east").VariantType<{
844
- readonly eq: import("@elaraai/east").StringType;
845
- readonly neq: import("@elaraai/east").StringType;
846
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
847
- readonly notIn: import("@elaraai/east").SetType<import("@elaraai/east").StringType>;
848
- readonly contains: import("@elaraai/east").StringType;
849
- readonly matches: import("@elaraai/east").StringType;
850
- }>;
851
- }>;
852
- readonly integer: import("@elaraai/east").StructType<{
853
- readonly fieldId: import("@elaraai/east").StringType;
854
- readonly op: import("@elaraai/east").VariantType<{
855
- readonly eq: import("@elaraai/east").IntegerType;
856
- readonly neq: import("@elaraai/east").IntegerType;
857
- readonly lt: import("@elaraai/east").IntegerType;
858
- readonly lte: import("@elaraai/east").IntegerType;
859
- readonly gt: import("@elaraai/east").IntegerType;
860
- readonly gte: import("@elaraai/east").IntegerType;
861
- readonly in: import("@elaraai/east").SetType<import("@elaraai/east").IntegerType>;
862
- }>;
863
- }>;
864
- readonly float: import("@elaraai/east").StructType<{
865
- readonly fieldId: import("@elaraai/east").StringType;
866
- readonly op: import("@elaraai/east").VariantType<{
867
- readonly lt: import("@elaraai/east").FloatType;
868
- readonly lte: import("@elaraai/east").FloatType;
869
- readonly gt: import("@elaraai/east").FloatType;
870
- readonly gte: import("@elaraai/east").FloatType;
871
- }>;
872
- }>;
873
- readonly datetime: import("@elaraai/east").StructType<{
874
- readonly fieldId: import("@elaraai/east").StringType;
875
- readonly op: import("@elaraai/east").VariantType<{
876
- readonly before: import("@elaraai/east").DateTimeType;
877
- readonly after: import("@elaraai/east").DateTimeType;
878
- readonly between: import("@elaraai/east").StructType<{
879
- readonly from: import("@elaraai/east").DateTimeType;
880
- readonly to: import("@elaraai/east").DateTimeType;
881
- }>;
882
- }>;
883
- }>;
884
- readonly boolean: import("@elaraai/east").StructType<{
885
- readonly fieldId: import("@elaraai/east").StringType;
886
- readonly op: import("@elaraai/east").VariantType<{
887
- readonly is: import("@elaraai/east").BooleanType;
888
- }>;
889
- }>;
890
- }>>>;
891
- readonly group: OptionType<import("@elaraai/east").StringType>;
892
- }>>>;
893
385
  }>;
894
386
  /** The experiment-config value type (what the pickers stage). */
895
387
  readonly Config: StructType<{
@@ -1219,11 +711,11 @@ export declare const Experiment: {
1219
711
  }>;
1220
712
  }>;
1221
713
  }>>;
1222
- /** The developer-authored preset value type (named vetted question + scope). */
1223
- readonly Preset: StructType<{
714
+ /** A configuration value type — a named question + scope + optional precomputed answer. */
715
+ readonly Configuration: StructType<{
1224
716
  readonly id: import("@elaraai/east").StringType;
1225
717
  readonly label: import("@elaraai/east").StringType;
1226
- readonly config: StructType<{
718
+ readonly spec: StructType<{
1227
719
  readonly treatment: import("@elaraai/east").StringType;
1228
720
  readonly outcome: import("@elaraai/east").StringType;
1229
721
  readonly common_causes: ArrayType<import("@elaraai/east").StringType>;
@@ -1317,6 +809,104 @@ export declare const Experiment: {
1317
809
  }>;
1318
810
  }>>>;
1319
811
  readonly group: OptionType<import("@elaraai/east").StringType>;
812
+ readonly result: OptionType<StructType<{
813
+ readonly naive: import("@elaraai/east").FloatType;
814
+ readonly naive_ci: OptionType<StructType<{
815
+ readonly lower: import("@elaraai/east").FloatType;
816
+ readonly upper: import("@elaraai/east").FloatType;
817
+ }>>;
818
+ readonly adjusted: OptionType<StructType<{
819
+ readonly effect: import("@elaraai/east").FloatType;
820
+ readonly ci: OptionType<StructType<{
821
+ readonly lower: import("@elaraai/east").FloatType;
822
+ readonly upper: import("@elaraai/east").FloatType;
823
+ }>>;
824
+ }>>;
825
+ readonly n_total: import("@elaraai/east").IntegerType;
826
+ readonly n_treated: import("@elaraai/east").IntegerType;
827
+ readonly n_control: import("@elaraai/east").IntegerType;
828
+ readonly n_dropped: import("@elaraai/east").IntegerType;
829
+ readonly balance: ArrayType<StructType<{
830
+ readonly column: import("@elaraai/east").StringType;
831
+ readonly base_column: import("@elaraai/east").StringType;
832
+ readonly treated_mean: import("@elaraai/east").FloatType;
833
+ readonly control_mean: import("@elaraai/east").FloatType;
834
+ readonly std_diff: import("@elaraai/east").FloatType;
835
+ }>>;
836
+ readonly overlap: StructType<{
837
+ readonly treated_propensity: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
838
+ readonly control_propensity: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
839
+ readonly common_support_frac: import("@elaraai/east").FloatType;
840
+ readonly positivity_ok: BooleanType;
841
+ readonly support_strength: VariantType<{
842
+ readonly refused: NullType;
843
+ readonly thin: NullType;
844
+ readonly strong: NullType;
845
+ }>;
846
+ }>;
847
+ readonly refutation: OptionType<StructType<{
848
+ readonly placebo_effect: OptionType<import("@elaraai/east").FloatType>;
849
+ readonly placebo_passes: OptionType<BooleanType>;
850
+ readonly random_cc_within_ci: OptionType<BooleanType>;
851
+ readonly data_subset_effect: OptionType<import("@elaraai/east").FloatType>;
852
+ readonly data_subset_std: OptionType<import("@elaraai/east").FloatType>;
853
+ readonly robustness_value: OptionType<import("@elaraai/east").FloatType>;
854
+ readonly sensitivity: OptionType<StructType<{
855
+ readonly strengths: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
856
+ readonly effects: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
857
+ }>>;
858
+ readonly expected_sign_ok: OptionType<BooleanType>;
859
+ }>>;
860
+ readonly dose_response: OptionType<StructType<{
861
+ readonly feature: import("@elaraai/east").StringType;
862
+ readonly grid: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
863
+ readonly effect: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
864
+ readonly lower: OptionType<import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>>;
865
+ readonly upper: OptionType<import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>>;
866
+ readonly size: import("@elaraai/east").VectorType<import("@elaraai/east").IntegerType>;
867
+ }>>;
868
+ readonly verdict: VariantType<{
869
+ readonly causal: NullType;
870
+ readonly modest: NullType;
871
+ readonly adjustment_insufficient: NullType;
872
+ readonly non_identifiable_positivity: NullType;
873
+ readonly not_estimable: import("@elaraai/east").StringType;
874
+ }>;
875
+ }>>;
876
+ readonly design: OptionType<StructType<{
877
+ readonly verdict: VariantType<{
878
+ readonly causal: NullType;
879
+ readonly modest: NullType;
880
+ readonly adjustment_insufficient: NullType;
881
+ readonly non_identifiable_positivity: NullType;
882
+ readonly not_estimable: import("@elaraai/east").StringType;
883
+ }>;
884
+ readonly basis: VariantType<{
885
+ readonly detect_observed: NullType;
886
+ readonly resolve_vs_null: NullType;
887
+ readonly de_bias: NullType;
888
+ readonly restrict_to_overlap: NullType;
889
+ readonly create_control: NullType;
890
+ }>;
891
+ readonly target_effect: import("@elaraai/east").FloatType;
892
+ readonly outcome_sd: import("@elaraai/east").FloatType;
893
+ readonly target_power: import("@elaraai/east").FloatType;
894
+ readonly alpha: import("@elaraai/east").FloatType;
895
+ readonly current_power: OptionType<import("@elaraai/east").FloatType>;
896
+ readonly match_on: ArrayType<import("@elaraai/east").StringType>;
897
+ readonly options: ArrayType<StructType<{
898
+ readonly label: import("@elaraai/east").StringType;
899
+ readonly treated_share: import("@elaraai/east").FloatType;
900
+ readonly n_treated: import("@elaraai/east").IntegerType;
901
+ readonly n_control: import("@elaraai/east").IntegerType;
902
+ readonly n_total: import("@elaraai/east").IntegerType;
903
+ }>>;
904
+ readonly power_curve: StructType<{
905
+ readonly n: import("@elaraai/east").VectorType<import("@elaraai/east").IntegerType>;
906
+ readonly power: import("@elaraai/east").VectorType<import("@elaraai/east").FloatType>;
907
+ }>;
908
+ readonly rationale: import("@elaraai/east").StringType;
909
+ }>>;
1320
910
  }>;
1321
911
  /** Optional per-column display metadata. */
1322
912
  readonly ColumnMeta: import("@elaraai/east").DictType<import("@elaraai/east").StringType, StructType<{