@elaraai/e3-ui 1.0.96 → 1.0.98

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 (304) hide show
  1. package/dist/src/allocation/index.d.ts +258 -7
  2. package/dist/src/allocation/index.d.ts.map +1 -1
  3. package/dist/src/allocation/index.js +30 -1
  4. package/dist/src/allocation/index.js.map +1 -1
  5. package/dist/src/allocation/types.d.ts +41 -0
  6. package/dist/src/allocation/types.d.ts.map +1 -1
  7. package/dist/src/allocation/types.js +35 -0
  8. package/dist/src/allocation/types.js.map +1 -1
  9. package/dist/src/bind/data-indexed.d.ts +31 -4
  10. package/dist/src/bind/data-indexed.d.ts.map +1 -1
  11. package/dist/src/bind/data-indexed.js +54 -10
  12. package/dist/src/bind/data-indexed.js.map +1 -1
  13. package/dist/src/calendar/index.d.ts +540 -14
  14. package/dist/src/calendar/index.d.ts.map +1 -1
  15. package/dist/src/calendar/index.js +43 -7
  16. package/dist/src/calendar/index.js.map +1 -1
  17. package/dist/src/calendar/paged.d.ts +89 -0
  18. package/dist/src/calendar/paged.d.ts.map +1 -0
  19. package/dist/src/calendar/paged.js +148 -0
  20. package/dist/src/calendar/paged.js.map +1 -0
  21. package/dist/src/flowchart/payload.d.ts +156 -0
  22. package/dist/src/flowchart/payload.d.ts.map +1 -1
  23. package/dist/src/flowchart/window.d.ts +12 -0
  24. package/dist/src/flowchart/window.d.ts.map +1 -1
  25. package/dist/src/index.d.ts +11 -2
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +19 -0
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/internal.d.ts +11 -5
  30. package/dist/src/internal.d.ts.map +1 -1
  31. package/dist/src/internal.js +28 -7
  32. package/dist/src/internal.js.map +1 -1
  33. package/dist/src/plan/builders.d.ts +12 -8
  34. package/dist/src/plan/builders.d.ts.map +1 -1
  35. package/dist/src/plan/builders.js +12 -8
  36. package/dist/src/plan/builders.js.map +1 -1
  37. package/dist/src/plan/event-rows.d.ts +228 -156
  38. package/dist/src/plan/event-rows.d.ts.map +1 -1
  39. package/dist/src/plan/event-rows.js +239 -54
  40. package/dist/src/plan/event-rows.js.map +1 -1
  41. package/dist/src/plan/index.d.ts +5 -0
  42. package/dist/src/plan/index.d.ts.map +1 -1
  43. package/dist/src/plan/index.js +3 -0
  44. package/dist/src/plan/index.js.map +1 -1
  45. package/dist/src/plan/ir.d.ts +70 -0
  46. package/dist/src/plan/ir.d.ts.map +1 -1
  47. package/dist/src/plan/ordered-source.d.ts +2038 -1
  48. package/dist/src/plan/ordered-source.d.ts.map +1 -1
  49. package/dist/src/plan/ordered-source.js +19 -11
  50. package/dist/src/plan/ordered-source.js.map +1 -1
  51. package/dist/src/plan/plan.d.ts +513 -32
  52. package/dist/src/plan/plan.d.ts.map +1 -1
  53. package/dist/src/plan/plan.js +119 -32
  54. package/dist/src/plan/plan.js.map +1 -1
  55. package/dist/src/plan/root.d.ts +4 -2
  56. package/dist/src/plan/root.d.ts.map +1 -1
  57. package/dist/src/plan/root.js +6 -4
  58. package/dist/src/plan/root.js.map +1 -1
  59. package/dist/src/plan/series.d.ts +13 -0
  60. package/dist/src/plan/series.d.ts.map +1 -1
  61. package/dist/src/plan/series.js +61 -7
  62. package/dist/src/plan/series.js.map +1 -1
  63. package/dist/src/plan/types.d.ts +14 -0
  64. package/dist/src/plan/types.d.ts.map +1 -1
  65. package/dist/src/plan/types.js +8 -0
  66. package/dist/src/plan/types.js.map +1 -1
  67. package/dist/src/roster/index.d.ts +608 -20
  68. package/dist/src/roster/index.d.ts.map +1 -1
  69. package/dist/src/roster/index.js +103 -29
  70. package/dist/src/roster/index.js.map +1 -1
  71. package/dist/src/roster/library.d.ts +12 -2
  72. package/dist/src/roster/library.d.ts.map +1 -1
  73. package/dist/src/roster/library.js +8 -0
  74. package/dist/src/roster/library.js.map +1 -1
  75. package/dist/src/roster/lists.d.ts +59 -12
  76. package/dist/src/roster/lists.d.ts.map +1 -1
  77. package/dist/src/roster/lists.js +51 -58
  78. package/dist/src/roster/lists.js.map +1 -1
  79. package/dist/src/roster/times.d.ts +402 -0
  80. package/dist/src/roster/times.d.ts.map +1 -1
  81. package/dist/src/roster/types.d.ts +913 -1
  82. package/dist/src/roster/types.d.ts.map +1 -1
  83. package/dist/src/roster/types.js +43 -3
  84. package/dist/src/roster/types.js.map +1 -1
  85. package/dist/src/schedule/cell-checks.d.ts +85 -0
  86. package/dist/src/schedule/cell-checks.d.ts.map +1 -0
  87. package/dist/src/schedule/cell-checks.js +211 -0
  88. package/dist/src/schedule/cell-checks.js.map +1 -0
  89. package/dist/src/schedule/events.d.ts +42 -10
  90. package/dist/src/schedule/events.d.ts.map +1 -1
  91. package/dist/src/schedule/events.js +349 -155
  92. package/dist/src/schedule/events.js.map +1 -1
  93. package/dist/src/schedule/fields.d.ts +134 -0
  94. package/dist/src/schedule/fields.d.ts.map +1 -0
  95. package/dist/src/schedule/fields.js +207 -0
  96. package/dist/src/schedule/fields.js.map +1 -0
  97. package/dist/src/schedule/library.d.ts +11 -3
  98. package/dist/src/schedule/library.d.ts.map +1 -1
  99. package/dist/src/schedule/library.js +9 -6
  100. package/dist/src/schedule/library.js.map +1 -1
  101. package/dist/src/schedule/optimise.d.ts +124 -0
  102. package/dist/src/schedule/optimise.d.ts.map +1 -0
  103. package/dist/src/schedule/optimise.js +140 -0
  104. package/dist/src/schedule/optimise.js.map +1 -0
  105. package/dist/src/schedule/pages.d.ts +76 -0
  106. package/dist/src/schedule/pages.d.ts.map +1 -0
  107. package/dist/src/schedule/pages.js +86 -0
  108. package/dist/src/schedule/pages.js.map +1 -0
  109. package/dist/src/schedule/record-window.d.ts +119 -6
  110. package/dist/src/schedule/record-window.d.ts.map +1 -1
  111. package/dist/src/schedule/record-window.js +139 -60
  112. package/dist/src/schedule/record-window.js.map +1 -1
  113. package/dist/src/schedule/resources.d.ts +8 -4
  114. package/dist/src/schedule/resources.d.ts.map +1 -1
  115. package/dist/src/schedule/resources.js +35 -15
  116. package/dist/src/schedule/resources.js.map +1 -1
  117. package/dist/src/schedule/session.d.ts +14 -0
  118. package/dist/src/schedule/session.d.ts.map +1 -1
  119. package/dist/src/schedule/session.js +29 -17
  120. package/dist/src/schedule/session.js.map +1 -1
  121. package/dist/src/schedule/types.d.ts +426 -36
  122. package/dist/src/schedule/types.d.ts.map +1 -1
  123. package/dist/src/schedule/types.js +63 -17
  124. package/dist/src/schedule/types.js.map +1 -1
  125. package/dist/src/schedule/window.d.ts +30 -9
  126. package/dist/src/schedule/window.d.ts.map +1 -1
  127. package/dist/src/schedule/window.js +101 -49
  128. package/dist/src/schedule/window.js.map +1 -1
  129. package/dist/src/schematic/index.d.ts +277 -0
  130. package/dist/src/schematic/index.d.ts.map +1 -0
  131. package/dist/src/schematic/index.js +206 -0
  132. package/dist/src/schematic/index.js.map +1 -0
  133. package/dist/src/schematic/kinds.d.ts +501 -0
  134. package/dist/src/schematic/kinds.d.ts.map +1 -0
  135. package/dist/src/schematic/kinds.js +1027 -0
  136. package/dist/src/schematic/kinds.js.map +1 -0
  137. package/dist/src/schematic/layers.d.ts +74 -0
  138. package/dist/src/schematic/layers.d.ts.map +1 -0
  139. package/dist/src/schematic/layers.js +99 -0
  140. package/dist/src/schematic/layers.js.map +1 -0
  141. package/dist/src/schematic/library.d.ts +202 -0
  142. package/dist/src/schematic/library.d.ts.map +1 -0
  143. package/dist/src/schematic/library.js +244 -0
  144. package/dist/src/schematic/library.js.map +1 -0
  145. package/dist/src/schematic/payload.d.ts +8360 -0
  146. package/dist/src/schematic/payload.d.ts.map +1 -0
  147. package/dist/src/schematic/payload.js +446 -0
  148. package/dist/src/schematic/payload.js.map +1 -0
  149. package/dist/src/schematic/schematic.d.ts +27 -0
  150. package/dist/src/schematic/schematic.d.ts.map +1 -0
  151. package/dist/src/schematic/schematic.js +17 -0
  152. package/dist/src/schematic/schematic.js.map +1 -0
  153. package/dist/src/schematic/shapes.d.ts +150 -0
  154. package/dist/src/schematic/shapes.d.ts.map +1 -0
  155. package/dist/src/schematic/shapes.js +171 -0
  156. package/dist/src/schematic/shapes.js.map +1 -0
  157. package/dist/src/schematic/templates.d.ts +96 -0
  158. package/dist/src/schematic/templates.d.ts.map +1 -0
  159. package/dist/src/schematic/templates.js +91 -0
  160. package/dist/src/schematic/templates.js.map +1 -0
  161. package/dist/src/schematic/types.d.ts +5766 -0
  162. package/dist/src/schematic/types.d.ts.map +1 -0
  163. package/dist/src/schematic/types.js +688 -0
  164. package/dist/src/schematic/types.js.map +1 -0
  165. package/dist/src/schematic/window.d.ts +212 -0
  166. package/dist/src/schematic/window.d.ts.map +1 -0
  167. package/dist/src/schematic/window.js +337 -0
  168. package/dist/src/schematic/window.js.map +1 -0
  169. package/dist/src/sheet/editing-bridge.d.ts +4 -2
  170. package/dist/src/sheet/editing-bridge.d.ts.map +1 -1
  171. package/dist/src/sheet/editing-bridge.js +8 -2
  172. package/dist/src/sheet/editing-bridge.js.map +1 -1
  173. package/dist/src/sheet/editing-types.d.ts +9 -5
  174. package/dist/src/sheet/editing-types.d.ts.map +1 -1
  175. package/dist/src/sheet/editing-types.js +9 -5
  176. package/dist/src/sheet/editing-types.js.map +1 -1
  177. package/dist/src/sheet/index.d.ts +18 -8
  178. package/dist/src/sheet/index.d.ts.map +1 -1
  179. package/dist/src/sheet/index.js +15 -7
  180. package/dist/src/sheet/index.js.map +1 -1
  181. package/dist/src/sheet/optimise.d.ts +69 -0
  182. package/dist/src/sheet/optimise.d.ts.map +1 -0
  183. package/dist/src/sheet/optimise.js +81 -0
  184. package/dist/src/sheet/optimise.js.map +1 -0
  185. package/dist/src/sheet/registers.d.ts +5 -5
  186. package/dist/src/sheet/registers.js +5 -5
  187. package/dist/src/sheet/root.d.ts +2 -0
  188. package/dist/src/sheet/root.d.ts.map +1 -1
  189. package/dist/src/sheet/root.js +2 -2
  190. package/dist/src/sheet/root.js.map +1 -1
  191. package/dist/src/sheet/sheet.d.ts +753 -573
  192. package/dist/src/sheet/sheet.d.ts.map +1 -1
  193. package/dist/src/sheet/sheet.js +45 -13
  194. package/dist/src/sheet/sheet.js.map +1 -1
  195. package/dist/src/sheet/types.d.ts +92 -12
  196. package/dist/src/sheet/types.d.ts.map +1 -1
  197. package/dist/src/sheet/types.js +4 -8
  198. package/dist/src/sheet/types.js.map +1 -1
  199. package/dist/src/utils/keyed-rows.d.ts +41 -0
  200. package/dist/src/utils/keyed-rows.d.ts.map +1 -0
  201. package/dist/src/utils/keyed-rows.js +64 -0
  202. package/dist/src/utils/keyed-rows.js.map +1 -0
  203. package/dist/src/utils/optimise.d.ts +79 -0
  204. package/dist/src/utils/optimise.d.ts.map +1 -0
  205. package/dist/src/utils/optimise.js +46 -0
  206. package/dist/src/utils/optimise.js.map +1 -0
  207. package/dist/test/allocation/allocation.examples.d.ts +6 -18
  208. package/dist/test/allocation/allocation.examples.d.ts.map +1 -1
  209. package/dist/test/allocation/allocation.examples.js +3 -3
  210. package/dist/test/allocation/allocation.examples.js.map +1 -1
  211. package/dist/test/allocation/optimise.examples.d.ts +109 -0
  212. package/dist/test/allocation/optimise.examples.d.ts.map +1 -0
  213. package/dist/test/allocation/optimise.examples.js +223 -0
  214. package/dist/test/allocation/optimise.examples.js.map +1 -0
  215. package/dist/test/bind/data/data.examples.d.ts +540 -36
  216. package/dist/test/bind/data/data.examples.d.ts.map +1 -1
  217. package/dist/test/bind/data/data.examples.js +66 -2
  218. package/dist/test/bind/data/data.examples.js.map +1 -1
  219. package/dist/test/bind/record/record.examples.d.ts +1 -3
  220. package/dist/test/bind/record/record.examples.d.ts.map +1 -1
  221. package/dist/test/calendar/calendar-records.examples.d.ts.map +1 -1
  222. package/dist/test/calendar/calendar-records.examples.js +3 -3
  223. package/dist/test/calendar/calendar-records.examples.js.map +1 -1
  224. package/dist/test/calendar/calendar-windows.examples.d.ts +9 -0
  225. package/dist/test/calendar/calendar-windows.examples.d.ts.map +1 -0
  226. package/dist/test/calendar/calendar-windows.examples.js +111 -0
  227. package/dist/test/calendar/calendar-windows.examples.js.map +1 -0
  228. package/dist/test/calendar/calendar.examples.d.ts +7 -21
  229. package/dist/test/calendar/calendar.examples.d.ts.map +1 -1
  230. package/dist/test/calendar/calendar.examples.js +7 -7
  231. package/dist/test/calendar/calendar.examples.js.map +1 -1
  232. package/dist/test/calendar/optimise.examples.d.ts +132 -0
  233. package/dist/test/calendar/optimise.examples.d.ts.map +1 -0
  234. package/dist/test/calendar/optimise.examples.js +75 -0
  235. package/dist/test/calendar/optimise.examples.js.map +1 -0
  236. package/dist/test/examples-package.d.ts +46 -10
  237. package/dist/test/examples-package.d.ts.map +1 -1
  238. package/dist/test/examples-package.js +142 -32
  239. package/dist/test/examples-package.js.map +1 -1
  240. package/dist/test/flowchart/flowchart.examples.d.ts +10 -30
  241. package/dist/test/flowchart/flowchart.examples.d.ts.map +1 -1
  242. package/dist/test/plan/optimise.examples.d.ts +207 -0
  243. package/dist/test/plan/optimise.examples.d.ts.map +1 -0
  244. package/dist/test/plan/optimise.examples.js +98 -0
  245. package/dist/test/plan/optimise.examples.js.map +1 -0
  246. package/dist/test/plan/plan-events.examples.d.ts +8 -24
  247. package/dist/test/plan/plan-events.examples.d.ts.map +1 -1
  248. package/dist/test/plan/plan-events.examples.js +3 -3
  249. package/dist/test/plan/plan-events.examples.js.map +1 -1
  250. package/dist/test/plan/plan-records.examples.d.ts +200 -19
  251. package/dist/test/plan/plan-records.examples.d.ts.map +1 -1
  252. package/dist/test/plan/plan-records.examples.js +125 -28
  253. package/dist/test/plan/plan-records.examples.js.map +1 -1
  254. package/dist/test/plan/plan-windows.examples.d.ts +853 -36
  255. package/dist/test/plan/plan-windows.examples.d.ts.map +1 -1
  256. package/dist/test/plan/plan-windows.examples.js +166 -29
  257. package/dist/test/plan/plan-windows.examples.js.map +1 -1
  258. package/dist/test/plan/plan.examples.d.ts +7 -21
  259. package/dist/test/plan/plan.examples.d.ts.map +1 -1
  260. package/dist/test/plan/plan.examples.js +11 -9
  261. package/dist/test/plan/plan.examples.js.map +1 -1
  262. package/dist/test/roster/domain.examples.d.ts +804 -0
  263. package/dist/test/roster/domain.examples.d.ts.map +1 -1
  264. package/dist/test/roster/domain.examples.js +3 -3
  265. package/dist/test/roster/domain.examples.js.map +1 -1
  266. package/dist/test/roster/optimise.examples.d.ts +485 -0
  267. package/dist/test/roster/optimise.examples.d.ts.map +1 -0
  268. package/dist/test/roster/optimise.examples.js +155 -0
  269. package/dist/test/roster/optimise.examples.js.map +1 -0
  270. package/dist/test/roster/roster-records.examples.d.ts +6 -18
  271. package/dist/test/roster/roster-records.examples.d.ts.map +1 -1
  272. package/dist/test/roster/roster-records.examples.js +1 -1
  273. package/dist/test/roster/roster-records.examples.js.map +1 -1
  274. package/dist/test/roster/roster.examples.d.ts +3391 -21
  275. package/dist/test/roster/roster.examples.d.ts.map +1 -1
  276. package/dist/test/roster/roster.examples.js +54 -7
  277. package/dist/test/roster/roster.examples.js.map +1 -1
  278. package/dist/test/roster/warehouse.d.ts +150 -7
  279. package/dist/test/roster/warehouse.d.ts.map +1 -1
  280. package/dist/test/roster/warehouse.js +36 -11
  281. package/dist/test/roster/warehouse.js.map +1 -1
  282. package/dist/test/schedule/schedule.examples.d.ts +1 -3
  283. package/dist/test/schedule/schedule.examples.d.ts.map +1 -1
  284. package/dist/test/schematic/schematic-records.examples.d.ts +444 -0
  285. package/dist/test/schematic/schematic-records.examples.d.ts.map +1 -0
  286. package/dist/test/schematic/schematic-records.examples.js +205 -0
  287. package/dist/test/schematic/schematic-records.examples.js.map +1 -0
  288. package/dist/test/schematic/schematic.examples.d.ts +2289 -0
  289. package/dist/test/schematic/schematic.examples.d.ts.map +1 -0
  290. package/dist/test/schematic/schematic.examples.js +453 -0
  291. package/dist/test/schematic/schematic.examples.js.map +1 -0
  292. package/dist/test/sheet/optimise.examples.d.ts +177 -0
  293. package/dist/test/sheet/optimise.examples.d.ts.map +1 -0
  294. package/dist/test/sheet/optimise.examples.js +75 -0
  295. package/dist/test/sheet/optimise.examples.js.map +1 -0
  296. package/dist/test/sheet/sheet-records.examples.d.ts +95 -204
  297. package/dist/test/sheet/sheet-records.examples.d.ts.map +1 -1
  298. package/dist/test/sheet/sheet-records.examples.js +42 -17
  299. package/dist/test/sheet/sheet-records.examples.js.map +1 -1
  300. package/dist/test/sheet/sheet.examples.d.ts +17 -33
  301. package/dist/test/sheet/sheet.examples.d.ts.map +1 -1
  302. package/dist/test/sheet/sheet.examples.js +18 -15
  303. package/dist/test/sheet/sheet.examples.js.map +1 -1
  304. package/package.json +11 -11
