foldkit 0.100.1 → 0.102.0

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 (217) hide show
  1. package/README.md +3 -2
  2. package/dist/canvas/view.d.ts +1 -1
  3. package/dist/canvas/view.d.ts.map +1 -1
  4. package/dist/canvas/view.js +5 -5
  5. package/dist/command/index.d.ts +71 -0
  6. package/dist/command/index.d.ts.map +1 -1
  7. package/dist/command/index.js +34 -1
  8. package/dist/command/public.d.ts +1 -1
  9. package/dist/command/public.d.ts.map +1 -1
  10. package/dist/command/public.js +1 -1
  11. package/dist/devTools/overlay.d.ts.map +1 -1
  12. package/dist/devTools/overlay.js +156 -149
  13. package/dist/dom/dom.d.ts +8 -11
  14. package/dist/dom/dom.d.ts.map +1 -1
  15. package/dist/dom/dom.js +8 -11
  16. package/dist/dom/elementMovement.d.ts +1 -3
  17. package/dist/dom/elementMovement.d.ts.map +1 -1
  18. package/dist/dom/elementMovement.js +1 -3
  19. package/dist/dom/inert.d.ts +2 -4
  20. package/dist/dom/inert.d.ts.map +1 -1
  21. package/dist/dom/inert.js +2 -4
  22. package/dist/dom/scrollLock.d.ts +2 -2
  23. package/dist/dom/scrollLock.js +2 -2
  24. package/dist/dom/waitForAnimation.d.ts +1 -1
  25. package/dist/dom/waitForAnimation.js +1 -1
  26. package/dist/html/boundary.d.ts +98 -0
  27. package/dist/html/boundary.d.ts.map +1 -0
  28. package/dist/html/boundary.js +176 -0
  29. package/dist/html/childAttribute.d.ts +44 -0
  30. package/dist/html/childAttribute.d.ts.map +1 -0
  31. package/dist/html/childAttribute.js +34 -0
  32. package/dist/html/index.d.ts +70 -23
  33. package/dist/html/index.d.ts.map +1 -1
  34. package/dist/html/index.js +639 -575
  35. package/dist/html/lazy.d.ts +12 -7
  36. package/dist/html/lazy.d.ts.map +1 -1
  37. package/dist/html/lazy.js +30 -11
  38. package/dist/html/public.d.ts +2 -2
  39. package/dist/html/public.d.ts.map +1 -1
  40. package/dist/html/public.js +1 -1
  41. package/dist/html/runtimeSingleton.d.ts +72 -0
  42. package/dist/html/runtimeSingleton.d.ts.map +1 -0
  43. package/dist/html/runtimeSingleton.js +112 -0
  44. package/dist/html/submodel.d.ts +98 -0
  45. package/dist/html/submodel.d.ts.map +1 -0
  46. package/dist/html/submodel.js +190 -0
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -0
  50. package/dist/render/render.d.ts +1 -1
  51. package/dist/render/render.js +1 -1
  52. package/dist/runtime/messagePriority.d.ts +5 -1
  53. package/dist/runtime/messagePriority.d.ts.map +1 -1
  54. package/dist/runtime/messagePriority.js +25 -4
  55. package/dist/runtime/runtime.d.ts +11 -11
  56. package/dist/runtime/runtime.d.ts.map +1 -1
  57. package/dist/runtime/runtime.js +118 -63
  58. package/dist/runtime/subscription.d.ts +139 -19
  59. package/dist/runtime/subscription.d.ts.map +1 -1
  60. package/dist/runtime/subscription.js +90 -9
  61. package/dist/submodel/public.d.ts +4 -0
  62. package/dist/submodel/public.d.ts.map +1 -0
  63. package/dist/submodel/public.js +1 -0
  64. package/dist/submodel/submodel.d.ts +32 -0
  65. package/dist/submodel/submodel.d.ts.map +1 -0
  66. package/dist/submodel/submodel.js +1 -0
  67. package/dist/subscription/animationFrame.d.ts +23 -26
  68. package/dist/subscription/animationFrame.d.ts.map +1 -1
  69. package/dist/subscription/animationFrame.js +17 -18
  70. package/dist/subscription/public.d.ts +2 -2
  71. package/dist/subscription/public.d.ts.map +1 -1
  72. package/dist/subscription/public.js +1 -1
  73. package/dist/test/apps/disabledButton.d.ts +4 -5
  74. package/dist/test/apps/disabledButton.d.ts.map +1 -1
  75. package/dist/test/apps/disabledButton.js +16 -16
  76. package/dist/test/scene.d.ts +8 -8
  77. package/dist/test/scene.d.ts.map +1 -1
  78. package/dist/test/scene.js +25 -13
  79. package/dist/test/story.d.ts +15 -8
  80. package/dist/test/story.d.ts.map +1 -1
  81. package/dist/test/story.js +21 -9
  82. package/dist/ui/animation/index.d.ts +30 -14
  83. package/dist/ui/animation/index.d.ts.map +1 -1
  84. package/dist/ui/animation/index.js +9 -19
  85. package/dist/ui/animation/public.d.ts +2 -2
  86. package/dist/ui/animation/public.d.ts.map +1 -1
  87. package/dist/ui/animation/public.js +1 -1
  88. package/dist/ui/calendar/index.d.ts +199 -84
  89. package/dist/ui/calendar/index.d.ts.map +1 -1
  90. package/dist/ui/calendar/index.js +129 -140
  91. package/dist/ui/calendar/public.d.ts +2 -2
  92. package/dist/ui/calendar/public.d.ts.map +1 -1
  93. package/dist/ui/calendar/public.js +1 -1
  94. package/dist/ui/checkbox/index.d.ts +93 -21
  95. package/dist/ui/checkbox/index.d.ts.map +1 -1
  96. package/dist/ui/checkbox/index.js +62 -33
  97. package/dist/ui/checkbox/public.d.ts +2 -2
  98. package/dist/ui/checkbox/public.d.ts.map +1 -1
  99. package/dist/ui/checkbox/public.js +1 -1
  100. package/dist/ui/combobox/multi.d.ts +35 -91
  101. package/dist/ui/combobox/multi.d.ts.map +1 -1
  102. package/dist/ui/combobox/multi.js +34 -17
  103. package/dist/ui/combobox/multiPublic.d.ts +2 -2
  104. package/dist/ui/combobox/multiPublic.d.ts.map +1 -1
  105. package/dist/ui/combobox/multiPublic.js +1 -1
  106. package/dist/ui/combobox/public.d.ts +3 -3
  107. package/dist/ui/combobox/public.d.ts.map +1 -1
  108. package/dist/ui/combobox/public.js +2 -2
  109. package/dist/ui/combobox/shared.d.ts +56 -31
  110. package/dist/ui/combobox/shared.d.ts.map +1 -1
  111. package/dist/ui/combobox/shared.js +333 -322
  112. package/dist/ui/combobox/single.d.ts +46 -93
  113. package/dist/ui/combobox/single.d.ts.map +1 -1
  114. package/dist/ui/combobox/single.js +44 -17
  115. package/dist/ui/datePicker/index.d.ts +256 -48
  116. package/dist/ui/datePicker/index.d.ts.map +1 -1
  117. package/dist/ui/datePicker/index.js +149 -104
  118. package/dist/ui/datePicker/public.d.ts +2 -2
  119. package/dist/ui/datePicker/public.d.ts.map +1 -1
  120. package/dist/ui/datePicker/public.js +1 -1
  121. package/dist/ui/dialog/index.d.ts +95 -39
  122. package/dist/ui/dialog/index.d.ts.map +1 -1
  123. package/dist/ui/dialog/index.js +71 -62
  124. package/dist/ui/dialog/public.d.ts +2 -2
  125. package/dist/ui/dialog/public.d.ts.map +1 -1
  126. package/dist/ui/dialog/public.js +1 -1
  127. package/dist/ui/disclosure/index.d.ts +71 -31
  128. package/dist/ui/disclosure/index.d.ts.map +1 -1
  129. package/dist/ui/disclosure/index.js +57 -62
  130. package/dist/ui/disclosure/public.d.ts +2 -2
  131. package/dist/ui/disclosure/public.d.ts.map +1 -1
  132. package/dist/ui/disclosure/public.js +1 -1
  133. package/dist/ui/dragAndDrop/index.d.ts +385 -103
  134. package/dist/ui/dragAndDrop/index.d.ts.map +1 -1
  135. package/dist/ui/dragAndDrop/index.js +26 -31
  136. package/dist/ui/dragAndDrop/public.d.ts +1 -1
  137. package/dist/ui/dragAndDrop/public.d.ts.map +1 -1
  138. package/dist/ui/dragAndDrop/public.js +1 -1
  139. package/dist/ui/fileDrop/index.d.ts +42 -46
  140. package/dist/ui/fileDrop/index.d.ts.map +1 -1
  141. package/dist/ui/fileDrop/index.js +30 -46
  142. package/dist/ui/fileDrop/public.d.ts +2 -2
  143. package/dist/ui/fileDrop/public.d.ts.map +1 -1
  144. package/dist/ui/fileDrop/public.js +1 -1
  145. package/dist/ui/listbox/multi.d.ts +39 -84
  146. package/dist/ui/listbox/multi.d.ts.map +1 -1
  147. package/dist/ui/listbox/multi.js +38 -20
  148. package/dist/ui/listbox/multiPublic.d.ts +2 -2
  149. package/dist/ui/listbox/multiPublic.d.ts.map +1 -1
  150. package/dist/ui/listbox/multiPublic.js +1 -1
  151. package/dist/ui/listbox/public.d.ts +3 -3
  152. package/dist/ui/listbox/public.d.ts.map +1 -1
  153. package/dist/ui/listbox/public.js +2 -2
  154. package/dist/ui/listbox/shared.d.ts +71 -30
  155. package/dist/ui/listbox/shared.d.ts.map +1 -1
  156. package/dist/ui/listbox/shared.js +319 -296
  157. package/dist/ui/listbox/single.d.ts +57 -85
  158. package/dist/ui/listbox/single.d.ts.map +1 -1
  159. package/dist/ui/listbox/single.js +48 -24
  160. package/dist/ui/menu/index.d.ts +80 -36
  161. package/dist/ui/menu/index.d.ts.map +1 -1
  162. package/dist/ui/menu/index.js +117 -86
  163. package/dist/ui/menu/public.d.ts +2 -2
  164. package/dist/ui/menu/public.d.ts.map +1 -1
  165. package/dist/ui/menu/public.js +1 -1
  166. package/dist/ui/popover/index.d.ts +117 -44
  167. package/dist/ui/popover/index.d.ts.map +1 -1
  168. package/dist/ui/popover/index.js +88 -101
  169. package/dist/ui/popover/public.d.ts +2 -2
  170. package/dist/ui/popover/public.d.ts.map +1 -1
  171. package/dist/ui/popover/public.js +1 -1
  172. package/dist/ui/radioGroup/index.d.ts +122 -45
  173. package/dist/ui/radioGroup/index.d.ts.map +1 -1
  174. package/dist/ui/radioGroup/index.js +111 -72
  175. package/dist/ui/radioGroup/public.d.ts +2 -2
  176. package/dist/ui/radioGroup/public.d.ts.map +1 -1
  177. package/dist/ui/radioGroup/public.js +1 -1
  178. package/dist/ui/slider/index.d.ts +247 -103
  179. package/dist/ui/slider/index.d.ts.map +1 -1
  180. package/dist/ui/slider/index.js +52 -68
  181. package/dist/ui/slider/public.d.ts +2 -2
  182. package/dist/ui/slider/public.d.ts.map +1 -1
  183. package/dist/ui/slider/public.js +1 -1
  184. package/dist/ui/switch/index.d.ts +74 -21
  185. package/dist/ui/switch/index.d.ts.map +1 -1
  186. package/dist/ui/switch/index.js +62 -33
  187. package/dist/ui/switch/public.d.ts +2 -2
  188. package/dist/ui/switch/public.d.ts.map +1 -1
  189. package/dist/ui/switch/public.js +1 -1
  190. package/dist/ui/tabs/index.d.ts +107 -45
  191. package/dist/ui/tabs/index.d.ts.map +1 -1
  192. package/dist/ui/tabs/index.js +99 -81
  193. package/dist/ui/tabs/public.d.ts +2 -2
  194. package/dist/ui/tabs/public.d.ts.map +1 -1
  195. package/dist/ui/tabs/public.js +1 -1
  196. package/dist/ui/toast/index.d.ts +93 -109
  197. package/dist/ui/toast/index.d.ts.map +1 -1
  198. package/dist/ui/toast/index.js +16 -29
  199. package/dist/ui/toast/schema.d.ts +15 -4
  200. package/dist/ui/toast/schema.d.ts.map +1 -1
  201. package/dist/ui/toast/schema.js +11 -4
  202. package/dist/ui/toast/update.d.ts +36 -18
  203. package/dist/ui/toast/update.d.ts.map +1 -1
  204. package/dist/ui/toast/update.js +33 -14
  205. package/dist/ui/tooltip/index.d.ts +94 -42
  206. package/dist/ui/tooltip/index.d.ts.map +1 -1
  207. package/dist/ui/tooltip/index.js +64 -73
  208. package/dist/ui/tooltip/public.d.ts +2 -2
  209. package/dist/ui/tooltip/public.d.ts.map +1 -1
  210. package/dist/ui/tooltip/public.js +1 -1
  211. package/dist/ui/virtualList/index.d.ts +63 -80
  212. package/dist/ui/virtualList/index.d.ts.map +1 -1
  213. package/dist/ui/virtualList/index.js +22 -49
  214. package/dist/ui/virtualList/public.d.ts +2 -2
  215. package/dist/ui/virtualList/public.d.ts.map +1 -1
  216. package/dist/ui/virtualList/public.js +1 -1
  217. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  import { Option, Schema as S } from 'effect';
