@sectile/terminal 0.2.0 → 0.3.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 (305) hide show
  1. package/dist/accordion.d.ts +34 -0
  2. package/dist/accordion.d.ts.map +1 -0
  3. package/dist/accordion.js +76 -0
  4. package/dist/accordion.js.map +1 -0
  5. package/dist/alert-dialog.d.ts +23 -0
  6. package/dist/alert-dialog.d.ts.map +1 -0
  7. package/dist/alert-dialog.js +12 -0
  8. package/dist/alert-dialog.js.map +1 -0
  9. package/dist/appearance.d.ts +50 -0
  10. package/dist/appearance.d.ts.map +1 -0
  11. package/dist/appearance.js +200 -0
  12. package/dist/appearance.js.map +1 -0
  13. package/dist/calendar.d.ts +80 -0
  14. package/dist/calendar.d.ts.map +1 -0
  15. package/dist/calendar.js +217 -0
  16. package/dist/calendar.js.map +1 -0
  17. package/dist/carousel.d.ts +49 -0
  18. package/dist/carousel.d.ts.map +1 -0
  19. package/dist/carousel.js +129 -0
  20. package/dist/carousel.js.map +1 -0
  21. package/dist/cascade-select.d.ts +43 -0
  22. package/dist/cascade-select.d.ts.map +1 -0
  23. package/dist/cascade-select.js +71 -0
  24. package/dist/cascade-select.js.map +1 -0
  25. package/dist/checkbox-group.d.ts +19 -0
  26. package/dist/checkbox-group.d.ts.map +1 -0
  27. package/dist/checkbox-group.js +14 -0
  28. package/dist/checkbox-group.js.map +1 -0
  29. package/dist/checkbox.d.ts +19 -0
  30. package/dist/checkbox.d.ts.map +1 -0
  31. package/dist/checkbox.js +12 -0
  32. package/dist/checkbox.js.map +1 -0
  33. package/dist/color-picker.d.ts +39 -0
  34. package/dist/color-picker.d.ts.map +1 -0
  35. package/dist/color-picker.js +62 -0
  36. package/dist/color-picker.js.map +1 -0
  37. package/dist/combobox.d.ts +107 -0
  38. package/dist/combobox.d.ts.map +1 -0
  39. package/dist/combobox.js +286 -0
  40. package/dist/combobox.js.map +1 -0
  41. package/dist/date-field.d.ts +39 -0
  42. package/dist/date-field.d.ts.map +1 -0
  43. package/dist/date-field.js +46 -0
  44. package/dist/date-field.js.map +1 -0
  45. package/dist/date-picker.d.ts +42 -0
  46. package/dist/date-picker.d.ts.map +1 -0
  47. package/dist/date-picker.js +40 -0
  48. package/dist/date-picker.js.map +1 -0
  49. package/dist/date-range-field.d.ts +43 -0
  50. package/dist/date-range-field.d.ts.map +1 -0
  51. package/dist/date-range-field.js +49 -0
  52. package/dist/date-range-field.js.map +1 -0
  53. package/dist/date-range-picker.d.ts +42 -0
  54. package/dist/date-range-picker.d.ts.map +1 -0
  55. package/dist/date-range-picker.js +29 -0
  56. package/dist/date-range-picker.js.map +1 -0
  57. package/dist/date-time-field.d.ts +39 -0
  58. package/dist/date-time-field.d.ts.map +1 -0
  59. package/dist/date-time-field.js +133 -0
  60. package/dist/date-time-field.js.map +1 -0
  61. package/dist/date-time-picker.d.ts +42 -0
  62. package/dist/date-time-picker.d.ts.map +1 -0
  63. package/dist/date-time-picker.js +128 -0
  64. package/dist/date-time-picker.js.map +1 -0
  65. package/dist/date-time-range-picker.d.ts +42 -0
  66. package/dist/date-time-range-picker.d.ts.map +1 -0
  67. package/dist/date-time-range-picker.js +137 -0
  68. package/dist/date-time-range-picker.js.map +1 -0
  69. package/dist/dialog.d.ts +21 -0
  70. package/dist/dialog.d.ts.map +1 -0
  71. package/dist/dialog.js +12 -0
  72. package/dist/dialog.js.map +1 -0
  73. package/dist/disclosure.d.ts +24 -0
  74. package/dist/disclosure.d.ts.map +1 -0
  75. package/dist/disclosure.js +56 -0
  76. package/dist/disclosure.js.map +1 -0
  77. package/dist/drawer.d.ts +23 -0
  78. package/dist/drawer.d.ts.map +1 -0
  79. package/dist/drawer.js +26 -0
  80. package/dist/drawer.js.map +1 -0
  81. package/dist/editable.d.ts +27 -0
  82. package/dist/editable.d.ts.map +1 -0
  83. package/dist/editable.js +70 -0
  84. package/dist/editable.js.map +1 -0
  85. package/dist/feed.d.ts +36 -0
  86. package/dist/feed.d.ts.map +1 -0
  87. package/dist/feed.js +90 -0
  88. package/dist/feed.js.map +1 -0
  89. package/dist/form.d.ts +65 -0
  90. package/dist/form.d.ts.map +1 -0
  91. package/dist/form.js +234 -0
  92. package/dist/form.js.map +1 -0
  93. package/dist/grid.d.ts +47 -0
  94. package/dist/grid.d.ts.map +1 -0
  95. package/dist/grid.js +68 -0
  96. package/dist/grid.js.map +1 -0
  97. package/dist/index.d.ts +112 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +63 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/internal/checked-control.d.ts +23 -0
  102. package/dist/internal/checked-control.d.ts.map +1 -0
  103. package/dist/internal/checked-control.js +22 -0
  104. package/dist/internal/checked-control.js.map +1 -0
  105. package/dist/internal/controller.d.ts +6 -0
  106. package/dist/internal/controller.d.ts.map +1 -0
  107. package/dist/internal/controller.js +35 -0
  108. package/dist/internal/controller.js.map +1 -0
  109. package/dist/internal/disabled-items.d.ts +6 -0
  110. package/dist/internal/disabled-items.d.ts.map +1 -0
  111. package/dist/internal/disabled-items.js +15 -0
  112. package/dist/internal/disabled-items.js.map +1 -0
  113. package/dist/internal/facade.d.ts +45 -0
  114. package/dist/internal/facade.d.ts.map +1 -0
  115. package/dist/internal/facade.js +58 -0
  116. package/dist/internal/facade.js.map +1 -0
  117. package/dist/internal/menu-control.d.ts +34 -0
  118. package/dist/internal/menu-control.d.ts.map +1 -0
  119. package/dist/internal/menu-control.js +171 -0
  120. package/dist/internal/menu-control.js.map +1 -0
  121. package/dist/internal/popup-control.d.ts +24 -0
  122. package/dist/internal/popup-control.d.ts.map +1 -0
  123. package/dist/internal/popup-control.js +23 -0
  124. package/dist/internal/popup-control.js.map +1 -0
  125. package/dist/internal/semantic-controller.d.ts +20 -0
  126. package/dist/internal/semantic-controller.d.ts.map +1 -0
  127. package/dist/internal/semantic-controller.js +42 -0
  128. package/dist/internal/semantic-controller.js.map +1 -0
  129. package/dist/internal/text-input.d.ts +5 -0
  130. package/dist/internal/text-input.d.ts.map +1 -0
  131. package/dist/internal/text-input.js +53 -0
  132. package/dist/internal/text-input.js.map +1 -0
  133. package/dist/keyboard.d.ts +10 -0
  134. package/dist/keyboard.d.ts.map +1 -0
  135. package/dist/keyboard.js +16 -0
  136. package/dist/keyboard.js.map +1 -0
  137. package/dist/layer-stack.d.ts +16 -0
  138. package/dist/layer-stack.d.ts.map +1 -0
  139. package/dist/layer-stack.js +49 -0
  140. package/dist/layer-stack.js.map +1 -0
  141. package/dist/layout.d.ts +2 -0
  142. package/dist/layout.d.ts.map +1 -0
  143. package/dist/layout.js +24 -0
  144. package/dist/layout.js.map +1 -0
  145. package/dist/listbox.d.ts +98 -0
  146. package/dist/listbox.d.ts.map +1 -0
  147. package/dist/listbox.js +330 -0
  148. package/dist/listbox.js.map +1 -0
  149. package/dist/menu-button.d.ts +8 -0
  150. package/dist/menu-button.d.ts.map +1 -0
  151. package/dist/menu-button.js +11 -0
  152. package/dist/menu-button.js.map +1 -0
  153. package/dist/menu.d.ts +8 -0
  154. package/dist/menu.d.ts.map +1 -0
  155. package/dist/menu.js +11 -0
  156. package/dist/menu.js.map +1 -0
  157. package/dist/menubar.d.ts +8 -0
  158. package/dist/menubar.d.ts.map +1 -0
  159. package/dist/menubar.js +11 -0
  160. package/dist/menubar.js.map +1 -0
  161. package/dist/month-picker.d.ts +3 -0
  162. package/dist/month-picker.d.ts.map +1 -0
  163. package/dist/month-picker.js +2 -0
  164. package/dist/month-picker.js.map +1 -0
  165. package/dist/month-range-picker.d.ts +3 -0
  166. package/dist/month-range-picker.d.ts.map +1 -0
  167. package/dist/month-range-picker.js +2 -0
  168. package/dist/month-range-picker.js.map +1 -0
  169. package/dist/multi-thumb-slider.d.ts +34 -0
  170. package/dist/multi-thumb-slider.d.ts.map +1 -0
  171. package/dist/multi-thumb-slider.js +67 -0
  172. package/dist/multi-thumb-slider.js.map +1 -0
  173. package/dist/navigation-menu.d.ts +8 -0
  174. package/dist/navigation-menu.d.ts.map +1 -0
  175. package/dist/navigation-menu.js +10 -0
  176. package/dist/navigation-menu.js.map +1 -0
  177. package/dist/node.d.ts +43 -0
  178. package/dist/node.d.ts.map +1 -0
  179. package/dist/node.js +196 -0
  180. package/dist/node.js.map +1 -0
  181. package/dist/number-field.d.ts +47 -0
  182. package/dist/number-field.d.ts.map +1 -0
  183. package/dist/number-field.js +157 -0
  184. package/dist/number-field.js.map +1 -0
  185. package/dist/pagination.d.ts +38 -0
  186. package/dist/pagination.d.ts.map +1 -0
  187. package/dist/pagination.js +103 -0
  188. package/dist/pagination.js.map +1 -0
  189. package/dist/pin-input.d.ts +28 -0
  190. package/dist/pin-input.d.ts.map +1 -0
  191. package/dist/pin-input.js +30 -0
  192. package/dist/pin-input.js.map +1 -0
  193. package/dist/popover.d.ts +21 -0
  194. package/dist/popover.d.ts.map +1 -0
  195. package/dist/popover.js +8 -0
  196. package/dist/popover.js.map +1 -0
  197. package/dist/quantity-field.d.ts +49 -0
  198. package/dist/quantity-field.d.ts.map +1 -0
  199. package/dist/quantity-field.js +168 -0
  200. package/dist/quantity-field.js.map +1 -0
  201. package/dist/radio-group.d.ts +40 -0
  202. package/dist/radio-group.d.ts.map +1 -0
  203. package/dist/radio-group.js +126 -0
  204. package/dist/radio-group.js.map +1 -0
  205. package/dist/range-calendar.d.ts +3 -0
  206. package/dist/range-calendar.d.ts.map +1 -0
  207. package/dist/range-calendar.js +2 -0
  208. package/dist/range-calendar.js.map +1 -0
  209. package/dist/rating.d.ts +23 -0
  210. package/dist/rating.d.ts.map +1 -0
  211. package/dist/rating.js +38 -0
  212. package/dist/rating.js.map +1 -0
  213. package/dist/reorder.d.ts +42 -0
  214. package/dist/reorder.d.ts.map +1 -0
  215. package/dist/reorder.js +166 -0
  216. package/dist/reorder.js.map +1 -0
  217. package/dist/screen.d.ts +108 -0
  218. package/dist/screen.d.ts.map +1 -0
  219. package/dist/screen.js +364 -0
  220. package/dist/screen.js.map +1 -0
  221. package/dist/select.d.ts +45 -0
  222. package/dist/select.d.ts.map +1 -0
  223. package/dist/select.js +50 -0
  224. package/dist/select.js.map +1 -0
  225. package/dist/slider.d.ts +62 -0
  226. package/dist/slider.d.ts.map +1 -0
  227. package/dist/slider.js +156 -0
  228. package/dist/slider.js.map +1 -0
  229. package/dist/spin-button.d.ts +38 -0
  230. package/dist/spin-button.d.ts.map +1 -0
  231. package/dist/spin-button.js +78 -0
  232. package/dist/spin-button.js.map +1 -0
  233. package/dist/stepper.d.ts +19 -0
  234. package/dist/stepper.d.ts.map +1 -0
  235. package/dist/stepper.js +14 -0
  236. package/dist/stepper.js.map +1 -0
  237. package/dist/switch.d.ts +17 -0
  238. package/dist/switch.d.ts.map +1 -0
  239. package/dist/switch.js +12 -0
  240. package/dist/switch.js.map +1 -0
  241. package/dist/tabs.d.ts +46 -0
  242. package/dist/tabs.d.ts.map +1 -0
  243. package/dist/tabs.js +128 -0
  244. package/dist/tabs.js.map +1 -0
  245. package/dist/tags-input.d.ts +32 -0
  246. package/dist/tags-input.d.ts.map +1 -0
  247. package/dist/tags-input.js +68 -0
  248. package/dist/tags-input.js.map +1 -0
  249. package/dist/text.d.ts +63 -0
  250. package/dist/text.d.ts.map +1 -0
  251. package/dist/text.js +143 -0
  252. package/dist/text.js.map +1 -0
  253. package/dist/time-field.d.ts +39 -0
  254. package/dist/time-field.d.ts.map +1 -0
  255. package/dist/time-field.js +40 -0
  256. package/dist/time-field.js.map +1 -0
  257. package/dist/time-range-field.d.ts +42 -0
  258. package/dist/time-range-field.d.ts.map +1 -0
  259. package/dist/time-range-field.js +43 -0
  260. package/dist/time-range-field.js.map +1 -0
  261. package/dist/timer.d.ts +30 -0
  262. package/dist/timer.d.ts.map +1 -0
  263. package/dist/timer.js +31 -0
  264. package/dist/timer.js.map +1 -0
  265. package/dist/toast.d.ts +29 -0
  266. package/dist/toast.d.ts.map +1 -0
  267. package/dist/toast.js +38 -0
  268. package/dist/toast.js.map +1 -0
  269. package/dist/toggle-button.d.ts +17 -0
  270. package/dist/toggle-button.d.ts.map +1 -0
  271. package/dist/toggle-button.js +12 -0
  272. package/dist/toggle-button.js.map +1 -0
  273. package/dist/toggle-group.d.ts +22 -0
  274. package/dist/toggle-group.d.ts.map +1 -0
  275. package/dist/toggle-group.js +33 -0
  276. package/dist/toggle-group.js.map +1 -0
  277. package/dist/toolbar.d.ts +37 -0
  278. package/dist/toolbar.d.ts.map +1 -0
  279. package/dist/toolbar.js +108 -0
  280. package/dist/toolbar.js.map +1 -0
  281. package/dist/tooltip.d.ts +17 -0
  282. package/dist/tooltip.d.ts.map +1 -0
  283. package/dist/tooltip.js +12 -0
  284. package/dist/tooltip.js.map +1 -0
  285. package/dist/tree-grid.d.ts +102 -0
  286. package/dist/tree-grid.d.ts.map +1 -0
  287. package/dist/tree-grid.js +308 -0
  288. package/dist/tree-grid.js.map +1 -0
  289. package/dist/tree-view.d.ts +83 -0
  290. package/dist/tree-view.d.ts.map +1 -0
  291. package/dist/tree-view.js +216 -0
  292. package/dist/tree-view.js.map +1 -0
  293. package/dist/window-splitter.d.ts +19 -0
  294. package/dist/window-splitter.d.ts.map +1 -0
  295. package/dist/window-splitter.js +48 -0
  296. package/dist/window-splitter.js.map +1 -0
  297. package/dist/year-picker.d.ts +3 -0
  298. package/dist/year-picker.d.ts.map +1 -0
  299. package/dist/year-picker.js +2 -0
  300. package/dist/year-picker.js.map +1 -0
  301. package/dist/year-range-picker.d.ts +3 -0
  302. package/dist/year-range-picker.d.ts.map +1 -0
  303. package/dist/year-range-picker.js +2 -0
  304. package/dist/year-range-picker.js.map +1 -0
  305. package/package.json +8 -3
