@sectile/terminal 0.7.0 → 0.9.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 (198) hide show
  1. package/dist/accordion.d.ts +0 -1
  2. package/dist/alert-dialog.d.ts +0 -1
  3. package/dist/appearance.d.ts +0 -1
  4. package/dist/calendar.d.ts +0 -1
  5. package/dist/carousel.d.ts +0 -1
  6. package/dist/cascade-list.d.ts +38 -0
  7. package/dist/cascade-list.js +102 -0
  8. package/dist/cascade-list.js.map +1 -0
  9. package/dist/cascade-select.d.ts +1 -2
  10. package/dist/cascade-select.js +11 -31
  11. package/dist/cascade-select.js.map +1 -1
  12. package/dist/checkbox-group.d.ts +0 -1
  13. package/dist/checkbox.d.ts +0 -1
  14. package/dist/color-picker.d.ts +0 -1
  15. package/dist/combobox.d.ts +0 -1
  16. package/dist/date-field.d.ts +0 -1
  17. package/dist/date-picker.d.ts +0 -1
  18. package/dist/date-range-field.d.ts +0 -1
  19. package/dist/date-range-picker.d.ts +0 -1
  20. package/dist/date-time-field.d.ts +0 -1
  21. package/dist/date-time-picker.d.ts +0 -1
  22. package/dist/date-time-range-picker.d.ts +0 -1
  23. package/dist/dialog.d.ts +0 -1
  24. package/dist/disclosure.d.ts +0 -1
  25. package/dist/drawer.d.ts +0 -1
  26. package/dist/editable.d.ts +0 -1
  27. package/dist/feed.d.ts +0 -1
  28. package/dist/grid.d.ts +2 -2
  29. package/dist/grid.js +7 -6
  30. package/dist/grid.js.map +1 -1
  31. package/dist/index.d.ts +5 -2
  32. package/dist/index.js +4 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/internal/cascade-choice.d.ts +21 -0
  35. package/dist/internal/cascade-choice.js +36 -0
  36. package/dist/internal/cascade-choice.js.map +1 -0
  37. package/dist/internal/checked-control.d.ts +2 -3
  38. package/dist/internal/checked-control.js +3 -5
  39. package/dist/internal/checked-control.js.map +1 -1
  40. package/dist/internal/disabled-items.d.ts +0 -1
  41. package/dist/internal/disabled-items.js +2 -12
  42. package/dist/internal/disabled-items.js.map +1 -1
  43. package/dist/internal/grapheme.d.ts +2 -1
  44. package/dist/internal/grapheme.js +67 -0
  45. package/dist/internal/grapheme.js.map +1 -1
  46. package/dist/internal/menu-control.d.ts +0 -1
  47. package/dist/internal/menu-control.js +14 -41
  48. package/dist/internal/menu-control.js.map +1 -1
  49. package/dist/internal/popup-control.d.ts +2 -3
  50. package/dist/internal/popup-control.js +3 -5
  51. package/dist/internal/popup-control.js.map +1 -1
  52. package/dist/internal/reference-date.d.ts +0 -1
  53. package/dist/internal/result.d.ts +0 -1
  54. package/dist/internal/text-input.d.ts +0 -1
  55. package/dist/keyboard.d.ts +0 -1
  56. package/dist/layer-stack.d.ts +0 -1
  57. package/dist/layout.d.ts +0 -1
  58. package/dist/layout.js +4 -5
  59. package/dist/layout.js.map +1 -1
  60. package/dist/listbox.d.ts +0 -1
  61. package/dist/menu-button.d.ts +0 -1
  62. package/dist/menu.d.ts +0 -1
  63. package/dist/menubar.d.ts +0 -1
  64. package/dist/meter-group.d.ts +28 -0
  65. package/dist/meter-group.js +120 -0
  66. package/dist/meter-group.js.map +1 -0
  67. package/dist/meter.d.ts +21 -0
  68. package/dist/meter.js +98 -0
  69. package/dist/meter.js.map +1 -0
  70. package/dist/month-picker.d.ts +0 -1
  71. package/dist/month-range-picker.d.ts +0 -1
  72. package/dist/multi-thumb-slider.d.ts +0 -1
  73. package/dist/navigation-menu.d.ts +0 -1
  74. package/dist/node.d.ts +0 -1
  75. package/dist/number-field.d.ts +0 -1
  76. package/dist/pagination.d.ts +0 -1
  77. package/dist/pin-input.d.ts +0 -1
  78. package/dist/popover.d.ts +0 -1
  79. package/dist/progress.d.ts +22 -0
  80. package/dist/progress.js +76 -0
  81. package/dist/progress.js.map +1 -0
  82. package/dist/quantity-field.d.ts +0 -1
  83. package/dist/radio-group.d.ts +0 -1
  84. package/dist/radio-group.js +9 -1
  85. package/dist/radio-group.js.map +1 -1
  86. package/dist/range-calendar.d.ts +0 -1
  87. package/dist/rating.d.ts +2 -3
  88. package/dist/rating.js +125 -28
  89. package/dist/rating.js.map +1 -1
  90. package/dist/reorder.d.ts +0 -1
  91. package/dist/screen.d.ts +0 -1
  92. package/dist/screen.js +107 -67
  93. package/dist/screen.js.map +1 -1
  94. package/dist/select.d.ts +0 -1
  95. package/dist/slider.d.ts +0 -1
  96. package/dist/spin-button.d.ts +0 -1
  97. package/dist/stepper.d.ts +0 -1
  98. package/dist/switch.d.ts +0 -1
  99. package/dist/tabs.d.ts +0 -1
  100. package/dist/tabs.js +7 -1
  101. package/dist/tabs.js.map +1 -1
  102. package/dist/tags-input.d.ts +0 -1
  103. package/dist/text.d.ts +0 -1
  104. package/dist/time-field.d.ts +0 -1
  105. package/dist/time-range-field.d.ts +0 -1
  106. package/dist/timer.d.ts +0 -1
  107. package/dist/toast.d.ts +0 -1
  108. package/dist/toggle-button.d.ts +0 -1
  109. package/dist/toggle-group.d.ts +0 -1
  110. package/dist/toolbar.d.ts +0 -1
  111. package/dist/tooltip.d.ts +0 -1
  112. package/dist/tree-grid.d.ts +0 -1
  113. package/dist/tree-view.d.ts +0 -1
  114. package/dist/tree-view.js +5 -5
  115. package/dist/tree-view.js.map +1 -1
  116. package/dist/window-splitter.d.ts +0 -1
  117. package/dist/year-picker.d.ts +0 -1
  118. package/dist/year-range-picker.d.ts +0 -1
  119. package/package.json +26 -12
  120. package/dist/accordion.d.ts.map +0 -1
  121. package/dist/alert-dialog.d.ts.map +0 -1
  122. package/dist/appearance.d.ts.map +0 -1
  123. package/dist/calendar.d.ts.map +0 -1
  124. package/dist/carousel.d.ts.map +0 -1
  125. package/dist/cascade-select.d.ts.map +0 -1
  126. package/dist/checkbox-group.d.ts.map +0 -1
  127. package/dist/checkbox.d.ts.map +0 -1
  128. package/dist/color-picker.d.ts.map +0 -1
  129. package/dist/combobox.d.ts.map +0 -1
  130. package/dist/date-field.d.ts.map +0 -1
  131. package/dist/date-picker.d.ts.map +0 -1
  132. package/dist/date-range-field.d.ts.map +0 -1
  133. package/dist/date-range-picker.d.ts.map +0 -1
  134. package/dist/date-time-field.d.ts.map +0 -1
  135. package/dist/date-time-picker.d.ts.map +0 -1
  136. package/dist/date-time-range-picker.d.ts.map +0 -1
  137. package/dist/dialog.d.ts.map +0 -1
  138. package/dist/disclosure.d.ts.map +0 -1
  139. package/dist/drawer.d.ts.map +0 -1
  140. package/dist/editable.d.ts.map +0 -1
  141. package/dist/feed.d.ts.map +0 -1
  142. package/dist/form.d.ts +0 -65
  143. package/dist/form.d.ts.map +0 -1
  144. package/dist/form.js +0 -234
  145. package/dist/form.js.map +0 -1
  146. package/dist/grid.d.ts.map +0 -1
  147. package/dist/index.d.ts.map +0 -1
  148. package/dist/internal/checked-control.d.ts.map +0 -1
  149. package/dist/internal/disabled-items.d.ts.map +0 -1
  150. package/dist/internal/grapheme.d.ts.map +0 -1
  151. package/dist/internal/menu-control.d.ts.map +0 -1
  152. package/dist/internal/popup-control.d.ts.map +0 -1
  153. package/dist/internal/reference-date.d.ts.map +0 -1
  154. package/dist/internal/result.d.ts.map +0 -1
  155. package/dist/internal/text-input.d.ts.map +0 -1
  156. package/dist/keyboard.d.ts.map +0 -1
  157. package/dist/layer-stack.d.ts.map +0 -1
  158. package/dist/layout.d.ts.map +0 -1
  159. package/dist/listbox.d.ts.map +0 -1
  160. package/dist/menu-button.d.ts.map +0 -1
  161. package/dist/menu.d.ts.map +0 -1
  162. package/dist/menubar.d.ts.map +0 -1
  163. package/dist/month-picker.d.ts.map +0 -1
  164. package/dist/month-range-picker.d.ts.map +0 -1
  165. package/dist/multi-thumb-slider.d.ts.map +0 -1
  166. package/dist/navigation-menu.d.ts.map +0 -1
  167. package/dist/node.d.ts.map +0 -1
  168. package/dist/number-field.d.ts.map +0 -1
  169. package/dist/pagination.d.ts.map +0 -1
  170. package/dist/pin-input.d.ts.map +0 -1
  171. package/dist/popover.d.ts.map +0 -1
  172. package/dist/quantity-field.d.ts.map +0 -1
  173. package/dist/radio-group.d.ts.map +0 -1
  174. package/dist/range-calendar.d.ts.map +0 -1
  175. package/dist/rating.d.ts.map +0 -1
  176. package/dist/reorder.d.ts.map +0 -1
  177. package/dist/screen.d.ts.map +0 -1
  178. package/dist/select.d.ts.map +0 -1
  179. package/dist/slider.d.ts.map +0 -1
  180. package/dist/spin-button.d.ts.map +0 -1
  181. package/dist/stepper.d.ts.map +0 -1
  182. package/dist/switch.d.ts.map +0 -1
  183. package/dist/tabs.d.ts.map +0 -1
  184. package/dist/tags-input.d.ts.map +0 -1
  185. package/dist/text.d.ts.map +0 -1
  186. package/dist/time-field.d.ts.map +0 -1
  187. package/dist/time-range-field.d.ts.map +0 -1
  188. package/dist/timer.d.ts.map +0 -1
  189. package/dist/toast.d.ts.map +0 -1
  190. package/dist/toggle-button.d.ts.map +0 -1
  191. package/dist/toggle-group.d.ts.map +0 -1
  192. package/dist/toolbar.d.ts.map +0 -1
  193. package/dist/tooltip.d.ts.map +0 -1
  194. package/dist/tree-grid.d.ts.map +0 -1
  195. package/dist/tree-view.d.ts.map +0 -1
  196. package/dist/window-splitter.d.ts.map +0 -1
  197. package/dist/year-picker.d.ts.map +0 -1
  198. package/dist/year-range-picker.d.ts.map +0 -1
