@elaraai/e3-ui 1.0.94 → 1.0.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/allocation/adapters.d.ts +159 -0
- package/dist/src/allocation/adapters.d.ts.map +1 -0
- package/dist/src/allocation/adapters.js +241 -0
- package/dist/src/allocation/adapters.js.map +1 -0
- package/dist/src/allocation/functions.d.ts +664 -0
- package/dist/src/allocation/functions.d.ts.map +1 -0
- package/dist/src/allocation/functions.js +782 -0
- package/dist/src/allocation/functions.js.map +1 -0
- package/dist/src/allocation/index.d.ts +2985 -0
- package/dist/src/allocation/index.d.ts.map +1 -0
- package/dist/src/allocation/index.js +499 -0
- package/dist/src/allocation/index.js.map +1 -0
- package/dist/src/allocation/types.d.ts +832 -0
- package/dist/src/allocation/types.d.ts.map +1 -0
- package/dist/src/allocation/types.js +360 -0
- package/dist/src/allocation/types.js.map +1 -0
- package/dist/src/bind/func.d.ts +14 -0
- package/dist/src/bind/func.d.ts.map +1 -1
- package/dist/src/bind/func.js +22 -1
- package/dist/src/bind/func.js.map +1 -1
- package/dist/src/calendar/index.d.ts +510 -1639
- package/dist/src/calendar/index.d.ts.map +1 -1
- package/dist/src/calendar/index.js +56 -29
- package/dist/src/calendar/index.js.map +1 -1
- package/dist/src/flowchart/canvas.d.ts +9 -21
- package/dist/src/flowchart/canvas.d.ts.map +1 -1
- package/dist/src/flowchart/canvas.js +10 -22
- package/dist/src/flowchart/canvas.js.map +1 -1
- package/dist/src/flowchart/flowchart.d.ts +19 -13
- package/dist/src/flowchart/flowchart.d.ts.map +1 -1
- package/dist/src/flowchart/flowchart.js.map +1 -1
- package/dist/src/flowchart/index.d.ts +44 -21
- package/dist/src/flowchart/index.d.ts.map +1 -1
- package/dist/src/flowchart/index.js +43 -20
- package/dist/src/flowchart/index.js.map +1 -1
- package/dist/src/flowchart/library.d.ts +166 -81
- package/dist/src/flowchart/library.d.ts.map +1 -1
- package/dist/src/flowchart/library.js +232 -105
- package/dist/src/flowchart/library.js.map +1 -1
- package/dist/src/flowchart/over.d.ts +9 -16
- package/dist/src/flowchart/over.d.ts.map +1 -1
- package/dist/src/flowchart/over.js +9 -16
- package/dist/src/flowchart/over.js.map +1 -1
- package/dist/src/flowchart/payload.d.ts +710 -508
- package/dist/src/flowchart/payload.d.ts.map +1 -1
- package/dist/src/flowchart/payload.js +128 -74
- package/dist/src/flowchart/payload.js.map +1 -1
- package/dist/src/flowchart/window.d.ts +132 -347
- package/dist/src/flowchart/window.d.ts.map +1 -1
- package/dist/src/flowchart/window.js +48 -55
- package/dist/src/flowchart/window.js.map +1 -1
- package/dist/src/index.d.ts +11 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +18 -7
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +28 -9
- package/dist/src/internal.js.map +1 -1
- package/dist/src/plan/event-rows.d.ts +26 -10
- package/dist/src/plan/event-rows.d.ts.map +1 -1
- package/dist/src/plan/event-rows.js +39 -13
- package/dist/src/plan/event-rows.js.map +1 -1
- package/dist/src/plan/ir.d.ts +244 -815
- package/dist/src/plan/ir.d.ts.map +1 -1
- package/dist/src/plan/ir.js +8 -6
- package/dist/src/plan/ir.js.map +1 -1
- package/dist/src/plan/library.d.ts +3 -0
- package/dist/src/plan/library.d.ts.map +1 -1
- package/dist/src/plan/library.js +1 -1
- package/dist/src/plan/library.js.map +1 -1
- package/dist/src/plan/ordered-source.d.ts +1 -0
- package/dist/src/plan/ordered-source.d.ts.map +1 -1
- package/dist/src/plan/plan.d.ts +559 -1667
- package/dist/src/plan/plan.d.ts.map +1 -1
- package/dist/src/plan/plan.js +123 -45
- package/dist/src/plan/plan.js.map +1 -1
- package/dist/src/plan/root.d.ts +16 -20
- package/dist/src/plan/root.d.ts.map +1 -1
- package/dist/src/plan/root.js +23 -33
- package/dist/src/plan/root.js.map +1 -1
- package/dist/src/roster/coverage.d.ts +17 -231
- package/dist/src/roster/coverage.d.ts.map +1 -1
- package/dist/src/roster/coverage.js +94 -90
- package/dist/src/roster/coverage.js.map +1 -1
- package/dist/src/roster/fit.d.ts +59 -0
- package/dist/src/roster/fit.d.ts.map +1 -0
- package/dist/src/roster/fit.js +155 -0
- package/dist/src/roster/fit.js.map +1 -0
- package/dist/src/roster/index.d.ts +2862 -3662
- package/dist/src/roster/index.d.ts.map +1 -1
- package/dist/src/roster/index.js +383 -81
- package/dist/src/roster/index.js.map +1 -1
- package/dist/src/roster/library.d.ts +37 -92
- package/dist/src/roster/library.d.ts.map +1 -1
- package/dist/src/roster/library.js +25 -64
- package/dist/src/roster/library.js.map +1 -1
- package/dist/src/roster/lists.d.ts +195 -0
- package/dist/src/roster/lists.d.ts.map +1 -0
- package/dist/src/roster/lists.js +233 -0
- package/dist/src/roster/lists.js.map +1 -0
- package/dist/src/roster/rules.d.ts +17 -260
- package/dist/src/roster/rules.d.ts.map +1 -1
- package/dist/src/roster/rules.js +135 -132
- package/dist/src/roster/rules.js.map +1 -1
- package/dist/src/roster/targets.d.ts +115 -0
- package/dist/src/roster/targets.d.ts.map +1 -0
- package/dist/src/roster/targets.js +213 -0
- package/dist/src/roster/targets.js.map +1 -0
- package/dist/src/roster/times.d.ts +251 -0
- package/dist/src/roster/times.d.ts.map +1 -0
- package/dist/src/roster/times.js +174 -0
- package/dist/src/roster/times.js.map +1 -0
- package/dist/src/roster/types.d.ts +828 -183
- package/dist/src/roster/types.d.ts.map +1 -1
- package/dist/src/roster/types.js +224 -97
- package/dist/src/roster/types.js.map +1 -1
- package/dist/src/schedule/accessor.d.ts +28 -0
- package/dist/src/schedule/accessor.d.ts.map +1 -0
- package/dist/src/schedule/accessor.js +39 -0
- package/dist/src/schedule/accessor.js.map +1 -0
- package/dist/src/schedule/events.d.ts +170 -42
- package/dist/src/schedule/events.d.ts.map +1 -1
- package/dist/src/schedule/events.js +431 -171
- package/dist/src/schedule/events.js.map +1 -1
- package/dist/src/schedule/index.d.ts +41 -4
- package/dist/src/schedule/index.d.ts.map +1 -1
- package/dist/src/schedule/index.js +35 -3
- package/dist/src/schedule/index.js.map +1 -1
- package/dist/src/schedule/library.d.ts +13 -3
- package/dist/src/schedule/library.d.ts.map +1 -1
- package/dist/src/schedule/library.js +11 -4
- package/dist/src/schedule/library.js.map +1 -1
- package/dist/src/schedule/periods.d.ts +115 -0
- package/dist/src/schedule/periods.d.ts.map +1 -0
- package/dist/src/schedule/periods.js +215 -0
- package/dist/src/schedule/periods.js.map +1 -0
- package/dist/src/schedule/record-window.d.ts +25 -3
- package/dist/src/schedule/record-window.d.ts.map +1 -1
- package/dist/src/schedule/record-window.js +31 -18
- package/dist/src/schedule/record-window.js.map +1 -1
- package/dist/src/schedule/resources.d.ts +82 -4
- package/dist/src/schedule/resources.d.ts.map +1 -1
- package/dist/src/schedule/resources.js +44 -14
- package/dist/src/schedule/resources.js.map +1 -1
- package/dist/src/schedule/session.d.ts +69 -0
- package/dist/src/schedule/session.d.ts.map +1 -0
- package/dist/src/schedule/session.js +121 -0
- package/dist/src/schedule/session.js.map +1 -0
- package/dist/src/schedule/templates.d.ts +14 -2
- package/dist/src/schedule/templates.d.ts.map +1 -1
- package/dist/src/schedule/templates.js +5 -3
- package/dist/src/schedule/templates.js.map +1 -1
- package/dist/src/schedule/types.d.ts +1671 -37
- package/dist/src/schedule/types.d.ts.map +1 -1
- package/dist/src/schedule/types.js +196 -5
- package/dist/src/schedule/types.js.map +1 -1
- package/dist/src/schedule/window.d.ts +14 -0
- package/dist/src/schedule/window.d.ts.map +1 -1
- package/dist/src/schedule/window.js +14 -4
- package/dist/src/schedule/window.js.map +1 -1
- package/dist/src/schedule/words.d.ts +22 -0
- package/dist/src/schedule/words.d.ts.map +1 -0
- package/dist/src/schedule/words.js +25 -0
- package/dist/src/schedule/words.js.map +1 -0
- package/dist/src/sheet/index.d.ts +61 -27
- package/dist/src/sheet/index.d.ts.map +1 -1
- package/dist/src/sheet/index.js +59 -25
- package/dist/src/sheet/index.js.map +1 -1
- package/dist/src/sheet/library.d.ts +21 -3
- package/dist/src/sheet/library.d.ts.map +1 -1
- package/dist/src/sheet/library.js +23 -6
- package/dist/src/sheet/library.js.map +1 -1
- package/dist/src/sheet/registers.d.ts +100 -85
- package/dist/src/sheet/registers.d.ts.map +1 -1
- package/dist/src/sheet/registers.js +100 -85
- package/dist/src/sheet/registers.js.map +1 -1
- package/dist/src/sheet/root.d.ts +8 -12
- package/dist/src/sheet/root.d.ts.map +1 -1
- package/dist/src/sheet/root.js +6 -40
- package/dist/src/sheet/root.js.map +1 -1
- package/dist/src/sheet/sheet.d.ts +598 -2349
- package/dist/src/sheet/sheet.d.ts.map +1 -1
- package/dist/src/sheet/sheet.js +124 -37
- package/dist/src/sheet/sheet.js.map +1 -1
- package/dist/src/sheet/sub-rows.d.ts +74 -28
- package/dist/src/sheet/sub-rows.d.ts.map +1 -1
- package/dist/src/sheet/sub-rows.js +74 -28
- package/dist/src/sheet/sub-rows.js.map +1 -1
- package/dist/src/sheet/templates.d.ts +98 -34
- package/dist/src/sheet/templates.d.ts.map +1 -1
- package/dist/src/sheet/templates.js +102 -58
- package/dist/src/sheet/templates.js.map +1 -1
- package/dist/src/sheet/types.d.ts +289 -1359
- package/dist/src/sheet/types.d.ts.map +1 -1
- package/dist/src/sheet/types.js +20 -26
- package/dist/src/sheet/types.js.map +1 -1
- package/dist/src/sheet/views.d.ts +10 -11
- package/dist/src/sheet/views.d.ts.map +1 -1
- package/dist/src/sheet/views.js +15 -20
- package/dist/src/sheet/views.js.map +1 -1
- package/dist/src/{roster/visibility.d.ts → utils/key-visibility.d.ts} +42 -7
- package/dist/src/utils/key-visibility.d.ts.map +1 -0
- package/dist/src/utils/key-visibility.js +36 -0
- package/dist/src/utils/key-visibility.js.map +1 -0
- package/dist/src/utils/ordered-source.d.ts +1 -0
- package/dist/src/utils/ordered-source.d.ts.map +1 -1
- package/dist/src/utils/ordered-source.js +8 -3
- package/dist/src/utils/ordered-source.js.map +1 -1
- package/dist/src/utils/record-sources.d.ts +107 -0
- package/dist/src/utils/record-sources.d.ts.map +1 -0
- package/dist/src/utils/record-sources.js +132 -0
- package/dist/src/utils/record-sources.js.map +1 -0
- package/dist/test/allocation/allocation.examples.d.ts +2902 -0
- package/dist/test/allocation/allocation.examples.d.ts.map +1 -0
- package/dist/test/allocation/allocation.examples.js +643 -0
- package/dist/test/allocation/allocation.examples.js.map +1 -0
- package/dist/test/allocation/fit.examples.d.ts +546 -0
- package/dist/test/allocation/fit.examples.d.ts.map +1 -0
- package/dist/test/allocation/fit.examples.js +171 -0
- package/dist/test/allocation/fit.examples.js.map +1 -0
- package/dist/test/allocation/kiln-yard.d.ts +181 -0
- package/dist/test/allocation/kiln-yard.d.ts.map +1 -0
- package/dist/test/allocation/kiln-yard.js +228 -0
- package/dist/test/allocation/kiln-yard.js.map +1 -0
- package/dist/test/bind/data/data.examples.d.ts +651 -1
- package/dist/test/bind/data/data.examples.d.ts.map +1 -1
- package/dist/test/bind/data/data.examples.js +140 -2
- package/dist/test/bind/data/data.examples.js.map +1 -1
- package/dist/test/bind/func/func.examples.d.ts +10 -1
- package/dist/test/bind/func/func.examples.d.ts.map +1 -1
- package/dist/test/bind/func/func.examples.js +8 -1
- package/dist/test/bind/func/func.examples.js.map +1 -1
- package/dist/test/bind/record/record.examples.d.ts +633 -1
- package/dist/test/bind/record/record.examples.d.ts.map +1 -1
- package/dist/test/bind/record/record.examples.js +26 -2
- package/dist/test/bind/record/record.examples.js.map +1 -1
- package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar-records.examples.js +18 -14
- package/dist/test/calendar/calendar-records.examples.js.map +1 -1
- package/dist/test/calendar/calendar.examples.d.ts +521 -16
- package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
- package/dist/test/calendar/calendar.examples.js +182 -135
- package/dist/test/calendar/calendar.examples.js.map +1 -1
- package/dist/test/examples-package.d.ts +75 -0
- package/dist/test/examples-package.d.ts.map +1 -0
- package/dist/test/examples-package.js +263 -0
- package/dist/test/examples-package.js.map +1 -0
- package/dist/test/flowchart/flowchart.examples.d.ts +211 -19
- package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
- package/dist/test/flowchart/flowchart.examples.js +102 -75
- package/dist/test/flowchart/flowchart.examples.js.map +1 -1
- package/dist/test/plan/plan-events.examples.d.ts +1439 -209
- package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-events.examples.js +199 -59
- package/dist/test/plan/plan-events.examples.js.map +1 -1
- package/dist/test/plan/plan-records.examples.d.ts +420 -0
- package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-records.examples.js +70 -19
- package/dist/test/plan/plan-records.examples.js.map +1 -1
- package/dist/test/plan/plan-windows.examples.d.ts +636 -55
- package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
- package/dist/test/plan/plan-windows.examples.js +69 -33
- package/dist/test/plan/plan-windows.examples.js.map +1 -1
- package/dist/test/plan/plan.examples.d.ts +153 -31
- package/dist/test/plan/plan.examples.d.ts.map +1 -1
- package/dist/test/plan/plan.examples.js +178 -101
- package/dist/test/plan/plan.examples.js.map +1 -1
- package/dist/test/roster/domain.examples.d.ts +467 -250
- package/dist/test/roster/domain.examples.d.ts.map +1 -1
- package/dist/test/roster/domain.examples.js +92 -29
- package/dist/test/roster/domain.examples.js.map +1 -1
- package/dist/test/roster/roster-records.examples.d.ts +430 -586
- package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
- package/dist/test/roster/roster-records.examples.js +102 -43
- package/dist/test/roster/roster-records.examples.js.map +1 -1
- package/dist/test/roster/roster.examples.d.ts +2319 -606
- package/dist/test/roster/roster.examples.d.ts.map +1 -1
- package/dist/test/roster/roster.examples.js +456 -148
- package/dist/test/roster/roster.examples.js.map +1 -1
- package/dist/test/roster/warehouse.d.ts +172 -63
- package/dist/test/roster/warehouse.d.ts.map +1 -1
- package/dist/test/roster/warehouse.js +172 -39
- package/dist/test/roster/warehouse.js.map +1 -1
- package/dist/test/schedule/schedule.examples.d.ts +3499 -0
- package/dist/test/schedule/schedule.examples.d.ts.map +1 -0
- package/dist/test/schedule/schedule.examples.js +192 -0
- package/dist/test/schedule/schedule.examples.js.map +1 -0
- package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet-records.examples.js +22 -18
- package/dist/test/sheet/sheet-records.examples.js.map +1 -1
- package/dist/test/sheet/sheet.examples.d.ts +715 -26
- package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
- package/dist/test/sheet/sheet.examples.js +204 -130
- package/dist/test/sheet/sheet.examples.js.map +1 -1
- package/package.json +17 -10
- package/dist/src/roster/people.d.ts +0 -50
- package/dist/src/roster/people.d.ts.map +0 -1
- package/dist/src/roster/people.js +0 -32
- package/dist/src/roster/people.js.map +0 -1
- package/dist/src/roster/visibility.d.ts.map +0 -1
- package/dist/src/roster/visibility.js +0 -25
- package/dist/src/roster/visibility.js.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
* A builder's narrowing (#1340): its `slice` is one `Slice.bindRecords`, each
|
|
7
|
+
* source named after what it narrows, and each source filters every place its
|
|
8
|
+
* records appear — the main area, the Choosers and the Library tab that lists
|
|
9
|
+
* that record. The one check every builder's tag makes of its `slice`, the one
|
|
10
|
+
* binding of its sources in the builder's payload (#1356), the one check of a
|
|
11
|
+
* tab's `source`, and the one of a templates list's.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import { StringType, type ArrayType, type BlockBuilder, type EastType, type ExprType, type StructType, type option } from "@elaraai/east";
|
|
16
|
+
import { type RecordSlicesChromeOptions, type RecordSlicesChromeType, type RowSource } from "@elaraai/east-ui/internal";
|
|
17
|
+
/** What a builder's narrowing takes. */
|
|
18
|
+
export interface RecordSourcesSpec {
|
|
19
|
+
/** The builder, as its messages name it (`Allocation`). */
|
|
20
|
+
builder: string;
|
|
21
|
+
/** The sources it names in its messages, in their order (`lanes`, `resources`, `events`). */
|
|
22
|
+
names: readonly string[];
|
|
23
|
+
/** What its sources narrow, as its refusal says it (`its lanes, its resources and its events`). */
|
|
24
|
+
what: string;
|
|
25
|
+
/** Whether it takes a source of this name; by default, one of `names`. A builder whose sources are its own keys (the Calendar's event kinds) says so here. */
|
|
26
|
+
takes?: (name: string) => boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A builder's sources, each bound once in its payload's block (#1356): its part of the slice, its narrowed data and
|
|
30
|
+
* its narrowed keys. A function captures what it reads, so one reading a source through these holds that source
|
|
31
|
+
* alone. One reading through the slice would hold every source's methods, and beast2 writes a captured value
|
|
32
|
+
* wherever a function holding it is written.
|
|
33
|
+
*/
|
|
34
|
+
export interface BoundSources {
|
|
35
|
+
/** Each source's part of the slice, its typed record Slice handle: what a kind narrowed through it reads (a Calendar's event kind), and its record's identity. */
|
|
36
|
+
parts: Readonly<Record<string, ExprType<StructType>>>;
|
|
37
|
+
/** Each source's typed narrowed data, `Slice.rows(slice, name)`: what a main area that pages its rows reads. */
|
|
38
|
+
data: Readonly<Record<string, ExprType<StructType>>>;
|
|
39
|
+
/** Each source's narrowed keys, paged through its data: what the renderer reads to show its rows. */
|
|
40
|
+
keys: Readonly<Record<string, RowSource<ArrayType<StringType>>>>;
|
|
41
|
+
}
|
|
42
|
+
/** A builder's narrowing, checked: its chrome, its sources' names, and the one binding of its sources. */
|
|
43
|
+
export interface RecordSources {
|
|
44
|
+
/** The rail's chrome; `none` with no slice. */
|
|
45
|
+
chrome: option<ExprType<RecordSlicesChromeType>>;
|
|
46
|
+
/** The slice's sources, in their order. */
|
|
47
|
+
names: string[];
|
|
48
|
+
/**
|
|
49
|
+
* Binds each source once in the builder's payload block — its part, its narrowed data and its keys (#1356).
|
|
50
|
+
* Every builder calls it first and reads its sources only through what it returns.
|
|
51
|
+
*
|
|
52
|
+
* @typeParam T - The block's type
|
|
53
|
+
* @param $ - The builder's payload block
|
|
54
|
+
* @returns Each source's part, narrowed data and keys, bound
|
|
55
|
+
*/
|
|
56
|
+
bind<T extends EastType>($: BlockBuilder<T>): BoundSources;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Checks a builder's `slice` and reads its sources (#1340): the slice is
|
|
60
|
+
* `Slice.bindRecords`, every source one the builder takes, each a record with
|
|
61
|
+
* String primary keys. `bind` binds each source once in the builder's payload
|
|
62
|
+
* (#1356).
|
|
63
|
+
*
|
|
64
|
+
* @param slice - The builder's `slice` prop, if given
|
|
65
|
+
* @param spec - What the builder takes, and its words
|
|
66
|
+
* @returns The chrome, the sources' names, and the binding of each one's part, data and keys
|
|
67
|
+
* @throws {Error} When `slice` is `Slice.bind` or `Slice.bindRecord`, names a source the builder does not take, or narrows a record whose keys are not Strings
|
|
68
|
+
*/
|
|
69
|
+
export declare function recordSources(slice: RecordSlicesChromeOptions | undefined, spec: RecordSourcesSpec): RecordSources;
|
|
70
|
+
/**
|
|
71
|
+
* The sources a builder's `slice` names, read before it is checked: what a
|
|
72
|
+
* builder's templates check lists, so a list written in the code is refused
|
|
73
|
+
* with the change to make before a source no list names is (#1343, #1345).
|
|
74
|
+
*
|
|
75
|
+
* @param slice - The builder's `slice` prop, if given
|
|
76
|
+
* @returns Its sources, in their order; none when it is no `Slice.bindRecords`, which `recordSources` refuses
|
|
77
|
+
*/
|
|
78
|
+
export declare function sliceSourceNames(slice: RecordSlicesChromeOptions | undefined): string[];
|
|
79
|
+
/**
|
|
80
|
+
* A tab's source (#1340): the slice's source whose shown keys filter the tab's
|
|
81
|
+
* cards, its rows that record's rows by key; `none` for a tab that names none,
|
|
82
|
+
* which lists its rows whole.
|
|
83
|
+
*
|
|
84
|
+
* @param builder - The builder, as its message names it
|
|
85
|
+
* @param tab - The tab, as its message names it (`Positions`)
|
|
86
|
+
* @param source - The source the tab names, if any
|
|
87
|
+
* @param names - The slice's sources
|
|
88
|
+
* @returns The source, as the payload carries it
|
|
89
|
+
* @throws {Error} When the tab names a source the slice lacks
|
|
90
|
+
*/
|
|
91
|
+
export declare function tabSource(builder: string, tab: string, source: string | undefined, names: readonly string[]): option<string>;
|
|
92
|
+
/**
|
|
93
|
+
* A templates list's source (#1340, #1345): every builder's templates are a
|
|
94
|
+
* record of their own, each list a source of the builder's one
|
|
95
|
+
* `Slice.bindRecords`, its cards that record's rows by key. A list written in
|
|
96
|
+
* the code names no source, and is refused as one naming a source the slice
|
|
97
|
+
* lacks is, both with the change to make.
|
|
98
|
+
*
|
|
99
|
+
* @param builder - The builder, as its message names it (`Sheet`)
|
|
100
|
+
* @param what - The builder's templates declaration, as the refusal writes it (`Sheet.templates(rows, { …, source: "rowTemplates" })`)
|
|
101
|
+
* @param source - The source the list names; `undefined` for a list written in the code, or one that names none
|
|
102
|
+
* @param names - The slice's sources
|
|
103
|
+
* @returns The source's name
|
|
104
|
+
* @throws {Error} When the list names no source, or one the slice lacks, listing the slice's sources
|
|
105
|
+
*/
|
|
106
|
+
export declare function templatesSource(builder: string, what: string, source: string | undefined, names: readonly string[]): string;
|
|
107
|
+
//# sourceMappingURL=record-sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sources.d.ts","sourceRoot":"","sources":["../../../src/utils/record-sources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EACS,UAAU,EACtB,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAChG,MAAM,eAAe,CAAC;AACvB,OAAO,EACmD,KAAK,yBAAyB,EAAE,KAAK,sBAAsB,EAAE,KAAK,SAAS,EACpI,MAAM,2BAA2B,CAAC;AAGnC,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAC9B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mGAAmG;IACnG,IAAI,EAAE,MAAM,CAAC;IACb,8JAA8J;IAC9J,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACrC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB,kKAAkK;IAClK,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACtD,gHAAgH;IAChH,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrD,qGAAqG;IACrG,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,0GAA0G;AAC1G,MAAM,WAAW,aAAa;IAC1B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACjD,2CAA2C;IAC3C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;;;OAOG;IACH,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;CAC9D;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAwClH;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,GAAG,MAAM,EAAE,CAIvF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAM5H;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAI3H"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
* A builder's narrowing (#1340): its `slice` is one `Slice.bindRecords`, each
|
|
7
|
+
* source named after what it narrows, and each source filters every place its
|
|
8
|
+
* records appear — the main area, the Choosers and the Library tab that lists
|
|
9
|
+
* that record. The one check every builder's tag makes of its `slice`, the one
|
|
10
|
+
* binding of its sources in the builder's payload (#1356), the one check of a
|
|
11
|
+
* tab's `source`, and the one of a templates list's.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
import { East, Expr, StringType, isTypeEqual, none, some, } from "@elaraai/east";
|
|
16
|
+
import { isRecordSlices, recordSlicesChrome, resolveRowSource, } from "@elaraai/east-ui/internal";
|
|
17
|
+
import { keyVisibility } from "./key-visibility.js";
|
|
18
|
+
/** `` `lanes`, `resources` and `events` ``. */
|
|
19
|
+
function quoted(names) {
|
|
20
|
+
const each = names.map(name => `\`${name}\``);
|
|
21
|
+
return each.length <= 1 ? each.join("") : `${each.slice(0, -1).join(", ")} and ${each.at(-1)}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Checks a builder's `slice` and reads its sources (#1340): the slice is
|
|
25
|
+
* `Slice.bindRecords`, every source one the builder takes, each a record with
|
|
26
|
+
* String primary keys. `bind` binds each source once in the builder's payload
|
|
27
|
+
* (#1356).
|
|
28
|
+
*
|
|
29
|
+
* @param slice - The builder's `slice` prop, if given
|
|
30
|
+
* @param spec - What the builder takes, and its words
|
|
31
|
+
* @returns The chrome, the sources' names, and the binding of each one's part, data and keys
|
|
32
|
+
* @throws {Error} When `slice` is `Slice.bind` or `Slice.bindRecord`, names a source the builder does not take, or narrows a record whose keys are not Strings
|
|
33
|
+
*/
|
|
34
|
+
export function recordSources(slice, spec) {
|
|
35
|
+
if (slice === undefined)
|
|
36
|
+
return { chrome: none, names: [], bind: () => ({ parts: {}, data: {}, keys: {} }) };
|
|
37
|
+
if (!isRecordSlices(slice.slice)) {
|
|
38
|
+
throw new Error(`${spec.builder}: \`slice\` is Slice.bindRecords(key, { ${spec.names.join(", ")} }) — name each source after what it narrows; Slice.bind and Slice.bindRecord are not taken`);
|
|
39
|
+
}
|
|
40
|
+
const handle = East.value(slice.slice);
|
|
41
|
+
const sources = Expr.type(handle).fields["sources"];
|
|
42
|
+
const names = sources?.type === "Struct" ? Object.keys(sources.fields) : [];
|
|
43
|
+
const takes = spec.takes ?? ((name) => spec.names.includes(name));
|
|
44
|
+
const prop = (name) => `${spec.builder}.slice's ${name}`;
|
|
45
|
+
const unkeyed = (name) => new Error(`${spec.builder}: \`slice\`'s ${name} narrows a record whose keys are not Strings — each source is a record with String primary keys`);
|
|
46
|
+
for (const name of names) {
|
|
47
|
+
if (!takes(name)) {
|
|
48
|
+
throw new Error(`${spec.builder}: \`slice\` narrows ${spec.what} — its source '${name}' is none of them; name the sources ${quoted(spec.names)}`);
|
|
49
|
+
}
|
|
50
|
+
// A source's rows are keyed as its record is: a builder matches them by String key.
|
|
51
|
+
const resolved = resolveRowSource(handle.sources[name].data, prop(name));
|
|
52
|
+
if (resolved.kind !== "ordered" || !isTypeEqual(resolved.keyType, StringType))
|
|
53
|
+
throw unkeyed(name);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
chrome: some(recordSlicesChrome(slice)),
|
|
57
|
+
names,
|
|
58
|
+
bind: ($) => {
|
|
59
|
+
const parts = {};
|
|
60
|
+
const data = {};
|
|
61
|
+
const keys = {};
|
|
62
|
+
for (const name of names) {
|
|
63
|
+
const part = $.let(handle.sources[name]);
|
|
64
|
+
const rows = $.let(part.data);
|
|
65
|
+
// Its keys page through its own data.
|
|
66
|
+
const visible = keyVisibility(rows, prop(name));
|
|
67
|
+
if (visible.source === undefined)
|
|
68
|
+
throw unkeyed(name);
|
|
69
|
+
const shown = $.let(visible.source);
|
|
70
|
+
parts[name] = part;
|
|
71
|
+
data[name] = rows;
|
|
72
|
+
keys[name] = shown;
|
|
73
|
+
}
|
|
74
|
+
return { parts, data, keys };
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The sources a builder's `slice` names, read before it is checked: what a
|
|
80
|
+
* builder's templates check lists, so a list written in the code is refused
|
|
81
|
+
* with the change to make before a source no list names is (#1343, #1345).
|
|
82
|
+
*
|
|
83
|
+
* @param slice - The builder's `slice` prop, if given
|
|
84
|
+
* @returns Its sources, in their order; none when it is no `Slice.bindRecords`, which `recordSources` refuses
|
|
85
|
+
*/
|
|
86
|
+
export function sliceSourceNames(slice) {
|
|
87
|
+
if (slice === undefined || !isRecordSlices(slice.slice))
|
|
88
|
+
return [];
|
|
89
|
+
const sources = Expr.type(East.value(slice.slice)).fields["sources"];
|
|
90
|
+
return sources?.type === "Struct" ? Object.keys(sources.fields) : [];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A tab's source (#1340): the slice's source whose shown keys filter the tab's
|
|
94
|
+
* cards, its rows that record's rows by key; `none` for a tab that names none,
|
|
95
|
+
* which lists its rows whole.
|
|
96
|
+
*
|
|
97
|
+
* @param builder - The builder, as its message names it
|
|
98
|
+
* @param tab - The tab, as its message names it (`Positions`)
|
|
99
|
+
* @param source - The source the tab names, if any
|
|
100
|
+
* @param names - The slice's sources
|
|
101
|
+
* @returns The source, as the payload carries it
|
|
102
|
+
* @throws {Error} When the tab names a source the slice lacks
|
|
103
|
+
*/
|
|
104
|
+
export function tabSource(builder, tab, source, names) {
|
|
105
|
+
if (source === undefined)
|
|
106
|
+
return none;
|
|
107
|
+
if (!names.includes(source)) {
|
|
108
|
+
throw new Error(`${builder}: the ${tab} tab's source '${source}' is not one of the slice's sources (${names.length === 0 ? "it has no slice" : names.join(", ")})`);
|
|
109
|
+
}
|
|
110
|
+
return some(source);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A templates list's source (#1340, #1345): every builder's templates are a
|
|
114
|
+
* record of their own, each list a source of the builder's one
|
|
115
|
+
* `Slice.bindRecords`, its cards that record's rows by key. A list written in
|
|
116
|
+
* the code names no source, and is refused as one naming a source the slice
|
|
117
|
+
* lacks is, both with the change to make.
|
|
118
|
+
*
|
|
119
|
+
* @param builder - The builder, as its message names it (`Sheet`)
|
|
120
|
+
* @param what - The builder's templates declaration, as the refusal writes it (`Sheet.templates(rows, { …, source: "rowTemplates" })`)
|
|
121
|
+
* @param source - The source the list names; `undefined` for a list written in the code, or one that names none
|
|
122
|
+
* @param names - The slice's sources
|
|
123
|
+
* @returns The source's name
|
|
124
|
+
* @throws {Error} When the list names no source, or one the slice lacks, listing the slice's sources
|
|
125
|
+
*/
|
|
126
|
+
export function templatesSource(builder, what, source, names) {
|
|
127
|
+
if (source !== undefined && names.includes(source))
|
|
128
|
+
return source;
|
|
129
|
+
const missing = source === undefined ? "" : ` — '${source}' is not one of them`;
|
|
130
|
+
throw new Error(`${builder}: templates are records now — bind them in Slice.bindRecords and name the source, ${what} (${names.length === 0 ? "it has no slice" : `the slice's sources: ${names.join(", ")}`}${missing})`);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=record-sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sources.js","sourceRoot":"","sources":["../../../src/utils/record-sources.ts"],"names":[],"mappings":"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"}
|