@elaraai/e3-ui 1.0.86 → 1.0.87

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 (385) hide show
  1. package/dist/src/bind/data-indexed.d.ts +159 -0
  2. package/dist/src/bind/data-indexed.d.ts.map +1 -0
  3. package/dist/src/bind/data-indexed.js +105 -0
  4. package/dist/src/bind/data-indexed.js.map +1 -0
  5. package/dist/src/bind/data.d.ts +5 -3
  6. package/dist/src/bind/data.d.ts.map +1 -1
  7. package/dist/src/bind/data.js +6 -0
  8. package/dist/src/bind/data.js.map +1 -1
  9. package/dist/src/bind/record.d.ts +34 -23
  10. package/dist/src/bind/record.d.ts.map +1 -1
  11. package/dist/src/bind/record.js +46 -19
  12. package/dist/src/bind/record.js.map +1 -1
  13. package/dist/src/calendar/index.d.ts +2923 -0
  14. package/dist/src/calendar/index.d.ts.map +1 -0
  15. package/dist/src/calendar/index.js +135 -0
  16. package/dist/src/calendar/index.js.map +1 -0
  17. package/dist/src/decision/queue.d.ts +3 -3
  18. package/dist/src/decision/queue.d.ts.map +1 -1
  19. package/dist/src/decision/queue.js +2 -2
  20. package/dist/src/decision/queue.js.map +1 -1
  21. package/dist/src/decision/types.d.ts +4 -0
  22. package/dist/src/decision/types.d.ts.map +1 -1
  23. package/dist/src/decision/types.js +4 -0
  24. package/dist/src/decision/types.js.map +1 -1
  25. package/dist/src/flowchart/canvas.d.ts +114 -0
  26. package/dist/src/flowchart/canvas.d.ts.map +1 -0
  27. package/dist/src/flowchart/canvas.js +84 -0
  28. package/dist/src/flowchart/canvas.js.map +1 -0
  29. package/dist/src/flowchart/flowchart.d.ts +79 -0
  30. package/dist/src/flowchart/flowchart.d.ts.map +1 -0
  31. package/dist/src/flowchart/flowchart.js +9 -0
  32. package/dist/src/flowchart/flowchart.js.map +1 -0
  33. package/dist/src/flowchart/index.d.ts +305 -0
  34. package/dist/src/flowchart/index.d.ts.map +1 -0
  35. package/dist/src/flowchart/index.js +267 -0
  36. package/dist/src/flowchart/index.js.map +1 -0
  37. package/dist/src/flowchart/library.d.ts +720 -0
  38. package/dist/src/flowchart/library.d.ts.map +1 -0
  39. package/dist/src/flowchart/library.js +611 -0
  40. package/dist/src/flowchart/library.js.map +1 -0
  41. package/dist/src/flowchart/over.d.ts +234 -0
  42. package/dist/src/flowchart/over.d.ts.map +1 -0
  43. package/dist/src/flowchart/over.js +220 -0
  44. package/dist/src/flowchart/over.js.map +1 -0
  45. package/dist/src/flowchart/patch.d.ts +64 -0
  46. package/dist/src/flowchart/patch.d.ts.map +1 -0
  47. package/dist/src/flowchart/patch.js +67 -0
  48. package/dist/src/flowchart/patch.js.map +1 -0
  49. package/dist/src/flowchart/payload.d.ts +8220 -0
  50. package/dist/src/flowchart/payload.d.ts.map +1 -0
  51. package/dist/src/flowchart/payload.js +521 -0
  52. package/dist/src/flowchart/payload.js.map +1 -0
  53. package/dist/src/flowchart/types.d.ts +393 -0
  54. package/dist/src/flowchart/types.d.ts.map +1 -0
  55. package/dist/src/flowchart/types.js +216 -0
  56. package/dist/src/flowchart/types.js.map +1 -0
  57. package/dist/src/flowchart/values.d.ts +267 -0
  58. package/dist/src/flowchart/values.d.ts.map +1 -0
  59. package/dist/src/flowchart/values.js +216 -0
  60. package/dist/src/flowchart/values.js.map +1 -0
  61. package/dist/src/flowchart/window.d.ts +521 -0
  62. package/dist/src/flowchart/window.d.ts.map +1 -0
  63. package/dist/src/flowchart/window.js +69 -0
  64. package/dist/src/flowchart/window.js.map +1 -0
  65. package/dist/src/index.d.ts +25 -1
  66. package/dist/src/index.d.ts.map +1 -1
  67. package/dist/src/index.js +48 -1
  68. package/dist/src/index.js.map +1 -1
  69. package/dist/src/internal.d.ts +35 -3
  70. package/dist/src/internal.d.ts.map +1 -1
  71. package/dist/src/internal.js +72 -3
  72. package/dist/src/internal.js.map +1 -1
  73. package/dist/src/plan/assemble.d.ts +2224 -0
  74. package/dist/src/plan/assemble.d.ts.map +1 -0
  75. package/dist/src/plan/assemble.js +210 -0
  76. package/dist/src/plan/assemble.js.map +1 -0
  77. package/dist/src/plan/builders.d.ts +790 -0
  78. package/dist/src/plan/builders.d.ts.map +1 -0
  79. package/dist/src/plan/builders.js +749 -0
  80. package/dist/src/plan/builders.js.map +1 -0
  81. package/dist/src/plan/event-rows.d.ts +2565 -0
  82. package/dist/src/plan/event-rows.d.ts.map +1 -0
  83. package/dist/src/plan/event-rows.js +689 -0
  84. package/dist/src/plan/event-rows.js.map +1 -0
  85. package/dist/src/plan/factories.d.ts +458 -0
  86. package/dist/src/plan/factories.d.ts.map +1 -0
  87. package/dist/src/plan/factories.js +484 -0
  88. package/dist/src/plan/factories.js.map +1 -0
  89. package/dist/src/plan/index.d.ts +672 -0
  90. package/dist/src/plan/index.d.ts.map +1 -0
  91. package/dist/src/plan/index.js +532 -0
  92. package/dist/src/plan/index.js.map +1 -0
  93. package/dist/src/plan/ir.d.ts +2594 -0
  94. package/dist/src/plan/ir.d.ts.map +1 -0
  95. package/dist/src/plan/ir.js +78 -0
  96. package/dist/src/plan/ir.js.map +1 -0
  97. package/dist/src/plan/library.d.ts +772 -0
  98. package/dist/src/plan/library.d.ts.map +1 -0
  99. package/dist/src/plan/library.js +424 -0
  100. package/dist/src/plan/library.js.map +1 -0
  101. package/dist/src/plan/ordered-source.d.ts +27 -0
  102. package/dist/src/plan/ordered-source.d.ts.map +1 -0
  103. package/dist/src/plan/ordered-source.js +48 -0
  104. package/dist/src/plan/ordered-source.js.map +1 -0
  105. package/dist/src/plan/over.d.ts +247 -0
  106. package/dist/src/plan/over.d.ts.map +1 -0
  107. package/dist/src/plan/over.js +266 -0
  108. package/dist/src/plan/over.js.map +1 -0
  109. package/dist/src/plan/pick.d.ts +78 -0
  110. package/dist/src/plan/pick.d.ts.map +1 -0
  111. package/dist/src/plan/pick.js +146 -0
  112. package/dist/src/plan/pick.js.map +1 -0
  113. package/dist/src/plan/plan.d.ts +11611 -0
  114. package/dist/src/plan/plan.d.ts.map +1 -0
  115. package/dist/src/plan/plan.js +428 -0
  116. package/dist/src/plan/plan.js.map +1 -0
  117. package/dist/src/plan/refs.d.ts +218 -0
  118. package/dist/src/plan/refs.d.ts.map +1 -0
  119. package/dist/src/plan/refs.js +226 -0
  120. package/dist/src/plan/refs.js.map +1 -0
  121. package/dist/src/plan/root.d.ts +290 -0
  122. package/dist/src/plan/root.d.ts.map +1 -0
  123. package/dist/src/plan/root.js +463 -0
  124. package/dist/src/plan/root.js.map +1 -0
  125. package/dist/src/plan/series.d.ts +13554 -0
  126. package/dist/src/plan/series.d.ts.map +1 -0
  127. package/dist/src/plan/series.js +1921 -0
  128. package/dist/src/plan/series.js.map +1 -0
  129. package/dist/src/plan/types.d.ts +12400 -0
  130. package/dist/src/plan/types.d.ts.map +1 -0
  131. package/dist/src/plan/types.js +1335 -0
  132. package/dist/src/plan/types.js.map +1 -0
  133. package/dist/src/roster/coverage.d.ts +240 -0
  134. package/dist/src/roster/coverage.d.ts.map +1 -0
  135. package/dist/src/roster/coverage.js +109 -0
  136. package/dist/src/roster/coverage.js.map +1 -0
  137. package/dist/src/roster/index.d.ts +4028 -0
  138. package/dist/src/roster/index.d.ts.map +1 -0
  139. package/dist/src/roster/index.js +115 -0
  140. package/dist/src/roster/index.js.map +1 -0
  141. package/dist/src/roster/library.d.ts +106 -0
  142. package/dist/src/roster/library.d.ts.map +1 -0
  143. package/dist/src/roster/library.js +78 -0
  144. package/dist/src/roster/library.js.map +1 -0
  145. package/dist/src/roster/people.d.ts +50 -0
  146. package/dist/src/roster/people.d.ts.map +1 -0
  147. package/dist/src/roster/people.js +32 -0
  148. package/dist/src/roster/people.js.map +1 -0
  149. package/dist/src/roster/rules.d.ts +275 -0
  150. package/dist/src/roster/rules.d.ts.map +1 -0
  151. package/dist/src/roster/rules.js +162 -0
  152. package/dist/src/roster/rules.js.map +1 -0
  153. package/dist/src/roster/types.d.ts +672 -0
  154. package/dist/src/roster/types.d.ts.map +1 -0
  155. package/dist/src/roster/types.js +248 -0
  156. package/dist/src/roster/types.js.map +1 -0
  157. package/dist/src/roster/visibility.d.ts +66 -0
  158. package/dist/src/roster/visibility.d.ts.map +1 -0
  159. package/dist/src/roster/visibility.js +25 -0
  160. package/dist/src/roster/visibility.js.map +1 -0
  161. package/dist/src/schedule/days.d.ts +54 -0
  162. package/dist/src/schedule/days.d.ts.map +1 -0
  163. package/dist/src/schedule/days.js +68 -0
  164. package/dist/src/schedule/days.js.map +1 -0
  165. package/dist/src/schedule/events.d.ts +433 -0
  166. package/dist/src/schedule/events.d.ts.map +1 -0
  167. package/dist/src/schedule/events.js +851 -0
  168. package/dist/src/schedule/events.js.map +1 -0
  169. package/dist/src/schedule/index.d.ts +150 -0
  170. package/dist/src/schedule/index.d.ts.map +1 -0
  171. package/dist/src/schedule/index.js +132 -0
  172. package/dist/src/schedule/index.js.map +1 -0
  173. package/dist/src/schedule/library.d.ts +70 -0
  174. package/dist/src/schedule/library.d.ts.map +1 -0
  175. package/dist/src/schedule/library.js +102 -0
  176. package/dist/src/schedule/library.js.map +1 -0
  177. package/dist/src/schedule/patch.d.ts +74 -0
  178. package/dist/src/schedule/patch.d.ts.map +1 -0
  179. package/dist/src/schedule/patch.js +68 -0
  180. package/dist/src/schedule/patch.js.map +1 -0
  181. package/dist/src/schedule/record-window.d.ts +189 -0
  182. package/dist/src/schedule/record-window.d.ts.map +1 -0
  183. package/dist/src/schedule/record-window.js +95 -0
  184. package/dist/src/schedule/record-window.js.map +1 -0
  185. package/dist/src/schedule/resources.d.ts +165 -0
  186. package/dist/src/schedule/resources.d.ts.map +1 -0
  187. package/dist/src/schedule/resources.js +234 -0
  188. package/dist/src/schedule/resources.js.map +1 -0
  189. package/dist/src/schedule/templates.d.ts +47 -0
  190. package/dist/src/schedule/templates.d.ts.map +1 -0
  191. package/dist/src/schedule/templates.js +61 -0
  192. package/dist/src/schedule/templates.js.map +1 -0
  193. package/dist/src/schedule/types.d.ts +1677 -0
  194. package/dist/src/schedule/types.d.ts.map +1 -0
  195. package/dist/src/schedule/types.js +374 -0
  196. package/dist/src/schedule/types.js.map +1 -0
  197. package/dist/src/schedule/window.d.ts +154 -0
  198. package/dist/src/schedule/window.d.ts.map +1 -0
  199. package/dist/src/schedule/window.js +363 -0
  200. package/dist/src/schedule/window.js.map +1 -0
  201. package/dist/src/sheet/bridge.d.ts +385 -0
  202. package/dist/src/sheet/bridge.d.ts.map +1 -0
  203. package/dist/src/sheet/bridge.js +809 -0
  204. package/dist/src/sheet/bridge.js.map +1 -0
  205. package/dist/src/sheet/columns.d.ts +410 -0
  206. package/dist/src/sheet/columns.d.ts.map +1 -0
  207. package/dist/src/sheet/columns.js +99 -0
  208. package/dist/src/sheet/columns.js.map +1 -0
  209. package/dist/src/sheet/context-bridge.d.ts +48 -0
  210. package/dist/src/sheet/context-bridge.d.ts.map +1 -0
  211. package/dist/src/sheet/context-bridge.js +216 -0
  212. package/dist/src/sheet/context-bridge.js.map +1 -0
  213. package/dist/src/sheet/draft-bridge.d.ts +37 -0
  214. package/dist/src/sheet/draft-bridge.d.ts.map +1 -0
  215. package/dist/src/sheet/draft-bridge.js +153 -0
  216. package/dist/src/sheet/draft-bridge.js.map +1 -0
  217. package/dist/src/sheet/drafts.d.ts +14 -0
  218. package/dist/src/sheet/drafts.d.ts.map +1 -0
  219. package/dist/src/sheet/drafts.js +14 -0
  220. package/dist/src/sheet/drafts.js.map +1 -0
  221. package/dist/src/sheet/editing-bridge.d.ts +40 -0
  222. package/dist/src/sheet/editing-bridge.d.ts.map +1 -0
  223. package/dist/src/sheet/editing-bridge.js +231 -0
  224. package/dist/src/sheet/editing-bridge.js.map +1 -0
  225. package/dist/src/sheet/editing-types.d.ts +268 -0
  226. package/dist/src/sheet/editing-types.d.ts.map +1 -0
  227. package/dist/src/sheet/editing-types.js +34 -0
  228. package/dist/src/sheet/editing-types.js.map +1 -0
  229. package/dist/src/sheet/edits.d.ts +37 -0
  230. package/dist/src/sheet/edits.d.ts.map +1 -0
  231. package/dist/src/sheet/edits.js +31 -0
  232. package/dist/src/sheet/edits.js.map +1 -0
  233. package/dist/src/sheet/fields.d.ts +693 -0
  234. package/dist/src/sheet/fields.d.ts.map +1 -0
  235. package/dist/src/sheet/fields.js +280 -0
  236. package/dist/src/sheet/fields.js.map +1 -0
  237. package/dist/src/sheet/group.d.ts +165 -0
  238. package/dist/src/sheet/group.d.ts.map +1 -0
  239. package/dist/src/sheet/group.js +52 -0
  240. package/dist/src/sheet/group.js.map +1 -0
  241. package/dist/src/sheet/index.d.ts +542 -0
  242. package/dist/src/sheet/index.d.ts.map +1 -0
  243. package/dist/src/sheet/index.js +387 -0
  244. package/dist/src/sheet/index.js.map +1 -0
  245. package/dist/src/sheet/library.d.ts +284 -0
  246. package/dist/src/sheet/library.d.ts.map +1 -0
  247. package/dist/src/sheet/library.js +259 -0
  248. package/dist/src/sheet/library.js.map +1 -0
  249. package/dist/src/sheet/link.d.ts +398 -0
  250. package/dist/src/sheet/link.d.ts.map +1 -0
  251. package/dist/src/sheet/link.js +228 -0
  252. package/dist/src/sheet/link.js.map +1 -0
  253. package/dist/src/sheet/record.d.ts +75 -0
  254. package/dist/src/sheet/record.d.ts.map +1 -0
  255. package/dist/src/sheet/record.js +128 -0
  256. package/dist/src/sheet/record.js.map +1 -0
  257. package/dist/src/sheet/registers.d.ts +681 -0
  258. package/dist/src/sheet/registers.d.ts.map +1 -0
  259. package/dist/src/sheet/registers.js +671 -0
  260. package/dist/src/sheet/registers.js.map +1 -0
  261. package/dist/src/sheet/root.d.ts +329 -0
  262. package/dist/src/sheet/root.d.ts.map +1 -0
  263. package/dist/src/sheet/root.js +511 -0
  264. package/dist/src/sheet/root.js.map +1 -0
  265. package/dist/src/sheet/seed-bridge.d.ts +14 -0
  266. package/dist/src/sheet/seed-bridge.d.ts.map +1 -0
  267. package/dist/src/sheet/seed-bridge.js +51 -0
  268. package/dist/src/sheet/seed-bridge.js.map +1 -0
  269. package/dist/src/sheet/sheet.d.ts +11819 -0
  270. package/dist/src/sheet/sheet.d.ts.map +1 -0
  271. package/dist/src/sheet/sheet.js +236 -0
  272. package/dist/src/sheet/sheet.js.map +1 -0
  273. package/dist/src/sheet/sub-rows.d.ts +299 -0
  274. package/dist/src/sheet/sub-rows.d.ts.map +1 -0
  275. package/dist/src/sheet/sub-rows.js +272 -0
  276. package/dist/src/sheet/sub-rows.js.map +1 -0
  277. package/dist/src/sheet/templates.d.ts +161 -0
  278. package/dist/src/sheet/templates.d.ts.map +1 -0
  279. package/dist/src/sheet/templates.js +122 -0
  280. package/dist/src/sheet/templates.js.map +1 -0
  281. package/dist/src/sheet/transactions.d.ts +76 -0
  282. package/dist/src/sheet/transactions.d.ts.map +1 -0
  283. package/dist/src/sheet/transactions.js +40 -0
  284. package/dist/src/sheet/transactions.js.map +1 -0
  285. package/dist/src/sheet/types.d.ts +15226 -0
  286. package/dist/src/sheet/types.d.ts.map +1 -0
  287. package/dist/src/sheet/types.js +1070 -0
  288. package/dist/src/sheet/types.js.map +1 -0
  289. package/dist/src/sheet/views.d.ts +29 -0
  290. package/dist/src/sheet/views.d.ts.map +1 -0
  291. package/dist/src/sheet/views.js +43 -0
  292. package/dist/src/sheet/views.js.map +1 -0
  293. package/dist/src/studio/component.d.ts.map +1 -1
  294. package/dist/src/studio/component.js +11 -8
  295. package/dist/src/studio/component.js.map +1 -1
  296. package/dist/src/utils/derive.d.ts +134 -8
  297. package/dist/src/utils/derive.d.ts.map +1 -1
  298. package/dist/src/utils/derive.js +409 -7
  299. package/dist/src/utils/derive.js.map +1 -1
  300. package/dist/src/utils/ordered-source.d.ts +38 -0
  301. package/dist/src/utils/ordered-source.d.ts.map +1 -0
  302. package/dist/src/utils/ordered-source.js +45 -0
  303. package/dist/src/utils/ordered-source.js.map +1 -0
  304. package/dist/src/utils/row-inspector.d.ts +36 -0
  305. package/dist/src/utils/row-inspector.d.ts.map +1 -0
  306. package/dist/src/utils/row-inspector.js +49 -0
  307. package/dist/src/utils/row-inspector.js.map +1 -0
  308. package/dist/test/bind/data/data.examples.d.ts +21 -19
  309. package/dist/test/bind/data/data.examples.d.ts.map +1 -1
  310. package/dist/test/bind/data/data.examples.js +122 -122
  311. package/dist/test/bind/data/data.examples.js.map +1 -1
  312. package/dist/test/bind/record/record.examples.d.ts.map +1 -1
  313. package/dist/test/bind/record/record.examples.js +9 -9
  314. package/dist/test/bind/record/record.examples.js.map +1 -1
  315. package/dist/test/calendar/calendar-records.examples.d.ts +228 -0
  316. package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -0
  317. package/dist/test/calendar/calendar-records.examples.js +91 -0
  318. package/dist/test/calendar/calendar-records.examples.js.map +1 -0
  319. package/dist/test/calendar/calendar.examples.d.ts +776 -0
  320. package/dist/test/calendar/calendar.examples.d.ts.map +1 -0
  321. package/dist/test/calendar/calendar.examples.js +336 -0
  322. package/dist/test/calendar/calendar.examples.js.map +1 -0
  323. package/dist/test/decision/journal.examples.d.ts +28 -28
  324. package/dist/test/decision/journal.examples.d.ts.map +1 -1
  325. package/dist/test/decision/journal.examples.js +4 -4
  326. package/dist/test/decision/journal.examples.js.map +1 -1
  327. package/dist/test/decision/queue.examples.d.ts.map +1 -1
  328. package/dist/test/decision/queue.examples.js +5 -7
  329. package/dist/test/decision/queue.examples.js.map +1 -1
  330. package/dist/test/flowchart/flowchart.examples.d.ts +3713 -0
  331. package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -0
  332. package/dist/test/flowchart/flowchart.examples.js +465 -0
  333. package/dist/test/flowchart/flowchart.examples.js.map +1 -0
  334. package/dist/test/plan/plan-events.examples.d.ts +3666 -0
  335. package/dist/test/plan/plan-events.examples.d.ts.map +1 -0
  336. package/dist/test/plan/plan-events.examples.js +773 -0
  337. package/dist/test/plan/plan-events.examples.js.map +1 -0
  338. package/dist/test/plan/plan-records.examples.d.ts +3 -0
  339. package/dist/test/plan/plan-records.examples.d.ts.map +1 -0
  340. package/dist/test/plan/plan-records.examples.js +45 -0
  341. package/dist/test/plan/plan-records.examples.js.map +1 -0
  342. package/dist/test/plan/plan-windows.examples.d.ts +588 -0
  343. package/dist/test/plan/plan-windows.examples.d.ts.map +1 -0
  344. package/dist/test/plan/plan-windows.examples.js +170 -0
  345. package/dist/test/plan/plan-windows.examples.js.map +1 -0
  346. package/dist/test/plan/plan.examples.d.ts +8095 -0
  347. package/dist/test/plan/plan.examples.d.ts.map +1 -0
  348. package/dist/test/plan/plan.examples.js +2500 -0
  349. package/dist/test/plan/plan.examples.js.map +1 -0
  350. package/dist/test/roster/domain.examples.d.ts +367 -0
  351. package/dist/test/roster/domain.examples.d.ts.map +1 -0
  352. package/dist/test/roster/domain.examples.js +72 -0
  353. package/dist/test/roster/domain.examples.js.map +1 -0
  354. package/dist/test/roster/roster-records.examples.d.ts +729 -0
  355. package/dist/test/roster/roster-records.examples.d.ts.map +1 -0
  356. package/dist/test/roster/roster-records.examples.js +86 -0
  357. package/dist/test/roster/roster-records.examples.js.map +1 -0
  358. package/dist/test/roster/roster.examples.d.ts +750 -0
  359. package/dist/test/roster/roster.examples.d.ts.map +1 -0
  360. package/dist/test/roster/roster.examples.js +198 -0
  361. package/dist/test/roster/roster.examples.js.map +1 -0
  362. package/dist/test/roster/warehouse.d.ts +87 -0
  363. package/dist/test/roster/warehouse.d.ts.map +1 -0
  364. package/dist/test/roster/warehouse.js +883 -0
  365. package/dist/test/roster/warehouse.js.map +1 -0
  366. package/dist/test/sheet/sheet-link.examples.d.ts +7 -0
  367. package/dist/test/sheet/sheet-link.examples.d.ts.map +1 -0
  368. package/dist/test/sheet/sheet-link.examples.js +41 -0
  369. package/dist/test/sheet/sheet-link.examples.js.map +1 -0
  370. package/dist/test/sheet/sheet-records.examples.d.ts +421 -0
  371. package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -0
  372. package/dist/test/sheet/sheet-records.examples.js +79 -0
  373. package/dist/test/sheet/sheet-records.examples.js.map +1 -0
  374. package/dist/test/sheet/sheet-transactions.examples.d.ts +7 -0
  375. package/dist/test/sheet/sheet-transactions.examples.d.ts.map +1 -0
  376. package/dist/test/sheet/sheet-transactions.examples.js +58 -0
  377. package/dist/test/sheet/sheet-transactions.examples.js.map +1 -0
  378. package/dist/test/sheet/sheet.examples.d.ts +5562 -0
  379. package/dist/test/sheet/sheet.examples.d.ts.map +1 -0
  380. package/dist/test/sheet/sheet.examples.js +1178 -0
  381. package/dist/test/sheet/sheet.examples.js.map +1 -0
  382. package/dist/test/studio/studio.examples.d.ts.map +1 -1
  383. package/dist/test/studio/studio.examples.js +11 -11
  384. package/dist/test/studio/studio.examples.js.map +1 -1
  385. package/package.json +12 -9
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * `Sheet.library` — the sheet's library pane, the author's (#1186,
7
+ * `Sheet Builder Spec.md` §4.4, SB32, SB59, SB60). `library` lists the
8
+ * pane's tabs, in order, each built here: `Sheet.library.rows()` (the
9
+ * templates), `Sheet.library.columns()` (the columns a viewer shows and
10
+ * hides) and `Sheet.library.tab(data, { … })`, cards of the author's own.
11
+ * Left out, or empty, the sheet has no library pane.
12
+ *
13
+ * An author's tab reads its rows as `Sheet.register.members` does — an
14
+ * `Array<T>` or a `Dict<String, T>`, its accessors reified ONCE into a
15
+ * describe function the map then calls — and its `drop` returns what a
16
+ * dropped card sets, as a template's `values` do: `Sheet.patch` over the row
17
+ * type lands on a row, over the group type on a band. The patch crosses the
18
+ * closed payload as the cells it sets through the sheet's editable columns
19
+ * (or band cells), as a proposed row's does.
20
+ *
21
+ * @packageDocumentation
22
+ */
23
+ import { ArrayType, DictType, NullType, OptionType, StringType, StructType, VariantType, type EastType, type ExprType, type SubtypeExprOrValue } from "@elaraai/east";
24
+ import { type SheetBridge } from "./bridge.js";
25
+ /**
26
+ * One card of an author's tab on the wire.
27
+ *
28
+ * @property key - The card's key, unique within its tab
29
+ * @property label - Its name
30
+ * @property meta - The line under its name
31
+ * @property group - The tab's group the card sits under
32
+ * @property sets - What a drop writes: the tab's `drop` patch, through the sheet's editable columns (or a band's cells); empty without a `drop`
33
+ */
34
+ export declare const SheetLibraryCardType: StructType<{
35
+ readonly key: StringType;
36
+ readonly label: StringType;
37
+ readonly meta: OptionType<StringType>;
38
+ readonly group: OptionType<StringType>;
39
+ readonly sets: DictType<StringType, VariantType<{
40
+ readonly Invalid: StringType;
41
+ readonly Null: NullType;
42
+ readonly Boolean: import("@elaraai/east").BooleanType;
43
+ readonly Integer: import("@elaraai/east").IntegerType;
44
+ readonly Float: import("@elaraai/east").FloatType;
45
+ readonly String: StringType;
46
+ readonly DateTime: import("@elaraai/east").DateTimeType;
47
+ readonly Link: StructType<{
48
+ readonly from: ArrayType<VariantType<{
49
+ readonly identified: StructType<{
50
+ readonly key: StringType;
51
+ }>;
52
+ readonly range: StructType<{
53
+ readonly from: StringType;
54
+ readonly to: StringType;
55
+ }>;
56
+ readonly counted: StructType<{
57
+ readonly n: import("@elaraai/east").IntegerType;
58
+ readonly key: StringType;
59
+ }>;
60
+ readonly placeholder: NullType;
61
+ readonly text: StringType;
62
+ }>>;
63
+ readonly to: ArrayType<VariantType<{
64
+ readonly identified: StructType<{
65
+ readonly key: StringType;
66
+ }>;
67
+ readonly range: StructType<{
68
+ readonly from: StringType;
69
+ readonly to: StringType;
70
+ }>;
71
+ readonly counted: StructType<{
72
+ readonly n: import("@elaraai/east").IntegerType;
73
+ readonly key: StringType;
74
+ }>;
75
+ readonly placeholder: NullType;
76
+ readonly text: StringType;
77
+ }>>;
78
+ }>;
79
+ }>>;
80
+ }>;
81
+ /** Type representing {@link SheetLibraryCardType}. */
82
+ export type SheetLibraryCardType = typeof SheetLibraryCardType;
83
+ /** Where an author's tab's cards land: on rows (a grouped sheet's lines), or on a grouped sheet's bands. */
84
+ export declare const SheetLibraryDropType: VariantType<{
85
+ readonly row: NullType;
86
+ readonly group: NullType;
87
+ }>;
88
+ /** Type representing {@link SheetLibraryDropType}. */
89
+ export type SheetLibraryDropType = typeof SheetLibraryDropType;
90
+ /**
91
+ * One tab of the library pane on the wire, in the order `library` lists them.
92
+ *
93
+ * - `rows` — the templates (`templates`), by their group;
94
+ * - `columns` — the declared columns, each with an eye;
95
+ * - `tab` — the author's own: its name, its icon, where its cards land, and its cards.
96
+ */
97
+ export declare const SheetLibraryTabType: VariantType<{
98
+ readonly rows: NullType;
99
+ readonly columns: NullType;
100
+ readonly tab: StructType<{
101
+ readonly name: StringType;
102
+ readonly icon: OptionType<StringType>;
103
+ readonly drop: OptionType<VariantType<{
104
+ readonly row: NullType;
105
+ readonly group: NullType;
106
+ }>>;
107
+ readonly cards: ArrayType<StructType<{
108
+ readonly key: StringType;
109
+ readonly label: StringType;
110
+ readonly meta: OptionType<StringType>;
111
+ readonly group: OptionType<StringType>;
112
+ readonly sets: DictType<StringType, VariantType<{
113
+ readonly Invalid: StringType;
114
+ readonly Null: NullType;
115
+ readonly Boolean: import("@elaraai/east").BooleanType;
116
+ readonly Integer: import("@elaraai/east").IntegerType;
117
+ readonly Float: import("@elaraai/east").FloatType;
118
+ readonly String: StringType;
119
+ readonly DateTime: import("@elaraai/east").DateTimeType;
120
+ readonly Link: StructType<{
121
+ readonly from: ArrayType<VariantType<{
122
+ readonly identified: StructType<{
123
+ readonly key: StringType;
124
+ }>;
125
+ readonly range: StructType<{
126
+ readonly from: StringType;
127
+ readonly to: StringType;
128
+ }>;
129
+ readonly counted: StructType<{
130
+ readonly n: import("@elaraai/east").IntegerType;
131
+ readonly key: StringType;
132
+ }>;
133
+ readonly placeholder: NullType;
134
+ readonly text: StringType;
135
+ }>>;
136
+ readonly to: ArrayType<VariantType<{
137
+ readonly identified: StructType<{
138
+ readonly key: StringType;
139
+ }>;
140
+ readonly range: StructType<{
141
+ readonly from: StringType;
142
+ readonly to: StringType;
143
+ }>;
144
+ readonly counted: StructType<{
145
+ readonly n: import("@elaraai/east").IntegerType;
146
+ readonly key: StringType;
147
+ }>;
148
+ readonly placeholder: NullType;
149
+ readonly text: StringType;
150
+ }>>;
151
+ }>;
152
+ }>>;
153
+ }>>;
154
+ }>;
155
+ }>;
156
+ /** Type representing {@link SheetLibraryTabType}. */
157
+ export type SheetLibraryTabType = typeof SheetLibraryTabType;
158
+ /**
159
+ * An author's tab: its name and icon, and the accessors over one entry of its
160
+ * data — its value and its key — as `Sheet.register.members` takes them
161
+ * (`(_v, k) => k` over a `Dict`; over an `Array` the key is the index,
162
+ * printed).
163
+ *
164
+ * @typeParam T - The data's element type
165
+ * @typeParam P - The patch `drop` returns: `Sheet.Types.Patch` of the row type, or of the group type
166
+ */
167
+ export interface SheetLibraryTabConfig<T extends EastType, P extends EastType = EastType> {
168
+ /** The tab's name: its label in the tab row. */
169
+ name: string;
170
+ /** A Font Awesome solid icon name for the tab's cards. */
171
+ icon?: string;
172
+ /** The card's key — unique within the tab; a key that repeats keeps its first card. */
173
+ key: (value: ExprType<T>, key: ExprType<StringType>) => SubtypeExprOrValue<StringType>;
174
+ /** The card's name. */
175
+ label: (value: ExprType<T>, key: ExprType<StringType>) => SubtypeExprOrValue<StringType>;
176
+ /** The line under it — return the field's `Option`. */
177
+ meta?: (value: ExprType<T>, key: ExprType<StringType>) => SubtypeExprOrValue<OptionType<StringType>>;
178
+ /** The tab's group the card sits under. */
179
+ group?: (value: ExprType<T>, key: ExprType<StringType>) => SubtypeExprOrValue<StringType>;
180
+ /** What a dropped card sets: `Sheet.patch(RowType, …)` lands on a row, `Sheet.patch(GroupType, …)` on a grouped sheet's band. */
181
+ drop?: (value: ExprType<T>, key: ExprType<StringType>) => ExprType<P>;
182
+ }
183
+ /** One tab of the library pane — what each `Sheet.library.*` call returns, and `library` lists. */
184
+ export type SheetLibraryTab = {
185
+ readonly kind: "rows";
186
+ } | {
187
+ readonly kind: "columns";
188
+ } | {
189
+ readonly kind: "tab";
190
+ readonly data: unknown;
191
+ readonly config: SheetLibraryTabConfig<EastType>;
192
+ };
193
+ /**
194
+ * The library's Rows tab — `Sheet.library.rows()`: the sheet's templates,
195
+ * by their group, each card saying what it sets (SB33).
196
+ *
197
+ * @returns The tab
198
+ */
199
+ export declare function libraryRows(): SheetLibraryTab;
200
+ /**
201
+ * The library's Columns tab — `Sheet.library.columns()`: the declared
202
+ * columns, each with its kind and an eye that hides it from the grid for the
203
+ * viewer (SB36).
204
+ *
205
+ * @returns The tab
206
+ */
207
+ export declare function libraryColumns(): SheetLibraryTab;
208
+ /**
209
+ * A tab of the author's own cards — `Sheet.library.tab(data, { … })` (SB60):
210
+ * one card per entry of `data`, read through accessors as
211
+ * `Sheet.register.members` reads a register, and a `drop` that says what a
212
+ * dropped card sets.
213
+ *
214
+ * @typeParam T - The data's element type
215
+ * @typeParam P - The patch `drop` returns
216
+ * @param data - The rows — an `Array<T>` or a `Dict<String, T>` value or expression, a record's `read()`
217
+ * @param config - The tab's name and icon, and the accessors ({@link SheetLibraryTabConfig})
218
+ * @returns The tab
219
+ *
220
+ * @example
221
+ * ```tsx
222
+ * // .tsx file with the `@jsxImportSource @elaraai/e3-ui` pragma
223
+ * import { ArrayType, DateTimeType, DictType, East, FloatType, OptionType, StringType, StructType, none, some } from "@elaraai/east";
224
+ * import { Box, Reactive, UIComponentType } from "@elaraai/east-ui";
225
+ * import { Record, Sheet } from "@elaraai/e3-ui";
226
+ * import e3 from "@elaraai/e3";
227
+ *
228
+ * export const SheetJob = StructType({ task: StringType, start: OptionType(DateTimeType), qty: OptionType(FloatType) });
229
+ * export const sheetJobs = e3.record("sheet_jobs", DictType(StringType, SheetJob), new Map([
230
+ * ["J-0001", { task: "Panel cutting", start: some(new Date("2026-10-12T00:00:00Z")), qty: some(48.0) }],
231
+ * ["J-0002", { task: "Edge banding", start: some(new Date("2026-10-13T00:00:00Z")), qty: some(120.0) }],
232
+ * ["J-0003", { task: "CNC routing", start: none, qty: some(48.0) }],
233
+ * ["J-0004", { task: "Spray finish", start: none, qty: none }],
234
+ * ]));
235
+ * export const sheetJobsPatch = e3.mutation.patch(sheetJobs);
236
+ * export const LibraryTask = StructType({ name: StringType, stage: StringType });
237
+ *
238
+ * const sheet = East.function([], UIComponentType, (_$) => (
239
+ * <Reactive>{$ => {
240
+ * const jobs = $.let(Record.bind(sheetJobs, [sheetJobsPatch]));
241
+ * const tasks = $.let([
242
+ * { name: "Panel cutting", stage: "Cutting" },
243
+ * { name: "Edge banding", stage: "Cutting" },
244
+ * { name: "CNC routing", stage: "Machining" },
245
+ * { name: "Sanding", stage: "Finishing" },
246
+ * { name: "Spray finish", stage: "Finishing" },
247
+ * ], ArrayType(LibraryTask));
248
+ * return (
249
+ * <Box height="560px">
250
+ * <Sheet
251
+ * record={jobs}
252
+ * name="library"
253
+ * columns={{
254
+ * task: Sheet.column.text(SheetJob, { header: "Task", width: "240px" }),
255
+ * start: Sheet.column.date(SheetJob, { header: "Start", width: "96px" }),
256
+ * qty: Sheet.column.quantity(SheetJob, { header: "Qty", width: "96px" }),
257
+ * }}
258
+ * library={[
259
+ * // The tasks a job takes, by their stage: a card dropped on a job sets its task.
260
+ * Sheet.library.tab(tasks, { name: "Tasks", icon: "hammer",
261
+ * key: t => t.name, label: t => t.name, group: t => t.stage,
262
+ * drop: t => Sheet.patch(SheetJob, { task: t.name }) }),
263
+ * Sheet.library.columns(),
264
+ * ]}
265
+ * />
266
+ * </Box>
267
+ * );
268
+ * }}</Reactive>
269
+ * ));
270
+ * ```
271
+ */
272
+ export declare function libraryTab<T extends EastType, P extends EastType = EastType>(data: SubtypeExprOrValue<ArrayType<T>> | SubtypeExprOrValue<DictType<StringType, T>>, config: SheetLibraryTabConfig<T, P>): SheetLibraryTab;
273
+ /**
274
+ * Builds the library pane on the wire (SB59, SB60): its tabs in the
275
+ * order `library` lists them; none when it is left out.
276
+ *
277
+ * @param tabs - The tabs, each a `Sheet.library.*` call
278
+ * @param bridge - The sheet's bridge, as its root compiled it
279
+ * @returns The tabs on the wire
280
+ * @throws Error naming the tab: a tab listed twice (an author's tab by its name), and each of an author's tab's refusals
281
+ * @internal
282
+ */
283
+ export declare function buildLibrary(tabs: readonly SheetLibraryTab[] | undefined, bridge: SheetBridge): ExprType<ArrayType<SheetLibraryTabType>>;
284
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../../src/sheet/library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * `Sheet.library` — the sheet's library pane, the author's (#1186,
7
+ * `Sheet Builder Spec.md` §4.4, SB32, SB59, SB60). `library` lists the
8
+ * pane's tabs, in order, each built here: `Sheet.library.rows()` (the
9
+ * templates), `Sheet.library.columns()` (the columns a viewer shows and
10
+ * hides) and `Sheet.library.tab(data, { … })`, cards of the author's own.
11
+ * Left out, or empty, the sheet has no library pane.
12
+ *
13
+ * An author's tab reads its rows as `Sheet.register.members` does — an
14
+ * `Array<T>` or a `Dict<String, T>`, its accessors reified ONCE into a
15
+ * describe function the map then calls — and its `drop` returns what a
16
+ * dropped card sets, as a template's `values` do: `Sheet.patch` over the row
17
+ * type lands on a row, over the group type on a band. The patch crosses the
18
+ * closed payload as the cells it sets through the sheet's editable columns
19
+ * (or band cells), as a proposed row's does.
20
+ *
21
+ * @packageDocumentation
22
+ */
23
+ import { ArrayType, DictType, East, Expr, NullType, OptionType, SetType, StringType, StructType, VariantType, isTypeEqual, none, some, variant, } from "@elaraai/east";
24
+ import { SheetCellType, SheetPatchTypeFor } from "./types.js";
25
+ import { SheetCellsType, buildPatchCells } from "./bridge.js";
26
+ // ============================================================================
27
+ // The wire
28
+ // ============================================================================
29
+ /**
30
+ * One card of an author's tab on the wire.
31
+ *
32
+ * @property key - The card's key, unique within its tab
33
+ * @property label - Its name
34
+ * @property meta - The line under its name
35
+ * @property group - The tab's group the card sits under
36
+ * @property sets - What a drop writes: the tab's `drop` patch, through the sheet's editable columns (or a band's cells); empty without a `drop`
37
+ */
38
+ export const SheetLibraryCardType = StructType({
39
+ key: StringType,
40
+ label: StringType,
41
+ meta: OptionType(StringType),
42
+ group: OptionType(StringType),
43
+ sets: DictType(StringType, SheetCellType),
44
+ });
45
+ /** Where an author's tab's cards land: on rows (a grouped sheet's lines), or on a grouped sheet's bands. */
46
+ export const SheetLibraryDropType = VariantType({ row: NullType, group: NullType });
47
+ /**
48
+ * One tab of the library pane on the wire, in the order `library` lists them.
49
+ *
50
+ * - `rows` — the templates (`templates`), by their group;
51
+ * - `columns` — the declared columns, each with an eye;
52
+ * - `tab` — the author's own: its name, its icon, where its cards land, and its cards.
53
+ */
54
+ export const SheetLibraryTabType = VariantType({
55
+ rows: NullType,
56
+ columns: NullType,
57
+ tab: StructType({
58
+ name: StringType,
59
+ icon: OptionType(StringType),
60
+ drop: OptionType(SheetLibraryDropType),
61
+ cards: ArrayType(SheetLibraryCardType),
62
+ }),
63
+ });
64
+ /**
65
+ * The library's Rows tab — `Sheet.library.rows()`: the sheet's templates,
66
+ * by their group, each card saying what it sets (SB33).
67
+ *
68
+ * @returns The tab
69
+ */
70
+ export function libraryRows() {
71
+ return { kind: "rows" };
72
+ }
73
+ /**
74
+ * The library's Columns tab — `Sheet.library.columns()`: the declared
75
+ * columns, each with its kind and an eye that hides it from the grid for the
76
+ * viewer (SB36).
77
+ *
78
+ * @returns The tab
79
+ */
80
+ export function libraryColumns() {
81
+ return { kind: "columns" };
82
+ }
83
+ /**
84
+ * A tab of the author's own cards — `Sheet.library.tab(data, { … })` (SB60):
85
+ * one card per entry of `data`, read through accessors as
86
+ * `Sheet.register.members` reads a register, and a `drop` that says what a
87
+ * dropped card sets.
88
+ *
89
+ * @typeParam T - The data's element type
90
+ * @typeParam P - The patch `drop` returns
91
+ * @param data - The rows — an `Array<T>` or a `Dict<String, T>` value or expression, a record's `read()`
92
+ * @param config - The tab's name and icon, and the accessors ({@link SheetLibraryTabConfig})
93
+ * @returns The tab
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * // .tsx file with the `@jsxImportSource @elaraai/e3-ui` pragma
98
+ * import { ArrayType, DateTimeType, DictType, East, FloatType, OptionType, StringType, StructType, none, some } from "@elaraai/east";
99
+ * import { Box, Reactive, UIComponentType } from "@elaraai/east-ui";
100
+ * import { Record, Sheet } from "@elaraai/e3-ui";
101
+ * import e3 from "@elaraai/e3";
102
+ *
103
+ * export const SheetJob = StructType({ task: StringType, start: OptionType(DateTimeType), qty: OptionType(FloatType) });
104
+ * export const sheetJobs = e3.record("sheet_jobs", DictType(StringType, SheetJob), new Map([
105
+ * ["J-0001", { task: "Panel cutting", start: some(new Date("2026-10-12T00:00:00Z")), qty: some(48.0) }],
106
+ * ["J-0002", { task: "Edge banding", start: some(new Date("2026-10-13T00:00:00Z")), qty: some(120.0) }],
107
+ * ["J-0003", { task: "CNC routing", start: none, qty: some(48.0) }],
108
+ * ["J-0004", { task: "Spray finish", start: none, qty: none }],
109
+ * ]));
110
+ * export const sheetJobsPatch = e3.mutation.patch(sheetJobs);
111
+ * export const LibraryTask = StructType({ name: StringType, stage: StringType });
112
+ *
113
+ * const sheet = East.function([], UIComponentType, (_$) => (
114
+ * <Reactive>{$ => {
115
+ * const jobs = $.let(Record.bind(sheetJobs, [sheetJobsPatch]));
116
+ * const tasks = $.let([
117
+ * { name: "Panel cutting", stage: "Cutting" },
118
+ * { name: "Edge banding", stage: "Cutting" },
119
+ * { name: "CNC routing", stage: "Machining" },
120
+ * { name: "Sanding", stage: "Finishing" },
121
+ * { name: "Spray finish", stage: "Finishing" },
122
+ * ], ArrayType(LibraryTask));
123
+ * return (
124
+ * <Box height="560px">
125
+ * <Sheet
126
+ * record={jobs}
127
+ * name="library"
128
+ * columns={{
129
+ * task: Sheet.column.text(SheetJob, { header: "Task", width: "240px" }),
130
+ * start: Sheet.column.date(SheetJob, { header: "Start", width: "96px" }),
131
+ * qty: Sheet.column.quantity(SheetJob, { header: "Qty", width: "96px" }),
132
+ * }}
133
+ * library={[
134
+ * // The tasks a job takes, by their stage: a card dropped on a job sets its task.
135
+ * Sheet.library.tab(tasks, { name: "Tasks", icon: "hammer",
136
+ * key: t => t.name, label: t => t.name, group: t => t.stage,
137
+ * drop: t => Sheet.patch(SheetJob, { task: t.name }) }),
138
+ * Sheet.library.columns(),
139
+ * ]}
140
+ * />
141
+ * </Box>
142
+ * );
143
+ * }}</Reactive>
144
+ * ));
145
+ * ```
146
+ */
147
+ export function libraryTab(data, config) {
148
+ return { kind: "tab", data, config: config };
149
+ }
150
+ // ============================================================================
151
+ // The build
152
+ // ============================================================================
153
+ /** Fold the cards a key repeats on, keeping the FIRST, in the data's order — as a register's members fold. */
154
+ const dedupeCards = East.function([ArrayType(SheetLibraryCardType)], ArrayType(SheetLibraryCardType), ($, cards) => {
155
+ const out = $.let([], ArrayType(SheetLibraryCardType));
156
+ const seen = $.let(new Set(), SetType(StringType));
157
+ $.for(cards, ($2, card) => {
158
+ $2.if(seen.has(card.key).not(), ($3) => {
159
+ $3(seen.insert(card.key));
160
+ $3(out.pushLast(card));
161
+ });
162
+ });
163
+ return out;
164
+ });
165
+ /** How a tab names itself in a refusal. */
166
+ function tabName(tab) {
167
+ return tab.kind === "tab" ? `the "${tab.config.name}" tab` : `Sheet.library.${tab.kind}()`;
168
+ }
169
+ /**
170
+ * An author's tab on the wire: its cards, read through its accessors, and
171
+ * where its `drop` patch lands, decided by the patch's type.
172
+ *
173
+ * @param tab - The tab
174
+ * @param bridge - The sheet's bridge, as its root compiled it
175
+ * @returns The tab's wire value
176
+ * @throws Error naming the tab: data that is not an Array or a `Dict<String, T>`, or a `drop` over neither the row type nor the group type
177
+ */
178
+ function buildTab(tab, bridge) {
179
+ const cfg = tab.config;
180
+ const expr = East.value(tab.data);
181
+ // The data is an Array or a Dict whatever the cast above says: widen to read its real East type.
182
+ const t = Expr.type(expr);
183
+ if (t.type !== "Array" && t.type !== "Dict") {
184
+ throw new Error(`Sheet: ${tabName(tab)}'s data must be an Array or a Dict<String, T> — got a ${t.type}`);
185
+ }
186
+ if (t.type === "Dict" && t.key.type !== "String") {
187
+ throw new Error(`Sheet: ${tabName(tab)}'s data must be a Dict<String, T> — its keys ride to the accessors as the second argument`);
188
+ }
189
+ const elem = t.value;
190
+ // The drop: reified once, its patch's type deciding where a card lands.
191
+ let landing;
192
+ let dropFn;
193
+ let project;
194
+ if (cfg.drop !== undefined) {
195
+ const drop = cfg.drop;
196
+ dropFn = East.function([elem, StringType], undefined, (_$, v, k) => drop(v, k));
197
+ const out = Expr.type(dropFn).output;
198
+ const groupHalf = bridge.group;
199
+ if (isTypeEqual(out, bridge.patchType)) {
200
+ landing = "row";
201
+ project = bridge.encodePatch;
202
+ }
203
+ else if (groupHalf !== undefined && isTypeEqual(out, SheetPatchTypeFor(groupHalf.groupType))) {
204
+ landing = "group";
205
+ project = buildPatchCells(groupHalf.groupType, groupHalf.cellMetas, {});
206
+ }
207
+ else {
208
+ throw new Error(`Sheet: ${tabName(tab)}'s \`drop\` returns a patch over neither the row type nor the group type — build it with Sheet.patch(RowType, …)${bridge.group !== undefined ? ", or Sheet.patch(GroupType, …) for a band" : " over the sheet's row type"}`);
209
+ }
210
+ }
211
+ const describe = East.function([elem, StringType], SheetLibraryCardType, ($, v, k) => {
212
+ const sets = dropFn === undefined || project === undefined
213
+ ? $.const(new Map(), SheetCellsType)
214
+ : $.const(($.const(project))(($.const(dropFn))(v, k)), SheetCellsType);
215
+ return {
216
+ key: cfg.key(v, k),
217
+ label: cfg.label(v, k),
218
+ meta: cfg.meta !== undefined ? cfg.meta(v, k) : East.value(none, OptionType(StringType)),
219
+ group: cfg.group !== undefined ? some(cfg.group(v, k)) : East.value(none, OptionType(StringType)),
220
+ sets,
221
+ };
222
+ });
223
+ const list = t.type === "Dict"
224
+ ? expr.toArray((_$, v, k) => describe(v, k))
225
+ : expr.map((_$, v, i) => describe(v, East.print(i)));
226
+ return East.value(variant("tab", {
227
+ name: cfg.name,
228
+ icon: cfg.icon === undefined ? none : some(cfg.icon),
229
+ drop: landing === undefined ? none : some(variant(landing, null)),
230
+ cards: dedupeCards(list),
231
+ }), SheetLibraryTabType);
232
+ }
233
+ /**
234
+ * Builds the library pane on the wire (SB59, SB60): its tabs in the
235
+ * order `library` lists them; none when it is left out.
236
+ *
237
+ * @param tabs - The tabs, each a `Sheet.library.*` call
238
+ * @param bridge - The sheet's bridge, as its root compiled it
239
+ * @returns The tabs on the wire
240
+ * @throws Error naming the tab: a tab listed twice (an author's tab by its name), and each of an author's tab's refusals
241
+ * @internal
242
+ */
243
+ export function buildLibrary(tabs, bridge) {
244
+ const seen = new Set();
245
+ for (const tab of tabs ?? []) {
246
+ const id = tab.kind === "tab" ? `tab:${tab.config.name}` : tab.kind;
247
+ if (seen.has(id)) {
248
+ throw new Error(tab.kind === "tab"
249
+ ? `Sheet: the library lists two tabs named "${tab.config.name}" — each tab's name is its own`
250
+ : `Sheet: the library lists ${tabName(tab)} twice — each tab once`);
251
+ }
252
+ seen.add(id);
253
+ }
254
+ const wires = (tabs ?? []).map((tab) => tab.kind === "tab"
255
+ ? buildTab(tab, bridge)
256
+ : East.value(variant(tab.kind, null), SheetLibraryTabType));
257
+ return East.value(wires, ArrayType(SheetLibraryTabType));
258
+ }
259
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/sheet/library.ts"],"names":[],"mappings":"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"}