@sectile/terminal 0.2.0 → 0.2.1
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/dist/accordion.d.ts +34 -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 +23 -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/appearance.d.ts +50 -0
- package/dist/appearance.d.ts.map +1 -0
- package/dist/appearance.js +200 -0
- package/dist/appearance.js.map +1 -0
- package/dist/calendar.d.ts +80 -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 +49 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +129 -0
- package/dist/carousel.js.map +1 -0
- package/dist/cascade-select.d.ts +43 -0
- package/dist/cascade-select.d.ts.map +1 -0
- package/dist/cascade-select.js +71 -0
- package/dist/cascade-select.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 +19 -0
- package/dist/checkbox.d.ts.map +1 -0
- package/dist/checkbox.js +12 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/color-picker.d.ts +39 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +62 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/combobox.d.ts +107 -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 +39 -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 +42 -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-field.d.ts +43 -0
- package/dist/date-range-field.d.ts.map +1 -0
- package/dist/date-range-field.js +49 -0
- package/dist/date-range-field.js.map +1 -0
- package/dist/date-range-picker.d.ts +42 -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 +39 -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 +42 -0
- package/dist/date-time-picker.d.ts.map +1 -0
- package/dist/date-time-picker.js +128 -0
- package/dist/date-time-picker.js.map +1 -0
- package/dist/date-time-range-picker.d.ts +42 -0
- package/dist/date-time-range-picker.d.ts.map +1 -0
- package/dist/date-time-range-picker.js +137 -0
- package/dist/date-time-range-picker.js.map +1 -0
- package/dist/dialog.d.ts +21 -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 +24 -0
- package/dist/disclosure.d.ts.map +1 -0
- package/dist/disclosure.js +56 -0
- package/dist/disclosure.js.map +1 -0
- package/dist/editable.d.ts +27 -0
- package/dist/editable.d.ts.map +1 -0
- package/dist/editable.js +70 -0
- package/dist/editable.js.map +1 -0
- package/dist/feed.d.ts +36 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +90 -0
- package/dist/feed.js.map +1 -0
- package/dist/form.d.ts +65 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +234 -0
- package/dist/form.js.map +1 -0
- package/dist/grid.d.ts +47 -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 +110 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -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 +45 -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 +171 -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/layer-stack.d.ts +16 -0
- package/dist/layer-stack.d.ts.map +1 -0
- package/dist/layer-stack.js +49 -0
- package/dist/layer-stack.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 +98 -0
- package/dist/listbox.d.ts.map +1 -0
- package/dist/listbox.js +330 -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/month-picker.d.ts +3 -0
- package/dist/month-picker.d.ts.map +1 -0
- package/dist/month-picker.js +2 -0
- package/dist/month-picker.js.map +1 -0
- package/dist/month-range-picker.d.ts +3 -0
- package/dist/month-range-picker.d.ts.map +1 -0
- package/dist/month-range-picker.js +2 -0
- package/dist/month-range-picker.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +34 -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/navigation-menu.d.ts +8 -0
- package/dist/navigation-menu.d.ts.map +1 -0
- package/dist/navigation-menu.js +10 -0
- package/dist/navigation-menu.js.map +1 -0
- package/dist/node.d.ts +43 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +196 -0
- package/dist/node.js.map +1 -0
- package/dist/number-field.d.ts +47 -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 +38 -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 +28 -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/popover.d.ts +21 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +8 -0
- package/dist/popover.js.map +1 -0
- package/dist/quantity-field.d.ts +49 -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 +40 -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/range-calendar.d.ts +3 -0
- package/dist/range-calendar.d.ts.map +1 -0
- package/dist/range-calendar.js +2 -0
- package/dist/range-calendar.js.map +1 -0
- package/dist/rating.d.ts +23 -0
- package/dist/rating.d.ts.map +1 -0
- package/dist/rating.js +38 -0
- package/dist/rating.js.map +1 -0
- package/dist/reorder.d.ts +42 -0
- package/dist/reorder.d.ts.map +1 -0
- package/dist/reorder.js +166 -0
- package/dist/reorder.js.map +1 -0
- package/dist/screen.d.ts +108 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +364 -0
- package/dist/screen.js.map +1 -0
- package/dist/select.d.ts +45 -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 +62 -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 +38 -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 +17 -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 +46 -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 +32 -0
- package/dist/tags-input.d.ts.map +1 -0
- package/dist/tags-input.js +68 -0
- package/dist/tags-input.js.map +1 -0
- package/dist/text.d.ts +63 -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 +39 -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/time-range-field.d.ts +42 -0
- package/dist/time-range-field.d.ts.map +1 -0
- package/dist/time-range-field.js +43 -0
- package/dist/time-range-field.js.map +1 -0
- package/dist/timer.d.ts +30 -0
- package/dist/timer.d.ts.map +1 -0
- package/dist/timer.js +31 -0
- package/dist/timer.js.map +1 -0
- package/dist/toast.d.ts +29 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +38 -0
- package/dist/toast.js.map +1 -0
- package/dist/toggle-button.d.ts +17 -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/toggle-group.d.ts +22 -0
- package/dist/toggle-group.d.ts.map +1 -0
- package/dist/toggle-group.js +33 -0
- package/dist/toggle-group.js.map +1 -0
- package/dist/toolbar.d.ts +37 -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 +17 -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 +102 -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 +83 -0
- package/dist/tree-view.d.ts.map +1 -0
- package/dist/tree-view.js +216 -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/dist/year-picker.d.ts +3 -0
- package/dist/year-picker.d.ts.map +1 -0
- package/dist/year-picker.js +2 -0
- package/dist/year-picker.js.map +1 -0
- package/dist/year-range-picker.d.ts +3 -0
- package/dist/year-range-picker.d.ts.map +1 -0
- package/dist/year-range-picker.js +2 -0
- package/dist/year-range-picker.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type ListboxCommand, type ListboxEvent, type ListboxPolicies, type ListboxSelectionMode, type ListboxState } from '@sectile/core/listbox';
|
|
4
|
+
import { type Sequence } from '@sectile/core/sequence';
|
|
5
|
+
import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
|
|
6
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
7
|
+
export type KeyboardInput = TerminalKeyboardInput;
|
|
8
|
+
export type ListboxEffect<ID extends StableID = StableID> = {
|
|
9
|
+
readonly type: 'move-highlight';
|
|
10
|
+
readonly id: ID;
|
|
11
|
+
} | {
|
|
12
|
+
readonly type: 'submit-item';
|
|
13
|
+
readonly id: ID;
|
|
14
|
+
};
|
|
15
|
+
export interface ListboxValueChangeDetails<ID extends StableID = StableID> {
|
|
16
|
+
readonly value: readonly ID[];
|
|
17
|
+
readonly previousValue: readonly ID[];
|
|
18
|
+
}
|
|
19
|
+
export interface ListboxHighlightChangeDetails<ID extends StableID = StableID> {
|
|
20
|
+
readonly value: ID | null;
|
|
21
|
+
readonly previousValue: ID | null;
|
|
22
|
+
}
|
|
23
|
+
export interface ListboxControllerOptions<ID extends StableID = StableID> {
|
|
24
|
+
readonly domain: Sequence<ID>;
|
|
25
|
+
readonly policies?: ListboxPolicies<ID>;
|
|
26
|
+
readonly selectionMode?: ListboxSelectionMode;
|
|
27
|
+
readonly orientation?: 'horizontal' | 'vertical';
|
|
28
|
+
readonly activationMode?: 'activate' | 'toggle';
|
|
29
|
+
readonly clearOnEscape?: boolean;
|
|
30
|
+
readonly disabledItems?: readonly ID[];
|
|
31
|
+
readonly disabled?: boolean;
|
|
32
|
+
readonly readOnly?: boolean;
|
|
33
|
+
readonly typeahead?: ListboxTypeaheadOptions<ID>;
|
|
34
|
+
readonly value?: readonly ID[];
|
|
35
|
+
readonly defaultValue?: readonly ID[];
|
|
36
|
+
readonly highlightedValue?: ID | null;
|
|
37
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
38
|
+
readonly onValueChange?: (change: ListboxValueChangeDetails<ID>) => void;
|
|
39
|
+
readonly onHighlightedValueChange?: (change: ListboxHighlightChangeDetails<ID>) => void;
|
|
40
|
+
}
|
|
41
|
+
export type ListboxControllerValueChangeHandler<ID extends StableID = StableID> = NonNullable<ListboxControllerOptions<ID>['onValueChange']>;
|
|
42
|
+
export type ListboxControllerHighlightedValueChangeHandler<ID extends StableID = StableID> = NonNullable<ListboxControllerOptions<ID>['onHighlightedValueChange']>;
|
|
43
|
+
export interface ListboxTypeaheadOptions<ID extends StableID = StableID> {
|
|
44
|
+
readonly textValue: (id: ID) => string;
|
|
45
|
+
readonly normalize?: (text: string) => string;
|
|
46
|
+
readonly timeoutMs?: number;
|
|
47
|
+
readonly now?: () => number;
|
|
48
|
+
}
|
|
49
|
+
export type ListboxTypeaheadTextValueResolver<ID extends StableID = StableID> = NonNullable<ListboxTypeaheadOptions<ID>['textValue']>;
|
|
50
|
+
export type ListboxTypeaheadNormalizer<ID extends StableID = StableID> = NonNullable<ListboxTypeaheadOptions<ID>['normalize']>;
|
|
51
|
+
export type ListboxTypeaheadClock<ID extends StableID = StableID> = NonNullable<ListboxTypeaheadOptions<ID>['now']>;
|
|
52
|
+
export interface ListboxControlledValues<ID extends StableID = StableID> {
|
|
53
|
+
readonly value?: readonly ID[];
|
|
54
|
+
readonly highlightedValue?: ID | null;
|
|
55
|
+
}
|
|
56
|
+
export interface ListboxController<ID extends StableID = StableID> {
|
|
57
|
+
getSnapshot(): RevisionSnapshot<ListboxState<ID>>;
|
|
58
|
+
syncControlledValues(values: ListboxControlledValues<ID>): Result<RevisionSnapshot<ListboxState<ID>>>;
|
|
59
|
+
handleKeyboardInput(input: KeyboardInput, expectedRevision?: number): RevisionResult<ListboxState<ID>, ListboxEffect<ID>>;
|
|
60
|
+
handleEvent(event: ListboxEvent<ID>, expectedRevision?: number): RevisionResult<ListboxState<ID>, ListboxEffect<ID>>;
|
|
61
|
+
}
|
|
62
|
+
export interface ListboxTransitionDetails<ID extends StableID = StableID> {
|
|
63
|
+
readonly event: ListboxEvent<ID> | {
|
|
64
|
+
readonly type: 'typeahead';
|
|
65
|
+
readonly query: string;
|
|
66
|
+
};
|
|
67
|
+
readonly result: RevisionResult<ListboxState<ID>, ListboxEffect<ID>>;
|
|
68
|
+
}
|
|
69
|
+
export interface ListboxConnectionOptions<ID extends StableID = StableID> {
|
|
70
|
+
readonly controller: ListboxController<ID>;
|
|
71
|
+
readonly disabled?: boolean;
|
|
72
|
+
readonly readOnly?: boolean;
|
|
73
|
+
readonly orientation?: 'horizontal' | 'vertical';
|
|
74
|
+
readonly activationMode?: 'activate' | 'toggle';
|
|
75
|
+
readonly typeahead?: ListboxTypeaheadOptions<ID>;
|
|
76
|
+
readonly onActivate?: (id: ID) => void;
|
|
77
|
+
readonly onTransition?: (details: ListboxTransitionDetails<ID>) => void;
|
|
78
|
+
readonly onUpdate?: () => void;
|
|
79
|
+
}
|
|
80
|
+
export type ListboxConnectionActivateHandler<ID extends StableID = StableID> = NonNullable<ListboxConnectionOptions<ID>['onActivate']>;
|
|
81
|
+
export type ListboxConnectionTransitionHandler<ID extends StableID = StableID> = NonNullable<ListboxConnectionOptions<ID>['onTransition']>;
|
|
82
|
+
export type ListboxConnectionUpdateHandler<ID extends StableID = StableID> = NonNullable<ListboxConnectionOptions<ID>['onUpdate']>;
|
|
83
|
+
export interface ListboxConnection<ID extends StableID = StableID> {
|
|
84
|
+
getSnapshot(): RevisionSnapshot<ListboxState<ID>>;
|
|
85
|
+
syncControlledValues(values: ListboxControlledValues<ID>): Result<RevisionSnapshot<ListboxState<ID>>>;
|
|
86
|
+
handleKeyboardInput(input: KeyboardInput): boolean;
|
|
87
|
+
handleEvent(event: ListboxEvent<ID>): boolean;
|
|
88
|
+
}
|
|
89
|
+
export type ListboxOptions<ID extends StableID = StableID> = Omit<ListboxControllerOptions<ID>, 'domain'> & Omit<ListboxConnectionOptions<ID>, 'controller'> & {
|
|
90
|
+
readonly items: readonly ID[];
|
|
91
|
+
};
|
|
92
|
+
export declare function createListboxController<ID extends StableID>(options: ListboxControllerOptions<ID>): Result<ListboxController<ID>>;
|
|
93
|
+
export declare function createListbox<ID extends StableID>(options: ListboxOptions<ID>): FacadeConnection<ListboxConnection<ID>>;
|
|
94
|
+
export declare function tryCreateListbox<ID extends StableID>(options: ListboxOptions<ID>): Result<FacadeConnection<ListboxConnection<ID>>>;
|
|
95
|
+
export declare function connectListbox<ID extends StableID>(options: ListboxConnectionOptions<ID>): ListboxConnection<ID>;
|
|
96
|
+
export declare function toListboxEvent<ID extends StableID = StableID>(input: KeyboardInput, orientation?: 'horizontal' | 'vertical'): ListboxEvent<ID> | null;
|
|
97
|
+
export declare function toListboxEffect<ID extends StableID>(command: ListboxCommand<ID>): ListboxEffect<ID>;
|
|
98
|
+
//# sourceMappingURL=listbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listbox.d.ts","sourceRoot":"","sources":["../src/listbox.ts"],"names":[],"mappings":"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"}
|
package/dist/listbox.js
ADDED
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { tryCreateInteractionState, requireInteraction } from '@sectile/core/interaction';
|
|
4
|
+
import { applyListboxEvent, tryCreateListboxState, findListboxTypeaheadMatch, } from '@sectile/core/listbox';
|
|
5
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
6
|
+
import { tryCreateRevisionSnapshot, rejectRevisionInput, } from '@sectile/core/revision';
|
|
7
|
+
import { applyControllerEvent, synchronizeControllerState } from './internal/controller.js';
|
|
8
|
+
import { createDisabledItems } from './internal/disabled-items.js';
|
|
9
|
+
export function createListboxController(options) {
|
|
10
|
+
const policies = listboxPolicies(options);
|
|
11
|
+
if (!policies.ok)
|
|
12
|
+
return policies;
|
|
13
|
+
const interaction = tryCreateInteractionState(options);
|
|
14
|
+
if (!interaction.ok)
|
|
15
|
+
return interaction;
|
|
16
|
+
const initial = tryCreateListboxState(options.domain, {
|
|
17
|
+
selected: options.value ?? options.defaultValue ?? [],
|
|
18
|
+
current: options.highlightedValue !== undefined
|
|
19
|
+
? options.highlightedValue
|
|
20
|
+
: options.defaultHighlightedValue ?? null,
|
|
21
|
+
}, options.selectionMode ?? options.policies?.selectionMode ?? 'multiple');
|
|
22
|
+
if (!initial.ok)
|
|
23
|
+
return initial;
|
|
24
|
+
const snapshot = tryCreateRevisionSnapshot(initial.value);
|
|
25
|
+
if (!snapshot.ok)
|
|
26
|
+
return snapshot;
|
|
27
|
+
return { ok: true, value: new TerminalListboxController(options, policies.value, interaction.value, snapshot.value) };
|
|
28
|
+
}
|
|
29
|
+
export function createListbox(options) {
|
|
30
|
+
return unwrap(tryCreateListbox(options));
|
|
31
|
+
}
|
|
32
|
+
export function tryCreateListbox(options) {
|
|
33
|
+
return createFacadeConnection(options, (options) => tryCreateListboxConnection(options));
|
|
34
|
+
}
|
|
35
|
+
function tryCreateListboxConnection(options) {
|
|
36
|
+
const domain = tryCreateSequence(options.items);
|
|
37
|
+
if (!domain.ok)
|
|
38
|
+
return domain;
|
|
39
|
+
const controller = createListboxController({ ...options, domain: domain.value });
|
|
40
|
+
if (!controller.ok)
|
|
41
|
+
return controller;
|
|
42
|
+
return { ok: true, value: connectListbox({ ...options, controller: controller.value }) };
|
|
43
|
+
}
|
|
44
|
+
export function connectListbox(options) {
|
|
45
|
+
return new TerminalListboxConnection(options);
|
|
46
|
+
}
|
|
47
|
+
export function toListboxEvent(input, orientation = 'vertical') {
|
|
48
|
+
if (input.key === 'home')
|
|
49
|
+
return 'first';
|
|
50
|
+
if (input.key === 'end')
|
|
51
|
+
return 'last';
|
|
52
|
+
if (orientation === 'vertical' && input.key === 'down')
|
|
53
|
+
return 'next';
|
|
54
|
+
if (orientation === 'vertical' && input.key === 'up')
|
|
55
|
+
return 'previous';
|
|
56
|
+
if (orientation === 'horizontal' && input.key === 'right')
|
|
57
|
+
return 'next';
|
|
58
|
+
if (orientation === 'horizontal' && input.key === 'left')
|
|
59
|
+
return 'previous';
|
|
60
|
+
if (input.key === 'space')
|
|
61
|
+
return 'toggle';
|
|
62
|
+
if (input.key === 'enter')
|
|
63
|
+
return 'activate';
|
|
64
|
+
if (input.key === 'escape')
|
|
65
|
+
return 'clear';
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
export function toListboxEffect(command) {
|
|
69
|
+
return Object.freeze(command.type === 'focus'
|
|
70
|
+
? { type: 'move-highlight', id: command.id }
|
|
71
|
+
: { type: 'submit-item', id: command.id });
|
|
72
|
+
}
|
|
73
|
+
class TerminalListboxConnection {
|
|
74
|
+
#controller;
|
|
75
|
+
#onActivate;
|
|
76
|
+
#onTransition;
|
|
77
|
+
#onUpdate;
|
|
78
|
+
#orientation;
|
|
79
|
+
#typeaheadEnabled;
|
|
80
|
+
constructor(options) {
|
|
81
|
+
this.#controller = options.controller;
|
|
82
|
+
this.#onActivate = options.onActivate;
|
|
83
|
+
this.#onTransition = options.onTransition;
|
|
84
|
+
this.#onUpdate = options.onUpdate;
|
|
85
|
+
this.#orientation = options.orientation ?? 'vertical';
|
|
86
|
+
this.#typeaheadEnabled = options.typeahead !== undefined;
|
|
87
|
+
}
|
|
88
|
+
getSnapshot() {
|
|
89
|
+
return this.#controller.getSnapshot();
|
|
90
|
+
}
|
|
91
|
+
syncControlledValues(values) {
|
|
92
|
+
const result = this.#controller.syncControlledValues(values);
|
|
93
|
+
if (result.ok)
|
|
94
|
+
this.#onUpdate?.();
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
handleKeyboardInput(input) {
|
|
98
|
+
const event = toListboxEvent(input, this.#orientation);
|
|
99
|
+
const query = printableText(input);
|
|
100
|
+
if (event === null && (query === null || !this.#typeaheadEnabled))
|
|
101
|
+
return false;
|
|
102
|
+
const result = this.#controller.handleKeyboardInput(input);
|
|
103
|
+
if (result.ok) {
|
|
104
|
+
for (const effect of result.commands) {
|
|
105
|
+
if (effect.type === 'submit-item')
|
|
106
|
+
this.#onActivate?.(effect.id);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const transitionEvent = event
|
|
110
|
+
?? { type: 'typeahead', query: query };
|
|
111
|
+
this.#onTransition?.(Object.freeze({ event: transitionEvent, result }));
|
|
112
|
+
if (result.ok)
|
|
113
|
+
this.#onUpdate?.();
|
|
114
|
+
return result.ok;
|
|
115
|
+
}
|
|
116
|
+
handleEvent(event) {
|
|
117
|
+
const result = this.#controller.handleEvent(event);
|
|
118
|
+
if (result.ok) {
|
|
119
|
+
for (const effect of result.commands) {
|
|
120
|
+
if (effect.type === 'submit-item')
|
|
121
|
+
this.#onActivate?.(effect.id);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
this.#onTransition?.(Object.freeze({ event, result }));
|
|
125
|
+
if (result.ok)
|
|
126
|
+
this.#onUpdate?.();
|
|
127
|
+
return result.ok;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
class TerminalListboxController {
|
|
131
|
+
#domain;
|
|
132
|
+
#policies;
|
|
133
|
+
#interaction;
|
|
134
|
+
#selectionMode;
|
|
135
|
+
#orientation;
|
|
136
|
+
#activationMode;
|
|
137
|
+
#clearOnEscape;
|
|
138
|
+
#typeahead;
|
|
139
|
+
#valueControlled;
|
|
140
|
+
#highlightControlled;
|
|
141
|
+
#onValueChange;
|
|
142
|
+
#onHighlightedValueChange;
|
|
143
|
+
#snapshot;
|
|
144
|
+
#typeaheadBuffer = '';
|
|
145
|
+
#lastTypeaheadAt = Number.NEGATIVE_INFINITY;
|
|
146
|
+
constructor(options, policies, interaction, snapshot) {
|
|
147
|
+
this.#domain = options.domain;
|
|
148
|
+
this.#policies = policies;
|
|
149
|
+
this.#interaction = interaction;
|
|
150
|
+
this.#selectionMode = policies.selectionMode ?? 'multiple';
|
|
151
|
+
this.#orientation = options.orientation ?? 'vertical';
|
|
152
|
+
this.#activationMode = options.activationMode ?? 'activate';
|
|
153
|
+
this.#clearOnEscape = options.clearOnEscape ?? true;
|
|
154
|
+
this.#typeahead = options.typeahead;
|
|
155
|
+
this.#valueControlled = options.value !== undefined;
|
|
156
|
+
this.#highlightControlled = options.highlightedValue !== undefined;
|
|
157
|
+
this.#onValueChange = options.onValueChange;
|
|
158
|
+
this.#onHighlightedValueChange = options.onHighlightedValueChange;
|
|
159
|
+
this.#snapshot = snapshot;
|
|
160
|
+
}
|
|
161
|
+
getSnapshot() {
|
|
162
|
+
return this.#snapshot;
|
|
163
|
+
}
|
|
164
|
+
syncControlledValues(values) {
|
|
165
|
+
if (!this.#valueControlled && !this.#highlightControlled) {
|
|
166
|
+
return {
|
|
167
|
+
ok: false,
|
|
168
|
+
error: {
|
|
169
|
+
class: 'construction',
|
|
170
|
+
code: 'uncontrolled-controller-sync',
|
|
171
|
+
message: 'An uncontrolled listbox controller has no external values to synchronize.',
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const inputError = controlledInputError(this.#valueControlled, this.#highlightControlled, values);
|
|
176
|
+
if (inputError !== null)
|
|
177
|
+
return { ok: false, error: inputError };
|
|
178
|
+
const state = tryCreateListboxState(this.#domain, {
|
|
179
|
+
selected: this.#valueControlled
|
|
180
|
+
? values.value
|
|
181
|
+
: this.#snapshot.state.selection.selected,
|
|
182
|
+
anchor: this.#snapshot.state.selection.anchor,
|
|
183
|
+
current: this.#highlightControlled
|
|
184
|
+
? values.highlightedValue
|
|
185
|
+
: this.#snapshot.state.cursor.current,
|
|
186
|
+
}, this.#selectionMode);
|
|
187
|
+
const snapshot = synchronizeControllerState(this.#snapshot, state);
|
|
188
|
+
if (!snapshot.ok)
|
|
189
|
+
return snapshot;
|
|
190
|
+
this.#snapshot = snapshot.value;
|
|
191
|
+
return snapshot;
|
|
192
|
+
}
|
|
193
|
+
handleKeyboardInput(input, expectedRevision = this.#snapshot.revision) {
|
|
194
|
+
const permitted = requireInteraction(this.#interaction, 'navigate');
|
|
195
|
+
if (!permitted.ok)
|
|
196
|
+
return rejectRevisionInput(this.#snapshot, permitted.error);
|
|
197
|
+
const mapped = toListboxEvent(input, this.#orientation);
|
|
198
|
+
const event = mapped === 'activate' && this.#activationMode === 'toggle'
|
|
199
|
+
? 'toggle'
|
|
200
|
+
: mapped === 'clear' && !this.#clearOnEscape ? null : mapped;
|
|
201
|
+
if (event !== null)
|
|
202
|
+
return this.handleEvent(event, expectedRevision);
|
|
203
|
+
const queryPart = printableText(input);
|
|
204
|
+
if (queryPart === null || this.#typeahead === undefined) {
|
|
205
|
+
return rejectRevisionInput(this.#snapshot, {
|
|
206
|
+
class: 'transition-rejection',
|
|
207
|
+
code: 'unsupported-terminal-key',
|
|
208
|
+
message: 'Terminal keyboard input does not map to a listbox semantic event.',
|
|
209
|
+
details: { key: input.key },
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
const now = this.#typeahead.now?.() ?? Date.now();
|
|
213
|
+
const timeoutMs = this.#typeahead.timeoutMs ?? 500;
|
|
214
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
|
|
215
|
+
return rejectRevisionInput(this.#snapshot, {
|
|
216
|
+
class: 'transition-rejection', code: 'invalid-typeahead-timeout',
|
|
217
|
+
message: 'Listbox typeahead timeout must be a non-negative finite number.',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
const buffer = now - this.#lastTypeaheadAt > timeoutMs
|
|
221
|
+
? queryPart
|
|
222
|
+
: repeatedTypeahead(this.#typeaheadBuffer, queryPart);
|
|
223
|
+
const match = findListboxTypeaheadMatch(this.#domain, this.#snapshot.state.cursor.current, buffer, {
|
|
224
|
+
textValue: this.#typeahead.textValue,
|
|
225
|
+
...(this.#typeahead.normalize === undefined ? {} : { normalize: this.#typeahead.normalize }),
|
|
226
|
+
...(this.#policies.eligible === undefined ? {} : { eligible: this.#policies.eligible }),
|
|
227
|
+
...(this.#policies.maxScan === undefined ? {} : { maxScan: this.#policies.maxScan }),
|
|
228
|
+
});
|
|
229
|
+
this.#typeaheadBuffer = buffer;
|
|
230
|
+
this.#lastTypeaheadAt = now;
|
|
231
|
+
if (!match.ok)
|
|
232
|
+
return rejectRevisionInput(this.#snapshot, match.error);
|
|
233
|
+
if (match.value === null) {
|
|
234
|
+
return rejectRevisionInput(this.#snapshot, {
|
|
235
|
+
class: 'transition-rejection', code: 'typeahead-no-match',
|
|
236
|
+
message: 'Listbox typeahead did not match an eligible item.',
|
|
237
|
+
details: { query: buffer },
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return this.handleEvent({ type: 'focus', id: match.value }, expectedRevision);
|
|
241
|
+
}
|
|
242
|
+
handleEvent(event, expectedRevision = this.#snapshot.revision) {
|
|
243
|
+
const permitted = requireInteraction(this.#interaction, listboxIntent(event));
|
|
244
|
+
if (!permitted.ok)
|
|
245
|
+
return rejectRevisionInput(this.#snapshot, permitted.error);
|
|
246
|
+
const result = applyControllerEvent(this.#snapshot, expectedRevision, event, (state, semanticEvent) => applyListboxEvent(this.#domain, state, semanticEvent, this.#policies), (previous, proposed) => controlledState(this.#domain, previous, proposed, this.#valueControlled, this.#highlightControlled, this.#selectionMode), (previous, proposed) => this.#notify(previous, proposed), toListboxEffect);
|
|
247
|
+
if (result.ok)
|
|
248
|
+
this.#snapshot = result.snapshot;
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
#notify(previous, proposed) {
|
|
252
|
+
if (!sameIDs(previous.selection.selected, proposed.selection.selected)) {
|
|
253
|
+
this.#onValueChange?.(Object.freeze({
|
|
254
|
+
value: proposed.selection.selected,
|
|
255
|
+
previousValue: previous.selection.selected,
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
if (previous.cursor.current !== proposed.cursor.current) {
|
|
259
|
+
this.#onHighlightedValueChange?.(Object.freeze({
|
|
260
|
+
value: proposed.cursor.current,
|
|
261
|
+
previousValue: previous.cursor.current,
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function controlledState(domain, previous, proposed, valueControlled, highlightControlled, selectionMode) {
|
|
267
|
+
const input = {
|
|
268
|
+
selected: valueControlled ? previous.selection.selected : proposed.selection.selected,
|
|
269
|
+
anchor: proposed.selection.anchor,
|
|
270
|
+
current: highlightControlled ? previous.cursor.current : proposed.cursor.current,
|
|
271
|
+
};
|
|
272
|
+
return tryCreateListboxState(domain, input, selectionMode);
|
|
273
|
+
}
|
|
274
|
+
function listboxPolicies(options) {
|
|
275
|
+
const disabled = createDisabledItems(options.domain, options.disabledItems);
|
|
276
|
+
if (!disabled.ok)
|
|
277
|
+
return disabled;
|
|
278
|
+
const eligible = options.policies?.eligible;
|
|
279
|
+
return { ok: true, value: Object.freeze({
|
|
280
|
+
...options.policies,
|
|
281
|
+
selectionFollowsFocus: options.readOnly ? false : options.policies?.selectionFollowsFocus ?? false,
|
|
282
|
+
selectionMode: options.selectionMode ?? options.policies?.selectionMode ?? 'multiple',
|
|
283
|
+
eligible: (id) => !disabled.value.has(id) && (eligible?.(id) ?? true),
|
|
284
|
+
}) };
|
|
285
|
+
}
|
|
286
|
+
function listboxIntent(event) {
|
|
287
|
+
if (typeof event === 'object')
|
|
288
|
+
return event.type === 'focus' ? 'navigate' : 'mutate';
|
|
289
|
+
return event === 'next' || event === 'previous' || event === 'first' || event === 'last'
|
|
290
|
+
? 'navigate'
|
|
291
|
+
: 'mutate';
|
|
292
|
+
}
|
|
293
|
+
function printableText(input) {
|
|
294
|
+
return input.altKey === true || input.ctrlKey === true
|
|
295
|
+
|| input.text === undefined || input.text.length === 0
|
|
296
|
+
? null
|
|
297
|
+
: input.text;
|
|
298
|
+
}
|
|
299
|
+
function repeatedTypeahead(buffer, next) {
|
|
300
|
+
return buffer.length > 0 && Array.from(buffer).every((character) => character === next)
|
|
301
|
+
? next
|
|
302
|
+
: `${buffer}${next}`;
|
|
303
|
+
}
|
|
304
|
+
function controlledInputError(valueControlled, highlightControlled, values) {
|
|
305
|
+
if (valueControlled !== (values.value !== undefined)) {
|
|
306
|
+
return {
|
|
307
|
+
class: 'construction',
|
|
308
|
+
code: valueControlled ? 'controlled-value-required' : 'uncontrolled-value-update',
|
|
309
|
+
message: valueControlled
|
|
310
|
+
? 'Controlled listbox selection sync requires value.'
|
|
311
|
+
: 'Uncontrolled listbox selection cannot be synchronized externally.',
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
if (highlightControlled !== (values.highlightedValue !== undefined)) {
|
|
315
|
+
return {
|
|
316
|
+
class: 'construction',
|
|
317
|
+
code: highlightControlled
|
|
318
|
+
? 'controlled-highlighted-value-required'
|
|
319
|
+
: 'uncontrolled-highlighted-value-update',
|
|
320
|
+
message: highlightControlled
|
|
321
|
+
? 'Controlled listbox highlight sync requires highlightedValue.'
|
|
322
|
+
: 'Uncontrolled listbox highlight cannot be synchronized externally.',
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
function sameIDs(left, right) {
|
|
328
|
+
return left.length === right.length && left.every((id, index) => id === right[index]);
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=listbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listbox.js","sourceRoot":"","sources":["../src/listbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenuButtonOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'>;
|
|
5
|
+
export type MenuButtonConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): FacadeConnection<MenuButtonConnection<ID>>;
|
|
7
|
+
export declare function tryCreateMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): Result<FacadeConnection<MenuButtonConnection<ID>>>;
|
|
8
|
+
//# sourceMappingURL=menu-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.d.ts","sourceRoot":"","sources":["../src/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAAC,MAAM,MAAM,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAE5d;AAED,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAE3I"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenuButton(options) {
|
|
5
|
+
return unwrap(tryCreateMenuButton(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenuButton(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenuButtonConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenuButtonConnection(options) { return createMenuControl({ ...options, kind: 'menu-button' }); }
|
|
11
|
+
//# sourceMappingURL=menu-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.js","sourceRoot":"","sources":["../src/menu-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAA2L,MAAM,UAAU,gBAAgB,CAAsB,OAA8B;IAC9a,OAAO,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAsB,OAA8B;IACrF,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,6BAA6B,CAAsB,OAA8B,IAAsC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/menu.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenuOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'>;
|
|
5
|
+
export type MenuConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createMenu<ID extends StableID>(options: MenuOptions<ID>): FacadeConnection<MenuConnection<ID>>;
|
|
7
|
+
export declare function tryCreateMenu<ID extends StableID>(options: MenuOptions<ID>): Result<FacadeConnection<MenuConnection<ID>>>;
|
|
8
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,WAAW,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAAC,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAE9b;AAED,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAEzH"}
|
package/dist/menu.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenu(options) {
|
|
5
|
+
return unwrap(tryCreateMenu(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenu(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenuConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenuConnection(options) { return createMenuControl({ ...options, kind: 'menu' }); }
|
|
11
|
+
//# sourceMappingURL=menu.js.map
|
package/dist/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAA+K,MAAM,UAAU,UAAU,CAAsB,OAAwB;IACtZ,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAsB,OAAwB;IACzE,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,uBAAuB,CAAsB,OAAwB,IAAgC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type MenuControl, type MenuControlOptions } from './internal/menu-control.js';
|
|
4
|
+
export type MenubarOptions<ID extends StableID = StableID> = Omit<MenuControlOptions<ID>, 'kind'>;
|
|
5
|
+
export type MenubarConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
|
+
export declare function createMenubar<ID extends StableID>(options: MenubarOptions<ID>): FacadeConnection<MenubarConnection<ID>>;
|
|
7
|
+
export declare function tryCreateMenubar<ID extends StableID>(options: MenubarOptions<ID>): Result<FacadeConnection<MenubarConnection<ID>>>;
|
|
8
|
+
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAAC,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAAC,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;AAAC,wBAAgB,aAAa,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAE7c;AAED,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAElI"}
|
package/dist/menubar.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createMenuControl } from './internal/menu-control.js';
|
|
4
|
+
export function createMenubar(options) {
|
|
5
|
+
return unwrap(tryCreateMenubar(options));
|
|
6
|
+
}
|
|
7
|
+
export function tryCreateMenubar(options) {
|
|
8
|
+
return createFacadeConnection(options, (options) => tryCreateMenubarConnection(options));
|
|
9
|
+
}
|
|
10
|
+
function tryCreateMenubarConnection(options) { return createMenuControl({ ...options, kind: 'menubar' }); }
|
|
11
|
+
//# sourceMappingURL=menubar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menubar.js","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACS,OAAO,EAAE,iBAAiB,EAA6C,MAAM,4BAA4B,CAAC;AAAqL,MAAM,UAAU,aAAa,CAAsB,OAA2B;IACla,OAAO,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAsB,OAA2B;IAC/E,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,0BAA0B,CAAsB,OAA2B,IAAmC,OAAO,iBAAiB,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createDatePicker as createMonthPicker, tryCreateDatePicker as tryCreateMonthPicker, toDatePickerEvent as toMonthPickerEvent, } from './date-picker.js';
|
|
2
|
+
export type { DatePickerConnection as MonthPickerConnection, DatePickerControlledValues as MonthPickerControlledValues, DatePickerOptions as MonthPickerOptions, } from './date-picker.js';
|
|
3
|
+
//# sourceMappingURL=month-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-picker.d.ts","sourceRoot":"","sources":["../src/month-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,iBAAiB,EACrC,mBAAmB,IAAI,oBAAoB,EAC3C,iBAAiB,IAAI,kBAAkB,GACxC,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,oBAAoB,IAAI,qBAAqB,EAC7C,0BAA0B,IAAI,2BAA2B,EACzD,iBAAiB,IAAI,kBAAkB,GACxC,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-picker.js","sourceRoot":"","sources":["../src/month-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,IAAI,iBAAiB,EACrC,mBAAmB,IAAI,oBAAoB,EAC3C,iBAAiB,IAAI,kBAAkB,GACxC,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createDateRangePicker as createMonthRangePicker, tryCreateDateRangePicker as tryCreateMonthRangePicker, } from './date-range-picker.js';
|
|
2
|
+
export type { DateRangePickerConnection as MonthRangePickerConnection, DateRangePickerControlledValues as MonthRangePickerControlledValues, DateRangePickerOptions as MonthRangePickerOptions, } from './date-range-picker.js';
|
|
3
|
+
//# sourceMappingURL=month-range-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-range-picker.d.ts","sourceRoot":"","sources":["../src/month-range-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,sBAAsB,EAC/C,wBAAwB,IAAI,yBAAyB,GACtD,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,IAAI,0BAA0B,EACvD,+BAA+B,IAAI,gCAAgC,EACnE,sBAAsB,IAAI,uBAAuB,GAClD,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"month-range-picker.js","sourceRoot":"","sources":["../src/month-range-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,IAAI,sBAAsB,EAC/C,wBAAwB,IAAI,yBAAyB,GACtD,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type BoundedRangeInput, type QuantizedRange } from '@sectile/core/range';
|
|
4
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
5
|
+
import { type MultiThumbSliderEvent, type MultiThumbSliderPolicies, type MultiThumbSliderState } from '@sectile/core/multi-thumb-slider';
|
|
6
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
7
|
+
export interface MultiThumbSliderOptions<ID extends StableID = StableID> extends BoundedRangeInput {
|
|
8
|
+
readonly thumbs: readonly ID[];
|
|
9
|
+
readonly values?: readonly number[];
|
|
10
|
+
readonly defaultValues?: readonly number[];
|
|
11
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
12
|
+
readonly disabled?: boolean;
|
|
13
|
+
readonly readOnly?: boolean;
|
|
14
|
+
readonly policies?: MultiThumbSliderPolicies;
|
|
15
|
+
readonly onValuesChange?: (ticks: readonly number[]) => void;
|
|
16
|
+
readonly onUpdate?: () => void;
|
|
17
|
+
}
|
|
18
|
+
export type MultiThumbSliderValuesChangeHandler<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['onValuesChange']>;
|
|
19
|
+
export type MultiThumbSliderUpdateHandler<ID extends StableID = StableID> = NonNullable<MultiThumbSliderOptions<ID>['onUpdate']>;
|
|
20
|
+
export interface MultiThumbSliderControlledValues<ID extends StableID = StableID> {
|
|
21
|
+
readonly values: readonly number[];
|
|
22
|
+
readonly highlightedValue?: ID | null;
|
|
23
|
+
}
|
|
24
|
+
export interface MultiThumbSliderConnection<ID extends StableID = StableID> {
|
|
25
|
+
readonly range: QuantizedRange;
|
|
26
|
+
getSnapshot(): RevisionSnapshot<MultiThumbSliderState<ID>>;
|
|
27
|
+
getValues(): readonly string[];
|
|
28
|
+
syncControlledValues(values: MultiThumbSliderControlledValues<ID>): Result<RevisionSnapshot<MultiThumbSliderState<ID>>>;
|
|
29
|
+
handleEvent(event: MultiThumbSliderEvent<ID>): boolean;
|
|
30
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function createMultiThumbSlider<ID extends StableID>(options: MultiThumbSliderOptions<ID>): FacadeConnection<MultiThumbSliderConnection<ID>>;
|
|
33
|
+
export declare function tryCreateMultiThumbSlider<ID extends StableID>(options: MultiThumbSliderOptions<ID>): Result<FacadeConnection<MultiThumbSliderConnection<ID>>>;
|
|
34
|
+
//# sourceMappingURL=multi-thumb-slider.d.ts.map
|