@@ -0,0 +1,42 @@
1
+ import type { Result } from '@sectile/core';
2
+ import type { RevisionSnapshot } from '@sectile/core/revision';
3
+ import { type DateValue } from '@sectile/core/date-field';
4
+ import { type DateTimeValue } from '@sectile/core/date-time-field';
5
+ import { type DateTimePickerEvent, type DateTimePickerPolicies, type DateTimePickerState } from '@sectile/core/date-time-picker';
6
+ import { type FacadeConnection } from './internal/facade.js';
7
+ import type { TerminalKeyboardInput } from './keyboard.js';
8
+ export interface DateTimePickerOptions {
9
+ readonly policies?: DateTimePickerPolicies;
10
+ readonly value?: DateTimeValue | null;
11
+ readonly defaultValue?: DateTimeValue | null;
12
+ readonly highlightedValue?: DateValue;
13
+ readonly defaultHighlightedValue?: DateValue;
14
+ readonly open?: boolean;
15
+ readonly defaultOpen?: boolean;
16
+ readonly disabled?: boolean;
17
+ readonly readOnly?: boolean;
18
+ readonly required?: boolean;
19
+ readonly onValueChange?: (value: DateTimeValue | null) => void;
20
+ readonly onHighlightedValueChange?: (value: DateValue) => void;
21
+ readonly onOpenChange?: (open: boolean) => void;
22
+ readonly onUpdate?: () => void;
23
+ }
24
+ export type DateTimePickerValueChangeHandler = NonNullable<DateTimePickerOptions['onValueChange']>;
25
+ export type DateTimePickerHighlightedValueChangeHandler = NonNullable<DateTimePickerOptions['onHighlightedValueChange']>;
26
+ export type DateTimePickerOpenChangeHandler = NonNullable<DateTimePickerOptions['onOpenChange']>;
27
+ export type DateTimePickerUpdateHandler = NonNullable<DateTimePickerOptions['onUpdate']>;
28
+ export interface DateTimePickerControlledValues {
29
+ readonly value?: DateTimeValue | null;
30
+ readonly highlightedValue?: DateValue;
31
+ readonly open?: boolean;
32
+ }
33
+ export interface DateTimePickerConnection {
34
+ getSnapshot(): RevisionSnapshot<DateTimePickerState>;
35
+ getMonth(): readonly (readonly DateValue[])[];
36
+ syncControlledValues(values: DateTimePickerControlledValues): Result<RevisionSnapshot<DateTimePickerState>>;
37
+ handleEvent(event: DateTimePickerEvent): boolean;
38
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
39
+ }
40
+ export declare function createDateTimePicker(options?: DateTimePickerOptions): FacadeConnection<DateTimePickerConnection>;
41
+ export declare function tryCreateDateTimePicker(options?: DateTimePickerOptions): Result<FacadeConnection<DateTimePickerConnection>>;
42
+ //# sourceMappingURL=date-time-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time-picker.d.ts","sourceRoot":"","sources":["../src/date-time-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { compareDateValues } from '@sectile/core/date-field';
3
+ import { compareDateTimeValues } from '@sectile/core/date-time-field';
4
+ import { createDatePickerMonth } from '@sectile/core/date-picker';
5
+ import { addTimeMilliseconds } from '@sectile/core/time-field';
6
+ import { applyDateTimePickerEvent, tryCreateDateTimePickerState, } from '@sectile/core/date-time-picker';
7
+ import { createFacadeConnection } from './internal/facade.js';
8
+ import { createSemanticController } from './internal/semantic-controller.js';
9
+ import { toDatePickerEvent } from './date-picker.js';
10
+ export function createDateTimePicker(options = {}) {
11
+ return unwrap(tryCreateDateTimePicker(options));
12
+ }
13
+ export function tryCreateDateTimePicker(options = {}) {
14
+ return createFacadeConnection(options, construct);
15
+ }
16
+ function construct(options) {
17
+ const controls = {
18
+ value: options.value !== undefined,
19
+ highlighted: options.highlightedValue !== undefined,
20
+ open: options.open !== undefined,
21
+ };
22
+ const requestedValue = controls.value ? options.value : options.defaultValue;
23
+ const requestedHighlight = controls.highlighted
24
+ ? options.highlightedValue
25
+ : options.defaultHighlightedValue;
26
+ const requestedOpen = controls.open ? options.open : options.defaultOpen;
27
+ const policies = Object.freeze({
28
+ ...options.policies,
29
+ ...(options.required === undefined ? {} : { required: options.required }),
30
+ });
31
+ const runtime = createSemanticController({
32
+ initial: tryCreateDateTimePickerState({
33
+ ...(requestedValue === undefined ? {} : { value: requestedValue }),
34
+ ...(requestedValue == null && options.policies?.defaultTime !== undefined
35
+ ? { time: options.policies.defaultTime }
36
+ : {}),
37
+ calendar: {
38
+ ...(requestedHighlight === undefined ? {} : { highlighted: requestedHighlight }),
39
+ ...(requestedOpen === undefined ? {} : { open: requestedOpen }),
40
+ },
41
+ }),
42
+ reducer: (state, event) => applyDateTimePickerEvent(state, event, policies),
43
+ reconcile: (previous, proposed) => tryCreateDateTimePickerState({
44
+ value: controls.value ? previous.value : proposed.value,
45
+ time: controls.value ? previous.time : proposed.time,
46
+ calendar: {
47
+ ...proposed.calendar,
48
+ highlighted: controls.highlighted
49
+ ? previous.calendar.highlighted
50
+ : proposed.calendar.highlighted,
51
+ view: controls.highlighted ? previous.calendar.view : proposed.calendar.view,
52
+ open: controls.open ? previous.calendar.open : proposed.calendar.open,
53
+ },
54
+ }),
55
+ notify: (previous, proposed) => {
56
+ if (compareNullable(previous.value, proposed.value) !== 0)
57
+ options.onValueChange?.(proposed.value);
58
+ if (compareDateValues(previous.calendar.highlighted, proposed.calendar.highlighted) !== 0) {
59
+ options.onHighlightedValueChange?.(proposed.calendar.highlighted);
60
+ }
61
+ if (previous.calendar.open !== proposed.calendar.open)
62
+ options.onOpenChange?.(proposed.calendar.open);
63
+ },
64
+ toEffect: (command) => command,
65
+ interaction: options,
66
+ });
67
+ return runtime.ok
68
+ ? { ok: true, value: new TerminalDateTimePicker(options, runtime.value, controls) }
69
+ : runtime;
70
+ }
71
+ class TerminalDateTimePicker {
72
+ options;
73
+ runtime;
74
+ controls;
75
+ constructor(options, runtime, controls) {
76
+ this.options = options;
77
+ this.runtime = runtime;
78
+ this.controls = controls;
79
+ }
80
+ getSnapshot() { return this.runtime.getSnapshot(); }
81
+ getMonth() {
82
+ const state = this.getSnapshot().state.calendar;
83
+ return createDatePickerMonth(state.view, this.options.policies?.date?.weekStartsOn);
84
+ }
85
+ syncControlledValues(values) {
86
+ if (this.controls.value !== (values.value !== undefined)
87
+ || this.controls.highlighted !== (values.highlightedValue !== undefined)
88
+ || this.controls.open !== (values.open !== undefined)) {
89
+ return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled date-time picker values must preserve their construction-time shape.' } };
90
+ }
91
+ const state = this.getSnapshot().state;
92
+ const highlighted = this.controls.highlighted
93
+ ? values.highlightedValue
94
+ : state.calendar.highlighted;
95
+ const result = this.runtime.replace(tryCreateDateTimePickerState({
96
+ value: this.controls.value ? values.value : state.value,
97
+ time: state.time,
98
+ calendar: {
99
+ highlighted,
100
+ view: { year: highlighted.year, month: highlighted.month },
101
+ viewMode: state.calendar.viewMode,
102
+ open: this.controls.open ? values.open : state.calendar.open,
103
+ },
104
+ }));
105
+ if (result.ok)
106
+ this.options.onUpdate?.();
107
+ return result;
108
+ }
109
+ handleEvent(event) {
110
+ const result = this.runtime.handle(event);
111
+ if (result.ok)
112
+ this.options.onUpdate?.();
113
+ return result.ok;
114
+ }
115
+ handleKeyboardInput(input) {
116
+ if (input.altKey === true && (input.key === 'up' || input.key === 'down')) {
117
+ const minutes = this.options.policies?.time?.step?.minute ?? 1;
118
+ const adjusted = addTimeMilliseconds(this.getSnapshot().state.time, minutes * 60_000 * (input.key === 'up' ? 1 : -1));
119
+ return adjusted.ok && this.handleEvent({ type: 'set-time', value: adjusted.value });
120
+ }
121
+ const event = toDatePickerEvent(input);
122
+ return event !== null && typeof event === 'string' && this.handleEvent(event);
123
+ }
124
+ }
125
+ function compareNullable(left, right) {
126
+ return left === null ? right === null ? 0 : -1 : right === null ? 1 : compareDateTimeValues(left, right);
127
+ }
128
+ //# sourceMappingURL=date-time-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time-picker.js","sourceRoot":"","sources":["../src/date-time-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { Result } from '@sectile/core';
2
+ import type { RevisionSnapshot } from '@sectile/core/revision';
3
+ import { type DateValue } from '@sectile/core/date-field';
4
+ import { type DateTimeRange } from '@sectile/core/date-time-field';
5
+ import { type DateTimeRangePickerEvent, type DateTimeRangePickerPolicies, type DateTimeRangePickerState } from '@sectile/core/date-time-range-picker';
6
+ import { type FacadeConnection } from './internal/facade.js';
7
+ import type { TerminalKeyboardInput } from './keyboard.js';
8
+ export interface DateTimeRangePickerOptions {
9
+ readonly policies?: DateTimeRangePickerPolicies;
10
+ readonly value?: DateTimeRange | null;
11
+ readonly defaultValue?: DateTimeRange | null;
12
+ readonly highlightedValue?: DateValue;
13
+ readonly defaultHighlightedValue?: DateValue;
14
+ readonly open?: boolean;
15
+ readonly defaultOpen?: boolean;
16
+ readonly disabled?: boolean;
17
+ readonly readOnly?: boolean;
18
+ readonly required?: boolean;
19
+ readonly onValueChange?: (value: DateTimeRange | null) => void;
20
+ readonly onHighlightedValueChange?: (value: DateValue) => void;
21
+ readonly onOpenChange?: (open: boolean) => void;
22
+ readonly onUpdate?: () => void;
23
+ }
24
+ export type DateTimeRangePickerValueChangeHandler = NonNullable<DateTimeRangePickerOptions['onValueChange']>;
25
+ export type DateTimeRangePickerHighlightedValueChangeHandler = NonNullable<DateTimeRangePickerOptions['onHighlightedValueChange']>;
26
+ export type DateTimeRangePickerOpenChangeHandler = NonNullable<DateTimeRangePickerOptions['onOpenChange']>;
27
+ export type DateTimeRangePickerUpdateHandler = NonNullable<DateTimeRangePickerOptions['onUpdate']>;
28
+ export interface DateTimeRangePickerControlledValues {
29
+ readonly value?: DateTimeRange | null;
30
+ readonly highlightedValue?: DateValue;
31
+ readonly open?: boolean;
32
+ }
33
+ export interface DateTimeRangePickerConnection {
34
+ getSnapshot(): RevisionSnapshot<DateTimeRangePickerState>;
35
+ getMonth(): readonly (readonly DateValue[])[];
36
+ syncControlledValues(values: DateTimeRangePickerControlledValues): Result<RevisionSnapshot<DateTimeRangePickerState>>;
37
+ handleEvent(event: DateTimeRangePickerEvent): boolean;
38
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
39
+ }
40
+ export declare function createDateTimeRangePicker(options?: DateTimeRangePickerOptions): FacadeConnection<DateTimeRangePickerConnection>;
41
+ export declare function tryCreateDateTimeRangePicker(options?: DateTimeRangePickerOptions): Result<FacadeConnection<DateTimeRangePickerConnection>>;
42
+ //# sourceMappingURL=date-time-range-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time-range-picker.d.ts","sourceRoot":"","sources":["../src/date-time-range-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ import { unwrap } from '@sectile/core/result';
2
+ import { compareDateValues } from '@sectile/core/date-field';
3
+ import { formatDateTimeRange } from '@sectile/core/date-time-field';
4
+ import { createDatePickerMonth } from '@sectile/core/date-picker';
5
+ import { addTimeMilliseconds } from '@sectile/core/time-field';
6
+ import { applyDateTimeRangePickerEvent, tryCreateDateTimeRangePickerState, } from '@sectile/core/date-time-range-picker';
7
+ import { createFacadeConnection } from './internal/facade.js';
8
+ import { createSemanticController } from './internal/semantic-controller.js';
9
+ import { toDatePickerEvent } from './date-picker.js';
10
+ export function createDateTimeRangePicker(options = {}) {
11
+ return unwrap(tryCreateDateTimeRangePicker(options));
12
+ }
13
+ export function tryCreateDateTimeRangePicker(options = {}) {
14
+ return createFacadeConnection(options, construct);
15
+ }
16
+ function construct(options) {
17
+ const controls = {
18
+ value: options.value !== undefined,
19
+ highlighted: options.highlightedValue !== undefined,
20
+ open: options.open !== undefined,
21
+ };
22
+ const requestedValue = controls.value ? options.value : options.defaultValue;
23
+ const requestedHighlight = controls.highlighted
24
+ ? options.highlightedValue
25
+ : options.defaultHighlightedValue;
26
+ const requestedOpen = controls.open ? options.open : options.defaultOpen;
27
+ const policies = Object.freeze({
28
+ ...options.policies,
29
+ ...(options.required === undefined ? {} : { required: options.required }),
30
+ });
31
+ const runtime = createSemanticController({
32
+ initial: tryCreateDateTimeRangePickerState({
33
+ ...(requestedValue === undefined ? {} : { value: requestedValue }),
34
+ calendar: {
35
+ ...(requestedHighlight === undefined ? {} : { highlighted: requestedHighlight }),
36
+ ...(requestedOpen === undefined ? {} : { open: requestedOpen }),
37
+ },
38
+ }),
39
+ reducer: (state, event) => applyDateTimeRangePickerEvent(state, event, policies),
40
+ reconcile: (previous, proposed) => tryCreateDateTimeRangePickerState({
41
+ value: controls.value ? previous.value : proposed.value,
42
+ anchor: proposed.anchor,
43
+ startTime: controls.value ? previous.startTime : proposed.startTime,
44
+ endTime: controls.value ? previous.endTime : proposed.endTime,
45
+ calendar: {
46
+ ...proposed.calendar,
47
+ highlighted: controls.highlighted
48
+ ? previous.calendar.highlighted
49
+ : proposed.calendar.highlighted,
50
+ view: controls.highlighted ? previous.calendar.view : proposed.calendar.view,
51
+ open: controls.open ? previous.calendar.open : proposed.calendar.open,
52
+ },
53
+ }),
54
+ notify: (previous, proposed) => {
55
+ if (rangeKey(previous.value) !== rangeKey(proposed.value))
56
+ options.onValueChange?.(proposed.value);
57
+ if (compareDateValues(previous.calendar.highlighted, proposed.calendar.highlighted) !== 0) {
58
+ options.onHighlightedValueChange?.(proposed.calendar.highlighted);
59
+ }
60
+ if (previous.calendar.open !== proposed.calendar.open)
61
+ options.onOpenChange?.(proposed.calendar.open);
62
+ },
63
+ toEffect: (command) => command,
64
+ interaction: options,
65
+ });
66
+ return runtime.ok
67
+ ? { ok: true, value: new TerminalDateTimeRangePicker(options, runtime.value, controls) }
68
+ : runtime;
69
+ }
70
+ class TerminalDateTimeRangePicker {
71
+ options;
72
+ runtime;
73
+ controls;
74
+ constructor(options, runtime, controls) {
75
+ this.options = options;
76
+ this.runtime = runtime;
77
+ this.controls = controls;
78
+ }
79
+ getSnapshot() { return this.runtime.getSnapshot(); }
80
+ getMonth() {
81
+ const state = this.getSnapshot().state.calendar;
82
+ return createDatePickerMonth(state.view, this.options.policies?.date?.weekStartsOn);
83
+ }
84
+ syncControlledValues(values) {
85
+ if (this.controls.value !== (values.value !== undefined)
86
+ || this.controls.highlighted !== (values.highlightedValue !== undefined)
87
+ || this.controls.open !== (values.open !== undefined)) {
88
+ return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled date-time range picker values must preserve their construction-time shape.' } };
89
+ }
90
+ const state = this.getSnapshot().state;
91
+ const highlighted = this.controls.highlighted
92
+ ? values.highlightedValue
93
+ : state.calendar.highlighted;
94
+ const result = this.runtime.replace(tryCreateDateTimeRangePickerState({
95
+ value: this.controls.value ? values.value : state.value,
96
+ anchor: state.anchor,
97
+ startTime: state.startTime,
98
+ endTime: state.endTime,
99
+ calendar: {
100
+ highlighted,
101
+ view: { year: highlighted.year, month: highlighted.month },
102
+ viewMode: state.calendar.viewMode,
103
+ open: this.controls.open ? values.open : state.calendar.open,
104
+ },
105
+ }));
106
+ if (result.ok)
107
+ this.options.onUpdate?.();
108
+ return result;
109
+ }
110
+ handleEvent(event) {
111
+ const result = this.runtime.handle(event);
112
+ if (result.ok)
113
+ this.options.onUpdate?.();
114
+ return result.ok;
115
+ }
116
+ handleKeyboardInput(input) {
117
+ if (input.altKey === true && (input.key === 'up' || input.key === 'down')) {
118
+ const endpoint = input.shiftKey === true ? 'end' : 'start';
119
+ const state = this.getSnapshot().state;
120
+ const policies = endpoint === 'start'
121
+ ? this.options.policies?.startTime
122
+ : this.options.policies?.endTime;
123
+ const minutes = policies?.step?.minute ?? 1;
124
+ const adjusted = addTimeMilliseconds(endpoint === 'start' ? state.startTime : state.endTime, minutes * 60_000 * (input.key === 'up' ? 1 : -1));
125
+ return adjusted.ok && this.handleEvent({
126
+ type: endpoint === 'start' ? 'set-start-time' : 'set-end-time',
127
+ value: adjusted.value,
128
+ });
129
+ }
130
+ const event = toDatePickerEvent(input);
131
+ return event !== null && typeof event === 'string' && this.handleEvent(event);
132
+ }
133
+ }
134
+ function rangeKey(value) {
135
+ return value === null ? '' : formatDateTimeRange(value);
136
+ }
137
+ //# sourceMappingURL=date-time-range-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-time-range-picker.js","sourceRoot":"","sources":["../src/date-time-range-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type FacadeConnection } from './internal/facade.js';
2
+ import type { Result } from '@sectile/core';
3
+ import { type DialogEvent, type DialogState } from '@sectile/core/dialog';
4
+ import { type TerminalPopupConnection } from './internal/popup-control.js';
5
+ export interface DialogOptions {
6
+ readonly open?: boolean;
7
+ readonly defaultOpen?: boolean;
8
+ readonly disabled?: boolean;
9
+ readonly onOpenChange?: (open: boolean) => void;
10
+ readonly onInitialFocus?: () => void;
11
+ readonly onFocusRestore?: () => void;
12
+ readonly onUpdate?: () => void;
13
+ }
14
+ export type DialogOpenChangeHandler = NonNullable<DialogOptions['onOpenChange']>;
15
+ export type DialogInitialFocusHandler = NonNullable<DialogOptions['onInitialFocus']>;
16
+ export type DialogFocusRestoreHandler = NonNullable<DialogOptions['onFocusRestore']>;
17
+ export type DialogUpdateHandler = NonNullable<DialogOptions['onUpdate']>;
18
+ export type DialogConnection = TerminalPopupConnection<DialogState, DialogEvent>;
19
+ export declare function createDialog(o?: DialogOptions): FacadeConnection<DialogConnection>;
20
+ export declare function tryCreateDialog(o?: DialogOptions): Result<FacadeConnection<DialogConnection>>;
21
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAA8D,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAChG,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAEpR,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACjF,wBAAgB,YAAY,CAAC,CAAC,GAAE,aAAkB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAEtF;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAE,aAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAEjG"}
package/dist/dialog.js ADDED
@@ -0,0 +1,12 @@
1
+ import { createFacadeConnection } from './internal/facade.js';
2
+ import { unwrap } from '@sectile/core/result';
3
+ import { applyDialogEvent, tryCreateDialogState } from '@sectile/core/dialog';
4
+ import { createTerminalPopup } from './internal/popup-control.js';
5
+ export function createDialog(o = {}) {
6
+ return unwrap(tryCreateDialog(o));
7
+ }
8
+ export function tryCreateDialog(o = {}) {
9
+ return createFacadeConnection(o, (o) => tryCreateDialogConnection(o));
10
+ }
11
+ function tryCreateDialogConnection(o = {}) { return createTerminalPopup({ controlled: o.open !== undefined, initial: tryCreateDialogState(o.open ?? o.defaultOpen ?? false), reducer: applyDialogEvent, create: tryCreateDialogState, read: (s) => s.open, close: 'close', interaction: o, onOpenChange: o.onOpenChange, command: (c) => c.type === 'request-initial-focus' ? o.onInitialFocus?.() : o.onFocusRestore?.(), onUpdate: o.onUpdate }); }
12
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAA0D,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAgC,MAAM,6BAA6B,CAAC;AAQhG,MAAM,UAAU,YAAY,CAAC,CAAC,GAAkB,EAAE;IAChD,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAC,GAAkB,EAAE;IACnD,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,CAAC,GAAkB,EAAE,IAA8B,OAAO,mBAAmB,CAA0C,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type FacadeConnection } from './internal/facade.js';
2
+ import type { Result } from '@sectile/core';
3
+ import type { RevisionSnapshot } from '@sectile/core/revision';
4
+ import { type DisclosureEvent, type DisclosureState } from '@sectile/core/disclosure';
5
+ import type { TerminalKeyboardInput } from './keyboard.js';
6
+ export interface DisclosureOptions {
7
+ readonly open?: boolean;
8
+ readonly defaultOpen?: boolean;
9
+ readonly disabled?: boolean;
10
+ readonly onOpenChange?: (open: boolean) => void;
11
+ readonly onUpdate?: () => void;
12
+ }
13
+ export type DisclosureOpenChangeHandler = NonNullable<DisclosureOptions['onOpenChange']>;
14
+ export type DisclosureUpdateHandler = NonNullable<DisclosureOptions['onUpdate']>;
15
+ export interface DisclosureConnection {
16
+ getSnapshot(): RevisionSnapshot<DisclosureState>;
17
+ syncControlledValue(open: boolean): Result<RevisionSnapshot<DisclosureState>>;
18
+ handleEvent(event: DisclosureEvent): boolean;
19
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
20
+ }
21
+ export declare function createDisclosure(options?: DisclosureOptions): FacadeConnection<DisclosureConnection>;
22
+ export declare function tryCreateDisclosure(options?: DisclosureOptions): Result<FacadeConnection<DisclosureConnection>>;
23
+ export declare function toDisclosureEvent(input: TerminalKeyboardInput): DisclosureEvent | null;
24
+ //# sourceMappingURL=disclosure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAEmB,KAAK,eAAe,EAAE,KAAK,eAAe,EACnE,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,2BAA2B,GAAG,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,MAAM,WAAW,oBAAoB;IACnC,WAAW,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9E,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;IAC7C,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;CAC5D;AACD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAExG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAEnH;AAeD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI,CAEtF"}
@@ -0,0 +1,56 @@
1
+ import { createFacadeConnection } from './internal/facade.js';
2
+ import { unwrap } from '@sectile/core/result';
3
+ import { applyDisclosureEvent, tryCreateDisclosureState, } from '@sectile/core/disclosure';
4
+ import { createSemanticController } from './internal/semantic-controller.js';
5
+ export function createDisclosure(options = {}) {
6
+ return unwrap(tryCreateDisclosure(options));
7
+ }
8
+ export function tryCreateDisclosure(options = {}) {
9
+ return createFacadeConnection(options, (options) => tryCreateDisclosureConnection(options));
10
+ }
11
+ function tryCreateDisclosureConnection(options = {}) {
12
+ const controlled = options.open !== undefined;
13
+ const runtime = createSemanticController({
14
+ initial: tryCreateDisclosureState(options.open ?? options.defaultOpen ?? false),
15
+ reducer: applyDisclosureEvent,
16
+ reconcile: (previous, proposed) => tryCreateDisclosureState(controlled ? previous.open : proposed.open),
17
+ notify: (previous, proposed) => { if (previous.open !== proposed.open)
18
+ options.onOpenChange?.(proposed.open); },
19
+ toEffect: (command) => command,
20
+ interaction: options,
21
+ });
22
+ if (!runtime.ok)
23
+ return runtime;
24
+ return { ok: true, value: new TerminalDisclosureConnection(options, runtime.value, controlled) };
25
+ }
26
+ export function toDisclosureEvent(input) {
27
+ return input.key === 'enter' || input.key === 'space' ? 'toggle' : null;
28
+ }
29
+ class TerminalDisclosureConnection {
30
+ #options;
31
+ #runtime;
32
+ #controlled;
33
+ constructor(options, runtime, controlled) {
34
+ this.#options = options;
35
+ this.#runtime = runtime;
36
+ this.#controlled = controlled;
37
+ }
38
+ getSnapshot() { return this.#runtime.getSnapshot(); }
39
+ syncControlledValue(open) {
40
+ if (!this.#controlled)
41
+ return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled disclosure cannot be synchronized externally.' } };
42
+ const result = this.#runtime.replace(tryCreateDisclosureState(open));
43
+ if (result.ok)
44
+ this.#options.onUpdate?.();
45
+ return result;
46
+ }
47
+ handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
48
+ this.#options.onUpdate?.(); return result.ok; }
49
+ handleKeyboardInput(input) {
50
+ const event = toDisclosureEvent(input);
51
+ if (event === null)
52
+ return false;
53
+ return this.handleEvent(event);
54
+ }
55
+ }
56
+ //# sourceMappingURL=disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Result } from '@sectile/core';
2
+ import { type DrawerEvent, type DrawerSide, type DrawerState } from '@sectile/core/drawer';
3
+ import { type FacadeConnection } from './internal/facade.js';
4
+ import { type TerminalPopupConnection } from './internal/popup-control.js';
5
+ export type { DrawerSide } from '@sectile/core/drawer';
6
+ export interface DrawerOptions {
7
+ readonly open?: boolean;
8
+ readonly defaultOpen?: boolean;
9
+ readonly side?: DrawerSide;
10
+ readonly disabled?: boolean;
11
+ readonly onOpenChange?: (open: boolean) => void;
12
+ readonly onInitialFocus?: () => void;
13
+ readonly onFocusRestore?: () => void;
14
+ readonly onUpdate?: () => void;
15
+ }
16
+ export type DrawerOpenChangeHandler = NonNullable<DrawerOptions['onOpenChange']>;
17
+ export type DrawerInitialFocusHandler = NonNullable<DrawerOptions['onInitialFocus']>;
18
+ export type DrawerFocusRestoreHandler = NonNullable<DrawerOptions['onFocusRestore']>;
19
+ export type DrawerUpdateHandler = NonNullable<DrawerOptions['onUpdate']>;
20
+ export type DrawerConnection = TerminalPopupConnection<DrawerState, DrawerEvent>;
21
+ export declare function createDrawer(options?: DrawerOptions): FacadeConnection<DrawerConnection>;
22
+ export declare function tryCreateDrawer(options?: DrawerOptions): Result<FacadeConnection<DrawerConnection>>;
23
+ //# sourceMappingURL=drawer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.d.ts","sourceRoot":"","sources":["../src/drawer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEhG,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEjF,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAE5F;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAEvG"}
package/dist/drawer.js ADDED
@@ -0,0 +1,26 @@
1
+ import { applyDrawerEvent, tryCreateDrawerState, } from '@sectile/core/drawer';
2
+ import { unwrap } from '@sectile/core/result';
3
+ import { createFacadeConnection } from './internal/facade.js';
4
+ import { createTerminalPopup } from './internal/popup-control.js';
5
+ export function createDrawer(options = {}) {
6
+ return unwrap(tryCreateDrawer(options));
7
+ }
8
+ export function tryCreateDrawer(options = {}) {
9
+ return createFacadeConnection(options, (normalized) => tryCreateDrawerConnection(normalized));
10
+ }
11
+ function tryCreateDrawerConnection(options) {
12
+ const side = options.side ?? 'bottom';
13
+ return createTerminalPopup({
14
+ controlled: options.open !== undefined,
15
+ initial: tryCreateDrawerState(options.open ?? options.defaultOpen ?? false, side),
16
+ reducer: applyDrawerEvent,
17
+ create: (open, state) => tryCreateDrawerState(open, state.side),
18
+ read: (state) => state.open,
19
+ close: 'close',
20
+ interaction: options,
21
+ onOpenChange: options.onOpenChange,
22
+ command: (command) => command.type === 'request-initial-focus' ? options.onInitialFocus?.() : options.onFocusRestore?.(),
23
+ onUpdate: options.onUpdate,
24
+ });
25
+ }
26
+ //# sourceMappingURL=drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.js","sourceRoot":"","sources":["../src/drawer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAKrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAgC,MAAM,6BAA6B,CAAC;AAqBhG,MAAM,UAAU,YAAY,CAAC,OAAO,GAAkB,EAAE;IACtD,OAAO,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO,GAAkB,EAAE;IACzD,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAsB;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IACtC,OAAO,mBAAmB,CAA0C;QAClE,UAAU,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS;QACtC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,EAAE,IAAI,CAAC;QACjF,OAAO,EAAE,gBAAgB;QACzB,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QAC/D,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;QAC3B,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,OAAO;QACpB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE;QACxH,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type FacadeConnection } from './internal/facade.js';
2
+ import type { Result } from '@sectile/core';
3
+ import type { RevisionSnapshot } from '@sectile/core/revision';
4
+ import { type EditableEvent, type EditablePolicies, type EditableState } from '@sectile/core/editable';
5
+ import { type TerminalKeyboardInput } from './keyboard.js';
6
+ export interface EditableOptions {
7
+ readonly value?: string;
8
+ readonly defaultValue?: string;
9
+ readonly disabled?: boolean;
10
+ readonly readOnly?: boolean;
11
+ readonly policies?: EditablePolicies;
12
+ readonly onValueChange?: (value: string) => void;
13
+ readonly onEditingChange?: (editing: boolean) => void;
14
+ readonly onUpdate?: () => void;
15
+ }
16
+ export type EditableValueChangeHandler = NonNullable<EditableOptions['onValueChange']>;
17
+ export type EditableEditingChangeHandler = NonNullable<EditableOptions['onEditingChange']>;
18
+ export type EditableUpdateHandler = NonNullable<EditableOptions['onUpdate']>;
19
+ export interface EditableConnection {
20
+ getSnapshot(): RevisionSnapshot<EditableState>;
21
+ syncControlledValue(value: string): Result<RevisionSnapshot<EditableState>>;
22
+ handleEvent(event: EditableEvent): boolean;
23
+ handleKeyboardInput(input: TerminalKeyboardInput): boolean;
24
+ }
25
+ export declare function createEditable(options?: EditableOptions): FacadeConnection<EditableConnection>;
26
+ export declare function tryCreateEditable(options?: EditableOptions): Result<FacadeConnection<EditableConnection>>;
27
+ //# sourceMappingURL=editable.d.ts.map