@@ -0,0 +1,36 @@
1
+ import { tryCreateDisabledIdentitySet } from '@sectile/core/adapter-runtime';
2
+ import { tryCreateTree } from '@sectile/core/tree';
3
+ export function tryCreateTerminalCascadeChoiceDomain(nodes, disabledItems, _label) {
4
+ const tree = tryCreateTree(nodes);
5
+ if (!tree.ok)
6
+ return tree;
7
+ const disabled = tryCreateDisabledIdentitySet({ contains: (id) => tree.value.has(id) }, disabledItems);
8
+ if (!disabled.ok)
9
+ return disabled;
10
+ return { ok: true, value: Object.freeze({ tree: tree.value, disabledItems: disabled.value }) };
11
+ }
12
+ export function withDisabledCascadeChoicePolicies(policies, disabledItems) {
13
+ const suppliedEligibility = policies?.eligible;
14
+ return {
15
+ ...policies,
16
+ eligible: (id) => !disabledItems.has(id) && (suppliedEligibility?.(id) ?? true),
17
+ };
18
+ }
19
+ export function toTerminalCascadeChoiceEvent(input) {
20
+ if (input.key === 'down')
21
+ return 'next';
22
+ if (input.key === 'up')
23
+ return 'previous';
24
+ if (input.key === 'right')
25
+ return 'right';
26
+ if (input.key === 'left')
27
+ return 'left';
28
+ if (input.key === 'home')
29
+ return 'first';
30
+ if (input.key === 'end')
31
+ return 'last';
32
+ if (input.key === 'enter' || input.key === 'space')
33
+ return 'select';
34
+ return null;
35
+ }
36
+ //# sourceMappingURL=cascade-choice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-choice.js","sourceRoot":"","sources":["../../src/internal/cascade-choice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAiC,MAAM,oBAAoB,CAAC;AAmBlF,MAAM,UAAU,oCAAoC,CAClD,KAAmC,EACnC,aAAwC,EACxC,MAAyC;IAEzC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,4BAA4B,CAC3C,EAAE,QAAQ,EAAE,CAAC,EAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC5C,aAAa,CACd,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,QAA8B,EAC9B,aAA8B;IAE9B,MAAM,mBAAmB,GAAG,QAAQ,EAAE,QAAQ,CAAC;IAC/C,OAAO;QACL,GAAG,QAAQ;QACX,QAAQ,EAAE,CAAC,EAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;KACxE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAA4B;IAE5B,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -8,7 +8,7 @@ export interface TerminalCheckedControl<State, Event, Value> {
8
8
  handleEvent(event: Event): boolean;
