@sectile/terminal 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +16 -0
- package/dist/accordion.d.ts +31 -0
- package/dist/accordion.d.ts.map +1 -0
- package/dist/accordion.js +76 -0
- package/dist/accordion.js.map +1 -0
- package/dist/alert-dialog.d.ts +18 -0
- package/dist/alert-dialog.d.ts.map +1 -0
- package/dist/alert-dialog.js +12 -0
- package/dist/alert-dialog.js.map +1 -0
- package/dist/calendar.d.ts +75 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +217 -0
- package/dist/calendar.js.map +1 -0
- package/dist/carousel.d.ts +44 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +129 -0
- package/dist/carousel.js.map +1 -0
- package/dist/checkbox-group.d.ts +19 -0
- package/dist/checkbox-group.d.ts.map +1 -0
- package/dist/checkbox-group.js +14 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/checkbox.d.ts +17 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +12 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/combobox.d.ts +100 -0
- package/dist/combobox.d.ts.map +1 -0
- package/dist/combobox.js +286 -0
- package/dist/combobox.js.map +1 -0
- package/dist/date-field.d.ts +36 -0
- package/dist/date-field.d.ts.map +1 -0
- package/dist/date-field.js +46 -0
- package/dist/date-field.js.map +1 -0
- package/dist/date-picker.d.ts +38 -0
- package/dist/date-picker.d.ts.map +1 -0
- package/dist/date-picker.js +40 -0
- package/dist/date-picker.js.map +1 -0
- package/dist/date-range-picker.d.ts +38 -0
- package/dist/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker.js +29 -0
- package/dist/date-range-picker.js.map +1 -0
- package/dist/date-time-field.d.ts +36 -0
- package/dist/date-time-field.d.ts.map +1 -0
- package/dist/date-time-field.js +133 -0
- package/dist/date-time-field.js.map +1 -0
- package/dist/date-time-picker.d.ts +38 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +127 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +38 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +136 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +17 -0
- package/dist/dialog.d.ts.map +1 -0
- package/dist/dialog.js +12 -0
- package/dist/dialog.js.map +1 -0
- package/dist/disclosure.d.ts +22 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +56 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/feed.d.ts +28 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +32 -0
- package/dist/feed.js.map +1 -0
- package/dist/grid.d.ts +40 -0
- package/dist/grid.d.ts.map +1 -0
- package/dist/grid.js +68 -0
- package/dist/grid.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/checked-control.d.ts +23 -0
- package/dist/internal/checked-control.d.ts.map +1 -0
- package/dist/internal/checked-control.js +22 -0
- package/dist/internal/checked-control.js.map +1 -0
- package/dist/internal/controller.d.ts +6 -0
- package/dist/internal/controller.d.ts.map +1 -0
- package/dist/internal/controller.js +35 -0
- package/dist/internal/controller.js.map +1 -0
- package/dist/internal/disabled-items.d.ts +6 -0
- package/dist/internal/disabled-items.d.ts.map +1 -0
- package/dist/internal/disabled-items.js +15 -0
- package/dist/internal/disabled-items.js.map +1 -0
- package/dist/internal/facade.d.ts +44 -0
- package/dist/internal/facade.d.ts.map +1 -0
- package/dist/internal/facade.js +58 -0
- package/dist/internal/facade.js.map +1 -0
- package/dist/internal/menu-control.d.ts +34 -0
- package/dist/internal/menu-control.d.ts.map +1 -0
- package/dist/internal/menu-control.js +48 -0
- package/dist/internal/menu-control.js.map +1 -0
- package/dist/internal/popup-control.d.ts +24 -0
- package/dist/internal/popup-control.d.ts.map +1 -0
- package/dist/internal/popup-control.js +23 -0
- package/dist/internal/popup-control.js.map +1 -0
- package/dist/internal/semantic-controller.d.ts +20 -0
- package/dist/internal/semantic-controller.d.ts.map +1 -0
- package/dist/internal/semantic-controller.js +42 -0
- package/dist/internal/semantic-controller.js.map +1 -0
- package/dist/internal/text-input.d.ts +5 -0
- package/dist/internal/text-input.d.ts.map +1 -0
- package/dist/internal/text-input.js +53 -0
- package/dist/internal/text-input.js.map +1 -0
- package/dist/keyboard.d.ts +10 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +16 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/layout.d.ts +2 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +24 -0
- package/dist/layout.js.map +1 -0
- package/dist/listbox.d.ts +87 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +323 -0
- package/dist/listbox.js.map +1 -0
- package/dist/menu-button.d.ts +8 -0
- package/dist/menu-button.d.ts.map +1 -0
- package/dist/menu-button.js +11 -0
- package/dist/menu-button.js.map +1 -0
- package/dist/menu.d.ts +8 -0
- package/dist/menu.d.ts.map +1 -0
- package/dist/menu.js +11 -0
- package/dist/menu.js.map +1 -0
- package/dist/menubar.d.ts +8 -0
- package/dist/menubar.d.ts.map +1 -0
- package/dist/menubar.js +11 -0
- package/dist/menubar.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +32 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -0
- package/dist/multi-thumb-slider.js +67 -0
- package/dist/multi-thumb-slider.js.map +1 -0
- package/dist/node.d.ts +15 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +78 -0
- package/dist/node.js.map +1 -0
- package/dist/number-field.d.ts +44 -0
- package/dist/number-field.d.ts.map +1 -0
- package/dist/number-field.js +157 -0
- package/dist/number-field.js.map +1 -0
- package/dist/pagination.d.ts +35 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +103 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pin-input.d.ts +25 -0
- package/dist/pin-input.d.ts.map +1 -0
- package/dist/pin-input.js +30 -0
- package/dist/pin-input.js.map +1 -0
- package/dist/quantity-field.d.ts +45 -0
- package/dist/quantity-field.d.ts.map +1 -0
- package/dist/quantity-field.js +168 -0
- package/dist/quantity-field.js.map +1 -0
- package/dist/radio-group.d.ts +37 -0
- package/dist/radio-group.d.ts.map +1 -0
- package/dist/radio-group.js +126 -0
- package/dist/radio-group.js.map +1 -0
- package/dist/rating.d.ts +22 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +38 -0
- package/dist/rating.js.map +1 -0
- package/dist/select.d.ts +41 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +50 -0
- package/dist/select.js.map +1 -0
- package/dist/slider.d.ts +59 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +156 -0
- package/dist/slider.js.map +1 -0
- package/dist/spin-button.d.ts +35 -0
- package/dist/spin-button.d.ts.map +1 -0
- package/dist/spin-button.js +78 -0
- package/dist/spin-button.js.map +1 -0
- package/dist/stepper.d.ts +19 -0
- package/dist/stepper.d.ts.map +1 -0
- package/dist/stepper.js +14 -0
- package/dist/stepper.js.map +1 -0
- package/dist/switch.d.ts +15 -0
- package/dist/switch.d.ts.map +1 -0
- package/dist/switch.js +12 -0
- package/dist/switch.js.map +1 -0
- package/dist/tabs.d.ts +42 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +128 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags-input.d.ts +29 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +27 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +60 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +143 -0
- package/dist/text.js.map +1 -0
- package/dist/time-field.d.ts +36 -0
- package/dist/time-field.d.ts.map +1 -0
- package/dist/time-field.js +40 -0
- package/dist/time-field.js.map +1 -0
- package/dist/toggle-button.d.ts +15 -0
- package/dist/toggle-button.d.ts.map +1 -0
- package/dist/toggle-button.js +12 -0
- package/dist/toggle-button.js.map +1 -0
- package/dist/toolbar.d.ts +34 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +108 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +15 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +12 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tree-grid.d.ts +94 -0
- package/dist/tree-grid.d.ts.map +1 -0
- package/dist/tree-grid.js +308 -0
- package/dist/tree-grid.js.map +1 -0
- package/dist/tree-view.d.ts +75 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +213 -0
- package/dist/tree-view.js.map +1 -0
- package/dist/window-splitter.d.ts +19 -0
- package/dist/window-splitter.d.ts.map +1 -0
- package/dist/window-splitter.js +48 -0
- package/dist/window-splitter.js.map +1 -0
- package/package.json +273 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type TreeGridCommand, type TreeGridEditMode, type TreeGridEvent, type TreeGridModel, type TreeGridPolicies, type TreeGridRowInput, type TreeGridState } from '@sectile/core/tree-grid';
|
|
5
|
+
import { type TerminalKeyboardInput } from './keyboard.js';
|
|
6
|
+
export type KeyboardInput = TerminalKeyboardInput;
|
|
7
|
+
export type TreeGridEffect<CellID extends StableID = StableID> = {
|
|
8
|
+
readonly type: 'move-highlight';
|
|
9
|
+
readonly id: CellID;
|
|
10
|
+
} | {
|
|
11
|
+
readonly type: 'begin-cell-edit';
|
|
12
|
+
readonly id: CellID;
|
|
13
|
+
} | {
|
|
14
|
+
readonly type: 'commit-cell-edit';
|
|
15
|
+
readonly id: CellID;
|
|
16
|
+
} | {
|
|
17
|
+
readonly type: 'cancel-cell-edit';
|
|
18
|
+
readonly id: CellID;
|
|
19
|
+
};
|
|
20
|
+
export interface TreeGridValueChangeDetails<CellID extends StableID = StableID> {
|
|
21
|
+
readonly value: CellID | null;
|
|
22
|
+
readonly previousValue: CellID | null;
|
|
23
|
+
}
|
|
24
|
+
export interface TreeGridExpandedChangeDetails<RowID extends StableID = StableID> {
|
|
25
|
+
readonly value: readonly RowID[];
|
|
26
|
+
readonly previousValue: readonly RowID[];
|
|
27
|
+
}
|
|
28
|
+
export interface TreeGridHighlightChangeDetails<CellID extends StableID = StableID> {
|
|
29
|
+
readonly value: CellID | null;
|
|
30
|
+
readonly previousValue: CellID | null;
|
|
31
|
+
}
|
|
32
|
+
export interface TreeGridEditModeChangeDetails {
|
|
33
|
+
readonly value: TreeGridEditMode;
|
|
34
|
+
readonly previousValue: TreeGridEditMode;
|
|
35
|
+
}
|
|
36
|
+
export interface TreeGridControllerOptions<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
37
|
+
readonly model: TreeGridModel<RowID, CellID>;
|
|
38
|
+
readonly disabled?: boolean;
|
|
39
|
+
readonly readOnly?: boolean;
|
|
40
|
+
readonly policies?: TreeGridPolicies<CellID>;
|
|
41
|
+
readonly value?: CellID | null;
|
|
42
|
+
readonly defaultValue?: CellID | null;
|
|
43
|
+
readonly expandedValue?: readonly RowID[];
|
|
44
|
+
readonly defaultExpandedValue?: readonly RowID[];
|
|
45
|
+
readonly highlightedValue?: CellID | null;
|
|
46
|
+
readonly defaultHighlightedValue?: CellID | null;
|
|
47
|
+
readonly editMode?: TreeGridEditMode;
|
|
48
|
+
readonly defaultEditMode?: TreeGridEditMode;
|
|
49
|
+
readonly onValueChange?: (change: TreeGridValueChangeDetails<CellID>) => void;
|
|
50
|
+
readonly onExpandedValueChange?: (change: TreeGridExpandedChangeDetails<RowID>) => void;
|
|
51
|
+
readonly onHighlightedValueChange?: (change: TreeGridHighlightChangeDetails<CellID>) => void;
|
|
52
|
+
readonly onEditModeChange?: (change: TreeGridEditModeChangeDetails) => void;
|
|
53
|
+
}
|
|
54
|
+
export interface TreeGridControlledValues<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
55
|
+
readonly value?: CellID | null;
|
|
56
|
+
readonly expandedValue?: readonly RowID[];
|
|
57
|
+
readonly highlightedValue?: CellID | null;
|
|
58
|
+
readonly editMode?: TreeGridEditMode;
|
|
59
|
+
}
|
|
60
|
+
export interface TreeGridController<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
61
|
+
readonly model: TreeGridModel<RowID, CellID>;
|
|
62
|
+
getSnapshot(): RevisionSnapshot<TreeGridState<RowID, CellID>>;
|
|
63
|
+
syncControlledValues(values: TreeGridControlledValues<RowID, CellID>): Result<RevisionSnapshot<TreeGridState<RowID, CellID>>>;
|
|
64
|
+
handleKeyboardInput(input: KeyboardInput, expectedRevision?: number): RevisionResult<TreeGridState<RowID, CellID>, TreeGridEffect<CellID>>;
|
|
65
|
+
}
|
|
66
|
+
export interface TreeGridTransitionDetails<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
67
|
+
readonly event: TreeGridEvent<RowID, CellID>;
|
|
68
|
+
readonly result: RevisionResult<TreeGridState<RowID, CellID>, TreeGridEffect<CellID>>;
|
|
69
|
+
}
|
|
70
|
+
export interface TreeGridConnectionOptions<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
71
|
+
readonly controller: TreeGridController<RowID, CellID>;
|
|
72
|
+
readonly disabled?: boolean;
|
|
73
|
+
readonly readOnly?: boolean;
|
|
74
|
+
readonly getCellValue: (id: CellID) => string;
|
|
75
|
+
readonly setCellValue: (id: CellID, value: string) => void;
|
|
76
|
+
readonly onTransition?: (details: TreeGridTransitionDetails<RowID, CellID>) => void;
|
|
77
|
+
readonly onUpdate?: () => void;
|
|
78
|
+
}
|
|
79
|
+
export interface TreeGridConnection<RowID extends StableID = StableID, CellID extends StableID = StableID> {
|
|
80
|
+
readonly model: TreeGridModel<RowID, CellID>;
|
|
81
|
+
getSnapshot(): RevisionSnapshot<TreeGridState<RowID, CellID>>;
|
|
82
|
+
syncControlledValues(values: TreeGridControlledValues<RowID, CellID>): Result<RevisionSnapshot<TreeGridState<RowID, CellID>>>;
|
|
83
|
+
handleKeyboardInput(input: KeyboardInput): boolean;
|
|
84
|
+
}
|
|
85
|
+
export type TreeGridOptions<RowID extends StableID = StableID, CellID extends StableID = StableID> = Omit<TreeGridControllerOptions<RowID, CellID>, 'model'> & Omit<TreeGridConnectionOptions<RowID, CellID>, 'controller'> & {
|
|
86
|
+
readonly rows: readonly TreeGridRowInput<RowID, CellID>[];
|
|
87
|
+
};
|
|
88
|
+
export declare function createTreeGridController<RowID extends StableID, CellID extends StableID>(options: TreeGridControllerOptions<RowID, CellID>): Result<TreeGridController<RowID, CellID>>;
|
|
89
|
+
export declare function createTreeGrid<RowID extends StableID, CellID extends StableID>(options: TreeGridOptions<RowID, CellID>): FacadeConnection<TreeGridConnection<RowID, CellID>>;
|
|
90
|
+
export declare function tryCreateTreeGrid<RowID extends StableID, CellID extends StableID>(options: TreeGridOptions<RowID, CellID>): Result<FacadeConnection<TreeGridConnection<RowID, CellID>>>;
|
|
91
|
+
export declare function connectTreeGrid<RowID extends StableID, CellID extends StableID>(options: TreeGridConnectionOptions<RowID, CellID>): TreeGridConnection<RowID, CellID>;
|
|
92
|
+
export declare function toTreeGridEvent<RowID extends StableID = StableID, CellID extends StableID = StableID>(input: KeyboardInput, editMode?: TreeGridEditMode): TreeGridEvent<RowID, CellID> | null;
|
|
93
|
+
export declare function toTreeGridEffect<CellID extends StableID>(command: TreeGridCommand<CellID>): TreeGridEffect<CellID>;
|
|
94
|
+
//# sourceMappingURL=tree-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-grid.d.ts","sourceRoot":"","sources":["../src/tree-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,308 @@
|
|
|
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 { applyTreeGridEvent, createTreeGridModelFromRows, createTreeGridState, } from '@sectile/core/tree-grid';
|
|
6
|
+
import { applyControllerEvent, synchronizeControllerState } from './internal/controller.js';
|
|
7
|
+
import { applyTerminalTextInput, } from './keyboard.js';
|
|
8
|
+
export function createTreeGridController(options) {
|
|
9
|
+
const value = options.value !== undefined ? options.value : options.defaultValue ?? null;
|
|
10
|
+
const initial = createTreeGridState(options.model, {
|
|
11
|
+
selected: value === null ? [] : [value],
|
|
12
|
+
anchor: value,
|
|
13
|
+
expanded: options.expandedValue ?? options.defaultExpandedValue ?? [],
|
|
14
|
+
current: options.highlightedValue !== undefined
|
|
15
|
+
? options.highlightedValue
|
|
16
|
+
: options.defaultHighlightedValue ?? null,
|
|
17
|
+
editMode: options.editMode ?? options.defaultEditMode ?? 'navigation',
|
|
18
|
+
});
|
|
19
|
+
if (!initial.ok)
|
|
20
|
+
return initial;
|
|
21
|
+
const snapshot = createRevisionSnapshot(initial.value);
|
|
22
|
+
if (!snapshot.ok)
|
|
23
|
+
return snapshot;
|
|
24
|
+
const interaction = createInteractionState(options);
|
|
25
|
+
if (!interaction.ok)
|
|
26
|
+
return interaction;
|
|
27
|
+
return { ok: true, value: new TerminalTreeGridController(options, snapshot.value, interaction.value) };
|
|
28
|
+
}
|
|
29
|
+
export function createTreeGrid(options) {
|
|
30
|
+
return unwrap(tryCreateTreeGrid(options));
|
|
31
|
+
}
|
|
32
|
+
export function tryCreateTreeGrid(options) {
|
|
33
|
+
return createFacadeConnection(options, (options) => tryCreateTreeGridConnection(options));
|
|
34
|
+
}
|
|
35
|
+
function tryCreateTreeGridConnection(options) {
|
|
36
|
+
const model = createTreeGridModelFromRows(options.rows);
|
|
37
|
+
if (!model.ok)
|
|
38
|
+
return model;
|
|
39
|
+
const controller = createTreeGridController({ ...options, model: model.value });
|
|
40
|
+
if (!controller.ok)
|
|
41
|
+
return controller;
|
|
42
|
+
return { ok: true, value: connectTreeGrid({ ...options, controller: controller.value }) };
|
|
43
|
+
}
|
|
44
|
+
export function connectTreeGrid(options) {
|
|
45
|
+
return new TerminalTreeGridConnection(options);
|
|
46
|
+
}
|
|
47
|
+
export function toTreeGridEvent(input, editMode = 'navigation') {
|
|
48
|
+
if (input.ctrlKey === true)
|
|
49
|
+
return null;
|
|
50
|
+
if (editMode === 'editing') {
|
|
51
|
+
if (input.key === 'enter')
|
|
52
|
+
return 'commit-edit';
|
|
53
|
+
if (input.key === 'escape')
|
|
54
|
+
return 'cancel-edit';
|
|
55
|
+
if (input.key === 'edit')
|
|
56
|
+
return 'start-edit';
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
if (input.altKey === true && input.key === 'right')
|
|
60
|
+
return 'expand';
|
|
61
|
+
if (input.altKey === true && input.key === 'left')
|
|
62
|
+
return 'collapse';
|
|
63
|
+
if (input.key === 'left')
|
|
64
|
+
return 'left';
|
|
65
|
+
if (input.key === 'right')
|
|
66
|
+
return 'right';
|
|
67
|
+
if (input.key === 'up')
|
|
68
|
+
return 'up';
|
|
69
|
+
if (input.key === 'down')
|
|
70
|
+
return 'down';
|
|
71
|
+
if (input.key === 'expand')
|
|
72
|
+
return 'expand';
|
|
73
|
+
if (input.key === 'collapse')
|
|
74
|
+
return 'collapse';
|
|
75
|
+
if (input.key === 'o')
|
|
76
|
+
return 'expand';
|
|
77
|
+
if (input.key === 'c')
|
|
78
|
+
return 'collapse';
|
|
79
|
+
if (input.key === 'space')
|
|
80
|
+
return 'select';
|
|
81
|
+
if (input.key === 'enter' || input.key === 'edit')
|
|
82
|
+
return 'start-edit';
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
class TerminalTreeGridConnection {
|
|
86
|
+
model;
|
|
87
|
+
#controller;
|
|
88
|
+
#getCellValue;
|
|
89
|
+
#setCellValue;
|
|
90
|
+
#onTransition;
|
|
91
|
+
#onUpdate;
|
|
92
|
+
#disabled;
|
|
93
|
+
#readOnly;
|
|
94
|
+
#editBaseline = null;
|
|
95
|
+
constructor(options) {
|
|
96
|
+
this.#controller = options.controller;
|
|
97
|
+
this.model = options.controller.model;
|
|
98
|
+
this.#getCellValue = options.getCellValue;
|
|
99
|
+
this.#setCellValue = options.setCellValue;
|
|
100
|
+
this.#onTransition = options.onTransition;
|
|
101
|
+
this.#onUpdate = options.onUpdate;
|
|
102
|
+
this.#disabled = options.disabled === true;
|
|
103
|
+
this.#readOnly = options.readOnly === true;
|
|
104
|
+
}
|
|
105
|
+
getSnapshot() {
|
|
106
|
+
return this.#controller.getSnapshot();
|
|
107
|
+
}
|
|
108
|
+
syncControlledValues(values) {
|
|
109
|
+
const result = this.#controller.syncControlledValues(values);
|
|
110
|
+
if (result.ok)
|
|
111
|
+
this.#onUpdate?.();
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
handleKeyboardInput(input) {
|
|
115
|
+
const snapshot = this.#controller.getSnapshot();
|
|
116
|
+
if (snapshot.state.editMode === 'editing' && snapshot.state.cursor.current !== null) {
|
|
117
|
+
if (this.#disabled || this.#readOnly)
|
|
118
|
+
return false;
|
|
119
|
+
const id = snapshot.state.cursor.current;
|
|
120
|
+
const nextValue = applyTerminalTextInput(this.#getCellValue(id), input);
|
|
121
|
+
if (nextValue !== null) {
|
|
122
|
+
this.#setCellValue(id, nextValue);
|
|
123
|
+
this.#onUpdate?.();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const event = toTreeGridEvent(input, snapshot.state.editMode);
|
|
128
|
+
if (event === null)
|
|
129
|
+
return false;
|
|
130
|
+
const result = this.#controller.handleKeyboardInput(input);
|
|
131
|
+
if (result.ok)
|
|
132
|
+
this.#applyEffects(result.commands);
|
|
133
|
+
this.#onTransition?.(Object.freeze({ event, result }));
|
|
134
|
+
if (result.ok)
|
|
135
|
+
this.#onUpdate?.();
|
|
136
|
+
return result.ok;
|
|
137
|
+
}
|
|
138
|
+
#applyEffects(effects) {
|
|
139
|
+
for (const effect of effects) {
|
|
140
|
+
if (effect.type === 'begin-cell-edit') {
|
|
141
|
+
this.#editBaseline = Object.freeze({
|
|
142
|
+
id: effect.id,
|
|
143
|
+
value: this.#getCellValue(effect.id),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
else if (effect.type === 'cancel-cell-edit') {
|
|
147
|
+
if (this.#editBaseline?.id === effect.id) {
|
|
148
|
+
this.#setCellValue(effect.id, this.#editBaseline.value);
|
|
149
|
+
}
|
|
150
|
+
this.#editBaseline = null;
|
|
151
|
+
}
|
|
152
|
+
else if (effect.type === 'commit-cell-edit') {
|
|
153
|
+
this.#editBaseline = null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export function toTreeGridEffect(command) {
|
|
159
|
+
if (command.type === 'focus') {
|
|
160
|
+
return Object.freeze({ type: 'move-highlight', id: command.id });
|
|
161
|
+
}
|
|
162
|
+
if (command.type === 'begin-edit') {
|
|
163
|
+
return Object.freeze({ type: 'begin-cell-edit', id: command.id });
|
|
164
|
+
}
|
|
165
|
+
if (command.type === 'commit-edit') {
|
|
166
|
+
return Object.freeze({ type: 'commit-cell-edit', id: command.id });
|
|
167
|
+
}
|
|
168
|
+
return Object.freeze({ type: 'cancel-cell-edit', id: command.id });
|
|
169
|
+
}
|
|
170
|
+
class TerminalTreeGridController {
|
|
171
|
+
model;
|
|
172
|
+
#policies;
|
|
173
|
+
#valueControlled;
|
|
174
|
+
#expandedControlled;
|
|
175
|
+
#highlightControlled;
|
|
176
|
+
#editModeControlled;
|
|
177
|
+
#onValueChange;
|
|
178
|
+
#onExpandedValueChange;
|
|
179
|
+
#onHighlightedValueChange;
|
|
180
|
+
#onEditModeChange;
|
|
181
|
+
#interaction;
|
|
182
|
+
#snapshot;
|
|
183
|
+
constructor(options, snapshot, interaction) {
|
|
184
|
+
this.model = options.model;
|
|
185
|
+
this.#policies = options.policies ?? {};
|
|
186
|
+
this.#valueControlled = options.value !== undefined;
|
|
187
|
+
this.#expandedControlled = options.expandedValue !== undefined;
|
|
188
|
+
this.#highlightControlled = options.highlightedValue !== undefined;
|
|
189
|
+
this.#editModeControlled = options.editMode !== undefined;
|
|
190
|
+
this.#onValueChange = options.onValueChange;
|
|
191
|
+
this.#onExpandedValueChange = options.onExpandedValueChange;
|
|
192
|
+
this.#onHighlightedValueChange = options.onHighlightedValueChange;
|
|
193
|
+
this.#onEditModeChange = options.onEditModeChange;
|
|
194
|
+
this.#interaction = interaction;
|
|
195
|
+
this.#snapshot = snapshot;
|
|
196
|
+
}
|
|
197
|
+
getSnapshot() {
|
|
198
|
+
return this.#snapshot;
|
|
199
|
+
}
|
|
200
|
+
syncControlledValues(values) {
|
|
201
|
+
const error = controlledInputError(this.#valueControlled, this.#expandedControlled, this.#highlightControlled, this.#editModeControlled, values);
|
|
202
|
+
if (error !== null)
|
|
203
|
+
return { ok: false, error };
|
|
204
|
+
const selected = this.#valueControlled
|
|
205
|
+
? values.value
|
|
206
|
+
: selectedValue(this.#snapshot.state);
|
|
207
|
+
const state = createTreeGridState(this.model, {
|
|
208
|
+
selected: selected === null ? [] : [selected],
|
|
209
|
+
anchor: this.#valueControlled ? selected : this.#snapshot.state.selection.anchor,
|
|
210
|
+
expanded: this.#expandedControlled
|
|
211
|
+
? values.expandedValue
|
|
212
|
+
: this.#snapshot.state.expansion.ids,
|
|
213
|
+
current: this.#highlightControlled
|
|
214
|
+
? values.highlightedValue
|
|
215
|
+
: this.#snapshot.state.cursor.current,
|
|
216
|
+
editMode: this.#editModeControlled
|
|
217
|
+
? values.editMode
|
|
218
|
+
: this.#snapshot.state.editMode,
|
|
219
|
+
});
|
|
220
|
+
const snapshot = synchronizeControllerState(this.#snapshot, state);
|
|
221
|
+
if (!snapshot.ok)
|
|
222
|
+
return snapshot;
|
|
223
|
+
this.#snapshot = snapshot.value;
|
|
224
|
+
return snapshot;
|
|
225
|
+
}
|
|
226
|
+
handleKeyboardInput(input, expectedRevision = this.#snapshot.revision) {
|
|
227
|
+
const event = toTreeGridEvent(input, this.#snapshot.state.editMode);
|
|
228
|
+
if (event === null) {
|
|
229
|
+
return rejectRevisionInput(this.#snapshot, {
|
|
230
|
+
class: 'transition-rejection',
|
|
231
|
+
code: 'unsupported-terminal-key',
|
|
232
|
+
message: 'Terminal keyboard input does not map to a tree-grid semantic event.',
|
|
233
|
+
details: { key: input.key },
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
const permitted = requireInteraction(this.#interaction, treeGridIntent(event));
|
|
237
|
+
if (!permitted.ok)
|
|
238
|
+
return rejectRevisionInput(this.#snapshot, permitted.error);
|
|
239
|
+
const result = applyControllerEvent(this.#snapshot, expectedRevision, event, (state, semanticEvent) => applyTreeGridEvent(this.model, state, semanticEvent, this.#policies), (previous, proposed) => controlledState(this.model, previous, proposed, this.#valueControlled, this.#expandedControlled, this.#highlightControlled, this.#editModeControlled), (previous, proposed) => this.#notify(previous, proposed), toTreeGridEffect);
|
|
240
|
+
if (result.ok)
|
|
241
|
+
this.#snapshot = result.snapshot;
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
#notify(previous, proposed) {
|
|
245
|
+
const previousValue = selectedValue(previous);
|
|
246
|
+
const value = selectedValue(proposed);
|
|
247
|
+
if (previousValue !== value) {
|
|
248
|
+
this.#onValueChange?.(Object.freeze({ value, previousValue }));
|
|
249
|
+
}
|
|
250
|
+
if (!sameIDs(previous.expansion.ids, proposed.expansion.ids)) {
|
|
251
|
+
this.#onExpandedValueChange?.(Object.freeze({
|
|
252
|
+
value: proposed.expansion.ids,
|
|
253
|
+
previousValue: previous.expansion.ids,
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
if (previous.cursor.current !== proposed.cursor.current) {
|
|
257
|
+
this.#onHighlightedValueChange?.(Object.freeze({
|
|
258
|
+
value: proposed.cursor.current,
|
|
259
|
+
previousValue: previous.cursor.current,
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
if (previous.editMode !== proposed.editMode) {
|
|
263
|
+
this.#onEditModeChange?.(Object.freeze({
|
|
264
|
+
value: proposed.editMode,
|
|
265
|
+
previousValue: previous.editMode,
|
|
266
|
+
}));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function treeGridIntent(event) {
|
|
271
|
+
const type = typeof event === 'object' ? event.type : event;
|
|
272
|
+
return type === 'start-edit' || type === 'commit-edit' || type === 'cancel-edit'
|
|
273
|
+
? 'mutate'
|
|
274
|
+
: 'navigate';
|
|
275
|
+
}
|
|
276
|
+
function controlledState(model, previous, proposed, valueControlled, expandedControlled, highlightControlled, editModeControlled) {
|
|
277
|
+
return createTreeGridState(model, {
|
|
278
|
+
selected: valueControlled ? previous.selection.selected : proposed.selection.selected,
|
|
279
|
+
anchor: valueControlled ? previous.selection.anchor : proposed.selection.anchor,
|
|
280
|
+
expanded: expandedControlled ? previous.expansion.ids : proposed.expansion.ids,
|
|
281
|
+
current: highlightControlled ? previous.cursor.current : proposed.cursor.current,
|
|
282
|
+
editMode: editModeControlled ? previous.editMode : proposed.editMode,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
function selectedValue(state) {
|
|
286
|
+
return state.selection.selected[0] ?? null;
|
|
287
|
+
}
|
|
288
|
+
function controlledInputError(valueControlled, expandedControlled, highlightControlled, editModeControlled, values) {
|
|
289
|
+
return fieldError(valueControlled, values.value !== undefined, 'value', 'tree-grid selection')
|
|
290
|
+
?? fieldError(expandedControlled, values.expandedValue !== undefined, 'expanded-value', 'tree-grid expansion')
|
|
291
|
+
?? fieldError(highlightControlled, values.highlightedValue !== undefined, 'highlighted-value', 'tree-grid highlight')
|
|
292
|
+
?? fieldError(editModeControlled, values.editMode !== undefined, 'edit-mode', 'tree-grid edit mode');
|
|
293
|
+
}
|
|
294
|
+
function fieldError(controlled, provided, codeName, label) {
|
|
295
|
+
if (controlled === provided)
|
|
296
|
+
return null;
|
|
297
|
+
return {
|
|
298
|
+
class: 'construction',
|
|
299
|
+
code: controlled ? `controlled-${codeName}-required` : `uncontrolled-${codeName}-update`,
|
|
300
|
+
message: controlled
|
|
301
|
+
? `Controlled ${label} sync requires its external value.`
|
|
302
|
+
: `Uncontrolled ${label} cannot be synchronized externally.`,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function sameIDs(left, right) {
|
|
306
|
+
return left.length === right.length && left.every((id, index) => id === right[index]);
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=tree-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-grid.js","sourceRoot":"","sources":["../src/tree-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type Tree, type TreeNodeInput } from '@sectile/core/tree';
|
|
5
|
+
import { type TreeViewCommand, type TreeViewEvent, type TreeViewPolicies, type TreeViewState } from '@sectile/core/tree-view';
|
|
6
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
7
|
+
export type KeyboardInput = TerminalKeyboardInput;
|
|
8
|
+
export interface TreeViewEffect<ID extends StableID = StableID> {
|
|
9
|
+
readonly type: 'move-highlight';
|
|
10
|
+
readonly id: ID;
|
|
11
|
+
}
|
|
12
|
+
export interface TreeViewValueChangeDetails<ID extends StableID = StableID> {
|
|
13
|
+
readonly value: readonly ID[];
|
|
14
|
+
readonly previousValue: readonly ID[];
|
|
15
|
+
}
|
|
16
|
+
export interface TreeViewExpandedChangeDetails<ID extends StableID = StableID> {
|
|
17
|
+
readonly value: readonly ID[];
|
|
18
|
+
readonly previousValue: readonly ID[];
|
|
19
|
+
}
|
|
20
|
+
export interface TreeViewHighlightChangeDetails<ID extends StableID = StableID> {
|
|
21
|
+
readonly value: ID | null;
|
|
22
|
+
readonly previousValue: ID | null;
|
|
23
|
+
}
|
|
24
|
+
export interface TreeViewControllerOptions<ID extends StableID = StableID> {
|
|
25
|
+
readonly tree: Tree<ID>;
|
|
26
|
+
readonly disabled?: boolean;
|
|
27
|
+
readonly value?: readonly ID[];
|
|
28
|
+
readonly defaultValue?: readonly ID[];
|
|
29
|
+
readonly expandedValue?: readonly ID[];
|
|
30
|
+
readonly defaultExpandedValue?: readonly ID[];
|
|
31
|
+
readonly highlightedValue?: ID | null;
|
|
32
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
33
|
+
readonly policies?: TreeViewPolicies<ID>;
|
|
34
|
+
readonly onValueChange?: (change: TreeViewValueChangeDetails<ID>) => void;
|
|
35
|
+
readonly onExpandedValueChange?: (change: TreeViewExpandedChangeDetails<ID>) => void;
|
|
36
|
+
readonly onHighlightedValueChange?: (change: TreeViewHighlightChangeDetails<ID>) => void;
|
|
37
|
+
}
|
|
38
|
+
export interface TreeViewControlledValues<ID extends StableID = StableID> {
|
|
39
|
+
readonly value?: readonly ID[];
|
|
40
|
+
readonly expandedValue?: readonly ID[];
|
|
41
|
+
readonly highlightedValue?: ID | null;
|
|
42
|
+
}
|
|
43
|
+
export interface TreeViewController<ID extends StableID = StableID> {
|
|
44
|
+
readonly tree: Tree<ID>;
|
|
45
|
+
getSnapshot(): RevisionSnapshot<TreeViewState<ID>>;
|
|
46
|
+
syncControlledValues(values: TreeViewControlledValues<ID>): Result<RevisionSnapshot<TreeViewState<ID>>>;
|
|
47
|
+
handleKeyboardInput(input: KeyboardInput, expectedRevision?: number): RevisionResult<TreeViewState<ID>, TreeViewEffect<ID>>;
|
|
48
|
+
}
|
|
49
|
+
export interface TreeViewTransitionDetails<ID extends StableID = StableID> {
|
|
50
|
+
readonly event: TreeViewEvent<ID>;
|
|
51
|
+
readonly result: RevisionResult<TreeViewState<ID>, TreeViewEffect<ID>>;
|
|
52
|
+
}
|
|
53
|
+
export interface TreeViewConnectionOptions<ID extends StableID = StableID> {
|
|
54
|
+
readonly controller: TreeViewController<ID>;
|
|
55
|
+
readonly disabled?: boolean;
|
|
56
|
+
readonly onTransition?: (details: TreeViewTransitionDetails<ID>) => void;
|
|
57
|
+
readonly onUpdate?: () => void;
|
|
58
|
+
}
|
|
59
|
+
export interface TreeViewConnection<ID extends StableID = StableID> {
|
|
60
|
+
readonly tree: Tree<ID>;
|
|
61
|
+
getSnapshot(): RevisionSnapshot<TreeViewState<ID>>;
|
|
62
|
+
syncControlledValues(values: TreeViewControlledValues<ID>): Result<RevisionSnapshot<TreeViewState<ID>>>;
|
|
63
|
+
handleKeyboardInput(input: KeyboardInput): boolean;
|
|
64
|
+
}
|
|
65
|
+
export type TreeViewOptions<ID extends StableID = StableID> = Omit<TreeViewControllerOptions<ID>, 'tree'> & Omit<TreeViewConnectionOptions<ID>, 'controller'> & {
|
|
66
|
+
readonly nodes: readonly TreeNodeInput<ID>[];
|
|
67
|
+
readonly disabledItems?: readonly ID[];
|
|
68
|
+
};
|
|
69
|
+
export declare function createTreeViewController<ID extends StableID>(options: TreeViewControllerOptions<ID>): Result<TreeViewController<ID>>;
|
|
70
|
+
export declare function createTreeView<ID extends StableID>(options: TreeViewOptions<ID>): FacadeConnection<TreeViewConnection<ID>>;
|
|
71
|
+
export declare function tryCreateTreeView<ID extends StableID>(options: TreeViewOptions<ID>): Result<FacadeConnection<TreeViewConnection<ID>>>;
|
|
72
|
+
export declare function connectTreeView<ID extends StableID>(options: TreeViewConnectionOptions<ID>): TreeViewConnection<ID>;
|
|
73
|
+
export declare function toTreeViewEvent<ID extends StableID = StableID>(input: KeyboardInput): TreeViewEvent<ID> | null;
|
|
74
|
+
export declare function toTreeViewEffect<ID extends StableID>(command: TreeViewCommand<ID>): TreeViewEffect<ID>;
|
|
75
|
+
//# sourceMappingURL=tree-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../src/tree-view.ts"],"names":[],"mappings":"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"}
|