@sectile/terminal 0.7.0 → 0.8.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/dist/accordion.d.ts +0 -1
- package/dist/alert-dialog.d.ts +0 -1
- package/dist/appearance.d.ts +0 -1
- package/dist/calendar.d.ts +0 -1
- package/dist/carousel.d.ts +0 -1
- package/dist/cascade-list.d.ts +38 -0
- package/dist/cascade-list.js +102 -0
- package/dist/cascade-list.js.map +1 -0
- package/dist/cascade-select.d.ts +1 -2
- package/dist/cascade-select.js +11 -31
- package/dist/cascade-select.js.map +1 -1
- package/dist/checkbox-group.d.ts +0 -1
- package/dist/checkbox.d.ts +0 -1
- package/dist/color-picker.d.ts +0 -1
- package/dist/combobox.d.ts +0 -1
- package/dist/date-field.d.ts +0 -1
- package/dist/date-picker.d.ts +0 -1
- package/dist/date-range-field.d.ts +0 -1
- package/dist/date-range-picker.d.ts +0 -1
- package/dist/date-time-field.d.ts +0 -1
- package/dist/date-time-picker.d.ts +0 -1
- package/dist/date-time-range-picker.d.ts +0 -1
- package/dist/dialog.d.ts +0 -1
- package/dist/disclosure.d.ts +0 -1
- package/dist/drawer.d.ts +0 -1
- package/dist/editable.d.ts +0 -1
- package/dist/feed.d.ts +0 -1
- package/dist/grid.d.ts +2 -2
- package/dist/grid.js +7 -6
- package/dist/grid.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/cascade-choice.d.ts +21 -0
- package/dist/internal/cascade-choice.js +36 -0
- package/dist/internal/cascade-choice.js.map +1 -0
- package/dist/internal/checked-control.d.ts +2 -3
- package/dist/internal/checked-control.js +3 -5
- package/dist/internal/checked-control.js.map +1 -1
- package/dist/internal/disabled-items.d.ts +0 -1
- package/dist/internal/disabled-items.js +2 -12
- package/dist/internal/disabled-items.js.map +1 -1
- package/dist/internal/grapheme.d.ts +2 -1
- package/dist/internal/grapheme.js +67 -0
- package/dist/internal/grapheme.js.map +1 -1
- package/dist/internal/menu-control.d.ts +0 -1
- package/dist/internal/menu-control.js +14 -41
- package/dist/internal/menu-control.js.map +1 -1
- package/dist/internal/popup-control.d.ts +2 -3
- package/dist/internal/popup-control.js +3 -5
- package/dist/internal/popup-control.js.map +1 -1
- package/dist/internal/reference-date.d.ts +0 -1
- package/dist/internal/result.d.ts +0 -1
- package/dist/internal/text-input.d.ts +0 -1
- package/dist/keyboard.d.ts +0 -1
- package/dist/layer-stack.d.ts +0 -1
- package/dist/layout.d.ts +0 -1
- package/dist/layout.js +4 -5
- package/dist/layout.js.map +1 -1
- package/dist/listbox.d.ts +0 -1
- package/dist/menu-button.d.ts +0 -1
- package/dist/menu.d.ts +0 -1
- package/dist/menubar.d.ts +0 -1
- package/dist/meter-group.d.ts +28 -0
- package/dist/meter-group.js +120 -0
- package/dist/meter-group.js.map +1 -0
- package/dist/meter.d.ts +21 -0
- package/dist/meter.js +98 -0
- package/dist/meter.js.map +1 -0
- package/dist/month-picker.d.ts +0 -1
- package/dist/month-range-picker.d.ts +0 -1
- package/dist/multi-thumb-slider.d.ts +0 -1
- package/dist/navigation-menu.d.ts +0 -1
- package/dist/node.d.ts +0 -1
- package/dist/number-field.d.ts +0 -1
- package/dist/pagination.d.ts +0 -1
- package/dist/pin-input.d.ts +0 -1
- package/dist/popover.d.ts +0 -1
- package/dist/progress.d.ts +22 -0
- package/dist/progress.js +76 -0
- package/dist/progress.js.map +1 -0
- package/dist/quantity-field.d.ts +0 -1
- package/dist/radio-group.d.ts +0 -1
- package/dist/radio-group.js +9 -1
- package/dist/radio-group.js.map +1 -1
- package/dist/range-calendar.d.ts +0 -1
- package/dist/rating.d.ts +2 -3
- package/dist/rating.js +125 -28
- package/dist/rating.js.map +1 -1
- package/dist/reorder.d.ts +0 -1
- package/dist/screen.d.ts +0 -1
- package/dist/screen.js +107 -67
- package/dist/screen.js.map +1 -1
- package/dist/select.d.ts +0 -1
- package/dist/slider.d.ts +0 -1
- package/dist/spin-button.d.ts +0 -1
- package/dist/stepper.d.ts +0 -1
- package/dist/switch.d.ts +0 -1
- package/dist/tabs.d.ts +0 -1
- package/dist/tabs.js +7 -1
- package/dist/tabs.js.map +1 -1
- package/dist/tags-input.d.ts +0 -1
- package/dist/text.d.ts +0 -1
- package/dist/time-field.d.ts +0 -1
- package/dist/time-range-field.d.ts +0 -1
- package/dist/timer.d.ts +0 -1
- package/dist/toast.d.ts +0 -1
- package/dist/toggle-button.d.ts +0 -1
- package/dist/toggle-group.d.ts +0 -1
- package/dist/toolbar.d.ts +0 -1
- package/dist/tooltip.d.ts +0 -1
- package/dist/tree-grid.d.ts +0 -1
- package/dist/tree-view.d.ts +0 -1
- package/dist/tree-view.js +5 -5
- package/dist/tree-view.js.map +1 -1
- package/dist/window-splitter.d.ts +0 -1
- package/dist/year-picker.d.ts +0 -1
- package/dist/year-range-picker.d.ts +0 -1
- package/package.json +26 -12
- package/dist/accordion.d.ts.map +0 -1
- package/dist/alert-dialog.d.ts.map +0 -1
- package/dist/appearance.d.ts.map +0 -1
- package/dist/calendar.d.ts.map +0 -1
- package/dist/carousel.d.ts.map +0 -1
- package/dist/cascade-select.d.ts.map +0 -1
- package/dist/checkbox-group.d.ts.map +0 -1
- package/dist/checkbox.d.ts.map +0 -1
- package/dist/color-picker.d.ts.map +0 -1
- package/dist/combobox.d.ts.map +0 -1
- package/dist/date-field.d.ts.map +0 -1
- package/dist/date-picker.d.ts.map +0 -1
- package/dist/date-range-field.d.ts.map +0 -1
- package/dist/date-range-picker.d.ts.map +0 -1
- package/dist/date-time-field.d.ts.map +0 -1
- package/dist/date-time-picker.d.ts.map +0 -1
- package/dist/date-time-range-picker.d.ts.map +0 -1
- package/dist/dialog.d.ts.map +0 -1
- package/dist/disclosure.d.ts.map +0 -1
- package/dist/drawer.d.ts.map +0 -1
- package/dist/editable.d.ts.map +0 -1
- package/dist/feed.d.ts.map +0 -1
- package/dist/form.d.ts +0 -65
- package/dist/form.d.ts.map +0 -1
- package/dist/form.js +0 -234
- package/dist/form.js.map +0 -1
- package/dist/grid.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/internal/checked-control.d.ts.map +0 -1
- package/dist/internal/disabled-items.d.ts.map +0 -1
- package/dist/internal/grapheme.d.ts.map +0 -1
- package/dist/internal/menu-control.d.ts.map +0 -1
- package/dist/internal/popup-control.d.ts.map +0 -1
- package/dist/internal/reference-date.d.ts.map +0 -1
- package/dist/internal/result.d.ts.map +0 -1
- package/dist/internal/text-input.d.ts.map +0 -1
- package/dist/keyboard.d.ts.map +0 -1
- package/dist/layer-stack.d.ts.map +0 -1
- package/dist/layout.d.ts.map +0 -1
- package/dist/listbox.d.ts.map +0 -1
- package/dist/menu-button.d.ts.map +0 -1
- package/dist/menu.d.ts.map +0 -1
- package/dist/menubar.d.ts.map +0 -1
- package/dist/month-picker.d.ts.map +0 -1
- package/dist/month-range-picker.d.ts.map +0 -1
- package/dist/multi-thumb-slider.d.ts.map +0 -1
- package/dist/navigation-menu.d.ts.map +0 -1
- package/dist/node.d.ts.map +0 -1
- package/dist/number-field.d.ts.map +0 -1
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pin-input.d.ts.map +0 -1
- package/dist/popover.d.ts.map +0 -1
- package/dist/quantity-field.d.ts.map +0 -1
- package/dist/radio-group.d.ts.map +0 -1
- package/dist/range-calendar.d.ts.map +0 -1
- package/dist/rating.d.ts.map +0 -1
- package/dist/reorder.d.ts.map +0 -1
- package/dist/screen.d.ts.map +0 -1
- package/dist/select.d.ts.map +0 -1
- package/dist/slider.d.ts.map +0 -1
- package/dist/spin-button.d.ts.map +0 -1
- package/dist/stepper.d.ts.map +0 -1
- package/dist/switch.d.ts.map +0 -1
- package/dist/tabs.d.ts.map +0 -1
- package/dist/tags-input.d.ts.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/time-field.d.ts.map +0 -1
- package/dist/time-range-field.d.ts.map +0 -1
- package/dist/timer.d.ts.map +0 -1
- package/dist/toast.d.ts.map +0 -1
- package/dist/toggle-button.d.ts.map +0 -1
- package/dist/toggle-group.d.ts.map +0 -1
- package/dist/toolbar.d.ts.map +0 -1
- package/dist/tooltip.d.ts.map +0 -1
- package/dist/tree-grid.d.ts.map +0 -1
- package/dist/tree-view.d.ts.map +0 -1
- package/dist/window-splitter.d.ts.map +0 -1
- package/dist/year-picker.d.ts.map +0 -1
- package/dist/year-range-picker.d.ts.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { tryCreateDisabledIdentitySet } from '@sectile/core/adapter-runtime';
|
|
2
|
+
import { tryCreateTree } from '@sectile/core/tree';
|
|
3
|
+
export function tryCreateTerminalCascadeChoiceDomain(nodes, disabledItems, _label) {
|
|
4
|
+
const tree = tryCreateTree(nodes);
|
|
5
|
+
if (!tree.ok)
|
|
6
|
+
return tree;
|
|
7
|
+
const disabled = tryCreateDisabledIdentitySet({ contains: (id) => tree.value.has(id) }, disabledItems);
|
|
8
|
+
if (!disabled.ok)
|
|
9
|
+
return disabled;
|
|
10
|
+
return { ok: true, value: Object.freeze({ tree: tree.value, disabledItems: disabled.value }) };
|
|
11
|
+
}
|
|
12
|
+
export function withDisabledCascadeChoicePolicies(policies, disabledItems) {
|
|
13
|
+
const suppliedEligibility = policies?.eligible;
|
|
14
|
+
return {
|
|
15
|
+
...policies,
|
|
16
|
+
eligible: (id) => !disabledItems.has(id) && (suppliedEligibility?.(id) ?? true),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function toTerminalCascadeChoiceEvent(input) {
|
|
20
|
+
if (input.key === 'down')
|
|
21
|
+
return 'next';
|
|
22
|
+
if (input.key === 'up')
|
|
23
|
+
return 'previous';
|
|
24
|
+
if (input.key === 'right')
|
|
25
|
+
return 'right';
|
|
26
|
+
if (input.key === 'left')
|
|
27
|
+
return 'left';
|
|
28
|
+
if (input.key === 'home')
|
|
29
|
+
return 'first';
|
|
30
|
+
if (input.key === 'end')
|
|
31
|
+
return 'last';
|
|
32
|
+
if (input.key === 'enter' || input.key === 'space')
|
|
33
|
+
return 'select';
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cascade-choice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-choice.js","sourceRoot":"","sources":["../../src/internal/cascade-choice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAiC,MAAM,oBAAoB,CAAC;AAmBlF,MAAM,UAAU,oCAAoC,CAClD,KAAmC,EACnC,aAAwC,EACxC,MAAyC;IAEzC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,4BAA4B,CAC3C,EAAE,QAAQ,EAAE,CAAC,EAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC5C,aAAa,CACd,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,QAA8B,EAC9B,aAA8B;IAE9B,MAAM,mBAAmB,GAAG,QAAQ,EAAE,QAAQ,CAAC;IAC/C,OAAO;QACL,GAAG,QAAQ;QACX,QAAQ,EAAE,CAAC,EAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;KACxE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAA4B;IAE5B,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -8,7 +8,7 @@ export interface TerminalCheckedControl<State, Event, Value> {
|
|
|
8
8
|
handleEvent(event: Event): boolean;
|
|
9
9
|
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
10
10
|
}
|
|
11
|
-
export interface Options<State, Event, Command, Value> {
|
|
11
|
+
export interface Options<State, Event, Command extends object, Value> {
|
|
12
12
|
readonly controlled: boolean;
|
|
13
13
|
readonly initial: Result<State>;
|
|
14
14
|
readonly toggleEvent: Event;
|
|
@@ -19,5 +19,4 @@ export interface Options<State, Event, Command, Value> {
|
|
|
19
19
|
readonly onUpdate: (() => void) | undefined;
|
|
20
20
|
readonly interaction?: InteractionStateInput;
|
|
21
21
|
}
|
|
22
|
-
export declare function createTerminalCheckedControl<State, Event, Command, Value>(options: Options<State, Event, Command, Value>): Result<TerminalCheckedControl<State, Event, Value>>;
|
|
23
|
-
//# sourceMappingURL=checked-control.d.ts.map
|
|
22
|
+
export declare function createTerminalCheckedControl<State, Event, Command extends object, Value>(options: Options<State, Event, Command, Value>): Result<TerminalCheckedControl<State, Event, Value>>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createControlledComponentController } from '@sectile/core/adapter-runtime';
|
|
2
2
|
export function createTerminalCheckedControl(options) {
|
|
3
|
-
const runtime =
|
|
4
|
-
options.onChange?.(options.read(proposed)); }, toEffect: (command) => command, interaction: options.interaction });
|
|
3
|
+
const runtime = createControlledComponentController({ controlled: options.controlled, initial: options.initial, reducer: options.reducer, create: (value) => options.create(value), read: options.read, onChange: (value) => options.onChange?.(value), ...(options.interaction === undefined ? {} : { interaction: options.interaction }) });
|
|
5
4
|
if (!runtime.ok)
|
|
6
5
|
return runtime;
|
|
7
6
|
return { ok: true, value: new Impl(options, runtime.value) };
|
|
@@ -11,8 +10,7 @@ class Impl {
|
|
|
11
10
|
#runtime;
|
|
12
11
|
constructor(options, runtime) { this.#options = options; this.#runtime = runtime; }
|
|
13
12
|
getSnapshot() { return this.#runtime.getSnapshot(); }
|
|
14
|
-
syncControlledValue(value) {
|
|
15
|
-
return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled checked control cannot be synchronized externally.' } }; const result = this.#runtime.replace(this.#options.create(value)); if (result.ok)
|
|
13
|
+
syncControlledValue(value) { const result = this.#runtime.syncControlledValue(value); if (result.ok)
|
|
16
14
|
this.#options.onUpdate?.(); return result; }
|
|
17
15
|
handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
|
|
18
16
|
this.#options.onUpdate?.(); return result.ok; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checked-control.js","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"checked-control.js","sourceRoot":"","sources":["../../src/internal/checked-control.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mCAAmC,EAAsC,MAAM,+BAA+B,CAAC;AAGxH,MAAM,UAAU,4BAA4B,CAA8C,OAA8C;IACtI,MAAM,OAAO,GAAG,mCAAmC,CAA+B,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5W,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AAChG,CAAC;AACD,MAAM,IAAI;IACC,QAAQ,CAAwC;IAAU,QAAQ,CAA8D;IACzI,YAAmB,OAA8C,EAAE,OAAoE,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IACvL,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,KAAY,IAAqC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;IACzL,WAAW,CAAC,KAAY,IAAa,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/I,mBAAmB,CAAC,KAA4B,IAAa,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAC5L"}
|
|
@@ -3,4 +3,3 @@ export interface IdentityDomain<ID extends StableID> {
|
|
|
3
3
|
contains(id: ID): boolean;
|
|
4
4
|
}
|
|
5
5
|
export declare function createDisabledItems<ID extends StableID>(domain: IdentityDomain<ID>, items?: readonly ID[]): Result<ReadonlySet<ID>>;
|
|
6
|
-
//# sourceMappingURL=disabled-items.d.ts.map
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
+
import { tryCreateDisabledIdentitySet } from '@sectile/core/adapter-runtime';
|
|
1
2
|
export function createDisabledItems(domain, items = []) {
|
|
2
|
-
|
|
3
|
-
for (const id of disabled) {
|
|
4
|
-
if (!domain.contains(id)) {
|
|
5
|
-
return { ok: false, error: {
|
|
6
|
-
class: 'construction',
|
|
7
|
-
code: 'disabled-item-outside-domain',
|
|
8
|
-
message: 'Every disabled item must exist in the component domain.',
|
|
9
|
-
details: { id },
|
|
10
|
-
} };
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return { ok: true, value: disabled };
|
|
3
|
+
return tryCreateDisabledIdentitySet(domain, items);
|
|
14
4
|
}
|
|
15
5
|
//# sourceMappingURL=disabled-items.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disabled-items.js","sourceRoot":"","sources":["../../src/internal/disabled-items.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"disabled-items.js","sourceRoot":"","sources":["../../src/internal/disabled-items.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAM7E,MAAM,UAAU,mBAAmB,CACjC,MAA0B,EAC1B,KAAK,GAAkB,EAAE;IAEzB,OAAO,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function graphemeSegments(value: string): Intl.Segments;
|
|
2
|
+
export declare function terminalGraphemeWidth(segment: string): number;
|
|
3
|
+
export declare function terminalStringWidth(value: string): number;
|
|
2
4
|
export declare function previousGraphemeOffset(text: string, offset: number): number;
|
|
3
5
|
export declare function nextGraphemeOffset(text: string, offset: number): number;
|
|
4
|
-
//# sourceMappingURL=grapheme.d.ts.map
|
|
@@ -1,7 +1,58 @@
|
|
|
1
1
|
const graphemeSegmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
2
|
+
/*
|
|
3
|
+
* Width rules and East Asian Width ranges adapted from string-width and
|
|
4
|
+
* get-east-asian-width. Copyright (c) Sindre Sorhus <sindresorhus@gmail.com>.
|
|
5
|
+
*
|
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
* furnished to do so, subject to the following conditions:
|
|
12
|
+
*
|
|
13
|
+
* The above copyright notice and this permission notice shall be included in
|
|
14
|
+
* all copies or substantial portions of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
* SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
const fullWidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];
|
|
25
|
+
const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];
|
|
26
|
+
const zeroWidthCluster = new RegExp('^(?:\\p{Default_Ignorable_Code_Point}|\\p{Control}|\\p{Mark}|\\p{Surrogate})+$', 'v');
|
|
27
|
+
const leadingNonPrinting = new RegExp('^[\\p{Default_Ignorable_Code_Point}\\p{Control}\\p{Format}\\p{Mark}\\p{Surrogate}]+', 'v');
|
|
28
|
+
const rgiEmoji = new RegExp('^\\p{RGI_Emoji}$', 'v');
|
|
2
29
|
export function graphemeSegments(value) {
|
|
3
30
|
return graphemeSegmenter.segment(value);
|
|
4
31
|
}
|
|
32
|
+
export function terminalGraphemeWidth(segment) {
|
|
33
|
+
if (segment.length === 0 || zeroWidthCluster.test(segment))
|
|
34
|
+
return 0;
|
|
35
|
+
if (rgiEmoji.test(segment))
|
|
36
|
+
return 2;
|
|
37
|
+
const base = segment.replace(leadingNonPrinting, '');
|
|
38
|
+
const codePoint = base.codePointAt(0);
|
|
39
|
+
if (codePoint === undefined)
|
|
40
|
+
return 0;
|
|
41
|
+
let width = isInRanges(fullWidthRanges, codePoint) || isInRanges(wideRanges, codePoint) ? 2 : 1;
|
|
42
|
+
for (const character of base.slice(String.fromCodePoint(codePoint).length)) {
|
|
43
|
+
const trailing = character.codePointAt(0);
|
|
44
|
+
if (trailing !== undefined && trailing >= 0xff00 && trailing <= 0xffef) {
|
|
45
|
+
width += isInRanges(fullWidthRanges, trailing) || isInRanges(wideRanges, trailing) ? 2 : 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return width;
|
|
49
|
+
}
|
|
50
|
+
export function terminalStringWidth(value) {
|
|
51
|
+
let width = 0;
|
|
52
|
+
for (const { segment } of graphemeSegments(value))
|
|
53
|
+
width += terminalGraphemeWidth(segment);
|
|
54
|
+
return width;
|
|
55
|
+
}
|
|
5
56
|
export function previousGraphemeOffset(text, offset) {
|
|
6
57
|
let previous = 0;
|
|
7
58
|
for (const segment of graphemeSegments(text)) {
|
|
@@ -18,4 +69,20 @@ export function nextGraphemeOffset(text, offset) {
|
|
|
18
69
|
}
|
|
19
70
|
return text.length;
|
|
20
71
|
}
|
|
72
|
+
function isInRanges(ranges, codePoint) {
|
|
73
|
+
let low = 0;
|
|
74
|
+
let high = Math.floor(ranges.length / 2) - 1;
|
|
75
|
+
while (low <= high) {
|
|
76
|
+
const middle = Math.floor((low + high) / 2) * 2;
|
|
77
|
+
const start = ranges[middle];
|
|
78
|
+
const end = ranges[middle + 1];
|
|
79
|
+
if (codePoint < start)
|
|
80
|
+
high = middle / 2 - 1;
|
|
81
|
+
else if (codePoint > end)
|
|
82
|
+
low = middle / 2 + 1;
|
|
83
|
+
else
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
21
88
|
//# sourceMappingURL=grapheme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/internal/grapheme.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAErF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAAc;IACjE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM;YAAE,MAAM;QACnC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAc;IAC7D,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,KAAK,GAAG,MAAM;YAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"grapheme.js","sourceRoot":"","sources":["../../src/internal/grapheme.ts"],"names":[],"mappings":"AAAA,MAAM,iBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,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"}
|
|
@@ -31,4 +31,3 @@ export interface MenuControl<ID extends StableID> {
|
|
|
31
31
|
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
32
32
|
}
|
|
33
33
|
export declare function createMenuControl<ID extends StableID>(options: MenuControlOptions<ID>): Result<MenuControl<ID>>;
|
|
34
|
-
//# sourceMappingURL=menu-control.d.ts.map
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import { applyMenuEvent, tryCreateMenuModel, tryCreateMenuState, } from '@sectile/core/menu';
|
|
2
|
-
import {
|
|
2
|
+
import { createControlledComponentController, tryCreateDisabledIdentitySet, } from '@sectile/core/adapter-runtime';
|
|
3
3
|
export function createMenuControl(options) {
|
|
4
4
|
const model = tryCreateMenuModel(options.items);
|
|
5
5
|
if (!model.ok)
|
|
6
6
|
return model;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
ok: false,
|
|
12
|
-
error: {
|
|
13
|
-
class: 'construction',
|
|
14
|
-
code: 'disabled-item-outside-domain',
|
|
15
|
-
message: 'Every disabled menu item must exist in the menu tree.',
|
|
16
|
-
details: { id },
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
}
|
|
7
|
+
const disabledResult = tryCreateDisabledIdentitySet({ contains: (id) => model.value.tree.has(id) }, options.disabledItems);
|
|
8
|
+
if (!disabledResult.ok)
|
|
9
|
+
return disabledResult;
|
|
10
|
+
const disabled = disabledResult.value;
|
|
21
11
|
const suppliedDisabled = options.policies?.disabled;
|
|
22
12
|
const policies = {
|
|
23
13
|
...options.policies,
|
|
@@ -27,26 +17,22 @@ export function createMenuControl(options) {
|
|
|
27
17
|
const initialOpen = options.kind === 'menu-button'
|
|
28
18
|
? options.open ?? options.defaultOpen ?? false
|
|
29
19
|
: true;
|
|
30
|
-
const runtime =
|
|
20
|
+
const runtime = createControlledComponentController({
|
|
21
|
+
controlled: openControlled,
|
|
31
22
|
interaction: options,
|
|
32
23
|
initial: tryCreateMenuState(model.value.tree, initialOpen, initialOpen ? options.defaultHighlightedValue ?? null : null, []),
|
|
33
24
|
reducer: (state, event) => applyMenuEvent(model.value.tree, state, event, policies),
|
|
34
|
-
|
|
35
|
-
const open = options.kind === 'menu-button'
|
|
36
|
-
? openControlled ? previous.open : proposed.open
|
|
37
|
-
: true;
|
|
25
|
+
create: (requestedOpen, proposed) => {
|
|
26
|
+
const open = options.kind === 'menu-button' ? requestedOpen : true;
|
|
38
27
|
return tryCreateMenuState(model.value.tree, open, open ? proposed.cursor.current : null, open ? proposed.openPath : []);
|
|
39
28
|
},
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
options.onOpenChange?.(proposed.open);
|
|
43
|
-
},
|
|
44
|
-
toEffect: (command) => command,
|
|
29
|
+
read: (state) => state.open,
|
|
30
|
+
onChange: (open) => options.onOpenChange?.(open),
|
|
45
31
|
});
|
|
46
32
|
return runtime.ok
|
|
47
33
|
? {
|
|
48
34
|
ok: true,
|
|
49
|
-
value: new TerminalMenuControl(options, model.value.tree, runtime.value
|
|
35
|
+
value: new TerminalMenuControl(options, model.value.tree, runtime.value),
|
|
50
36
|
}
|
|
51
37
|
: runtime;
|
|
52
38
|
}
|
|
@@ -54,31 +40,18 @@ class TerminalMenuControl {
|
|
|
54
40
|
#options;
|
|
55
41
|
#tree;
|
|
56
42
|
#runtime;
|
|
57
|
-
#openControlled;
|
|
58
43
|
#typeaheadBuffer = '';
|
|
59
44
|
#lastTypeaheadAt = Number.NEGATIVE_INFINITY;
|
|
60
|
-
constructor(options, tree, runtime
|
|
45
|
+
constructor(options, tree, runtime) {
|
|
61
46
|
this.#options = options;
|
|
62
47
|
this.#tree = tree;
|
|
63
48
|
this.#runtime = runtime;
|
|
64
|
-
this.#openControlled = openControlled;
|
|
65
49
|
}
|
|
66
50
|
getSnapshot() {
|
|
67
51
|
return this.#runtime.getSnapshot();
|
|
68
52
|
}
|
|
69
53
|
syncControlledValue(open) {
|
|
70
|
-
|
|
71
|
-
return {
|
|
72
|
-
ok: false,
|
|
73
|
-
error: {
|
|
74
|
-
class: 'construction',
|
|
75
|
-
code: 'uncontrolled-controller-sync',
|
|
76
|
-
message: 'Only a controlled menu button can synchronize open state.',
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
const state = this.getSnapshot().state;
|
|
81
|
-
const result = this.#runtime.replace(tryCreateMenuState(this.#tree, open, open ? state.cursor.current : null, open ? state.openPath : []));
|
|
54
|
+
const result = this.#runtime.syncControlledValue(open);
|
|
82
55
|
if (result.ok)
|
|
83
56
|
this.#options.onUpdate?.();
|
|
84
57
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-control.js","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GAKnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"menu-control.js","sourceRoot":"","sources":["../../src/internal/menu-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ export interface TerminalPopupConnection<State, Event> {
|
|
|
8
8
|
handleEvent(event: Event): boolean;
|
|
9
9
|
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
10
10
|
}
|
|
11
|
-
export interface Options<State, Event, Command> {
|
|
11
|
+
export interface Options<State, Event, Command extends object> {
|
|
12
12
|
readonly controlled: boolean;
|
|
13
13
|
readonly initial: Result<State>;
|
|
14
14
|
readonly reducer: (state: State, event: Event) => Result<MachineUpdate<State, Command>>;
|
|
@@ -20,5 +20,4 @@ export interface Options<State, Event, Command> {
|
|
|
20
20
|
readonly onUpdate?: (() => void) | undefined;
|
|
21
21
|
readonly interaction?: InteractionStateInput;
|
|
22
22
|
}
|
|
23
|
-
export declare function createTerminalPopup<State, Event, Command>(options: Options<State, Event, Command>): Result<TerminalPopupConnection<State, Event>>;
|
|
24
|
-
//# sourceMappingURL=popup-control.d.ts.map
|
|
23
|
+
export declare function createTerminalPopup<State, Event, Command extends object>(options: Options<State, Event, Command>): Result<TerminalPopupConnection<State, Event>>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createControlledComponentController } from '@sectile/core/adapter-runtime';
|
|
2
2
|
export function createTerminalPopup(options) {
|
|
3
|
-
const runtime =
|
|
4
|
-
options.onOpenChange?.(options.read(proposed)); }, toEffect: (command) => command, interaction: options.interaction });
|
|
3
|
+
const runtime = createControlledComponentController({ controlled: options.controlled, initial: options.initial, reducer: options.reducer, create: options.create, read: options.read, onChange: (open) => options.onOpenChange?.(open), ...(options.interaction === undefined ? {} : { interaction: options.interaction }) });
|
|
5
4
|
if (!runtime.ok)
|
|
6
5
|
return runtime;
|
|
7
6
|
return { ok: true, value: new TerminalPopup(options, runtime.value) };
|
|
@@ -11,8 +10,7 @@ class TerminalPopup {
|
|
|
11
10
|
#runtime;
|
|
12
11
|
constructor(options, runtime) { this.#options = options; this.#runtime = runtime; }
|
|
13
12
|
getSnapshot() { return this.#runtime.getSnapshot(); }
|
|
14
|
-
syncControlledValue(open) {
|
|
15
|
-
return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled popup cannot be synchronized externally.' } }; const result = this.#runtime.replace(this.#options.create(open, this.#runtime.getSnapshot().state)); if (result.ok)
|
|
13
|
+
syncControlledValue(open) { const result = this.#runtime.syncControlledValue(open); if (result.ok)
|
|
16
14
|
this.#options.onUpdate?.(); return result; }
|
|
17
15
|
handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
|
|
18
16
|
for (const command of result.commands)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popup-control.js","sourceRoot":"","sources":["../../src/internal/popup-control.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"popup-control.js","sourceRoot":"","sources":["../../src/internal/popup-control.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mCAAmC,EAAsC,MAAM,+BAA+B,CAAC;AAIxH,MAAM,UAAU,mBAAmB,CAAuC,OAAuC;IAC/G,MAAM,OAAO,GAAG,mCAAmC,CAAiC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9V,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AACD,MAAM,aAAa;IACR,QAAQ,CAAiC;IAAU,QAAQ,CAAgE;IACpI,YAAmB,OAAuC,EAAE,OAAsE,IAAI,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAClL,WAAW,KAA8B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9E,mBAAmB,CAAC,IAAa,IAAqC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC;IACzL,WAAW,CAAC,KAAY,IAAa,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACvO,mBAAmB,CAAC,KAA4B,IAAa,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;CACrJ"}
|
|
@@ -14,4 +14,3 @@ export type TerminalTemporalController<State, Event, Effect> = SemanticControlle
|
|
|
14
14
|
export declare function createTerminalTemporalController<State, Event, Command, Effect>(options: SemanticControllerOptions<State, Event, Command, Effect, TemporalErrorCode>): TerminalTemporalResult<TerminalTemporalController<State, Event, Effect>>;
|
|
15
15
|
export declare function createTerminalTemporalFacadeConnection<Options extends TerminalFacadeOptions, Connection extends TerminalSnapshotConnection>(options: Options, construct: (options: Options) => TerminalTemporalResult<Connection>): TerminalTemporalResult<FacadeConnection<Connection>>;
|
|
16
16
|
export {};
|
|
17
|
-
//# sourceMappingURL=result.d.ts.map
|
|
@@ -2,4 +2,3 @@ import type { TextEditingState } from '@sectile/core/text';
|
|
|
2
2
|
import type { TerminalKeyboardInput } from '../keyboard.js';
|
|
3
3
|
import type { TextInput } from '../text.js';
|
|
4
4
|
export declare function toTerminalTextInput(state: TextEditingState, input: TerminalKeyboardInput): TextInput | null;
|
|
5
|
-
//# sourceMappingURL=text-input.d.ts.map
|
package/dist/keyboard.d.ts
CHANGED
package/dist/layer-stack.d.ts
CHANGED
package/dist/layout.d.ts
CHANGED
package/dist/layout.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { graphemeSegments } from './internal/grapheme.js';
|
|
1
|
+
import { graphemeSegments, terminalGraphemeWidth, terminalStringWidth, } from './internal/grapheme.js';
|
|
3
2
|
export function fitTerminalText(value, width) {
|
|
4
3
|
if (!Number.isSafeInteger(width) || width < 0) {
|
|
5
4
|
throw new RangeError('Terminal text width must be a non-negative safe integer.');
|
|
6
5
|
}
|
|
7
6
|
if (width === 0)
|
|
8
7
|
return '';
|
|
9
|
-
const valueWidth =
|
|
8
|
+
const valueWidth = terminalStringWidth(value);
|
|
10
9
|
if (valueWidth <= width)
|
|
11
10
|
return `${value}${' '.repeat(width - valueWidth)}`;
|
|
12
11
|
const ellipsis = '…';
|
|
13
|
-
const contentWidth = width -
|
|
12
|
+
const contentWidth = width - terminalStringWidth(ellipsis);
|
|
14
13
|
let rendered = '';
|
|
15
14
|
let renderedWidth = 0;
|
|
16
15
|
for (const segment of graphemeSegments(value)) {
|
|
17
|
-
const segmentWidth =
|
|
16
|
+
const segmentWidth = terminalGraphemeWidth(segment.segment);
|
|
18
17
|
if (renderedWidth + segmentWidth > contentWidth)
|
|
19
18
|
break;
|
|
20
19
|
rendered += segment.segment;
|
package/dist/layout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAa;IAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,UAAU,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;IAE5E,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,YAAY,GAAG,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,aAAa,GAAG,YAAY,GAAG,YAAY;YAAE,MAAM;QACvD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;QAC5B,aAAa,IAAI,YAAY,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,QAAQ,EAAE,CAAC;AAC7E,CAAC"}
|
package/dist/listbox.d.ts
CHANGED
|
@@ -95,4 +95,3 @@ export declare function tryCreateListbox<ID extends StableID>(options: ListboxOp
|
|
|
95
95
|
export declare function connectListbox<ID extends StableID>(options: ListboxConnectionOptions<ID>): ListboxConnection<ID>;
|
|
96
96
|
export declare function toListboxEvent<ID extends StableID = StableID>(input: KeyboardInput, orientation?: 'horizontal' | 'vertical'): ListboxEvent<ID> | null;
|
|
97
97
|
export declare function toListboxEffect<ID extends StableID>(command: ListboxCommand<ID>): ListboxEffect<ID>;
|
|
98
|
-
//# sourceMappingURL=listbox.d.ts.map
|
package/dist/menu-button.d.ts
CHANGED
|
@@ -5,4 +5,3 @@ export type MenuButtonOptions<ID extends StableID = StableID> = Omit<MenuControl
|
|
|
5
5
|
export type MenuButtonConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
6
|
export declare function createMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): FacadeConnection<MenuButtonConnection<ID>>;
|
|
7
7
|
export declare function tryCreateMenuButton<ID extends StableID>(options: MenuButtonOptions<ID>): Result<FacadeConnection<MenuButtonConnection<ID>>>;
|
|
8
|
-
//# sourceMappingURL=menu-button.d.ts.map
|
package/dist/menu.d.ts
CHANGED
|
@@ -5,4 +5,3 @@ export type MenuOptions<ID extends StableID = StableID> = Omit<MenuControlOption
|
|
|
5
5
|
export type MenuConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
6
|
export declare function createMenu<ID extends StableID>(options: MenuOptions<ID>): FacadeConnection<MenuConnection<ID>>;
|
|
7
7
|
export declare function tryCreateMenu<ID extends StableID>(options: MenuOptions<ID>): Result<FacadeConnection<MenuConnection<ID>>>;
|
|
8
|
-
//# sourceMappingURL=menu.d.ts.map
|
package/dist/menubar.d.ts
CHANGED
|
@@ -5,4 +5,3 @@ export type MenubarOptions<ID extends StableID = StableID> = Omit<MenuControlOpt
|
|
|
5
5
|
export type MenubarConnection<ID extends StableID = StableID> = MenuControl<ID>;
|
|
6
6
|
export declare function createMenubar<ID extends StableID>(options: MenubarOptions<ID>): FacadeConnection<MenubarConnection<ID>>;
|
|
7
7
|
export declare function tryCreateMenubar<ID extends StableID>(options: MenubarOptions<ID>): Result<FacadeConnection<MenubarConnection<ID>>>;
|
|
8
|
-
//# sourceMappingURL=menubar.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Result, StableID } from '@sectile/core';
|
|
2
|
+
import { type MeterGroupInput, type MeterGroupState } from '@sectile/core/meter-group';
|
|
3
|
+
import type { MeterZone } from '@sectile/core/meter';
|
|
4
|
+
import { type RevisionSnapshot } from '@sectile/core/revision';
|
|
5
|
+
export interface MeterGroupControlledValues<ID extends StableID = StableID> extends MeterGroupInput<ID> {
|
|
6
|
+
}
|
|
7
|
+
export interface MeterGroupOptions<ID extends StableID = StableID> extends MeterGroupControlledValues<ID> {
|
|
8
|
+
readonly onUpdate?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface MeterGroupRenderSegment<ID extends StableID = StableID> {
|
|
11
|
+
readonly id: ID;
|
|
12
|
+
readonly startCell: number;
|
|
13
|
+
readonly cellCount: number;
|
|
14
|
+
}
|
|
15
|
+
export interface MeterGroupRenderPlan<ID extends StableID = StableID> {
|
|
16
|
+
readonly width: number;
|
|
17
|
+
readonly segments: readonly MeterGroupRenderSegment<ID>[];
|
|
18
|
+
readonly remainingStartCell: number;
|
|
19
|
+
readonly remainingCells: number;
|
|
20
|
+
readonly zone: MeterZone;
|
|
21
|
+
}
|
|
22
|
+
export interface MeterGroupConnection<ID extends StableID = StableID> {
|
|
23
|
+
getSnapshot(): RevisionSnapshot<MeterGroupState<ID>>;
|
|
24
|
+
syncControlledValues(values: MeterGroupControlledValues<ID>): Result<RevisionSnapshot<MeterGroupState<ID>>>;
|
|
25
|
+
getRenderPlan(width: number): Result<MeterGroupRenderPlan<ID>>;
|
|
26
|
+
}
|
|
27
|
+
export declare function createMeterGroup<ID extends StableID>(options: MeterGroupOptions<ID>): MeterGroupConnection<ID>;
|
|
28
|
+
export declare function tryCreateMeterGroup<ID extends StableID>(options: MeterGroupOptions<ID>): Result<MeterGroupConnection<ID>>;
|