@@ -9,7 +9,8 @@
9
9
  * and agencies (`Schedule.resources`), publishes its weeks
10
10
  * (`Schedule.periods`) and writes its targets (`Roster.targets`), with the
11
11
  * lists it reads over the app's rows (`Roster.shifts`, `groups`, `positions`,
12
- * `activities`, `proposals`). It stores nothing in a shape of its own.
12
+ * `activities`, `proposals`, and the People layout's `patterns`, #1406). It
13
+ * stores nothing in a shape of its own.
13
14
  *
14
15
  * The tag validates, builds the people and agencies from their kinds'
15
16
  * accessors, and assembles the closed payload; it composes no East UI
@@ -32,25 +33,40 @@ import type { ScheduleResourceKind } from "../schedule/resources.js";
32
33
  import { ScheduleClockType } from "../schedule/types.js";
33
34
  import { rosterCoverage, rosterWeekHours } from "./coverage.js";
34
35
  import { rosterAnswer, rosterFit } from "./fit.js";
35
- import { rosterActivitiesTab, rosterLibraryTab, rosterPeopleTab, type RosterLibraryTab } from "./library.js";
36
- import { rosterActivities, rosterGroups, rosterPositions, rosterProposals, rosterShifts, type RosterGroups, type RosterPositions, type RosterProposals, type RosterShifts } from "./lists.js";
36
+ import { rosterActivitiesTab, rosterLibraryTab, rosterPatternsTab, rosterPeopleTab, type RosterLibraryTab } from "./library.js";
37
+ import { rosterActivities, rosterGroups, rosterPatterns, rosterPositions, rosterProposals, rosterShifts, type RosterGroups, type RosterPatterns, type RosterPositions, type RosterProposals, type RosterShifts } from "./lists.js";
37
38
  import { rosterCheck, rosterRest } from "./rules.js";