2
2
  import type * as Command from '../../command/index.js';
3
- import { type Html } from '../../html/index.js';
4
- import { type BaseInitConfig, type BaseViewConfig, Closed, type Message, Opened, SelectedItem } from './shared.js';
3
+ import type { SubmodelView } from '../../html/index.js';
4
+ import type { Reflect } from '../../submodel/submodel.js';
5
+ import { type BaseInitConfig, type BaseViewInputs, type Message, type OutMessage } from './shared.js';
5
6
  /** Schema for the listbox component's state, tracking open/closed status, active item, selected item, activation trigger, and typeahead search. */
6
7
  export declare const Model: S.Struct<{
7
8
  readonly maybeSelectedItem: S.Option<S.String>;
@@ -32,7 +33,7 @@ export type InitConfig = BaseInitConfig & Readonly<{
32
33
  }>;
33
34
  /** Creates an initial single-select listbox model from a config. Defaults to closed with no active item and no selection. */
34
35
  export declare const init: (config: InitConfig) => Model;
35
- /** Processes a listbox message and returns the next model and commands. Closes the listbox on selection (single-select behavior). */
36
+ /** Processes a listbox message and returns the next model, commands, and optional OutMessage. Closes the listbox on selection (single-select behavior); emits a `Selected({ value, wasAdded: true })` OutMessage. */
36
37
  export declare const update: (model: {
37
38
  readonly maybeSelectedItem: Option.Option<string>;
38
39
  readonly id: string;
@@ -114,9 +115,9 @@ export declare const update: (model: {
114
115
  } | {
115
116
  readonly _tag: "CompletedUnlockScroll";
116
117
  } | {
117
- readonly _tag: "CompletedSetupInert";
118
+ readonly _tag: "CompletedInertOthers";
118
119
  } | {
119
- readonly _tag: "CompletedTeardownInert";
120
+ readonly _tag: "CompletedRestoreInert";
120
121
  } | {
121
122
  readonly _tag: "CompletedFocusButton";
122
123
  } | {
@@ -149,88 +150,59 @@ export declare const update: (model: {
149
150
  readonly pointerType: string;
150
151
  readonly button: number;
151
152
  }, never, never>;
152
- }>[]];
153
+ }>[], Option.Option<Readonly<{
154
+ readonly _tag: "Selected";
155
+ readonly value: string;
156
+ readonly wasAdded: boolean;
157
+ }>>];
158
+ type UpdateReturn = ReturnType<typeof update>;
153
159
  /** Programmatically opens the listbox, updating the model and returning
154
160
  * focus and modal commands. Use this in domain-event handlers to open the listbox. */
155
- export declare const open: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
161
+ export declare const open: (model: Model) => UpdateReturn;
156
162
  /** Programmatically closes the listbox, updating the model and returning
157
163
  * focus and modal commands. Use this in domain-event handlers to close the listbox. */
158
- export declare const close: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
159
- /** Programmatically selects an item in the single-select listbox, closing the listbox and returning
160
- * focus commands. Use this in domain-event handlers when the listbox uses `onSelectedItem`. */
161
- export declare const selectItem: (model: Model, item: string) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
162
- /** Configuration for rendering a single-select listbox with `view`. */
163
- export type ViewConfig<ParentMessage, Item> = BaseViewConfig<ParentMessage, Item, Model>;
164
- /** Renders a headless single-select listbox with typeahead search, keyboard navigation, selection tracking, and aria-activedescendant focus management. */
165
- export declare const view: <ParentMessage, Item>(config: Readonly<{
166
- model: {
167
- readonly maybeSelectedItem: Option.Option<string>;
168
- readonly id: string;
169
- readonly isOpen: boolean;
170
- readonly isAnimated: boolean;
171
- readonly isModal: boolean;
172
- readonly orientation: "Vertical" | "Horizontal";
173
- readonly animation: {
174
- readonly id: string;
175
- readonly isShowing: boolean;
176
- readonly transitionState: "Idle" | "EnterStart" | "EnterAnimating" | "LeaveStart" | "LeaveAnimating";
177
- };
178
- readonly maybeActiveItemIndex: Option.Option<number>;
179
- readonly activationTrigger: "Pointer" | "Keyboard";
180
- readonly searchQuery: string;
181
- readonly searchVersion: number;
182
- readonly maybeLastPointerPosition: Option.Option<{
183
- readonly screenX: number;
184
- readonly screenY: number;
185
- }>;
186
- readonly maybeLastButtonPointerType: Option.Option<string>;
187
- };
188
- toParentMessage: (message: Opened | Closed | import("./shared.js").BlurredItems | import("./shared.js").ActivatedItem | import("./shared.js").DeactivatedItem | SelectedItem | import("./shared.js").MovedPointerOverItem | import("./shared.js").RequestedItemClick | import("./shared.js").Searched | import("./shared.js").PressedPointerOnButton | import("./shared.js").IgnoredMouseClick | import("./shared.js").SuppressedSpaceScroll | {
189
- readonly _tag: "CompletedAnchorListbox";
190
- } | {
191
- readonly _tag: "CompletedPortalListboxBackdrop";
192
- }) => ParentMessage;
193
- onSelectedItem?: (value: string) => ParentMessage;
194
- items: readonly Item[];
195
- itemToConfig: (item: Item, context: Readonly<{
196
- isActive: boolean;
197
- isDisabled: boolean;
198
- isSelected: boolean;
199
- }>) => Readonly<{
200
- className?: string;
201
- content: Html;
202
- }>;
203
- isItemDisabled?: (item: Item, index: number) => boolean;
204
- itemToSearchText?: (item: Item, index: number) => string;
205
- itemToValue?: (item: Item) => string;
206
- isButtonDisabled?: boolean;
207
- buttonContent: Html;
208
- buttonClassName?: string;
209
- buttonAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
210
- itemsClassName?: string;
211
- itemsAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
212
- itemsScrollClassName?: string;
213
- itemsScrollAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
214
- backdropClassName?: string;
215
- backdropAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
216
- className?: string;
217
- attributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
218
- itemGroupKey?: (item: Item, index: number) => string;
219
- groupToHeading?: (groupKey: string) => Readonly<{
220
- content: Html;
221
- className?: string;
222
- }> | undefined;
223
- groupClassName?: string;
224
- groupAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
225
- separatorClassName?: string;
226
- separatorAttributes?: readonly import("../../html/index.js").Attribute<ParentMessage>[];
227
- anchor?: import("./public.js").AnchorConfig;
228
- name?: string;
229
- form?: string;
230
- isDisabled?: boolean;
231
- isInvalid?: boolean;
232
- }>) => Html;
233
- /** Creates a memoized single-select listbox view. Static config is captured in a closure;
234
- * only `model` and `toParentMessage` are compared per render via `createLazy`. */
235
- export declare const lazy: <ParentMessage, Item>(staticConfig: Omit<ViewConfig<ParentMessage, Item>, "model" | "toParentMessage" | "onSelectedItem">) => ((model: Model, toParentMessage: BaseViewConfig<ParentMessage, Item, Model>["toParentMessage"]) => Html);
164
+ export declare const close: (model: Model) => UpdateReturn;
165
+ /** Programmatically selects an item in the single-select listbox, closing the listbox and emitting a `Selected({ value, wasAdded: true })` OutMessage. */
166
+ export declare const selectItem: (model: Model, item: string) => UpdateReturn;
167
+ /** Reflects an externally-sourced selection onto the model without
168
+ * emitting an OutMessage or running the user-selection side effects (no
169
+ * close, no focus). Use this to mirror external truth (a URL parameter,
170
+ * restored storage, a server push) onto the listbox's selection.
171
+ * Contrast with `selectItem`, which represents a user or programmatic
172
+ * *choice*: it closes the listbox, restores focus, and emits `Selected`.
173
+ * `reflect` returns the model directly because it produces no commands and
174
+ * no OutMessage, so a parent reflecting external state cannot
175
+ * accidentally echo it back out. */
176
+ export declare const reflectSelectedItem: Reflect<Model, Option.Option<string>>;
177
+ /** Per-render view inputs passed to the view via `h.submodel`'s `viewInputs` field. */
178
+ export type ViewInputs<Item, Value extends string = string> = BaseViewInputs<Item, Value>;
179
+ /** Pairs the single-select listbox's `view` and `update` (and programmatic
180
+ * helpers) behind a single Item-typed entry point. Declaring the listbox
181
+ * once at module scope ensures the view's `Item` type and the update's
182
+ * OutMessage `item` type can't drift:
183
+ *
184
+ * ```ts
185
+ * const ColorListbox = Ui.Listbox.create<Color>()
186
+ *
187
+ * // In view:
188
+ * h.submodel({ view: ColorListbox.view, ... })
189
+ *
190
+ * // In update:
191
+ * const [next, commands, maybeOutMessage] = ColorListbox.update(model, message)
192
+ * // maybeOutMessage: Option<Listbox.OutMessage<Color>>
193
+ * ```
194
+ *
195
+ * Two type params support object-typed items with an `itemToValue`
196
+ * extractor: pass `<Person, string>` when items are objects whose
197
+ * extracted value is a plain string. `Value` defaults to `Item` when
198
+ * `Item extends string`, else defaults to `string`. */
199
+ export declare const create: <Item = string, Value extends string = Item extends string ? Item : string>() => Readonly<{
200
+ view: SubmodelView<Model, Message, BaseViewInputs<Item, Value>>;
201
+ update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Value>>];
202
+ selectItem: (model: Model, item: Value) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Value>>];
203
+ open: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Value>>];
204
+ close: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Value>>];
205
+ reflectSelectedItem: Reflect<Model, Option.Option<Value>>;
206
+ }>;
207
+ export {};
236
208
  //# sourceMappingURL=single.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEnD,OAAO,KAAK,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,KAAK,IAAI,EAAc,MAAM,qBAAqB,CAAA;AAE3D,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,cAAc,EACnB,MAAM,EACN,KAAK,OAAO,EACZ,MAAM,EACN,YAAY,EAIb,MAAM,aAAa,CAAA;AAIpB,mJAAmJ;AACnJ,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,6RAA6R;AAC7R,MAAM,MAAM,UAAU,GAAG,cAAc,GACrC,QAAQ,CAAC;IACP,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAC,CAAA;AAEJ,6HAA6H;AAC7H,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAGxC,CAAA;AAIF,qIAAqI;AACrI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAMjB,CAAA;AAEF;uFACuF;AACvF,eAAO,MAAM,IAAI,GACf,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACK,CAAA;AAEhE;wFACwF;AACxF,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAClC,CAAA;AAEzB;gGACgG;AAChG,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,KACX,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CACpB,CAAA;AAIvC,uEAAuE;AACvE,MAAM,MAAM,UAAU,CAAC,aAAa,EAAE,IAAI,IAAI,cAAc,CAC1D,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAA;AAED,2JAA2J;AAC3J,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAWf,CAAA;AAEF;mFACmF;AACnF,eAAO,MAAM,IAAI,GAAI,aAAa,EAAE,IAAI,EACtC,cAAc,IAAI,CAChB,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,EAC/B,OAAO,GAAG,iBAAiB,GAAG,gBAAgB,CAC/C,KACA,CAAC,CACF,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,cAAc,CAC7B,aAAa,EACb,IAAI,EACJ,KAAK,CACN,CAAC,iBAAiB,CAAC,KACjB,IAAI,CAoBR,CAAA"}
