@sectile/terminal 0.1.0 → 0.2.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 (222) hide show
  1. package/README.md +15 -1
  2. package/package.json +103 -3
  3. package/dist/accordion.d.ts +0 -31
  4. package/dist/accordion.d.ts.map +0 -1
  5. package/dist/accordion.js +0 -76
  6. package/dist/accordion.js.map +0 -1
  7. package/dist/alert-dialog.d.ts +0 -18
  8. package/dist/alert-dialog.d.ts.map +0 -1
  9. package/dist/alert-dialog.js +0 -12
  10. package/dist/alert-dialog.js.map +0 -1
  11. package/dist/calendar.d.ts +0 -75
  12. package/dist/calendar.d.ts.map +0 -1
  13. package/dist/calendar.js +0 -217
  14. package/dist/calendar.js.map +0 -1
  15. package/dist/carousel.d.ts +0 -44
  16. package/dist/carousel.d.ts.map +0 -1
  17. package/dist/carousel.js +0 -129
  18. package/dist/carousel.js.map +0 -1
  19. package/dist/checkbox-group.d.ts +0 -19
  20. package/dist/checkbox-group.d.ts.map +0 -1
  21. package/dist/checkbox-group.js +0 -14
  22. package/dist/checkbox-group.js.map +0 -1
  23. package/dist/checkbox.d.ts +0 -17
  24. package/dist/checkbox.d.ts.map +0 -1
  25. package/dist/checkbox.js +0 -12
  26. package/dist/checkbox.js.map +0 -1
  27. package/dist/combobox.d.ts +0 -100
  28. package/dist/combobox.d.ts.map +0 -1
  29. package/dist/combobox.js +0 -286
  30. package/dist/combobox.js.map +0 -1
  31. package/dist/date-field.d.ts +0 -36
  32. package/dist/date-field.d.ts.map +0 -1
  33. package/dist/date-field.js +0 -46
  34. package/dist/date-field.js.map +0 -1
  35. package/dist/date-picker.d.ts +0 -38
  36. package/dist/date-picker.d.ts.map +0 -1
  37. package/dist/date-picker.js +0 -40
  38. package/dist/date-picker.js.map +0 -1
  39. package/dist/date-range-picker.d.ts +0 -38
  40. package/dist/date-range-picker.d.ts.map +0 -1
  41. package/dist/date-range-picker.js +0 -29
  42. package/dist/date-range-picker.js.map +0 -1
  43. package/dist/date-time-field.d.ts +0 -36
  44. package/dist/date-time-field.d.ts.map +0 -1
  45. package/dist/date-time-field.js +0 -133
  46. package/dist/date-time-field.js.map +0 -1
  47. package/dist/date-time-picker.d.ts +0 -38
  48. package/dist/date-time-picker.d.ts.map +0 -1
  49. package/dist/date-time-picker.js +0 -127
  50. package/dist/date-time-picker.js.map +0 -1
  51. package/dist/date-time-range-picker.d.ts +0 -38
  52. package/dist/date-time-range-picker.d.ts.map +0 -1
  53. package/dist/date-time-range-picker.js +0 -136
  54. package/dist/date-time-range-picker.js.map +0 -1
  55. package/dist/dialog.d.ts +0 -17
  56. package/dist/dialog.d.ts.map +0 -1
  57. package/dist/dialog.js +0 -12
  58. package/dist/dialog.js.map +0 -1
  59. package/dist/disclosure.d.ts +0 -22
  60. package/dist/disclosure.d.ts.map +0 -1
  61. package/dist/disclosure.js +0 -56
  62. package/dist/disclosure.js.map +0 -1
  63. package/dist/feed.d.ts +0 -28
  64. package/dist/feed.d.ts.map +0 -1
  65. package/dist/feed.js +0 -32
  66. package/dist/feed.js.map +0 -1
  67. package/dist/grid.d.ts +0 -40
  68. package/dist/grid.d.ts.map +0 -1
  69. package/dist/grid.js +0 -68
  70. package/dist/grid.js.map +0 -1
  71. package/dist/index.d.ts +0 -46
  72. package/dist/index.d.ts.map +0 -1
  73. package/dist/index.js +0 -44
  74. package/dist/index.js.map +0 -1
  75. package/dist/internal/checked-control.d.ts +0 -23
  76. package/dist/internal/checked-control.d.ts.map +0 -1
  77. package/dist/internal/checked-control.js +0 -22
  78. package/dist/internal/checked-control.js.map +0 -1
  79. package/dist/internal/controller.d.ts +0 -6
  80. package/dist/internal/controller.d.ts.map +0 -1
  81. package/dist/internal/controller.js +0 -35
  82. package/dist/internal/controller.js.map +0 -1
  83. package/dist/internal/disabled-items.d.ts +0 -6
  84. package/dist/internal/disabled-items.d.ts.map +0 -1
  85. package/dist/internal/disabled-items.js +0 -15
  86. package/dist/internal/disabled-items.js.map +0 -1
  87. package/dist/internal/facade.d.ts +0 -44
  88. package/dist/internal/facade.d.ts.map +0 -1
  89. package/dist/internal/facade.js +0 -58
  90. package/dist/internal/facade.js.map +0 -1
  91. package/dist/internal/menu-control.d.ts +0 -34
  92. package/dist/internal/menu-control.d.ts.map +0 -1
  93. package/dist/internal/menu-control.js +0 -48
  94. package/dist/internal/menu-control.js.map +0 -1
  95. package/dist/internal/popup-control.d.ts +0 -24
  96. package/dist/internal/popup-control.d.ts.map +0 -1
  97. package/dist/internal/popup-control.js +0 -23
  98. package/dist/internal/popup-control.js.map +0 -1
  99. package/dist/internal/semantic-controller.d.ts +0 -20
  100. package/dist/internal/semantic-controller.d.ts.map +0 -1
  101. package/dist/internal/semantic-controller.js +0 -42
  102. package/dist/internal/semantic-controller.js.map +0 -1
  103. package/dist/internal/text-input.d.ts +0 -5
  104. package/dist/internal/text-input.d.ts.map +0 -1
  105. package/dist/internal/text-input.js +0 -53
  106. package/dist/internal/text-input.js.map +0 -1
  107. package/dist/keyboard.d.ts +0 -10
  108. package/dist/keyboard.d.ts.map +0 -1
  109. package/dist/keyboard.js +0 -16
  110. package/dist/keyboard.js.map +0 -1
  111. package/dist/layout.d.ts +0 -2
  112. package/dist/layout.d.ts.map +0 -1
  113. package/dist/layout.js +0 -24
  114. package/dist/layout.js.map +0 -1
  115. package/dist/listbox.d.ts +0 -87
  116. package/dist/listbox.d.ts.map +0 -1
  117. package/dist/listbox.js +0 -323
  118. package/dist/listbox.js.map +0 -1
  119. package/dist/menu-button.d.ts +0 -8
  120. package/dist/menu-button.d.ts.map +0 -1
  121. package/dist/menu-button.js +0 -11
  122. package/dist/menu-button.js.map +0 -1
  123. package/dist/menu.d.ts +0 -8
  124. package/dist/menu.d.ts.map +0 -1
  125. package/dist/menu.js +0 -11
  126. package/dist/menu.js.map +0 -1
  127. package/dist/menubar.d.ts +0 -8
  128. package/dist/menubar.d.ts.map +0 -1
  129. package/dist/menubar.js +0 -11
  130. package/dist/menubar.js.map +0 -1
  131. package/dist/multi-thumb-slider.d.ts +0 -32
  132. package/dist/multi-thumb-slider.d.ts.map +0 -1
  133. package/dist/multi-thumb-slider.js +0 -67
  134. package/dist/multi-thumb-slider.js.map +0 -1
  135. package/dist/node.d.ts +0 -15
  136. package/dist/node.d.ts.map +0 -1
  137. package/dist/node.js +0 -78
  138. package/dist/node.js.map +0 -1
  139. package/dist/number-field.d.ts +0 -44
  140. package/dist/number-field.d.ts.map +0 -1
  141. package/dist/number-field.js +0 -157
  142. package/dist/number-field.js.map +0 -1
  143. package/dist/pagination.d.ts +0 -35
  144. package/dist/pagination.d.ts.map +0 -1
  145. package/dist/pagination.js +0 -103
  146. package/dist/pagination.js.map +0 -1
  147. package/dist/pin-input.d.ts +0 -25
  148. package/dist/pin-input.d.ts.map +0 -1
  149. package/dist/pin-input.js +0 -30
  150. package/dist/pin-input.js.map +0 -1
  151. package/dist/quantity-field.d.ts +0 -45
  152. package/dist/quantity-field.d.ts.map +0 -1
  153. package/dist/quantity-field.js +0 -168
  154. package/dist/quantity-field.js.map +0 -1
  155. package/dist/radio-group.d.ts +0 -37
  156. package/dist/radio-group.d.ts.map +0 -1
  157. package/dist/radio-group.js +0 -126
  158. package/dist/radio-group.js.map +0 -1
  159. package/dist/rating.d.ts +0 -22
  160. package/dist/rating.d.ts.map +0 -1
  161. package/dist/rating.js +0 -38
  162. package/dist/rating.js.map +0 -1
  163. package/dist/select.d.ts +0 -41
  164. package/dist/select.d.ts.map +0 -1
  165. package/dist/select.js +0 -50
  166. package/dist/select.js.map +0 -1
  167. package/dist/slider.d.ts +0 -59
  168. package/dist/slider.d.ts.map +0 -1
  169. package/dist/slider.js +0 -156
  170. package/dist/slider.js.map +0 -1
  171. package/dist/spin-button.d.ts +0 -35
  172. package/dist/spin-button.d.ts.map +0 -1
  173. package/dist/spin-button.js +0 -78
  174. package/dist/spin-button.js.map +0 -1
  175. package/dist/stepper.d.ts +0 -19
  176. package/dist/stepper.d.ts.map +0 -1
  177. package/dist/stepper.js +0 -14
  178. package/dist/stepper.js.map +0 -1
  179. package/dist/switch.d.ts +0 -15
  180. package/dist/switch.d.ts.map +0 -1
  181. package/dist/switch.js +0 -12
  182. package/dist/switch.js.map +0 -1
  183. package/dist/tabs.d.ts +0 -42
  184. package/dist/tabs.d.ts.map +0 -1
  185. package/dist/tabs.js +0 -128
  186. package/dist/tabs.js.map +0 -1
  187. package/dist/tags-input.d.ts +0 -29
  188. package/dist/tags-input.d.ts.map +0 -1
  189. package/dist/tags-input.js +0 -27
  190. package/dist/tags-input.js.map +0 -1
  191. package/dist/text.d.ts +0 -60
  192. package/dist/text.d.ts.map +0 -1
  193. package/dist/text.js +0 -143
  194. package/dist/text.js.map +0 -1
  195. package/dist/time-field.d.ts +0 -36
  196. package/dist/time-field.d.ts.map +0 -1
  197. package/dist/time-field.js +0 -40
  198. package/dist/time-field.js.map +0 -1
  199. package/dist/toggle-button.d.ts +0 -15
  200. package/dist/toggle-button.d.ts.map +0 -1
  201. package/dist/toggle-button.js +0 -12
  202. package/dist/toggle-button.js.map +0 -1
  203. package/dist/toolbar.d.ts +0 -34
  204. package/dist/toolbar.d.ts.map +0 -1
  205. package/dist/toolbar.js +0 -108
  206. package/dist/toolbar.js.map +0 -1
  207. package/dist/tooltip.d.ts +0 -15
  208. package/dist/tooltip.d.ts.map +0 -1
  209. package/dist/tooltip.js +0 -12
  210. package/dist/tooltip.js.map +0 -1
  211. package/dist/tree-grid.d.ts +0 -94
  212. package/dist/tree-grid.d.ts.map +0 -1
  213. package/dist/tree-grid.js +0 -308
  214. package/dist/tree-grid.js.map +0 -1
  215. package/dist/tree-view.d.ts +0 -75
  216. package/dist/tree-view.d.ts.map +0 -1
  217. package/dist/tree-view.js +0 -213
  218. package/dist/tree-view.js.map +0 -1
  219. package/dist/window-splitter.d.ts +0 -19
  220. package/dist/window-splitter.d.ts.map +0 -1
  221. package/dist/window-splitter.js +0 -48
  222. package/dist/window-splitter.js.map +0 -1
