@elaraai/e3-ui 1.0.94 → 1.0.95
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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.examples.d.ts","sourceRoot":"","sources":["../../../test/sheet/sheet.examples.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,sCAAsC;AACtC,OAAO,EACG,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAgB,WAAW,EAAE,QAAQ,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"sheet.examples.d.ts","sourceRoot":"","sources":["../../../test/sheet/sheet.examples.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAyC,CAAC;AAC/E,yGAAyG;AACzG,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA6F,CAAC;AACtI,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiG,CAAC;AAE5I,wHAAwH;AACxH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAwG,CAAC;AAC/I,oHAAoH;AACpH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2FASzC,CAAC;AACJ,6EAA6E;AAC7E,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoH,CAAC;AAExK,2HAA2H;AAC3H,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyF,CAAC;AAC5H,kHAAkH;AAClH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAmBrC,CAAC;AACJ,yEAAyE;AACzE,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA4G,CAAC;AAU5J;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,aAAa,6CAyTxB,CAAC;AAMH;;;qCAGqC;AACrC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIlB,CAAC;AACH,6EAA6E;AAC7E,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiE,CAAC;AACvF,2DAA2D;AAC3D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEAoBxB,CAAC;AACJ,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAoC,CAAC;AAErE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,6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"}
|
|
@@ -4,7 +4,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "@elaraai/e3-ui/jsx-runtime";
|
|
|
4
4
|
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
5
5
|
*/
|
|
6
6
|
/** @jsxImportSource @elaraai/e3-ui */
|
|
7
|
-
import { East, ArrayType, BooleanType, DateTimeType, DictType, FloatType, FunctionType, IntegerType, NullType, OptionType, SetType, StringType, StructType, VariantType, example, none, some, variant, } from "@elaraai/east";
|
|
7
|
+
import { East, ArrayType, BooleanType, DateTimeType, DictType, FloatType, FunctionType, IntegerType, NullType, OptionType, PatchType, SetType, StringType, StructType, VariantType, example, none, some, variant, } from "@elaraai/east";
|
|
8
8
|
import { Badge, Box, Configurator, Field, Format, HStack, Input, Reactive, SegmentGroup, Slice, State, StatusValueType, Style, Switch, Text, UIComponentType, VStack, } from "@elaraai/east-ui";
|
|
9
9
|
import { Data, Record, Sheet } from "@elaraai/e3-ui";
|
|
10
10
|
import e3 from "@elaraai/e3";
|
|
@@ -17,14 +17,17 @@ import e3 from "@elaraai/e3";
|
|
|
17
17
|
// - `sheetBasic`, the smallest: a record's entries as the rows (§3.1);
|
|
18
18
|
// - `sheetVariants`, THE configurator: the sheet's options as axes, over the
|
|
19
19
|
// host's rows (`data`), committed through `onApply`;
|
|
20
|
-
// - `sheetStress`, two thousand rows a
|
|
20
|
+
// - `sheetStress`, two thousand rows of a record, read only, paged through
|
|
21
|
+
// the indexes its rail narrows them by, and views over that narrowing;
|
|
21
22
|
// - `sheetLibrary`, a library of the author's own (§4.4);
|
|
22
23
|
// - `sheetWorkshop`, the flagship — the joinery workshop's orders (§3.3):
|
|
23
24
|
// groups, the driver and registers, the link grammar, the copilot,
|
|
24
|
-
// readiness, the
|
|
25
|
+
// readiness, one rail over the orders and the two templates records, and
|
|
26
|
+
// views;
|
|
25
27
|
// - `sheetWeeks`, one entry's rows with every column kind and its rules (§3.4);
|
|
26
28
|
// - `sheetBatches`, one entry's groups in the planner's order, dragged and
|
|
27
|
-
// moved (#1187), with their sub rows
|
|
29
|
+
// moved (#1187), with their sub rows, its templates two records the rail
|
|
30
|
+
// narrows;
|
|
28
31
|
// - `sheetLoose`, loose rows between the groups (#846);
|
|
29
32
|
// - `sheetPaged`, a record read a window at a time;
|
|
30
33
|
// - `sheetUpkeep`, the inspector's every field kind (#1220).
|
|
@@ -37,10 +40,11 @@ import e3 from "@elaraai/e3";
|
|
|
37
40
|
//
|
|
38
41
|
// Every sheet binds its rows from e3, so each runs on e3-web in the showcase
|
|
39
42
|
// (#1180): a record seeded with an authored literal (§2a), whose patch door
|
|
40
|
-
// every Save commits through
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
43
|
+
// every Save commits through. A sheet's narrowing is one `Slice.bindRecords`
|
|
44
|
+
// over records and their indexes (#1345): its `rows` source the rows, each
|
|
45
|
+
// templates record a source of its own. `State` holds only what the viewer
|
|
46
|
+
// owns: a configurator's axes, saved views, the week picked. The names are
|
|
47
|
+
// made up; the domain is a joinery workshop (decision 14).
|
|
44
48
|
//
|
|
45
49
|
// A sheet fills its parent, as a ui task's page fills the window: each
|
|
46
50
|
// example gives it a box of its own height. One page shows them all, so every
|
|
@@ -60,6 +64,21 @@ export const sheetJobs = e3.record("sheet_jobs", DictType(StringType, SheetJob),
|
|
|
60
64
|
]));
|
|
61
65
|
/** The jobs' patch door — every Save commits through it. */
|
|
62
66
|
export const sheetJobsPatch = e3.mutation.patch(sheetJobs);
|
|
67
|
+
/** The jobs again, as the edge bander's week holds them: a Save over them is refused for a reason the record gives. */
|
|
68
|
+
export const sheetBookedJobs = e3.record("sheet_booked_jobs", DictType(StringType, SheetJob), new Map([
|
|
69
|
+
["J-0001", { task: "Panel cutting", start: some(new Date("2026-10-12T00:00:00Z")), qty: some(48.0) }],
|
|
70
|
+
["J-0002", { task: "Edge banding", start: some(new Date("2026-10-13T00:00:00Z")), qty: some(120.0) }],
|
|
71
|
+
["J-0003", { task: "CNC routing", start: none, qty: some(48.0) }],
|
|
72
|
+
["J-0004", { task: "Spray finish", start: none, qty: none }],
|
|
73
|
+
]));
|
|
74
|
+
/** The booked jobs' patch door: it commits a patch unless a job it leaves bands both edges — the edge bander is booked that week. */
|
|
75
|
+
export const sheetBookedJobsPatch = e3.mutation.reduce("patch", sheetBookedJobs, East.function([DictType(StringType, SheetJob), PatchType(DictType(StringType, SheetJob))], DictType(StringType, SheetJob), ($, jobs, patch) => {
|
|
76
|
+
const next = $.let(East.applyPatch(jobs, patch));
|
|
77
|
+
$.for(next, ($2, job) => {
|
|
78
|
+
$2.if(job.task.endsWith("both edges"), ($3) => { $3.error("the edge bander is booked that week"); });
|
|
79
|
+
});
|
|
80
|
+
return next;
|
|
81
|
+
}));
|
|
63
82
|
/**
|
|
64
83
|
* The smallest sheet (§3.1) — the jobs an e3 record holds, in its frame: one
|
|
65
84
|
* row per job in key order and a blank tail for the next, three typed
|
|
@@ -174,7 +193,7 @@ export const sheetVariants = example({
|
|
|
174
193
|
inputs: [],
|
|
175
194
|
});
|
|
176
195
|
// ============================================================================
|
|
177
|
-
// sheetStress — two thousand rows,
|
|
196
|
+
// sheetStress — two thousand rows of a record, paged through its indexes
|
|
178
197
|
// ============================================================================
|
|
179
198
|
/** A job on the stress sheet — its start, activity, notes, work centres (a
|
|
180
199
|
* machine by code, or a count of a family), status and quantity. */
|
|
@@ -182,9 +201,6 @@ export const StressJob = StructType({
|
|
|
182
201
|
id: StringType, start: OptionType(DateTimeType), activity: StringType, notes: StringType,
|
|
183
202
|
stations: Sheet.Types.Link, status: StringType, qty: OptionType(FloatType),
|
|
184
203
|
});
|
|
185
|
-
/** How many jobs the stress sheet holds — a small authored constant;
|
|
186
|
-
* {@link sheetStressJobs} makes the rows. */
|
|
187
|
-
export const sheetStressJobCount = e3.input("sheet_stress_job_count", IntegerType, variant("value", 2000n));
|
|
188
204
|
/**
|
|
189
205
|
* The jobs, generated from their count — four a day from 5 January, the
|
|
190
206
|
* activities in turn: every fifth a routing run naming a count of routers,
|
|
@@ -209,48 +225,56 @@ export const generateStressJobs = East.function([IntegerType], ArrayType(StressJ
|
|
|
209
225
|
qty: i.remainder(11n).equal(0n).ifElse((_$2) => blank, (_$2) => East.value(some(i.multiply(7n).toFloat().add(50.0)), OptionType(FloatType))),
|
|
210
226
|
}));
|
|
211
227
|
});
|
|
212
|
-
/** The
|
|
213
|
-
export const sheetStressJobs = e3.
|
|
228
|
+
/** The jobs, keyed by their id — two thousand made by {@link generateStressJobs}: what the stress sheet pages and its rail narrows (#1345). */
|
|
229
|
+
export const sheetStressJobs = e3.record("sheet_stress_jobs", DictType(StringType, StressJob), East.compile(East.function([IntegerType], DictType(StringType, StressJob), ($, count) => {
|
|
230
|
+
const generate = $.const(generateStressJobs);
|
|
231
|
+
return generate(count).toDict((_$, job) => job.id, (_$, job) => job);
|
|
232
|
+
}), [])(2000n));
|
|
233
|
+
/** The jobs by activity, by status and by their notes: what the rail narrows them by, each choice one index's runs. */
|
|
234
|
+
export const sheetStressByActivity = e3.recordIndex("sheet_stress_by_activity", sheetStressJobs, { on: ["activity"] });
|
|
235
|
+
export const sheetStressByStatus = e3.recordIndex("sheet_stress_by_status", sheetStressJobs, { on: ["status"] });
|
|
236
|
+
export const sheetStressByNotes = e3.recordIndex("sheet_stress_by_notes", sheetStressJobs, { on: ["notes"] });
|
|
214
237
|
/**
|
|
215
|
-
* Stress
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* are a task's output, made where data is made, so the sheet only reads
|
|
224
|
-
* them. It is given no pane.
|
|
238
|
+
* Stress (§3.8) — two thousand jobs of an e3 record, read only, every row
|
|
239
|
+
* virtualised, paged a window at a time. The rail is the sheet's
|
|
240
|
+
* `Slice.bindRecords`: its `rows` source narrows the jobs by activity, by
|
|
241
|
+
* status and by a prefix of their notes, each through the record's own index,
|
|
242
|
+
* and the sheet pages what it narrows to. Saved views each keep every
|
|
243
|
+
* source's narrowing (`Sheet.Types.RecordView`, its values `.east` literals),
|
|
244
|
+
* the first one open, kept per viewer through a `State` bind handle. It is
|
|
245
|
+
* given no pane.
|
|
225
246
|
*/
|
|
226
247
|
export const sheetStress = example({
|
|
227
|
-
keywords: ["Sheet", "stress", "virtualization", "2000", "rows", "performance", "
|
|
228
|
-
description: "Two thousand jobs an e3
|
|
248
|
+
keywords: ["Sheet", "stress", "virtualization", "2000", "rows", "performance", "readOnly", "slice", "Slice.bindRecords", "rows", "Data.bindPaged", "recordIndex", "record", "search", "filter", "views", "RecordView", "State.bind", "activeView", "set", "register", "concat", "footer", "paged", "Reactive", "State"],
|
|
249
|
+
description: "Two thousand jobs of an e3 record, read only and virtualised in the sheet's frame, paged in the order of the rail's narrowing — by activity, by status and by a prefix of their notes, each through the record's index — with saved views kept per viewer, each every source's narrowing",
|
|
229
250
|
fn: East.function([], UIComponentType, (_$) => (_jsx(Reactive, { children: $ => {
|
|
230
251
|
const MachineType = StructType({ code: StringType, family: StringType });
|
|
231
|
-
// Two thousand jobs an e3 task generates — made where data is made.
|
|
232
|
-
const jobs = $.let(Data.bind(sheetStressJobs));
|
|
233
|
-
const count = $.let(jobs.read().length());
|
|
234
252
|
const machines = $.const([
|
|
235
253
|
{ code: "R2140", family: "CNC router" }, { code: "R2141", family: "CNC router" }, { code: "R2145", family: "CNC router" },
|
|
236
254
|
{ code: "P3210", family: "4-side planer" }, { code: "A7301", family: "assembly bench" },
|
|
237
255
|
], ArrayType(MachineType));
|
|
238
|
-
//
|
|
239
|
-
const slice = $.let(Slice.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
256
|
+
// One rail over the jobs: the sheet's rows are what its `rows` source narrows them to, through the record's indexes.
|
|
257
|
+
const slice = $.let(Slice.bindRecords("sheet_stress", {
|
|
258
|
+
rows: {
|
|
259
|
+
source: Data.bindPaged(sheetStressJobs, { indexes: [sheetStressByActivity, sheetStressByStatus, sheetStressByNotes] }),
|
|
260
|
+
fields: {
|
|
261
|
+
activity: { label: "Activity", hints: ["Routing", "Spraying", "Wrapping", "Set-up", "Maintenance"] },
|
|
262
|
+
status: { label: "Status", hints: ["PLANNED", "RELEASED", "COMPLETE"] },
|
|
263
|
+
notes: { label: "Notes" },
|
|
264
|
+
},
|
|
265
|
+
search: ["notes"],
|
|
245
266
|
},
|
|
246
|
-
search: ["activity", "notes", "stations"],
|
|
247
267
|
}));
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
{ id: "
|
|
251
|
-
|
|
268
|
+
// Each view keeps every source's narrowing, by name: an activity's value is its `.east` literal, a search its prefix.
|
|
269
|
+
const views = $.let(State.bind([ArrayType(Sheet.Types.RecordView)], "sheet_stress_views", [
|
|
270
|
+
{ id: "spraying", name: "SPRAYING", context: 1n, reveals: [], folds: new Map(),
|
|
271
|
+
narrowing: new Map([["rows", { where: new Map([["activity", variant("values", ["\"Spraying\""])]]), preset: none, resolution: none }]]) },
|
|
272
|
+
{ id: "routers", name: "ROUTERS", context: 0n, reveals: [], folds: new Map(),
|
|
273
|
+
narrowing: new Map([["rows", { where: new Map([["activity", variant("values", ["\"Routing\""])]]), preset: none, resolution: none }]]) },
|
|
274
|
+
{ id: "urgent", name: "URGENT", context: 0n, reveals: [], folds: new Map(),
|
|
275
|
+
narrowing: new Map([["rows", { where: new Map([["notes", variant("prefix", "urgent")]]), preset: none, resolution: none }]]) },
|
|
252
276
|
]));
|
|
253
|
-
return (_jsx(Box, { height: "480px", children: _jsx(Sheet, {
|
|
277
|
+
return (_jsx(Box, { height: "480px", children: _jsx(Sheet, { slice: { slice }, name: "stress", registers: {
|
|
254
278
|
stations: Sheet.register.concat([
|
|
255
279
|
Sheet.register.members(machines, { kind: "machine", key: m => m.code, label: m => m.code, meta: m => some(m.family) }),
|
|
256
280
|
Sheet.register.members(machines, { kind: "family", key: m => m.family, label: m => m.family, meta: _m => some("family") }),
|
|
@@ -263,7 +287,7 @@ export const sheetStress = example({
|
|
|
263
287
|
members: [{ kind: "machine", identified: true }, { kind: "family", countable: true, resolvesTo: "machine" }] }),
|
|
264
288
|
status: Sheet.column.text(StressJob, { header: "Status", width: "120px" }),
|
|
265
289
|
qty: Sheet.column.quantity(StressJob, { header: "Qty", width: "112px", format: Format.Number({ maximumFractionDigits: 0n }) }),
|
|
266
|
-
},
|
|
290
|
+
}, views: views, activeView: some("spraying"), readOnly: true, footer: [{ text: "virtualised" }] }) }));
|
|
267
291
|
} }))),
|
|
268
292
|
inputs: [],
|
|
269
293
|
});
|
|
@@ -433,6 +457,49 @@ export const sheetWorkshopOrders = e3.record("sheet_workshop_orders", DictType(S
|
|
|
433
457
|
]));
|
|
434
458
|
/** The orders' patch door — every Save commits through it. */
|
|
435
459
|
export const sheetWorkshopOrdersPatch = e3.mutation.patch(sheetWorkshopOrders);
|
|
460
|
+
/** The orders by status and by customer: what the rail narrows them by, each choice one index's runs. */
|
|
461
|
+
export const sheetWorkshopOrdersByStatus = e3.recordIndex("sheet_workshop_orders_by_status", sheetWorkshopOrders, { on: ["status"] });
|
|
462
|
+
export const sheetWorkshopOrdersByCustomer = e3.recordIndex("sheet_workshop_orders_by_customer", sheetWorkshopOrders, { on: ["customer"] });
|
|
463
|
+
/** An operation template — the Rows tab's card, the group it sits under, and the activity and work centres it drops. */
|
|
464
|
+
export const WorkshopOperationTemplate = StructType({ name: StringType, group: StringType, activity: StringType, machines: Sheet.Types.Link });
|
|
465
|
+
/** The operation templates, keyed by their key: a record of their own, the rail's `rowTemplates` source (#1345). */
|
|
466
|
+
export const sheetWorkshopOperationTemplates = e3.record("sheet_workshop_operation_templates", DictType(StringType, WorkshopOperationTemplate), new Map([
|
|
467
|
+
["assemble", { name: "Assembly", group: "Operations", activity: "Assembly", machines: { from: [], to: [] } }],
|
|
468
|
+
["cut", { name: "Panel cutting", group: "Operations", activity: "Panel cutting", machines: { from: [], to: [variant("counted", { n: 1n, key: "beam saw" })] } }],
|
|
469
|
+
["deliver", { name: "Delivery", group: "Dispatch", activity: "Delivery", machines: { from: [], to: [] } }],
|
|
470
|
+
["edge", { name: "Edge banding", group: "Operations", activity: "Edge banding", machines: { from: [], to: [variant("counted", { n: 1n, key: "edge bander" })] } }],
|
|
471
|
+
["route", { name: "CNC routing", group: "Operations", activity: "CNC routing", machines: { from: [], to: [variant("counted", { n: 1n, key: "CNC router" })] } }],
|
|
472
|
+
["sand", { name: "Sanding", group: "Operations", activity: "Sanding", machines: { from: [], to: [] } }],
|
|
473
|
+
["spray", { name: "Spray finish", group: "Operations", activity: "Spray finish", machines: { from: [], to: [variant("counted", { n: 1n, key: "spray booth" })] } }],
|
|
474
|
+
["wrap", { name: "Wrapping", group: "Dispatch", activity: "Wrapping", machines: { from: [], to: [] } }],
|
|
475
|
+
]));
|
|
476
|
+
/** The operation templates by their group: what the rail narrows them by. */
|
|
477
|
+
export const sheetWorkshopOperationTemplatesByGroup = e3.recordIndex("sheet_workshop_operation_templates_by_group", sheetWorkshopOperationTemplates, { on: ["group"] });
|
|
478
|
+
/** An order template — the Rows tab's card, the group it sits under, and the operations each kind of order starts with. */
|
|
479
|
+
export const WorkshopOrderTemplate = StructType({ name: StringType, group: StringType, ops: ArrayType(WorkshopOperation) });
|
|
480
|
+
/** The order templates, keyed by their key: a record of their own, the rail's `groupTemplates` source (#1345). */
|
|
481
|
+
export const sheetWorkshopOrderTemplates = e3.record("sheet_workshop_order_templates", DictType(StringType, WorkshopOrderTemplate), new Map([
|
|
482
|
+
["kitchen", { name: "Kitchen order", group: "Orders", ops: [
|
|
483
|
+
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
484
|
+
{ activity: "Edge banding", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
485
|
+
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
486
|
+
{ activity: "Spray finish", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
487
|
+
] }],
|
|
488
|
+
["vanity", { name: "Vanity unit", group: "Orders", ops: [
|
|
489
|
+
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
490
|
+
{ activity: "CNC routing", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
491
|
+
{ activity: "Spray finish", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
492
|
+
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
493
|
+
] }],
|
|
494
|
+
["wardrobe", { name: "Wardrobe order", group: "Orders", ops: [
|
|
495
|
+
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
496
|
+
{ activity: "Edge banding", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
497
|
+
{ activity: "Drilling", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
498
|
+
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
499
|
+
] }],
|
|
500
|
+
]));
|
|
501
|
+
/** The order templates by their group: what the rail narrows them by. */
|
|
502
|
+
export const sheetWorkshopOrderTemplatesByGroup = e3.recordIndex("sheet_workshop_order_templates_by_group", sheetWorkshopOrderTemplates, { on: ["group"] });
|
|
436
503
|
/** The model behind the workshop's async proposer — an e3 function, a service, a notebook; the sheet needs only its types. */
|
|
437
504
|
const workshopRecommend = East.asyncPlatform("sheet_workshop_recommend", [Sheet.Types.DraftContext(WorkshopOrder, "ops", WorkshopActivity)], ArrayType(Sheet.Types.Proposal(WorkshopOperation)), { optional: true });
|
|
438
505
|
/**
|
|
@@ -447,22 +514,30 @@ const workshopRecommend = East.asyncPlatform("sheet_workshop_recommend", [Sheet.
|
|
|
447
514
|
* half the activity does not use, implies how many machines a quantity needs,
|
|
448
515
|
* and checks each machine named. The copilot fills dates, quantities, notes
|
|
449
516
|
* and work centres, and proposes the lines that follow — a pattern, one
|
|
450
|
-
* learned from the order, and an async model. A check on each order,
|
|
451
|
-
*
|
|
452
|
-
*
|
|
453
|
-
*
|
|
454
|
-
*
|
|
455
|
-
*
|
|
456
|
-
*
|
|
517
|
+
* learned from the order, and an async model. A check on each order, and a
|
|
518
|
+
* footer counting every operation. One rail, its `Slice.bindRecords` over
|
|
519
|
+
* three records (#1345): the orders, by status and customer — the sheet's
|
|
520
|
+
* rows, paged from it, Save committing through the record's patch door — and
|
|
521
|
+
* the operation and order templates, each a record of its own, by their
|
|
522
|
+
* group; views kept per viewer hold every source's narrowing. Both panes: the
|
|
523
|
+
* library lists the templates the rail shows, the statuses — a card dropped
|
|
524
|
+
* on an order's band sets its status — and the columns; the inspector shows
|
|
525
|
+
* every field of the selected operation, `created_by` (no column) read only,
|
|
526
|
+
* and the order with no customer is the batch's issue.
|
|
457
527
|
*/
|
|
458
528
|
export const sheetWorkshop = example({
|
|
459
|
-
keywords: ["Sheet", "BuilderFrame", "record", "Record", "group", "driver", "register", "members", "concat", "aliases", "meta", "parent", "Dict", "fold", "duplicate", "link", "multiple", "sides", "locks", "arity", "check", "exists", "uom", "Format", "templates", "library", "Sheet.library", "Sheet.library.tab", "drop", "inspector", "fields", "Sheet.field", "readonly", "views", "slice", "
|
|
460
|
-
description: "The flagship sheet — the workshop's orders as groups and their operations as lines; an activity driver giving units, durations and live halves; one work-centre register joined from a machines record (Dict), the bays (aliases) and the families (folded), its link grammar counting, locking, implying and checking machines; the copilot's fills (derive, history, sequence, default, phrase, capacity) and proposers (a pattern, a learned follower, an async model); an order check;
|
|
529
|
+
keywords: ["Sheet", "BuilderFrame", "record", "Record", "Record.onApply", "group", "driver", "register", "members", "concat", "aliases", "meta", "parent", "Dict", "fold", "duplicate", "link", "multiple", "sides", "locks", "arity", "check", "exists", "uom", "Format", "templates", "Sheet.templates", "library", "Sheet.library", "Sheet.library.tab", "drop", "inspector", "fields", "Sheet.field", "readonly", "views", "RecordView", "slice", "Slice.bindRecords", "Data.bindPaged", "recordIndex", "search", "filter", "copilot", "fill", "provider", "derive", "history", "sequence", "default", "phrase", "capacity", "propose", "proposer", "suggest", "learned", "follower", "asyncFunction", "asyncPlatform", "ready", "newGroup", "newRow", "footer", "joinery"],
|
|
530
|
+
description: "The flagship sheet — the workshop's orders as groups and their operations as lines; an activity driver giving units, durations and live halves; one work-centre register joined from a machines record (Dict), the bays (aliases) and the families (folded), its link grammar counting, locking, implying and checking machines; the copilot's fills (derive, history, sequence, default, phrase, capacity) and proposers (a pattern, a learned follower, an async model); an order check; one rail over the orders and the operation and order templates records, each its own source; a library of the templates, the statuses (dropped on an order to set its status) and the columns; an inspector pane showing every field; views kept per viewer; and a footer",
|
|
461
531
|
fn: East.function([], UIComponentType, (_$) => (_jsx(Reactive, { children: $ => {
|
|
462
532
|
const orders = $.let(Record.bind(sheetWorkshopOrders, [sheetWorkshopOrdersPatch]));
|
|
463
533
|
const machines = $.let(Record.bind(sheetWorkshopMachines, []));
|
|
464
534
|
const activities = $.let(Data.bind(sheetWorkshopActivities));
|
|
465
|
-
const
|
|
535
|
+
const operationTemplates = $.let(Data.bind(sheetWorkshopOperationTemplates));
|
|
536
|
+
const orderTemplates = $.let(Data.bind(sheetWorkshopOrderTemplates));
|
|
537
|
+
// The orders read whole, for the footer's count: the sheet pages its rows from the rail's `rows` source,
|
|
538
|
+
// so `orders` is the patch door its Save commits through, never read whole.
|
|
539
|
+
const allOrders = $.let(Data.bind(sheetWorkshopOrders));
|
|
540
|
+
const views = $.let(State.bind([ArrayType(Sheet.Types.RecordView)], "sheet.workshop.views", []));
|
|
466
541
|
const statuses = $.let([
|
|
467
542
|
{ word: "PLANNED", tone: variant("neutral", null) },
|
|
468
543
|
{ word: "RELEASED", tone: variant("info", null) },
|
|
@@ -476,15 +551,26 @@ export const sheetWorkshop = example({
|
|
|
476
551
|
{ name: "Bay 4", aliases: ["b4", "spray bay"] },
|
|
477
552
|
{ name: "Bay 7", aliases: ["b7", "assembly bay"] },
|
|
478
553
|
], ArrayType(BayType));
|
|
479
|
-
// Every operation of every order: what the
|
|
480
|
-
const operations = $.let(
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
554
|
+
// Every operation of every order: what the footer counts, whatever the rail shows.
|
|
555
|
+
const operations = $.let(allOrders.read().toArray((_$, o) => o.ops).flatMap((_$, ops) => ops));
|
|
556
|
+
// One rail over three records: the orders — the sheet's rows — and each templates record, its own source.
|
|
557
|
+
const slice = $.let(Slice.bindRecords("sheet.workshop", {
|
|
558
|
+
rows: {
|
|
559
|
+
source: Data.bindPaged(sheetWorkshopOrders, { indexes: [sheetWorkshopOrdersByStatus, sheetWorkshopOrdersByCustomer] }),
|
|
560
|
+
label: "Orders",
|
|
561
|
+
fields: { status: { label: "Status", hints: ["PLANNED", "RELEASED", "ON HOLD"] }, customer: { label: "Customer" } },
|
|
562
|
+
search: ["customer"],
|
|
563
|
+
},
|
|
564
|
+
rowTemplates: {
|
|
565
|
+
source: Data.bindPaged(sheetWorkshopOperationTemplates, { indexes: [sheetWorkshopOperationTemplatesByGroup] }),
|
|
566
|
+
label: "Operation templates",
|
|
567
|
+
fields: { group: { label: "Group", hints: ["Operations", "Dispatch"] } },
|
|
568
|
+
},
|
|
569
|
+
groupTemplates: {
|
|
570
|
+
source: Data.bindPaged(sheetWorkshopOrderTemplates, { indexes: [sheetWorkshopOrderTemplatesByGroup] }),
|
|
571
|
+
label: "Order templates",
|
|
572
|
+
fields: { group: { label: "Group", hints: ["Orders"] } },
|
|
486
573
|
},
|
|
487
|
-
search: ["activity", "notes", "machines"],
|
|
488
574
|
}));
|
|
489
575
|
const Ctx = Sheet.Types.DraftContext(WorkshopOrder, "ops", WorkshopActivity);
|
|
490
576
|
const DateFill = OptionType(Sheet.Types.Fill(DateTimeType));
|
|
@@ -656,25 +742,6 @@ export const sheetWorkshop = example({
|
|
|
656
742
|
});
|
|
657
743
|
return result;
|
|
658
744
|
}));
|
|
659
|
-
// The operations each kind of order starts with: the group templates' lines.
|
|
660
|
-
const kitchen = $.let([
|
|
661
|
-
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
662
|
-
{ activity: "Edge banding", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
663
|
-
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
664
|
-
{ activity: "Spray finish", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
665
|
-
], ArrayType(WorkshopOperation));
|
|
666
|
-
const wardrobe = $.let([
|
|
667
|
-
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
668
|
-
{ activity: "Edge banding", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
669
|
-
{ activity: "Drilling", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
670
|
-
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
671
|
-
], ArrayType(WorkshopOperation));
|
|
672
|
-
const vanity = $.let([
|
|
673
|
-
{ activity: "Panel cutting", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
674
|
-
{ activity: "CNC routing", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
675
|
-
{ activity: "Spray finish", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
676
|
-
{ activity: "Assembly", start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "" },
|
|
677
|
-
], ArrayType(WorkshopOperation));
|
|
678
745
|
// A new operation's and a new order's defaults, and the check every order passes before Save.
|
|
679
746
|
const newRow = $.const(East.function([Sheet.Types.NewRow], Sheet.Types.Patch(WorkshopOperation), () => Sheet.patch(WorkshopOperation, { start: none, end: none, qty: none, machines: { from: [], to: [] }, notes: "", created_by: "planner" })));
|
|
680
747
|
const newGroup = $.const(East.function([Sheet.Types.NewGroup], Sheet.Types.Patch(WorkshopOrder), () => Sheet.patch(WorkshopOrder, { status: "PLANNED", due: none, ops: [] })));
|
|
@@ -684,7 +751,7 @@ export const sheetWorkshop = example({
|
|
|
684
751
|
});
|
|
685
752
|
return East.value(variant("ready", null), Sheet.Types.Readiness);
|
|
686
753
|
}));
|
|
687
|
-
return (_jsx(Box, { height: "760px", children: _jsx(Sheet, {
|
|
754
|
+
return (_jsx(Box, { height: "760px", children: _jsx(Sheet, { slice: { slice }, group: Sheet.group(WorkshopOrder, "ops", {
|
|
688
755
|
title: "name", sub: o => o.customer, noun: { singular: "order", plural: "orders" },
|
|
689
756
|
cells: { activity: Sheet.group.cell.enum(WorkshopOrder, "statuses", "status"),
|
|
690
757
|
end: Sheet.group.cell.date(WorkshopOrder, "due") },
|
|
@@ -722,44 +789,20 @@ export const sheetWorkshop = example({
|
|
|
722
789
|
}, suggest: { ahead: 2n, triggers: ["activity", "start", "end", "qty", "notes", "machines"],
|
|
723
790
|
propose: [followUps, modelProposals, lastFollower] },
|
|
724
791
|
// The inspector pane: every field of an operation; created_by, which no column shows, read only.
|
|
725
|
-
inspector: true, fields: { created_by: Sheet.field.readonly() },
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
{
|
|
730
|
-
|
|
731
|
-
{
|
|
732
|
-
|
|
733
|
-
],
|
|
734
|
-
rows: [
|
|
735
|
-
{ key: "cut", name: "Panel cutting", group: "Operations",
|
|
736
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Panel cutting",
|
|
737
|
-
machines: { from: [], to: [variant("counted", { n: 1n, key: "beam saw" })] } }) },
|
|
738
|
-
{ key: "edge", name: "Edge banding", group: "Operations",
|
|
739
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Edge banding",
|
|
740
|
-
machines: { from: [], to: [variant("counted", { n: 1n, key: "edge bander" })] } }) },
|
|
741
|
-
{ key: "route", name: "CNC routing", group: "Operations",
|
|
742
|
-
values: Sheet.patch(WorkshopOperation, { activity: "CNC routing",
|
|
743
|
-
machines: { from: [], to: [variant("counted", { n: 1n, key: "CNC router" })] } }) },
|
|
744
|
-
{ key: "sand", name: "Sanding", group: "Operations",
|
|
745
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Sanding" }) },
|
|
746
|
-
{ key: "spray", name: "Spray finish", group: "Operations",
|
|
747
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Spray finish",
|
|
748
|
-
machines: { from: [], to: [variant("counted", { n: 1n, key: "spray booth" })] } }) },
|
|
749
|
-
{ key: "assemble", name: "Assembly", group: "Operations",
|
|
750
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Assembly" }) },
|
|
751
|
-
{ key: "wrap", name: "Wrapping", group: "Dispatch",
|
|
752
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Wrapping" }) },
|
|
753
|
-
{ key: "deliver", name: "Delivery", group: "Dispatch",
|
|
754
|
-
values: Sheet.patch(WorkshopOperation, { activity: "Delivery" }) },
|
|
755
|
-
],
|
|
756
|
-
}, library: [
|
|
792
|
+
inspector: true, fields: { created_by: Sheet.field.readonly() },
|
|
793
|
+
// The templates: two records, each list following its source of the rail.
|
|
794
|
+
templates: [
|
|
795
|
+
Sheet.templates(operationTemplates.read(), { name: t => t.name, group: t => some(t.group),
|
|
796
|
+
values: t => Sheet.patch(WorkshopOperation, { activity: t.activity, machines: t.machines }), source: "rowTemplates" }),
|
|
797
|
+
Sheet.templates(orderTemplates.read(), { name: t => t.name, group: t => some(t.group),
|
|
798
|
+
values: t => Sheet.patch(WorkshopOrder, { status: "PLANNED", due: none, ops: t.ops }), source: "groupTemplates" }),
|
|
799
|
+
], library: [
|
|
757
800
|
Sheet.library.rows(),
|
|
758
801
|
// The statuses an order takes: a card dropped on an order's band sets its status.
|
|
759
802
|
Sheet.library.tab(statuses, { name: "Statuses", icon: "flag",
|
|
760
803
|
key: s => s.word, label: s => s.word, drop: s => Sheet.patch(WorkshopOrder, { status: s.word }) }),
|
|
761
804
|
Sheet.library.columns(),
|
|
762
|
-
], newRow: newRow, newGroup: newGroup, ready: { group: readyOrder },
|
|
805
|
+
], newRow: newRow, newGroup: newGroup, ready: { group: readyOrder }, views: views, onApply: Record.onApply(orders, { keyed: true }), footer: [{ text: East.str `${operations.size()} operations` }], name: "workshop" }) }));
|
|
763
806
|
} }))),
|
|
764
807
|
inputs: [],
|
|
765
808
|
});
|
|
@@ -934,6 +977,27 @@ export const sheetBatchDays = e3.record("sheet_batch_days", DictType(StringType,
|
|
|
934
977
|
]));
|
|
935
978
|
/** The days' patch door — every Save commits through it. */
|
|
936
979
|
export const sheetBatchDaysPatch = e3.mutation.patch(sheetBatchDays);
|
|
980
|
+
/** A step template — the Rows tab's card, the group it sits under, and the task of the step it drops. */
|
|
981
|
+
export const BatchStepTemplate = StructType({ name: StringType, group: StringType, task: StringType });
|
|
982
|
+
/** The step templates, keyed by their key: a record of their own, the rail's `rowTemplates` source (#1345). */
|
|
983
|
+
export const sheetBatchStepTemplates = e3.record("sheet_batch_step_templates", DictType(StringType, BatchStepTemplate), new Map([
|
|
984
|
+
["sand", { name: "Sand", group: "Steps", task: "Sand" }],
|
|
985
|
+
["seal", { name: "Seal", group: "Steps", task: "Seal" }],
|
|
986
|
+
]));
|
|
987
|
+
/** The step templates by their group: what the rail narrows them by. */
|
|
988
|
+
export const sheetBatchStepTemplatesByGroup = e3.recordIndex("sheet_batch_step_templates_by_group", sheetBatchStepTemplates, { on: ["group"] });
|
|
989
|
+
/** A batch template — the Rows tab's card, the group it sits under, the batch's name and the steps it starts with. */
|
|
990
|
+
export const BatchTemplate = StructType({ name: StringType, group: StringType, batch: StringType, steps: ArrayType(BatchStep) });
|
|
991
|
+
/** The batch templates, keyed by their key: a record of their own, the rail's `groupTemplates` source (#1345). */
|
|
992
|
+
export const sheetBatchTemplates = e3.record("sheet_batch_templates", DictType(StringType, BatchTemplate), new Map([
|
|
993
|
+
["finishing", { name: "Finishing batch", group: "Batches", batch: "Finishing", steps: [
|
|
994
|
+
{ task: "Sand", qty: none, parts: [], bookings: [] },
|
|
995
|
+
{ task: "Seal", qty: none, parts: [], bookings: [] },
|
|
996
|
+
{ task: "Spray", qty: none, parts: [], bookings: [] },
|
|
997
|
+
] }],
|
|
998
|
+
]));
|
|
999
|
+
/** The batch templates by their group: what the rail narrows them by. */
|
|
1000
|
+
export const sheetBatchTemplatesByGroup = e3.recordIndex("sheet_batch_templates_by_group", sheetBatchTemplates, { on: ["group"] });
|
|
937
1001
|
/**
|
|
938
1002
|
* One day's batches, in the planner's order (#1187, SB39, SB40, SB44) — a
|
|
939
1003
|
* grouped sheet over one entry's groups, each batch a group of its steps. A
|
|
@@ -946,19 +1010,29 @@ export const sheetBatchDaysPatch = e3.mutation.patch(sheetBatchDays);
|
|
|
946
1010
|
* (a struct source — chips and labelled facets, a `none` facet dropping out)
|
|
947
1011
|
* and its bookings (a variant source matched arm by arm). Its chevron opens
|
|
948
1012
|
* them. Both panes: the library holds the templates and the columns, and the
|
|
949
|
-
* inspector a step's form, which leaves the sub rows' fields out.
|
|
1013
|
+
* inspector a step's form, which leaves the sub rows' fields out. The
|
|
1014
|
+
* templates are two records, the step templates and the batch templates, each
|
|
1015
|
+
* a source of the sheet's one rail (#1345), which narrows their cards by
|
|
1016
|
+
* their group.
|
|
950
1017
|
*/
|
|
951
1018
|
export const sheetBatches = example({
|
|
952
|
-
keywords: ["Sheet", "BuilderFrame", "drag", "drop", "move", "grip", "seam", "templates", "group", "grouped", "entry", "order", "Sheet.library.rows", "children", "newGroup", "newRow", "Patch", "defaults", "completeness", "fold", "undo", "redo", "ready", "subRows", "subRow", "sub rows", "SubRow", "Facet", "chips", "facets", "lead", "detail", "noun", "variant", "match", "read-only", "inspector", "Sheet.field", "hidden"],
|
|
953
|
-
description: "A sheet over one day's batches in the planner's order — templates dragged from the library onto a seam, steps and whole batches moved to another seam by their grips, a batch named before Save, new steps and batches from their defaults, and each step's parts and bookings as read-only sub rows under it, declared per array field like columns, beside a library and an inspector pane",
|
|
1019
|
+
keywords: ["Sheet", "BuilderFrame", "drag", "drop", "move", "grip", "seam", "templates", "Sheet.templates", "slice", "Slice.bindRecords", "Data.bindPaged", "recordIndex", "group", "grouped", "entry", "order", "Sheet.library.rows", "children", "newGroup", "newRow", "Patch", "defaults", "completeness", "fold", "undo", "redo", "ready", "subRows", "subRow", "sub rows", "SubRow", "Facet", "chips", "facets", "lead", "detail", "noun", "variant", "match", "read-only", "inspector", "Sheet.field", "hidden"],
|
|
1020
|
+
description: "A sheet over one day's batches in the planner's order — templates dragged from the library onto a seam, steps and whole batches moved to another seam by their grips, a batch named before Save, new steps and batches from their defaults, and each step's parts and bookings as read-only sub rows under it, declared per array field like columns, beside a library and an inspector pane; its step and batch templates two records, each a source of one rail",
|
|
954
1021
|
fn: East.function([], UIComponentType, (_$) => (_jsx(Reactive, { children: $ => {
|
|
955
1022
|
const days = $.let(Record.bind(sheetBatchDays, [sheetBatchDaysPatch]));
|
|
956
|
-
|
|
957
|
-
const
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
1023
|
+
const stepTemplates = $.let(Data.bind(sheetBatchStepTemplates));
|
|
1024
|
+
const batchTemplates = $.let(Data.bind(sheetBatchTemplates));
|
|
1025
|
+
// One rail over the templates records, each its own source: they narrow the Rows tab's cards.
|
|
1026
|
+
const slice = $.let(Slice.bindRecords("sheet.batches", {
|
|
1027
|
+
rowTemplates: {
|
|
1028
|
+
source: Data.bindPaged(sheetBatchStepTemplates, { indexes: [sheetBatchStepTemplatesByGroup] }),
|
|
1029
|
+
label: "Step templates", fields: { group: { label: "Group", hints: ["Steps"] } },
|
|
1030
|
+
},
|
|
1031
|
+
groupTemplates: {
|
|
1032
|
+
source: Data.bindPaged(sheetBatchTemplates, { indexes: [sheetBatchTemplatesByGroup] }),
|
|
1033
|
+
label: "Batch templates", fields: { group: { label: "Group", hints: ["Batches"] } },
|
|
1034
|
+
},
|
|
1035
|
+
}));
|
|
962
1036
|
// A batch needs a name before Save.
|
|
963
1037
|
const readyBatch = $.const(East.function([Sheet.Types.DraftGroup(Batch, "steps")], Sheet.Types.Readiness, ($, batch) => {
|
|
964
1038
|
$.if(batch.name.hasTag("value").and(() => batch.name.unwrap("value").length().equal(0n)), $ => {
|
|
@@ -985,12 +1059,12 @@ export const sheetBatches = example({
|
|
|
985
1059
|
}),
|
|
986
1060
|
}),
|
|
987
1061
|
// The sub rows show a step's parts and bookings; the inspector's form leaves them out.
|
|
988
|
-
inspector: true, fields: { parts: Sheet.field.hidden(), bookings: Sheet.field.hidden() }, templates:
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1062
|
+
inspector: true, fields: { parts: Sheet.field.hidden(), bookings: Sheet.field.hidden() }, slice: { slice }, templates: [
|
|
1063
|
+
Sheet.templates(stepTemplates.read(), { name: t => t.name, group: t => some(t.group),
|
|
1064
|
+
values: t => Sheet.patch(BatchStep, { task: t.task, qty: none }), source: "rowTemplates" }),
|
|
1065
|
+
Sheet.templates(batchTemplates.read(), { name: t => t.name, group: t => some(t.group),
|
|
1066
|
+
values: t => Sheet.patch(Batch, { name: t.batch, steps: t.steps }), source: "groupTemplates" }),
|
|
1067
|
+
], library: [Sheet.library.rows(), Sheet.library.columns()], ready: { group: readyBatch }, newRow: newStep, newGroup: newBatch }) }));
|
|
994
1068
|
} }))),
|
|
995
1069
|
inputs: [],
|
|
996
1070
|
});
|
|
@@ -1052,7 +1126,7 @@ export const sheetLoose = example({
|
|
|
1052
1126
|
// ============================================================================
|
|
1053
1127
|
/**
|
|
1054
1128
|
* A record read a window at a time (§3.4) — the jobs, paged in key order: the
|
|
1055
|
-
* key search seeks a job by its key
|
|
1129
|
+
* key search seeks a job by its key. Its
|
|
1056
1130
|
* `edits` let rows be added — from a gutter seam, the selection strip, or
|
|
1057
1131
|
* Alt+Insert — and never removed: a job leaves through the record's own
|
|
1058
1132
|
* process, not the sheet. It is given no pane.
|