38
39
  import { rosterTargets, type RosterTargets } from "./targets.js";
39
40
  import * as T from "./types.js";
40
- /** Roster's layout: group shifts, or people across the week. */
41
+ /** Roster's layout: group shifts, or people across the week or the month. */
41
42
  export declare const RosterLayoutType: VariantType<{
42
43
  readonly shifts: NullType;
43
44
  readonly people: NullType;
44
45
  }>;
45
- /** Roster's displayed period. People always shows the whole week. */
46
+ /** Roster's displayed period: Shifts shows a day or a week, People a week or a month (#1406); each layout keeps its own. */
46
47
  export declare const RosterPeriodType: VariantType<{
47
48
  readonly day: NullType;
48
49
  readonly week: NullType;
50
+ readonly month: NullType;
49
51
  }>;
50
- /** A declared library tab: the People tab, the Activities tab, or an app's tab, its cards resolved over the duty kind. */
52
+ /** The periods each layout takes, in the Period segment's order. */
53
+ export declare const ROSTER_LAYOUT_PERIODS: Readonly<Record<"shifts" | "people", readonly ("day" | "week" | "month")[]>>;
54
+ /** Whether a People tile shows the shift's hours always, or only a duty's own times where they differ from the shift's (#1406). */
55
+ export declare const RosterTileTimesType: VariantType<{
56
+ readonly always: NullType;
57
+ readonly different: NullType;
58
+ }>;
59
+ /**
60
+ * A declared library tab: the People tab, the Activities tab, the Patterns tab — the app's week patterns under the name
61
+ * and icon `Roster.patterns` gives (#1406) — or an app's tab, its cards resolved over the duty kind.
62
+ */
51
63
  export declare const RosterLibraryTabType: VariantType<{
52
64
  readonly people: NullType;
53
65
  readonly activities: NullType;
66
+ readonly patterns: StructType<{
67
+ readonly name: StringType;
68
+ readonly icon: StringType;
69
+ }>;
54
70
  readonly tab: StructType<{
55
71
  readonly name: StringType;
56
72
  readonly icon: OptionType<StringType>;
@@ -76,20 +92,22 @@ export declare const RosterLibraryTabType: VariantType<{
76
92
  * @property periods - The app's weeks: their status and dismissals, and Publish; `none`, no Publish
77
93
  * @property targets - The app's targets, a row per slot; `none`, no slot has a target
78
94
  * @property groups - The groups, in their order
79
- * @property shifts - The shifts, in their order
95
+ * @property shifts - The shifts, in their order, each with its colour token, or none (#1406)
80
96
  * @property activities - Every activity: each group's skills and the duties of no group
81
97
  * @property positions - The positions, in their order; none for a duty kind with no `position` role
82
98
  * @property proposals - The app's suggestions, in key order
99
+ * @property patterns - The app's week patterns, in their order (#1406); none without `patterns`
83
100
  * @property rules - The built-in rules
84
101
  * @property pay - The app's pay, from a `PayRequest(R)` as bytes to each duty's cost by code; `none`, no costs show
85
102
  * @property currency - How costs print
86
103
  * @property check - The app's issues, from a `CheckContext(R)` as bytes
87
104
  * @property fit - The app's fit, by its `e3.function`'s name: who fits a Find fix's need; `none`, no Find fix is offered (#1334)
105
+ * @property optimise - The app's optimiser, by its `e3.function`'s name: what the Elara eye calls over the week in view, its result one edit of the session; `none`, no eye (#1409)
88
106
  * @property library - The library's tabs, in order
89
107
  * @property inspector - Whether the inspector pane shows
90
- * @property narrowed - Each narrowed source's keys, paged through its part of `slice`: the people and the activities that show (#1342)
108
+ * @property narrowed - Each narrowed source's keys, paged through its part of `slice`: the people, the activities and the patterns that show (#1342)
91
109
  * @property slice - The narrowing's chrome: a Slice over the duties', the targets', the staff's and the activities' records, one rail
92
- * @property settings - The first view and the view settings
110
+ * @property settings - The first view and the view settings: the layout, its period, the date, the week's start, the density, the chip skills, the requirement rows, read-only, and the People layout's `tileTimes` and `letters` (#1406)
93
111
  * @property id - The viewer's identity
94
112
  */
95
113
  export declare const RosterPayloadType: StructType<{
@@ -215,7 +233,7 @@ export declare const RosterPayloadType: StructType<{
215
233
  readonly readonly: NullType;
216
234
  }>;
217
235
  }>>;
218
- readonly items: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>], OptionType<ArrayType<StructType<{
236
+ readonly items: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>, OptionType<BlobType>], OptionType<ArrayType<StructType<{
219
237
  readonly kind: StringType;
220
238
  readonly key: StringType;
221
239
  readonly title: StringType;
@@ -239,7 +257,7 @@ export declare const RosterPayloadType: StructType<{
239
257
  readonly minutes: import("@elaraai/east").IntegerType;
240
258
  readonly due: OptionType<DateTimeType>;
241
259
  }>>>>;
242
- readonly unscheduled: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>], OptionType<ArrayType<StructType<{
260
+ readonly unscheduled: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>, OptionType<BlobType>], OptionType<ArrayType<StructType<{
243
261
  readonly kind: StringType;
244
262
  readonly key: StringType;
245
263
  readonly title: StringType;
@@ -494,7 +512,7 @@ export declare const RosterPayloadType: StructType<{
494
512
  readonly at: DateTimeType;
495
513
  readonly delta: OptionType<StringType>;
496
514
  }>>>>;
497
- readonly event: FunctionType<[StringType, import("@elaraai/east").DictType<StringType, BlobType>, DateTimeType, DateTimeType], OptionType<StructType<{
515
+ readonly event: FunctionType<[StringType, import("@elaraai/east").DictType<StringType, BlobType>, DateTimeType, DateTimeType, OptionType<OptionType<BlobType>>], OptionType<StructType<{
498
516
  readonly item: StructType<{
499
517
  readonly kind: StringType;
500
518
  readonly key: StringType;
@@ -533,6 +551,54 @@ export declare const RosterPayloadType: StructType<{
533
551
  readonly allow: NullType;
534
552
  }>;
535
553
  readonly inspector: OptionType<FunctionType<[BlobType, FunctionType<[BlobType], NullType>], import("@elaraai/east").RecursiveType<import("@elaraai/east-ui").UIComponentNode>>>;
554
+ readonly seriesKey: FunctionType<[OptionType<StructType<{
555
+ readonly kind: StringType;
556
+ readonly key: StringType;
557
+ }>>], OptionType<StringType>>;
558
+ readonly cellsType: import("@elaraai/east").RecursiveType<VariantType<{
559
+ readonly Never: NullType;
560
+ readonly Null: NullType;
561
+ readonly Boolean: NullType;
562
+ readonly Integer: NullType;
563
+ readonly Float: NullType;
564
+ readonly String: NullType;
565
+ readonly DateTime: NullType;
566
+ readonly Blob: NullType;
567
+ readonly Ref: import("@elaraai/east").RecursiveTypeMarker;
568
+ readonly Array: import("@elaraai/east").RecursiveTypeMarker;
569
+ readonly Set: import("@elaraai/east").RecursiveTypeMarker;
570
+ readonly Dict: StructType<{
571
+ readonly key: import("@elaraai/east").RecursiveTypeMarker;
572
+ readonly value: import("@elaraai/east").RecursiveTypeMarker;
573
+ }>;
574
+ readonly Struct: ArrayType<StructType<{
575
+ readonly name: StringType;
576
+ readonly type: import("@elaraai/east").RecursiveTypeMarker;
577
+ }>>;
578
+ readonly Variant: ArrayType<StructType<{
579
+ readonly name: StringType;
580
+ readonly type: import("@elaraai/east").RecursiveTypeMarker;
581
+ }>>;
582
+ readonly Recursive: VariantType<{
583
+ readonly ref: import("@elaraai/east").IntegerType;
584
+ readonly wrapper: StructType<{
585
+ readonly id: import("@elaraai/east").IntegerType;
586
+ readonly inner: import("@elaraai/east").RecursiveTypeMarker;
587
+ }>;
588
+ }>;
589
+ readonly Function: StructType<{
590
+ readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
591
+ readonly output: import("@elaraai/east").RecursiveTypeMarker;
592
+ }>;
593
+ readonly AsyncFunction: StructType<{
594
+ readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
595
+ readonly output: import("@elaraai/east").RecursiveTypeMarker;
596
+ }>;
597
+ readonly Vector: import("@elaraai/east").RecursiveTypeMarker;
598
+ readonly Matrix: import("@elaraai/east").RecursiveTypeMarker;
599
+ }>>;
600
+ readonly count: FunctionType<[DateTimeType, DateTimeType], OptionType<import("@elaraai/east").IntegerType>>;
601
+ readonly countExact: BooleanType;
536
602
  }>;
537
603
  readonly rows: FunctionType<[DateTimeType, DateTimeType], OptionType<import("@elaraai/east").DictType<StringType, StructType<{
538
604
  readonly roles: StructType<{
@@ -1179,6 +1245,140 @@ export declare const RosterPayloadType: StructType<{
1179
1245
  readonly minute: import("@elaraai/east").IntegerType;
1180
1246
  }>;
1181
1247
  readonly hours: import("@elaraai/east").FloatType;
1248
+ readonly color: OptionType<VariantType<{
1249
+ readonly brand: VariantType<{
1250
+ readonly "50": NullType;
1251
+ readonly "100": NullType;
1252
+ readonly "200": NullType;
1253
+ readonly "300": NullType;
1254
+ readonly "400": NullType;
1255
+ readonly "500": NullType;
1256
+ readonly "600": NullType;
1257
+ readonly "700": NullType;
1258
+ readonly "800": NullType;
1259
+ readonly "900": NullType;
1260
+ }>;
1261
+ readonly gray: VariantType<{
1262
+ readonly "50": NullType;
1263
+ readonly "100": NullType;
1264
+ readonly "200": NullType;
1265
+ readonly "300": NullType;
1266
+ readonly "400": NullType;
1267
+ readonly "500": NullType;
1268
+ readonly "600": NullType;
1269
+ readonly "700": NullType;
1270
+ readonly "800": NullType;
1271
+ readonly "900": NullType;
1272
+ }>;
1273
+ readonly red: VariantType<{
1274
+ readonly "50": NullType;
1275
+ readonly "100": NullType;
1276
+ readonly "200": NullType;
1277
+ readonly "300": NullType;
1278
+ readonly "400": NullType;
1279
+ readonly "500": NullType;
1280
+ readonly "600": NullType;
1281
+ readonly "700": NullType;
1282
+ readonly "800": NullType;
1283
+ readonly "900": NullType;
1284
+ }>;
1285
+ readonly orange: VariantType<{
1286
+ readonly "50": NullType;
1287
+ readonly "100": NullType;
1288
+ readonly "200": NullType;
1289
+ readonly "300": NullType;
1290
+ readonly "400": NullType;
1291
+ readonly "500": NullType;
1292
+ readonly "600": NullType;
1293
+ readonly "700": NullType;
1294
+ readonly "800": NullType;
1295
+ readonly "900": NullType;
1296
+ }>;
1297
+ readonly yellow: VariantType<{
1298
+ readonly "50": NullType;
1299
+ readonly "100": NullType;
1300
+ readonly "200": NullType;
1301
+ readonly "300": NullType;
1302
+ readonly "400": NullType;
1303
+ readonly "500": NullType;
1304
+ readonly "600": NullType;
1305
+ readonly "700": NullType;
1306
+ readonly "800": NullType;
1307
+ readonly "900": NullType;
1308
+ }>;
1309
+ readonly green: VariantType<{
1310
+ readonly "50": NullType;
1311
+ readonly "100": NullType;
1312
+ readonly "200": NullType;
1313
+ readonly "300": NullType;
1314
+ readonly "400": NullType;
1315
+ readonly "500": NullType;
1316
+ readonly "600": NullType;
1317
+ readonly "700": NullType;
1318
+ readonly "800": NullType;
1319
+ readonly "900": NullType;
1320
+ }>;
1321
+ readonly teal: VariantType<{
1322
+ readonly "50": NullType;
1323
+ readonly "100": NullType;
1324
+ readonly "200": NullType;
1325
+ readonly "300": NullType;
1326
+ readonly "400": NullType;
1327
+ readonly "500": NullType;
1328
+ readonly "600": NullType;
1329
+ readonly "700": NullType;
1330
+ readonly "800": NullType;
1331
+ readonly "900": NullType;
1332
+ }>;
1333
+ readonly blue: VariantType<{
1334
+ readonly "50": NullType;
1335
+ readonly "100": NullType;
1336
+ readonly "200": NullType;
1337
+ readonly "300": NullType;
1338
+ readonly "400": NullType;
1339
+ readonly "500": NullType;
1340
+ readonly "600": NullType;
1341
+ readonly "700": NullType;
1342
+ readonly "800": NullType;
1343
+ readonly "900": NullType;
1344
+ }>;
1345
+ readonly cyan: VariantType<{
1346
+ readonly "50": NullType;
1347
+ readonly "100": NullType;
1348
+ readonly "200": NullType;
1349
+ readonly "300": NullType;
1350
+ readonly "400": NullType;
1351
+ readonly "500": NullType;
1352
+ readonly "600": NullType;
1353
+ readonly "700": NullType;
1354
+ readonly "800": NullType;
1355
+ readonly "900": NullType;
1356
+ }>;
1357
+ readonly purple: VariantType<{
1358
+ readonly "50": NullType;
1359
+ readonly "100": NullType;
1360
+ readonly "200": NullType;
1361
+ readonly "300": NullType;
1362
+ readonly "400": NullType;
1363
+ readonly "500": NullType;
1364
+ readonly "600": NullType;
1365
+ readonly "700": NullType;
1366
+ readonly "800": NullType;
1367
+ readonly "900": NullType;
1368
+ }>;
1369
+ readonly pink: VariantType<{
1370
+ readonly "50": NullType;
1371
+ readonly "100": NullType;
1372
+ readonly "200": NullType;
1373
+ readonly "300": NullType;
1374
+ readonly "400": NullType;
1375
+ readonly "500": NullType;
1376
+ readonly "600": NullType;
1377
+ readonly "700": NullType;
1378
+ readonly "800": NullType;
1379
+ readonly "900": NullType;
1380
+ }>;
1381
+ }>>;
1182
1382
  }>>;
1183
1383
  readonly activities: ArrayType<StructType<{
1184
1384
  readonly key: StringType;
@@ -1200,6 +1400,11 @@ export declare const RosterPayloadType: StructType<{
1200
1400
  readonly person: StringType;
1201
1401
  readonly reason: StringType;
1202
1402
  }>>;
1403
+ readonly patterns: ArrayType<StructType<{
1404
+ readonly key: StringType;
1405
+ readonly label: StringType;
1406
+ readonly days: ArrayType<OptionType<StringType>>;
1407
+ }>>;
1203
1408
  readonly rules: StructType<{
1204
1409
  readonly rest: import("@elaraai/east").FloatType;
1205
1410
  readonly lead: BooleanType;
@@ -1245,9 +1450,16 @@ export declare const RosterPayloadType: StructType<{
1245
1450
  readonly fit: OptionType<StructType<{
1246
1451
  readonly name: StringType;
1247
1452
  }>>;
1453
+ readonly optimise: OptionType<StructType<{
1454
+ readonly name: StringType;
1455
+ }>>;
1248
1456
  readonly library: ArrayType<VariantType<{
1249
1457
  readonly people: NullType;
1250
1458
  readonly activities: NullType;
1459
+ readonly patterns: StructType<{
1460
+ readonly name: StringType;
1461
+ readonly icon: StringType;
1462
+ }>;
1251
1463
  readonly tab: StructType<{
1252
1464
  readonly name: StringType;
1253
1465
  readonly icon: OptionType<StringType>;
@@ -1269,6 +1481,7 @@ export declare const RosterPayloadType: StructType<{
1269
1481
  readonly narrowed: StructType<{
1270
1482
  readonly people: OptionType<RowSourceType<ArrayType<StringType>>>;
1271
1483
  readonly activities: OptionType<RowSourceType<ArrayType<StringType>>>;
1484
+ readonly patterns: OptionType<RowSourceType<ArrayType<StringType>>>;
1272
1485
  }>;
1273
1486
  readonly slice: OptionType<StructType<{
1274
1487
  readonly slice: StructType<{
@@ -1389,6 +1602,39 @@ export declare const RosterPayloadType: StructType<{
1389
1602
  readonly to: import("@elaraai/east").StringType;
1390
1603
  readonly optional: import("@elaraai/east").BooleanType;
1391
1604
  }>>;
1605
+ readonly area: OptionType<StructType<{
1606
+ readonly x: import("@elaraai/east").StringType;
1607
+ readonly y: import("@elaraai/east").StringType;
1608
+ readonly width: OptionType<import("@elaraai/east").StringType>;
1609
+ readonly height: OptionType<import("@elaraai/east").StringType>;
1610
+ readonly centre: import("@elaraai/east").BooleanType;
1611
+ readonly cell: import("@elaraai/east").FloatType;
1612
+ readonly optional: import("@elaraai/east").BooleanType;
1613
+ }>>;
1614
+ readonly series: OptionType<StructType<{
1615
+ readonly key: import("@elaraai/east").StringType;
1616
+ readonly from: import("@elaraai/east").StringType;
1617
+ readonly to: import("@elaraai/east").StringType;
1618
+ readonly tile: VariantType<{
1619
+ readonly day: NullType;
1620
+ readonly week: NullType;
1621
+ readonly month: NullType;
1622
+ readonly quarter: NullType;
1623
+ readonly year: NullType;
1624
+ }>;
1625
+ }>>;
1626
+ readonly summary: OptionType<StructType<{
1627
+ readonly key: import("@elaraai/east").StringType;
1628
+ readonly from: import("@elaraai/east").StringType;
1629
+ readonly to: import("@elaraai/east").StringType;
1630
+ readonly tile: VariantType<{
1631
+ readonly day: NullType;
1632
+ readonly week: NullType;
1633
+ readonly month: NullType;
1634
+ readonly quarter: NullType;
1635
+ readonly year: NullType;
1636
+ }>;
1637
+ }>>;
1392
1638
  }>>;
1393
1639
  readonly range: OptionType<import("@elaraai/east").StringType>;
1394
1640
  readonly search: ArrayType<import("@elaraai/east").StringType>;
@@ -1402,6 +1648,12 @@ export declare const RosterPayloadType: StructType<{
1402
1648
  readonly to: import("@elaraai/east").StringType;
1403
1649
  }>;
1404
1650
  readonly prefix: import("@elaraai/east").StringType;
1651
+ readonly window: StructType<{
1652
+ readonly minX: import("@elaraai/east").FloatType;
1653
+ readonly minY: import("@elaraai/east").FloatType;
1654
+ readonly maxX: import("@elaraai/east").FloatType;
1655
+ readonly maxY: import("@elaraai/east").FloatType;
1656
+ }>;
1405
1657
  }>>;
1406
1658
  }>>;
1407
1659
  }>;
@@ -1413,6 +1665,12 @@ export declare const RosterPayloadType: StructType<{
1413
1665
  readonly to: import("@elaraai/east").StringType;
1414
1666
  }>;
1415
1667
  readonly prefix: import("@elaraai/east").StringType;
1668
+ readonly window: StructType<{
1669
+ readonly minX: import("@elaraai/east").FloatType;
1670
+ readonly minY: import("@elaraai/east").FloatType;
1671
+ readonly maxX: import("@elaraai/east").FloatType;
1672
+ readonly maxY: import("@elaraai/east").FloatType;
1673
+ }>;
1416
1674
  }>>;
1417
1675
  readonly preset: OptionType<import("@elaraai/east").StringType>;
1418
1676
  readonly resolution: OptionType<VariantType<{
@@ -1433,6 +1691,12 @@ export declare const RosterPayloadType: StructType<{
1433
1691
  readonly to: import("@elaraai/east").StringType;
1434
1692
  }>;
1435
1693
  readonly prefix: import("@elaraai/east").StringType;
1694
+ readonly window: StructType<{
1695
+ readonly minX: import("@elaraai/east").FloatType;
1696
+ readonly minY: import("@elaraai/east").FloatType;
1697
+ readonly maxX: import("@elaraai/east").FloatType;
1698
+ readonly maxY: import("@elaraai/east").FloatType;
1699
+ }>;
1436
1700
  }>>;
1437
1701
  readonly preset: OptionType<import("@elaraai/east").StringType>;
1438
1702
  readonly resolution: OptionType<VariantType<{
@@ -1458,6 +1722,12 @@ export declare const RosterPayloadType: StructType<{
1458
1722
  readonly to: import("@elaraai/east").StringType;
1459
1723
  }>;
1460
1724
  readonly prefix: import("@elaraai/east").StringType;
1725
+ readonly window: StructType<{
1726
+ readonly minX: import("@elaraai/east").FloatType;
1727
+ readonly minY: import("@elaraai/east").FloatType;
1728
+ readonly maxX: import("@elaraai/east").FloatType;
1729
+ readonly maxY: import("@elaraai/east").FloatType;
1730
+ }>;
1461
1731
  }>>], OptionType<import("@elaraai/east").IntegerType>>;
1462
1732
  readonly total: import("@elaraai/east").FunctionType<[], OptionType<import("@elaraai/east").IntegerType>>;
1463
1733
  readonly domain: import("@elaraai/east").FunctionType<[import("@elaraai/east").StringType], OptionType<StructType<{
@@ -1499,6 +1769,12 @@ export declare const RosterPayloadType: StructType<{
1499
1769
  readonly to: import("@elaraai/east").StringType;
1500
1770
  }>;
1501
1771
  readonly prefix: import("@elaraai/east").StringType;
1772
+ readonly window: StructType<{
1773
+ readonly minX: import("@elaraai/east").FloatType;
1774
+ readonly minY: import("@elaraai/east").FloatType;
1775
+ readonly maxX: import("@elaraai/east").FloatType;
1776
+ readonly maxY: import("@elaraai/east").FloatType;
1777
+ }>;
1502
1778
  }>>, import("@elaraai/east").StringType], OptionType<import("@elaraai/east").BooleanType>>;
1503
1779
  readonly containsRow: import("@elaraai/east").FunctionType<[import("@elaraai/east").DictType<import("@elaraai/east").StringType, VariantType<{
1504
1780
  readonly values: ArrayType<import("@elaraai/east").StringType>;
@@ -1507,6 +1783,12 @@ export declare const RosterPayloadType: StructType<{
1507
1783
  readonly to: import("@elaraai/east").StringType;
1508
1784
  }>;
1509
1785
  readonly prefix: import("@elaraai/east").StringType;
1786
+ readonly window: StructType<{
1787
+ readonly minX: import("@elaraai/east").FloatType;
1788
+ readonly minY: import("@elaraai/east").FloatType;
1789
+ readonly maxX: import("@elaraai/east").FloatType;
1790
+ readonly maxY: import("@elaraai/east").FloatType;
1791
+ }>;
1510
1792
  }>>, import("@elaraai/east").StringType, import("@elaraai/east").BlobType], OptionType<import("@elaraai/east").BooleanType>>;
1511
1793
  }>;
1512
1794
  }>>;
@@ -1540,6 +1822,7 @@ export declare const RosterPayloadType: StructType<{
1540
1822
  readonly period: VariantType<{
1541
1823
  readonly day: NullType;
1542
1824
  readonly week: NullType;
1825
+ readonly month: NullType;
1543
1826
  }>;
1544
1827
  readonly date: OptionType<DateTimeType>;
1545
1828
  readonly weekStart: VariantType<{
@@ -1553,6 +1836,11 @@ export declare const RosterPayloadType: StructType<{
1553
1836
  readonly chipSkills: BooleanType;
1554
1837
  readonly requirements: BooleanType;
1555
1838
  readonly readOnly: BooleanType;
1839
+ readonly tileTimes: VariantType<{
1840
+ readonly always: NullType;
1841
+ readonly different: NullType;
1842
+ }>;
1843
+ readonly letters: BooleanType;
1556
1844
  }>;
1557
1845
  readonly id: OptionType<StringType>;
1558
1846
  }>;
@@ -1680,7 +1968,7 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
1680
1968
  readonly readonly: NullType;
1681
1969
  }>;
1682
1970
  }>>;
1683
- readonly items: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>], OptionType<ArrayType<StructType<{
1971
+ readonly items: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>, OptionType<BlobType>], OptionType<ArrayType<StructType<{
1684
1972
  readonly kind: StringType;
1685
1973
  readonly key: StringType;
1686
1974
  readonly title: StringType;
@@ -1704,7 +1992,7 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
1704
1992
  readonly minutes: import("@elaraai/east").IntegerType;
1705
1993
  readonly due: OptionType<DateTimeType>;
1706
1994
  }>>>>;
1707
- readonly unscheduled: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>], OptionType<ArrayType<StructType<{
1995
+ readonly unscheduled: FunctionType<[DateTimeType, DateTimeType, import("@elaraai/east").DictType<StringType, BlobType>, OptionType<BlobType>], OptionType<ArrayType<StructType<{
1708
1996
  readonly kind: StringType;
1709
1997
  readonly key: StringType;
1710
1998
  readonly title: StringType;
@@ -1959,7 +2247,7 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
1959
2247
  readonly at: DateTimeType;
1960
2248
  readonly delta: OptionType<StringType>;
1961
2249
  }>>>>;
1962
- readonly event: FunctionType<[StringType, import("@elaraai/east").DictType<StringType, BlobType>, DateTimeType, DateTimeType], OptionType<StructType<{
2250
+ readonly event: FunctionType<[StringType, import("@elaraai/east").DictType<StringType, BlobType>, DateTimeType, DateTimeType, OptionType<OptionType<BlobType>>], OptionType<StructType<{
1963
2251
  readonly item: StructType<{
1964
2252
  readonly kind: StringType;
1965
2253
  readonly key: StringType;
@@ -1998,6 +2286,54 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
1998
2286
  readonly allow: NullType;
1999
2287
  }>;
2000
2288
  readonly inspector: OptionType<FunctionType<[BlobType, FunctionType<[BlobType], NullType>], import("@elaraai/east").RecursiveType<import("@elaraai/east-ui").UIComponentNode>>>;
2289
+ readonly seriesKey: FunctionType<[OptionType<StructType<{
2290
+ readonly kind: StringType;
2291
+ readonly key: StringType;
2292
+ }>>], OptionType<StringType>>;
2293
+ readonly cellsType: import("@elaraai/east").RecursiveType<VariantType<{
2294
+ readonly Never: NullType;
2295
+ readonly Null: NullType;
2296
+ readonly Boolean: NullType;
2297
+ readonly Integer: NullType;
2298
+ readonly Float: NullType;
2299
+ readonly String: NullType;
2300
+ readonly DateTime: NullType;
2301
+ readonly Blob: NullType;
2302
+ readonly Ref: import("@elaraai/east").RecursiveTypeMarker;
2303
+ readonly Array: import("@elaraai/east").RecursiveTypeMarker;
2304
+ readonly Set: import("@elaraai/east").RecursiveTypeMarker;
2305
+ readonly Dict: StructType<{
2306
+ readonly key: import("@elaraai/east").RecursiveTypeMarker;
2307
+ readonly value: import("@elaraai/east").RecursiveTypeMarker;
2308
+ }>;
2309
+ readonly Struct: ArrayType<StructType<{
2310
+ readonly name: StringType;
2311
+ readonly type: import("@elaraai/east").RecursiveTypeMarker;
2312
+ }>>;
2313
+ readonly Variant: ArrayType<StructType<{
2314
+ readonly name: StringType;
2315
+ readonly type: import("@elaraai/east").RecursiveTypeMarker;
2316
+ }>>;
2317
+ readonly Recursive: VariantType<{
2318
+ readonly ref: import("@elaraai/east").IntegerType;
2319
+ readonly wrapper: StructType<{
2320
+ readonly id: import("@elaraai/east").IntegerType;
2321
+ readonly inner: import("@elaraai/east").RecursiveTypeMarker;
2322
+ }>;
2323
+ }>;
2324
+ readonly Function: StructType<{
2325
+ readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
2326
+ readonly output: import("@elaraai/east").RecursiveTypeMarker;
2327
+ }>;
2328
+ readonly AsyncFunction: StructType<{
2329
+ readonly inputs: ArrayType<import("@elaraai/east").RecursiveTypeMarker>;
2330
+ readonly output: import("@elaraai/east").RecursiveTypeMarker;
2331
+ }>;
2332
+ readonly Vector: import("@elaraai/east").RecursiveTypeMarker;
2333
+ readonly Matrix: import("@elaraai/east").RecursiveTypeMarker;
2334
+ }>>;
2335
+ readonly count: FunctionType<[DateTimeType, DateTimeType], OptionType<import("@elaraai/east").IntegerType>>;
2336
+ readonly countExact: BooleanType;
2001
2337
  }>;
2002
2338
  readonly rows: FunctionType<[DateTimeType, DateTimeType], OptionType<import("@elaraai/east").DictType<StringType, StructType<{
2003
2339
  readonly roles: StructType<{
@@ -2644,6 +2980,140 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2644
2980
  readonly minute: import("@elaraai/east").IntegerType;
2645
2981
  }>;
2646
2982
  readonly hours: import("@elaraai/east").FloatType;
2983
+ readonly color: OptionType<VariantType<{
2984
+ readonly brand: VariantType<{
2985
+ readonly "50": NullType;
2986
+ readonly "100": NullType;
2987
+ readonly "200": NullType;
2988
+ readonly "300": NullType;
2989
+ readonly "400": NullType;
2990
+ readonly "500": NullType;
2991
+ readonly "600": NullType;
2992
+ readonly "700": NullType;
2993
+ readonly "800": NullType;
2994
+ readonly "900": NullType;
2995
+ }>;
2996
+ readonly gray: VariantType<{
2997
+ readonly "50": NullType;
2998
+ readonly "100": NullType;
2999
+ readonly "200": NullType;
3000
+ readonly "300": NullType;
3001
+ readonly "400": NullType;
3002
+ readonly "500": NullType;
3003
+ readonly "600": NullType;
3004
+ readonly "700": NullType;
3005
+ readonly "800": NullType;
3006
+ readonly "900": NullType;
3007
+ }>;
3008
+ readonly red: VariantType<{
3009
+ readonly "50": NullType;
3010
+ readonly "100": NullType;
3011
+ readonly "200": NullType;
3012
+ readonly "300": NullType;
3013
+ readonly "400": NullType;
3014
+ readonly "500": NullType;
3015
+ readonly "600": NullType;
3016
+ readonly "700": NullType;
3017
+ readonly "800": NullType;
3018
+ readonly "900": NullType;
3019
+ }>;
3020
+ readonly orange: VariantType<{
3021
+ readonly "50": NullType;
3022
+ readonly "100": NullType;
3023
+ readonly "200": NullType;
3024
+ readonly "300": NullType;
3025
+ readonly "400": NullType;
3026
+ readonly "500": NullType;
3027
+ readonly "600": NullType;
3028
+ readonly "700": NullType;
3029
+ readonly "800": NullType;
3030
+ readonly "900": NullType;
3031
+ }>;
3032
+ readonly yellow: VariantType<{
3033
+ readonly "50": NullType;
3034
+ readonly "100": NullType;
3035
+ readonly "200": NullType;
3036
+ readonly "300": NullType;
3037
+ readonly "400": NullType;
3038
+ readonly "500": NullType;
3039
+ readonly "600": NullType;
3040
+ readonly "700": NullType;
3041
+ readonly "800": NullType;
3042
+ readonly "900": NullType;
3043
+ }>;
3044
+ readonly green: VariantType<{
3045
+ readonly "50": NullType;
3046
+ readonly "100": NullType;
3047
+ readonly "200": NullType;
3048
+ readonly "300": NullType;
3049
+ readonly "400": NullType;
3050
+ readonly "500": NullType;
3051
+ readonly "600": NullType;
3052
+ readonly "700": NullType;
3053
+ readonly "800": NullType;
3054
+ readonly "900": NullType;
3055
+ }>;
3056
+ readonly teal: VariantType<{
3057
+ readonly "50": NullType;
3058
+ readonly "100": NullType;
3059
+ readonly "200": NullType;
3060
+ readonly "300": NullType;
3061
+ readonly "400": NullType;
3062
+ readonly "500": NullType;
3063
+ readonly "600": NullType;
3064
+ readonly "700": NullType;
3065
+ readonly "800": NullType;
3066
+ readonly "900": NullType;
3067
+ }>;
3068
+ readonly blue: VariantType<{
3069
+ readonly "50": NullType;
3070
+ readonly "100": NullType;
3071
+ readonly "200": NullType;
3072
+ readonly "300": NullType;
3073
+ readonly "400": NullType;
3074
+ readonly "500": NullType;
3075
+ readonly "600": NullType;
3076
+ readonly "700": NullType;
3077
+ readonly "800": NullType;
3078
+ readonly "900": NullType;
3079
+ }>;
3080
+ readonly cyan: VariantType<{
3081
+ readonly "50": NullType;
3082
+ readonly "100": NullType;
3083
+ readonly "200": NullType;
3084
+ readonly "300": NullType;
3085
+ readonly "400": NullType;
3086
+ readonly "500": NullType;
3087
+ readonly "600": NullType;
3088
+ readonly "700": NullType;
3089
+ readonly "800": NullType;
3090
+ readonly "900": NullType;
3091
+ }>;
3092
+ readonly purple: VariantType<{
3093
+ readonly "50": NullType;
3094
+ readonly "100": NullType;
3095
+ readonly "200": NullType;
3096
+ readonly "300": NullType;
3097
+ readonly "400": NullType;
3098
+ readonly "500": NullType;
3099
+ readonly "600": NullType;
3100
+ readonly "700": NullType;
3101
+ readonly "800": NullType;
3102
+ readonly "900": NullType;
3103
+ }>;
3104
+ readonly pink: VariantType<{
3105
+ readonly "50": NullType;
3106
+ readonly "100": NullType;
3107
+ readonly "200": NullType;
3108
+ readonly "300": NullType;
3109
+ readonly "400": NullType;
3110
+ readonly "500": NullType;
3111
+ readonly "600": NullType;
3112
+ readonly "700": NullType;
3113
+ readonly "800": NullType;
3114
+ readonly "900": NullType;
3115
+ }>;
3116
+ }>>;
2647
3117
  }>>;
2648
3118
  readonly activities: ArrayType<StructType<{
2649
3119
  readonly key: StringType;
@@ -2665,6 +3135,11 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2665
3135
  readonly person: StringType;
2666
3136
  readonly reason: StringType;
2667
3137
  }>>;
3138
+ readonly patterns: ArrayType<StructType<{
3139
+ readonly key: StringType;
3140
+ readonly label: StringType;
3141
+ readonly days: ArrayType<OptionType<StringType>>;
3142
+ }>>;
2668
3143
  readonly rules: StructType<{
2669
3144
  readonly rest: import("@elaraai/east").FloatType;
2670
3145
  readonly lead: BooleanType;
@@ -2710,9 +3185,16 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2710
3185
  readonly fit: OptionType<StructType<{
2711
3186
  readonly name: StringType;
2712
3187
  }>>;
3188
+ readonly optimise: OptionType<StructType<{
3189
+ readonly name: StringType;
3190
+ }>>;
2713
3191
  readonly library: ArrayType<VariantType<{
2714
3192
  readonly people: NullType;
2715
3193
  readonly activities: NullType;
3194
+ readonly patterns: StructType<{
3195
+ readonly name: StringType;
3196
+ readonly icon: StringType;
3197
+ }>;
2716
3198
  readonly tab: StructType<{
2717
3199
  readonly name: StringType;
2718
3200
  readonly icon: OptionType<StringType>;
@@ -2734,6 +3216,7 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2734
3216
  readonly narrowed: StructType<{
2735
3217
  readonly people: OptionType<RowSourceType<ArrayType<StringType>>>;
2736
3218
  readonly activities: OptionType<RowSourceType<ArrayType<StringType>>>;
3219
+ readonly patterns: OptionType<RowSourceType<ArrayType<StringType>>>;
2737
3220
  }>;
2738
3221
  readonly slice: OptionType<StructType<{
2739
3222
  readonly slice: StructType<{
@@ -2854,6 +3337,39 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2854
3337
  readonly to: import("@elaraai/east").StringType;
2855
3338
  readonly optional: import("@elaraai/east").BooleanType;
2856
3339
  }>>;
3340
+ readonly area: OptionType<StructType<{
3341
+ readonly x: import("@elaraai/east").StringType;
3342
+ readonly y: import("@elaraai/east").StringType;
3343
+ readonly width: OptionType<import("@elaraai/east").StringType>;
3344
+ readonly height: OptionType<import("@elaraai/east").StringType>;
3345
+ readonly centre: import("@elaraai/east").BooleanType;
3346
+ readonly cell: import("@elaraai/east").FloatType;
3347
+ readonly optional: import("@elaraai/east").BooleanType;
3348
+ }>>;
3349
+ readonly series: OptionType<StructType<{
3350
+ readonly key: import("@elaraai/east").StringType;
3351
+ readonly from: import("@elaraai/east").StringType;
3352
+ readonly to: import("@elaraai/east").StringType;
3353
+ readonly tile: VariantType<{
3354
+ readonly day: NullType;
3355
+ readonly week: NullType;
3356
+ readonly month: NullType;
3357
+ readonly quarter: NullType;
3358
+ readonly year: NullType;
3359
+ }>;
3360
+ }>>;
3361
+ readonly summary: OptionType<StructType<{
3362
+ readonly key: import("@elaraai/east").StringType;
3363
+ readonly from: import("@elaraai/east").StringType;
3364
+ readonly to: import("@elaraai/east").StringType;
3365
+ readonly tile: VariantType<{
3366
+ readonly day: NullType;
3367
+ readonly week: NullType;
3368
+ readonly month: NullType;
3369
+ readonly quarter: NullType;
3370
+ readonly year: NullType;
3371
+ }>;
3372
+ }>>;
2857
3373
  }>>;
2858
3374
  readonly range: OptionType<import("@elaraai/east").StringType>;
2859
3375
  readonly search: ArrayType<import("@elaraai/east").StringType>;
@@ -2867,6 +3383,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2867
3383
  readonly to: import("@elaraai/east").StringType;
2868
3384
  }>;
2869
3385
  readonly prefix: import("@elaraai/east").StringType;
3386
+ readonly window: StructType<{
3387
+ readonly minX: import("@elaraai/east").FloatType;
3388
+ readonly minY: import("@elaraai/east").FloatType;
3389
+ readonly maxX: import("@elaraai/east").FloatType;
3390
+ readonly maxY: import("@elaraai/east").FloatType;
3391
+ }>;
2870
3392
  }>>;
2871
3393
  }>>;
2872
3394
  }>;
@@ -2878,6 +3400,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2878
3400
  readonly to: import("@elaraai/east").StringType;
2879
3401
  }>;
2880
3402
  readonly prefix: import("@elaraai/east").StringType;
3403
+ readonly window: StructType<{
3404
+ readonly minX: import("@elaraai/east").FloatType;
3405
+ readonly minY: import("@elaraai/east").FloatType;
3406
+ readonly maxX: import("@elaraai/east").FloatType;
3407
+ readonly maxY: import("@elaraai/east").FloatType;
3408
+ }>;
2881
3409
  }>>;
2882
3410
  readonly preset: OptionType<import("@elaraai/east").StringType>;
2883
3411
  readonly resolution: OptionType<VariantType<{
@@ -2898,6 +3426,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2898
3426
  readonly to: import("@elaraai/east").StringType;
2899
3427
  }>;
2900
3428
  readonly prefix: import("@elaraai/east").StringType;
3429
+ readonly window: StructType<{
3430
+ readonly minX: import("@elaraai/east").FloatType;
3431
+ readonly minY: import("@elaraai/east").FloatType;
3432
+ readonly maxX: import("@elaraai/east").FloatType;
3433
+ readonly maxY: import("@elaraai/east").FloatType;
3434
+ }>;
2901
3435
  }>>;
2902
3436
  readonly preset: OptionType<import("@elaraai/east").StringType>;
2903
3437
  readonly resolution: OptionType<VariantType<{
@@ -2923,6 +3457,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2923
3457
  readonly to: import("@elaraai/east").StringType;
2924
3458
  }>;
2925
3459
  readonly prefix: import("@elaraai/east").StringType;
3460
+ readonly window: StructType<{
3461
+ readonly minX: import("@elaraai/east").FloatType;
3462
+ readonly minY: import("@elaraai/east").FloatType;
3463
+ readonly maxX: import("@elaraai/east").FloatType;
3464
+ readonly maxY: import("@elaraai/east").FloatType;
3465
+ }>;
2926
3466
  }>>], OptionType<import("@elaraai/east").IntegerType>>;
2927
3467
  readonly total: import("@elaraai/east").FunctionType<[], OptionType<import("@elaraai/east").IntegerType>>;
2928
3468
  readonly domain: import("@elaraai/east").FunctionType<[import("@elaraai/east").StringType], OptionType<StructType<{
@@ -2964,6 +3504,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2964
3504
  readonly to: import("@elaraai/east").StringType;
2965
3505
  }>;
2966
3506
  readonly prefix: import("@elaraai/east").StringType;
3507
+ readonly window: StructType<{
3508
+ readonly minX: import("@elaraai/east").FloatType;
3509
+ readonly minY: import("@elaraai/east").FloatType;
3510
+ readonly maxX: import("@elaraai/east").FloatType;
3511
+ readonly maxY: import("@elaraai/east").FloatType;
3512
+ }>;
2967
3513
  }>>, import("@elaraai/east").StringType], OptionType<import("@elaraai/east").BooleanType>>;
