@elaraai/east-ui 1.0.67 → 1.0.69

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 (306) hide show
  1. package/README.md +2 -2
  2. package/dist/src/charts/chart/index.d.ts +39 -4
  3. package/dist/src/charts/chart/index.d.ts.map +1 -1
  4. package/dist/src/charts/chart/index.js +3 -3
  5. package/dist/src/charts/chart/index.js.map +1 -1
  6. package/dist/src/charts/spec/index.d.ts +61 -3
  7. package/dist/src/charts/spec/index.d.ts.map +1 -1
  8. package/dist/src/charts/spec/types.d.ts +1 -1
  9. package/dist/src/charts/spec/types.js +1 -1
  10. package/dist/src/collections/blend/index.d.ts +1 -1
  11. package/dist/src/collections/blend/index.d.ts.map +1 -1
  12. package/dist/src/collections/blend/index.js +1 -1
  13. package/dist/src/collections/blend/index.js.map +1 -1
  14. package/dist/src/collections/blend/types.js +1 -1
  15. package/dist/src/collections/blend/types.js.map +1 -1
  16. package/dist/src/collections/board/index.d.ts +4 -4
  17. package/dist/src/collections/board/index.d.ts.map +1 -1
  18. package/dist/src/collections/board/index.js +1 -1
  19. package/dist/src/collections/board/index.js.map +1 -1
  20. package/dist/src/collections/board/types.js +1 -1
  21. package/dist/src/collections/board/types.js.map +1 -1
  22. package/dist/src/collections/calendar/index.d.ts +1 -1
  23. package/dist/src/collections/calendar/index.d.ts.map +1 -1
  24. package/dist/src/collections/deck/index.d.ts +58 -0
  25. package/dist/src/collections/deck/index.d.ts.map +1 -1
  26. package/dist/src/collections/index.d.ts +1 -2
  27. package/dist/src/collections/index.d.ts.map +1 -1
  28. package/dist/src/collections/index.js +1 -2
  29. package/dist/src/collections/index.js.map +1 -1
  30. package/dist/src/collections/library/index.d.ts +29 -0
  31. package/dist/src/collections/library/index.d.ts.map +1 -1
  32. package/dist/src/collections/library/types.d.ts +29 -0
  33. package/dist/src/collections/library/types.d.ts.map +1 -1
  34. package/dist/src/collections/matrix/index.d.ts +1 -1
  35. package/dist/src/collections/matrix/index.d.ts.map +1 -1
  36. package/dist/src/collections/plan/assemble.d.ts +3732 -0
  37. package/dist/src/collections/plan/assemble.d.ts.map +1 -0
  38. package/dist/src/collections/plan/assemble.js +187 -0
  39. package/dist/src/collections/plan/assemble.js.map +1 -0
  40. package/dist/src/collections/plan/builders.d.ts +612 -0
  41. package/dist/src/collections/plan/builders.d.ts.map +1 -0
  42. package/dist/src/collections/plan/builders.js +543 -0
  43. package/dist/src/collections/plan/builders.js.map +1 -0
  44. package/dist/src/collections/plan/data-forms.d.ts +332 -0
  45. package/dist/src/collections/plan/data-forms.d.ts.map +1 -0
  46. package/dist/src/collections/plan/data-forms.js +212 -0
  47. package/dist/src/collections/plan/data-forms.js.map +1 -0
  48. package/dist/src/collections/plan/factories.d.ts +338 -0
  49. package/dist/src/collections/plan/factories.d.ts.map +1 -0
  50. package/dist/src/collections/plan/factories.js +414 -0
  51. package/dist/src/collections/plan/factories.js.map +1 -0
  52. package/dist/src/collections/plan/index.d.ts +271 -0
  53. package/dist/src/collections/plan/index.d.ts.map +1 -0
  54. package/dist/src/collections/plan/index.js +162 -0
  55. package/dist/src/collections/plan/index.js.map +1 -0
  56. package/dist/src/collections/plan/ir.d.ts +3496 -0
  57. package/dist/src/collections/plan/ir.d.ts.map +1 -0
  58. package/dist/src/collections/plan/ir.js +83 -0
  59. package/dist/src/collections/plan/ir.js.map +1 -0
  60. package/dist/src/collections/plan/pick.d.ts +115 -0
  61. package/dist/src/collections/plan/pick.d.ts.map +1 -0
  62. package/dist/src/collections/plan/pick.js +193 -0
  63. package/dist/src/collections/plan/pick.js.map +1 -0
  64. package/dist/src/collections/plan/root.d.ts +210 -0
  65. package/dist/src/collections/plan/root.d.ts.map +1 -0
  66. package/dist/src/collections/plan/root.js +146 -0
  67. package/dist/src/collections/plan/root.js.map +1 -0
  68. package/dist/src/collections/plan/series.d.ts +11890 -0
  69. package/dist/src/collections/plan/series.d.ts.map +1 -0
  70. package/dist/src/collections/plan/series.js +412 -0
  71. package/dist/src/collections/plan/series.js.map +1 -0
  72. package/dist/src/collections/plan/types.d.ts +9291 -0
  73. package/dist/src/collections/plan/types.d.ts.map +1 -0
  74. package/dist/src/collections/plan/types.js +940 -0
  75. package/dist/src/collections/plan/types.js.map +1 -0
  76. package/dist/src/collections/roster/index.d.ts +4 -4
  77. package/dist/src/collections/roster/index.d.ts.map +1 -1
  78. package/dist/src/collections/roster/index.js +1 -1
  79. package/dist/src/collections/roster/index.js.map +1 -1
  80. package/dist/src/collections/roster/types.d.ts +1 -1
  81. package/dist/src/collections/roster/types.d.ts.map +1 -1
  82. package/dist/src/collections/roster/types.js +4 -3
  83. package/dist/src/collections/roster/types.js.map +1 -1
  84. package/dist/src/collections/table/index.d.ts +70 -2
  85. package/dist/src/collections/table/index.d.ts.map +1 -1
  86. package/dist/src/collections/table/index.js +55 -11
  87. package/dist/src/collections/table/index.js.map +1 -1
  88. package/dist/src/collections/table/types.d.ts +1 -1
  89. package/dist/src/collections/table/types.d.ts.map +1 -1
  90. package/dist/src/component.d.ts +3898 -1339
  91. package/dist/src/component.d.ts.map +1 -1
  92. package/dist/src/component.js +83 -146
  93. package/dist/src/component.js.map +1 -1
  94. package/dist/src/container/card/types.d.ts +1 -1
  95. package/dist/src/container/card/types.d.ts.map +1 -1
  96. package/dist/src/contracts/approval.d.ts +117 -0
  97. package/dist/src/contracts/approval.d.ts.map +1 -0
  98. package/dist/src/contracts/approval.js +105 -0
  99. package/dist/src/contracts/approval.js.map +1 -0
  100. package/dist/src/contracts/drag.d.ts +3 -3
  101. package/dist/src/contracts/drag.d.ts.map +1 -1
  102. package/dist/src/contracts/drag.js +23 -10
  103. package/dist/src/contracts/drag.js.map +1 -1
  104. package/dist/src/contracts/index.d.ts +4 -1
  105. package/dist/src/contracts/index.d.ts.map +1 -1
  106. package/dist/src/contracts/index.js +4 -1
  107. package/dist/src/contracts/index.js.map +1 -1
  108. package/dist/src/contracts/pick.d.ts +705 -0
  109. package/dist/src/contracts/pick.d.ts.map +1 -0
  110. package/dist/src/contracts/pick.js +360 -0
  111. package/dist/src/contracts/pick.js.map +1 -0
  112. package/dist/src/contracts/review.d.ts +7 -99
  113. package/dist/src/contracts/review.d.ts.map +1 -1
  114. package/dist/src/contracts/review.js +11 -85
  115. package/dist/src/contracts/review.js.map +1 -1
  116. package/dist/src/contracts/slice-affordances.d.ts +13 -4
  117. package/dist/src/contracts/slice-affordances.d.ts.map +1 -1
  118. package/dist/src/contracts/slice-affordances.js +13 -3
  119. package/dist/src/contracts/slice-affordances.js.map +1 -1
  120. package/dist/src/contracts/source.d.ts +432 -0
  121. package/dist/src/contracts/source.d.ts.map +1 -0
  122. package/dist/src/contracts/source.js +505 -0
  123. package/dist/src/contracts/source.js.map +1 -0
  124. package/dist/src/contracts/states.d.ts +130 -0
  125. package/dist/src/contracts/states.d.ts.map +1 -1
  126. package/dist/src/contracts/states.js +122 -0
  127. package/dist/src/contracts/states.js.map +1 -1
  128. package/dist/src/contracts/time.d.ts +76 -0
  129. package/dist/src/contracts/time.d.ts.map +1 -0
  130. package/dist/src/contracts/time.js +78 -0
  131. package/dist/src/contracts/time.js.map +1 -0
  132. package/dist/src/display/trace/types.d.ts +1 -1
  133. package/dist/src/display/trace/types.d.ts.map +1 -1
  134. package/dist/src/index.d.ts +10 -2
  135. package/dist/src/index.d.ts.map +1 -1
  136. package/dist/src/index.js +22 -2
  137. package/dist/src/index.js.map +1 -1
  138. package/dist/src/internal.d.ts +5 -3
  139. package/dist/src/internal.d.ts.map +1 -1
  140. package/dist/src/internal.js +4 -3
  141. package/dist/src/internal.js.map +1 -1
  142. package/dist/src/layout/dock/index.d.ts +1 -1
  143. package/dist/src/layout/dock/index.js +1 -1
  144. package/dist/src/layout/index.d.ts +0 -1
  145. package/dist/src/layout/index.d.ts.map +1 -1
  146. package/dist/src/layout/index.js +0 -1
  147. package/dist/src/layout/index.js.map +1 -1
  148. package/dist/src/overlays/drawer/types.d.ts +1 -1
  149. package/dist/src/overlays/drawer/types.d.ts.map +1 -1
  150. package/dist/src/pick/index.d.ts +443 -0
  151. package/dist/src/pick/index.d.ts.map +1 -0
  152. package/dist/src/pick/index.js +64 -0
  153. package/dist/src/pick/index.js.map +1 -0
  154. package/dist/src/pick/panel/index.d.ts +64 -0
  155. package/dist/src/pick/panel/index.d.ts.map +1 -0
  156. package/dist/src/pick/panel/index.js +61 -0
  157. package/dist/src/pick/panel/index.js.map +1 -0
  158. package/dist/src/platform/slice/index.d.ts +291 -0
  159. package/dist/src/platform/slice/index.d.ts.map +1 -1
  160. package/dist/src/platform/slice/index.js +16 -0
  161. package/dist/src/platform/slice/index.js.map +1 -1
  162. package/dist/src/runtime/collections/deck.d.ts +29 -0
  163. package/dist/src/runtime/collections/deck.d.ts.map +1 -1
  164. package/dist/src/runtime/collections/index.d.ts +1 -2
  165. package/dist/src/runtime/collections/index.d.ts.map +1 -1
  166. package/dist/src/runtime/collections/index.js +1 -2
  167. package/dist/src/runtime/collections/index.js.map +1 -1
  168. package/dist/src/runtime/collections/library.d.ts +1 -1
  169. package/dist/src/runtime/collections/library.js +1 -1
  170. package/dist/src/runtime/collections/plan.d.ts +98 -0
  171. package/dist/src/runtime/collections/plan.d.ts.map +1 -0
  172. package/dist/src/runtime/collections/plan.js +98 -0
  173. package/dist/src/runtime/collections/plan.js.map +1 -0
  174. package/dist/src/runtime/collections/schematic.d.ts +1 -1
  175. package/dist/src/runtime/collections/schematic.js +1 -1
  176. package/dist/src/runtime/collections/table.d.ts +9 -1
  177. package/dist/src/runtime/collections/table.d.ts.map +1 -1
  178. package/dist/src/runtime/collections/table.js +1 -7
  179. package/dist/src/runtime/collections/table.js.map +1 -1
  180. package/dist/src/runtime/layout/dock.d.ts +2 -2
  181. package/dist/src/runtime/layout/dock.js +2 -2
  182. package/dist/src/runtime/layout/index.d.ts +0 -1
  183. package/dist/src/runtime/layout/index.d.ts.map +1 -1
  184. package/dist/src/runtime/layout/index.js +0 -1
  185. package/dist/src/runtime/layout/index.js.map +1 -1
  186. package/dist/src/shared/plot-gutter.d.ts +6 -23
  187. package/dist/src/shared/plot-gutter.d.ts.map +1 -1
  188. package/dist/src/shared/plot-gutter.js +6 -19
  189. package/dist/src/shared/plot-gutter.js.map +1 -1
  190. package/dist/src/shared/reify.d.ts +47 -4
  191. package/dist/src/shared/reify.d.ts.map +1 -1
  192. package/dist/src/shared/reify.js +62 -4
  193. package/dist/src/shared/reify.js.map +1 -1
  194. package/dist/src/slice/breakdown/index.d.ts +27 -0
  195. package/dist/src/slice/breakdown/index.d.ts.map +1 -1
  196. package/dist/src/slice/breakdown/types.d.ts +27 -0
  197. package/dist/src/slice/breakdown/types.d.ts.map +1 -1
  198. package/dist/src/slice/cohort/index.d.ts +54 -0
  199. package/dist/src/slice/cohort/index.d.ts.map +1 -1
  200. package/dist/src/slice/cohort/types.d.ts +27 -0
  201. package/dist/src/slice/cohort/types.d.ts.map +1 -1
  202. package/dist/src/slice/filter/index.d.ts +27 -0
  203. package/dist/src/slice/filter/index.d.ts.map +1 -1
  204. package/dist/src/slice/filter/types.d.ts +27 -0
  205. package/dist/src/slice/filter/types.d.ts.map +1 -1
  206. package/dist/src/slice/index.d.ts +405 -0
  207. package/dist/src/slice/index.d.ts.map +1 -1
  208. package/dist/src/slice/legend/index.d.ts +27 -0
  209. package/dist/src/slice/legend/index.d.ts.map +1 -1
  210. package/dist/src/slice/legend/types.d.ts +27 -0
  211. package/dist/src/slice/legend/types.d.ts.map +1 -1
  212. package/dist/src/slice/range/index.d.ts +60 -18
  213. package/dist/src/slice/range/index.d.ts.map +1 -1
  214. package/dist/src/slice/range/index.js +9 -1
  215. package/dist/src/slice/range/index.js.map +1 -1
  216. package/dist/src/slice/range/types.d.ts +63 -22
  217. package/dist/src/slice/range/types.d.ts.map +1 -1
  218. package/dist/src/slice/range/types.js +12 -5
  219. package/dist/src/slice/range/types.js.map +1 -1
  220. package/dist/src/slice/search/index.d.ts +27 -0
  221. package/dist/src/slice/search/index.d.ts.map +1 -1
  222. package/dist/src/slice/search/types.d.ts +27 -0
  223. package/dist/src/slice/search/types.d.ts.map +1 -1
  224. package/dist/src/slice/summary/index.d.ts +27 -0
  225. package/dist/src/slice/summary/index.d.ts.map +1 -1
  226. package/dist/src/slice/summary/types.d.ts +27 -0
  227. package/dist/src/slice/summary/types.d.ts.map +1 -1
  228. package/dist/src/style/content.d.ts +4 -6
  229. package/dist/src/style/content.d.ts.map +1 -1
  230. package/dist/src/style/content.js +4 -6
  231. package/dist/src/style/content.js.map +1 -1
  232. package/dist/src/style/scheme.js +1 -1
  233. package/dist/src/style/scheme.js.map +1 -1
  234. package/dist/test/collections/index.d.ts +2 -2
  235. package/dist/test/collections/index.d.ts.map +1 -1
  236. package/dist/test/collections/index.js +2 -2
  237. package/dist/test/collections/index.js.map +1 -1
  238. package/dist/test/collections/paged-source.examples.d.ts +9 -0
  239. package/dist/test/collections/paged-source.examples.d.ts.map +1 -0
  240. package/dist/test/collections/paged-source.examples.js +136 -0
  241. package/dist/test/collections/paged-source.examples.js.map +1 -0
  242. package/dist/test/collections/plan.examples.d.ts +125 -0
  243. package/dist/test/collections/plan.examples.d.ts.map +1 -0
  244. package/dist/test/collections/plan.examples.js +2939 -0
  245. package/dist/test/collections/plan.examples.js.map +1 -0
  246. package/dist/test/contracts/pick.examples.d.ts +6 -0
  247. package/dist/test/contracts/pick.examples.d.ts.map +1 -0
  248. package/dist/test/contracts/pick.examples.js +89 -0
  249. package/dist/test/contracts/pick.examples.js.map +1 -0
  250. package/dist/test/layout/dock.examples.d.ts +4 -4
  251. package/dist/test/layout/dock.examples.d.ts.map +1 -1
  252. package/dist/test/layout/dock.examples.js +34 -16
  253. package/dist/test/layout/dock.examples.js.map +1 -1
  254. package/dist/test/slice/slice.examples.d.ts +2 -1
  255. package/dist/test/slice/slice.examples.d.ts.map +1 -1
  256. package/dist/test/slice/slice.examples.js +67 -9
  257. package/dist/test/slice/slice.examples.js.map +1 -1
  258. package/package.json +3 -3
  259. package/dist/src/collections/gantt/index.d.ts +0 -377
  260. package/dist/src/collections/gantt/index.d.ts.map +0 -1
  261. package/dist/src/collections/gantt/index.js +0 -896
  262. package/dist/src/collections/gantt/index.js.map +0 -1
  263. package/dist/src/collections/gantt/types.d.ts +0 -353
  264. package/dist/src/collections/gantt/types.d.ts.map +0 -1
  265. package/dist/src/collections/gantt/types.js +0 -207
  266. package/dist/src/collections/gantt/types.js.map +0 -1
  267. package/dist/src/collections/planner/index.d.ts +0 -624
  268. package/dist/src/collections/planner/index.d.ts.map +0 -1
  269. package/dist/src/collections/planner/index.js +0 -941
  270. package/dist/src/collections/planner/index.js.map +0 -1
  271. package/dist/src/collections/planner/types.d.ts +0 -615
  272. package/dist/src/collections/planner/types.d.ts.map +0 -1
  273. package/dist/src/collections/planner/types.js +0 -423
  274. package/dist/src/collections/planner/types.js.map +0 -1
  275. package/dist/src/layout/aligned-stack/index.d.ts +0 -101
  276. package/dist/src/layout/aligned-stack/index.d.ts.map +0 -1
  277. package/dist/src/layout/aligned-stack/index.js +0 -105
  278. package/dist/src/layout/aligned-stack/index.js.map +0 -1
  279. package/dist/src/layout/aligned-stack/types.d.ts +0 -50
  280. package/dist/src/layout/aligned-stack/types.d.ts.map +0 -1
  281. package/dist/src/layout/aligned-stack/types.js +0 -24
  282. package/dist/src/layout/aligned-stack/types.js.map +0 -1
  283. package/dist/src/runtime/collections/gantt.d.ts +0 -67
  284. package/dist/src/runtime/collections/gantt.d.ts.map +0 -1
  285. package/dist/src/runtime/collections/gantt.js +0 -58
  286. package/dist/src/runtime/collections/gantt.js.map +0 -1
  287. package/dist/src/runtime/collections/planner.d.ts +0 -80
  288. package/dist/src/runtime/collections/planner.d.ts.map +0 -1
  289. package/dist/src/runtime/collections/planner.js +0 -76
  290. package/dist/src/runtime/collections/planner.js.map +0 -1
  291. package/dist/src/runtime/layout/aligned-stack.d.ts +0 -38
  292. package/dist/src/runtime/layout/aligned-stack.d.ts.map +0 -1
  293. package/dist/src/runtime/layout/aligned-stack.js +0 -36
  294. package/dist/src/runtime/layout/aligned-stack.js.map +0 -1
  295. package/dist/test/collections/gantt.examples.d.ts +0 -33
  296. package/dist/test/collections/gantt.examples.d.ts.map +0 -1
  297. package/dist/test/collections/gantt.examples.js +0 -359
  298. package/dist/test/collections/gantt.examples.js.map +0 -1
  299. package/dist/test/collections/planner.examples.d.ts +0 -47
  300. package/dist/test/collections/planner.examples.d.ts.map +0 -1
  301. package/dist/test/collections/planner.examples.js +0 -546
  302. package/dist/test/collections/planner.examples.js.map +0 -1
  303. package/dist/test/layout/aligned-stack.examples.d.ts +0 -25
  304. package/dist/test/layout/aligned-stack.examples.d.ts.map +0 -1
  305. package/dist/test/layout/aligned-stack.examples.js +0 -294
  306. package/dist/test/layout/aligned-stack.examples.js.map +0 -1
