@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.
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
@@ -29,8 +29,8 @@ import { SheetFacetType, SheetSubRowType } from "./types.js";
29
29
  * ```tsx
30
30
  * // .tsx file with the `@jsxImportSource @elaraai/e3-ui` pragma
31
31
  * import { ArrayType, DictType, East, FloatType, IntegerType, OptionType, StringType, StructType, VariantType, none, some, variant } from "@elaraai/east";
32
- * import { Box, Reactive, UIComponentType } from "@elaraai/east-ui";
33
- * import { Record, Sheet } from "@elaraai/e3-ui";
32
+ * import { Box, Reactive, Slice, UIComponentType } from "@elaraai/east-ui";
33
+ * import { Data, Record, Sheet } from "@elaraai/e3-ui";
34
34
  * import e3 from "@elaraai/e3";
35
35
  *
36
36
  * export const BatchPart = StructType({ id: StringType, code: StringType, name: StringType, materials: ArrayType(StringType), station: OptionType(StringType) });
@@ -63,16 +63,38 @@ import { SheetFacetType, SheetSubRowType } from "./types.js";
63
63
  * ] }],
64
64
  * ]));
65
65
  * export const sheetBatchDaysPatch = e3.mutation.patch(sheetBatchDays);
66
+ * export const BatchStepTemplate = StructType({ name: StringType, group: StringType, task: StringType });
67
+ * export const sheetBatchStepTemplates = e3.record("sheet_batch_step_templates", DictType(StringType, BatchStepTemplate), new Map([
68
+ * ["sand", { name: "Sand", group: "Steps", task: "Sand" }],
69
+ * ["seal", { name: "Seal", group: "Steps", task: "Seal" }],
70
+ * ]));
71
+ * export const sheetBatchStepTemplatesByGroup = e3.recordIndex("sheet_batch_step_templates_by_group", sheetBatchStepTemplates, { on: ["group"] });
72
+ * export const BatchTemplate = StructType({ name: StringType, group: StringType, batch: StringType, steps: ArrayType(BatchStep) });
73
+ * export const sheetBatchTemplates = e3.record("sheet_batch_templates", DictType(StringType, BatchTemplate), new Map([
74
+ * ["finishing", { name: "Finishing batch", group: "Batches", batch: "Finishing", steps: [
75
+ * { task: "Sand", qty: none, parts: [], bookings: [] },
76
+ * { task: "Seal", qty: none, parts: [], bookings: [] },
77
+ * { task: "Spray", qty: none, parts: [], bookings: [] },
78
+ * ] }],
79
+ * ]));
80
+ * export const sheetBatchTemplatesByGroup = e3.recordIndex("sheet_batch_templates_by_group", sheetBatchTemplates, { on: ["group"] });
66
81
  *
67
82
  * const sheet = East.function([], UIComponentType, (_$) => (
68
83
  * <Reactive>{$ => {
69
84
  * const days = $.let(Record.bind(sheetBatchDays, [sheetBatchDaysPatch]));
70
- * // The steps a finishing batch starts with: the batch template's lines.
71
- * const finishing = $.let([
72
- * { task: "Sand", qty: none, parts: [], bookings: [] },
73
- * { task: "Seal", qty: none, parts: [], bookings: [] },
74
- * { task: "Spray", qty: none, parts: [], bookings: [] },
75
- * ], ArrayType(BatchStep));
85
+ * const stepTemplates = $.let(Data.bind(sheetBatchStepTemplates));
86
+ * const batchTemplates = $.let(Data.bind(sheetBatchTemplates));
87
+ * // One rail over the templates records, each its own source: they narrow the Rows tab's cards.
88
+ * const slice = $.let(Slice.bindRecords("sheet.batches", {
89
+ * rowTemplates: {
90
+ * source: Data.bindPaged(sheetBatchStepTemplates, { indexes: [sheetBatchStepTemplatesByGroup] }),
91
+ * label: "Step templates", fields: { group: { label: "Group", hints: ["Steps"] } },
92
+ * },
93
+ * groupTemplates: {
94
+ * source: Data.bindPaged(sheetBatchTemplates, { indexes: [sheetBatchTemplatesByGroup] }),
95
+ * label: "Batch templates", fields: { group: { label: "Group", hints: ["Batches"] } },
96
+ * },
97
+ * }));
76
98
  * // A batch needs a name before Save.
77
99
  * const readyBatch = $.const(East.function([Sheet.Types.DraftGroup(Batch, "steps")], Sheet.Types.Readiness, ($, batch) => {
78
100
  * $.if(batch.name.hasTag("value").and(() => batch.name.unwrap("value").length().equal(0n)), $ => {
@@ -109,12 +131,13 @@ import { SheetFacetType, SheetSubRowType } from "./types.js";
109
131
  * // The sub rows show a step's parts and bookings; the inspector's form leaves them out.
110
132
  * inspector
111
133
  * fields={{ parts: Sheet.field.hidden(), bookings: Sheet.field.hidden() }}
112
- * templates={{
113
- * groups: [{ key: "finishing", name: "Finishing batch", group: "Batches",
114
- * values: Sheet.patch(Batch, { name: "Finishing", steps: finishing }) }],
115
- * rows: [{ key: "sand", name: "Sand", group: "Steps", values: Sheet.patch(BatchStep, { task: "Sand", qty: none }) },
116
- * { key: "seal", name: "Seal", group: "Steps", values: Sheet.patch(BatchStep, { task: "Seal", qty: none }) }],
117
- * }}
134
+ * slice={{ slice }}
135
+ * templates={[
136
+ * Sheet.templates(stepTemplates.read(), { name: t => t.name, group: t => some(t.group),
137
+ * values: t => Sheet.patch(BatchStep, { task: t.task, qty: none }), source: "rowTemplates" }),
138
+ * Sheet.templates(batchTemplates.read(), { name: t => t.name, group: t => some(t.group),
139
+ * values: t => Sheet.patch(Batch, { name: t.batch, steps: t.steps }), source: "groupTemplates" }),
140
+ * ]}
118
141
  * library={[Sheet.library.rows(), Sheet.library.columns()]}
119
142
  * ready={{ group: readyBatch }}
120
143
  * newRow={newStep}
@@ -159,8 +182,8 @@ function textOrBlank(v) {
159
182
  * ```tsx
