@elaraai/east-ui 1.0.67 → 1.0.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/src/charts/chart/index.d.ts +39 -4
- package/dist/src/charts/chart/index.d.ts.map +1 -1
- package/dist/src/charts/chart/index.js +3 -3
- package/dist/src/charts/chart/index.js.map +1 -1
- package/dist/src/charts/spec/index.d.ts +61 -3
- package/dist/src/charts/spec/index.d.ts.map +1 -1
- package/dist/src/charts/spec/types.d.ts +1 -1
- package/dist/src/charts/spec/types.js +1 -1
- package/dist/src/collections/blend/index.d.ts +1 -1
- package/dist/src/collections/blend/index.d.ts.map +1 -1
- package/dist/src/collections/blend/index.js +1 -1
- package/dist/src/collections/blend/index.js.map +1 -1
- package/dist/src/collections/blend/types.js +1 -1
- package/dist/src/collections/blend/types.js.map +1 -1
- package/dist/src/collections/board/index.d.ts +4 -4
- package/dist/src/collections/board/index.d.ts.map +1 -1
- package/dist/src/collections/board/index.js +1 -1
- package/dist/src/collections/board/index.js.map +1 -1
- package/dist/src/collections/board/types.js +1 -1
- package/dist/src/collections/board/types.js.map +1 -1
- package/dist/src/collections/calendar/index.d.ts +1 -1
- package/dist/src/collections/calendar/index.d.ts.map +1 -1
- package/dist/src/collections/deck/index.d.ts +58 -0
- package/dist/src/collections/deck/index.d.ts.map +1 -1
- package/dist/src/collections/index.d.ts +1 -2
- package/dist/src/collections/index.d.ts.map +1 -1
- package/dist/src/collections/index.js +1 -2
- package/dist/src/collections/index.js.map +1 -1
- package/dist/src/collections/library/index.d.ts +29 -0
- package/dist/src/collections/library/index.d.ts.map +1 -1
- package/dist/src/collections/library/types.d.ts +29 -0
- package/dist/src/collections/library/types.d.ts.map +1 -1
- package/dist/src/collections/matrix/index.d.ts +1 -1
- package/dist/src/collections/matrix/index.d.ts.map +1 -1
- package/dist/src/collections/plan/assemble.d.ts +3732 -0
- package/dist/src/collections/plan/assemble.d.ts.map +1 -0
- package/dist/src/collections/plan/assemble.js +187 -0
- package/dist/src/collections/plan/assemble.js.map +1 -0
- package/dist/src/collections/plan/builders.d.ts +612 -0
- package/dist/src/collections/plan/builders.d.ts.map +1 -0
- package/dist/src/collections/plan/builders.js +543 -0
- package/dist/src/collections/plan/builders.js.map +1 -0
- package/dist/src/collections/plan/data-forms.d.ts +332 -0
- package/dist/src/collections/plan/data-forms.d.ts.map +1 -0
- package/dist/src/collections/plan/data-forms.js +212 -0
- package/dist/src/collections/plan/data-forms.js.map +1 -0
- package/dist/src/collections/plan/factories.d.ts +338 -0
- package/dist/src/collections/plan/factories.d.ts.map +1 -0
- package/dist/src/collections/plan/factories.js +414 -0
- package/dist/src/collections/plan/factories.js.map +1 -0
- package/dist/src/collections/plan/index.d.ts +271 -0
- package/dist/src/collections/plan/index.d.ts.map +1 -0
- package/dist/src/collections/plan/index.js +162 -0
- package/dist/src/collections/plan/index.js.map +1 -0
- package/dist/src/collections/plan/ir.d.ts +3496 -0
- package/dist/src/collections/plan/ir.d.ts.map +1 -0
- package/dist/src/collections/plan/ir.js +83 -0
- package/dist/src/collections/plan/ir.js.map +1 -0
- package/dist/src/collections/plan/pick.d.ts +115 -0
- package/dist/src/collections/plan/pick.d.ts.map +1 -0
- package/dist/src/collections/plan/pick.js +193 -0
- package/dist/src/collections/plan/pick.js.map +1 -0
- package/dist/src/collections/plan/root.d.ts +210 -0
- package/dist/src/collections/plan/root.d.ts.map +1 -0
- package/dist/src/collections/plan/root.js +146 -0
- package/dist/src/collections/plan/root.js.map +1 -0
- package/dist/src/collections/plan/series.d.ts +11890 -0
- package/dist/src/collections/plan/series.d.ts.map +1 -0
- package/dist/src/collections/plan/series.js +412 -0
- package/dist/src/collections/plan/series.js.map +1 -0
- package/dist/src/collections/plan/types.d.ts +9291 -0
- package/dist/src/collections/plan/types.d.ts.map +1 -0
- package/dist/src/collections/plan/types.js +940 -0
- package/dist/src/collections/plan/types.js.map +1 -0
- package/dist/src/collections/roster/index.d.ts +4 -4
- package/dist/src/collections/roster/index.d.ts.map +1 -1
- package/dist/src/collections/roster/index.js +1 -1
- package/dist/src/collections/roster/index.js.map +1 -1
- package/dist/src/collections/roster/types.d.ts +1 -1
- package/dist/src/collections/roster/types.d.ts.map +1 -1
- package/dist/src/collections/roster/types.js +4 -3
- package/dist/src/collections/roster/types.js.map +1 -1
- package/dist/src/collections/table/index.d.ts +70 -2
- package/dist/src/collections/table/index.d.ts.map +1 -1
- package/dist/src/collections/table/index.js +55 -11
- package/dist/src/collections/table/index.js.map +1 -1
- package/dist/src/collections/table/types.d.ts +1 -1
- package/dist/src/collections/table/types.d.ts.map +1 -1
- package/dist/src/component.d.ts +3898 -1339
- package/dist/src/component.d.ts.map +1 -1
- package/dist/src/component.js +83 -146
- package/dist/src/component.js.map +1 -1
- package/dist/src/container/card/types.d.ts +1 -1
- package/dist/src/container/card/types.d.ts.map +1 -1
- package/dist/src/contracts/approval.d.ts +117 -0
- package/dist/src/contracts/approval.d.ts.map +1 -0
- package/dist/src/contracts/approval.js +105 -0
- package/dist/src/contracts/approval.js.map +1 -0
- package/dist/src/contracts/drag.d.ts +3 -3
- package/dist/src/contracts/drag.d.ts.map +1 -1
- package/dist/src/contracts/drag.js +23 -10
- package/dist/src/contracts/drag.js.map +1 -1
- package/dist/src/contracts/index.d.ts +4 -1
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js +4 -1
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/contracts/pick.d.ts +705 -0
- package/dist/src/contracts/pick.d.ts.map +1 -0
- package/dist/src/contracts/pick.js +360 -0
- package/dist/src/contracts/pick.js.map +1 -0
- package/dist/src/contracts/review.d.ts +7 -99
- package/dist/src/contracts/review.d.ts.map +1 -1
- package/dist/src/contracts/review.js +11 -85
- package/dist/src/contracts/review.js.map +1 -1
- package/dist/src/contracts/slice-affordances.d.ts +13 -4
- package/dist/src/contracts/slice-affordances.d.ts.map +1 -1
- package/dist/src/contracts/slice-affordances.js +13 -3
- package/dist/src/contracts/slice-affordances.js.map +1 -1
- package/dist/src/contracts/source.d.ts +432 -0
- package/dist/src/contracts/source.d.ts.map +1 -0
- package/dist/src/contracts/source.js +505 -0
- package/dist/src/contracts/source.js.map +1 -0
- package/dist/src/contracts/states.d.ts +130 -0
- package/dist/src/contracts/states.d.ts.map +1 -1
- package/dist/src/contracts/states.js +122 -0
- package/dist/src/contracts/states.js.map +1 -1
- package/dist/src/contracts/time.d.ts +76 -0
- package/dist/src/contracts/time.d.ts.map +1 -0
- package/dist/src/contracts/time.js +78 -0
- package/dist/src/contracts/time.js.map +1 -0
- package/dist/src/display/trace/types.d.ts +1 -1
- package/dist/src/display/trace/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +10 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +22 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +5 -3
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +4 -3
- package/dist/src/internal.js.map +1 -1
- package/dist/src/layout/dock/index.d.ts +1 -1
- package/dist/src/layout/dock/index.js +1 -1
- package/dist/src/layout/index.d.ts +0 -1
- package/dist/src/layout/index.d.ts.map +1 -1
- package/dist/src/layout/index.js +0 -1
- package/dist/src/layout/index.js.map +1 -1
- package/dist/src/overlays/drawer/types.d.ts +1 -1
- package/dist/src/overlays/drawer/types.d.ts.map +1 -1
- package/dist/src/pick/index.d.ts +443 -0
- package/dist/src/pick/index.d.ts.map +1 -0
- package/dist/src/pick/index.js +64 -0
- package/dist/src/pick/index.js.map +1 -0
- package/dist/src/pick/panel/index.d.ts +64 -0
- package/dist/src/pick/panel/index.d.ts.map +1 -0
- package/dist/src/pick/panel/index.js +61 -0
- package/dist/src/pick/panel/index.js.map +1 -0
- package/dist/src/platform/slice/index.d.ts +291 -0
- package/dist/src/platform/slice/index.d.ts.map +1 -1
- package/dist/src/platform/slice/index.js +16 -0
- package/dist/src/platform/slice/index.js.map +1 -1
- package/dist/src/runtime/collections/deck.d.ts +29 -0
- package/dist/src/runtime/collections/deck.d.ts.map +1 -1
- package/dist/src/runtime/collections/index.d.ts +1 -2
- package/dist/src/runtime/collections/index.d.ts.map +1 -1
- package/dist/src/runtime/collections/index.js +1 -2
- package/dist/src/runtime/collections/index.js.map +1 -1
- package/dist/src/runtime/collections/library.d.ts +1 -1
- package/dist/src/runtime/collections/library.js +1 -1
- package/dist/src/runtime/collections/plan.d.ts +98 -0
- package/dist/src/runtime/collections/plan.d.ts.map +1 -0
- package/dist/src/runtime/collections/plan.js +98 -0
- package/dist/src/runtime/collections/plan.js.map +1 -0
- package/dist/src/runtime/collections/schematic.d.ts +1 -1
- package/dist/src/runtime/collections/schematic.js +1 -1
- package/dist/src/runtime/collections/table.d.ts +9 -1
- package/dist/src/runtime/collections/table.d.ts.map +1 -1
- package/dist/src/runtime/collections/table.js +1 -7
- package/dist/src/runtime/collections/table.js.map +1 -1
- package/dist/src/runtime/layout/dock.d.ts +2 -2
- package/dist/src/runtime/layout/dock.js +2 -2
- package/dist/src/runtime/layout/index.d.ts +0 -1
- package/dist/src/runtime/layout/index.d.ts.map +1 -1
- package/dist/src/runtime/layout/index.js +0 -1
- package/dist/src/runtime/layout/index.js.map +1 -1
- package/dist/src/shared/plot-gutter.d.ts +6 -23
- package/dist/src/shared/plot-gutter.d.ts.map +1 -1
- package/dist/src/shared/plot-gutter.js +6 -19
- package/dist/src/shared/plot-gutter.js.map +1 -1
- package/dist/src/shared/reify.d.ts +47 -4
- package/dist/src/shared/reify.d.ts.map +1 -1
- package/dist/src/shared/reify.js +62 -4
- package/dist/src/shared/reify.js.map +1 -1
- package/dist/src/slice/breakdown/index.d.ts +27 -0
- package/dist/src/slice/breakdown/index.d.ts.map +1 -1
- package/dist/src/slice/breakdown/types.d.ts +27 -0
- package/dist/src/slice/breakdown/types.d.ts.map +1 -1
- package/dist/src/slice/cohort/index.d.ts +54 -0
- package/dist/src/slice/cohort/index.d.ts.map +1 -1
- package/dist/src/slice/cohort/types.d.ts +27 -0
- package/dist/src/slice/cohort/types.d.ts.map +1 -1
- package/dist/src/slice/filter/index.d.ts +27 -0
- package/dist/src/slice/filter/index.d.ts.map +1 -1
- package/dist/src/slice/filter/types.d.ts +27 -0
- package/dist/src/slice/filter/types.d.ts.map +1 -1
- package/dist/src/slice/index.d.ts +405 -0
- package/dist/src/slice/index.d.ts.map +1 -1
- package/dist/src/slice/legend/index.d.ts +27 -0
- package/dist/src/slice/legend/index.d.ts.map +1 -1
- package/dist/src/slice/legend/types.d.ts +27 -0
- package/dist/src/slice/legend/types.d.ts.map +1 -1
- package/dist/src/slice/range/index.d.ts +60 -18
- package/dist/src/slice/range/index.d.ts.map +1 -1
- package/dist/src/slice/range/index.js +9 -1
- package/dist/src/slice/range/index.js.map +1 -1
- package/dist/src/slice/range/types.d.ts +63 -22
- package/dist/src/slice/range/types.d.ts.map +1 -1
- package/dist/src/slice/range/types.js +12 -5
- package/dist/src/slice/range/types.js.map +1 -1
- package/dist/src/slice/search/index.d.ts +27 -0
- package/dist/src/slice/search/index.d.ts.map +1 -1
- package/dist/src/slice/search/types.d.ts +27 -0
- package/dist/src/slice/search/types.d.ts.map +1 -1
- package/dist/src/slice/summary/index.d.ts +27 -0
- package/dist/src/slice/summary/index.d.ts.map +1 -1
- package/dist/src/slice/summary/types.d.ts +27 -0
- package/dist/src/slice/summary/types.d.ts.map +1 -1
- package/dist/src/style/content.d.ts +4 -6
- package/dist/src/style/content.d.ts.map +1 -1
- package/dist/src/style/content.js +4 -6
- package/dist/src/style/content.js.map +1 -1
- package/dist/src/style/scheme.js +1 -1
- package/dist/src/style/scheme.js.map +1 -1
- package/dist/test/collections/index.d.ts +2 -2
- package/dist/test/collections/index.d.ts.map +1 -1
- package/dist/test/collections/index.js +2 -2
- package/dist/test/collections/index.js.map +1 -1
- package/dist/test/collections/paged-source.examples.d.ts +9 -0
- package/dist/test/collections/paged-source.examples.d.ts.map +1 -0
- package/dist/test/collections/paged-source.examples.js +136 -0
- package/dist/test/collections/paged-source.examples.js.map +1 -0
- package/dist/test/collections/plan.examples.d.ts +125 -0
- package/dist/test/collections/plan.examples.d.ts.map +1 -0
- package/dist/test/collections/plan.examples.js +2939 -0
- package/dist/test/collections/plan.examples.js.map +1 -0
- package/dist/test/contracts/pick.examples.d.ts +6 -0
- package/dist/test/contracts/pick.examples.d.ts.map +1 -0
- package/dist/test/contracts/pick.examples.js +89 -0
- package/dist/test/contracts/pick.examples.js.map +1 -0
- package/dist/test/layout/dock.examples.d.ts +4 -4
- package/dist/test/layout/dock.examples.d.ts.map +1 -1
- package/dist/test/layout/dock.examples.js +34 -16
- package/dist/test/layout/dock.examples.js.map +1 -1
- package/dist/test/slice/slice.examples.d.ts +2 -1
- package/dist/test/slice/slice.examples.d.ts.map +1 -1
- package/dist/test/slice/slice.examples.js +67 -9
- package/dist/test/slice/slice.examples.js.map +1 -1
- package/package.json +3 -3
- package/dist/src/collections/gantt/index.d.ts +0 -377
- package/dist/src/collections/gantt/index.d.ts.map +0 -1
- package/dist/src/collections/gantt/index.js +0 -896
- package/dist/src/collections/gantt/index.js.map +0 -1
- package/dist/src/collections/gantt/types.d.ts +0 -353
- package/dist/src/collections/gantt/types.d.ts.map +0 -1
- package/dist/src/collections/gantt/types.js +0 -207
- package/dist/src/collections/gantt/types.js.map +0 -1
- package/dist/src/collections/planner/index.d.ts +0 -624
- package/dist/src/collections/planner/index.d.ts.map +0 -1
- package/dist/src/collections/planner/index.js +0 -941
- package/dist/src/collections/planner/index.js.map +0 -1
- package/dist/src/collections/planner/types.d.ts +0 -615
- package/dist/src/collections/planner/types.d.ts.map +0 -1
- package/dist/src/collections/planner/types.js +0 -423
- package/dist/src/collections/planner/types.js.map +0 -1
- package/dist/src/layout/aligned-stack/index.d.ts +0 -101
- package/dist/src/layout/aligned-stack/index.d.ts.map +0 -1
- package/dist/src/layout/aligned-stack/index.js +0 -105
- package/dist/src/layout/aligned-stack/index.js.map +0 -1
- package/dist/src/layout/aligned-stack/types.d.ts +0 -50
- package/dist/src/layout/aligned-stack/types.d.ts.map +0 -1
- package/dist/src/layout/aligned-stack/types.js +0 -24
- package/dist/src/layout/aligned-stack/types.js.map +0 -1
- package/dist/src/runtime/collections/gantt.d.ts +0 -67
- package/dist/src/runtime/collections/gantt.d.ts.map +0 -1
- package/dist/src/runtime/collections/gantt.js +0 -58
- package/dist/src/runtime/collections/gantt.js.map +0 -1
- package/dist/src/runtime/collections/planner.d.ts +0 -80
- package/dist/src/runtime/collections/planner.d.ts.map +0 -1
- package/dist/src/runtime/collections/planner.js +0 -76
- package/dist/src/runtime/collections/planner.js.map +0 -1
- package/dist/src/runtime/layout/aligned-stack.d.ts +0 -38
- package/dist/src/runtime/layout/aligned-stack.d.ts.map +0 -1
- package/dist/src/runtime/layout/aligned-stack.js +0 -36
- package/dist/src/runtime/layout/aligned-stack.js.map +0 -1
- package/dist/test/collections/gantt.examples.d.ts +0 -33
- package/dist/test/collections/gantt.examples.d.ts.map +0 -1
- package/dist/test/collections/gantt.examples.js +0 -359
- package/dist/test/collections/gantt.examples.js.map +0 -1
- package/dist/test/collections/planner.examples.d.ts +0 -47
- package/dist/test/collections/planner.examples.d.ts.map +0 -1
- package/dist/test/collections/planner.examples.js +0 -546
- package/dist/test/collections/planner.examples.js.map +0 -1
- package/dist/test/layout/aligned-stack.examples.d.ts +0 -25
- package/dist/test/layout/aligned-stack.examples.d.ts.map +0 -1
- package/dist/test/layout/aligned-stack.examples.js +0 -294
- package/dist/test/layout/aligned-stack.examples.js.map +0 -1
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The shared data-driven pipeline (`Plan Data Interface.md` §3.5a) — the
|
|
7
|
+
* accessor config surfaces, the reified groupBy engine, and the per-kind
|
|
8
|
+
* row/parent constructors that the `Plan.series.*` builders compose into
|
|
9
|
+
* their `derive` functions. Structure (groupBy levels) is host config; every
|
|
10
|
+
* per-row value flows through accessors as expressions, optional ones
|
|
11
|
+
* returning the fields' `Option` types.
|
|
12
|
+
*
|
|
13
|
+
* There is NO standalone authoring surface here — a canvas is defined as
|
|
14
|
+
* `data` + `series` (+ the root resolvers); this module is the series
|
|
15
|
+
* builders' internals.
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
import { type BlockBuilder, type EastType, type ExprType, type SubtypeExprOrValue, DictType, OptionType, StringType, StructType } from "@elaraai/east";
|
|
20
|
+
import { StatusValueType } from "../../feedback/status/types.js";
|
|
21
|
+
import { ApprovalStateType } from "../../contracts/approval.js";
|
|
22
|
+
import { TableAggregateType, type TableAggregateLiteral } from "../table/types.js";
|
|
23
|
+
import { TickFormatType } from "../../format/types.js";
|
|
24
|
+
import { PlanRowsCollectionType, PlanRollupType, type PlanRollupLiteral, PlanAggregateType, type PlanAggregateLiteral, type PlanTableSeriesType, PlanTableSplitType, type PlanTableSplitLiteral, PlanTableEmphasisType, type PlanTableEmphasisLiteral, PlanExpandType, PlanRunType, PlanDecisionMarkType, PlanRowKindType, type PlanRowsValue, type PlanAxisKindLiteral, type PlanElementsInput, type PlanHeatCellsInput, type PlanTableCellsInput } from "./types.js";
|
|
25
|
+
import { type PlanHeatCellsOptions } from "./builders.js";
|
|
26
|
+
import { PlanPortType } from "./types.js";
|
|
27
|
+
import { type PlanGroupParentFn } from "./assemble.js";
|
|
28
|
+
/**
|
|
29
|
+
* An accessor over one data ENTRY — its value and its key.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* The key is passed because the source is a keyed collection and a keyed
|
|
33
|
+
* dataset does not repeat its key inside the value: `label: (_r, k) => k` is
|
|
34
|
+
* the normal spelling, not an oddity (#568). Single-parameter accessors keep
|
|
35
|
+
* working — TS lets a callback ignore trailing arguments.
|
|
36
|
+
*/
|
|
37
|
+
export type PlanAccessor<R extends StructType, T extends EastType> = (row: ExprType<R>, key: ExprType<StringType>) => SubtypeExprOrValue<T>;
|
|
38
|
+
/**
|
|
39
|
+
* An accessor returning a list of ELEMENTS (runs, tiles, chips, marks, …) —
|
|
40
|
+
* a TS array of `Plan.run` / `event` / … results keeps their axis kind, which
|
|
41
|
+
* the series collects into its own brand ({@link PlanElementsInput}); an
|
|
42
|
+
* East-mapped list is kind-erased.
|
|
43
|
+
*
|
|
44
|
+
* @typeParam R - The data row type
|
|
45
|
+
* @typeParam T - The element's East type
|
|
46
|
+
* @typeParam K - The kind inferred from the returned elements
|
|
47
|
+
*/
|
|
48
|
+
export type PlanElementsAccessor<R extends StructType, T extends EastType, K extends PlanAxisKindLiteral = never> = (row: ExprType<R>, key: ExprType<StringType>) => PlanElementsInput<T, K>;
|
|
49
|
+
/** An accessor returning one kinded VALUE (a `Plan.heatCells` / `Plan.tableCells` result). */
|
|
50
|
+
export type PlanKindedAccessor<R extends StructType, V> = (row: ExprType<R>, key: ExprType<StringType>) => V;
|
|
51
|
+
/** One resolved groupBy level — the reified key accessor + the level's parent constructor. */
|
|
52
|
+
export interface PlanResolvedLevel {
|
|
53
|
+
/** The reified group-key accessor (an East function call per entry). */
|
|
54
|
+
by: (row: ExprType<StructType>, key: ExprType<StringType>) => ExprType<StringType>;
|
|
55
|
+
/** The level's shared parent constructor (see `groupParentFn`). */
|
|
56
|
+
parentFn: PlanGroupParentFn;
|
|
57
|
+
}
|
|
58
|
+
/** Reify a level's key accessor once (fixed `String` output — no inference). */
|
|
59
|
+
export declare function reifyLevelKey(rowType: StructType, by: PlanAccessor<StructType, StringType>): PlanResolvedLevel["by"];
|
|
60
|
+
/**
|
|
61
|
+
* A leaf row's key — the DATA key, optionally wrapped by the series'
|
|
62
|
+
* `keyPrefix` / `keySuffix`.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* Bare (the default) the canvas key IS the source key, which is what keeps a
|
|
66
|
+
* paged canvas addressable: `seek` returns a row in the source's key order and
|
|
67
|
+
* the canvas has a row under that very key.
|
|
68
|
+
*
|
|
69
|
+
* Two series over ONE source both emit a row per entry, so both would land on
|
|
70
|
+
* the same key and the later would silently replace the earlier. Either affix
|
|
71
|
+
* separates them — but they are NOT equivalent, and which you reach for decides
|
|
72
|
+
* whether the canvas still works:
|
|
73
|
+
*
|
|
74
|
+
* - **`keySuffix` keeps the data key FIRST** (`m03/chart`), so the canvas stays
|
|
75
|
+
* in the source's order, the two views of one asset sit ADJACENT, and seek
|
|
76
|
+
* still lands: it positions on "the first row at-or-after the sought key"
|
|
77
|
+
* (`use-seek.ts`), and `m03/chart` is at-or-after `m03`. A prefix SEARCH for
|
|
78
|
+
* an asset now returns every row about it.
|
|
79
|
+
* - **`keyPrefix` puts the series first** (`chart/m03`), which sorts all of one
|
|
80
|
+
* series together and takes those rows OFF the source key space — `chart/m03`
|
|
81
|
+
* sorts before `m03`, so a seek for `m03` skips them entirely.
|
|
82
|
+
*
|
|
83
|
+
* So: `keySuffix` for several views of the same entity, `keyPrefix` only when
|
|
84
|
+
* you deliberately want a series banked together and do not need to seek it.
|
|
85
|
+
*/
|
|
86
|
+
export declare function rowKey(keyPrefix: string | undefined, key: ExprType<StringType>, keySuffix?: string | undefined): SubtypeExprOrValue<StringType>;
|
|
87
|
+
/**
|
|
88
|
+
* Recursive grouping engine — TS-recursive over the (static) levels,
|
|
89
|
+
* East-dynamic over the group values discovered in the data. Each level is
|
|
90
|
+
* ONE reified East function over `(pathPrefix, entries)`: the grouping is bound
|
|
91
|
+
* once (`groupToDicts` — never re-evaluated), the grouped dict is walked with
|
|
92
|
+
* group key and members in hand, and each group is built by the level's shared
|
|
93
|
+
* parent constructor over its recursively-grouped children.
|
|
94
|
+
*
|
|
95
|
+
* @remarks
|
|
96
|
+
* Grouping preserves the ENTRIES' keys (`groupToDicts`, not `groupToArrays`):
|
|
97
|
+
* the members of a group are still a keyed collection, so leaf rows keep
|
|
98
|
+
* inheriting the source's keys however deeply they are nested.
|
|
99
|
+
*
|
|
100
|
+
* `pathKey = ${prefix}${groupValue}` is the SYNTHESIZED parent's key, and the
|
|
101
|
+
* composite is what sorts a nested hierarchy into tree order (`L1` <
|
|
102
|
+
* `L1/M03` < `L1/M04` < `L2`). Leaf keys are the data's and are never
|
|
103
|
+
* rewritten here — doing so would dangle author-written `links`, break
|
|
104
|
+
* grandchild `parent` refs, change what `onSelect` reports, and take the
|
|
105
|
+
* canvas off the source key space.
|
|
106
|
+
*
|
|
107
|
+
* @param entries - The data entries to group
|
|
108
|
+
* @param levels - The resolved groupBy levels, outermost first
|
|
109
|
+
* @param makeLeaves - Builds the leaf rows of one fully-grouped subset, given the subset and its path prefix
|
|
110
|
+
* @param pathPrefix - Key prefix for this level's synthesized parents
|
|
111
|
+
* @returns The subtree of every discovered group at this level
|
|
112
|
+
*/
|
|
113
|
+
export declare function groupRows(entries: ExprType<DictType<StringType, StructType>>, levels: PlanResolvedLevel[], makeLeaves: (subset: ExprType<DictType<StringType, StructType>>, pathPrefix: SubtypeExprOrValue<StringType>) => PlanRowsValue, pathPrefix: SubtypeExprOrValue<StringType>): PlanRowsValue;
|
|
114
|
+
/**
|
|
115
|
+
* Config for `Plan.series.span` (minus `match`) — accessor-driven span rows
|
|
116
|
+
* with arbitrary-depth rollup grouping.
|
|
117
|
+
*
|
|
118
|
+
* @property label - Gutter label accessor (over the entry's value and key)
|
|
119
|
+
* @property id - Render labels as mono row ids
|
|
120
|
+
* @property stacked - Two-line gutter layout (label over sub)
|
|
121
|
+
* @property sub - Gutter sub-line accessor
|
|
122
|
+
* @property value - Gutter value-slot accessor
|
|
123
|
+
* @property status - Per-row status-dot accessor (an `Option<StatusValueType>`)
|
|
124
|
+
* @property expand - Per-row expand-declaration accessor (an `Option<PlanExpandType>`)
|
|
125
|
+
* @property runs - Per-row runs accessor
|
|
126
|
+
* @property decisions - Per-row decision-diamonds accessor
|
|
127
|
+
* @property ports - Per-row ports accessor
|
|
128
|
+
* @property groupBy - Group-key accessors (span rollup parents per level)
|
|
129
|
+
* @property keyPrefix - Key prefix for this series' rows (omit ⇒ the source's keys, unchanged)
|
|
130
|
+
* @property keySuffix - Key suffix for this series' LEAF rows — what lets several series show the same entity
|
|
131
|
+
* @property rollup - Parent rollup mode (default `"union"`)
|
|
132
|
+
* @property unit - Quantity unit for band sums
|
|
133
|
+
*/
|
|
134
|
+
export interface PlanSpanOfConfig<R extends StructType, K extends PlanAxisKindLiteral = never> {
|
|
135
|
+
/** Gutter label accessor. */
|
|
136
|
+
label: PlanAccessor<R, StringType>;
|
|
137
|
+
/** Render labels as mono row ids. */
|
|
138
|
+
id?: boolean;
|
|
139
|
+
/** Two-line gutter layout (label over sub). */
|
|
140
|
+
stacked?: boolean;
|
|
141
|
+
/** Gutter sub-line accessor — returns the field's `Option` (per-row presence). */
|
|
142
|
+
sub?: PlanAccessor<R, OptionType<StringType>>;
|
|
143
|
+
/** Gutter value-slot accessor — returns the field's `Option`. */
|
|
144
|
+
value?: PlanAccessor<R, OptionType<StringType>>;
|
|
145
|
+
/** Per-row status-dot accessor — returns the field's `Option`. */
|
|
146
|
+
status?: PlanAccessor<R, OptionType<StatusValueType>>;
|
|
147
|
+
/** Per-row review-verdict accessor — returns the field's `Option`. SEEDS
|
|
148
|
+
* the review chrome's buttons only; how a decided row LOOKS is derived
|
|
149
|
+
* through the other accessors, like every other pixel (#569). */
|
|
150
|
+
approval?: PlanAccessor<R, OptionType<ApprovalStateType>>;
|
|
151
|
+
/** Per-row expand-declaration accessor — returns the field's `Option<PlanExpandType>` (R2). */
|
|
152
|
+
expand?: PlanAccessor<R, OptionType<PlanExpandType>>;
|
|
153
|
+
/** Per-row runs accessor — the runs' axis kind brands the series. */
|
|
154
|
+
runs: PlanElementsAccessor<R, PlanRunType, K>;
|
|
155
|
+
/** Per-row decision-diamonds accessor. */
|
|
156
|
+
decisions?: PlanElementsAccessor<R, PlanDecisionMarkType, K>;
|
|
157
|
+
/** Per-row ports accessor. */
|
|
158
|
+
ports?: PlanElementsAccessor<R, typeof PlanPortType, K>;
|
|
159
|
+
/** Group-key accessors — one span rollup parent per discovered value per level. */
|
|
160
|
+
groupBy?: PlanAccessor<R, StringType>[];
|
|
161
|
+
/** Key prefix for this series' rows — leaf keys and synthesized group
|
|
162
|
+
* keys alike. Omit (the default) and a leaf's key IS the source's key, so
|
|
163
|
+
* the canvas stays addressable by the same keys `seek` searches. A prefix
|
|
164
|
+
* banks the whole series together and takes it OFF that key space, so
|
|
165
|
+
* `seek` can no longer reach it — prefer {@link rowKey}'s `keySuffix` when
|
|
166
|
+
* the point is simply to show two series over one source. */
|
|
167
|
+
keyPrefix?: string;
|
|
168
|
+
/** Key suffix for this series' LEAF rows (`m03` → `m03/chart`).
|
|
169
|
+
*
|
|
170
|
+
* This is how several series show the SAME entity: the data key stays
|
|
171
|
+
* FIRST, so the canvas keeps the source's order, one asset's rows sit
|
|
172
|
+
* adjacent, and `seek` still lands on it. Synthesized group parents do not
|
|
173
|
+
* take it — their key is the group VALUE, not a data key. */
|
|
174
|
+
keySuffix?: string;
|
|
175
|
+
/** Parent rollup mode (default `"union"`; a literal or a `PlanRollupType` expression). */
|
|
176
|
+
rollup?: SubtypeExprOrValue<PlanRollupType> | PlanRollupLiteral;
|
|
177
|
+
/** Quantity unit for band sums (`"t"`). */
|
|
178
|
+
unit?: SubtypeExprOrValue<StringType>;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* One series' per-ENTRY ROW constructor — the entry's value and key in, its
|
|
182
|
+
* 1-row keyed subtree out.
|
|
183
|
+
*
|
|
184
|
+
* @remarks
|
|
185
|
+
* Named for what it BUILDS, not for where it happens to sit: it is a leaf only
|
|
186
|
+
* when `groupBy` synthesizes parents above it, and the same function runs
|
|
187
|
+
* unchanged when there are none.
|
|
188
|
+
*/
|
|
189
|
+
export type PlanRowFn = ($: BlockBuilder<PlanRowsCollectionType>, row: ExprType<StructType>, key: ExprType<StringType>) => SubtypeExprOrValue<PlanRowsCollectionType>;
|
|
190
|
+
/** The span PARENT kind — a rollup declaration (renderer derives bands). */
|
|
191
|
+
export declare function spanParentKind(cfg: PlanSpanOfConfig<StructType>): ExprType<PlanRowKindType>;
|
|
192
|
+
/** The span LEAF constructor — one data ENTRY to its 1-row subtree, keyed by
|
|
193
|
+
* the entry's own key, the envelope's Option fields injected from the
|
|
194
|
+
* accessors. */
|
|
195
|
+
export declare function spanRowOf(cfg: PlanSpanOfConfig<StructType>): PlanRowFn;
|
|
196
|
+
/**
|
|
197
|
+
* Config for `Plan.series.heat` (minus `match`).
|
|
198
|
+
*
|
|
199
|
+
* @property label - Gutter label accessor (over the entry's value and key)
|
|
200
|
+
* @property id - Render labels as mono row ids
|
|
201
|
+
* @property stacked - Two-line gutter layout (label over sub)
|
|
202
|
+
* @property sub - Gutter sub-line accessor
|
|
203
|
+
* @property value - Gutter value-slot accessor
|
|
204
|
+
* @property status - Per-row status-dot accessor
|
|
205
|
+
* @property cells - Per-row cells accessor (a `PlanHeatCellsType`)
|
|
206
|
+
* @property groupBy - Group-key accessors (aggregated heat parents per level)
|
|
207
|
+
* @property keyPrefix - Key prefix for this series' rows (omit ⇒ the source's keys, unchanged)
|
|
208
|
+
* @property keySuffix - Key suffix for this series' LEAF rows — what lets several series show the same entity
|
|
209
|
+
* @property aggregate - Parent aggregation mode (default `"mean"`)
|
|
210
|
+
* @property scale - Heat scale applied to derived parent cells
|
|
211
|
+
*/
|
|
212
|
+
export interface PlanHeatOfConfig<R extends StructType, K extends PlanAxisKindLiteral = never> {
|
|
213
|
+
/** Gutter label accessor. */
|
|
214
|
+
label: PlanAccessor<R, StringType>;
|
|
215
|
+
/** Render labels as mono row ids. */
|
|
216
|
+
id?: boolean;
|
|
217
|
+
/** Two-line gutter layout (label over sub). */
|
|
218
|
+
stacked?: boolean;
|
|
219
|
+
/** Gutter sub-line accessor — returns the field's `Option` (per-row presence). */
|
|
220
|
+
sub?: PlanAccessor<R, OptionType<StringType>>;
|
|
221
|
+
/** Gutter value-slot accessor — returns the field's `Option`. */
|
|
222
|
+
value?: PlanAccessor<R, OptionType<StringType>>;
|
|
223
|
+
/** Per-row status-dot accessor — returns the field's `Option`. */
|
|
224
|
+
status?: PlanAccessor<R, OptionType<StatusValueType>>;
|
|
225
|
+
/** Per-row review-verdict accessor — returns the field's `Option`. SEEDS
|
|
226
|
+
* the review chrome's buttons only; how a decided row LOOKS is derived
|
|
227
|
+
* through the other accessors, like every other pixel (#569). */
|
|
228
|
+
approval?: PlanAccessor<R, OptionType<ApprovalStateType>>;
|
|
229
|
+
/** Per-row expand-declaration accessor — returns the field's `Option<PlanExpandType>` (R2). */
|
|
230
|
+
expand?: PlanAccessor<R, OptionType<PlanExpandType>>;
|
|
231
|
+
/** Per-row cells accessor (build with `Plan.heatCells` / `Plan.weightCells` / `Plan.segmentCells`) — its kind brands the series. */
|
|
232
|
+
cells: PlanKindedAccessor<R, PlanHeatCellsInput<K>>;
|
|
233
|
+
/** Group-key accessors — one aggregated heat parent per discovered value per level. */
|
|
234
|
+
groupBy?: PlanAccessor<R, StringType>[];
|
|
235
|
+
/** Key prefix for this series' rows — leaf keys and synthesized group
|
|
236
|
+
* keys alike. Omit (the default) and a leaf's key IS the source's key, so
|
|
237
|
+
* the canvas stays addressable by the same keys `seek` searches. A prefix
|
|
238
|
+
* banks the whole series together and takes it OFF that key space, so
|
|
239
|
+
* `seek` can no longer reach it — prefer {@link rowKey}'s `keySuffix` when
|
|
240
|
+
* the point is simply to show two series over one source. */
|
|
241
|
+
keyPrefix?: string;
|
|
242
|
+
/** Key suffix for this series' LEAF rows (`m03` → `m03/chart`).
|
|
243
|
+
*
|
|
244
|
+
* This is how several series show the SAME entity: the data key stays
|
|
245
|
+
* FIRST, so the canvas keeps the source's order, one asset's rows sit
|
|
246
|
+
* adjacent, and `seek` still lands on it. Synthesized group parents do not
|
|
247
|
+
* take it — their key is the group VALUE, not a data key. */
|
|
248
|
+
keySuffix?: string;
|
|
249
|
+
/** Parent aggregation mode (default `"mean"`; a literal or a `PlanAggregateType` expression). */
|
|
250
|
+
aggregate?: SubtypeExprOrValue<PlanAggregateType> | PlanAggregateLiteral;
|
|
251
|
+
/** Heat scale + warn threshold applied to derived parent cells. */
|
|
252
|
+
scale?: PlanHeatCellsOptions;
|
|
253
|
+
}
|
|
254
|
+
/** The heat PARENT kind — an aggregate declaration on empty scale-bearing cells. */
|
|
255
|
+
export declare function heatParentKind(cfg: PlanHeatOfConfig<StructType>): ExprType<PlanRowKindType>;
|
|
256
|
+
/** The heat LEAF constructor. */
|
|
257
|
+
export declare function heatRowOf(cfg: PlanHeatOfConfig<StructType>): PlanRowFn;
|
|
258
|
+
/**
|
|
259
|
+
* Config for `Plan.series.table` (minus `match`).
|
|
260
|
+
*
|
|
261
|
+
* @property label - Gutter label accessor (over the entry's value and key)
|
|
262
|
+
* @property id - Render labels as mono row ids
|
|
263
|
+
* @property stacked - Two-line gutter layout (label over sub)
|
|
264
|
+
* @property sub - Gutter sub-line accessor
|
|
265
|
+
* @property cells - Per-row cells accessor (sugar for one unstyled value series)
|
|
266
|
+
* @property series - Per-row multi-series accessor (exclusive with `cells`)
|
|
267
|
+
* @property split - Part layout when several value series render
|
|
268
|
+
* @property emphasis - Row emphasis (`"body"` / `"header"` / `"footer"`)
|
|
269
|
+
* @property groupBy - Group-key accessors (subtotal parents per level)
|
|
270
|
+
* @property keyPrefix - Key prefix for this series' rows (omit ⇒ the source's keys, unchanged)
|
|
271
|
+
* @property keySuffix - Key suffix for this series' LEAF rows — what lets several series show the same entity
|
|
272
|
+
* @property aggregate - Subtotal mode (default `"sum"`)
|
|
273
|
+
* @property format - Numeral format for derived subtotals
|
|
274
|
+
*/
|
|
275
|
+
export interface PlanTableOfConfig<R extends StructType, K extends PlanAxisKindLiteral = never> {
|
|
276
|
+
/** Gutter label accessor. */
|
|
277
|
+
label: PlanAccessor<R, StringType>;
|
|
278
|
+
/** Render labels as mono row ids. */
|
|
279
|
+
id?: boolean;
|
|
280
|
+
/** Two-line gutter layout (label over sub). */
|
|
281
|
+
stacked?: boolean;
|
|
282
|
+
/** Gutter sub-line accessor — returns the field's `Option` (per-row presence). */
|
|
283
|
+
sub?: PlanAccessor<R, OptionType<StringType>>;
|
|
284
|
+
/** Per-row review-verdict accessor — returns the field's `Option`. SEEDS
|
|
285
|
+
* the review chrome's buttons only; how a decided row LOOKS is derived
|
|
286
|
+
* through the other accessors, like every other pixel (#569). */
|
|
287
|
+
approval?: PlanAccessor<R, OptionType<ApprovalStateType>>;
|
|
288
|
+
/** Per-row expand-declaration accessor — returns the field's `Option<PlanExpandType>` (R2). */
|
|
289
|
+
expand?: PlanAccessor<R, OptionType<PlanExpandType>>;
|
|
290
|
+
/** Per-row cells accessor (build with `Plan.tableCells`) — sugar for one unstyled value series; its kind brands the series. */
|
|
291
|
+
cells?: PlanKindedAccessor<R, PlanTableCellsInput<K>>;
|
|
292
|
+
/** Per-row MULTI-SERIES accessor (`Array<PlanTableSeriesType>` in the data, or `Plan.tableSeries` results); exclusive with `cells`. */
|
|
293
|
+
series?: PlanElementsAccessor<R, PlanTableSeriesType, K>;
|
|
294
|
+
/** Part layout when several value series render — `"horizontal"` (default) / `"vertical"`. */
|
|
295
|
+
split?: SubtypeExprOrValue<PlanTableSplitType> | PlanTableSplitLiteral;
|
|
296
|
+
/** Row emphasis — `"body"` (default) / `"header"` / `"footer"`. */
|
|
297
|
+
emphasis?: SubtypeExprOrValue<PlanTableEmphasisType> | PlanTableEmphasisLiteral;
|
|
298
|
+
/** Group-key accessors — one subtotal parent per discovered value per level. */
|
|
299
|
+
groupBy?: PlanAccessor<R, StringType>[];
|
|
300
|
+
/** Key prefix for this series' rows — leaf keys and synthesized group
|
|
301
|
+
* keys alike. Omit (the default) and a leaf's key IS the source's key, so
|
|
302
|
+
* the canvas stays addressable by the same keys `seek` searches. A prefix
|
|
303
|
+
* banks the whole series together and takes it OFF that key space, so
|
|
304
|
+
* `seek` can no longer reach it — prefer {@link rowKey}'s `keySuffix` when
|
|
305
|
+
* the point is simply to show two series over one source. */
|
|
306
|
+
keyPrefix?: string;
|
|
307
|
+
/** Key suffix for this series' LEAF rows (`m03` → `m03/chart`).
|
|
308
|
+
*
|
|
309
|
+
* This is how several series show the SAME entity: the data key stays
|
|
310
|
+
* FIRST, so the canvas keeps the source's order, one asset's rows sit
|
|
311
|
+
* adjacent, and `seek` still lands on it. Synthesized group parents do not
|
|
312
|
+
* take it — their key is the group VALUE, not a data key. */
|
|
313
|
+
keySuffix?: string;
|
|
314
|
+
/** Subtotal mode (default `"sum"`; a literal or a `TableAggregateType` expression). */
|
|
315
|
+
aggregate?: SubtypeExprOrValue<TableAggregateType> | TableAggregateLiteral;
|
|
316
|
+
/** Numeral format for the rows' values + derived subtotals — a `Format.*` spec. */
|
|
317
|
+
format?: SubtypeExprOrValue<TickFormatType>;
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* The table PARENT kind — a subtotal declaration (header emphasis).
|
|
321
|
+
*
|
|
322
|
+
* @remarks
|
|
323
|
+
* `split` is the series', not a fixed `horizontal`: a subtotal lays its
|
|
324
|
+
* positions out the way its members do, or a vertical series renders stacked
|
|
325
|
+
* rows under a parent that puts the same two numbers side by side — and, since
|
|
326
|
+
* the row height follows the split, a parent that is one line tall while its
|
|
327
|
+
* members are two.
|
|
328
|
+
*/
|
|
329
|
+
export declare function tableParentKind(cfg: PlanTableOfConfig<StructType>): ExprType<PlanRowKindType>;
|
|
330
|
+
/** The table LEAF constructor. */
|
|
331
|
+
export declare function tableRowOf(cfg: PlanTableOfConfig<StructType>): PlanRowFn;
|
|
332
|
+
//# sourceMappingURL=data-forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-forms.d.ts","sourceRoot":"","sources":["../../../../src/collections/plan/data-forms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The shared data-driven pipeline (`Plan Data Interface.md` §3.5a) — the
|
|
7
|
+
* accessor config surfaces, the reified groupBy engine, and the per-kind
|
|
8
|
+
* row/parent constructors that the `Plan.series.*` builders compose into
|
|
9
|
+
* their `derive` functions. Structure (groupBy levels) is host config; every
|
|
10
|
+
* per-row value flows through accessors as expressions, optional ones
|
|
11
|
+
* returning the fields' `Option` types.
|
|
12
|
+
*
|
|
13
|
+
* There is NO standalone authoring surface here — a canvas is defined as
|
|
14
|
+
* `data` + `series` (+ the root resolvers); this module is the series
|
|
15
|
+
* builders' internals.
|
|
16
|
+
*
|
|
17
|
+
* @packageDocumentation
|
|
18
|
+
*/
|
|
19
|
+
import { East, Expr, DictType, OptionType, StringType, StructType, variant, some, none, } from "@elaraai/east";
|
|
20
|
+
import { StatusValueType } from "../../feedback/status/types.js";
|
|
21
|
+
import { ApprovalStateType } from "../../contracts/approval.js";
|
|
22
|
+
import { TableAggregateType } from "../table/types.js";
|
|
23
|
+
import { TickFormatType } from "../../format/types.js";
|
|
24
|
+
import { PlanRowsCollectionType, PlanRollupType, PlanAggregateType, PlanTableSplitType, PlanTableEmphasisType, PlanExpandType, PlanRunType, PlanDecisionMarkType, PlanRowKindType, } from "./types.js";
|
|
25
|
+
import { createHeatCells, resolveTag } from "./builders.js";
|
|
26
|
+
import { PlanPortType } from "./types.js";
|
|
27
|
+
import { applyRowOverrides, LAST_WINS } from "./assemble.js";
|
|
28
|
+
import { createSpan, createHeat, createTable } from "./factories.js";
|
|
29
|
+
/** Reify a level's key accessor once (fixed `String` output — no inference). */
|
|
30
|
+
export function reifyLevelKey(rowType, by) {
|
|
31
|
+
const keyFn = East.function([rowType, StringType], StringType, (_$, r, k) => by(r, k));
|
|
32
|
+
return (row, key) => keyFn(row, key);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A leaf row's key — the DATA key, optionally wrapped by the series'
|
|
36
|
+
* `keyPrefix` / `keySuffix`.
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* Bare (the default) the canvas key IS the source key, which is what keeps a
|
|
40
|
+
* paged canvas addressable: `seek` returns a row in the source's key order and
|
|
41
|
+
* the canvas has a row under that very key.
|
|
42
|
+
*
|
|
43
|
+
* Two series over ONE source both emit a row per entry, so both would land on
|
|
44
|
+
* the same key and the later would silently replace the earlier. Either affix
|
|
45
|
+
* separates them — but they are NOT equivalent, and which you reach for decides
|
|
46
|
+
* whether the canvas still works:
|
|
47
|
+
*
|
|
48
|
+
* - **`keySuffix` keeps the data key FIRST** (`m03/chart`), so the canvas stays
|
|
49
|
+
* in the source's order, the two views of one asset sit ADJACENT, and seek
|
|
50
|
+
* still lands: it positions on "the first row at-or-after the sought key"
|
|
51
|
+
* (`use-seek.ts`), and `m03/chart` is at-or-after `m03`. A prefix SEARCH for
|
|
52
|
+
* an asset now returns every row about it.
|
|
53
|
+
* - **`keyPrefix` puts the series first** (`chart/m03`), which sorts all of one
|
|
54
|
+
* series together and takes those rows OFF the source key space — `chart/m03`
|
|
55
|
+
* sorts before `m03`, so a seek for `m03` skips them entirely.
|
|
56
|
+
*
|
|
57
|
+
* So: `keySuffix` for several views of the same entity, `keyPrefix` only when
|
|
58
|
+
* you deliberately want a series banked together and do not need to seek it.
|
|
59
|
+
*/
|
|
60
|
+
export function rowKey(keyPrefix, key, keySuffix) {
|
|
61
|
+
const pre = keyPrefix === undefined || keyPrefix === "" ? undefined : keyPrefix;
|
|
62
|
+
const suf = keySuffix === undefined || keySuffix === "" ? undefined : keySuffix;
|
|
63
|
+
if (pre === undefined && suf === undefined)
|
|
64
|
+
return key;
|
|
65
|
+
if (pre === undefined)
|
|
66
|
+
return East.str `${key}${suf}`;
|
|
67
|
+
if (suf === undefined)
|
|
68
|
+
return East.str `${pre}${key}`;
|
|
69
|
+
return East.str `${pre}${key}${suf}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Recursive grouping engine — TS-recursive over the (static) levels,
|
|
73
|
+
* East-dynamic over the group values discovered in the data. Each level is
|
|
74
|
+
* ONE reified East function over `(pathPrefix, entries)`: the grouping is bound
|
|
75
|
+
* once (`groupToDicts` — never re-evaluated), the grouped dict is walked with
|
|
76
|
+
* group key and members in hand, and each group is built by the level's shared
|
|
77
|
+
* parent constructor over its recursively-grouped children.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* Grouping preserves the ENTRIES' keys (`groupToDicts`, not `groupToArrays`):
|
|
81
|
+
* the members of a group are still a keyed collection, so leaf rows keep
|
|
82
|
+
* inheriting the source's keys however deeply they are nested.
|
|
83
|
+
*
|
|
84
|
+
* `pathKey = ${prefix}${groupValue}` is the SYNTHESIZED parent's key, and the
|
|
85
|
+
* composite is what sorts a nested hierarchy into tree order (`L1` <
|
|
86
|
+
* `L1/M03` < `L1/M04` < `L2`). Leaf keys are the data's and are never
|
|
87
|
+
* rewritten here — doing so would dangle author-written `links`, break
|
|
88
|
+
* grandchild `parent` refs, change what `onSelect` reports, and take the
|
|
89
|
+
* canvas off the source key space.
|
|
90
|
+
*
|
|
91
|
+
* @param entries - The data entries to group
|
|
92
|
+
* @param levels - The resolved groupBy levels, outermost first
|
|
93
|
+
* @param makeLeaves - Builds the leaf rows of one fully-grouped subset, given the subset and its path prefix
|
|
94
|
+
* @param pathPrefix - Key prefix for this level's synthesized parents
|
|
95
|
+
* @returns The subtree of every discovered group at this level
|
|
96
|
+
*/
|
|
97
|
+
export function groupRows(entries, levels, makeLeaves, pathPrefix) {
|
|
98
|
+
if (levels.length === 0)
|
|
99
|
+
return makeLeaves(entries, pathPrefix);
|
|
100
|
+
const [level, ...rest] = levels;
|
|
101
|
+
const elemType = Expr.type(entries).value;
|
|
102
|
+
const entriesType = DictType(StringType, elemType);
|
|
103
|
+
const levelFn = East.function([StringType, entriesType], PlanRowsCollectionType, ($, prefix, rows) => {
|
|
104
|
+
const grouped = $.let(rows.groupToDicts((_$, v, k) => level.by(v, k), (_$, _v, k) => k, (_$, v) => v), DictType(StringType, entriesType));
|
|
105
|
+
const subtrees = $.let(grouped.map(($2, members, gkey) => {
|
|
106
|
+
const pathKey = $2.let(East.str `${prefix}${gkey}`, StringType);
|
|
107
|
+
const children = $2.let(groupRows(members, rest, makeLeaves, East.str `${pathKey}/`), PlanRowsCollectionType);
|
|
108
|
+
return level.parentFn(pathKey, gkey, children);
|
|
109
|
+
}), DictType(StringType, PlanRowsCollectionType));
|
|
110
|
+
// The groups merged into ONE collection, in place — the pure
|
|
111
|
+
// `union` would copy the whole B-tree once per group. A level's own
|
|
112
|
+
// groups have distinct path keys by construction, so the policy
|
|
113
|
+
// only ever settles an authored key colliding with a synthesized
|
|
114
|
+
// one: last wins, like every other step.
|
|
115
|
+
return subtrees.reduce(($2, acc, subtree) => {
|
|
116
|
+
$2(acc.unionInPlace(subtree, LAST_WINS));
|
|
117
|
+
return acc;
|
|
118
|
+
}, East.value(new Map(), PlanRowsCollectionType));
|
|
119
|
+
});
|
|
120
|
+
return levelFn(pathPrefix, entries);
|
|
121
|
+
}
|
|
122
|
+
/** The span PARENT kind — a rollup declaration (renderer derives bands). */
|
|
123
|
+
export function spanParentKind(cfg) {
|
|
124
|
+
return East.value(variant("span", {
|
|
125
|
+
runs: [],
|
|
126
|
+
decisions: [],
|
|
127
|
+
ports: [],
|
|
128
|
+
rollup: some(resolveTag(cfg.rollup ?? "union", PlanRollupType)),
|
|
129
|
+
unit: cfg.unit !== undefined ? some(cfg.unit) : none,
|
|
130
|
+
}), PlanRowKindType);
|
|
131
|
+
}
|
|
132
|
+
/** The span LEAF constructor — one data ENTRY to its 1-row subtree, keyed by
|
|
133
|
+
* the entry's own key, the envelope's Option fields injected from the
|
|
134
|
+
* accessors. */
|
|
135
|
+
export function spanRowOf(cfg) {
|
|
136
|
+
return (_$, r, k) => applyRowOverrides(createSpan({
|
|
137
|
+
key: rowKey(cfg.keyPrefix, k, cfg.keySuffix),
|
|
138
|
+
label: cfg.label(r, k),
|
|
139
|
+
...(cfg.id !== undefined ? { id: cfg.id } : {}),
|
|
140
|
+
...(cfg.stacked !== undefined ? { stacked: cfg.stacked } : {}),
|
|
141
|
+
runs: cfg.runs(r, k),
|
|
142
|
+
...(cfg.decisions !== undefined ? { decisions: cfg.decisions(r, k) } : {}),
|
|
143
|
+
...(cfg.ports !== undefined ? { ports: cfg.ports(r, k) } : {}),
|
|
144
|
+
}), {
|
|
145
|
+
...(cfg.sub !== undefined ? { sub: cfg.sub(r, k) } : {}),
|
|
146
|
+
...(cfg.value !== undefined ? { value: cfg.value(r, k) } : {}),
|
|
147
|
+
...(cfg.status !== undefined ? { status: cfg.status(r, k) } : {}),
|
|
148
|
+
...(cfg.approval !== undefined ? { approval: cfg.approval(r, k) } : {}),
|
|
149
|
+
...(cfg.expand !== undefined ? { expand: cfg.expand(r, k) } : {}),
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/** The heat PARENT kind — an aggregate declaration on empty scale-bearing cells. */
|
|
153
|
+
export function heatParentKind(cfg) {
|
|
154
|
+
return East.value(variant("heat", {
|
|
155
|
+
cells: createHeatCells([], cfg.scale),
|
|
156
|
+
aggregate: some(resolveTag(cfg.aggregate ?? "mean", PlanAggregateType)),
|
|
157
|
+
}), PlanRowKindType);
|
|
158
|
+
}
|
|
159
|
+
/** The heat LEAF constructor. */
|
|
160
|
+
export function heatRowOf(cfg) {
|
|
161
|
+
return (_$, r, k) => applyRowOverrides(createHeat({
|
|
162
|
+
key: rowKey(cfg.keyPrefix, k, cfg.keySuffix),
|
|
163
|
+
label: cfg.label(r, k),
|
|
164
|
+
...(cfg.id !== undefined ? { id: cfg.id } : {}),
|
|
165
|
+
...(cfg.stacked !== undefined ? { stacked: cfg.stacked } : {}),
|
|
166
|
+
cells: cfg.cells(r, k),
|
|
167
|
+
}), {
|
|
168
|
+
...(cfg.sub !== undefined ? { sub: cfg.sub(r, k) } : {}),
|
|
169
|
+
...(cfg.value !== undefined ? { value: cfg.value(r, k) } : {}),
|
|
170
|
+
...(cfg.status !== undefined ? { status: cfg.status(r, k) } : {}),
|
|
171
|
+
...(cfg.approval !== undefined ? { approval: cfg.approval(r, k) } : {}),
|
|
172
|
+
...(cfg.expand !== undefined ? { expand: cfg.expand(r, k) } : {}),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The table PARENT kind — a subtotal declaration (header emphasis).
|
|
177
|
+
*
|
|
178
|
+
* @remarks
|
|
179
|
+
* `split` is the series', not a fixed `horizontal`: a subtotal lays its
|
|
180
|
+
* positions out the way its members do, or a vertical series renders stacked
|
|
181
|
+
* rows under a parent that puts the same two numbers side by side — and, since
|
|
182
|
+
* the row height follows the split, a parent that is one line tall while its
|
|
183
|
+
* members are two.
|
|
184
|
+
*/
|
|
185
|
+
export function tableParentKind(cfg) {
|
|
186
|
+
return East.value(variant("table", {
|
|
187
|
+
series: [],
|
|
188
|
+
split: resolveTag(cfg.split ?? "horizontal", PlanTableSplitType),
|
|
189
|
+
aggregate: some(resolveTag(cfg.aggregate ?? "sum", TableAggregateType)),
|
|
190
|
+
format: cfg.format !== undefined ? some(East.value(cfg.format, TickFormatType)) : none,
|
|
191
|
+
emphasis: variant("header", null),
|
|
192
|
+
}), PlanRowKindType);
|
|
193
|
+
}
|
|
194
|
+
/** The table LEAF constructor. */
|
|
195
|
+
export function tableRowOf(cfg) {
|
|
196
|
+
return (_$, r, k) => applyRowOverrides(createTable({
|
|
197
|
+
key: rowKey(cfg.keyPrefix, k, cfg.keySuffix),
|
|
198
|
+
label: cfg.label(r, k),
|
|
199
|
+
...(cfg.id !== undefined ? { id: cfg.id } : {}),
|
|
200
|
+
...(cfg.stacked !== undefined ? { stacked: cfg.stacked } : {}),
|
|
201
|
+
...(cfg.cells !== undefined ? { cells: cfg.cells(r, k) } : {}),
|
|
202
|
+
...(cfg.series !== undefined ? { series: cfg.series(r, k) } : {}),
|
|
203
|
+
...(cfg.split !== undefined ? { split: cfg.split } : {}),
|
|
204
|
+
...(cfg.emphasis !== undefined ? { emphasis: cfg.emphasis } : {}),
|
|
205
|
+
...(cfg.format !== undefined ? { format: cfg.format } : {}),
|
|
206
|
+
}), {
|
|
207
|
+
...(cfg.sub !== undefined ? { sub: cfg.sub(r, k) } : {}),
|
|
208
|
+
...(cfg.approval !== undefined ? { approval: cfg.approval(r, k) } : {}),
|
|
209
|
+
...(cfg.expand !== undefined ? { expand: cfg.expand(r, k) } : {}),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=data-forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-forms.js","sourceRoot":"","sources":["../../../../src/collections/plan/data-forms.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAKH,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,OAAO,EACP,IAAI,EACJ,IAAI,GACP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAA8B,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACH,sBAAsB,EACtB,cAAc,EAEd,iBAAiB,EAGjB,kBAAkB,EAElB,qBAAqB,EAErB,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,eAAe,GAMlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,UAAU,EAA6B,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAA0B,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA2CrE,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,OAAmB,EAAE,EAAwC;IACvF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,MAAM,CAClB,SAA6B,EAC7B,GAAyB,EACzB,SAA8B;IAE9B,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACvD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAA,GAAG,GAAG,GAAG,GAAa,EAAE,CAAC;IAC/D,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,GAAG,CAAA,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;IACrD,OAAO,IAAI,CAAC,GAAG,CAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,SAAS,CACrB,OAAmD,EACnD,MAA2B,EAC3B,UAA6H,EAC7H,UAA0C;IAE1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC;IAChC,MAAM,QAAQ,GAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAsC,CAAC,KAAK,CAAC;IAChF,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CACzB,CAAC,UAAU,EAAE,WAAW,CAAC,EACzB,sBAAsB,EACtB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CACjB,IAAI,CAAC,YAAY,CACb,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC7B,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAChB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EACjB,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAClB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAA,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CACnB,SAAS,CAAC,OAAqD,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAA,GAAG,OAAO,GAAG,CAAC,EACzG,sBAAsB,CAAC,CAAC;YAC5B,OAAO,KAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,EACF,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClD,6DAA6D;QAC7D,oEAAoE;QACpE,gEAAgE;QAChE,iEAAiE;QACjE,yCAAyC;QACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YACxC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YACzC,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAkB,CAAC;IACvE,CAAC,CACJ,CAAC;IACF,OAAO,OAAO,CAAC,UAAU,EAAE,OAAO,CAAkB,CAAC;AACzD,CAAC;AAwFD,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,GAAiC;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;QAC9B,IAAI,EAAO,EAAE;QACb,SAAS,EAAE,EAAE;QACb,KAAK,EAAM,EAAE;QACb,MAAM,EAAK,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,cAAc,CAAC,CAAC;QAClE,IAAI,EAAO,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5D,CAAC,EAAE,eAAe,CAAC,CAAC;AACzB,CAAC;AAED;;iBAEiB;AACjB,MAAM,UAAU,SAAS,CAAC,GAAiC;IACvD,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAClC,UAAU,CAAC;QACP,GAAG,EAAI,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;QAC9C,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC,EACF;QACI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CACJ,CAAC;AACN,CAAC;AA6DD,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAAC,GAAiC;IAC5D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;QAC9B,KAAK,EAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC;QACzC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAAE,iBAAiB,CAAC,CAAC;KAC1E,CAAC,EAAE,eAAe,CAAC,CAAC;AACzB,CAAC;AAED,iCAAiC;AACjC,MAAM,UAAU,SAAS,CAAC,GAAiC;IACvD,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAClC,UAAU,CAAC;QACP,GAAG,EAAI,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;QAC9C,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACzB,CAAC,EACF;QACI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CACJ,CAAC;AACN,CAAC;AAgED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkC;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAK,EAAE;QACb,KAAK,EAAM,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,EAAE,kBAAkB,CAAC;QACpE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,EAAE,kBAAkB,CAAC,CAAC;QACvE,MAAM,EAAK,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACzF,QAAQ,EAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;KACrC,CAAC,EAAE,eAAe,CAAC,CAAC;AACzB,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,UAAU,CAAC,GAAkC;IACzD,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAClC,WAAW,CAAC;QACR,GAAG,EAAI,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC;QAC9C,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC,EACF;QACI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CACJ,CAAC;AACN,CAAC"}
|