2968
3514
  readonly containsRow: import("@elaraai/east").FunctionType<[import("@elaraai/east").DictType<import("@elaraai/east").StringType, VariantType<{
2969
3515
  readonly values: ArrayType<import("@elaraai/east").StringType>;
@@ -2972,6 +3518,12 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
2972
3518
  readonly to: import("@elaraai/east").StringType;
2973
3519
  }>;
2974
3520
  readonly prefix: import("@elaraai/east").StringType;
3521
+ readonly window: StructType<{
3522
+ readonly minX: import("@elaraai/east").FloatType;
3523
+ readonly minY: import("@elaraai/east").FloatType;
3524
+ readonly maxX: import("@elaraai/east").FloatType;
3525
+ readonly maxY: import("@elaraai/east").FloatType;
3526
+ }>;
2975
3527
  }>>, import("@elaraai/east").StringType, import("@elaraai/east").BlobType], OptionType<import("@elaraai/east").BooleanType>>;
2976
3528
  }>;
2977
3529
  }>>;
@@ -3005,6 +3557,7 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
3005
3557
  readonly period: VariantType<{
3006
3558
  readonly day: NullType;
3007
3559
  readonly week: NullType;
3560
+ readonly month: NullType;
3008
3561
  }>;
3009
3562
  readonly date: OptionType<DateTimeType>;