160
183
  * // .tsx file with the `@jsxImportSource @elaraai/e3-ui` pragma
161
184
  * import { ArrayType, DictType, East, FloatType, IntegerType, OptionType, StringType, StructType, VariantType, none, some, variant } from "@elaraai/east";
162
- * import { Box, Reactive, UIComponentType } from "@elaraai/east-ui";
163
- * import { Record, Sheet } from "@elaraai/e3-ui";
185
+ * import { Box, Reactive, Slice, UIComponentType } from "@elaraai/east-ui";
186
+ * import { Data, Record, Sheet } from "@elaraai/e3-ui";
164
187
  * import e3 from "@elaraai/e3";
165
188
  *
166
189
  * export const BatchPart = StructType({ id: StringType, code: StringType, name: StringType, materials: ArrayType(StringType), station: OptionType(StringType) });
@@ -193,16 +216,38 @@ function textOrBlank(v) {
193
216
  * ] }],
194
217
  * ]));
195
218
  * export const sheetBatchDaysPatch = e3.mutation.patch(sheetBatchDays);
219
+ * export const BatchStepTemplate = StructType({ name: StringType, group: StringType, task: StringType });
220
+ * export const sheetBatchStepTemplates = e3.record("sheet_batch_step_templates", DictType(StringType, BatchStepTemplate), new Map([
221
+ * ["sand", { name: "Sand", group: "Steps", task: "Sand" }],
222
+ * ["seal", { name: "Seal", group: "Steps", task: "Seal" }],
223
+ * ]));
224
+ * export const sheetBatchStepTemplatesByGroup = e3.recordIndex("sheet_batch_step_templates_by_group", sheetBatchStepTemplates, { on: ["group"] });
225
+ * export const BatchTemplate = StructType({ name: StringType, group: StringType, batch: StringType, steps: ArrayType(BatchStep) });
226
+ * export const sheetBatchTemplates = e3.record("sheet_batch_templates", DictType(StringType, BatchTemplate), new Map([
227
+ * ["finishing", { name: "Finishing batch", group: "Batches", batch: "Finishing", steps: [
228
+ * { task: "Sand", qty: none, parts: [], bookings: [] },
229
+ * { task: "Seal", qty: none, parts: [], bookings: [] },
230
+ * { task: "Spray", qty: none, parts: [], bookings: [] },
231
+ * ] }],
232
+ * ]));
233
+ * export const sheetBatchTemplatesByGroup = e3.recordIndex("sheet_batch_templates_by_group", sheetBatchTemplates, { on: ["group"] });
196
234
  *