@@ -1,27 +0,0 @@
1
- import { createFacadeConnection } from './internal/facade.js';
2
- import { unwrap } from '@sectile/core/result';
3
- import { applyTagsInputEvent, createTagsInputState } from '@sectile/core/tags-input';
4
- import { createSemanticController } from './internal/semantic-controller.js';
5
- export function createTagsInput(options = {}) {
6
- return unwrap(tryCreateTagsInput(options));
7
- }
8
- export function tryCreateTagsInput(options = {}) {
9
- return createFacadeConnection(options, (options) => tryCreateTagsInputConnection(options));
10
- }
11
- function tryCreateTagsInputConnection(options = {}) { const controlled = { value: options.value !== undefined, input: options.inputValue !== undefined }; const runtime = createSemanticController({ interaction: options, interactionIntent: (event) => event === 'next' || event === 'previous' || event === 'focus-input' || (typeof event === 'object' && event.type === 'focus-tag') ? 'navigate' : 'mutate', initial: createTagsInputState(options.value ?? options.defaultValue ?? [], options.inputValue ?? options.defaultInputValue ?? ''), reducer: (state, event) => applyTagsInputEvent(state, event, options.policies), reconcile: (previous, proposed) => createTagsInputState(controlled.value ? previous.tags : proposed.tags, controlled.input ? previous.draft : proposed.draft, proposed.current), notify: (previous, proposed) => { if (previous.tags.join('\u0000') !== proposed.tags.join('\u0000'))
12
- options.onValueChange?.(proposed.tags); if (previous.draft !== proposed.draft)
13
- options.onInputValueChange?.(proposed.draft); }, toEffect: (command) => command }); return runtime.ok ? { ok: true, value: new TerminalTagsInputConnection(options, runtime.value, controlled) } : runtime; }
14
- class TerminalTagsInputConnection {
15
- #options;
16
- #runtime;
17
- #controlled;
18
- constructor(options, runtime, controlled) { this.#options = options; this.#runtime = runtime; this.#controlled = controlled; }
19
- getSnapshot() { return this.#runtime.getSnapshot(); }
20
- syncControlledValues(values) { if (this.#controlled.value !== (values.value !== undefined) || this.#controlled.input !== (values.inputValue !== undefined))
21
- return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled tags input values must preserve their construction-time shape.' } }; const state = this.#runtime.getSnapshot().state; const result = this.#runtime.replace(createTagsInputState(this.#controlled.value ? values.value ?? [] : state.tags, this.#controlled.input ? values.inputValue ?? '' : state.draft, state.current)); if (result.ok)
22
- this.#options.onUpdate?.(); return result; }
23
- handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
24
- this.#options.onUpdate?.(); return result.ok; }
25
- handleKeyboardInput(input) { const state = this.#runtime.getSnapshot().state; const event = input.key === 'enter' || input.text === ',' ? { type: 'add' } : input.key === 'backspace' && state.draft.length === 0 ? (state.current === null ? 'previous' : 'remove-current') : input.key === 'left' ? 'previous' : input.key === 'right' ? 'next' : input.text !== undefined ? { type: 'input', value: `${state.draft}${input.text}` } : null; return event === null ? false : this.handleEvent(event); }
26
- }
27
- //# sourceMappingURL=tags-input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tags-input.js","sourceRoot":"","sources":["../src/tags-input.ts"],"names":[],"mappings":"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"}
package/dist/text.d.ts DELETED
@@ -1,60 +0,0 @@
1
- import { type FacadeConnection } from './internal/facade.js';
2
- import type { Result } from '@sectile/core';
3
- import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
4
- import { type TextEditingState, type TextEvent, type TextSelectionInput } from '@sectile/core/text';
5
- import type { TerminalKeyboardInput } from './keyboard.js';
6
- export type TextInput = {
7
- readonly type: 'insert' | 'replace';
8
- readonly text: string;
9
- readonly startCodeUnitOffset: number;
10
- readonly endCodeUnitOffset: number;
11
- readonly selection: TextSelectionInput;
12
- } | {
13
- readonly type: 'delete';
14
- readonly startCodeUnitOffset: number;
15
- readonly endCodeUnitOffset: number;
16
- readonly selection: TextSelectionInput;
17
- };
18
- export interface TextValueChangeDetails {
19
- readonly value: TextEditingState;
20
- readonly previousValue: TextEditingState;
21
- }
22
- export interface TextControllerOptions {
23
- readonly value?: TextEditingState;
24
- readonly defaultValue?: TextEditingState;
25
- readonly disabled?: boolean;
26
- readonly readOnly?: boolean;
27
- readonly onValueChange?: (change: TextValueChangeDetails) => void;
28
- }
29
- export interface TextControlledValues {
30
- readonly value: TextEditingState;
31
- }
32
- export interface TextController {
33
- getSnapshot(): RevisionSnapshot<TextEditingState>;
34
- syncControlledValues(values: TextControlledValues): Result<RevisionSnapshot<TextEditingState>>;
35
- handleTextInput(input: TextInput, expectedRevision?: number): RevisionResult<TextEditingState, never>;
36
- }
37
- export interface TextTransitionDetails {
38
- readonly input: TextInput;
39
- readonly result: RevisionResult<TextEditingState, never>;
40
- }
41
- export interface TextConnectionOptions {
42
- readonly controller: TextController;
43
- readonly disabled?: boolean;
44
- readonly readOnly?: boolean;
45
- readonly onTransition?: (details: TextTransitionDetails) => void;
46
- readonly onUpdate?: () => void;
47
- }
48
- export interface TextConnection {
49
- getSnapshot(): RevisionSnapshot<TextEditingState>;
50
- getValue(): string;
51
- syncControlledValues(values: TextControlledValues): Result<RevisionSnapshot<TextEditingState>>;
52
- handleKeyboardInput(input: TerminalKeyboardInput): boolean;
53
- }
54
- export type TextOptions = TextControllerOptions & Omit<TextConnectionOptions, 'controller'>;
55
- export declare function createTextController(options?: TextControllerOptions): Result<TextController>;
56
- export declare function createText(options?: TextOptions): FacadeConnection<TextConnection>;
57
- export declare function tryCreateText(options?: TextOptions): Result<FacadeConnection<TextConnection>>;
58
- export declare function connectText(options: TextConnectionOptions): TextConnection;
59
- export declare function toTextEvent(input: TextInput): TextEvent | null;
60
- //# sourceMappingURL=text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"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"}
package/dist/text.js DELETED
@@ -1,143 +0,0 @@
1
- import { createFacadeConnection } from './internal/facade.js';
2
- import { unwrap } from '@sectile/core/result';
3
- import { createInteractionState, requireInteraction } from '@sectile/core/interaction';
4
- import { createRevisionSnapshot, rejectRevisionInput, } from '@sectile/core/revision';
5
- import { applyTextEvent, createTextEditingState, normalizeTextEditingState, } from '@sectile/core/text';
6
- import { applyControllerEvent, sameControllerState, synchronizeControllerState, } from './internal/controller.js';
7
- import { toTerminalTextInput } from './internal/text-input.js';
8
- export function createTextController(options = {}) {
9
- const requested = options.value !== undefined ? options.value : options.defaultValue;
10
- const initial = requested === undefined
11
- ? createTextEditingState()
12
- : normalizeTextEditingState(requested);
13
- if (!initial.ok)
14
- return initial;
15
- const snapshot = createRevisionSnapshot(initial.value);
16
- if (!snapshot.ok)
17
- return snapshot;
18
- const interaction = createInteractionState(options);
19
- if (!interaction.ok)
20
- return interaction;
21
- return { ok: true, value: new TerminalTextController(options, interaction.value, snapshot.value) };
22
- }
23
- export function createText(options = {}) {
24
- return unwrap(tryCreateText(options));
25
- }
26
- export function tryCreateText(options = {}) {
27
- return createFacadeConnection(options, (options) => tryCreateTextConnection(options));
28
- }
29
- function tryCreateTextConnection(options = {}) {
30
- const controller = createTextController(options);
31
- if (!controller.ok)
32
- return controller;
33
- return { ok: true, value: connectText({ ...options, controller: controller.value }) };
34
- }
35
- export function connectText(options) {
36
- return new TerminalTextConnection(options);
37
- }
38
- export function toTextEvent(input) {
39
- if (typeof input !== 'object' || input === null)
40
- return null;
41
- if (input.type !== 'insert' && input.type !== 'replace' && input.type !== 'delete')
42
- return null;
43
- if (input.type !== 'delete' && typeof input.text !== 'string')
44
- return null;
45
- return Object.freeze({
46
- type: 'replace',
47
- startCodeUnitOffset: input.startCodeUnitOffset,
48
- endCodeUnitOffset: input.endCodeUnitOffset,
49
- text: input.type === 'delete' ? '' : input.text,
50
- selection: input.selection,
51
- });
52
- }
53
- class TerminalTextConnection {
54
- #controller;
55
- #onTransition;
56
- #onUpdate;
57
- constructor(options) {
58
- this.#controller = options.controller;
59
- this.#onTransition = options.onTransition;
60
- this.#onUpdate = options.onUpdate;
61
- }
62
- getSnapshot() {
63
- return this.#controller.getSnapshot();
64
- }
65
- getValue() {
66
- return this.#controller.getSnapshot().state.snapshot.text;
67
- }
68
- syncControlledValues(values) {
69
- const result = this.#controller.syncControlledValues(values);
70
- if (result.ok)
71
- this.#onUpdate?.();
72
- return result;
73
- }
74
- handleKeyboardInput(input) {
75
- const semanticInput = toTerminalTextInput(this.#controller.getSnapshot().state, input);
76
- if (semanticInput === null)
77
- return false;
78
- const result = this.#controller.handleTextInput(semanticInput);
79
- this.#onTransition?.(Object.freeze({ input: semanticInput, result }));
80
- if (result.ok)
81
- this.#onUpdate?.();
82
- return result.ok;
83
- }
84
- }
85
- class TerminalTextController {
86
- #controlled;
87
- #interaction;
88
- #onValueChange;
89
- #snapshot;
90
- constructor(options, interaction, snapshot) {
91
- this.#controlled = options.value !== undefined;
92
- this.#interaction = interaction;
93
- this.#onValueChange = options.onValueChange;
94
- this.#snapshot = snapshot;
95
- }
96
- getSnapshot() {
97
- return this.#snapshot;
98
- }
99
- syncControlledValues(values) {
100
- const error = controlledInputError(this.#controlled);
101
- if (error !== null)
102
- return { ok: false, error };
103
- const snapshot = synchronizeControllerState(this.#snapshot, normalizeTextEditingState(values.value));
104
- if (!snapshot.ok)
105
- return snapshot;
106
- this.#snapshot = snapshot.value;
107
- return snapshot;
108
- }
109
- handleTextInput(input, expectedRevision = this.#snapshot.revision) {
110
- const permitted = requireInteraction(this.#interaction, 'mutate');
111
- if (!permitted.ok)
112
- return rejectRevisionInput(this.#snapshot, permitted.error);
113
- const event = toTextEvent(input);
114
- if (event === null) {
115
- return rejectRevisionInput(this.#snapshot, {
116
- class: 'transition-rejection',
117
- code: 'unsupported-terminal-text-input',
118
- message: 'Terminal text input does not map to a semantic text event.',
119
- });
120
- }
121
- const result = applyControllerEvent(this.#snapshot, expectedRevision, event, applyTextEvent, (previous, proposed) => normalizeTextEditingState(this.#controlled ? previous : proposed), (previous, proposed) => {
122
- if (!sameControllerState(previous, proposed)) {
123
- this.#onValueChange?.(Object.freeze({ value: proposed, previousValue: previous }));
124
- }
125
- }, impossibleEffect);
126
- if (result.ok)
127
- this.#snapshot = result.snapshot;
128
- return result;
129
- }
130
- }
131
- function controlledInputError(controlled) {
132
- return controlled
133
- ? null
134
- : {
135
- class: 'construction',
136
- code: 'uncontrolled-value-update',
137
- message: 'Uncontrolled text state cannot be synchronized externally.',
138
- };
139
- }
140
- function impossibleEffect(command) {
141
- return command;
142
- }
143
- //# sourceMappingURL=text.js.map
package/dist/text.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { Result } from '@sectile/core';
2
- import type { RevisionSnapshot } from '@sectile/core/revision';
3
- import type { TextEditingState } from '@sectile/core/text';
4
- import { type TimeFieldEvent, type TimeFieldPolicies, type TimeFieldState, type TimeValue } from '@sectile/core/time-field';
5
- import { type FacadeConnection } from './internal/facade.js';
6
- import type { TerminalKeyboardInput } from './keyboard.js';
7
- export interface TimeFieldOptions {
8
- readonly policies?: TimeFieldPolicies;
9
- readonly value?: TimeValue | null;
10
- readonly defaultValue?: TimeValue | null;
11
- readonly inputState?: TextEditingState;
12
- readonly defaultInputState?: TextEditingState;
13
- readonly disabled?: boolean;
14
- readonly readOnly?: boolean;
15
- readonly required?: boolean;
16
- readonly onValueChange?: (value: TimeValue | null) => void;
17
- readonly onInputStateChange?: (value: TextEditingState, previousValue: TextEditingState) => void;
18
- readonly onUpdate?: () => void;
19
- }
20
- export interface TimeFieldControlledValues {
21
- readonly value?: TimeValue | null;
22
- readonly inputState?: TextEditingState;
23
- }
24
- export interface TimeFieldConnection {
25
- getSnapshot(): RevisionSnapshot<TimeFieldState>;
26
- getText(): string;
27
- getValue(): TimeValue | null;
28
- getCaret(): number;
29
- syncControlledValues(values: TimeFieldControlledValues): Result<RevisionSnapshot<TimeFieldState>>;
30
- handleEvent(event: TimeFieldEvent): boolean;
31
- handleKeyboardInput(input: TerminalKeyboardInput): boolean;
32
- handleTextInput(text: string): boolean;
33
- }
34
- export declare function createTimeField(options?: TimeFieldOptions): FacadeConnection<TimeFieldConnection>;
35
- export declare function tryCreateTimeField(options?: TimeFieldOptions): Result<FacadeConnection<TimeFieldConnection>>;
36
- //# sourceMappingURL=time-field.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"time-field.d.ts","sourceRoot":"","sources":["../src/time-field.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAiC,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAoE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC9L,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,gBAAgB;IAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAAE;AACrgB,MAAM,WAAW,yBAAyB;IAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAAE;AACzH,MAAM,WAAW,mBAAmB;IAAG,WAAW,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAAC,OAAO,IAAI,MAAM,CAAC;IAAC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC;IAAC,QAAQ,IAAI,MAAM,CAAC;IAAC,oBAAoB,CAAC,MAAM,EAAE,yBAAyB,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;IAAC,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC;IAAC,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAAE;AAClZ,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAgD;AACtJ,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAuD"}
@@ -1,40 +0,0 @@
1
- import { unwrap } from '@sectile/core/result';
2
- import { applyTimeFieldEvent, createTimeFieldState } from '@sectile/core/time-field';
3
- import { createFacadeConnection } from './internal/facade.js';
4
- import { createSemanticController } from './internal/semantic-controller.js';
5
- import { toTerminalTextInput } from './internal/text-input.js';
6
- import { toTextEvent } from './text.js';
7
- export function createTimeField(options = {}) { return unwrap(tryCreateTimeField(options)); }
8
- export function tryCreateTimeField(options = {}) { return createFacadeConnection(options, construct); }
9
- function construct(options) { const valueControlled = options.value !== undefined; const inputControlled = options.inputState !== undefined; const policies = Object.freeze({ ...options.policies, ...(options.required === undefined ? {} : { required: options.required }) }); const runtime = createSemanticController({ initial: createTimeFieldState(options.value !== undefined ? options.value : options.defaultValue ?? null, options.inputState !== undefined ? options.inputState : options.defaultInputState), reducer: (state, event) => applyTimeFieldEvent(state, event, policies), reconcile: (previous, proposed) => createTimeFieldState(valueControlled ? previous.value : proposed.value, inputControlled ? previous.inputState : proposed.inputState), notify: (previous, proposed) => { if (JSON.stringify(previous.inputState) !== JSON.stringify(proposed.inputState))
10
- options.onInputStateChange?.(proposed.inputState, previous.inputState); }, toEffect: (command) => command, interaction: options }); return runtime.ok ? { ok: true, value: new TerminalTimeField(options, runtime.value, valueControlled, inputControlled) } : runtime; }
11
- class TerminalTimeField {
12
- options;
13
- runtime;
14
- valueControlled;
15
- inputControlled;
16
- constructor(options, runtime, valueControlled, inputControlled) { this.options = options; this.runtime = runtime; this.valueControlled = valueControlled; this.inputControlled = inputControlled; }
17
- getSnapshot() { return this.runtime.getSnapshot(); }
18
- getText() { return this.getSnapshot().state.inputState.snapshot.text; }
19
- getValue() { return this.getSnapshot().state.value; }
20
- getCaret() { return this.getSnapshot().state.inputState.snapshot.selection.focusCodeUnitOffset; }
21
- syncControlledValues(values) { if (this.valueControlled !== (values.value !== undefined) || this.inputControlled !== (values.inputState !== undefined))
22
- return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled time field values must preserve their construction-time shape.' } }; const state = this.getSnapshot().state; const result = this.runtime.replace(createTimeFieldState(this.valueControlled ? values.value : state.value, this.inputControlled ? values.inputState : state.inputState)); if (result.ok)
23
- this.options.onUpdate?.(); return result; }
24
- handleEvent(event) { const result = this.runtime.handle(event); if (result.ok) {
25
- for (const command of result.commands)
26
- if (command.type === 'value-committed')
27
- this.options.onValueChange?.(command.value);
28
- this.options.onUpdate?.();
29
- } return result.ok; }
30
- handleKeyboardInput(input) { if (input.ctrlKey === true || input.altKey === true)
31
- return false; if (input.key === 'enter')
32
- return this.handleEvent('commit'); if (input.key === 'escape')
33
- return this.handleEvent('cancel'); if (input.key === 'up')
34
- return this.handleEvent('increment-segment'); if (input.key === 'down')
35
- return this.handleEvent('decrement-segment'); if (input.key === 'left' || input.key === 'right' || input.key === 'home' || input.key === 'end')
36
- return this.#move(input); const semantic = toTerminalTextInput(this.getSnapshot().state.inputState, input); const event = semantic === null ? null : toTextEvent(semantic); return event !== null && this.handleEvent({ type: 'text', event }); }
37
- handleTextInput(text) { return typeof text === 'string' && text.length > 0 && this.handleKeyboardInput({ key: text, text }); }
38
- #move(input) { const snapshot = this.getSnapshot().state.inputState.snapshot; const selection = snapshot.selection; const focus = input.key === 'home' ? 0 : input.key === 'end' ? snapshot.text.length : input.key === 'left' ? Math.max(0, selection.focusCodeUnitOffset - 1) : Math.min(snapshot.text.length, selection.focusCodeUnitOffset + 1); const next = { anchorCodeUnitOffset: input.shiftKey === true ? selection.anchorCodeUnitOffset : focus, focusCodeUnitOffset: focus }; const event = { type: 'replace', startCodeUnitOffset: focus, endCodeUnitOffset: focus, text: '', selection: next }; return this.handleEvent({ type: 'text', event }); }
39
- }
40
- //# sourceMappingURL=time-field.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"time-field.js","sourceRoot":"","sources":["../src/time-field.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { type FacadeConnection } from './internal/facade.js';
2
- import type { Result } from '@sectile/core';
3
- import { type ToggleButtonEvent, type ToggleButtonState } from '@sectile/core/toggle-button';
4
- import { type TerminalCheckedControl } from './internal/checked-control.js';
5
- export interface ToggleButtonOptions {
6
- readonly pressed?: boolean;
7
- readonly defaultPressed?: boolean;
8
- readonly disabled?: boolean;
9
- readonly onPressedChange?: (pressed: boolean) => void;
10
- readonly onUpdate?: () => void;
11
- }
12
- export type ToggleButtonConnection = TerminalCheckedControl<ToggleButtonState, ToggleButtonEvent, boolean>;
13
- export declare function createToggleButton(options?: ToggleButtonOptions): FacadeConnection<ToggleButtonConnection>;
14
- export declare function tryCreateToggleButton(options?: ToggleButtonOptions): Result<FacadeConnection<ToggleButtonConnection>>;
15
- //# sourceMappingURL=toggle-button.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle-button.d.ts","sourceRoot":"","sources":["../src/toggle-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAA6E,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAAC,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAChU,MAAM,WAAW,mBAAmB;IAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAC1N,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;AAC3G,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,CAE9G;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC,CAEzH"}
@@ -1,12 +0,0 @@
1
- import { createFacadeConnection } from './internal/facade.js';
2
- import { unwrap } from '@sectile/core/result';
3
- import { applyToggleButtonEvent, createToggleButtonState } from '@sectile/core/toggle-button';
4
- import { createTerminalCheckedControl } from './internal/checked-control.js';
5
- export function createToggleButton(options = {}) {
6
- return unwrap(tryCreateToggleButton(options));
7
- }
8
- export function tryCreateToggleButton(options = {}) {
9
- return createFacadeConnection(options, (options) => tryCreateToggleButtonConnection(options));
10
- }
11
- function tryCreateToggleButtonConnection(options = {}) { return createTerminalCheckedControl({ controlled: options.pressed !== undefined, initial: createToggleButtonState(options.pressed ?? options.defaultPressed ?? false), toggleEvent: 'toggle', reducer: applyToggleButtonEvent, create: createToggleButtonState, read: (state) => state.pressed, interaction: options, onChange: options.onPressedChange, onUpdate: options.onUpdate }); }
12
- //# sourceMappingURL=toggle-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle-button.js","sourceRoot":"","sources":["../src/toggle-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAA4E,MAAM,6BAA6B,CAAC;AAAC,OAAO,EAAE,4BAA4B,EAA+B,MAAM,+BAA+B,CAAC;AAGhU,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAwB,EAAE;IAClE,OAAO,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAO,GAAwB,EAAE;IACrE,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAO,GAAwB,EAAE,IAAoC,OAAO,4BAA4B,CAAqE,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,OAAO,EAAE,uBAAuB,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
package/dist/toolbar.d.ts DELETED
@@ -1,34 +0,0 @@
1
- import { type FacadeConnection } from './internal/facade.js';
2
- import type { Result, StableID } from '@sectile/core';
3
- import type { RevisionSnapshot } from '@sectile/core/revision';
4
- import { type ToolbarEvent, type ToolbarPolicies, type ToolbarState } from '@sectile/core/toolbar';
5
- import type { TerminalKeyboardInput } from './keyboard.js';
6
- export type ToolbarEffect<ID extends StableID = StableID> = {
7
- readonly type: 'move-control-highlight';
8
- readonly id: ID;
9
- } | {
10
- readonly type: 'invoke-control';
11
- readonly id: ID;
12
- };
13
- export interface ToolbarOptions<ID extends StableID = StableID> {
14
- readonly disabled?: boolean;
15
- readonly items: readonly ID[];
16
- readonly policies?: ToolbarPolicies<ID>;
17
- readonly disabledItems?: readonly ID[];
18
- readonly highlightedValue?: ID | null;
19
- readonly defaultHighlightedValue?: ID | null;
20
- readonly orientation?: 'horizontal' | 'vertical';
21
- readonly onHighlightedValueChange?: (value: ID | null) => void;
22
- readonly onInvoke?: (id: ID) => void;
23
- readonly onUpdate?: () => void;
24
- }
25
- export interface ToolbarConnection<ID extends StableID = StableID> {
26
- getSnapshot(): RevisionSnapshot<ToolbarState<ID>>;
27
- syncControlledValue(value: ID | null): Result<RevisionSnapshot<ToolbarState<ID>>>;
28
- handleEvent(event: ToolbarEvent<ID>): boolean;
29
- handleKeyboardInput(input: TerminalKeyboardInput): boolean;
30
- }
31
- export declare function createToolbar<ID extends StableID>(options: ToolbarOptions<ID>): FacadeConnection<ToolbarConnection<ID>>;
32
- export declare function tryCreateToolbar<ID extends StableID>(options: ToolbarOptions<ID>): Result<FacadeConnection<ToolbarConnection<ID>>>;
33
- export declare function toToolbarEvent<ID extends StableID = StableID>(input: TerminalKeyboardInput, orientation?: 'horizontal' | 'vertical'): ToolbarEvent<ID> | null;
34
- //# sourceMappingURL=toolbar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI3D,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,GAC5D;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ;IAC/D,WAAW,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,mBAAmB,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IAC9C,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;CAC5D;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAC/C,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAC1B,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAEzC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAClD,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAC1B,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAEjD;AAyCD,wBAAgB,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,EAC3D,KAAK,EAAE,qBAAqB,EAC5B,WAAW,GAAE,YAAY,GAAG,UAAyB,GACpD,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CASzB"}
package/dist/toolbar.js DELETED
@@ -1,108 +0,0 @@
1
- import { createFacadeConnection } from './internal/facade.js';
2
- import { unwrap } from '@sectile/core/result';
3
- import { createSequence } from '@sectile/core/sequence';
4
- import { applyToolbarEvent, createToolbarState, } from '@sectile/core/toolbar';
5
- import { createSemanticController } from './internal/semantic-controller.js';
6
- import { createDisabledItems } from './internal/disabled-items.js';
7
- export function createToolbar(options) {
8
- return unwrap(tryCreateToolbar(options));
9
- }
10
- export function tryCreateToolbar(options) {
11
- return createFacadeConnection(options, (options) => tryCreateToolbarConnection(options));
12
- }
13
- function tryCreateToolbarConnection(options) {
14
- const domain = createSequence(options.items);
15
- if (!domain.ok)
16
- return domain;
17
- const disabled = createDisabledItems(domain.value, options.disabledItems);
18
- if (!disabled.ok)
19
- return disabled;
20
- const suppliedEligibility = options.policies?.eligible;
21
- const policies = Object.freeze({
22
- ...options.policies,
23
- eligible: (id) => !disabled.value.has(id) && (suppliedEligibility?.(id) ?? true),
24
- });
25
- const controlled = options.highlightedValue !== undefined;
26
- const runtime = createSemanticController({
27
- interaction: options,
28
- initial: createToolbarState(domain.value, {
29
- current: options.highlightedValue !== undefined
30
- ? options.highlightedValue
31
- : options.defaultHighlightedValue ?? null,
32
- }),
33
- reducer: (state, event) => applyToolbarEvent(domain.value, state, event, policies),
34
- reconcile: (previous, proposed) => createToolbarState(domain.value, {
35
- current: controlled ? previous.cursor.current : proposed.cursor.current,
36
- }),
37
- notify: (previous, proposed) => {
38
- if (previous.cursor.current !== proposed.cursor.current) {
39
- options.onHighlightedValueChange?.(proposed.cursor.current);
40
- }
41
- },
42
- toEffect: (command) => command.type === 'focus'
43
- ? Object.freeze({ type: 'move-control-highlight', id: command.id })
44
- : Object.freeze({ type: 'invoke-control', id: command.id }),
45
- });
46
- if (!runtime.ok)
47
- return runtime;
48
- return { ok: true, value: new TerminalToolbarConnection(options, domain.value, runtime.value, controlled) };
49
- }
50
- export function toToolbarEvent(input, orientation = 'horizontal') {
51
- if (input.key === 'home')
52
- return 'first';
53
- if (input.key === 'end')
54
- return 'last';
55
- if (input.key === 'enter' || input.key === 'space')
56
- return 'invoke';
57
- if (orientation === 'horizontal' && input.key === 'right')
58
- return 'next';
59
- if (orientation === 'horizontal' && input.key === 'left')
60
- return 'previous';
61
- if (orientation === 'vertical' && input.key === 'down')
62
- return 'next';
63
- if (orientation === 'vertical' && input.key === 'up')
64
- return 'previous';
65
- return null;
66
- }
67
- class TerminalToolbarConnection {
68
- #options;
69
- #domain;
70
- #runtime;
71
- #controlled;
72
- constructor(options, domain, runtime, controlled) {
73
- this.#options = options;
74
- this.#domain = domain;
75
- this.#runtime = runtime;
76
- this.#controlled = controlled;
77
- }
78
- getSnapshot() { return this.#runtime.getSnapshot(); }
79
- syncControlledValue(value) {
80
- if (!this.#controlled)
81
- return { ok: false, error: {
82
- class: 'construction', code: 'uncontrolled-controller-sync',
83
- message: 'An uncontrolled toolbar cannot be synchronized externally.',
84
- } };
85
- const result = this.#runtime.replace(createToolbarState(this.#domain, { current: value }));
86
- if (result.ok)
87
- this.#options.onUpdate?.();
88
- return result;
89
- }
90
- handleEvent(event) {
91
- const result = this.#runtime.handle(event);
92
- if (result.ok)
93
- for (const effect of result.commands) {
94
- if (effect.type === 'invoke-control')
95
- this.#options.onInvoke?.(effect.id);
96
- }
97
- if (result.ok)
98
- this.#options.onUpdate?.();
99
- return result.ok;
100
- }
101
- handleKeyboardInput(input) {
102
- const event = toToolbarEvent(input, this.#options.orientation);
103
- if (event === null)
104
- return false;
105
- return this.handleEvent(event);
106
- }
107
- }
108
- //# sourceMappingURL=toolbar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../src/toolbar.ts"],"names":[],"mappings":"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"}
package/dist/tooltip.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import { type FacadeConnection } from './internal/facade.js';
2
- import type { Result } from '@sectile/core';
3
- import { type TooltipEvent, type TooltipState } from '@sectile/core/tooltip';
4
- import { type TerminalPopupConnection } from './internal/popup-control.js';
5
- export interface TooltipOptions {
6
- readonly open?: boolean;
7
- readonly defaultOpen?: boolean;
8
- readonly disabled?: boolean;
9
- readonly onOpenChange?: (open: boolean) => void;
10
- readonly onUpdate?: () => void;
11
- }
12
- export type TooltipConnection = TerminalPopupConnection<TooltipState, TooltipEvent>;
13
- export declare function createTooltip(o?: TooltipOptions): FacadeConnection<TooltipConnection>;
14
- export declare function tryCreateTooltip(o?: TooltipOptions): Result<FacadeConnection<TooltipConnection>>;
15
- //# sourceMappingURL=tooltip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../src/tooltip.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,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAChG,MAAM,WAAW,cAAc;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,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AACzM,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACpF,wBAAgB,aAAa,CAAC,CAAC,GAAE,cAAmB,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,CAEzF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,GAAE,cAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAEpG"}
package/dist/tooltip.js DELETED
@@ -1,12 +0,0 @@
1
- import { createFacadeConnection } from './internal/facade.js';
2
- import { unwrap } from '@sectile/core/result';
3
- import { applyTooltipEvent, createTooltipState } from '@sectile/core/tooltip';
4
- import { createTerminalPopup } from './internal/popup-control.js';
5
- export function createTooltip(o = {}) {
6
- return unwrap(tryCreateTooltip(o));
7
- }
8
- export function tryCreateTooltip(o = {}) {
9
- return createFacadeConnection(o, (o) => tryCreateTooltipConnection(o));
10
- }
11
- function tryCreateTooltipConnection(o = {}) { return createTerminalPopup({ controlled: o.open !== undefined, initial: createTooltipState(o.open ?? o.defaultOpen ?? false), reducer: applyTooltipEvent, create: createTooltipState, read: (s) => s.open, close: 'close', interaction: o, onOpenChange: o.onOpenChange, onUpdate: o.onUpdate }); }
12
- //# sourceMappingURL=tooltip.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../src/tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAA6D,MAAM,uBAAuB,CAAC;AACzI,OAAO,EAAE,mBAAmB,EAAgC,MAAM,6BAA6B,CAAC;AAGhG,MAAM,UAAU,aAAa,CAAC,CAAC,GAAmB,EAAE;IAClD,OAAO,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAC,GAAmB,EAAE;IACrD,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,0BAA0B,CAAC,CAAC,GAAmB,EAAE,IAA+B,OAAO,mBAAmB,CAA6C,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,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,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}