9
9
  handleKeyboardInput(input: TerminalKeyboardInput): boolean;
10
10
  }
11
- export interface Options<State, Event, Command, Value> {
11
+ export interface Options<State, Event, Command extends object, Value> {
12
12
  readonly controlled: boolean;
13
13
  readonly initial: Result<State>;
14
14
  readonly toggleEvent: Event;
@@ -19,5 +19,4 @@ export interface Options<State, Event, Command, Value> {
19
19
  readonly onUpdate: (() => void) | undefined;
20
20
  readonly interaction?: InteractionStateInput;
21
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
22
+ export declare function createTerminalCheckedControl<State, Event, Command extends object, Value>(options: Options<State, Event, Command, Value>): Result<TerminalCheckedControl<State, Event, Value>>;
@@ -1,7 +1,6 @@
1
- import { createSemanticController } from '@sectile/core/adapter-runtime';
1
+ import { createControlledComponentController } from '@sectile/core/adapter-runtime';
2
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 });
3
+ const runtime = createControlledComponentController({ controlled: options.controlled, initial: options.initial, reducer: options.reducer, create: (value) => options.create(value), read: options.read, onChange: (value) => options.onChange?.(value), ...(options.interaction === undefined ? {} : { interaction: options.interaction }) });
5
4
  if (!runtime.ok)
6
5
  return runtime;
7
6
  return { ok: true, value: new Impl(options, runtime.value) };
@@ -11,8 +10,7 @@ class Impl {
11
10
  #runtime;
12
11
  constructor(options, runtime) { this.#options = options; this.#runtime = runtime; }
13
12
  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)
13
+ syncControlledValue(value) { const result = this.#runtime.syncControlledValue(value); if (result.ok)
16
14
  this.#options.onUpdate?.(); return result; }
17
15
  handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
18
16
  this.#options.onUpdate?.(); return result.ok; }
@@ -1 +1 @@
1
- {"version":3,"file":"checked-control.js","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,+BAA+B,CAAC;AAGlG,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"}
1
+ {"version":3,"file":"checked-control.js","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAsC,MAAM,+BAA+B,CAAC;AAGxH,MAAM,UAAU,4BAA4B,CAA8C,OAA8C;IACtI,MAAM,OAAO,GAAG,mCAAmC,CAA+B,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5W,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,CAA8D;IACzI,YAAmB,OAA8C,EAAE,OAAoE,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IACvL,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,KAAY,IAAqC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;IACzL,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"}
@@ -3,4 +3,3 @@ export interface IdentityDomain<ID extends StableID> {
3
3
  contains(id: ID): boolean;
4
4
  }
5
5
  export declare function createDisabledItems<ID extends StableID>(domain: IdentityDomain<ID>, items?: readonly ID[]): Result<ReadonlySet<ID>>;
6
- //# sourceMappingURL=disabled-items.d.ts.map
@@ -1,15 +1,5 @@
1
+ import { tryCreateDisabledIdentitySet } from '@sectile/core/adapter-runtime';
1
2
  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 };
3
+ return tryCreateDisabledIdentitySet(domain, items);
14
4
  }
15
5
  //# sourceMappingURL=disabled-items.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"disabled-items.js","sourceRoot":"","sources":["../../src/internal/disabled-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAM7E,MAAM,UAAU,mBAAmB,CACjC,MAA0B,EAC1B,KAAK,GAAkB,EAAE;IAEzB,OAAO,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare function graphemeSegments(value: string): Intl.Segments;
2
+ export declare function terminalGraphemeWidth(segment: string): number;
3
+ export declare function terminalStringWidth(value: string): number;
2
4
  export declare function previousGraphemeOffset(text: string, offset: number): number;
3
5
  export declare function nextGraphemeOffset(text: string, offset: number): number;
4
- //# sourceMappingURL=grapheme.d.ts.map
@@ -1,7 +1,58 @@
1
1
  const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
2
+ /*
3
+ * Width rules and East Asian Width ranges adapted from string-width and
4
+ * get-east-asian-width. Copyright (c) Sindre Sorhus <sindresorhus@gmail.com>.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+ const fullWidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
25
+ const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
26
+ const zeroWidthCluster = new RegExp('^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$', 'v');
27
+ const leadingNonPrinting = new RegExp('^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+', 'v');
28
+ const rgiEmoji = new RegExp('^\\p{RGI_Emoji}$', 'v');
2
29
  export function graphemeSegments(value) {
3
30
  return graphemeSegmenter.segment(value);
4
31
  }
32
+ export function terminalGraphemeWidth(segment) {
33
+ if (segment.length === 0 || zeroWidthCluster.test(segment))
34
+ return 0;
35
+ if (rgiEmoji.test(segment))
36
+ return 2;
37
+ const base = segment.replace(leadingNonPrinting, '');
38
+ const codePoint = base.codePointAt(0);
39
+ if (codePoint === undefined)
40
+ return 0;
41
+ let width = isInRanges(fullWidthRanges, codePoint) || isInRanges(wideRanges, codePoint) ? 2 : 1;
42
+ for (const character of base.slice(String.fromCodePoint(codePoint).length)) {
43
+ const trailing = character.codePointAt(0);
44
+ if (trailing !== undefined && trailing >= 0xff00 && trailing <= 0xffef) {
45
+ width += isInRanges(fullWidthRanges, trailing) || isInRanges(wideRanges, trailing) ? 2 : 1;
46
+ }
47
+ }
48
+ return width;
49
+ }
50
+ export function terminalStringWidth(value) {
51
+ let width = 0;
52
+ for (const { segment } of graphemeSegments(value))
53
+ width += terminalGraphemeWidth(segment);
54
+ return width;
55
+ }
5
56
  export function previousGraphemeOffset(text, offset) {
6
57
  let previous = 0;
7
58
  for (const segment of graphemeSegments(text)) {
@@ -18,4 +69,20 @@ export function nextGraphemeOffset(text, offset) {
18
69
  }
19
70
  return text.length;
20
71
  }
72
+ function isInRanges(ranges, codePoint) {
73
+ let low = 0;
74
+ let high = Math.floor(ranges.length / 2) - 1;
75
+ while (low <= high) {
76
+ const middle = Math.floor((low + high) / 2) * 2;
77
+ const start = ranges[middle];
78
+ const end = ranges[middle + 1];
79
+ if (codePoint < start)
80
+ high = middle / 2 - 1;
81
+ else if (codePoint > end)
82
+ low = middle / 2 + 1;
83
+ else
84
+ return true;
85
+ }
86
+ return false;
87
+ }
21
88
  //# sourceMappingURL=grapheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/internal/grapheme.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAErF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAAc;IACjE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM;YAAE,MAAM;QACnC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC7D,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/internal/grapheme.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,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"}
@@ -31,4 +31,3 @@ export interface MenuControl<ID extends StableID> {
31
31
  handleKeyboardInput(input: TerminalKeyboardInput): boolean;
32
32
  }
33
33
  export declare function createMenuControl<ID extends StableID>(options: MenuControlOptions<ID>): Result<MenuControl<ID>>;
34
- //# sourceMappingURL=menu-control.d.ts.map
@@ -1,23 +1,13 @@
1
1
  import { applyMenuEvent, tryCreateMenuModel, tryCreateMenuState, } from '@sectile/core/menu';
2
- import { createSemanticController, } from '@sectile/core/adapter-runtime';
2
+ import { createControlledComponentController, tryCreateDisabledIdentitySet, } from '@sectile/core/adapter-runtime';
3
3
  export function createMenuControl(options) {
4
4
  const model = tryCreateMenuModel(options.items);
5
5
  if (!model.ok)
6
6
  return model;
7
- const disabled = new Set(options.disabledItems ?? []);
8
- for (const id of disabled) {
9
- if (!model.value.tree.has(id)) {
10
- return {
11
- ok: false,
12
- error: {
13
- class: 'construction',
14
- code: 'disabled-item-outside-domain',
15
- message: 'Every disabled menu item must exist in the menu tree.',
16
- details: { id },
17
- },
18
- };
19
- }
20
- }
7
+ const disabledResult = tryCreateDisabledIdentitySet({ contains: (id) => model.value.tree.has(id) }, options.disabledItems);
8
+ if (!disabledResult.ok)
9
+ return disabledResult;
10
+ const disabled = disabledResult.value;
21
11
  const suppliedDisabled = options.policies?.disabled;
22
12
  const policies = {
23
13
  ...options.policies,
@@ -27,26 +17,22 @@ export function createMenuControl(options) {
27
17
  const initialOpen = options.kind === 'menu-button'
28
18
  ? options.open ?? options.defaultOpen ?? false
29
19
  : true;
30
- const runtime = createSemanticController({
20
+ const runtime = createControlledComponentController({
21
+ controlled: openControlled,
31
22
  interaction: options,
32
23
  initial: tryCreateMenuState(model.value.tree, initialOpen, initialOpen ? options.defaultHighlightedValue ?? null : null, []),
33
24
  reducer: (state, event) => applyMenuEvent(model.value.tree, state, event, policies),
34
- reconcile: (previous, proposed) => {
35
- const open = options.kind === 'menu-button'
36
- ? openControlled ? previous.open : proposed.open
37
- : true;
25
+ create: (requestedOpen, proposed) => {
26
+ const open = options.kind === 'menu-button' ? requestedOpen : true;
38
27
  return tryCreateMenuState(model.value.tree, open, open ? proposed.cursor.current : null, open ? proposed.openPath : []);
39
28
  },
40
- notify: (previous, proposed) => {
41
- if (previous.open !== proposed.open)
42
- options.onOpenChange?.(proposed.open);
43
- },
44
- toEffect: (command) => command,
29
+ read: (state) => state.open,
30
+ onChange: (open) => options.onOpenChange?.(open),
45
31
  });
46
32
  return runtime.ok
47
33
  ? {
48
34
  ok: true,
49
- value: new TerminalMenuControl(options, model.value.tree, runtime.value, openControlled),
35
+ value: new TerminalMenuControl(options, model.value.tree, runtime.value),
50
36
  }
51
37
  : runtime;
52
38
  }
@@ -54,31 +40,18 @@ class TerminalMenuControl {
54
40
  #options;
55
41
  #tree;
56
42
  #runtime;
57
- #openControlled;
58
43
  #typeaheadBuffer = '';
59
44
  #lastTypeaheadAt = Number.NEGATIVE_INFINITY;
60
- constructor(options, tree, runtime, openControlled) {
45
+ constructor(options, tree, runtime) {
61
46
  this.#options = options;
62
47
  this.#tree = tree;
63
48
  this.#runtime = runtime;
64
- this.#openControlled = openControlled;
65
49
  }
66
50
  getSnapshot() {
67
51
  return this.#runtime.getSnapshot();
68
52
  }
69
53
  syncControlledValue(open) {
70
- if (!this.#openControlled) {
71
- return {
72
- ok: false,
73
- error: {
74
- class: 'construction',
75
- code: 'uncontrolled-controller-sync',
76
- message: 'Only a controlled menu button can synchronize open state.',
77
- },
78
- };
79
- }
80
- const state = this.getSnapshot().state;
81
- const result = this.#runtime.replace(tryCreateMenuState(this.#tree, open, open ? state.cursor.current : null, open ? state.openPath : []));
54
+ const result = this.#runtime.syncControlledValue(open);
82
55
  if (result.ok)
83
56
  this.#options.onUpdate?.();
84
57
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"menu-control.js","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GAKnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,wBAAwB,GAEzB,MAAM,+BAA+B,CAAC;AAiCvC,MAAM,UAAU,iBAAiB,CAC/B,OAA+B;IAE/B,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,uDAAuD;oBAChE,OAAO,EAAE,EAAE,EAAE,EAAE;iBAChB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpD,MAAM,QAAQ,GAAqB;QACjC,GAAG,OAAO,CAAC,QAAQ;QACnB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;KACxE,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IACpF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa;QAChD,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK;QAC9C,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,OAAO,GAAG,wBAAwB,CAAiE;QACvG,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,kBAAkB,CACzB,KAAK,CAAC,KAAK,CAAC,IAAI,EAChB,WAAW,EACX,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAC5D,EAAE,CACH;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;QACnF,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa;gBACzC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gBAChD,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,kBAAkB,CACvB,KAAK,CAAC,KAAK,CAAC,IAAI,EAChB,IAAI,EACJ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EACrC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAC9B,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;gBAAE,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;KAC/B,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,EAAE;QACf,CAAC,CAAC;YACA,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,IAAI,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;SACzF;QACD,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,MAAM,mBAAmB;IACd,QAAQ,CAAyB;IACjC,KAAK,CAAW;IAChB,QAAQ,CAAoE;IAC5E,eAAe,CAAU;IAClC,gBAAgB,GAAG,EAAE,CAAC;IACtB,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE5C,YACE,OAA+B,EAC/B,IAAc,EACd,OAA0E,EAC1E,cAAuB;QAEvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IACxC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAEM,mBAAmB,CAAC,IAAa;QACtC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE;oBACL,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,8BAA8B;oBACpC,OAAO,EAAE,2DAA2D;iBACrE;aACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CACrD,IAAI,CAAC,KAAK,EACV,IAAI,EACJ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAClC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAC3B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,WAAW,CAAC,KAAoB;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,CAAC;IACnB,CAAC;IAEM,mBAAmB,CAAC,KAA4B;QACrD,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACxD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YACnD,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YACvD,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;SAClE,CAAC,CAAC;QACH,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,gBAAgB,CAAC,KAA4B;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvC,IACE,MAAM,KAAK,SAAS;eACjB,KAAK,CAAC,MAAM;eACZ,KAAK,CAAC,OAAO;eACb,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC;QAEf,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,OAAO;YAC3D,CAAC,CAAC,KAAK,CAAC,GAAG;YACX,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;eAC7B,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI;YACxE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;YACtB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;QACzE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QACvF,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAO,CAAC;YAC9D,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxC,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAOD,SAAS,WAAW,CAClB,KAA4B,EAC5B,IAAc,EACd,OAA4B;IAE5B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC;IAED,IAAI,IAAI,KAAK,iBAAiB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC;QAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC;QACzC,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;YAAE,OAAO,cAAc,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,cAAc,CAAC;IACjD,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"menu-control.js","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export interface TerminalPopupConnection<State, Event> {
8
8
  handleEvent(event: Event): boolean;
9
9
  handleKeyboardInput(input: TerminalKeyboardInput): boolean;
10
10
  }
11
- export interface Options<State, Event, Command> {
11
+ export interface Options<State, Event, Command extends object> {
12
12
  readonly controlled: boolean;
13
13
  readonly initial: Result<State>;
14
14
  readonly reducer: (state: State, event: Event) => Result<MachineUpdate<State, Command>>;
@@ -20,5 +20,4 @@ export interface Options<State, Event, Command> {
20
20
  readonly onUpdate?: (() => void) | undefined;
21
21
  readonly interaction?: InteractionStateInput;
22
22
  }
23
- export declare function createTerminalPopup<State, Event, Command>(options: Options<State, Event, Command>): Result<TerminalPopupConnection<State, Event>>;
24
- //# sourceMappingURL=popup-control.d.ts.map
23
+ export declare function createTerminalPopup<State, Event, Command extends object>(options: Options<State, Event, Command>): Result<TerminalPopupConnection<State, Event>>;
@@ -1,7 +1,6 @@
1
- import { createSemanticController } from '@sectile/core/adapter-runtime';
1
+ import { createControlledComponentController } from '@sectile/core/adapter-runtime';
2
2
  export function createTerminalPopup(options) {
3
- const runtime = createSemanticController({ initial: options.initial, reducer: options.reducer, reconcile: (previous, proposed) => options.create(options.controlled ? options.read(previous) : options.read(proposed), proposed), notify: (previous, proposed) => { if (options.read(previous) !== options.read(proposed))
4
- options.onOpenChange?.(options.read(proposed)); }, toEffect: (command) => command, interaction: options.interaction });
3
+ const runtime = createControlledComponentController({ controlled: options.controlled, initial: options.initial, reducer: options.reducer, create: options.create, read: options.read, onChange: (open) => options.onOpenChange?.(open), ...(options.interaction === undefined ? {} : { interaction: options.interaction }) });
5
4
  if (!runtime.ok)
6
5
  return runtime;
7
6
  return { ok: true, value: new TerminalPopup(options, runtime.value) };
@@ -11,8 +10,7 @@ class TerminalPopup {
11
10
  #runtime;
12
11
  constructor(options, runtime) { this.#options = options; this.#runtime = runtime; }
13
12
  getSnapshot() { return this.#runtime.getSnapshot(); }
14
- syncControlledValue(open) { if (!this.#options.controlled)
15
- return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled popup cannot be synchronized externally.' } }; const result = this.#runtime.replace(this.#options.create(open, this.#runtime.getSnapshot().state)); if (result.ok)
13
+ syncControlledValue(open) { const result = this.#runtime.syncControlledValue(open); if (result.ok)
16
14
  this.#options.onUpdate?.(); return result; }
17
15
  handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
18
16
  for (const command of result.commands)
@@ -1 +1 @@
1
- {"version":3,"file":"popup-control.js","sourceRoot":"","sources":["../../src/internal/popup-control.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,+BAA+B,CAAC;AAIlG,MAAM,UAAU,mBAAmB,CAAwB,OAAuC;IAChG,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,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,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,YAAY,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;IACld,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AACD,MAAM,aAAa;IACR,QAAQ,CAAiC;IAAU,QAAQ,CAA4C;IAChH,YAAmB,OAAuC,EAAE,OAAkD,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9J,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,IAAa,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,0DAA0D,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,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;IACxa,WAAW,CAAC,KAAY,IAAa,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvO,mBAAmB,CAAC,KAA4B,IAAa,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;CACrJ"}
1
+ {"version":3,"file":"popup-control.js","sourceRoot":"","sources":["../../src/internal/popup-control.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mCAAmC,EAAsC,MAAM,+BAA+B,CAAC;AAIxH,MAAM,UAAU,mBAAmB,CAAuC,OAAuC;IAC/G,MAAM,OAAO,GAAG,mCAAmC,CAAiC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9V,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AACD,MAAM,aAAa;IACR,QAAQ,CAAiC;IAAU,QAAQ,CAAgE;IACpI,YAAmB,OAAuC,EAAE,OAAsE,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAClL,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,IAAa,IAAqC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;IACzL,WAAW,CAAC,KAAY,IAAa,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvO,mBAAmB,CAAC,KAA4B,IAAa,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;CACrJ"}
@@ -1,3 +1,2 @@
1
1
  import type { DateValue } from '@sectile/temporal/date-field';
2
2
  export declare function currentReferenceDate(now?: Date): DateValue;
3
- //# sourceMappingURL=reference-date.d.ts.map
@@ -14,4 +14,3 @@ export type TerminalTemporalController<State, Event, Effect> = SemanticControlle
14
14
  export declare function createTerminalTemporalController<State, Event, Command, Effect>(options: SemanticControllerOptions<State, Event, Command, Effect, TemporalErrorCode>): TerminalTemporalResult<TerminalTemporalController<State, Event, Effect>>;
15
15
  export declare function createTerminalTemporalFacadeConnection<Options extends TerminalFacadeOptions, Connection extends TerminalSnapshotConnection>(options: Options, construct: (options: Options) => TerminalTemporalResult<Connection>): TerminalTemporalResult<FacadeConnection<Connection>>;
16
16
  export {};
17
- //# sourceMappingURL=result.d.ts.map
@@ -2,4 +2,3 @@ import type { TextEditingState } from '@sectile/core/text';
2
2
  import type { TerminalKeyboardInput } from '../keyboard.js';
3
3
  import type { TextInput } from '../text.js';
4
4
  export declare function toTerminalTextInput(state: TextEditingState, input: TerminalKeyboardInput): TextInput | null;
5
- //# sourceMappingURL=text-input.d.ts.map
@@ -7,4 +7,3 @@ export interface TerminalKeyboardInput {
7
7
  }
8
8
  export declare function applyTerminalTextInput(value: string, input: TerminalKeyboardInput): string | null;
9
9
  export declare function removeLastGrapheme(value: string): string;
10
- //# sourceMappingURL=keyboard.d.ts.map
@@ -13,4 +13,3 @@ export interface TerminalLayerScope {
13
13
  }
14
14
  export declare function createLayerStack(): TerminalLayerScope;
15
15
  export declare function tryCreateLayerStack(): Result<TerminalLayerScope>;
16
- //# sourceMappingURL=layer-stack.d.ts.map
package/dist/layout.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export declare function fitTerminalText(value: string, width: number): string;
2
- //# sourceMappingURL=layout.d.ts.map
package/dist/layout.js CHANGED
@@ -1,20 +1,19 @@
1
- import stringWidth from 'string-width';
2
- import { graphemeSegments } from './internal/grapheme.js';
1
+ import { graphemeSegments, terminalGraphemeWidth, terminalStringWidth, } from './internal/grapheme.js';
3
2
  export function fitTerminalText(value, width) {
4
3
  if (!Number.isSafeInteger(width) || width < 0) {
5
4
  throw new RangeError('Terminal text width must be a non-negative safe integer.');
6
5
  }
7
6
  if (width === 0)
8
7
  return '';
9
- const valueWidth = stringWidth(value);
8
+ const valueWidth = terminalStringWidth(value);
10
9
  if (valueWidth <= width)
11
10
  return `${value}${' '.repeat(width - valueWidth)}`;
12
11
  const ellipsis = '…';
13
- const contentWidth = width - stringWidth(ellipsis);
12
+ const contentWidth = width - terminalStringWidth(ellipsis);
14
13
  let rendered = '';
15
14
  let renderedWidth = 0;
16
15
  for (const segment of graphemeSegments(value)) {
17
- const segmentWidth = stringWidth(segment.segment);
16
+ const segmentWidth = terminalGraphemeWidth(segment.segment);
18
17
  if (renderedWidth + segmentWidth > contentWidth)
19
18
  break;
20
19
  rendered += segment.segment;
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAa;IAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,UAAU,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,YAAY,GAAG,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,aAAa,GAAG,YAAY,GAAG,YAAY;YAAE,MAAM;QACvD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;QAC5B,aAAa,IAAI,YAAY,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAa;IAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,UAAU,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,YAAY,GAAG,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,aAAa,GAAG,YAAY,GAAG,YAAY;YAAE,MAAM;QACvD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;QAC5B,aAAa,IAAI,YAAY,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC7E,CAAC"}
package/dist/listbox.d.ts CHANGED
@@ -95,4 +95,3 @@ export declare function tryCreateListbox<ID extends StableID>(options: ListboxOp
95
95
  export declare function connectListbox<ID extends StableID>(options: ListboxConnectionOptions<ID>): ListboxConnection<ID>;
96
96
  export declare function toListboxEvent<ID extends StableID = StableID>(input: KeyboardInput, orientation?: 'horizontal' | 'vertical'): ListboxEvent<ID> | null;
97
97
  export declare function toListboxEffect<ID extends StableID>(command: ListboxCommand<ID>): ListboxEffect<ID>;
98
- //# sourceMappingURL=listbox.d.ts.map
@@ -5,4 +5,3 @@ export type MenuButtonOptions<ID extends StableID = StableID> = Omit<MenuControl
5
5
  export type MenuButtonConnection<ID extends StableID = StableID> = MenuControl<ID>;
6
6
  export declare function createMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): FacadeConnection<MenuButtonConnection<ID>>;
7
7
  export declare function tryCreateMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): Result<FacadeConnection<MenuButtonConnection<ID>>>;
8
- //# sourceMappingURL=menu-button.d.ts.map
package/dist/menu.d.ts CHANGED
@@ -5,4 +5,3 @@ export type MenuOptions<ID extends StableID = StableID> = Omit<MenuControlOption
5
5
  export type MenuConnection<ID extends StableID = StableID> = MenuControl<ID>;
6
6
  export declare function createMenu<ID extends StableID>(options: MenuOptions<ID>): FacadeConnection<MenuConnection<ID>>;
7
7
  export declare function tryCreateMenu<ID extends StableID>(options: MenuOptions<ID>): Result<FacadeConnection<MenuConnection<ID>>>;
8
- //# sourceMappingURL=menu.d.ts.map
package/dist/menubar.d.ts CHANGED
@@ -5,4 +5,3 @@ export type MenubarOptions<ID extends StableID = StableID> = Omit<MenuControlOpt
5
5
  export type MenubarConnection<ID extends StableID = StableID> = MenuControl<ID>;
6
6
  export declare function createMenubar<ID extends StableID>(options: MenubarOptions<ID>): FacadeConnection<MenubarConnection<ID>>;
7
7
  export declare function tryCreateMenubar<ID extends StableID>(options: MenubarOptions<ID>): Result<FacadeConnection<MenubarConnection<ID>>>;
8
- //# sourceMappingURL=menubar.d.ts.map
@@ -0,0 +1,28 @@
1
+ import type { Result, StableID } from '@sectile/core';
2
+ import { type MeterGroupInput, type MeterGroupState } from '@sectile/core/meter-group';
3
+ import type { MeterZone } from '@sectile/core/meter';
4
+ import { type RevisionSnapshot } from '@sectile/core/revision';
5
+ export interface MeterGroupControlledValues<ID extends StableID = StableID> extends MeterGroupInput<ID> {
6
+ }
7
+ export interface MeterGroupOptions<ID extends StableID = StableID> extends MeterGroupControlledValues<ID> {
8
+ readonly onUpdate?: () => void;
9
+ }
10
+ export interface MeterGroupRenderSegment<ID extends StableID = StableID> {
11
+ readonly id: ID;
12
+ readonly startCell: number;
13
+ readonly cellCount: number;
14
+ }
15
+ export interface MeterGroupRenderPlan<ID extends StableID = StableID> {
16
+ readonly width: number;
17
+ readonly segments: readonly MeterGroupRenderSegment<ID>[];
18
+ readonly remainingStartCell: number;
19
+ readonly remainingCells: number;
20
+ readonly zone: MeterZone;
21
+ }
22
+ export interface MeterGroupConnection<ID extends StableID = StableID> {
23
+ getSnapshot(): RevisionSnapshot<MeterGroupState<ID>>;
24
+ syncControlledValues(values: MeterGroupControlledValues<ID>): Result<RevisionSnapshot<MeterGroupState<ID>>>;
25
+ getRenderPlan(width: number): Result<MeterGroupRenderPlan<ID>>;
26
+ }
27
+ export declare function createMeterGroup<ID extends StableID>(options: MeterGroupOptions<ID>): MeterGroupConnection<ID>;
28
+ export declare function tryCreateMeterGroup<ID extends StableID>(options: MeterGroupOptions<ID>): Result<MeterGroupConnection<ID>>;