@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.
Files changed (303) hide show
  1. package/dist/src/allocation/adapters.d.ts +159 -0
  2. package/dist/src/allocation/adapters.d.ts.map +1 -0
  3. package/dist/src/allocation/adapters.js +241 -0
  4. package/dist/src/allocation/adapters.js.map +1 -0
  5. package/dist/src/allocation/functions.d.ts +664 -0
  6. package/dist/src/allocation/functions.d.ts.map +1 -0
  7. package/dist/src/allocation/functions.js +782 -0
  8. package/dist/src/allocation/functions.js.map +1 -0
  9. package/dist/src/allocation/index.d.ts +2985 -0
  10. package/dist/src/allocation/index.d.ts.map +1 -0
  11. package/dist/src/allocation/index.js +499 -0
  12. package/dist/src/allocation/index.js.map +1 -0
  13. package/dist/src/allocation/types.d.ts +832 -0
  14. package/dist/src/allocation/types.d.ts.map +1 -0
  15. package/dist/src/allocation/types.js +360 -0
  16. package/dist/src/allocation/types.js.map +1 -0
  17. package/dist/src/bind/func.d.ts +14 -0
  18. package/dist/src/bind/func.d.ts.map +1 -1
  19. package/dist/src/bind/func.js +22 -1
  20. package/dist/src/bind/func.js.map +1 -1
  21. package/dist/src/calendar/index.d.ts +510 -1639
  22. package/dist/src/calendar/index.d.ts.map +1 -1
  23. package/dist/src/calendar/index.js +56 -29
  24. package/dist/src/calendar/index.js.map +1 -1
  25. package/dist/src/flowchart/canvas.d.ts +9 -21
  26. package/dist/src/flowchart/canvas.d.ts.map +1 -1
  27. package/dist/src/flowchart/canvas.js +10 -22
  28. package/dist/src/flowchart/canvas.js.map +1 -1
  29. package/dist/src/flowchart/flowchart.d.ts +19 -13
  30. package/dist/src/flowchart/flowchart.d.ts.map +1 -1
  31. package/dist/src/flowchart/flowchart.js.map +1 -1
  32. package/dist/src/flowchart/index.d.ts +44 -21
  33. package/dist/src/flowchart/index.d.ts.map +1 -1
  34. package/dist/src/flowchart/index.js +43 -20
  35. package/dist/src/flowchart/index.js.map +1 -1
  36. package/dist/src/flowchart/library.d.ts +166 -81
  37. package/dist/src/flowchart/library.d.ts.map +1 -1
  38. package/dist/src/flowchart/library.js +232 -105
  39. package/dist/src/flowchart/library.js.map +1 -1
  40. package/dist/src/flowchart/over.d.ts +9 -16
  41. package/dist/src/flowchart/over.d.ts.map +1 -1
  42. package/dist/src/flowchart/over.js +9 -16
  43. package/dist/src/flowchart/over.js.map +1 -1
  44. package/dist/src/flowchart/payload.d.ts +710 -508
  45. package/dist/src/flowchart/payload.d.ts.map +1 -1
  46. package/dist/src/flowchart/payload.js +128 -74
  47. package/dist/src/flowchart/payload.js.map +1 -1
  48. package/dist/src/flowchart/window.d.ts +132 -347
  49. package/dist/src/flowchart/window.d.ts.map +1 -1
  50. package/dist/src/flowchart/window.js +48 -55
  51. package/dist/src/flowchart/window.js.map +1 -1
  52. package/dist/src/index.d.ts +11 -7
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +14 -6
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/internal.d.ts +18 -7
  57. package/dist/src/internal.d.ts.map +1 -1
  58. package/dist/src/internal.js +28 -9
  59. package/dist/src/internal.js.map +1 -1
  60. package/dist/src/plan/event-rows.d.ts +26 -10
  61. package/dist/src/plan/event-rows.d.ts.map +1 -1
  62. package/dist/src/plan/event-rows.js +39 -13
  63. package/dist/src/plan/event-rows.js.map +1 -1
  64. package/dist/src/plan/ir.d.ts +244 -815
  65. package/dist/src/plan/ir.d.ts.map +1 -1
  66. package/dist/src/plan/ir.js +8 -6
  67. package/dist/src/plan/ir.js.map +1 -1
  68. package/dist/src/plan/library.d.ts +3 -0
  69. package/dist/src/plan/library.d.ts.map +1 -1
  70. package/dist/src/plan/library.js +1 -1
  71. package/dist/src/plan/library.js.map +1 -1
  72. package/dist/src/plan/ordered-source.d.ts +1 -0
  73. package/dist/src/plan/ordered-source.d.ts.map +1 -1
  74. package/dist/src/plan/plan.d.ts +559 -1667
  75. package/dist/src/plan/plan.d.ts.map +1 -1
  76. package/dist/src/plan/plan.js +123 -45
  77. package/dist/src/plan/plan.js.map +1 -1
  78. package/dist/src/plan/root.d.ts +16 -20
  79. package/dist/src/plan/root.d.ts.map +1 -1
  80. package/dist/src/plan/root.js +23 -33
  81. package/dist/src/plan/root.js.map +1 -1
  82. package/dist/src/roster/coverage.d.ts +17 -231
  83. package/dist/src/roster/coverage.d.ts.map +1 -1
  84. package/dist/src/roster/coverage.js +94 -90
  85. package/dist/src/roster/coverage.js.map +1 -1
  86. package/dist/src/roster/fit.d.ts +59 -0
  87. package/dist/src/roster/fit.d.ts.map +1 -0
  88. package/dist/src/roster/fit.js +155 -0
  89. package/dist/src/roster/fit.js.map +1 -0
  90. package/dist/src/roster/index.d.ts +2862 -3662
  91. package/dist/src/roster/index.d.ts.map +1 -1
  92. package/dist/src/roster/index.js +383 -81
  93. package/dist/src/roster/index.js.map +1 -1
  94. package/dist/src/roster/library.d.ts +37 -92
  95. package/dist/src/roster/library.d.ts.map +1 -1
  96. package/dist/src/roster/library.js +25 -64
  97. package/dist/src/roster/library.js.map +1 -1
  98. package/dist/src/roster/lists.d.ts +195 -0
  99. package/dist/src/roster/lists.d.ts.map +1 -0
  100. package/dist/src/roster/lists.js +233 -0
  101. package/dist/src/roster/lists.js.map +1 -0
  102. package/dist/src/roster/rules.d.ts +17 -260
  103. package/dist/src/roster/rules.d.ts.map +1 -1
  104. package/dist/src/roster/rules.js +135 -132
  105. package/dist/src/roster/rules.js.map +1 -1
  106. package/dist/src/roster/targets.d.ts +115 -0
  107. package/dist/src/roster/targets.d.ts.map +1 -0
  108. package/dist/src/roster/targets.js +213 -0
  109. package/dist/src/roster/targets.js.map +1 -0
  110. package/dist/src/roster/times.d.ts +251 -0
  111. package/dist/src/roster/times.d.ts.map +1 -0
  112. package/dist/src/roster/times.js +174 -0
  113. package/dist/src/roster/times.js.map +1 -0
  114. package/dist/src/roster/types.d.ts +828 -183
  115. package/dist/src/roster/types.d.ts.map +1 -1
  116. package/dist/src/roster/types.js +224 -97
  117. package/dist/src/roster/types.js.map +1 -1
  118. package/dist/src/schedule/accessor.d.ts +28 -0
  119. package/dist/src/schedule/accessor.d.ts.map +1 -0
  120. package/dist/src/schedule/accessor.js +39 -0
  121. package/dist/src/schedule/accessor.js.map +1 -0
  122. package/dist/src/schedule/events.d.ts +170 -42
  123. package/dist/src/schedule/events.d.ts.map +1 -1
  124. package/dist/src/schedule/events.js +431 -171
  125. package/dist/src/schedule/events.js.map +1 -1
  126. package/dist/src/schedule/index.d.ts +41 -4
  127. package/dist/src/schedule/index.d.ts.map +1 -1
  128. package/dist/src/schedule/index.js +35 -3
  129. package/dist/src/schedule/index.js.map +1 -1
  130. package/dist/src/schedule/library.d.ts +13 -3
  131. package/dist/src/schedule/library.d.ts.map +1 -1
  132. package/dist/src/schedule/library.js +11 -4
  133. package/dist/src/schedule/library.js.map +1 -1
  134. package/dist/src/schedule/periods.d.ts +115 -0
  135. package/dist/src/schedule/periods.d.ts.map +1 -0
  136. package/dist/src/schedule/periods.js +215 -0
  137. package/dist/src/schedule/periods.js.map +1 -0
  138. package/dist/src/schedule/record-window.d.ts +25 -3
  139. package/dist/src/schedule/record-window.d.ts.map +1 -1
  140. package/dist/src/schedule/record-window.js +31 -18
  141. package/dist/src/schedule/record-window.js.map +1 -1
  142. package/dist/src/schedule/resources.d.ts +82 -4
  143. package/dist/src/schedule/resources.d.ts.map +1 -1
  144. package/dist/src/schedule/resources.js +44 -14
  145. package/dist/src/schedule/resources.js.map +1 -1
  146. package/dist/src/schedule/session.d.ts +69 -0
  147. package/dist/src/schedule/session.d.ts.map +1 -0
  148. package/dist/src/schedule/session.js +121 -0
  149. package/dist/src/schedule/session.js.map +1 -0
  150. package/dist/src/schedule/templates.d.ts +14 -2
  151. package/dist/src/schedule/templates.d.ts.map +1 -1
  152. package/dist/src/schedule/templates.js +5 -3
  153. package/dist/src/schedule/templates.js.map +1 -1
  154. package/dist/src/schedule/types.d.ts +1671 -37
  155. package/dist/src/schedule/types.d.ts.map +1 -1
  156. package/dist/src/schedule/types.js +196 -5
  157. package/dist/src/schedule/types.js.map +1 -1
  158. package/dist/src/schedule/window.d.ts +14 -0
  159. package/dist/src/schedule/window.d.ts.map +1 -1
  160. package/dist/src/schedule/window.js +14 -4
  161. package/dist/src/schedule/window.js.map +1 -1
  162. package/dist/src/schedule/words.d.ts +22 -0
  163. package/dist/src/schedule/words.d.ts.map +1 -0
  164. package/dist/src/schedule/words.js +25 -0
  165. package/dist/src/schedule/words.js.map +1 -0
  166. package/dist/src/sheet/index.d.ts +61 -27
  167. package/dist/src/sheet/index.d.ts.map +1 -1
  168. package/dist/src/sheet/index.js +59 -25
  169. package/dist/src/sheet/index.js.map +1 -1
  170. package/dist/src/sheet/library.d.ts +21 -3
  171. package/dist/src/sheet/library.d.ts.map +1 -1
  172. package/dist/src/sheet/library.js +23 -6
  173. package/dist/src/sheet/library.js.map +1 -1
  174. package/dist/src/sheet/registers.d.ts +100 -85
  175. package/dist/src/sheet/registers.d.ts.map +1 -1
  176. package/dist/src/sheet/registers.js +100 -85
  177. package/dist/src/sheet/registers.js.map +1 -1
  178. package/dist/src/sheet/root.d.ts +8 -12
  179. package/dist/src/sheet/root.d.ts.map +1 -1
  180. package/dist/src/sheet/root.js +6 -40
  181. package/dist/src/sheet/root.js.map +1 -1
  182. package/dist/src/sheet/sheet.d.ts +598 -2349
  183. package/dist/src/sheet/sheet.d.ts.map +1 -1
  184. package/dist/src/sheet/sheet.js +124 -37
  185. package/dist/src/sheet/sheet.js.map +1 -1
  186. package/dist/src/sheet/sub-rows.d.ts +74 -28
  187. package/dist/src/sheet/sub-rows.d.ts.map +1 -1
  188. package/dist/src/sheet/sub-rows.js +74 -28
  189. package/dist/src/sheet/sub-rows.js.map +1 -1
  190. package/dist/src/sheet/templates.d.ts +98 -34
  191. package/dist/src/sheet/templates.d.ts.map +1 -1
  192. package/dist/src/sheet/templates.js +102 -58
  193. package/dist/src/sheet/templates.js.map +1 -1
  194. package/dist/src/sheet/types.d.ts +289 -1359
  195. package/dist/src/sheet/types.d.ts.map +1 -1
  196. package/dist/src/sheet/types.js +20 -26
  197. package/dist/src/sheet/types.js.map +1 -1
  198. package/dist/src/sheet/views.d.ts +10 -11
  199. package/dist/src/sheet/views.d.ts.map +1 -1
  200. package/dist/src/sheet/views.js +15 -20
  201. package/dist/src/sheet/views.js.map +1 -1
  202. package/dist/src/{roster/visibility.d.ts → utils/key-visibility.d.ts} +42 -7
  203. package/dist/src/utils/key-visibility.d.ts.map +1 -0
  204. package/dist/src/utils/key-visibility.js +36 -0
  205. package/dist/src/utils/key-visibility.js.map +1 -0
  206. package/dist/src/utils/ordered-source.d.ts +1 -0
  207. package/dist/src/utils/ordered-source.d.ts.map +1 -1
  208. package/dist/src/utils/ordered-source.js +8 -3
  209. package/dist/src/utils/ordered-source.js.map +1 -1
  210. package/dist/src/utils/record-sources.d.ts +107 -0
  211. package/dist/src/utils/record-sources.d.ts.map +1 -0
  212. package/dist/src/utils/record-sources.js +132 -0
  213. package/dist/src/utils/record-sources.js.map +1 -0
  214. package/dist/test/allocation/allocation.examples.d.ts +2902 -0
  215. package/dist/test/allocation/allocation.examples.d.ts.map +1 -0
  216. package/dist/test/allocation/allocation.examples.js +643 -0
  217. package/dist/test/allocation/allocation.examples.js.map +1 -0
  218. package/dist/test/allocation/fit.examples.d.ts +546 -0
  219. package/dist/test/allocation/fit.examples.d.ts.map +1 -0
  220. package/dist/test/allocation/fit.examples.js +171 -0
  221. package/dist/test/allocation/fit.examples.js.map +1 -0
  222. package/dist/test/allocation/kiln-yard.d.ts +181 -0
  223. package/dist/test/allocation/kiln-yard.d.ts.map +1 -0
  224. package/dist/test/allocation/kiln-yard.js +228 -0
  225. package/dist/test/allocation/kiln-yard.js.map +1 -0
  226. package/dist/test/bind/data/data.examples.d.ts +651 -1
  227. package/dist/test/bind/data/data.examples.d.ts.map +1 -1
  228. package/dist/test/bind/data/data.examples.js +140 -2
  229. package/dist/test/bind/data/data.examples.js.map +1 -1
  230. package/dist/test/bind/func/func.examples.d.ts +10 -1
  231. package/dist/test/bind/func/func.examples.d.ts.map +1 -1
  232. package/dist/test/bind/func/func.examples.js +8 -1
  233. package/dist/test/bind/func/func.examples.js.map +1 -1
  234. package/dist/test/bind/record/record.examples.d.ts +633 -1
  235. package/dist/test/bind/record/record.examples.d.ts.map +1 -1
  236. package/dist/test/bind/record/record.examples.js +26 -2
  237. package/dist/test/bind/record/record.examples.js.map +1 -1
  238. package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
  239. package/dist/test/calendar/calendar-records.examples.js +18 -14
  240. package/dist/test/calendar/calendar-records.examples.js.map +1 -1
  241. package/dist/test/calendar/calendar.examples.d.ts +521 -16
  242. package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
  243. package/dist/test/calendar/calendar.examples.js +182 -135
  244. package/dist/test/calendar/calendar.examples.js.map +1 -1
  245. package/dist/test/examples-package.d.ts +75 -0
  246. package/dist/test/examples-package.d.ts.map +1 -0
  247. package/dist/test/examples-package.js +263 -0
  248. package/dist/test/examples-package.js.map +1 -0
  249. package/dist/test/flowchart/flowchart.examples.d.ts +211 -19
  250. package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
  251. package/dist/test/flowchart/flowchart.examples.js +102 -75
  252. package/dist/test/flowchart/flowchart.examples.js.map +1 -1
  253. package/dist/test/plan/plan-events.examples.d.ts +1439 -209
  254. package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
  255. package/dist/test/plan/plan-events.examples.js +199 -59
  256. package/dist/test/plan/plan-events.examples.js.map +1 -1
  257. package/dist/test/plan/plan-records.examples.d.ts +420 -0
  258. package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
  259. package/dist/test/plan/plan-records.examples.js +70 -19
  260. package/dist/test/plan/plan-records.examples.js.map +1 -1
  261. package/dist/test/plan/plan-windows.examples.d.ts +636 -55
  262. package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
  263. package/dist/test/plan/plan-windows.examples.js +69 -33
  264. package/dist/test/plan/plan-windows.examples.js.map +1 -1
  265. package/dist/test/plan/plan.examples.d.ts +153 -31
  266. package/dist/test/plan/plan.examples.d.ts.map +1 -1
  267. package/dist/test/plan/plan.examples.js +178 -101
  268. package/dist/test/plan/plan.examples.js.map +1 -1
  269. package/dist/test/roster/domain.examples.d.ts +467 -250
  270. package/dist/test/roster/domain.examples.d.ts.map +1 -1
  271. package/dist/test/roster/domain.examples.js +92 -29
  272. package/dist/test/roster/domain.examples.js.map +1 -1
  273. package/dist/test/roster/roster-records.examples.d.ts +430 -586
  274. package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
  275. package/dist/test/roster/roster-records.examples.js +102 -43
  276. package/dist/test/roster/roster-records.examples.js.map +1 -1
  277. package/dist/test/roster/roster.examples.d.ts +2319 -606
  278. package/dist/test/roster/roster.examples.d.ts.map +1 -1
  279. package/dist/test/roster/roster.examples.js +456 -148
  280. package/dist/test/roster/roster.examples.js.map +1 -1
  281. package/dist/test/roster/warehouse.d.ts +172 -63
  282. package/dist/test/roster/warehouse.d.ts.map +1 -1
  283. package/dist/test/roster/warehouse.js +172 -39
  284. package/dist/test/roster/warehouse.js.map +1 -1
  285. package/dist/test/schedule/schedule.examples.d.ts +3499 -0
  286. package/dist/test/schedule/schedule.examples.d.ts.map +1 -0
  287. package/dist/test/schedule/schedule.examples.js +192 -0
  288. package/dist/test/schedule/schedule.examples.js.map +1 -0
  289. package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
  290. package/dist/test/sheet/sheet-records.examples.js +22 -18
  291. package/dist/test/sheet/sheet-records.examples.js.map +1 -1
  292. package/dist/test/sheet/sheet.examples.d.ts +715 -26
  293. package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
  294. package/dist/test/sheet/sheet.examples.js +204 -130
  295. package/dist/test/sheet/sheet.examples.js.map +1 -1
  296. package/package.json +17 -10
  297. package/dist/src/roster/people.d.ts +0 -50
  298. package/dist/src/roster/people.d.ts.map +0 -1
  299. package/dist/src/roster/people.js +0 -32
  300. package/dist/src/roster/people.js.map +0 -1
  301. package/dist/src/roster/visibility.d.ts.map +0 -1
  302. package/dist/src/roster/visibility.js +0 -25
  303. 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":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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 task makes, read only, and the lens;
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 lens and views;
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, or a task's output, made where data is made.
41
- // `State` holds only what the viewer owns: a configurator's axes, saved views,
42
- // the week picked. The names are made up; the domain is a joinery workshop
43
- // (decision 14).
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, and the lens over them
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 task that generates the jobs — its output is what the stress sheet reads. */
213
- export const sheetStressJobs = e3.task("sheet_stress_jobs", [sheetStressJobCount], generateStressJobs);
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, and the lens (§3.8) — two thousand jobs an e3 task generates, the
216
- * host's rows (`data`), read only, every row virtualised. Search and filter
217
- * run through the bound slice; the sheet never narrows, it draws the rows the
218
- * narrowing leaves as collapsed context bands while hits keep their row
219
- * numbers. The work centres are a set column searched through its display
220
- * form (`text: r => Sheet.link.print(r.stations)`); saved views are
221
- * slice-state snapshots evaluated live, with their context and reveals, the
222
- * first one open, kept per viewer through a `State` bind handle. The rows
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", "data", "readOnly", "slice", "search", "filter", "lens", "bands", "context", "reveal", "views", "State.bind", "activeView", "text", "Sheet.link.print", "set", "register", "concat", "footer", "Slice", "config", "bind", "state", "Data.bind", "bound", "e3.task", "generated", "Reactive", "State"],
228
- description: "Two thousand jobs an e3 task generates, read only and virtualised in the sheet's frame, with the lens over them — search and filter through the bound slice drawn as context bands (hits keep their row numbers), a set column searched through its display text, and saved views kept per viewer as slice-state snapshots with their context and reveals",
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
- // The work centres are searched through their display form — `3 x CNC router`, `A7301` — not their `.east` text.
239
- const slice = $.let(Slice.bind("sheet_stress_slice", jobs.read(), {
240
- fields: {
241
- activity: { label: "Activity", hints: ["Routing", "Spraying", "Wrapping", "Set-up", "Maintenance"] },
242
- notes: { label: "Notes" },
243
- stations: { label: "Work centres", text: r => Sheet.link.print(r.stations) },
244
- status: { label: "Status" },
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
- const views = $.let(State.bind([ArrayType(Sheet.Types.View)], "sheet_stress_views", [
249
- { id: "spraying", name: "SPRAYING", narrowing: Slice.state({ search: some("spraying") }), context: 1n, reveals: [], folds: new Map() },
250
- { id: "routers", name: "ROUTERS", narrowing: Slice.state({ search: some("router") }), context: 0n, reveals: [], folds: new Map() },
251
- { id: "urgent", name: "URGENT", narrowing: Slice.state({ search: some("urgent") }), context: 0n, reveals: [], folds: new Map() },
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, { data: jobs, id: "id", name: "stress", registers: {
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
- }, slice: slice, affordances: ["search", "filter"], views: views, activeView: some("spraying"), readOnly: true, footer: [{ text: East.str `${count} rows · virtualised` }] }) }));
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, templates
451
- * for whole orders and single operations, the slice's search and filter with
452
- * the work centres searched by their display text, views kept per viewer and
453
- * a footer. Both panes: the library lists the templates, the statuses — a
454
- * card dropped on an order's band sets its status — and the columns; the
455
- * inspector shows every field of the selected operation, `created_by` (no
456
- * column) read only, and the order with no customer is the batch's issue.
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", "search", "filter", "text", "Sheet.link.print", "copilot", "fill", "provider", "derive", "history", "sequence", "default", "phrase", "capacity", "propose", "proposer", "suggest", "learned", "follower", "asyncFunction", "asyncPlatform", "ready", "newGroup", "newRow", "footer", "joinery"],
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; order and operation templates; a library of the templates, the statuses (dropped on an order to set its status) and the columns; an inspector pane showing every field; the slice's search and filter over the link's display text; views kept per viewer; and a footer",
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 views = $.let(State.bind([ArrayType(Sheet.Types.View)], "sheet.workshop.views", []));
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 slice searches and filters — the work centres by their display text.
480
- const operations = $.let(orders.read().toArray((_$, o) => o.ops).flatMap((_$, ops) => ops));
481
- const slice = $.let(Slice.bind("sheet_workshop", operations, {
482
- fields: {
483
- activity: { label: "Activity", hints: ["Panel cutting", "Edge banding", "CNC routing", "Drilling", "Sanding", "Assembly", "Spray finish", "Wrapping", "Delivery"] },
484
- notes: { label: "Notes" },
485
- machines: { label: "Work centres", text: o => Sheet.link.print(o.machines) },
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, { record: orders, group: Sheet.group(WorkshopOrder, "ops", {
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() }, templates: {
726
- groups: [
727
- { key: "kitchen", name: "Kitchen order", group: "Orders",
728
- values: Sheet.patch(WorkshopOrder, { status: "PLANNED", due: none, ops: kitchen }) },
729
- { key: "wardrobe", name: "Wardrobe order", group: "Orders",
730
- values: Sheet.patch(WorkshopOrder, { status: "PLANNED", due: none, ops: wardrobe }) },
731
- { key: "vanity", name: "Vanity unit", group: "Orders",
732
- values: Sheet.patch(WorkshopOrder, { status: "PLANNED", due: none, ops: vanity }) },
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 }, slice: slice, affordances: ["search", "filter"], views: views, footer: [{ text: East.str `${operations.size()} operations` }], name: "workshop" }) }));
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
- // The steps a finishing batch starts with: the batch template's lines.
957
- const finishing = $.let([
958
- { task: "Sand", qty: none, parts: [], bookings: [] },
959
- { task: "Seal", qty: none, parts: [], bookings: [] },
960
- { task: "Spray", qty: none, parts: [], bookings: [] },
961
- ], ArrayType(BatchStep));
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
- groups: [{ key: "finishing", name: "Finishing batch", group: "Batches",
990
- values: Sheet.patch(Batch, { name: "Finishing", steps: finishing }) }],
991
- rows: [{ key: "sand", name: "Sand", group: "Steps", values: Sheet.patch(BatchStep, { task: "Sand", qty: none }) },
992
- { key: "seal", name: "Seal", group: "Steps", values: Sheet.patch(BatchStep, { task: "Seal", qty: none }) }],
993
- }, library: [Sheet.library.rows(), Sheet.library.columns()], ready: { group: readyBatch }, newRow: newStep, newGroup: newBatch }) }));
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, and the lens narrows the loaded rows. Its
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.