1
+ {"version":3,"file":"single.d.ts","sourceRoot":"","sources":["../../../src/ui/listbox/single.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { Array, Option, Schema as S } from 'effect';
2
- import { createLazy } from '../../html/index.js';
1
+ import { Array, Function, Option, Schema as S } from 'effect';
3
2
  import { evo } from '../../struct/index.js';
4
- import { BaseModel, Closed, Opened, SelectedItem, baseInit, makeUpdate, makeView, } from './shared.js';
3
+ import { BaseModel, Closed, Opened, SelectedItem, Selected as SharedSelected, baseInit, makeUpdate, makeView, } from './shared.js';
5
4
  // MODEL
6
5
  /** Schema for the listbox component's state, tracking open/closed status, active item, selected item, activation trigger, and typeahead search. */
7
6
  export const Model = S.Struct({
@@ -14,36 +13,61 @@ export const init = (config) => ({
14
13
  maybeSelectedItem: Option.fromNullishOr(config.selectedItem),
15
14
  });
16
15
  // UPDATE
17
- /** Processes a listbox message and returns the next model and commands. Closes the listbox on selection (single-select behavior). */
18
- export const update = makeUpdate((model, item, context) => {
19
- const [closedModelResult, commands] = context.closeWithFocus(model);
20
- return [
21
- evo(closedModelResult, { maybeSelectedItem: () => Option.some(item) }),
22
- commands,
23
- ];
24
- });
16
+ /** Processes a listbox message and returns the next model, commands, and optional OutMessage. Closes the listbox on selection (single-select behavior); emits a `Selected({ value, wasAdded: true })` OutMessage. */
17
+ export const update = makeUpdate((model, item, context) => context.closeWithFocus(evo(model, { maybeSelectedItem: () => Option.some(item) }), Option.some(SharedSelected({ value: item, wasAdded: true }))));
25
18
  /** Programmatically opens the listbox, updating the model and returning
26
19
  * focus and modal commands. Use this in domain-event handlers to open the listbox. */
27
20
  export const open = (model) => update(model, Opened({ maybeActiveItemIndex: Option.none() }));
28
21
  /** Programmatically closes the listbox, updating the model and returning
29
22
  * focus and modal commands. Use this in domain-event handlers to close the listbox. */
30
23
  export const close = (model) => update(model, Closed());
31
- /** Programmatically selects an item in the single-select listbox, closing the listbox and returning
32
- * focus commands. Use this in domain-event handlers when the listbox uses `onSelectedItem`. */
24
+ /** Programmatically selects an item in the single-select listbox, closing the listbox and emitting a `Selected({ value, wasAdded: true })` OutMessage. */
33
25
  export const selectItem = (model, item) => update(model, SelectedItem({ item }));
34
- /** Renders a headless single-select listbox with typeahead search, keyboard navigation, selection tracking, and aria-activedescendant focus management. */
35
- export const view = makeView({
26
+ /** Reflects an externally-sourced selection onto the model without
27
+ * emitting an OutMessage or running the user-selection side effects (no
28
+ * close, no focus). Use this to mirror external truth (a URL parameter,
29
+ * restored storage, a server push) onto the listbox's selection.
30
+ * Contrast with `selectItem`, which represents a user or programmatic
31
+ * *choice*: it closes the listbox, restores focus, and emits `Selected`.
32
+ * `reflect` returns the model directly because it produces no commands and
33
+ * no OutMessage, so a parent reflecting external state cannot
34
+ * accidentally echo it back out. */
35
+ export const reflectSelectedItem = Function.dual(2, (model, maybeItem) => evo(model, { maybeSelectedItem: () => maybeItem }));
36
+ const internalView = makeView({
36
37
  isItemSelected: (model, itemValue) => Option.exists(model.maybeSelectedItem, selectedItem => selectedItem === itemValue),
37
38
  selectedItemIndex: (model, items, itemToValue) => Option.flatMap(model.maybeSelectedItem, selectedItem => Array.findFirstIndex(items, item => itemToValue(item) === selectedItem)),
38
39
  ariaMultiSelectable: false,
39
40
  });
40
- /** Creates a memoized single-select listbox view. Static config is captured in a closure;
41
- * only `model` and `toParentMessage` are compared per render via `createLazy`. */
42
- export const lazy = (staticConfig) => {
43
- const lazyView = createLazy();
44
- return (model, toParentMessage) => lazyView((currentModel, currentToParentMessage) => view({
45
- ...staticConfig,
46
- model: currentModel,
47
- toParentMessage: currentToParentMessage,
48
- }), [model, toParentMessage]);
41
+ /** Pairs the single-select listbox's `view` and `update` (and programmatic
42
+ * helpers) behind a single Item-typed entry point. Declaring the listbox
43
+ * once at module scope ensures the view's `Item` type and the update's
44
+ * OutMessage `item` type can't drift:
45
+ *
46
+ * ```ts
47
+ * const ColorListbox = Ui.Listbox.create<Color>()
48
+ *
49
+ * // In view:
50
+ * h.submodel({ view: ColorListbox.view, ... })
51
+ *
52
+ * // In update:
53
+ * const [next, commands, maybeOutMessage] = ColorListbox.update(model, message)
54
+ * // maybeOutMessage: Option<Listbox.OutMessage<Color>>
55
+ * ```
56
+ *
57
+ * Two type params support object-typed items with an `itemToValue`
58
+ * extractor: pass `<Person, string>` when items are objects whose
59
+ * extracted value is a plain string. `Value` defaults to `Item` when
60
+ * `Item extends string`, else defaults to `string`. */
61
+ export const create = () => {
62
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
63
+ const typedUpdate = update;
64
+ return {
65
+ view: internalView(),
66
+ update: typedUpdate,
67
+ selectItem: (model, item) => typedUpdate(model, SelectedItem({ item })),
68
+ open: model => typedUpdate(model, Opened({ maybeActiveItemIndex: Option.none() })),
69
+ close: model => typedUpdate(model, Closed()),
70
+ /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
71
+ reflectSelectedItem: reflectSelectedItem,
72
+ };
49
73
  };
@@ -1,11 +1,11 @@
1
- import { Effect, Schema as S } from 'effect';
1
+ import { Effect, Option, Schema as S } from 'effect';
2
2
  import * as Command from '../../command/index.js';
3
- import { type Attribute, type Html } from '../../html/index.js';
3
+ import { type ChildAttribute, type Html, type SubmodelView } from '../../html/index.js';
4
4
  import * as Mount from '../../mount/index.js';
5
5
  import { AnchorConfig } from '../anchor.js';
6
6
  import { groupContiguous } from '../group.js';
7
7
  import { resolveTypeaheadMatch } from '../typeahead.js';
8
- /** Schema for the activation trigger whether the user interacted via mouse or keyboard. */
8
+ /** Schema for the activation trigger: whether the user interacted via mouse or keyboard. */
9
9
  export declare const ActivationTrigger: S.Literals<readonly ["Pointer", "Keyboard"]>;
10
10
  export type ActivationTrigger = typeof ActivationTrigger.Type;
11
11
  /** Schema for the menu component's state, tracking open/closed status, active item, activation trigger, and typeahead search. */
@@ -35,7 +35,7 @@ export declare const Model: S.Struct<{
35
35
  }>>;
36
36
  }>;
37
37
  export type Model = typeof Model.Type;
38
- /** Sent when the menu opens via button click or keyboard. Contains an optional initial active item index None for pointer, Some for keyboard. */
38
+ /** Sent when the menu opens via button click or keyboard. Contains an optional initial active item index: None for pointer, Some for keyboard. */
39
39
  export declare const Opened: import("../../schema/index.js").CallableTaggedStruct<"Opened", {
40
40
  maybeActiveItemIndex: S.Option<S.Number>;
41
41
  }>;
@@ -53,6 +53,7 @@ export declare const DeactivatedItem: import("../../schema/index.js").CallableTa
53
53
  /** Sent when an item is selected via Enter, Space, or click. */
54
54
  export declare const SelectedItem: import("../../schema/index.js").CallableTaggedStruct<"SelectedItem", {
55
55
  index: S.Number;
56
+ item: S.String;
56
57
  }>;
57
58
  /** Sent when Enter or Space is pressed on the active item, triggering a programmatic click on the DOM element. */
58
59
  export declare const RequestedItemClick: import("../../schema/index.js").CallableTaggedStruct<"RequestedItemClick", {
@@ -82,15 +83,13 @@ export declare const CompletedLockScroll: import("../../schema/index.js").Callab
82
83
  /** Sent when the scroll unlock command completes. */
83
84
  export declare const CompletedUnlockScroll: import("../../schema/index.js").CallableTaggedStruct<"CompletedUnlockScroll", {}>;
84
85
  /** Sent when the inert-others command completes. */
85
- export declare const CompletedSetupInert: import("../../schema/index.js").CallableTaggedStruct<"CompletedSetupInert", {}>;
86
+ export declare const CompletedInertOthers: import("../../schema/index.js").CallableTaggedStruct<"CompletedInertOthers", {}>;
86
87
  /** Sent when the restore-inert command completes. */
87
- export declare const CompletedTeardownInert: import("../../schema/index.js").CallableTaggedStruct<"CompletedTeardownInert", {}>;
88
+ export declare const CompletedRestoreInert: import("../../schema/index.js").CallableTaggedStruct<"CompletedRestoreInert", {}>;
88
89
  /** Sent when the scroll-into-view command completes after keyboard activation. */
89
90
  export declare const CompletedScrollIntoView: import("../../schema/index.js").CallableTaggedStruct<"CompletedScrollIntoView", {}>;
90
91
  /** Sent when the programmatic click command completes. */
91
92
  export declare const CompletedClickItem: import("../../schema/index.js").CallableTaggedStruct<"CompletedClickItem", {}>;
92
- /** Sent when the advance-focus command completes. */
93
- export declare const CompletedAdvanceFocus: import("../../schema/index.js").CallableTaggedStruct<"CompletedAdvanceFocus", {}>;
94
93
  /** Sent when a mouse click on the button is ignored because pointer-down already handled the toggle. */
95
94
  export declare const IgnoredMouseClick: import("../../schema/index.js").CallableTaggedStruct<"IgnoredMouseClick", {}>;
96
95
  /** Sent when a Space key-up is captured to prevent page scrolling. */
@@ -133,11 +132,10 @@ export declare const Message: S.Union<[
133
132
  typeof CompletedFocusButton,
134
133
  typeof CompletedLockScroll,
135
134
  typeof CompletedUnlockScroll,
136
- typeof CompletedSetupInert,
137
- typeof CompletedTeardownInert,
135
+ typeof CompletedInertOthers,
136
+ typeof CompletedRestoreInert,
138
137
  typeof CompletedScrollIntoView,
139
138
  typeof CompletedClickItem,
140
- typeof CompletedAdvanceFocus,
141
139
  typeof IgnoredMouseClick,
142
140
  typeof SuppressedSpaceScroll,
143
141
  typeof CompletedAnchorMenu,
@@ -147,6 +145,25 @@ export declare const Message: S.Union<[
147
145
  typeof ReleasedPointerOnItems
148
146
  ]>;
149
147
  export type Message = typeof Message.Type;
148
+ /** Sent to the parent when a menu item is selected. Carries both the selected value (from the `viewInputs.items` array supplied at view time) and its index. The menu has already closed when this fires; the parent does not need to dispatch `Ui.Menu.close`. */
149
+ export declare const Selected: import("../../schema/index.js").CallableTaggedStruct<"Selected", {
150
+ value: S.String;
151
+ index: S.Number;
152
+ }>;
153
+ export type Selected<Value extends string = string> = Readonly<{
154
+ readonly _tag: 'Selected';
155
+ readonly value: Value;
156
+ readonly index: number;
157
+ }>;
158
+ /** Union of out-messages the menu component can produce. Surfaced as the third element of `update`'s return tuple and pattern-matched by the parent. */
159
+ export declare const OutMessage: S.Union<readonly [import("../../schema/index.js").CallableTaggedStruct<"Selected", {
160
+ value: S.String;
161
+ index: S.Number;
162
+ }>]>;
163
+ /** Generic over `Value extends string` so consumers using the typed
164
+ * `Ui.Menu.create<MyUnion>()` factory receive `value: MyUnion` in the
165
+ * `Selected` OutMessage. Defaults to `string`. */
166
+ export type OutMessage<Value extends string = string> = Selected<Value>;
150
167
  export type Opened = typeof Opened.Type;
151
168
  export type Closed = typeof Closed.Type;
152
169
  export type BlurredItems = typeof BlurredItems.Type;
@@ -169,7 +186,11 @@ export type InitConfig = Readonly<{
169
186
  }>;
170
187
  /** Creates an initial menu model from a config. Defaults to closed with no active item. */
171
188
  export declare const init: (config: InitConfig) => Model;
172
- type UpdateReturn = readonly [Model, ReadonlyArray<Command.Command<Message>>];
189
+ type UpdateReturn = readonly [
190
+ Model,
191
+ ReadonlyArray<Command.Command<Message>>,
192
+ Option.Option<OutMessage>
193
+ ];
173
194
  /** Prevents page scrolling while the menu is open. */
174
195
  export declare const LockScroll: Command.CommandDefinitionNoArgs<"LockScroll", Effect.Effect<{
175
196
  readonly _tag: "CompletedLockScroll";
@@ -182,13 +203,13 @@ export declare const UnlockScroll: Command.CommandDefinitionNoArgs<"UnlockScroll
182
203
  export declare const InertOthers: Command.CommandDefinitionWithArgs<"InertOthers", {
183
204
  id: S.String;
184
205
  }, Effect.Effect<{
185
- readonly _tag: "CompletedSetupInert";
206
+ readonly _tag: "CompletedInertOthers";
186
207
  }, never, never>>;
187
208
  /** Removes the inert attribute from elements outside the menu. */
188
209
  export declare const RestoreInert: Command.CommandDefinitionWithArgs<"RestoreInert", {
189
210
  id: S.String;
190
211
  }, Effect.Effect<{
191
- readonly _tag: "CompletedTeardownInert";
212
+ readonly _tag: "CompletedRestoreInert";
192
213
  }, never, never>>;
193
214
  /** Moves focus to the menu items container after opening. */
194
215
  export declare const FocusItems: Command.CommandDefinitionWithArgs<"FocusItems", {
@@ -263,13 +284,13 @@ export declare const PortalMenuBackdrop: Mount.MountDefinitionNoArgs<"PortalMenu
263
284
  }>;
264
285
  /** Programmatically opens the menu, updating the model and returning
265
286
  * focus and modal commands. Use this in domain-event handlers to open the menu. */
266
- export declare const open: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
287
+ export declare const open: (model: Model) => UpdateReturn;
267
288
  /** Programmatically closes the menu, updating the model and returning
268
289
  * focus and modal commands. Use this in domain-event handlers to close the menu. */
269
- export declare const close: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
270
- /** Programmatically selects a menu item at the given index, closing the menu and returning
271
- * focus commands. Use this in domain-event handlers when the menu uses `onSelectedItem`. */
272
- export declare const selectItem: (model: Model, index: number) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
290
+ export declare const close: (model: Model) => UpdateReturn;
291
+ /** Programmatically selects a menu item, closing the menu and returning
292
+ * focus commands plus a `Selected` OutMessage. Use this in domain-event handlers. */
293
+ export declare const selectItem: (model: Model, item: string, index: number) => UpdateReturn;
273
294
  /** Configuration for an individual menu item's appearance. */
274
295
  export type ItemConfig = Readonly<{
275
296
  className?: string;
@@ -280,11 +301,12 @@ export type GroupHeading = Readonly<{
280
301
  content: Html;
281
302
  className?: string;
282
303
  }>;
283
- /** Configuration for rendering a menu with `view`. */
284
- export type ViewConfig<ParentMessage, Item extends string> = Readonly<{
285
- model: Model;
286
- toParentMessage: (message: Opened | Closed | BlurredItems | ActivatedItem | DeactivatedItem | SelectedItem | MovedPointerOverItem | RequestedItemClick | Searched | PressedPointerOnButton | ReleasedPointerOnItems | IgnoredMouseClick | SuppressedSpaceScroll | typeof CompletedAnchorMenu.Type | typeof CompletedPortalMenuBackdrop.Type) => ParentMessage;
287
- onSelectedItem?: (index: number) => ParentMessage;
304
+ /** Per-render view inputs passed to `view` via `h.submodel`'s `viewInputs` field.
305
+ *
306
+ * The Menu emits a `Selected({ value, index })` OutMessage on commit.
307
+ * The menu has already closed by the time this fires; consumers
308
+ * pattern-match it in their `GotMenuMessage` handler to react. */
309
+ export type ViewInputs<Item extends string> = Readonly<{
288
310
  items: ReadonlyArray<Item>;
289
311
  itemToConfig: (item: Item, context: Readonly<{
290
312
  isActive: boolean;
@@ -295,27 +317,49 @@ export type ViewConfig<ParentMessage, Item extends string> = Readonly<{
295
317
  isButtonDisabled?: boolean;
296
318
  buttonContent: Html;
297
319
  buttonClassName?: string;
298
- buttonAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
320
+ buttonAttributes?: ReadonlyArray<ChildAttribute>;
299
321
  itemsClassName?: string;
300
- itemsAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
322
+ itemsAttributes?: ReadonlyArray<ChildAttribute>;
301
323
  itemsScrollClassName?: string;
302
- itemsScrollAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
324
+ itemsScrollAttributes?: ReadonlyArray<ChildAttribute>;
303
325
  backdropClassName?: string;
304
- backdropAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
326
+ backdropAttributes?: ReadonlyArray<ChildAttribute>;
305
327
  className?: string;
306
- attributes?: ReadonlyArray<Attribute<ParentMessage>>;
328
+ attributes?: ReadonlyArray<ChildAttribute>;
307
329
  itemGroupKey?: (item: Item, index: number) => string;
308
330
  groupToHeading?: (groupKey: string) => GroupHeading | undefined;
309
331
  groupClassName?: string;
310
- groupAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
332
+ groupAttributes?: ReadonlyArray<ChildAttribute>;
311
333
  separatorClassName?: string;
312
- separatorAttributes?: ReadonlyArray<Attribute<ParentMessage>>;
334
+ separatorAttributes?: ReadonlyArray<ChildAttribute>;
313
335
  anchor?: AnchorConfig;
314
336
  }>;
315
337
  export { groupContiguous, resolveTypeaheadMatch };
316
- /** Renders a headless menu with typeahead search, keyboard navigation, and aria-activedescendant focus management. */
317
- export declare const view: <ParentMessage, Item extends string>(config: ViewConfig<ParentMessage, Item>) => Html;
318
- /** Creates a memoized menu view. Static config is captured in a closure;
319
- * only `model` and `toParentMessage` are compared per render via `createLazy`. */
320
- export declare const lazy: <ParentMessage, Item extends string>(staticConfig: Omit<ViewConfig<ParentMessage, Item>, "model" | "toParentMessage" | "onSelectedItem">) => ((model: Model, toParentMessage: ViewConfig<ParentMessage, Item>["toParentMessage"]) => Html);
338
+ /** Headless menu view with typeahead search, keyboard navigation,
339
+ * and aria-activedescendant focus management. Obtained from
340
+ * `Ui.Menu.create<MyItem>().view`; not exported directly. */
341
+ type ViewForItem<Item extends string> = SubmodelView<Model, Message, ViewInputs<Item>>;
342
+ /** Pairs the menu's `view` and `update` (and programmatic helpers)
343
+ * behind a single Item-typed entry point. Declaring the menu once at
344
+ * module scope ensures the view's `Item` type and the OutMessage's
345
+ * `item` type can't drift:
346
+ *
347
+ * ```ts
348
+ * const ActionMenu = Ui.Menu.create<Action>()
349
+ *
350
+ * // In view:
351
+ * h.submodel({ view: ActionMenu.view, ... })
352
+ *
353
+ * // In update:
354
+ * const [next, commands, maybeOutMessage] = ActionMenu.update(model.menu, message)
355
+ * // maybeOutMessage: Option<Ui.Menu.OutMessage<Action>>
356
+ * ```
357
+ */
358
+ export declare const create: <Item extends string = string>() => Readonly<{
359
+ view: ViewForItem<Item>;
360
+ update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Item>>];
361
+ selectItem: (model: Model, item: Item, index: number) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Item>>];
362
+ open: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Item>>];
363
+ close: (model: Model) => readonly [Model, ReadonlyArray<Command.Command<Message>>, Option.Option<OutMessage<Item>>];
364
+ }>;
321
365
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAGN,MAAM,EAEN,MAAM,IAAI,CAAC,EAGZ,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,YAAY,EAGlB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAA6B,MAAM,cAAc,CAAA;AActE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAM7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAIvD,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,8CAAsC,CAAA;AACpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAQ7D,iIAAiI;AACjI,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;EAehB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,kJAAkJ;AAClJ,eAAO,MAAM,MAAM;;EAEjB,CAAA;AACF,kEAAkE;AAClE,eAAO,MAAM,MAAM,oEAAc,CAAA;AACjC,sDAAsD;AACtD,eAAO,MAAM,YAAY,0EAAoB,CAAA;AAC7C,mGAAmG;AACnG,eAAO,MAAM,aAAa;;;EAGxB,CAAA;AACF,kDAAkD;AAClD,eAAO,MAAM,eAAe,6EAAuB,CAAA;AACnD,gEAAgE;AAChE,eAAO,MAAM,YAAY;;;EAGvB,CAAA;AACF,kHAAkH;AAClH,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,qEAAqE;AACrE,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AACF,4EAA4E;AAC5E,eAAO,MAAM,aAAa;;EAA4C,CAAA;AACtE,gHAAgH;AAChH,eAAO,MAAM,oBAAoB;;;;EAI/B,CAAA;AACF,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,kFAA4B,CAAA;AAC7D,mDAAmD;AACnD,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,kFAA4B,CAAA;AAC7D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,qFAA+B,CAAA;AACnE,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,gFAA0B,CAAA;AACzD,wGAAwG;AACxG,eAAO,MAAM,iBAAiB,+EAAyB,CAAA;AACvD,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,mFAA6B,CAAA;AAC/D,8KAA8K;AAC9K,eAAO,MAAM,mBAAmB,iFAA2B,CAAA;AAC3D,4IAA4I;AAC5I,eAAO,MAAM,2BAA2B,yFAAmC,CAAA;AAC3E,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,kHAAkH;AAClH,eAAO,MAAM,sBAAsB;;;;;;EAMjC,CAAA;AACF,uGAAuG;AACvG,eAAO,MAAM,sBAAsB;;;;EAIjC,CAAA;AAEF,4DAA4D;AAC5D,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAC3B;IACE,OAAO,MAAM;IACb,OAAO,MAAM;IACb,OAAO,YAAY;IACnB,OAAO,aAAa;IACpB,OAAO,eAAe;IACtB,OAAO,YAAY;IACnB,OAAO,oBAAoB;IAC3B,OAAO,kBAAkB;IACzB,OAAO,QAAQ;IACf,OAAO,aAAa;IACpB,OAAO,mBAAmB;IAC1B,OAAO,oBAAoB;IAC3B,OAAO,mBAAmB;IAC1B,OAAO,qBAAqB;IAC5B,OAAO,oBAAoB;IAC3B,OAAO,qBAAqB;IAC5B,OAAO,uBAAuB;IAC9B,OAAO,kBAAkB;IACzB,OAAO,iBAAiB;IACxB,OAAO,qBAAqB;IAC5B,OAAO,mBAAmB;IAC1B,OAAO,2BAA2B;IAClC,OAAO,mBAAmB;IAC1B,OAAO,sBAAsB;IAC7B,OAAO,sBAAsB;CAC9B,CA2BD,CAAA;AAEF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,mQAAmQ;AACnQ,eAAO,MAAM,QAAQ;;;EAGnB,CAAA;AAEF,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAC,CAAA;AAEF,wJAAwJ;AACxJ,eAAO,MAAM,UAAU;;;IAAsB,CAAA;AAE7C;;mDAEmD;AACnD,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAA;AAEvE,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AACnD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AACrD,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AACnD,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAA;AACnE,MAAM,MAAM,kBAAkB,GAAG,OAAO,kBAAkB,CAAC,IAAI,CAAA;AAC/D,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAC3C,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AACrD,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;AAC7D,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAA;AACrE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AACvE,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAC,IAAI,CAAA;AASvE,6MAA6M;AAC7M,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC,CAAA;AAEF,2FAA2F;AAC3F,eAAO,MAAM,IAAI,GAAI,QAAQ,UAAU,KAAG,KAaxC,CAAA;AAoBF,KAAK,YAAY,GAAG,SAAS;IAC3B,KAAK;IACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;CAC1B,CAAA;AAGD,sDAAsD;AACtD,eAAO,MAAM,UAAU;;iBAGiC,CAAA;AACxD,uDAAuD;AACvD,eAAO,MAAM,YAAY;;iBAGmC,CAAA;AAC5D,uEAAuE;AACvE,eAAO,MAAM,WAAW;;;;iBAQvB,CAAA;AACD,kEAAkE;AAClE,eAAO,MAAM,YAAY;;;;iBAImD,CAAA;AAC5E,6DAA6D;AAC7D,eAAO,MAAM,UAAU;;;;iBAStB,CAAA;AACD,yDAAyD;AACzD,eAAO,MAAM,WAAW;;;;iBASvB,CAAA;AACD,wEAAwE;AACxE,eAAO,MAAM,cAAc;;;;;iBAS1B,CAAA;AACD,kEAAkE;AAClE,eAAO,MAAM,SAAS;;;;;iBASrB,CAAA;AACD,gFAAgF;AAChF,eAAO,MAAM,gBAAgB;;;;;iBAQ5B,CAAA;AACD,qKAAqK;AACrK,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;iBAaxC,CAAA;AAkCD,wEAAwE;AACxE,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,KAAG,YAwRvD,CAAA;AAED;;+DAE+D;AAC/D,eAAO,MAAM,UAAU;;;;;;;;;;;EActB,CAAA;AAED;;+DAE+D;AAC/D,eAAO,MAAM,kBAAkB;;EAW9B,CAAA;AAED;oFACoF;AACpF,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,YAC4B,CAAA;AAEhE;qFACqF;AACrF,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,KAAG,YAAuC,CAAA;AAE5E;sFACsF;AACtF,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,YAA4D,CAAA;AAI/D,8DAA8D;AAC9D,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,IAAI,CAAA;CACd,CAAC,CAAA;AAEF,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAE,IAAI,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC,CAAA;AAEF;;;;mEAImE;AACnE,MAAM,MAAM,UAAU,CAAC,IAAI,SAAS,MAAM,IAAI,QAAQ,CAAC;IACrD,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1B,YAAY,EAAE,CACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,KAC1D,UAAU,CAAA;IACf,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACvD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACxD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,aAAa,EAAE,IAAI,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC/C,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,qBAAqB,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,mBAAmB,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IACnD,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,CAAC,CAAA;AAEF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAA;AAIjD;;8DAE8D;AAC9D,KAAK,WAAW,CAAC,IAAI,SAAS,MAAM,IAAI,YAAY,CAClD,KAAK,EACL,OAAO,EACP,UAAU,CAAC,IAAI,CAAC,CACjB,CAAA;AA8bD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,SAAS,MAAM,GAAG,MAAM,OAAK,QAAQ,CAAC;IAC/D,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;IACvB,MAAM,EAAE,CACN,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,KACb,SAAS,CACZ,KAAK,EACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA;IACD,UAAU,EAAE,CACV,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,KACV,SAAS,CACZ,KAAK,EACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA;IACD,IAAI,EAAE,CACJ,KAAK,EAAE,KAAK,KACT,SAAS,CACZ,KAAK,EACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA;IACD,KAAK,EAAE,CACL,KAAK,EAAE,KAAK,KACT,SAAS,CACZ,KAAK,EACL,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAChC,CAAA;CACF,CAiBA,CAAA"}