197
235
  * const sheet = East.function([], UIComponentType, (_$) => (
198
236
  * <Reactive>{$ => {
199
237
  * const days = $.let(Record.bind(sheetBatchDays, [sheetBatchDaysPatch]));
200
- * // The steps a finishing batch starts with: the batch template's lines.
201
- * const finishing = $.let([
202
- * { task: "Sand", qty: none, parts: [], bookings: [] },
203
- * { task: "Seal", qty: none, parts: [], bookings: [] },
204
- * { task: "Spray", qty: none, parts: [], bookings: [] },
205
- * ], ArrayType(BatchStep));
238
+ * const stepTemplates = $.let(Data.bind(sheetBatchStepTemplates));
239
+ * const batchTemplates = $.let(Data.bind(sheetBatchTemplates));
240
+ * // One rail over the templates records, each its own source: they narrow the Rows tab's cards.
241
+ * const slice = $.let(Slice.bindRecords("sheet.batches", {
242
+ * rowTemplates: {
243
+ * source: Data.bindPaged(sheetBatchStepTemplates, { indexes: [sheetBatchStepTemplatesByGroup] }),
244
+ * label: "Step templates", fields: { group: { label: "Group", hints: ["Steps"] } },
245
+ * },
246
+ * groupTemplates: {
247
+ * source: Data.bindPaged(sheetBatchTemplates, { indexes: [sheetBatchTemplatesByGroup] }),
248
+ * label: "Batch templates", fields: { group: { label: "Group", hints: ["Batches"] } },
249
+ * },
250
+ * }));
206
251
  * // A batch needs a name before Save.
207
252
  * const readyBatch = $.const(East.function([Sheet.Types.DraftGroup(Batch, "steps")], Sheet.Types.Readiness, ($, batch) => {
208
253
  * $.if(batch.name.hasTag("value").and(() => batch.name.unwrap("value").length().equal(0n)), $ => {
@@ -239,12 +284,13 @@ function textOrBlank(v) {
239
284
  * // The sub rows show a step's parts and bookings; the inspector's form leaves them out.
240
285
  * inspector
241
286
  * fields={{ parts: Sheet.field.hidden(), bookings: Sheet.field.hidden() }}
242
- * templates={{
243
- * groups: [{ key: "finishing", name: "Finishing batch", group: "Batches",
244
- * values: Sheet.patch(Batch, { name: "Finishing", steps: finishing }) }],
245
- * rows: [{ key: "sand", name: "Sand", group: "Steps", values: Sheet.patch(BatchStep, { task: "Sand", qty: none }) },
246
- * { key: "seal", name: "Seal", group: "Steps", values: Sheet.patch(BatchStep, { task: "Seal", qty: none }) }],
247
- * }}
287
+ * slice={{ slice }}
288
+ * templates={[
289
+ * Sheet.templates(stepTemplates.read(), { name: t => t.name, group: t => some(t.group),
290
+ * values: t => Sheet.patch(BatchStep, { task: t.task, qty: none }), source: "rowTemplates" }),
291
+ * Sheet.templates(batchTemplates.read(), { name: t => t.name, group: t => some(t.group),
292
+ * values: t => Sheet.patch(Batch, { name: t.batch, steps: t.steps }), source: "groupTemplates" }),
293
+ * ]}
248
294
  * library={[Sheet.library.rows(), Sheet.library.columns()]}
249
295
  * ready={{ group: readyBatch }}
250
296
  * newRow={newStep}
@@ -1 +1 @@
1
- {"version":3,"file":"sub-rows.js","sourceRoot":"","sources":["../../../src/sheet/sub-rows.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sub-rows.js","sourceRoot":"","sources":["../../../src/sheet/sub-rows.ts"],"names":[],"mappings":"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"}
@@ -3,51 +3,109 @@
3
3
  * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
4
  */
5
5
  /**
6
- * `<Sheet>`'s templates (#1183, `Sheet Builder Spec.md` §4.2, SB9): the
7
- * Rows tab's cards. A row template is over the row type (a grouped sheet's
8
- * line type), a group template over the group type with its lines. Each is
9
- * checked against its type, and each carries a seed built by the code that
10
- * builds `newRow`'s and `newGroup`'s: the constructor's defaults first, the
11
- * template's set fields over them. The cells its card shows are the
12
- * template's own fields, through the columns' projection.
6
+ * `<Sheet>`'s templates (#1183, #1345, `Sheet Builder Spec.md` §4.2, SB9):
7
+ * the Rows tab's cards. Templates are records (#1340): `Sheet.templates(rows,
8
+ * { name, group?, values, source })` reads one templates record — its rows the
9
+ * templates, its keys theirs — and names the source of the sheet's
10
+ * `Slice.bindRecords` that narrows the Rows tab's cards of it. A grouped
11
+ * sheet's row templates and group templates are two records, each its own
12
+ * source.
13
+ *
14
+ * A template is a row template — over the row type, a grouped sheet's line
15
+ * type — or a group template, over the group type with its lines, as its
16
+ * `values` patch's type says, as an author's tab's `drop` does. Each carries
17
+ * a seed built by the code that builds `newRow`'s and `newGroup`'s: the
18
+ * constructor's defaults first, the template's set fields over them. The
19
+ * cells its card shows are the template's own fields, through the columns'
20
+ * projection.
13
21
  *
14
22
  * @packageDocumentation
15
23
  */
16
- import { ArrayType, DictType, FunctionType, OptionType, StringType, StructType, VariantType, type ExprType, type SubtypeExprOrValue } from "@elaraai/east";
24
+ import { ArrayType, DictType, FunctionType, OptionType, StringType, StructType, VariantType, type EastType, type ExprType, type SubtypeExprOrValue } from "@elaraai/east";
17
25
  import { type SheetPatchOf } from "./types.js";
18
26
  import { type SheetBridge } from "./bridge.js";
27
+ /** Identifies a templates list, as `Sheet.templates` declares one. */
28
+ export declare const SHEET_TEMPLATES: unique symbol;
19
29
  /**
20
- * One card of the library's Rows tab: a preset a planner drops into the sheet.
30
+ * The accessors over one row of a templates record, each given the row and
31
+ * its key — `Sheet.templates(rows, { name, group?, values, source })`.
21
32
  *
22
- * @typeParam R - The type it sets: the row type (a grouped sheet's line type), or the group type
33
+ * @typeParam R - The templates record's row type
34
+ * @typeParam P - The patch `values` returns: `Sheet.Types.Patch` of the row type (a grouped sheet's line type), or of the group type
23
35
  */
24
- export interface SheetTemplate<R extends StructType> {
25
- /** Its key — unique among the sheet's templates, rows and groups alike. */
26
- key: string;
36
+ export interface SheetTemplatesConfig<R extends EastType, P extends EastType> {
27
37
  /** The card's name. */
28
- name: string;
29
- /** The Rows tab's group the card sits under. */
30
- group?: string;
31
- /** The fields it sets — `Sheet.patch(R, { … })`. A field it leaves unset takes `newRow`'s (or `newGroup`'s) default, or starts missing. */
32
- values: SubtypeExprOrValue<SheetPatchOf<R>>;
38
+ name: (row: ExprType<R>, key: ExprType<StringType>) => SubtypeExprOrValue<StringType>;
39
+ /** The Rows tab's group the card sits under; none, it sits under no group. */
40
+ group?: (row: ExprType<R>, key: ExprType<StringType>) => SubtypeExprOrValue<OptionType<StringType>>;
41
+ /**
42
+ * The fields the template sets — `Sheet.patch(RowType, …)` for a row
43
+ * template (a grouped sheet's line type), `Sheet.patch(GroupType, …)` for
44
+ * a group template with its lines. A field it leaves unset takes
45
+ * `newRow`'s (or `newGroup`'s) default, or starts missing.
46
+ */
47
+ values: (row: ExprType<R>, key: ExprType<StringType>) => ExprType<P>;
48
+ /**
49
+ * The source of the sheet's `Slice.bindRecords` whose shown keys narrow
50
+ * these cards: the templates record's own source, its keys these
51
+ * templates' keys. A templates list must name one.
52
+ */
53
+ source?: string;
33
54
  }
34
55
  /**
35
- * The sheet's templates.
56
+ * One templates list — what `Sheet.templates` returns, and `<Sheet
57
+ * templates>` takes, alone or several in an array.
58
+ *
59
+ * @typeParam P - The patch its `values` returns
60
+ */
61
+ export interface SheetTemplates<P extends EastType = EastType> {
62
+ /** Identifies the declaration. */
63
+ readonly [SHEET_TEMPLATES]: true;
64
+ /** The templates record's rows, keyed by String: its `read()`. */
65
+ readonly rows: ExprType<DictType<StringType, EastType>>;
66
+ /** The accessors, read once when the sheet is built. */
67
+ readonly config: SheetTemplatesConfig<EastType, P>;
68
+ /** The source it names, if any. */
69
+ readonly source: string | undefined;
70
+ }
71
+ /**
72
+ * What `<Sheet templates>` takes: one templates list, or several — a grouped
73
+ * sheet's row templates and group templates are two.
36
74
  *
37
75
  * @typeParam L - The row type (a grouped sheet's line type)
38
76
  * @typeParam G - The group type, on a grouped sheet
39
77
  */
40
- export interface SheetTemplatesInput<L extends StructType, G extends StructType = never> {
41
- /** Row templates — on a grouped sheet, lines dropped into a group. */
42
- rows?: SheetTemplate<L>[];
43
- /** Group templates, each with its lines — a grouped sheet's only. */
44
- groups?: [G] extends [never] ? never : SheetTemplate<G>[];
45
- }
78
+ export type SheetTemplatesProp<L extends StructType, G extends StructType = never> = SheetTemplates<SheetPatchOf<L>> | ([G] extends [never] ? never : SheetTemplates<SheetPatchOf<G>>) | readonly (SheetTemplates<SheetPatchOf<L>> | ([G] extends [never] ? never : SheetTemplates<SheetPatchOf<G>>))[];
79
+ /**
80
+ * Reads a templates record — `Sheet.templates(rows, { name, group?, values,
81
+ * source })`, usually over a bound record's `read()`: one card per row, in
82
+ * the record's key order, its key the row's key. `source` names the sheet's
83
+ * `Slice.bindRecords` source over the same record, which narrows these cards
84
+ * as it narrows anything of that record's (#1340, #1345). Each accessor is
85
+ * reified once, when the sheet is built.
86
+ *
87
+ * @typeParam R - The templates record's row type
88
+ * @typeParam P - The patch `values` returns
89
+ * @param rows - The templates record's rows, keyed by String
90
+ * @param config - The accessors, and the source that narrows the cards
91
+ * @returns The templates list
92
+ * @throws {Error} When the rows are not a Dict keyed by String
93
+ */
94
+ export declare function sheetTemplates<R extends EastType, P extends EastType>(rows: SubtypeExprOrValue<DictType<StringType, R>>, config: SheetTemplatesConfig<R, P>): SheetTemplates<P>;
95
+ /**
96
+ * Whether a value is a templates list `Sheet.templates` declared.
97
+ *
98
+ * @param input - Anything `templates` was given
99
+ * @returns Whether it is one
100
+ * @internal
101
+ */
102
+ export declare function isSheetTemplates(input: unknown): input is SheetTemplates;
46
103
  /**
47
104
  * One template on the wire: its card, and its seed — the draft and the row it
48
105
  * drops, as `newRow`'s and `newGroup`'s constructors make them.
49
106
  *
50
- * @property key - The template's key
107
+ * @property key - The template's key: its row's key in its templates record
108
+ * @property source - The source of the sheet's slice its list follows: its key, one of that source's keys
51
109
  * @property name - The card's name
52
110
  * @property group - The Rows tab's group the card sits under
53
111
  * @property cells - What the card shows: the template's own fields, through the columns' projection
@@ -55,6 +113,7 @@ export interface SheetTemplatesInput<L extends StructType, G extends StructType
55
113
  */
56
114
  export declare const SheetTemplateWireType: StructType<{
57
115
  readonly key: StringType;
116
+ readonly source: StringType;
58
117
  readonly name: StringType;
59
118
  readonly group: OptionType<StringType>;
60
119
  readonly cells: DictType<StringType, VariantType<{
@@ -144,18 +203,23 @@ export interface SheetConstructors {
144
203
  /** `newGroup`: the new group's context to its defaults. */
145
204
  newGroup?: unknown;
146
205
  }
206
+ /** A templates list, its source checked against the sheet's slice. */
207
+ export interface SheetTemplatesList {
208
+ /** The list. */
209
+ templates: SheetTemplates;
210
+ /** The source it follows, one of the slice's. */
211
+ source: string;
212
+ }
147
213
  /**
148
- * Builds the sheet's templates on the wire (SB9).
214
+ * Builds the sheet's templates on the wire (SB9): each list's, in the order
215
+ * the lists are given, each in its record's key order.
149
216
  *
150
- * @param input - The templates, by kind
217
+ * @param lists - The templates lists, each with the source it follows, checked against the sheet's slice
151
218
  * @param bridge - The sheet's bridge, as its root compiled it
152
219
  * @param constructors - The sheet's `newRow` and `newGroup`, as its root checked them
153
- * @returns The templates on the wire, rows first, each in the order declared
154
- * @throws Error naming the template: a template over another type, a key that repeats, or a group template on a flat sheet
220
+ * @returns The templates on the wire
221
+ * @throws Error naming the source: a list whose `values` set neither the row type (a grouped sheet's line type) nor the group type
155
222
  * @internal
156
223
  */
157
- export declare function buildTemplates(input: {
158
- rows?: SheetTemplate<StructType>[];
159
- groups?: SheetTemplate<StructType>[];
160
- } | undefined, bridge: SheetBridge, constructors: SheetConstructors): ExprType<ArrayType<SheetTemplateWireType>>;
224
+ export declare function buildTemplates(lists: readonly SheetTemplatesList[], bridge: SheetBridge, constructors: SheetConstructors): ExprType<ArrayType<SheetTemplateWireType>>;
161
225
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/sheet/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EACH,SAAS,EACT,QAAQ,EAGR,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EAMX,KAAK,QAAQ,EACb,KAAK,kBAAkB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAIjF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,UAAU;IAC/C,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2IAA2I;IAC3I,MAAM,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,GAAG,KAAK;IACnF,sEAAsE;IACtE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;CAC7D;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAShC,CAAC;AAEH,uDAAuD;AACvD,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC;AAEjE,+FAA+F;AAC/F,MAAM,WAAW,iBAAiB;IAC9B,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAwCD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC1B,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAA;CAAE,GAAG,SAAS,EAC/F,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,iBAAiB,GAChC,QAAQ,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,CAqC5C"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/sheet/templates.ts"],"names":[],"mappings":"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"}
@@ -3,27 +3,71 @@
3
3
  * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
4
  */
5
5
  /**
6
- * `<Sheet>`'s templates (#1183, `Sheet Builder Spec.md` §4.2, SB9): the
7
- * Rows tab's cards. A row template is over the row type (a grouped sheet's
8
- * line type), a group template over the group type with its lines. Each is
9
- * checked against its type, and each carries a seed built by the code that
10
- * builds `newRow`'s and `newGroup`'s: the constructor's defaults first, the
11
- * template's set fields over them. The cells its card shows are the
12
- * template's own fields, through the columns' projection.
6
+ * `<Sheet>`'s templates (#1183, #1345, `Sheet Builder Spec.md` §4.2, SB9):
7
+ * the Rows tab's cards. Templates are records (#1340): `Sheet.templates(rows,
8
+ * { name, group?, values, source })` reads one templates record — its rows the
9
+ * templates, its keys theirs — and names the source of the sheet's
10
+ * `Slice.bindRecords` that narrows the Rows tab's cards of it. A grouped
11
+ * sheet's row templates and group templates are two records, each its own
12
+ * source.
13
+ *
14
+ * A template is a row template — over the row type, a grouped sheet's line
15
+ * type — or a group template, over the group type with its lines, as its
16
+ * `values` patch's type says, as an author's tab's `drop` does. Each carries
17
+ * a seed built by the code that builds `newRow`'s and `newGroup`'s: the
18
+ * constructor's defaults first, the template's set fields over them. The
19
+ * cells its card shows are the template's own fields, through the columns'
20
+ * projection.
13
21
  *
14
22
  * @packageDocumentation
15
23
  */
16
- import { ArrayType, DictType, East, Expr, FunctionType, OptionType, StringType, StructType, VariantType, isTypeEqual, none, some, variant, } from "@elaraai/east";
24
+ import { ArrayType, DictType, East, Expr, FunctionType, OptionType, StringType, StructType, VariantType, isTypeEqual, none, printType, variant, } from "@elaraai/east";
17
25
  import { SheetCellType, SheetPatchTypeFor } from "./types.js";
18
26
  import { SheetNewGroupType, SheetNewRowType } from "./transactions.js";
19
27
  import { SheetSeedType } from "./editing-types.js";
20
28
  import { buildSheetSeed } from "./seed-bridge.js";
21
29
  import { buildPatchCells } from "./bridge.js";
30
+ /** Identifies a templates list, as `Sheet.templates` declares one. */
31
+ export const SHEET_TEMPLATES = Symbol("Sheet.templates");
32
+ /**
33
+ * Reads a templates record — `Sheet.templates(rows, { name, group?, values,
34
+ * source })`, usually over a bound record's `read()`: one card per row, in
35
+ * the record's key order, its key the row's key. `source` names the sheet's
36
+ * `Slice.bindRecords` source over the same record, which narrows these cards
37
+ * as it narrows anything of that record's (#1340, #1345). Each accessor is
38
+ * reified once, when the sheet is built.
39
+ *
40
+ * @typeParam R - The templates record's row type
41
+ * @typeParam P - The patch `values` returns
42
+ * @param rows - The templates record's rows, keyed by String
43
+ * @param config - The accessors, and the source that narrows the cards
44
+ * @returns The templates list
45
+ * @throws {Error} When the rows are not a Dict keyed by String
46
+ */
47
+ export function sheetTemplates(rows, config) {
48
+ const source = East.value(rows);
49
+ const type = Expr.type(source);
50
+ if (type.type !== "Dict" || type.key.type !== "String") {
51
+ throw new Error(`Sheet.templates: rows must be a Dict keyed by String — a templates record's read(), its keys the templates' keys — and these are ${printType(type)}`);
52
+ }
53
+ return { [SHEET_TEMPLATES]: true, rows: source, config: config, source: config.source };
54
+ }
55
+ /**
56
+ * Whether a value is a templates list `Sheet.templates` declared.
57
+ *
58
+ * @param input - Anything `templates` was given
59
+ * @returns Whether it is one
60
+ * @internal
61
+ */
62
+ export function isSheetTemplates(input) {
63
+ return typeof input === "object" && input !== null && input[SHEET_TEMPLATES] === true;
64
+ }
22
65
  /**
23
66
  * One template on the wire: its card, and its seed — the draft and the row it
24
67
  * drops, as `newRow`'s and `newGroup`'s constructors make them.
25
68
  *
26
- * @property key - The template's key
69
+ * @property key - The template's key: its row's key in its templates record
70
+ * @property source - The source of the sheet's slice its list follows: its key, one of that source's keys
27
71
  * @property name - The card's name
28
72
  * @property group - The Rows tab's group the card sits under
29
73
  * @property cells - What the card shows: the template's own fields, through the columns' projection
@@ -31,6 +75,7 @@ import { buildPatchCells } from "./bridge.js";
31
75
  */
32
76
  export const SheetTemplateWireType = StructType({
33
77
  key: StringType,
78
+ source: StringType,
34
79
  name: StringType,
35
80
  group: OptionType(StringType),
36
81
  cells: DictType(StringType, SheetCellType),
@@ -61,62 +106,61 @@ function overDefaults(contextType, rowType, values, defaults) {
61
106
  return Object.fromEntries(fields.map((f) => [f, set[f].hasTag("some").ifElse(() => set[f], () => base[f])]));
62
107
  });
63
108
  }
64
- /** A template's values, checked against the type it must set. */
65
- function valuesOf(template, rowType, what) {
66
- const values = East.value(template.values);
67
- if (!isTypeEqual(Expr.type(values), SheetPatchTypeFor(rowType))) {
68
- throw new Error(what === "row"
69
- ? `Sheet: row template "${template.key}" was built over another type — build its values with Sheet.patch(RowType, …) over the sheet's row type (a grouped sheet: its line type)`
70
- : `Sheet: group template "${template.key}" was built over another type — build its values with Sheet.patch(GroupType, …) over the sheet's group type`);
109
+ /**
110
+ * One templates list on the wire: a card per row of its record, in key order,
111
+ * each a row template or a group template as the list's `values` say.
112
+ */
113
+ function buildList(list, bridge, constructors) {
114
+ const { templates, source } = list;
115
+ const rowsType = Expr.type(templates.rows);
116
+ const rowType = rowsType.value;
117
+ const cfg = templates.config;
118
+ // The accessors, reified once: what each row's card is made by.
119
+ const values = East.function([rowType, StringType], undefined, (_$, row, key) => cfg.values(row, key));
120
+ const valuesType = Expr.type(values).output;
121
+ const groupHalf = bridge.group;
122
+ const kind = isTypeEqual(valuesType, SheetPatchTypeFor(bridge.lineType)) ? "row"
123
+ : groupHalf !== undefined && isTypeEqual(valuesType, SheetPatchTypeFor(groupHalf.groupType)) ? "group" : undefined;
124
+ if (kind === undefined) {
125
+ throw new Error(`Sheet: the templates of source '${source}' set ${printType(valuesType)} — build their values with Sheet.patch(RowType, …) over the sheet's row type (a grouped sheet: its line type)${groupHalf !== undefined ? ", or Sheet.patch(GroupType, …) for group templates" : ""}`);
71
126
  }
72
- return values;
127
+ // A row template's cells and seed are a row's; a group template's, its group's with its lines.
128
+ const rowKind = kind === "row";
129
+ const patchType = SheetPatchTypeFor(rowKind ? bridge.lineType : groupHalf.groupType);
130
+ const cellsOf = rowKind ? bridge.seedCells : buildPatchCells(groupHalf.groupType, groupHalf.cellMetas, {}, false);
131
+ const seedOf = (set) => (rowKind
132
+ ? variant("row", buildSheetSeed(SheetNewRowType, bridge.lineType, overDefaults(SheetNewRowType, bridge.lineType, set, constructors.newRow), bridge.seedCells))
133
+ : variant("group", buildSheetSeed(SheetNewGroupType, groupHalf.groupType, overDefaults(SheetNewGroupType, groupHalf.groupType, set, constructors.newGroup), cellsOf, { field: groupHalf.linesField, project: bridge.projectRow })));
134
+ const named = East.function([rowType, StringType], StringType, (_$, row, key) => cfg.name(row, key));
135
+ const grouped = East.function([rowType, StringType], OptionType(StringType), (_$, row, key) => cfg.group === undefined ? East.value(none, OptionType(StringType)) : cfg.group(row, key));
136
+ const describe = East.function([rowType, StringType], SheetTemplateWireType, ($, row, key) => {
137
+ const valuesOf = $.const(values);
138
+ const set = $.const(valuesOf(row, key), patchType);
139
+ const nameOf = $.const(named);
140
+ const groupOf = $.const(grouped);
141
+ const cells = $.const(cellsOf);
142
+ return { key, source, name: nameOf(row, key), group: groupOf(row, key), cells: cells(set), seed: seedOf(set) };
143
+ });
144
+ return templates.rows.toArray(($, row, key) => {
145
+ const card = $.const(describe);
146
+ return card(row, key);
147
+ });
73
148
  }
74
149
  /**
75
- * Builds the sheet's templates on the wire (SB9).
150
+ * Builds the sheet's templates on the wire (SB9): each list's, in the order
151
+ * the lists are given, each in its record's key order.
76
152
  *
77
- * @param input - The templates, by kind
153
+ * @param lists - The templates lists, each with the source it follows, checked against the sheet's slice
78
154
  * @param bridge - The sheet's bridge, as its root compiled it
79
155
  * @param constructors - The sheet's `newRow` and `newGroup`, as its root checked them
80
- * @returns The templates on the wire, rows first, each in the order declared
81
- * @throws Error naming the template: a template over another type, a key that repeats, or a group template on a flat sheet
156
+ * @returns The templates on the wire
157
+ * @throws Error naming the source: a list whose `values` set neither the row type (a grouped sheet's line type) nor the group type
82
158
  * @internal
83
159
  */
84
- export function buildTemplates(input, bridge, constructors) {
85
- const rows = input?.rows ?? [];
86
- const groups = input?.groups ?? [];
87
- const seen = new Set();
88
- for (const t of [...rows, ...groups]) {
89
- if (seen.has(t.key))
90
- throw new Error(`Sheet: template key "${t.key}" repeats — each template's key is unique among the sheet's templates, rows and groups alike`);
91
- seen.add(t.key);
92
- }
93
- const groupHalf = bridge.group;
94
- if (groups.length > 0 && groupHalf === undefined) {
95
- throw new Error("Sheet: `templates.groups` needs a grouped sheet — declare `group={Sheet.group(GroupType, \"lines\", …)}`, or drop the group templates");
96
- }
97
- const wires = [];
98
- for (const t of rows) {
99
- const values = valuesOf(t, bridge.lineType, "row");
100
- const seed = buildSheetSeed(SheetNewRowType, bridge.lineType, overDefaults(SheetNewRowType, bridge.lineType, values, constructors.newRow), bridge.seedCells);
101
- wires.push(East.value({
102
- key: t.key, name: t.name, group: t.group === undefined ? none : some(t.group),
103
- cells: bridge.seedCells(values),
104
- seed: variant("row", seed),
105
- }, SheetTemplateWireType));
106
- }
107
- if (groupHalf !== undefined) {
108
- const groupType = groupHalf.groupType;
109
- const groupCells = buildPatchCells(groupType, groupHalf.cellMetas, {}, false);
110
- for (const t of groups) {
111
- const values = valuesOf(t, groupType, "group");
112
- const seed = buildSheetSeed(SheetNewGroupType, groupType, overDefaults(SheetNewGroupType, groupType, values, constructors.newGroup), groupCells, { field: groupHalf.linesField, project: bridge.projectRow });
113
- wires.push(East.value({
114
- key: t.key, name: t.name, group: t.group === undefined ? none : some(t.group),
115
- cells: groupCells(values),
116
- seed: variant("group", seed),
117
- }, SheetTemplateWireType));
118
- }
119
- }
120
- return East.value(wires, ArrayType(SheetTemplateWireType));
160
+ export function buildTemplates(lists, bridge, constructors) {
161
+ let out = East.value([], ArrayType(SheetTemplateWireType));
162
+ for (const list of lists)
163
+ out = out.concat(buildList(list, bridge, constructors));
164
+ return out;
121
165
  }
122
166
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/sheet/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/sheet/templates.ts"],"names":[],"mappings":"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"}