3010
3563
  readonly weekStart: VariantType<{
@@ -3018,6 +3571,11 @@ export declare const RosterComponent: import("@elaraai/east-ui").UIComponentDef<
3018
3571
  readonly chipSkills: BooleanType;
3019
3572
  readonly requirements: BooleanType;
3020
3573
  readonly readOnly: BooleanType;
3574
+ readonly tileTimes: VariantType<{
3575
+ readonly always: NullType;
3576
+ readonly different: NullType;
3577
+ }>;
3578
+ readonly letters: BooleanType;
3021
3579
  }>;
3022
3580
  readonly id: OptionType<StringType>;
3023
3581
  }>>;
@@ -3041,7 +3599,7 @@ export interface RosterProps<R extends EastType = EastType> {
3041
3599
  periods?: SchedulePeriods;
3042
3600
  /** The app's targets, a row per slot: `Roster.targets(Record.bind(cover, [coverPatch]), { day, group, shift, positions, hours })`. */
3043
3601
  targets?: RosterTargets;
3044
- /** The shifts: `Roster.shifts(rows, { label, code, start, hours, order? })`. */
3602
+ /** The shifts: `Roster.shifts(rows, { label, code, start, hours, order?, color? })`; `color` an `Option<ColorToken>`, the People tiles' fill (#1406). */
3045
3603
  shifts: RosterShifts;
3046
3604
  /** The groups: `Roster.groups(rows, { label, order? })`. */
3047
3605
  groups: RosterGroups;
@@ -3054,6 +3612,12 @@ export interface RosterProps<R extends EastType = EastType> {
3054
3612
  activities?: SubtypeExprOrValue<ArrayType<T.RosterSkillType>>;
3055
3613
  /** The app's suggestions: `Roster.proposals(rows, { person, day, group, shift, reason })`. */
3056
3614
  proposals?: RosterProposals;
3615
+ /**
3616
+ * The app's week patterns (#1406): `Roster.patterns(rows, { name, icon?, label, days, order? })` — the cards of the tab `name`
3617
+ * titles (`Roster.library.patterns()`), and what a drop on a person's week applies: seven days from the week's first day,
3618
+ * each a shift's key or none for a day off. Omitted, no patterns and no tab.
3619
+ */
3620
+ patterns?: RosterPatterns;
3057
3621
  /**
3058
3622
  * The app's pay (§5.6): an East function from `Roster.Types.PayRequest(R)` — one person's duties for the week, or one agency's
3059
3623
  * requests — to `Roster.Types.Pay`, each duty's cost by the app's own pay codes. Asked a person at a time; omitted, no costs show.
@@ -3077,6 +3641,13 @@ export interface RosterProps<R extends EastType = EastType> {
3077
3641
  * every person. Omitted, no Find fix is offered; `Roster.check(R)` still reports the issue.
3078
3642
  */
3079
3643
  fit?: BoundFunc<[T.RosterFitRequestTypeFor<R>], T.RosterFitResultType>;
3644
+ /**
3645
+ * The app's optimiser (#1409): `Func.bind` of its `e3.function` from `Roster.Types.OptimiseRequest(R)` — the week in view, the run
3646
+ * number, the week's duties as drafted, its targets by slot and `Roster.Types.Context` — to `Roster.Types.OptimiseResult(R)`, the
3647
+ * week's duties complete. The Elara eye in the toolbar calls it once per run; the result lands in the session as one edit, which
3648
+ * one Undo reverts and Save commits with everything else. Omitted, no eye.
3649
+ */
3650
+ optimise?: BoundFunc<[T.RosterOptimiseRequestTypeFor<R>], T.RosterOptimiseResultTypeFor<R>>;
3080
3651
  /**
3081
3652
  * The narrowing: one `Slice.bindRecords`, a source per record it narrows — the duty kind's slot (its interval index from the
3082
3653
  * start to the end, its `range` the start field, which the Roster's navigation writes), `targets`, `people` and `activities`,
@@ -3087,10 +3658,13 @@ export interface RosterProps<R extends EastType = EastType> {
3087
3658
  library?: readonly RosterLibraryTab[];
3088
3659
  /** Shows the inspector pane: the duty kind's own `inspector` and `Roster.targets`' `inspector` draw in it where given. */
3089
3660
  inspector?: boolean;
3090
- /** Initial view, persisted under id. */
3661
+ /**
3662
+ * Initial view, persisted under id. Shifts takes `"day"` or `"week"` (`"day"` by default); People `"week"` or `"month"`
3663
+ * (`"week"` by default, #1406); a period its layout does not take is refused at build. Each layout keeps its own period per viewer.
3664
+ */
3091
3665
  view?: {
3092
3666
  layout?: "shifts" | "people";
3093
- period?: "day" | "week";
3667
+ period?: "day" | "week" | "month";
3094
3668
  date?: SubtypeExprOrValue<DateTimeType>;
3095
3669
  };
3096
3670
  /** Week boundary; Monday by default. */
@@ -3105,6 +3679,10 @@ export interface RosterProps<R extends EastType = EastType> {
3105
3679
  requirements?: SubtypeExprOrValue<BooleanType>;
3106
3680
  /** Disables edits; published weeks are always read-only. */
3107
3681
  readOnly?: SubtypeExprOrValue<BooleanType>;
3682
+ /** Whether a People tile shows the shift's hours (`06–14`) always, or only a duty's own times where they differ from the shift's (#1406); `"always"` by default. */
3683
+ tileTimes?: "always" | "different";
3684
+ /** Whether a month's marks carry the shift's letter (#1406); `true` by default. */
3685
+ letters?: boolean;
3108
3686
  /** Stable viewer identity when multiple Rosters share a surface. */
3109
3687
  id?: string;
3110
3688
  }
@@ -3137,8 +3715,11 @@ export declare function rosterAgenciesOf(kind: ScheduleResourceKind<EastType, Ea
3137
3715
  * Roster values rather than its declaration; `events` holding other than one kind, or `resources` other than `people`
3138
3716
  * and `agencies`; a duty kind whose resource names no `people`, or a resource kind read a window at a time; a `people`
3139
3717
  * kind with no `group`; `positions` beside a duty kind with no `position` role; `pay` without `currency`; a `pay`, a
3140
- * `check` or a `fit` over another type; a library tab listed twice; and as `Schedule`'s checks, the duty kind's
3141
- * build (`buildRoster`) and the slice's (`recordSources`) do
3718
+ * `check` or a `fit` over another type, or an `optimise` that is not `Func.bind` of a function from `OptimiseRequest(R)` to
3719
+ * `OptimiseResult(R)` (#1409); a library tab listed twice; a `view.period` its layout does not take, naming each
3720
+ * layout's periods; `Roster.library.patterns()` without `patterns`; a `tileTimes` other than `"always"` or
3721
+ * `"different"`, or a `letters` that is no boolean (#1406); and as `Schedule`'s checks, the duty kind's build
3722
+ * (`buildRoster`) and the slice's (`recordSources`) do
3142
3723
  * @internal
3143
3724
  */
3144
3725
  export declare function createRosterPayload<R extends EastType>(props: RosterProps<R>): ExprType<typeof RosterPayloadType>;
@@ -3156,6 +3737,8 @@ export interface RosterNamespace {
3156
3737
  activities: typeof rosterActivities;
3157
3738
  /** Reads the app's suggestion rows as the Roster's proposals. */
3158
3739
  proposals: typeof rosterProposals;
3740
+ /** Reads the app's week pattern rows as the Roster's patterns, with their tab's name and icon (#1406). */
3741
+ patterns: typeof rosterPatterns;
3159
3742
  /** Declares the app's targets, a row per slot, over its own record. */
3160
3743
  targets: typeof rosterTargets;
3161
3744
  /** `coverage(R)`: computes coverage without a browser. */
@@ -3174,6 +3757,7 @@ export interface RosterNamespace {
3174
3757
  library: {
3175
3758
  people: typeof rosterPeopleTab;
3176
3759
  activities: typeof rosterActivitiesTab;
3760
+ patterns: typeof rosterPatternsTab;
3177
3761
  tab: typeof rosterLibraryTab;
3178
3762
  };
3179
3763
  /** @deprecated Removed (#1368): the people are `resources={{ people: Schedule.resources(staff.read(), { name, icon, label, group, … }) }}`. */
@@ -3214,6 +3798,10 @@ export interface RosterNamespace {
3214
3798
  Pay: T.RosterPayType;
3215
3799
  Layout: typeof RosterLayoutType;
3216
3800
  Period: typeof RosterPeriodType;
3801
+ Pattern: T.RosterPatternType;
3802
+ TileTimes: typeof RosterTileTimesType;
3803
+ OptimiseRequest: typeof T.RosterOptimiseRequestTypeFor;
3804
+ OptimiseResult: typeof T.RosterOptimiseResultTypeFor;
3217
3805
  };
3218
3806
  }
3219
3807
  /**