@sectile/terminal 0.1.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 (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +16 -0
  3. package/dist/accordion.d.ts +31 -0
  4. package/dist/accordion.d.ts.map +1 -0
  5. package/dist/accordion.js +76 -0
  6. package/dist/accordion.js.map +1 -0
  7. package/dist/alert-dialog.d.ts +18 -0
  8. package/dist/alert-dialog.d.ts.map +1 -0
  9. package/dist/alert-dialog.js +12 -0
  10. package/dist/alert-dialog.js.map +1 -0
  11. package/dist/calendar.d.ts +75 -0
  12. package/dist/calendar.d.ts.map +1 -0
  13. package/dist/calendar.js +217 -0
  14. package/dist/calendar.js.map +1 -0
  15. package/dist/carousel.d.ts +44 -0
  16. package/dist/carousel.d.ts.map +1 -0
  17. package/dist/carousel.js +129 -0
  18. package/dist/carousel.js.map +1 -0
  19. package/dist/checkbox-group.d.ts +19 -0
  20. package/dist/checkbox-group.d.ts.map +1 -0
  21. package/dist/checkbox-group.js +14 -0
  22. package/dist/checkbox-group.js.map +1 -0
  23. package/dist/checkbox.d.ts +17 -0
  24. package/dist/checkbox.d.ts.map +1 -0
  25. package/dist/checkbox.js +12 -0
  26. package/dist/checkbox.js.map +1 -0
  27. package/dist/combobox.d.ts +100 -0
  28. package/dist/combobox.d.ts.map +1 -0
  29. package/dist/combobox.js +286 -0
  30. package/dist/combobox.js.map +1 -0
  31. package/dist/date-field.d.ts +36 -0
  32. package/dist/date-field.d.ts.map +1 -0
  33. package/dist/date-field.js +46 -0
  34. package/dist/date-field.js.map +1 -0
  35. package/dist/date-picker.d.ts +38 -0
  36. package/dist/date-picker.d.ts.map +1 -0
  37. package/dist/date-picker.js +40 -0
  38. package/dist/date-picker.js.map +1 -0
  39. package/dist/date-range-picker.d.ts +38 -0
  40. package/dist/date-range-picker.d.ts.map +1 -0
  41. package/dist/date-range-picker.js +29 -0
  42. package/dist/date-range-picker.js.map +1 -0
  43. package/dist/date-time-field.d.ts +36 -0
  44. package/dist/date-time-field.d.ts.map +1 -0
  45. package/dist/date-time-field.js +133 -0
  46. package/dist/date-time-field.js.map +1 -0
  47. package/dist/date-time-picker.d.ts +38 -0
  48. package/dist/date-time-picker.d.ts.map +1 -0
  49. package/dist/date-time-picker.js +127 -0
  50. package/dist/date-time-picker.js.map +1 -0
  51. package/dist/date-time-range-picker.d.ts +38 -0
  52. package/dist/date-time-range-picker.d.ts.map +1 -0
  53. package/dist/date-time-range-picker.js +136 -0
  54. package/dist/date-time-range-picker.js.map +1 -0
  55. package/dist/dialog.d.ts +17 -0
  56. package/dist/dialog.d.ts.map +1 -0
  57. package/dist/dialog.js +12 -0
  58. package/dist/dialog.js.map +1 -0
  59. package/dist/disclosure.d.ts +22 -0
  60. package/dist/disclosure.d.ts.map +1 -0
  61. package/dist/disclosure.js +56 -0
  62. package/dist/disclosure.js.map +1 -0
  63. package/dist/feed.d.ts +28 -0
  64. package/dist/feed.d.ts.map +1 -0
  65. package/dist/feed.js +32 -0
  66. package/dist/feed.js.map +1 -0
  67. package/dist/grid.d.ts +40 -0
  68. package/dist/grid.d.ts.map +1 -0
  69. package/dist/grid.js +68 -0
  70. package/dist/grid.js.map +1 -0
  71. package/dist/index.d.ts +46 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +44 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/internal/checked-control.d.ts +23 -0
  76. package/dist/internal/checked-control.d.ts.map +1 -0
  77. package/dist/internal/checked-control.js +22 -0
  78. package/dist/internal/checked-control.js.map +1 -0
  79. package/dist/internal/controller.d.ts +6 -0
  80. package/dist/internal/controller.d.ts.map +1 -0
  81. package/dist/internal/controller.js +35 -0
  82. package/dist/internal/controller.js.map +1 -0
  83. package/dist/internal/disabled-items.d.ts +6 -0
  84. package/dist/internal/disabled-items.d.ts.map +1 -0
  85. package/dist/internal/disabled-items.js +15 -0
  86. package/dist/internal/disabled-items.js.map +1 -0
  87. package/dist/internal/facade.d.ts +44 -0
  88. package/dist/internal/facade.d.ts.map +1 -0
  89. package/dist/internal/facade.js +58 -0
  90. package/dist/internal/facade.js.map +1 -0
  91. package/dist/internal/menu-control.d.ts +34 -0
  92. package/dist/internal/menu-control.d.ts.map +1 -0
  93. package/dist/internal/menu-control.js +48 -0
  94. package/dist/internal/menu-control.js.map +1 -0
  95. package/dist/internal/popup-control.d.ts +24 -0
  96. package/dist/internal/popup-control.d.ts.map +1 -0
  97. package/dist/internal/popup-control.js +23 -0
  98. package/dist/internal/popup-control.js.map +1 -0
  99. package/dist/internal/semantic-controller.d.ts +20 -0
  100. package/dist/internal/semantic-controller.d.ts.map +1 -0
  101. package/dist/internal/semantic-controller.js +42 -0
  102. package/dist/internal/semantic-controller.js.map +1 -0
  103. package/dist/internal/text-input.d.ts +5 -0
  104. package/dist/internal/text-input.d.ts.map +1 -0
  105. package/dist/internal/text-input.js +53 -0
  106. package/dist/internal/text-input.js.map +1 -0
  107. package/dist/keyboard.d.ts +10 -0
  108. package/dist/keyboard.d.ts.map +1 -0
  109. package/dist/keyboard.js +16 -0
  110. package/dist/keyboard.js.map +1 -0
  111. package/dist/layout.d.ts +2 -0
  112. package/dist/layout.d.ts.map +1 -0
  113. package/dist/layout.js +24 -0
  114. package/dist/layout.js.map +1 -0
  115. package/dist/listbox.d.ts +87 -0
  116. package/dist/listbox.d.ts.map +1 -0
  117. package/dist/listbox.js +323 -0
  118. package/dist/listbox.js.map +1 -0
  119. package/dist/menu-button.d.ts +8 -0
  120. package/dist/menu-button.d.ts.map +1 -0
  121. package/dist/menu-button.js +11 -0
  122. package/dist/menu-button.js.map +1 -0
  123. package/dist/menu.d.ts +8 -0
  124. package/dist/menu.d.ts.map +1 -0
  125. package/dist/menu.js +11 -0
  126. package/dist/menu.js.map +1 -0
  127. package/dist/menubar.d.ts +8 -0
  128. package/dist/menubar.d.ts.map +1 -0
  129. package/dist/menubar.js +11 -0
  130. package/dist/menubar.js.map +1 -0
  131. package/dist/multi-thumb-slider.d.ts +32 -0
  132. package/dist/multi-thumb-slider.d.ts.map +1 -0
  133. package/dist/multi-thumb-slider.js +67 -0
  134. package/dist/multi-thumb-slider.js.map +1 -0
  135. package/dist/node.d.ts +15 -0
  136. package/dist/node.d.ts.map +1 -0
  137. package/dist/node.js +78 -0
  138. package/dist/node.js.map +1 -0
  139. package/dist/number-field.d.ts +44 -0
  140. package/dist/number-field.d.ts.map +1 -0
  141. package/dist/number-field.js +157 -0
  142. package/dist/number-field.js.map +1 -0
  143. package/dist/pagination.d.ts +35 -0
  144. package/dist/pagination.d.ts.map +1 -0
  145. package/dist/pagination.js +103 -0
  146. package/dist/pagination.js.map +1 -0
  147. package/dist/pin-input.d.ts +25 -0
  148. package/dist/pin-input.d.ts.map +1 -0
  149. package/dist/pin-input.js +30 -0
  150. package/dist/pin-input.js.map +1 -0
  151. package/dist/quantity-field.d.ts +45 -0
  152. package/dist/quantity-field.d.ts.map +1 -0
  153. package/dist/quantity-field.js +168 -0
  154. package/dist/quantity-field.js.map +1 -0
  155. package/dist/radio-group.d.ts +37 -0
  156. package/dist/radio-group.d.ts.map +1 -0
  157. package/dist/radio-group.js +126 -0
  158. package/dist/radio-group.js.map +1 -0
  159. package/dist/rating.d.ts +22 -0
  160. package/dist/rating.d.ts.map +1 -0
  161. package/dist/rating.js +38 -0
  162. package/dist/rating.js.map +1 -0
  163. package/dist/select.d.ts +41 -0
  164. package/dist/select.d.ts.map +1 -0
  165. package/dist/select.js +50 -0
  166. package/dist/select.js.map +1 -0
  167. package/dist/slider.d.ts +59 -0
  168. package/dist/slider.d.ts.map +1 -0
  169. package/dist/slider.js +156 -0
  170. package/dist/slider.js.map +1 -0
  171. package/dist/spin-button.d.ts +35 -0
  172. package/dist/spin-button.d.ts.map +1 -0
  173. package/dist/spin-button.js +78 -0
  174. package/dist/spin-button.js.map +1 -0
  175. package/dist/stepper.d.ts +19 -0
  176. package/dist/stepper.d.ts.map +1 -0
  177. package/dist/stepper.js +14 -0
  178. package/dist/stepper.js.map +1 -0
  179. package/dist/switch.d.ts +15 -0
  180. package/dist/switch.d.ts.map +1 -0
  181. package/dist/switch.js +12 -0
  182. package/dist/switch.js.map +1 -0
  183. package/dist/tabs.d.ts +42 -0
  184. package/dist/tabs.d.ts.map +1 -0
  185. package/dist/tabs.js +128 -0
  186. package/dist/tabs.js.map +1 -0
  187. package/dist/tags-input.d.ts +29 -0
  188. package/dist/tags-input.d.ts.map +1 -0
  189. package/dist/tags-input.js +27 -0
  190. package/dist/tags-input.js.map +1 -0
  191. package/dist/text.d.ts +60 -0
  192. package/dist/text.d.ts.map +1 -0
  193. package/dist/text.js +143 -0
  194. package/dist/text.js.map +1 -0
  195. package/dist/time-field.d.ts +36 -0
  196. package/dist/time-field.d.ts.map +1 -0
  197. package/dist/time-field.js +40 -0
  198. package/dist/time-field.js.map +1 -0
  199. package/dist/toggle-button.d.ts +15 -0
  200. package/dist/toggle-button.d.ts.map +1 -0
  201. package/dist/toggle-button.js +12 -0
  202. package/dist/toggle-button.js.map +1 -0
  203. package/dist/toolbar.d.ts +34 -0
  204. package/dist/toolbar.d.ts.map +1 -0
  205. package/dist/toolbar.js +108 -0
  206. package/dist/toolbar.js.map +1 -0
  207. package/dist/tooltip.d.ts +15 -0
  208. package/dist/tooltip.d.ts.map +1 -0
  209. package/dist/tooltip.js +12 -0
  210. package/dist/tooltip.js.map +1 -0
  211. package/dist/tree-grid.d.ts +94 -0
  212. package/dist/tree-grid.d.ts.map +1 -0
  213. package/dist/tree-grid.js +308 -0
  214. package/dist/tree-grid.js.map +1 -0
  215. package/dist/tree-view.d.ts +75 -0
  216. package/dist/tree-view.d.ts.map +1 -0
  217. package/dist/tree-view.js +213 -0
  218. package/dist/tree-view.js.map +1 -0
  219. package/dist/window-splitter.d.ts +19 -0
  220. package/dist/window-splitter.d.ts.map +1 -0
  221. package/dist/window-splitter.js +48 -0
  222. package/dist/window-splitter.js.map +1 -0
  223. package/package.json +273 -0
package/dist/grid.js ADDED
@@ -0,0 +1,68 @@
1
+ import { createFacadeConnection } from './internal/facade.js';
2
+ import { unwrap } from '@sectile/core/result';
3
+ import { applyGridEvent, createGrid, createGridState } from '@sectile/core/grid';
4
+ import { createSemanticController } from './internal/semantic-controller.js';
5
+ export function createGridControl(options) {
6
+ return unwrap(tryCreateGridControl(options));
7
+ }
8
+ export function tryCreateGridControl(options) {
9
+ return createFacadeConnection(options, (options) => tryCreateGridControlConnection(options));
10
+ }
11
+ function tryCreateGridControlConnection(options) {
12
+ const grid = createGrid(options.rows, options);
13
+ if (!grid.ok)
14
+ return grid;
15
+ const disabled = new Set(options.disabledItems ?? []);
16
+ for (const id of disabled)
17
+ if (grid.value.positionOf(id) === null)
18
+ return { ok: false, error: { class: 'construction', code: 'disabled-item-outside-domain', message: 'Every disabled grid cell must exist in the grid.', details: { id } } };
19
+ const supplied = options.policies?.eligible;
20
+ const policies = { ...options.policies, eligible: (id) => !disabled.has(id) && (supplied?.(id) ?? true) };
21
+ const vc = options.value !== undefined, hc = options.highlightedValue !== undefined, ec = options.editMode !== undefined;
22
+ const selected = options.value !== undefined ? options.value : options.defaultValue ?? null;
23
+ const runtime = createSemanticController({ initial: createGridState(grid.value, { current: options.highlightedValue !== undefined ? options.highlightedValue : options.defaultHighlightedValue ?? null, selected: selected === null ? [] : [selected], anchor: selected, editMode: options.editMode ?? options.defaultEditMode ?? 'navigation' }), reducer: (state, event) => applyGridEvent(grid.value, state, event, policies), reconcile: (previous, proposed) => createGridState(grid.value, { current: hc ? previous.cursor.current : proposed.cursor.current, selected: vc ? previous.selection.selected : proposed.selection.selected, anchor: vc ? previous.selection.anchor : proposed.selection.anchor, editMode: ec ? previous.editMode : proposed.editMode }), notify: (previous, proposed) => { const before = previous.selection.selected[0] ?? null; const after = proposed.selection.selected[0] ?? null; if (before !== after)
24
+ options.onValueChange?.(after); if (previous.cursor.current !== proposed.cursor.current)
25
+ options.onHighlightedValueChange?.(proposed.cursor.current); if (previous.editMode !== proposed.editMode)
26
+ options.onEditModeChange?.(proposed.editMode); }, toEffect: (command) => command, interaction: options, interactionIntent: gridIntent });
27
+ if (!runtime.ok)
28
+ return runtime;
29
+ return { ok: true, value: new TerminalGrid(options, grid.value, runtime.value, vc, hc, ec) };
30
+ }
31
+ class TerminalGrid {
32
+ grid;
33
+ #options;
34
+ #runtime;
35
+ #vc;
36
+ #hc;
37
+ #ec;
38
+ constructor(options, grid, runtime, vc, hc, ec) { this.#options = options; this.grid = grid; this.#runtime = runtime; this.#vc = vc; this.#hc = hc; this.#ec = ec; }
39
+ getSnapshot() { return this.#runtime.getSnapshot(); }
40
+ syncControlledValues(values) { if (this.#vc !== (values.value !== undefined) || this.#hc !== (values.highlightedValue !== undefined) || this.#ec !== (values.editMode !== undefined))
41
+ return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled grid values must preserve their construction-time shape.' } }; const current = this.getSnapshot().state; const selected = values.value === undefined ? current.selection.selected : values.value === null ? [] : [values.value]; const result = this.#runtime.replace(createGridState(this.grid, { current: values.highlightedValue === undefined ? current.cursor.current : values.highlightedValue, selected, anchor: values.value === undefined ? current.selection.anchor : values.value, editMode: values.editMode ?? current.editMode })); if (result.ok)
42
+ this.#options.onUpdate?.(); return result; }
43
+ handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
44
+ for (const command of result.commands) {
45
+ if (command.type === 'begin-edit')
46
+ this.#options.onEditStart?.(command.id);
47
+ else if (command.type === 'commit-edit')
48
+ this.#options.onEditCommit?.(command.id);
49
+ else if (command.type === 'cancel-edit')
50
+ this.#options.onEditCancel?.(command.id);
51
+ } if (result.ok)
52
+ this.#options.onUpdate?.(); return result.ok; }
53
+ handleKeyboardInput(input) { const event = toGridEvent(input, this.getSnapshot().state.editMode); return event === null ? false : this.handleEvent(event); }
54
+ }
55
+ function gridIntent(event) { const type = typeof event === 'object' ? event.type : event; return type === 'start-edit' || type === 'commit-edit' || type === 'cancel-edit' ? 'mutate' : 'navigate'; }
56
+ function toGridEvent(input, editMode) { if (input.ctrlKey)
57
+ return null; if (editMode === 'editing') {
58
+ if (input.key === 'enter')
59
+ return 'commit-edit';
60
+ if (input.key === 'escape')
61
+ return 'cancel-edit';
62
+ return null;
63
+ } if (input.altKey)
64
+ return null; if (input.key === 'left' || input.key === 'right' || input.key === 'up' || input.key === 'down')
65
+ return input.key; if (input.key === 'space')
66
+ return 'select'; if (input.key === 'enter' || input.key === 'edit')
67
+ return 'start-edit'; return null; }
68
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAA+I,MAAM,oBAAoB,CAAC;AAG9N,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mCAAmC,CAAC;AAMtG,MAAM,UAAU,iBAAiB,CAAsB,OAAwB;IAC7E,OAAO,MAAM,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAsB,OAAwB;IAChF,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,8BAA8B,CAAsB,OAAwB;IACnF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAAC,MAAM,QAAQ,GAAC,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAE,EAAE,CAAC,CAAC;IAAA,KAAI,MAAM,EAAE,IAAI,QAAQ;QAAC,IAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,KAAG,IAAI;YAAC,OAAM,EAAC,EAAE,EAAC,KAAK,EAAC,KAAK,EAAC,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,8BAA8B,EAAC,OAAO,EAAC,kDAAkD,EAAC,OAAO,EAAC,EAAC,EAAE,EAAC,EAAC,EAAC,CAAC;IAAA,MAAM,QAAQ,GAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAAA,MAAM,QAAQ,GAAkB,EAAC,GAAG,OAAO,CAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC,EAAE,EAAC,EAAE,CAAA,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAE,IAAI,CAAC,EAAC,CAAC;IAAA,MAAM,EAAE,GAAC,OAAO,CAAC,KAAK,KAAG,SAAS,EAAC,EAAE,GAAC,OAAO,CAAC,gBAAgB,KAAG,SAAS,EAAC,EAAE,GAAC,OAAO,CAAC,QAAQ,KAAG,SAAS,CAAC;IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;IACprB,MAAM,OAAO,GAAG,wBAAwB,CAAiE,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,eAAe,IAAI,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA,IAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,KAAG,QAAQ,CAAC,MAAM,CAAC,OAAO;YAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA,IAAG,QAAQ,CAAC,QAAQ,KAAG,QAAQ,CAAC,QAAQ;YAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;IAClxC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC,EAAE,CAAC;AAC7H,CAAC;AAED,MAAM,YAAY;IACA,IAAI,CAAW;IAAU,QAAQ,CAAkB;IAAU,QAAQ,CAAoE;IAAS,GAAG,CAAS;IAAS,GAAG,CAAS;IAAS,GAAG,CAAS;IACxN,YAAmB,OAAwB,EAAE,IAAc,EAAE,OAA0E,EAAC,EAAU,EAAC,EAAU,EAAC,EAAU,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAA,IAAI,CAAC,GAAG,GAAC,EAAE,CAAC,CAAA,IAAI,CAAC,GAAG,GAAC,EAAE,CAAC,CAAA,IAAI,CAAC,GAAG,GAAC,EAAE,CAAC,CAAC,CAAC;IAC9Q,WAAW,KAAsC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtF,oBAAoB,CAAC,MAAgC,IAA4C,IAAG,IAAI,CAAC,GAAG,KAAG,CAAC,MAAM,CAAC,KAAK,KAAG,SAAS,CAAC,IAAE,IAAI,CAAC,GAAG,KAAG,CAAC,MAAM,CAAC,gBAAgB,KAAG,SAAS,CAAC,IAAE,IAAI,CAAC,GAAG,KAAG,CAAC,MAAM,CAAC,QAAQ,KAAG,SAAS,CAAC;QAAC,OAAM,EAAC,EAAE,EAAC,KAAK,EAAC,KAAK,EAAC,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,2BAA2B,EAAC,OAAO,EAAC,qEAAqE,EAAC,EAAC,CAAC,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA,MAAM,MAAM,GAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA,IAAG,MAAM,CAAC,EAAE;QAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAC14B,WAAW,CAAC,KAAoB,IAAY,MAAM,MAAM,GAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA,IAAG,MAAM,CAAC,EAAE;QAAC,KAAI,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAC,CAAC;YAAA,IAAG,OAAO,CAAC,IAAI,KAAG,YAAY;gBAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBAAK,IAAG,OAAO,CAAC,IAAI,KAAG,aAAa;gBAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBAAK,IAAG,OAAO,CAAC,IAAI,KAAG,aAAa;gBAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAAA,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1a,mBAAmB,CAAC,KAA4B,IAAa,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACpM;AAED,SAAS,UAAU,CAAsB,KAAoB,IAA2B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAEhQ,SAAS,WAAW,CAAC,KAA4B,EAAE,QAAsB,IAAuC,IAAI,KAAK,CAAC,OAAO;IAAE,OAAO,IAAI,CAAC,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;IAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,aAAa,CAAC;IAAC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IAAC,OAAO,IAAI,CAAC;AAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM;IAAE,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;IAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;IAAE,OAAO,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;IAAE,OAAO,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ export type { FacadeConnection } from './internal/facade.js';
2
+ export { connectListbox, createListbox, tryCreateListbox, createListboxController, toListboxEffect, toListboxEvent, type KeyboardInput, type ListboxControlledValues, type ListboxConnection, type ListboxConnectionOptions, type ListboxController, type ListboxControllerOptions, type ListboxEffect, type ListboxHighlightChangeDetails, type ListboxOptions, type ListboxTransitionDetails, type ListboxValueChangeDetails, } from './listbox.js';
3
+ export { createCheckboxGroup, tryCreateCheckboxGroup, type CheckboxGroupConnection, type CheckboxGroupOptions } from './checkbox-group.js';
4
+ export { createSelect, tryCreateSelect, type SelectConnection, type SelectEffect, type SelectOptions } from './select.js';
5
+ export { createPagination, tryCreatePagination, type PaginationConnection, type PaginationControlledValues, type PaginationOptions, } from './pagination.js';
6
+ export { createStepper, tryCreateStepper, type StepperConnection, type StepperOptions } from './stepper.js';
7
+ export { createRating, tryCreateRating, type RatingConnection, type RatingOptions } from './rating.js';
8
+ export { createPinInput, tryCreatePinInput, type PinInputConnection, type PinInputOptions } from './pin-input.js';
9
+ export { createTagsInput, tryCreateTagsInput, type TagsInputConnection, type TagsInputOptions } from './tags-input.js';
10
+ export { createTabs, tryCreateTabs, toTabsEffect, toTabsEvent, type TabsConnection, type TabsEffect, type TabsOptions, } from './tabs.js';
11
+ export { createRadioGroup, tryCreateRadioGroup, toRadioGroupEvent, type RadioGroupConnection, type RadioGroupEffect, type RadioGroupOptions, } from './radio-group.js';
12
+ export { createToolbar, tryCreateToolbar, toToolbarEvent, type ToolbarConnection, type ToolbarEffect, type ToolbarOptions, } from './toolbar.js';
13
+ export { createAccordion, tryCreateAccordion, toAccordionEvent, type AccordionConnection, type AccordionOptions, } from './accordion.js';
14
+ export { createDisclosure, tryCreateDisclosure, toDisclosureEvent, type DisclosureConnection, type DisclosureOptions, } from './disclosure.js';
15
+ export { createCheckbox, tryCreateCheckbox, type CheckboxConnection, type CheckboxOptions, } from './checkbox.js';
16
+ export { createSwitch, tryCreateSwitch, type SwitchConnection, type SwitchOptions } from './switch.js';
17
+ export { createToggleButton, tryCreateToggleButton, type ToggleButtonConnection, type ToggleButtonOptions } from './toggle-button.js';
18
+ export { createWindowSplitter, tryCreateWindowSplitter, type WindowSplitterConnection, type WindowSplitterOptions } from './window-splitter.js';
19
+ export { createSpinButton, tryCreateSpinButton, toSpinButtonEvent, type SpinButtonConnection, type SpinButtonOptions } from './spin-button.js';
20
+ export { createNumberField, tryCreateNumberField, type NumberFieldConnection, type NumberFieldOptions, type NumberFieldValueChangeDetails } from './number-field.js';
21
+ export { createQuantityField, tryCreateQuantityField, type QuantityFieldConnection, type QuantityFieldOptions, type QuantityFieldValueChangeDetails } from './quantity-field.js';
22
+ export { createDialog, tryCreateDialog, type DialogConnection, type DialogOptions } from './dialog.js';
23
+ export { createAlertDialog, tryCreateAlertDialog, type AlertDialogConnection, type AlertDialogOptions } from './alert-dialog.js';
24
+ export { createTooltip, tryCreateTooltip, type TooltipConnection, type TooltipOptions } from './tooltip.js';
25
+ export { createMultiThumbSlider, tryCreateMultiThumbSlider, type MultiThumbSliderConnection, type MultiThumbSliderOptions } from './multi-thumb-slider.js';
26
+ export { createMenu, tryCreateMenu, type MenuConnection, type MenuOptions } from './menu.js';
27
+ export { createMenubar, tryCreateMenubar, type MenubarConnection, type MenubarOptions } from './menubar.js';
28
+ export { createMenuButton, tryCreateMenuButton, type MenuButtonConnection, type MenuButtonOptions } from './menu-button.js';
29
+ export { createCarousel, tryCreateCarousel, type CarouselAutoplayOptions, type CarouselConnection, type CarouselControlledValues, type CarouselOptions, type CarouselScheduler, } from './carousel.js';
30
+ export { createFeed, tryCreateFeed, type FeedConnection, type FeedOptions, type FeedWindow } from './feed.js';
31
+ export { createGridControl, tryCreateGridControl, type GridConnection, type GridControlledValues, type GridOptions } from './grid.js';
32
+ export { connectCalendar, createCalendar, tryCreateCalendar, createCalendarController, toCalendarEffect, toCalendarEvent, type CalendarControlledValues, type CalendarConnection, type CalendarConnectionOptions, type CalendarController, type CalendarControllerOptions, type CalendarEffect, type CalendarHighlightChangeDetails, type CalendarOptions, type CalendarPageRequestDetails, type CalendarTransitionDetails, type CalendarValueChangeDetails, type KeyboardInput as CalendarKeyboardInput, } from './calendar.js';
33
+ export { connectCombobox, createCombobox, tryCreateCombobox, createComboboxController, toComboboxEffect, toComboboxEvent, toComboboxTextEvent, type ComboboxControlledValues, type ComboboxConnection, type ComboboxConnectionOptions, type ComboboxController, type ComboboxControllerOptions, type ComboboxEffect, type ComboboxHighlightChangeDetails, type ComboboxItem, type ComboboxOptions, type ComboboxInputStateChangeDetails, type ComboboxOpenChangeDetails, type ComboboxValueChangeDetails, type ComboboxTransitionDetails, type KeyboardInput as ComboboxKeyboardInput, } from './combobox.js';
34
+ export { connectSlider, createSlider, tryCreateSlider, createSliderController, toSliderEffect, toSliderEvent, type KeyboardInput as SliderKeyboardInput, type SliderControlledValues, type SliderConnection, type SliderConnectionOptions, type SliderController, type SliderControllerOptions, type SliderEffect, type SliderOptions, type SliderTransitionDetails, type SliderValueChangeDetails, } from './slider.js';
35
+ export { connectTreeView, createTreeView, tryCreateTreeView, createTreeViewController, toTreeViewEffect, toTreeViewEvent, type KeyboardInput as TreeViewKeyboardInput, type TreeViewControlledValues, type TreeViewConnection, type TreeViewConnectionOptions, type TreeViewController, type TreeViewControllerOptions, type TreeViewEffect, type TreeViewExpandedChangeDetails, type TreeViewHighlightChangeDetails, type TreeViewOptions, type TreeViewTransitionDetails, type TreeViewValueChangeDetails, } from './tree-view.js';
36
+ export { connectTreeGrid, createTreeGrid, tryCreateTreeGrid, createTreeGridController, toTreeGridEffect, toTreeGridEvent, type KeyboardInput as TreeGridKeyboardInput, type TreeGridControlledValues, type TreeGridConnection, type TreeGridConnectionOptions, type TreeGridController, type TreeGridControllerOptions, type TreeGridEditModeChangeDetails, type TreeGridEffect, type TreeGridExpandedChangeDetails, type TreeGridHighlightChangeDetails, type TreeGridOptions, type TreeGridTransitionDetails, type TreeGridValueChangeDetails, } from './tree-grid.js';
37
+ export { connectText, createText, tryCreateText, createTextController, toTextEvent, type TextControlledValues, type TextConnection, type TextConnectionOptions, type TextController, type TextControllerOptions, type TextInput as TerminalTextInput, type TextOptions, type TextTransitionDetails, type TextValueChangeDetails, } from './text.js';
38
+ export type { TerminalKeyboardInput } from './keyboard.js';
39
+ export { createDateField, tryCreateDateField, type DateFieldConnection, type DateFieldControlledValues, type DateFieldOptions } from './date-field.js';
40
+ export { createDateTimeField, tryCreateDateTimeField, type DateTimeFieldConnection, type DateTimeFieldControlledValues, type DateTimeFieldOptions } from './date-time-field.js';
41
+ export { createTimeField, tryCreateTimeField, type TimeFieldConnection, type TimeFieldControlledValues, type TimeFieldOptions } from './time-field.js';
42
+ export { createDatePicker, tryCreateDatePicker, toDatePickerEvent, type DatePickerConnection, type DatePickerControlledValues, type DatePickerOptions } from './date-picker.js';
43
+ export { createDateRangePicker, tryCreateDateRangePicker, type DateRangePickerConnection, type DateRangePickerControlledValues, type DateRangePickerOptions } from './date-range-picker.js';
44
+ export { createDateTimePicker, tryCreateDateTimePicker, type DateTimePickerConnection, type DateTimePickerControlledValues, type DateTimePickerOptions } from './date-time-picker.js';
45
+ export { createDateTimeRangePicker, tryCreateDateTimeRangePicker, type DateTimeRangePickerConnection, type DateTimeRangePickerControlledValues, type DateTimeRangePickerOptions } from './date-time-range-picker.js';
46
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ export { connectListbox, createListbox, tryCreateListbox, createListboxController, toListboxEffect, toListboxEvent, } from './listbox.js';
2
+ export { createCheckboxGroup, tryCreateCheckboxGroup } from './checkbox-group.js';
3
+ export { createSelect, tryCreateSelect } from './select.js';
4
+ export { createPagination, tryCreatePagination, } from './pagination.js';
5
+ export { createStepper, tryCreateStepper } from './stepper.js';
6
+ export { createRating, tryCreateRating } from './rating.js';
7
+ export { createPinInput, tryCreatePinInput } from './pin-input.js';
8
+ export { createTagsInput, tryCreateTagsInput } from './tags-input.js';
9
+ export { createTabs, tryCreateTabs, toTabsEffect, toTabsEvent, } from './tabs.js';
10
+ export { createRadioGroup, tryCreateRadioGroup, toRadioGroupEvent, } from './radio-group.js';
11
+ export { createToolbar, tryCreateToolbar, toToolbarEvent, } from './toolbar.js';
12
+ export { createAccordion, tryCreateAccordion, toAccordionEvent, } from './accordion.js';
13
+ export { createDisclosure, tryCreateDisclosure, toDisclosureEvent, } from './disclosure.js';
14
+ export { createCheckbox, tryCreateCheckbox, } from './checkbox.js';
15
+ export { createSwitch, tryCreateSwitch } from './switch.js';
16
+ export { createToggleButton, tryCreateToggleButton } from './toggle-button.js';
17
+ export { createWindowSplitter, tryCreateWindowSplitter } from './window-splitter.js';
18
+ export { createSpinButton, tryCreateSpinButton, toSpinButtonEvent } from './spin-button.js';
19
+ export { createNumberField, tryCreateNumberField } from './number-field.js';
20
+ export { createQuantityField, tryCreateQuantityField } from './quantity-field.js';
21
+ export { createDialog, tryCreateDialog } from './dialog.js';
22
+ export { createAlertDialog, tryCreateAlertDialog } from './alert-dialog.js';
23
+ export { createTooltip, tryCreateTooltip } from './tooltip.js';
24
+ export { createMultiThumbSlider, tryCreateMultiThumbSlider } from './multi-thumb-slider.js';
25
+ export { createMenu, tryCreateMenu } from './menu.js';
26
+ export { createMenubar, tryCreateMenubar } from './menubar.js';
27
+ export { createMenuButton, tryCreateMenuButton } from './menu-button.js';
28
+ export { createCarousel, tryCreateCarousel, } from './carousel.js';
29
+ export { createFeed, tryCreateFeed } from './feed.js';
30
+ export { createGridControl, tryCreateGridControl } from './grid.js';
31
+ export { connectCalendar, createCalendar, tryCreateCalendar, createCalendarController, toCalendarEffect, toCalendarEvent, } from './calendar.js';
32
+ export { connectCombobox, createCombobox, tryCreateCombobox, createComboboxController, toComboboxEffect, toComboboxEvent, toComboboxTextEvent, } from './combobox.js';
33
+ export { connectSlider, createSlider, tryCreateSlider, createSliderController, toSliderEffect, toSliderEvent, } from './slider.js';
34
+ export { connectTreeView, createTreeView, tryCreateTreeView, createTreeViewController, toTreeViewEffect, toTreeViewEvent, } from './tree-view.js';
35
+ export { connectTreeGrid, createTreeGrid, tryCreateTreeGrid, createTreeGridController, toTreeGridEffect, toTreeGridEvent, } from './tree-grid.js';
36
+ export { connectText, createText, tryCreateText, createTextController, toTextEvent, } from './text.js';
37
+ export { createDateField, tryCreateDateField } from './date-field.js';
38
+ export { createDateTimeField, tryCreateDateTimeField } from './date-time-field.js';
39
+ export { createTimeField, tryCreateTimeField } from './time-field.js';
40
+ export { createDatePicker, tryCreateDatePicker, toDatePickerEvent } from './date-picker.js';
41
+ export { createDateRangePicker, tryCreateDateRangePicker } from './date-range-picker.js';
42
+ export { createDateTimePicker, tryCreateDateTimePicker } from './date-time-picker.js';
43
+ export { createDateTimeRangePicker, tryCreateDateTimeRangePicker } from './date-time-range-picker.js';
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Result } from '@sectile/core';
2
+ import type { InteractionStateInput } from '@sectile/core/interaction';
3
+ import type { MachineUpdate, RevisionSnapshot } from '@sectile/core/revision';
4
+ import type { TerminalKeyboardInput } from '../keyboard.js';
5
+ export interface TerminalCheckedControl<State, Event, Value> {
6
+ getSnapshot(): RevisionSnapshot<State>;
7
+ syncControlledValue(value: Value): Result<RevisionSnapshot<State>>;
8
+ handleEvent(event: Event): boolean;
9
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
10
+ }
11
+ export interface Options<State, Event, Command, Value> {
12
+ readonly controlled: boolean;
13
+ readonly initial: Result<State>;
14
+ readonly toggleEvent: Event;
15
+ readonly reducer: (state: State, event: Event) => Result<MachineUpdate<State, Command>>;
16
+ readonly create: (value: Value) => Result<State>;
17
+ readonly read: (state: State) => Value;
18
+ readonly onChange: ((value: Value) => void) | undefined;
19
+ readonly onUpdate: (() => void) | undefined;
20
+ readonly interaction?: InteractionStateInput;
21
+ }
22
+ export declare function createTerminalCheckedControl<State, Event, Command, Value>(options: Options<State, Event, Command, Value>): Result<TerminalCheckedControl<State, Event, Value>>;
23
+ //# sourceMappingURL=checked-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checked-control.d.ts","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAAC,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAAC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEhQ,MAAM,WAAW,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK;IAAI,WAAW,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAAC,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAA;CAAE;AAC3Q,MAAM,WAAW,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAA;CAAE;AAC5d,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAG9K"}
@@ -0,0 +1,22 @@
1
+ import { createSemanticController } from './semantic-controller.js';
2
+ export function createTerminalCheckedControl(options) {
3
+ const runtime = createSemanticController({ initial: options.initial, reducer: options.reducer, reconcile: (previous, proposed) => options.controlled ? options.create(options.read(previous)) : options.create(options.read(proposed)), notify: (previous, proposed) => { if (options.read(previous) !== options.read(proposed))
4
+ options.onChange?.(options.read(proposed)); }, toEffect: (command) => command, interaction: options.interaction });
5
+ if (!runtime.ok)
6
+ return runtime;
7
+ return { ok: true, value: new Impl(options, runtime.value) };
8
+ }
9
+ class Impl {
10
+ #options;
11
+ #runtime;
12
+ constructor(options, runtime) { this.#options = options; this.#runtime = runtime; }
13
+ getSnapshot() { return this.#runtime.getSnapshot(); }
14
+ syncControlledValue(value) { if (!this.#options.controlled)
15
+ return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled checked control cannot be synchronized externally.' } }; const result = this.#runtime.replace(this.#options.create(value)); if (result.ok)
16
+ this.#options.onUpdate?.(); return result; }
17
+ handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
18
+ this.#options.onUpdate?.(); return result.ok; }
19
+ handleKeyboardInput(input) { if (input.key !== 'enter' && input.key !== 'space')
20
+ return false; return this.handleEvent(this.#options.toggleEvent); }
21
+ }
22
+ //# sourceMappingURL=checked-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checked-control.js","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,0BAA0B,CAAC;AAG7F,MAAM,UAAU,4BAA4B,CAA+B,OAA8C;IACvH,MAAM,OAAO,GAAG,wBAAwB,CAAiC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACpd,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AAChG,CAAC;AACD,MAAM,IAAI;IACC,QAAQ,CAAwC;IAAU,QAAQ,CAA4C;IACvH,YAAmB,OAA8C,EAAE,OAAkD,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IACrK,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,KAAY,IAAqC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,oEAAoE,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;IAC/Y,WAAW,CAAC,KAAY,IAAa,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/I,mBAAmB,CAAC,KAA4B,IAAa,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC5L"}
@@ -0,0 +1,6 @@
1
+ import type { Result } from '@sectile/core';
2
+ import { type EventReducer, type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
3
+ export declare function applyControllerEvent<State, Event, Command, Effect>(current: RevisionSnapshot<State>, expectedRevision: number, event: Event, reducer: EventReducer<State, Event, Command>, reconcile: (previous: State, proposed: State) => Result<State>, notify: (previous: State, proposed: State) => void, toEffect: (command: Command) => Effect): RevisionResult<State, Effect>;
4
+ export declare function synchronizeControllerState<State>(current: RevisionSnapshot<State>, state: Result<State>): Result<RevisionSnapshot<State>>;
5
+ export declare function sameControllerState<State>(left: State, right: State): boolean;
6
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/internal/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAChE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAChC,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAC5C,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAC9D,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,IAAI,EAClD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GACrC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAc/B;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAC9C,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAChC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GACnB,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAcjC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAE7E"}
@@ -0,0 +1,35 @@
1
+ import { applyRevisionedEvent, createRevisionSnapshot, mapRevisionCommands, rejectRevisionInput, } from '@sectile/core/revision';
2
+ export function applyControllerEvent(current, expectedRevision, event, reducer, reconcile, notify, toEffect) {
3
+ const semantic = applyRevisionedEvent(current, expectedRevision, event, reducer);
4
+ if (!semantic.ok)
5
+ return semantic;
6
+ const committed = reconcile(current.state, semantic.snapshot.state);
7
+ if (!committed.ok)
8
+ return rejectRevisionInput(current, committed.error);
9
+ const snapshot = Object.freeze({
10
+ revision: semantic.snapshot.revision,
11
+ state: committed.value,
12
+ });
13
+ notify(current.state, semantic.snapshot.state);
14
+ return mapRevisionCommands(Object.freeze({ ok: true, snapshot, commands: semantic.commands }), toEffect);
15
+ }
16
+ export function synchronizeControllerState(current, state) {
17
+ if (!state.ok)
18
+ return state;
19
+ if (current.revision === Number.MAX_SAFE_INTEGER) {
20
+ return {
21
+ ok: false,
22
+ error: {
23
+ class: 'resource-rejection',
24
+ code: 'revision-ceiling-reached',
25
+ message: 'Controller revision cannot advance beyond the safe-integer ceiling.',
26
+ details: { revision: current.revision },
27
+ },
28
+ };
29
+ }
30
+ return createRevisionSnapshot(state.value, current.revision + 1);
31
+ }
32
+ export function sameControllerState(left, right) {
33
+ return JSON.stringify(left) === JSON.stringify(right);
34
+ }
35
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/internal/controller.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GAIpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,UAAU,oBAAoB,CAClC,OAAgC,EAChC,gBAAwB,EACxB,KAAY,EACZ,OAA4C,EAC5C,SAA8D,EAC9D,MAAkD,EAClD,QAAsC;IAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ;QACpC,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/C,OAAO,mBAAmB,CACxB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC3E,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAgC,EAChC,KAAoB;IAEpB,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACjD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,qEAAqE;gBAC9E,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;aACxC;SACF,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAQ,IAAW,EAAE,KAAY;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Result, StableID } from '@sectile/core';
2
+ export interface IdentityDomain<ID extends StableID> {
3
+ contains(id: ID): boolean;
4
+ }
5
+ export declare function createDisabledItems<ID extends StableID>(domain: IdentityDomain<ID>, items?: readonly ID[]): Result<ReadonlySet<ID>>;
6
+ //# sourceMappingURL=disabled-items.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disabled-items.d.ts","sourceRoot":"","sources":["../../src/internal/disabled-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,QAAQ;IACjD,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EACrD,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,EAC1B,KAAK,GAAE,SAAS,EAAE,EAAO,GACxB,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAazB"}
@@ -0,0 +1,15 @@
1
+ export function createDisabledItems(domain, items = []) {
2
+ const disabled = new Set(items);
3
+ for (const id of disabled) {
4
+ if (!domain.contains(id)) {
5
+ return { ok: false, error: {
6
+ class: 'construction',
7
+ code: 'disabled-item-outside-domain',
8
+ message: 'Every disabled item must exist in the component domain.',
9
+ details: { id },
10
+ } };
11
+ }
12
+ }
13
+ return { ok: true, value: disabled };
14
+ }
15
+ //# sourceMappingURL=disabled-items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disabled-items.js","sourceRoot":"","sources":["../../src/internal/disabled-items.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,mBAAmB,CACjC,MAA0B,EAC1B,KAAK,GAAkB,EAAE;IAEzB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;oBACzB,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,yDAAyD;oBAClE,OAAO,EAAE,EAAE,EAAE,EAAE;iBAChB,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { Result } from '@sectile/core';
2
+ interface SnapshotConnection {
3
+ getSnapshot(): {
4
+ readonly state: unknown;
5
+ };
6
+ }
7
+ interface FacadeOptions {
8
+ readonly onUpdate?: () => void;
9
+ }
10
+ type SnapshotOf<Connection extends SnapshotConnection> = ReturnType<Connection['getSnapshot']>;
11
+ type StateOf<Connection extends SnapshotConnection> = SnapshotOf<Connection>['state'];
12
+ type SendInput<Connection> = Connection extends {
13
+ handleEvent(input: infer Input): boolean;
14
+ } ? Input : Connection extends {
15
+ handleKeyboardInput(input: infer Input): boolean;
16
+ } ? Input : Connection extends {
17
+ handleKeyboardEvent(input: infer Input): boolean;
18
+ } ? Input : Connection extends {
19
+ handleBeforeInput(input: infer Input): boolean;
20
+ } ? Input : never;
21
+ type UpdateInput<Connection> = Connection extends {
22
+ syncControlledValues(input: infer Input): unknown;
23
+ } ? Input : Connection extends {
24
+ syncControlledValue(input: infer Input): unknown;
25
+ } ? Input : Connection extends {
26
+ syncWindow(input: infer Input): unknown;
27
+ } ? Input : never;
28
+ type UpdateResult<Connection> = Connection extends {
29
+ syncControlledValues(input: infer _Input): infer Output;
30
+ } ? Output : Connection extends {
31
+ syncControlledValue(input: infer _Input): infer Output;
32
+ } ? Output : Connection extends {
33
+ syncWindow(input: infer _Input): infer Output;
34
+ } ? Output : never;
35
+ export type FacadeConnection<Connection extends SnapshotConnection> = Connection & {
36
+ readonly state: StateOf<Connection>;
37
+ send(input: SendInput<Connection>): boolean;
38
+ update(input: UpdateInput<Connection>): UpdateResult<Connection>;
39
+ subscribe(listener: (snapshot: SnapshotOf<Connection>) => void): () => void;
40
+ destroy(): void;
41
+ };
42
+ export declare function createFacadeConnection<Options extends FacadeOptions, Connection extends SnapshotConnection>(options: Options, construct: (options: Options) => Result<Connection>): Result<FacadeConnection<Connection>>;
43
+ export {};
44
+ //# sourceMappingURL=facade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/internal/facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,UAAU,kBAAkB;IAC1B,WAAW,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,KAAK,UAAU,CAAC,UAAU,SAAS,kBAAkB,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/F,KAAK,OAAO,CAAC,UAAU,SAAS,kBAAkB,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;AACtF,KAAK,SAAS,CAAC,UAAU,IAAI,UAAU,SAAS;IAAE,WAAW,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACxF,KAAK,GACL,UAAU,SAAS;IAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACrE,KAAK,GACL,UAAU,SAAS;IAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACrE,KAAK,GACL,UAAU,SAAS;IAAE,iBAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACnE,KAAK,GACL,KAAK,CAAC;AAChB,KAAK,WAAW,CAAC,UAAU,IAAI,UAAU,SAAS;IAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACnG,KAAK,GACL,UAAU,SAAS;IAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GACrE,KAAK,GACL,UAAU,SAAS;IAAE,UAAU,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,CAAA;CAAE,GAC5D,KAAK,GACL,KAAK,CAAC;AACd,KAAK,YAAY,CAAC,UAAU,IAAI,UAAU,SAAS;IAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAA;CAAE,GAC1G,MAAM,GACN,UAAU,SAAS;IAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAA;CAAE,GAC3E,MAAM,GACN,UAAU,SAAS;IAAE,UAAU,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAA;CAAE,GAClE,MAAM,GACN,KAAK,CAAC;AAEd,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,kBAAkB,IAAI,UAAU,GAAG;IACjF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IACjE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5E,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,OAAO,SAAS,aAAa,EAC7B,UAAU,SAAS,kBAAkB,EAErC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,UAAU,CAAC,GAClD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAqCtC"}
@@ -0,0 +1,58 @@
1
+ export function createFacadeConnection(options, construct) {
2
+ const subscribers = new Set();
3
+ let connection;
4
+ let active = true;
5
+ const onUpdate = () => {
6
+ options.onUpdate?.();
7
+ if (connection === undefined)
8
+ return;
9
+ const snapshot = connection.getSnapshot();
10
+ for (const subscriber of subscribers)
11
+ subscriber(snapshot);
12
+ };
13
+ const constructed = construct({ ...options, onUpdate });
14
+ if (!constructed.ok)
15
+ return constructed;
16
+ connection = constructed.value;
17
+ const target = connection;
18
+ const facade = new Proxy(target, {
19
+ get: (_target, property) => {
20
+ if (property === 'state')
21
+ return connection?.getSnapshot().state;
22
+ if (property === 'send')
23
+ return (input) => active && Boolean(callFirst(target, ['handleEvent', 'handleKeyboardInput', 'handleKeyboardEvent', 'handleBeforeInput'], input));
24
+ if (property === 'update')
25
+ return (input) => callFirst(target, ['syncControlledValues', 'syncControlledValue', 'syncWindow'], input);
26
+ if (property === 'subscribe')
27
+ return (listener) => {
28
+ subscribers.add(listener);
29
+ return () => { subscribers.delete(listener); };
30
+ };
31
+ if (property === 'destroy')
32
+ return () => {
33
+ if (!active)
34
+ return;
35
+ active = false;
36
+ const disconnect = target['disconnect'];
37
+ if (typeof disconnect === 'function')
38
+ Reflect.apply(disconnect, target, []);
39
+ subscribers.clear();
40
+ };
41
+ const value = Reflect.get(target, property, target);
42
+ const ownDescriptor = Reflect.getOwnPropertyDescriptor(target, property);
43
+ if (ownDescriptor !== undefined && ownDescriptor.configurable === false)
44
+ return value;
45
+ return typeof value === 'function' ? value.bind(target) : value;
46
+ },
47
+ });
48
+ return { ok: true, value: facade };
49
+ }
50
+ function callFirst(target, names, input) {
51
+ for (const name of names) {
52
+ const method = target[name];
53
+ if (typeof method === 'function')
54
+ return Reflect.apply(method, target, [input]);
55
+ }
56
+ throw new TypeError(`The connection does not implement ${names.join(' or ')}.`);
57
+ }
58
+ //# sourceMappingURL=facade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/internal/facade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Result, StableID } from '@sectile/core';
2
+ import type { RevisionSnapshot } from '@sectile/core/revision';
3
+ import type { TreeNodeInput } from '@sectile/core/tree';
4
+ import { type MenuEvent, type MenuPolicies, type MenuState } from '@sectile/core/menu';
5
+ import type { TerminalKeyboardInput } from '../keyboard.js';
6
+ export type MenuKind = 'menu' | 'menubar' | 'menu-button';
7
+ export interface MenuTypeaheadOptions<ID extends StableID> {
8
+ readonly textValue: (id: ID) => string;
9
+ readonly timeout?: number;
10
+ readonly now?: () => number;
11
+ readonly normalize?: (text: string) => string;
12
+ }
13
+ export interface MenuControlOptions<ID extends StableID> {
14
+ readonly disabled?: boolean;
15
+ readonly items: readonly TreeNodeInput<ID>[];
16
+ readonly kind: MenuKind;
17
+ readonly policies?: MenuPolicies<ID>;
18
+ readonly disabledItems?: readonly ID[];
19
+ readonly open?: boolean;
20
+ readonly defaultOpen?: boolean;
21
+ readonly defaultHighlightedValue?: ID | null;
22
+ readonly typeahead?: MenuTypeaheadOptions<ID>;
23
+ readonly onOpenChange?: (open: boolean) => void;
24
+ readonly onInvoke?: (id: ID) => void;
25
+ readonly onUpdate?: () => void;
26
+ }
27
+ export interface MenuControl<ID extends StableID> {
28
+ getSnapshot(): RevisionSnapshot<MenuState<ID>>;
29
+ syncControlledValue(open: boolean): Result<RevisionSnapshot<MenuState<ID>>>;
30
+ handleEvent(event: MenuEvent<ID>): boolean;
31
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
32
+ }
33
+ export declare function createMenuControl<ID extends StableID>(options: MenuControlOptions<ID>): Result<MenuControl<ID>>;
34
+ //# sourceMappingURL=menu-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-control.d.ts","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAAC,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAAC,OAAO,EAAsE,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAAC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC9Y,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC;AAAC,MAAM,WAAW,oBAAoB,CAAC,EAAE,SAAS,QAAQ;IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE;AAAC,MAAM,WAAW,kBAAkB,CAAC,EAAE,SAAS,QAAQ;IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAAC,MAAM,WAAW,WAAW,CAAC,EAAE,SAAS,QAAQ;IAAI,WAAW,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAAC,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAA;CAAE;AAC5hC,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAwlD"}
@@ -0,0 +1,48 @@
1
+ import { applyMenuEvent, createMenuModel, createMenuState } from '@sectile/core/menu';
2
+ import { createSemanticController } from './semantic-controller.js';
3
+ export function createMenuControl(options) { const model = createMenuModel(options.items); if (!model.ok)
4
+ return model; const disabled = new Set(options.disabledItems ?? []); for (const id of disabled)
5
+ if (!model.value.tree.has(id))
6
+ return { ok: false, error: { class: 'construction', code: 'disabled-item-outside-domain', message: 'Every disabled menu item must exist in the menu tree.', details: { id } } }; const suppliedDisabled = options.policies?.disabled; const policies = { ...options.policies, disabled: (id) => disabled.has(id) || (suppliedDisabled?.(id) ?? false) }; const openControlled = options.kind === 'menu-button' && options.open !== undefined; const initialOpen = options.kind === 'menu-button' ? options.open ?? options.defaultOpen ?? false : true; const runtime = createSemanticController({ interaction: options, initial: createMenuState(model.value.tree, initialOpen, initialOpen ? options.defaultHighlightedValue ?? null : null, []), reducer: (state, event) => applyMenuEvent(model.value.tree, state, event, policies), reconcile: (previous, proposed) => { const open = options.kind === 'menu-button' ? openControlled ? previous.open : proposed.open : true; return createMenuState(model.value.tree, open, open ? proposed.cursor.current : null, open ? proposed.openPath : []); }, notify: (previous, proposed) => { if (previous.open !== proposed.open)
7
+ options.onOpenChange?.(proposed.open); }, toEffect: (command) => command }); return runtime.ok ? { ok: true, value: new TerminalMenuControl(options, model.value.tree, runtime.value, openControlled) } : runtime; }
8
+ class TerminalMenuControl {
9
+ #options;
10
+ #tree;
11
+ #runtime;
12
+ #openControlled;
13
+ #typeaheadBuffer = '';
14
+ #lastTypeaheadAt = Number.NEGATIVE_INFINITY;
15
+ constructor(options, tree, runtime, openControlled) { this.#options = options; this.#tree = tree; this.#runtime = runtime; this.#openControlled = openControlled; }
16
+ getSnapshot() { return this.#runtime.getSnapshot(); }
17
+ syncControlledValue(open) { if (!this.#openControlled)
18
+ return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'Only a controlled menu button can synchronize open state.' } }; const state = this.getSnapshot().state; const result = this.#runtime.replace(createMenuState(this.#tree, open, open ? state.cursor.current : null, open ? state.openPath : [])); if (result.ok)
19
+ this.#options.onUpdate?.(); return result; }
20
+ handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok) {
21
+ for (const effect of result.commands)
22
+ if (effect.type === 'invoke')
23
+ this.#options.onInvoke?.(effect.id);
24
+ this.#options.onUpdate?.();
25
+ } return result.ok; }
26
+ handleKeyboardInput(input) { if (this.#handleTypeahead(input))
27
+ return true; const event = toMenuEvent(input, this.#options.kind); return event === null ? false : this.handleEvent(event); }
28
+ #handleTypeahead(input) { const config = this.#options.typeahead; if (config === undefined || input.altKey || input.ctrlKey || input.key.length !== 1)
29
+ return false; const now = config.now?.() ?? Date.now(), timeout = config.timeout ?? 500; this.#typeaheadBuffer = now - this.#lastTypeaheadAt > timeout ? input.key : `${this.#typeaheadBuffer}${input.key}`; this.#lastTypeaheadAt = now; const normalize = config.normalize ?? ((text) => text.normalize('NFKC').toLocaleLowerCase()); const current = this.getSnapshot().state.cursor.current; const siblings = current === null || this.#tree.parentOf(current) === null ? this.#tree.roots.ids : this.#tree.childrenOf(this.#tree.parentOf(current))?.ids ?? []; if (siblings.length === 0)
30
+ return true; const start = current === null ? 0 : (siblings.indexOf(current) + 1) % siblings.length, query = normalize(this.#typeaheadBuffer); for (let offset = 0; offset < siblings.length; offset += 1) {
31
+ const id = siblings[(start + offset) % siblings.length];
32
+ if (normalize(config.textValue(id)).startsWith(query)) {
33
+ this.handleEvent({ type: 'focus', id });
34
+ break;
35
+ }
36
+ } return true; }
37
+ }
38
+ function toMenuEvent(input, kind) { if (input.altKey || input.ctrlKey)
39
+ return null; if (input.key === 'escape')
40
+ return 'escape'; if (input.key === 'home')
41
+ return 'first'; if (input.key === 'end')
42
+ return 'last'; if (input.key === 'enter' || input.key === 'space')
43
+ return 'invoke'; if (input.key === 'down')
44
+ return kind === 'menubar' ? 'open-submenu' : 'next'; if (input.key === 'up')
45
+ return 'previous'; if (input.key === 'right')
46
+ return kind === 'menubar' ? 'next' : 'open-submenu'; if (input.key === 'left')
47
+ return kind === 'menubar' ? 'previous' : 'close-submenu'; return null; }
48
+ //# sourceMappingURL=menu-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-control.js","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"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"}