@@ -0,0 +1,705 @@
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
+ * The PICK contract (#590) — which of a component's declared things are shown.
7
+ *
8
+ * A Plan picks row series, a Table would pick columns, a Chart layers. The
9
+ * operation is the same one every time: a library of identified things, some
10
+ * switched off, the survivors fed back to the component. This module is the one
11
+ * place that vocabulary is spelled; `Pick.Panel` renders it and never imports a
12
+ * component, exactly as `Slice.Rail` mounts anywhere.
13
+ *
14
+ * # Why it splits in two
15
+ *
16
+ * A `UIComponentType` arm must be a CLOSED East type, so the panel cannot ride
17
+ * a generic. That is not a stylistic call — it is why {@link SliceLegendType}
18
+ * carries `SliceBindType` and not `SliceBindType<T>`. Pick therefore splits at
19
+ * exactly the point where the item type stops mattering:
20
+ *
21
+ * - {@link PickBindType} is NON-GENERIC — a key, a state binding, and a list of
22
+ * plain-data descriptors. It is the only part that enters the IR, so ONE
23
+ * panel arm serves every component that ever adopts this.
24
+ * - {@link PickHandleType} is the AUTHOR's handle, and never enters the IR.
25
+ * `I` rides STRUCTURALLY (in `all` and `id`), the way `C` rides in
26
+ * {@link PagedSourceType}'s `page` signature, so a handle bound to one item
27
+ * type is a compile error against a component expecting another.
28
+ *
29
+ * # Why no platform function
30
+ *
31
+ * `state` is literally {@link State.bind}'s `{read, write, has}` pinned at
32
+ * {@link PickStateType}. Pick declares nothing of its own, so it needs neither
33
+ * of the two re-export hops in `east-ui-components` nor the two hard-coded
34
+ * arrays in `e3-ui-components` — the documented "ships broken while tests pass"
35
+ * trap. It also means {@link Pick.active} is provable in a plain `describeEast`
36
+ * spec rather than only in a browser.
37
+ *
38
+ * # Why the state is what is HIDDEN
39
+ *
40
+ * Storing the active list looks equivalent and is not: a thing the author adds
41
+ * in a later release is absent from every user's persisted state, so it
42
+ * silently never appears. Storing what is switched OFF means new arrivals show
43
+ * by default and only explicit removals persist — the same reason `Slice`
44
+ * stores `visible: Option<Set>` with `none` meaning all, minus the `Option`,
45
+ * because an empty HIDDEN list is unambiguous where an empty VISIBLE set is not.
46
+ *
47
+ * # What this contract deliberately does NOT do
48
+ *
49
+ * It does not ORDER. On a key-ordered surface there is nothing for an order to
50
+ * order: a Plan's rows sit in canonical KEY order (`PlanRowsCollectionType` is
51
+ * a `Dict`, and `applySeries` unions with LAST_WINS), so a series' position in
52
+ * the list resolves key collisions and never row position. The panel's own list
53
+ * order is already `all`'s array order. Ordering becomes real for an adopter
54
+ * whose collection is positional — a Table's columns — and belongs to that
55
+ * adopter, not here.
56
+ *
57
+ * @packageDocumentation
58
+ */
59
+ import { type EastType, type ExprType, type SubtypeExprOrValue, ArrayType, BooleanType, FunctionType, IntegerType, NullType, OptionType, StringType, StructType } from "@elaraai/east";
60
+ import { IconType } from "../display/icon/types.js";
61
+ /**
62
+ * The pick state — the ids switched OFF. An empty list shows everything.
63
+ *
64
+ * @remarks
65
+ * Deliberately the hidden ids rather than the active ones, and deliberately a
66
+ * bare `Array<String>` rather than a struct: there is exactly one fact to
67
+ * store. See this module's overview for why hidden beats active.
68
+ *
69
+ * Duplicates are harmless ({@link Pick.active} tests membership through a set)
70
+ * and an id that no longer names anything is ignored, so persisted state
71
+ * survives an author renaming or removing an item.
72
+ */
73
+ export declare const PickStateType: ArrayType<StringType>;
74
+ /** Type alias for {@link PickStateType}. */
75
+ export type PickStateType = typeof PickStateType;
76
+ /**
77
+ * One pickable thing as the PANEL sees it — plain data, no item type.
78
+ *
79
+ * @remarks
80
+ * This is the whole of what a panel can render, which is what keeps the panel
81
+ * component-agnostic: it never learns what a "series" or a "column" is.
82
+ *
83
+ * @property id - Stable identity — what the state addresses and what `id` returns; must be unique across the list
84
+ * @property title - The name a user reads (`"Machine jobs"`)
85
+ * @property subtitle - The muted role line (`"one row per machine"`); `none` ⇒ one-line row
86
+ * @property icon - The leading glyph; `none` ⇒ the panel prints no icon
87
+ * @property count - How many things this yields (`"24 rs"`); `none` ⇒ no count printed, which is what a paged source must say
88
+ * @property narrowed - `true` ⇒ the count is a NARROWED count, printed in the brand with a dot
89
+ */
90
+ export declare const PickItemType: StructType<{
91
+ readonly id: StringType;
92
+ readonly title: StringType;
93
+ readonly subtitle: OptionType<StringType>;
94
+ readonly icon: OptionType<StructType<{
95
+ readonly name: StringType;
96
+ readonly prefix: StringType;
97
+ readonly label: OptionType<StringType>;
98
+ readonly style: OptionType<StructType<{
99
+ readonly size: OptionType<import("@elaraai/east").VariantType<{
100
+ readonly xs: NullType;
101
+ readonly sm: NullType;
102
+ readonly md: NullType;
103
+ readonly lg: NullType;
104
+ readonly xl: NullType;
105
+ readonly "2xl": NullType;
106
+ }>>;
107
+ readonly variant: OptionType<import("@elaraai/east").VariantType<{
108
+ readonly solid: NullType;
109
+ readonly regular: NullType;
110
+ readonly light: NullType;
111
+ readonly thin: NullType;
112
+ readonly brands: NullType;
113
+ }>>;
114
+ readonly color: OptionType<StringType>;
115
+ readonly background: OptionType<StringType>;
116
+ readonly colorPalette: OptionType<import("@elaraai/east").VariantType<{
117
+ readonly brand: NullType;
118
+ readonly gray: NullType;
119
+ readonly red: NullType;
120
+ readonly orange: NullType;
121
+ readonly yellow: NullType;
122
+ readonly green: NullType;
123
+ readonly teal: NullType;
124
+ readonly blue: NullType;
125
+ readonly cyan: NullType;
126
+ readonly purple: NullType;
127
+ readonly pink: NullType;
128
+ readonly success: NullType;
129
+ readonly warning: NullType;
130
+ readonly danger: NullType;
131
+ readonly info: NullType;
132
+ readonly neutral: NullType;
133
+ }>>;
134
+ readonly opacity: OptionType<import("@elaraai/east").FloatType>;
135
+ readonly borderRadius: OptionType<StringType>;
136
+ readonly overflow: OptionType<import("@elaraai/east").VariantType<{
137
+ readonly visible: NullType;
138
+ readonly hidden: NullType;
139
+ readonly scroll: NullType;
140
+ readonly auto: NullType;
141
+ }>>;
142
+ readonly overflowX: OptionType<import("@elaraai/east").VariantType<{
143
+ readonly visible: NullType;
144
+ readonly hidden: NullType;
145
+ readonly scroll: NullType;
146
+ readonly auto: NullType;
147
+ }>>;
148
+ readonly overflowY: OptionType<import("@elaraai/east").VariantType<{
149
+ readonly visible: NullType;
150
+ readonly hidden: NullType;
151
+ readonly scroll: NullType;
152
+ readonly auto: NullType;
153
+ }>>;
154
+ readonly width: OptionType<StringType>;
155
+ readonly height: OptionType<StringType>;
156
+ readonly minWidth: OptionType<StringType>;
157
+ readonly minHeight: OptionType<StringType>;
158
+ readonly maxWidth: OptionType<StringType>;
159
+ readonly maxHeight: OptionType<StringType>;
160
+ readonly padding: OptionType<StructType<{
161
+ readonly top: OptionType<StringType>;
162
+ readonly right: OptionType<StringType>;
163
+ readonly bottom: OptionType<StringType>;
164
+ readonly left: OptionType<StringType>;
165
+ }>>;
166
+ readonly margin: OptionType<StructType<{
167
+ readonly top: OptionType<StringType>;
168
+ readonly right: OptionType<StringType>;
169
+ readonly bottom: OptionType<StringType>;
170
+ readonly left: OptionType<StringType>;
171
+ }>>;
172
+ }>>;
173
+ }>>;
174
+ readonly count: OptionType<IntegerType>;
175
+ readonly narrowed: BooleanType;
176
+ }>;
177
+ /** Type alias for {@link PickItemType}. */
178
+ export type PickItemType = typeof PickItemType;
179
+ /**
180
+ * The state binding a pick carries — EXACTLY {@link State.bind}'s return type,
181
+ * pinned at {@link PickStateType}.
182
+ *
183
+ * @remarks
184
+ * Field order matters and is `read` / `write` / `has`, because East struct
185
+ * subtyping is exact — same arity, same names, same order. Declaring it here
186
+ * rather than re-deriving it means a change to `State.bind`'s shape fails this
187
+ * file's build rather than something downstream.
188
+ *
189
+ * Nothing bespoke is introduced: per #106 a bind handle's methods are
190
+ * IR-bearing East functions over plain-data primitives, so a pick handle is
191
+ * ordinary serializable East data and `decodeBeast2For({ platform })` re-binds
192
+ * it to the decoder's store.
193
+ *
194
+ * @property read - The current state; TRACKS the key, so it belongs in a reactive evaluation
195
+ * @property write - Replace the state
196
+ * @property has - Whether the key is set
197
+ */
198
+ export declare const PickStateHandleType: StructType<{
199
+ readonly read: FunctionType<[], ArrayType<StringType>>;
200
+ readonly write: FunctionType<[ArrayType<StringType>], NullType>;
201
+ readonly has: FunctionType<[], BooleanType>;
202
+ }>;
203
+ /** Type alias for {@link PickStateHandleType}. */
204
+ export type PickStateHandleType = typeof PickStateHandleType;
205
+ /**
206
+ * THE CONTRACT — what a panel stores and what any component's IR may hold.
207
+ *
208
+ * @remarks
209
+ * Non-generic by construction, so it embeds directly in a `UIComponentType`
210
+ * arm. A renderer needs nothing else: `key` to self-subscribe, `state` to read
211
+ * and write, `items` to draw.
212
+ *
213
+ * `items` is an EXPRESSION (`all.map(describe)`), not a build-time snapshot, so
214
+ * a count derived from data re-evaluates every reactive frame instead of
215
+ * freezing at authoring time.
216
+ *
217
+ * @property key - The store key; renderers self-subscribe on it, like `SliceBindType.key`
218
+ * @property state - The {@link PickStateHandleType} binding
219
+ * @property items - Every pickable thing, in declaration order
220
+ */
221
+ export declare const PickBindType: StructType<{
222
+ readonly key: StringType;
223
+ readonly state: StructType<{
224
+ readonly read: FunctionType<[], ArrayType<StringType>>;
225
+ readonly write: FunctionType<[ArrayType<StringType>], NullType>;
226
+ readonly has: FunctionType<[], BooleanType>;
227
+ }>;
228
+ readonly items: ArrayType<StructType<{
229
+ readonly id: StringType;
230
+ readonly title: StringType;
231
+ readonly subtitle: OptionType<StringType>;
232
+ readonly icon: OptionType<StructType<{
233
+ readonly name: StringType;
234
+ readonly prefix: StringType;
235
+ readonly label: OptionType<StringType>;
236
+ readonly style: OptionType<StructType<{
237
+ readonly size: OptionType<import("@elaraai/east").VariantType<{
238
+ readonly xs: NullType;
239
+ readonly sm: NullType;
240
+ readonly md: NullType;
241
+ readonly lg: NullType;
242
+ readonly xl: NullType;
243
+ readonly "2xl": NullType;
244
+ }>>;
245
+ readonly variant: OptionType<import("@elaraai/east").VariantType<{
246
+ readonly solid: NullType;
247
+ readonly regular: NullType;
248
+ readonly light: NullType;
249
+ readonly thin: NullType;
250
+ readonly brands: NullType;
251
+ }>>;
252
+ readonly color: OptionType<StringType>;
253
+ readonly background: OptionType<StringType>;
254
+ readonly colorPalette: OptionType<import("@elaraai/east").VariantType<{
255
+ readonly brand: NullType;
256
+ readonly gray: NullType;
257
+ readonly red: NullType;
258
+ readonly orange: NullType;
259
+ readonly yellow: NullType;
260
+ readonly green: NullType;
261
+ readonly teal: NullType;
262
+ readonly blue: NullType;
263
+ readonly cyan: NullType;
264
+ readonly purple: NullType;
265
+ readonly pink: NullType;
266
+ readonly success: NullType;
267
+ readonly warning: NullType;
268
+ readonly danger: NullType;
269
+ readonly info: NullType;
270
+ readonly neutral: NullType;
271
+ }>>;
272
+ readonly opacity: OptionType<import("@elaraai/east").FloatType>;
273
+ readonly borderRadius: OptionType<StringType>;
274
+ readonly overflow: OptionType<import("@elaraai/east").VariantType<{
275
+ readonly visible: NullType;
276
+ readonly hidden: NullType;
277
+ readonly scroll: NullType;
278
+ readonly auto: NullType;
279
+ }>>;
280
+ readonly overflowX: OptionType<import("@elaraai/east").VariantType<{
281
+ readonly visible: NullType;
282
+ readonly hidden: NullType;
283
+ readonly scroll: NullType;
284
+ readonly auto: NullType;
285
+ }>>;
286
+ readonly overflowY: OptionType<import("@elaraai/east").VariantType<{
287
+ readonly visible: NullType;
288
+ readonly hidden: NullType;
289
+ readonly scroll: NullType;
290
+ readonly auto: NullType;
291
+ }>>;
292
+ readonly width: OptionType<StringType>;
293
+ readonly height: OptionType<StringType>;
294
+ readonly minWidth: OptionType<StringType>;
295
+ readonly minHeight: OptionType<StringType>;
296
+ readonly maxWidth: OptionType<StringType>;
297
+ readonly maxHeight: OptionType<StringType>;
298
+ readonly padding: OptionType<StructType<{
299
+ readonly top: OptionType<StringType>;
300
+ readonly right: OptionType<StringType>;
301
+ readonly bottom: OptionType<StringType>;
302
+ readonly left: OptionType<StringType>;
303
+ }>>;
304
+ readonly margin: OptionType<StructType<{
305
+ readonly top: OptionType<StringType>;
306
+ readonly right: OptionType<StringType>;
307
+ readonly bottom: OptionType<StringType>;
308
+ readonly left: OptionType<StringType>;
309
+ }>>;
310
+ }>>;
311
+ }>>;
312
+ readonly count: OptionType<IntegerType>;
313
+ readonly narrowed: BooleanType;
314
+ }>>;
315
+ }>;
316
+ /** Type alias for {@link PickBindType}. */
317
+ export type PickBindType = typeof PickBindType;
318
+ /**
319
+ * The `Pick.Panel` component payload — the contract plus the author's noun.
320
+ *
321
+ * @remarks
322
+ * Defined HERE rather than inline in `component.ts` because it carries no
323
+ * `UIComponentType`: only arms that need the recursion `node` for children have
324
+ * to be written inline (and then hand-synced). `SliceLegendType` is legal as a
325
+ * single shared export for exactly the same reason, and this follows it.
326
+ *
327
+ * `persist` is deliberately absent. The slice's storage vocabulary
328
+ * (`SlicePersistType`) lives in `platform/slice`, which imports FROM
329
+ * `contracts/` — referencing it here would close an import cycle. Persistence
330
+ * beyond the store's own lifetime is a separate decision, made where the
331
+ * dependency runs the right way.
332
+ *
333
+ * @property pick - The bound contract ({@link PickBindType})
334
+ * @property title - The author's noun for the collection ("Series" / "Columns")
335
+ */
336
+ export declare const PickPanelType: StructType<{
337
+ readonly pick: StructType<{
338
+ readonly key: StringType;
339
+ readonly state: StructType<{
340
+ readonly read: FunctionType<[], ArrayType<StringType>>;
341
+ readonly write: FunctionType<[ArrayType<StringType>], NullType>;
342
+ readonly has: FunctionType<[], BooleanType>;
343
+ }>;
344
+ readonly items: ArrayType<StructType<{
345
+ readonly id: StringType;
346
+ readonly title: StringType;
347
+ readonly subtitle: OptionType<StringType>;
348
+ readonly icon: OptionType<StructType<{
349
+ readonly name: StringType;
350
+ readonly prefix: StringType;
351
+ readonly label: OptionType<StringType>;
352
+ readonly style: OptionType<StructType<{
353
+ readonly size: OptionType<import("@elaraai/east").VariantType<{
354
+ readonly xs: NullType;
355
+ readonly sm: NullType;
356
+ readonly md: NullType;
357
+ readonly lg: NullType;
358
+ readonly xl: NullType;
359
+ readonly "2xl": NullType;
360
+ }>>;
361
+ readonly variant: OptionType<import("@elaraai/east").VariantType<{
362
+ readonly solid: NullType;
363
+ readonly regular: NullType;
364
+ readonly light: NullType;
365
+ readonly thin: NullType;
366
+ readonly brands: NullType;
367
+ }>>;
368
+ readonly color: OptionType<StringType>;
369
+ readonly background: OptionType<StringType>;
370
+ readonly colorPalette: OptionType<import("@elaraai/east").VariantType<{
371
+ readonly brand: NullType;
372
+ readonly gray: NullType;
373
+ readonly red: NullType;
374
+ readonly orange: NullType;
375
+ readonly yellow: NullType;
376
+ readonly green: NullType;
377
+ readonly teal: NullType;
378
+ readonly blue: NullType;
379
+ readonly cyan: NullType;
380
+ readonly purple: NullType;
381
+ readonly pink: NullType;
382
+ readonly success: NullType;
383
+ readonly warning: NullType;
384
+ readonly danger: NullType;
385
+ readonly info: NullType;
386
+ readonly neutral: NullType;
387
+ }>>;
388
+ readonly opacity: OptionType<import("@elaraai/east").FloatType>;
389
+ readonly borderRadius: OptionType<StringType>;
390
+ readonly overflow: OptionType<import("@elaraai/east").VariantType<{
391
+ readonly visible: NullType;
392
+ readonly hidden: NullType;
393
+ readonly scroll: NullType;
394
+ readonly auto: NullType;
395
+ }>>;
396
+ readonly overflowX: OptionType<import("@elaraai/east").VariantType<{
397
+ readonly visible: NullType;
398
+ readonly hidden: NullType;
399
+ readonly scroll: NullType;
400
+ readonly auto: NullType;
401
+ }>>;
402
+ readonly overflowY: OptionType<import("@elaraai/east").VariantType<{
403
+ readonly visible: NullType;
404
+ readonly hidden: NullType;
405
+ readonly scroll: NullType;
406
+ readonly auto: NullType;
407
+ }>>;
408
+ readonly width: OptionType<StringType>;
409
+ readonly height: OptionType<StringType>;
410
+ readonly minWidth: OptionType<StringType>;
411
+ readonly minHeight: OptionType<StringType>;
412
+ readonly maxWidth: OptionType<StringType>;
413
+ readonly maxHeight: OptionType<StringType>;
414
+ readonly padding: OptionType<StructType<{
415
+ readonly top: OptionType<StringType>;
416
+ readonly right: OptionType<StringType>;
417
+ readonly bottom: OptionType<StringType>;
418
+ readonly left: OptionType<StringType>;
419
+ }>>;
420
+ readonly margin: OptionType<StructType<{
421
+ readonly top: OptionType<StringType>;
422
+ readonly right: OptionType<StringType>;
423
+ readonly bottom: OptionType<StringType>;
424
+ readonly left: OptionType<StringType>;
425
+ }>>;
426
+ }>>;
427
+ }>>;
428
+ readonly count: OptionType<IntegerType>;
429
+ readonly narrowed: BooleanType;
430
+ }>>;
431
+ }>;
432
+ readonly title: StringType;
433
+ }>;
434
+ /** Type alias for {@link PickPanelType}. */
435
+ export type PickPanelType = typeof PickPanelType;
436
+ /**
437
+ * The AUTHOR's handle — the contract plus the typed things it selects over.
438
+ *
439
+ * @remarks
440
+ * Never enters the IR. `all` and `id` are what carry `I`, structurally, so the
441
+ * type flows from `Pick.bind` to `Pick.active` and back into the component
442
+ * without a phantom brand and without surviving into a closed arm.
443
+ *
444
+ * @typeParam I - The item type being picked over
445
+ * @param i - The item type value
446
+ * @returns The concrete `StructType` of a handle over `i`
447
+ *
448
+ * @property pick - The non-generic contract handed to {@link Pick.Panel}
449
+ * @property all - Every item that COULD show, in declaration order
450
+ * @property id - An item's stable id — the same one its {@link PickItemType} carries
451
+ */
452
+ export declare const PickHandleType: <I extends EastType>(i: I) => StructType<{
453
+ readonly pick: StructType<{
454
+ readonly key: StringType;
455
+ readonly state: StructType<{
456
+ readonly read: FunctionType<[], ArrayType<StringType>>;
457
+ readonly write: FunctionType<[ArrayType<StringType>], NullType>;
458
+ readonly has: FunctionType<[], BooleanType>;
459
+ }>;
460
+ readonly items: ArrayType<StructType<{
461
+ readonly id: StringType;
462
+ readonly title: StringType;
463
+ readonly subtitle: OptionType<StringType>;
464
+ readonly icon: OptionType<StructType<{
465
+ readonly name: StringType;
466
+ readonly prefix: StringType;
467
+ readonly label: OptionType<StringType>;
468
+ readonly style: OptionType<StructType<{
469
+ readonly size: OptionType<import("@elaraai/east").VariantType<{
470
+ readonly xs: NullType;
471
+ readonly sm: NullType;
472
+ readonly md: NullType;
473
+ readonly lg: NullType;
474
+ readonly xl: NullType;
475
+ readonly "2xl": NullType;
476
+ }>>;
477
+ readonly variant: OptionType<import("@elaraai/east").VariantType<{
478
+ readonly solid: NullType;
479
+ readonly regular: NullType;
480
+ readonly light: NullType;
481
+ readonly thin: NullType;
482
+ readonly brands: NullType;
483
+ }>>;
484
+ readonly color: OptionType<StringType>;
485
+ readonly background: OptionType<StringType>;
486
+ readonly colorPalette: OptionType<import("@elaraai/east").VariantType<{
487
+ readonly brand: NullType;
488
+ readonly gray: NullType;
489
+ readonly red: NullType;
490
+ readonly orange: NullType;
491
+ readonly yellow: NullType;
492
+ readonly green: NullType;
493
+ readonly teal: NullType;
494
+ readonly blue: NullType;
495
+ readonly cyan: NullType;
496
+ readonly purple: NullType;
497
+ readonly pink: NullType;
498
+ readonly success: NullType;
499
+ readonly warning: NullType;
500
+ readonly danger: NullType;
501
+ readonly info: NullType;
502
+ readonly neutral: NullType;
503
+ }>>;
504
+ readonly opacity: OptionType<import("@elaraai/east").FloatType>;
505
+ readonly borderRadius: OptionType<StringType>;
506
+ readonly overflow: OptionType<import("@elaraai/east").VariantType<{
507
+ readonly visible: NullType;
508
+ readonly hidden: NullType;
509
+ readonly scroll: NullType;
510
+ readonly auto: NullType;
511
+ }>>;
512
+ readonly overflowX: OptionType<import("@elaraai/east").VariantType<{
513
+ readonly visible: NullType;
514
+ readonly hidden: NullType;
515
+ readonly scroll: NullType;
516
+ readonly auto: NullType;
517
+ }>>;
518
+ readonly overflowY: OptionType<import("@elaraai/east").VariantType<{
519
+ readonly visible: NullType;
520
+ readonly hidden: NullType;
521
+ readonly scroll: NullType;
522
+ readonly auto: NullType;
523
+ }>>;
524
+ readonly width: OptionType<StringType>;
525
+ readonly height: OptionType<StringType>;
526
+ readonly minWidth: OptionType<StringType>;
527
+ readonly minHeight: OptionType<StringType>;
528
+ readonly maxWidth: OptionType<StringType>;
529
+ readonly maxHeight: OptionType<StringType>;
530
+ readonly padding: OptionType<StructType<{
531
+ readonly top: OptionType<StringType>;
532
+ readonly right: OptionType<StringType>;
533
+ readonly bottom: OptionType<StringType>;
534
+ readonly left: OptionType<StringType>;
535
+ }>>;
536
+ readonly margin: OptionType<StructType<{
537
+ readonly top: OptionType<StringType>;
538
+ readonly right: OptionType<StringType>;
539
+ readonly bottom: OptionType<StringType>;
540
+ readonly left: OptionType<StringType>;
541
+ }>>;
542
+ }>>;
543
+ }>>;
544
+ readonly count: OptionType<IntegerType>;
545
+ readonly narrowed: BooleanType;
546
+ }>>;
547
+ }>;
548
+ readonly all: ArrayType<I>;
549
+ readonly id: FunctionType<[I], StringType>;
550
+ }>;
551
+ /**
552
+ * The TypeScript type of a {@link PickHandleType} over item type `I`.
553
+ *
554
+ * @typeParam I - The item type being picked over
555
+ */
556
+ export type PickHandle<I extends EastType> = ExprType<ReturnType<typeof PickHandleType<I>>>;
557
+ /**
558
+ * How one item describes itself to the panel — the accessors {@link Pick.bind}
559
+ * reifies.
560
+ *
561
+ * @remarks
562
+ * `id` and `title` are required because a thing with no identity cannot be
563
+ * persisted and a thing with no name cannot be offered to a user. Everything
564
+ * else is presentation the panel degrades gracefully without.
565
+ *
566
+ * @typeParam I - The item type being picked over
567
+ */
568
+ export interface PickOptions<I extends EastType> {
569
+ /**
570
+ * The item's stable id — what the state addresses.
571
+ *
572
+ * @remarks
573
+ * Must be UNIQUE across `all`. The hidden set is a list of ids, so two
574
+ * items sharing one are a single switch wearing two labels: toggling either
575
+ * hides both, and a persisted id cannot say which was meant. `Pick.Panel`
576
+ * reports a duplicate in development rather than resolving it — dropping
577
+ * one would silently remove an item that is still in the FEED, since
578
+ * {@link Pick.active} filters the item list rather than the descriptors.
579
+ */
580
+ id: (item: ExprType<I>) => SubtypeExprOrValue<StringType>;
581
+ /** The name a user reads. */
582
+ title: (item: ExprType<I>) => SubtypeExprOrValue<StringType>;
583
+ /** The muted role line — return the field's `Option`. */
584
+ subtitle?: (item: ExprType<I>) => SubtypeExprOrValue<OptionType<StringType>>;
585
+ /** The leading glyph — return the field's `Option`. */
586
+ icon?: (item: ExprType<I>) => SubtypeExprOrValue<OptionType<IconType>>;
587
+ /** How many things this item yields — return the field's `Option`; `none` when the source is paged and cannot know. */
588
+ count?: (item: ExprType<I>) => SubtypeExprOrValue<OptionType<IntegerType>>;
589
+ /** `true` ⇒ the count is a narrowed count. */
590
+ narrowed?: (item: ExprType<I>) => SubtypeExprOrValue<BooleanType>;
591
+ /** Ids switched off to begin with; omit ⇒ everything shows. */
592
+ hidden?: readonly string[];
593
+ }
594
+ /**
595
+ * Build a {@link PickStateType} seed.
596
+ *
597
+ * @param hidden - The ids switched off; omit ⇒ everything shows
598
+ * @returns The state expression
599
+ *
600
+ * @example
601
+ * ```ts
602
+ * Pick.state() // everything shows
603
+ * Pick.state(["crew"]) // "crew" starts switched off
604
+ * ```
605
+ */
606
+ export declare function createPickState(hidden?: readonly string[]): ExprType<PickStateType>;
607
+ /**
608
+ * Bind a list of things to a persisted pick.
609
+ *
610
+ * @remarks
611
+ * Takes NO item-type argument — `I` is already carried by `all`, recovered with
612
+ * the `Expr.type` idiom, so the call reads the way the author thinks about it.
613
+ *
614
+ * The accessors are REIFIED once into a single describe function which the map
615
+ * then CALLS, per the factory rule (`shared/reify.ts`, `EAST_UI_PROP_PATTERNS.md`)
616
+ * — never invoked mid-map with their expression trees spliced in.
617
+ *
618
+ * Bind exactly ONCE, in the same reactive evaluation that mounts both the panel
619
+ * and the component. A `Reactive.Root` body is a free function and cannot
620
+ * capture a `$.let` handle from an enclosing scope, so a panel that is its own
621
+ * root would need its own bind — two binds on one key work (they share the
622
+ * store) but must be given identical item lists, or the two surfaces disagree
623
+ * about what exists.
624
+ *
625
+ * @typeParam I - The item type being picked over
626
+ * @param key - The store key; also the persistence key
627
+ * @param all - Every item that COULD show — an expression of `Array<I>`
628
+ * @param options - The per-item accessors and the seed ({@link PickOptions})
629
+ * @returns A {@link PickHandleType} over `I`
630
+ *
631
+ * @example
632
+ * ```tsx
633
+ * const shown = $.let(Pick.bind("orders.cols", cols, {
634
+ * id: c => c.key,
635
+ * title: c => c.header,
636
+ * hidden: ["price"],
637
+ * }));
638
+ *
639
+ * <Pick.Panel value={shown} title="Columns" />
640
+ * <Table data={orders} columns={Pick.active(shown)} />
641
+ * ```
642
+ */
643
+ /**
644
+ * The library entries alone — every item described, with NO state binding.
645
+ *
646
+ * @remarks
647
+ * {@link Pick.bind} builds `items` with exactly this call, so proving one
648
+ * proves the other. It is split out for the same reason {@link pickVisible} is:
649
+ * `State.bind` is not runnable in a `describeEast` spec, and the descriptor
650
+ * derivation — identity, icons, counts — is the part worth testing.
651
+ *
652
+ * Useful in its own right when a host wants to render its own list rather than
653
+ * mount `Pick.Panel`.
654
+ *
655
+ * @typeParam I - The item type being picked over
656
+ * @param all - Every item that COULD show
657
+ * @param options - The per-item accessors ({@link PickOptions})
658
+ * @returns The descriptors, in declaration order
659
+ */
660
+ export declare function pickItems<I extends EastType>(all: SubtypeExprOrValue<ArrayType<I>>, options: PickOptions<I>): ExprType<ArrayType<PickItemType>>;
661
+ export declare function createPickBind<I extends EastType>(key: string, all: SubtypeExprOrValue<ArrayType<I>>, options: PickOptions<I>): PickHandle<I>;
662
+ /**
663
+ * The items still switched on, in DECLARATION order — the feed a component takes.
664
+ *
665
+ * @remarks
666
+ * The twin of `Slice.rows(...)`: one tracked read, one derivation, and the
667
+ * result is an ordinary expression the component's own prop already accepts.
668
+ * For a Plan that means `series={Pick.active(shown)}` needs no Plan change at
669
+ * all, because `PlanSeriesInput` already accepts the expression form.
670
+ *
671
+ * Declaration order, never the state's — see this module's overview. An id in
672
+ * the state that names nothing is ignored, so a rename or removal degrades to
673
+ * "shown" rather than to an error.
674
+ *
675
+ * Call this INSIDE the reactive evaluation that renders the component: the read
676
+ * is what registers the dependency that repaints on a toggle.
677
+ *
678
+ * @typeParam I - The item type being picked over
679
+ * @param handle - The handle from {@link Pick.bind}
680
+ * @returns The surviving items, as `Array<I>`
681
+ */
682
+ export declare function pickActive<I extends EastType>(handle: PickHandle<I>): ExprType<ArrayType<I>>;
683
+ /**
684
+ * The derivation on its own — items minus a hidden list, with NO state binding.
685
+ *
686
+ * @remarks
687
+ * {@link Pick.active} is this plus one tracked read, so proving this proves the
688
+ * shipped behaviour. It exists split out because the semantics are the part
689
+ * worth testing and `State.bind` is not runnable in a `describeEast` spec —
690
+ * `TestImpl` carries no State runtime (`test/platform/state.spec.ts` is
691
+ * compile-only for exactly this reason). Here the hidden list is a plain value,
692
+ * so the whole contract is provable with no platform function at all.
693
+ *
694
+ * Three behaviours it fixes, all of them things a bare `active` list gets
695
+ * wrong: declaration order is preserved, an id naming nothing is ignored, and
696
+ * an item absent from the list still shows.
697
+ *
698
+ * @typeParam I - The item type being picked over
699
+ * @param all - Every item that COULD show
700
+ * @param id - An item's stable id
701
+ * @param hidden - The ids switched off
702
+ * @returns The surviving items, in declaration order
703
+ */
704
+ export declare function pickVisible<I extends EastType>(all: SubtypeExprOrValue<ArrayType<I>>, id: SubtypeExprOrValue<FunctionType<[I], StringType>>, hidden: SubtypeExprOrValue<PickStateType>): ExprType<ArrayType<I>>;
705
+ //# sourceMappingURL=pick.d.ts.map