@sectile/terminal 0.1.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/README.md +15 -1
- package/dist/accordion.d.ts +3 -0
- package/dist/accordion.d.ts.map +1 -1
- package/dist/accordion.js +6 -6
- package/dist/accordion.js.map +1 -1
- package/dist/alert-dialog.d.ts +5 -0
- package/dist/alert-dialog.d.ts.map +1 -1
- package/dist/alert-dialog.js +2 -2
- package/dist/alert-dialog.js.map +1 -1
- 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 +5 -0
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +10 -10
- package/dist/calendar.js.map +1 -1
- package/dist/carousel.d.ts +6 -1
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +6 -6
- package/dist/carousel.js.map +1 -1
- 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.d.ts +2 -0
- package/dist/checkbox.d.ts.map +1 -1
- package/dist/checkbox.js +2 -2
- package/dist/checkbox.js.map +1 -1
- 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 +7 -0
- package/dist/combobox.d.ts.map +1 -1
- package/dist/combobox.js +12 -12
- package/dist/combobox.js.map +1 -1
- package/dist/date-field.d.ts +3 -0
- package/dist/date-field.d.ts.map +1 -1
- package/dist/date-field.js +3 -3
- package/dist/date-field.js.map +1 -1
- package/dist/date-picker.d.ts +4 -0
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +4 -4
- package/dist/date-picker.js.map +1 -1
- 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 +4 -0
- package/dist/date-range-picker.d.ts.map +1 -1
- package/dist/date-range-picker.js +4 -4
- package/dist/date-range-picker.js.map +1 -1
- package/dist/date-time-field.d.ts +3 -0
- package/dist/date-time-field.d.ts.map +1 -1
- package/dist/date-time-field.js +4 -4
- package/dist/date-time-field.js.map +1 -1
- package/dist/date-time-picker.d.ts +4 -0
- package/dist/date-time-picker.d.ts.map +1 -1
- package/dist/date-time-picker.js +6 -5
- package/dist/date-time-picker.js.map +1 -1
- package/dist/date-time-range-picker.d.ts +4 -0
- package/dist/date-time-range-picker.d.ts.map +1 -1
- package/dist/date-time-range-picker.js +6 -5
- package/dist/date-time-range-picker.js.map +1 -1
- package/dist/dialog.d.ts +4 -0
- package/dist/dialog.d.ts.map +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dialog.js.map +1 -1
- package/dist/disclosure.d.ts +2 -0
- package/dist/disclosure.d.ts.map +1 -1
- package/dist/disclosure.js +4 -4
- package/dist/disclosure.js.map +1 -1
- 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 +10 -2
- package/dist/feed.d.ts.map +1 -1
- package/dist/feed.js +77 -19
- package/dist/feed.js.map +1 -1
- 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 +7 -0
- package/dist/grid.d.ts.map +1 -1
- package/dist/grid.js +4 -4
- package/dist/grid.js.map +1 -1
- package/dist/index.d.ts +66 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/controller.js +2 -2
- package/dist/internal/controller.js.map +1 -1
- package/dist/internal/facade.d.ts +2 -1
- package/dist/internal/facade.d.ts.map +1 -1
- package/dist/internal/facade.js.map +1 -1
- package/dist/internal/menu-control.d.ts +1 -1
- package/dist/internal/menu-control.d.ts.map +1 -1
- package/dist/internal/menu-control.js +161 -38
- package/dist/internal/menu-control.js.map +1 -1
- package/dist/internal/semantic-controller.js +4 -4
- package/dist/internal/semantic-controller.js.map +1 -1
- 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/listbox.d.ts +11 -0
- package/dist/listbox.d.ts.map +1 -1
- package/dist/listbox.js +18 -11
- package/dist/listbox.js.map +1 -1
- 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 +2 -0
- package/dist/multi-thumb-slider.d.ts.map +1 -1
- package/dist/multi-thumb-slider.js +8 -8
- package/dist/multi-thumb-slider.js.map +1 -1
- 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 +29 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +124 -6
- package/dist/node.js.map +1 -1
- package/dist/number-field.d.ts +3 -0
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +4 -4
- package/dist/number-field.js.map +1 -1
- package/dist/pagination.d.ts +3 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +5 -5
- package/dist/pagination.js.map +1 -1
- package/dist/pin-input.d.ts +3 -0
- package/dist/pin-input.d.ts.map +1 -1
- package/dist/pin-input.js +3 -3
- package/dist/pin-input.js.map +1 -1
- 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 +4 -0
- package/dist/quantity-field.d.ts.map +1 -1
- package/dist/quantity-field.js +4 -4
- package/dist/quantity-field.js.map +1 -1
- package/dist/radio-group.d.ts +3 -0
- package/dist/radio-group.d.ts.map +1 -1
- package/dist/radio-group.js +6 -6
- package/dist/radio-group.js.map +1 -1
- 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 +1 -0
- package/dist/rating.d.ts.map +1 -1
- package/dist/rating.js.map +1 -1
- 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 +4 -0
- package/dist/select.d.ts.map +1 -1
- package/dist/select.js +5 -5
- package/dist/select.js.map +1 -1
- package/dist/slider.d.ts +3 -0
- package/dist/slider.d.ts.map +1 -1
- package/dist/slider.js +10 -10
- package/dist/slider.js.map +1 -1
- package/dist/spin-button.d.ts +3 -0
- package/dist/spin-button.d.ts.map +1 -1
- package/dist/spin-button.js +6 -6
- package/dist/spin-button.js.map +1 -1
- package/dist/switch.d.ts +2 -0
- package/dist/switch.d.ts.map +1 -1
- package/dist/switch.js +2 -2
- package/dist/switch.js.map +1 -1
- package/dist/tabs.d.ts +4 -0
- package/dist/tabs.d.ts.map +1 -1
- package/dist/tabs.js +6 -6
- package/dist/tabs.js.map +1 -1
- package/dist/tags-input.d.ts +3 -0
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +51 -10
- package/dist/tags-input.js.map +1 -1
- package/dist/text.d.ts +3 -0
- package/dist/text.d.ts.map +1 -1
- package/dist/text.js +6 -6
- package/dist/text.js.map +1 -1
- package/dist/time-field.d.ts +3 -0
- package/dist/time-field.d.ts.map +1 -1
- package/dist/time-field.js +3 -3
- package/dist/time-field.js.map +1 -1
- 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 +2 -0
- package/dist/toggle-button.d.ts.map +1 -1
- package/dist/toggle-button.js +2 -2
- package/dist/toggle-button.js.map +1 -1
- 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 +3 -0
- package/dist/toolbar.d.ts.map +1 -1
- package/dist/toolbar.js +6 -6
- package/dist/toolbar.js.map +1 -1
- package/dist/tooltip.d.ts +2 -0
- package/dist/tooltip.d.ts.map +1 -1
- package/dist/tooltip.js +2 -2
- package/dist/tooltip.js.map +1 -1
- package/dist/tree-grid.d.ts +8 -0
- package/dist/tree-grid.d.ts.map +1 -1
- package/dist/tree-grid.js +9 -9
- package/dist/tree-grid.js.map +1 -1
- package/dist/tree-view.d.ts +14 -6
- package/dist/tree-view.d.ts.map +1 -1
- package/dist/tree-view.js +27 -24
- package/dist/tree-view.js.map +1 -1
- 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 +103 -3
|
@@ -3,7 +3,7 @@ import { compareDateValues } from '@sectile/core/date-field';
|
|
|
3
3
|
import { formatDateTimeRange } from '@sectile/core/date-time-field';
|
|
4
4
|
import { createDatePickerMonth } from '@sectile/core/date-picker';
|
|
5
5
|
import { addTimeMilliseconds } from '@sectile/core/time-field';
|
|
6
|
-
import { applyDateTimeRangePickerEvent,
|
|
6
|
+
import { applyDateTimeRangePickerEvent, tryCreateDateTimeRangePickerState, } from '@sectile/core/date-time-range-picker';
|
|
7
7
|
import { createFacadeConnection } from './internal/facade.js';
|
|
8
8
|
import { createSemanticController } from './internal/semantic-controller.js';
|
|
9
9
|
import { toDatePickerEvent } from './date-picker.js';
|
|
@@ -29,7 +29,7 @@ function construct(options) {
|
|
|
29
29
|
...(options.required === undefined ? {} : { required: options.required }),
|
|
30
30
|
});
|
|
31
31
|
const runtime = createSemanticController({
|
|
32
|
-
initial:
|
|
32
|
+
initial: tryCreateDateTimeRangePickerState({
|
|
33
33
|
...(requestedValue === undefined ? {} : { value: requestedValue }),
|
|
34
34
|
calendar: {
|
|
35
35
|
...(requestedHighlight === undefined ? {} : { highlighted: requestedHighlight }),
|
|
@@ -37,7 +37,7 @@ function construct(options) {
|
|
|
37
37
|
},
|
|
38
38
|
}),
|
|
39
39
|
reducer: (state, event) => applyDateTimeRangePickerEvent(state, event, policies),
|
|
40
|
-
reconcile: (previous, proposed) =>
|
|
40
|
+
reconcile: (previous, proposed) => tryCreateDateTimeRangePickerState({
|
|
41
41
|
value: controls.value ? previous.value : proposed.value,
|
|
42
42
|
anchor: proposed.anchor,
|
|
43
43
|
startTime: controls.value ? previous.startTime : proposed.startTime,
|
|
@@ -79,7 +79,7 @@ class TerminalDateTimeRangePicker {
|
|
|
79
79
|
getSnapshot() { return this.runtime.getSnapshot(); }
|
|
80
80
|
getMonth() {
|
|
81
81
|
const state = this.getSnapshot().state.calendar;
|
|
82
|
-
return
|
|
82
|
+
return createDatePickerMonth(state.view, this.options.policies?.date?.weekStartsOn);
|
|
83
83
|
}
|
|
84
84
|
syncControlledValues(values) {
|
|
85
85
|
if (this.controls.value !== (values.value !== undefined)
|
|
@@ -91,7 +91,7 @@ class TerminalDateTimeRangePicker {
|
|
|
91
91
|
const highlighted = this.controls.highlighted
|
|
92
92
|
? values.highlightedValue
|
|
93
93
|
: state.calendar.highlighted;
|
|
94
|
-
const result = this.runtime.replace(
|
|
94
|
+
const result = this.runtime.replace(tryCreateDateTimeRangePickerState({
|
|
95
95
|
value: this.controls.value ? values.value : state.value,
|
|
96
96
|
anchor: state.anchor,
|
|
97
97
|
startTime: state.startTime,
|
|
@@ -99,6 +99,7 @@ class TerminalDateTimeRangePicker {
|
|
|
99
99
|
calendar: {
|
|
100
100
|
highlighted,
|
|
101
101
|
view: { year: highlighted.year, month: highlighted.month },
|
|
102
|
+
viewMode: state.calendar.viewMode,
|
|
102
103
|
open: this.controls.open ? values.open : state.calendar.open,
|
|
103
104
|
},
|
|
104
105
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-time-range-picker.js","sourceRoot":"","sources":["../src/date-time-range-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAkB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAsB,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EACL,6BAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"date-time-range-picker.js","sourceRoot":"","sources":["../src/date-time-range-picker.ts"],"names":[],"mappings":"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"}
|
package/dist/dialog.d.ts
CHANGED
|
@@ -11,6 +11,10 @@ export interface DialogOptions {
|
|
|
11
11
|
readonly onFocusRestore?: () => void;
|
|
12
12
|
readonly onUpdate?: () => void;
|
|
13
13
|
}
|
|
14
|
+
export type DialogOpenChangeHandler = NonNullable<DialogOptions['onOpenChange']>;
|
|
15
|
+
export type DialogInitialFocusHandler = NonNullable<DialogOptions['onInitialFocus']>;
|
|
16
|
+
export type DialogFocusRestoreHandler = NonNullable<DialogOptions['onFocusRestore']>;
|
|
17
|
+
export type DialogUpdateHandler = NonNullable<DialogOptions['onUpdate']>;
|
|
14
18
|
export type DialogConnection = TerminalPopupConnection<DialogState, DialogEvent>;
|
|
15
19
|
export declare function createDialog(o?: DialogOptions): FacadeConnection<DialogConnection>;
|
|
16
20
|
export declare function tryCreateDialog(o?: DialogOptions): Result<FacadeConnection<DialogConnection>>;
|
package/dist/dialog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAA8D,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAChG,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAEpR,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;AACjF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACjF,wBAAgB,YAAY,CAAC,CAAC,GAAE,aAAkB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAEtF;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAE,aAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAEjG"}
|
package/dist/dialog.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createFacadeConnection } from './internal/facade.js';
|
|
2
2
|
import { unwrap } from '@sectile/core/result';
|
|
3
|
-
import { applyDialogEvent,
|
|
3
|
+
import { applyDialogEvent, tryCreateDialogState } from '@sectile/core/dialog';
|
|
4
4
|
import { createTerminalPopup } from './internal/popup-control.js';
|
|
5
5
|
export function createDialog(o = {}) {
|
|
6
6
|
return unwrap(tryCreateDialog(o));
|
|
@@ -8,5 +8,5 @@ export function createDialog(o = {}) {
|
|
|
8
8
|
export function tryCreateDialog(o = {}) {
|
|
9
9
|
return createFacadeConnection(o, (o) => tryCreateDialogConnection(o));
|
|
10
10
|
}
|
|
11
|
-
function tryCreateDialogConnection(o = {}) { return createTerminalPopup({ controlled: o.open !== undefined, initial:
|
|
11
|
+
function tryCreateDialogConnection(o = {}) { return createTerminalPopup({ controlled: o.open !== undefined, initial: tryCreateDialogState(o.open ?? o.defaultOpen ?? false), reducer: applyDialogEvent, create: tryCreateDialogState, read: (s) => s.open, close: 'close', interaction: o, onOpenChange: o.onOpenChange, command: (c) => c.type === 'request-initial-focus' ? o.onInitialFocus?.() : o.onFocusRestore?.(), onUpdate: o.onUpdate }); }
|
|
12
12
|
//# sourceMappingURL=dialog.js.map
|
package/dist/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAA0D,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAE,mBAAmB,EAAgC,MAAM,6BAA6B,CAAC;AAQhG,MAAM,UAAU,YAAY,CAAC,CAAC,GAAkB,EAAE;IAChD,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAC,GAAkB,EAAE;IACnD,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,CAAC,GAAkB,EAAE,IAA8B,OAAO,mBAAmB,CAA0C,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/disclosure.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface DisclosureOptions {
|
|
|
10
10
|
readonly onOpenChange?: (open: boolean) => void;
|
|
11
11
|
readonly onUpdate?: () => void;
|
|
12
12
|
}
|
|
13
|
+
export type DisclosureOpenChangeHandler = NonNullable<DisclosureOptions['onOpenChange']>;
|
|
14
|
+
export type DisclosureUpdateHandler = NonNullable<DisclosureOptions['onUpdate']>;
|
|
13
15
|
export interface DisclosureConnection {
|
|
14
16
|
getSnapshot(): RevisionSnapshot<DisclosureState>;
|
|
15
17
|
syncControlledValue(open: boolean): Result<RevisionSnapshot<DisclosureState>>;
|
package/dist/disclosure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAEmB,KAAK,eAAe,EAAE,KAAK,eAAe,EACnE,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"disclosure.d.ts","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAEmB,KAAK,eAAe,EAAE,KAAK,eAAe,EACnE,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,2BAA2B,GAAG,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;AACzF,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;AACjF,MAAM,WAAW,oBAAoB;IACnC,WAAW,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9E,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;IAC7C,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;CAC5D;AACD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAExG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAEnH;AAeD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI,CAEtF"}
|
package/dist/disclosure.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createFacadeConnection } from './internal/facade.js';
|
|
2
2
|
import { unwrap } from '@sectile/core/result';
|
|
3
|
-
import { applyDisclosureEvent,
|
|
3
|
+
import { applyDisclosureEvent, tryCreateDisclosureState, } from '@sectile/core/disclosure';
|
|
4
4
|
import { createSemanticController } from './internal/semantic-controller.js';
|
|
5
5
|
export function createDisclosure(options = {}) {
|
|
6
6
|
return unwrap(tryCreateDisclosure(options));
|
|
@@ -11,9 +11,9 @@ export function tryCreateDisclosure(options = {}) {
|
|
|
11
11
|
function tryCreateDisclosureConnection(options = {}) {
|
|
12
12
|
const controlled = options.open !== undefined;
|
|
13
13
|
const runtime = createSemanticController({
|
|
14
|
-
initial:
|
|
14
|
+
initial: tryCreateDisclosureState(options.open ?? options.defaultOpen ?? false),
|
|
15
15
|
reducer: applyDisclosureEvent,
|
|
16
|
-
reconcile: (previous, proposed) =>
|
|
16
|
+
reconcile: (previous, proposed) => tryCreateDisclosureState(controlled ? previous.open : proposed.open),
|
|
17
17
|
notify: (previous, proposed) => { if (previous.open !== proposed.open)
|
|
18
18
|
options.onOpenChange?.(proposed.open); },
|
|
19
19
|
toEffect: (command) => command,
|
|
@@ -39,7 +39,7 @@ class TerminalDisclosureConnection {
|
|
|
39
39
|
syncControlledValue(open) {
|
|
40
40
|
if (!this.#controlled)
|
|
41
41
|
return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled disclosure cannot be synchronized externally.' } };
|
|
42
|
-
const result = this.#runtime.replace(
|
|
42
|
+
const result = this.#runtime.replace(tryCreateDisclosureState(open));
|
|
43
43
|
if (result.ok)
|
|
44
44
|
this.#options.onUpdate?.();
|
|
45
45
|
return result;
|
package/dist/disclosure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"disclosure.js","sourceRoot":"","sources":["../src/disclosure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,oBAAoB,EAAE,wBAAwB,GAE/C,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,wBAAwB,EAA2B,MAAM,mCAAmC,CAAC;AAkBtG,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAsB,EAAE;IAC9D,OAAO,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAsB,EAAE;IACjE,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAO,GAAsB,EAAE;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,wBAAwB,CAAyE;QAC/G,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAC/E,OAAO,EAAE,oBAAoB;QAC7B,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvG,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;YAAE,OAAO,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/G,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;QAC9B,WAAW,EAAE,OAAO;KACrB,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;AACnG,CAAC;AACD,MAAM,UAAU,iBAAiB,CAAC,KAA4B;IAC5D,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AACD,MAAM,4BAA4B;IACvB,QAAQ,CAAoB;IAC5B,QAAQ,CAA0E;IAClF,WAAW,CAAU;IAC9B,YAAmB,OAA0B,EAAE,OAAgF,EAAE,UAAmB;QAClJ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAAC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClF,CAAC;IACM,WAAW,KAAwC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxF,mBAAmB,CAAC,IAAa;QACtC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,+DAA+D,EAAE,EAAE,CAAC;QAC9L,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACM,WAAW,CAAC,KAAsB,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;IACzJ,mBAAmB,CAAC,KAA4B;QACrD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAAC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3G,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result } from '@sectile/core';
|
|
3
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type EditableEvent, type EditablePolicies, type EditableState } from '@sectile/core/editable';
|
|
5
|
+
import { type TerminalKeyboardInput } from './keyboard.js';
|
|
6
|
+
export interface EditableOptions {
|
|
7
|
+
readonly value?: string;
|
|
8
|
+
readonly defaultValue?: string;
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
readonly readOnly?: boolean;
|
|
11
|
+
readonly policies?: EditablePolicies;
|
|
12
|
+
readonly onValueChange?: (value: string) => void;
|
|
13
|
+
readonly onEditingChange?: (editing: boolean) => void;
|
|
14
|
+
readonly onUpdate?: () => void;
|
|
15
|
+
}
|
|
16
|
+
export type EditableValueChangeHandler = NonNullable<EditableOptions['onValueChange']>;
|
|
17
|
+
export type EditableEditingChangeHandler = NonNullable<EditableOptions['onEditingChange']>;
|
|
18
|
+
export type EditableUpdateHandler = NonNullable<EditableOptions['onUpdate']>;
|
|
19
|
+
export interface EditableConnection {
|
|
20
|
+
getSnapshot(): RevisionSnapshot<EditableState>;
|
|
21
|
+
syncControlledValue(value: string): Result<RevisionSnapshot<EditableState>>;
|
|
22
|
+
handleEvent(event: EditableEvent): boolean;
|
|
23
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare function createEditable(options?: EditableOptions): FacadeConnection<EditableConnection>;
|
|
26
|
+
export declare function tryCreateEditable(options?: EditableOptions): Result<FacadeConnection<EditableConnection>>;
|
|
27
|
+
//# sourceMappingURL=editable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../src/editable.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC3F,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAE7E,MAAM,WAAW,kBAAkB;IACjC,WAAW,IAAI,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC/C,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5E,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAC3C,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;CAC5D;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAElG;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAE7G"}
|
package/dist/editable.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { applyEditableEvent, tryCreateEditableState, } from '@sectile/core/editable';
|
|
4
|
+
import { createSemanticController } from './internal/semantic-controller.js';
|
|
5
|
+
import { applyTerminalTextInput } from './keyboard.js';
|
|
6
|
+
export function createEditable(options = {}) {
|
|
7
|
+
return unwrap(tryCreateEditable(options));
|
|
8
|
+
}
|
|
9
|
+
export function tryCreateEditable(options = {}) {
|
|
10
|
+
return createFacadeConnection(options, (resolved) => tryCreateEditableConnection(resolved));
|
|
11
|
+
}
|
|
12
|
+
function tryCreateEditableConnection(options) {
|
|
13
|
+
const controlled = options.value !== undefined;
|
|
14
|
+
const runtime = createSemanticController({
|
|
15
|
+
initial: tryCreateEditableState(options.value ?? options.defaultValue ?? ''),
|
|
16
|
+
reducer: (state, event) => applyEditableEvent(state, event, options.policies),
|
|
17
|
+
reconcile: (previous, proposed) => tryCreateEditableState(controlled ? previous.value : proposed.value, proposed.editing ? proposed.draft : controlled ? previous.value : proposed.value, proposed.editing),
|
|
18
|
+
notify: (previous, proposed) => {
|
|
19
|
+
if (previous.value !== proposed.value)
|
|
20
|
+
options.onValueChange?.(proposed.value);
|
|
21
|
+
if (previous.editing !== proposed.editing)
|
|
22
|
+
options.onEditingChange?.(proposed.editing);
|
|
23
|
+
},
|
|
24
|
+
toEffect: (command) => command,
|
|
25
|
+
interaction: options,
|
|
26
|
+
});
|
|
27
|
+
return runtime.ok
|
|
28
|
+
? { ok: true, value: new TerminalEditable(options, runtime.value, controlled) }
|
|
29
|
+
: runtime;
|
|
30
|
+
}
|
|
31
|
+
class TerminalEditable {
|
|
32
|
+
#options;
|
|
33
|
+
#runtime;
|
|
34
|
+
#controlled;
|
|
35
|
+
constructor(options, runtime, controlled) {
|
|
36
|
+
this.#options = options;
|
|
37
|
+
this.#runtime = runtime;
|
|
38
|
+
this.#controlled = controlled;
|
|
39
|
+
}
|
|
40
|
+
getSnapshot() {
|
|
41
|
+
return this.#runtime.getSnapshot();
|
|
42
|
+
}
|
|
43
|
+
syncControlledValue(value) {
|
|
44
|
+
if (!this.#controlled) {
|
|
45
|
+
return { ok: false, error: { class: 'construction', code: 'uncontrolled-controller-sync', message: 'An uncontrolled editable cannot be synchronized externally.' } };
|
|
46
|
+
}
|
|
47
|
+
const state = this.getSnapshot().state;
|
|
48
|
+
const result = this.#runtime.replace(tryCreateEditableState(value, state.editing ? state.draft : value, state.editing));
|
|
49
|
+
if (result.ok)
|
|
50
|
+
this.#options.onUpdate?.();
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
handleEvent(event) {
|
|
54
|
+
const result = this.#runtime.handle(event);
|
|
55
|
+
if (result.ok)
|
|
56
|
+
this.#options.onUpdate?.();
|
|
57
|
+
return result.ok;
|
|
58
|
+
}
|
|
59
|
+
handleKeyboardInput(input) {
|
|
60
|
+
if (input.key === 'enter')
|
|
61
|
+
return this.handleEvent(this.getSnapshot().state.editing ? 'commit' : 'start-edit');
|
|
62
|
+
if (input.key === 'escape')
|
|
63
|
+
return this.handleEvent('cancel');
|
|
64
|
+
if (!this.getSnapshot().state.editing)
|
|
65
|
+
return false;
|
|
66
|
+
const draft = applyTerminalTextInput(this.getSnapshot().state.draft, input);
|
|
67
|
+
return draft === null ? false : this.handleEvent({ type: 'input', text: draft });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=editable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable.js","sourceRoot":"","sources":["../src/editable.ts"],"names":[],"mappings":"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"}
|
package/dist/feed.d.ts
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import { type FacadeConnection } from './internal/facade.js';
|
|
2
1
|
import type { Result, StableID } from '@sectile/core';
|
|
3
2
|
import { type FeedDirection, type FeedEvent, type FeedState } from '@sectile/core/feed';
|
|
4
3
|
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
5
5
|
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
6
6
|
export interface FeedOptions<ID extends StableID = StableID> {
|
|
7
7
|
readonly items: readonly ID[];
|
|
8
8
|
readonly revision?: number;
|
|
9
|
+
readonly start?: number;
|
|
10
|
+
readonly total?: number | null;
|
|
9
11
|
readonly defaultHighlightedValue?: ID | null;
|
|
10
12
|
readonly disabled?: boolean;
|
|
11
13
|
readonly onHighlightedValueChange?: (value: ID | null) => void;
|
|
12
|
-
readonly onRequestWindow?: (direction: FeedDirection, anchor: ID | null, revision: number) => void;
|
|
14
|
+
readonly onRequestWindow?: (direction: FeedDirection, anchor: ID | null, revision: number, requestGeneration: number) => void;
|
|
13
15
|
readonly onUpdate?: () => void;
|
|
14
16
|
}
|
|
17
|
+
export type FeedHighlightedValueChangeHandler<ID extends StableID = StableID> = NonNullable<FeedOptions<ID>['onHighlightedValueChange']>;
|
|
18
|
+
export type FeedRequestWindowHandler<ID extends StableID = StableID> = NonNullable<FeedOptions<ID>['onRequestWindow']>;
|
|
19
|
+
export type FeedUpdateHandler<ID extends StableID = StableID> = NonNullable<FeedOptions<ID>['onUpdate']>;
|
|
15
20
|
export interface FeedWindow<ID extends StableID = StableID> {
|
|
16
21
|
readonly items: readonly ID[];
|
|
17
22
|
readonly revision: number;
|
|
23
|
+
readonly requestGeneration?: number;
|
|
24
|
+
readonly start?: number;
|
|
25
|
+
readonly total?: number | null;
|
|
18
26
|
readonly highlightedValue?: ID | null;
|
|
19
27
|
}
|
|
20
28
|
export interface FeedConnection<ID extends StableID = StableID> {
|
package/dist/feed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/feed.js
CHANGED
|
@@ -1,32 +1,90 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { applyFeedEvent, synchronizeFeedWindow, tryCreateFeedState, } from '@sectile/core/feed';
|
|
2
2
|
import { unwrap } from '@sectile/core/result';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
4
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
5
5
|
import { createSemanticController } from './internal/semantic-controller.js';
|
|
6
6
|
export function createFeed(options) {
|
|
7
7
|
return unwrap(tryCreateFeed(options));
|
|
8
8
|
}
|
|
9
9
|
export function tryCreateFeed(options) {
|
|
10
|
-
return createFacadeConnection(options, (
|
|
10
|
+
return createFacadeConnection(options, (normalized) => tryCreateFeedConnection(normalized));
|
|
11
|
+
}
|
|
12
|
+
function tryCreateFeedConnection(options) {
|
|
13
|
+
const items = tryCreateSequence(options.items);
|
|
14
|
+
if (!items.ok)
|
|
15
|
+
return items;
|
|
16
|
+
const model = { value: items.value };
|
|
17
|
+
const runtime = createSemanticController({
|
|
18
|
+
initial: tryCreateFeedState(items.value, options.defaultHighlightedValue ?? options.items[0] ?? null, options.revision ?? 0, null, { start: options.start ?? 0, total: options.total ?? null }),
|
|
19
|
+
reducer: (state, event) => applyFeedEvent(model.value, state, event),
|
|
20
|
+
notify: (previous, proposed) => {
|
|
21
|
+
if (previous.cursor.current !== proposed.cursor.current) {
|
|
22
|
+
options.onHighlightedValueChange?.(proposed.cursor.current);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
toEffect: (command) => command,
|
|
26
|
+
interaction: options,
|
|
27
|
+
});
|
|
28
|
+
return runtime.ok
|
|
29
|
+
? { ok: true, value: new TerminalFeed(options, model, runtime.value) }
|
|
30
|
+
: runtime;
|
|
11
31
|
}
|
|
12
|
-
function tryCreateFeedConnection(options) { const items = createSequence(options.items); if (!items.ok)
|
|
13
|
-
return items; const model = { value: items.value }; const runtime = createSemanticController({ initial: createFeedState(items.value, options.defaultHighlightedValue ?? options.items[0] ?? null, options.revision ?? 0), reducer: (state, event) => applyFeedEvent(model.value, state, event), notify: (previous, proposed) => { if (previous.cursor.current !== proposed.cursor.current)
|
|
14
|
-
options.onHighlightedValueChange?.(proposed.cursor.current); }, toEffect: (command) => command, interaction: options }); return runtime.ok ? { ok: true, value: new TerminalFeed(options, model, runtime.value) } : runtime; }
|
|
15
32
|
class TerminalFeed {
|
|
16
33
|
#options;
|
|
17
34
|
#model;
|
|
18
35
|
#runtime;
|
|
19
|
-
constructor(options, model, runtime) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
constructor(options, model, runtime) {
|
|
37
|
+
this.#options = options;
|
|
38
|
+
this.#model = model;
|
|
39
|
+
this.#runtime = runtime;
|
|
40
|
+
}
|
|
41
|
+
getSnapshot() {
|
|
42
|
+
return this.#runtime.getSnapshot();
|
|
43
|
+
}
|
|
44
|
+
syncWindow(window) {
|
|
45
|
+
const items = tryCreateSequence(window.items);
|
|
46
|
+
if (!items.ok)
|
|
47
|
+
return items;
|
|
48
|
+
const previous = this.getSnapshot().state;
|
|
49
|
+
const state = synchronizeFeedWindow(items.value, previous, {
|
|
50
|
+
revision: window.revision,
|
|
51
|
+
...(window.requestGeneration === undefined ? {} : { requestGeneration: window.requestGeneration }),
|
|
52
|
+
...(window.start === undefined ? {} : { start: window.start }),
|
|
53
|
+
...(window.total === undefined ? {} : { total: window.total }),
|
|
54
|
+
current: window.highlightedValue
|
|
55
|
+
?? (previous.cursor.current !== null && items.value.contains(previous.cursor.current)
|
|
56
|
+
? previous.cursor.current
|
|
57
|
+
: window.items[0] ?? null),
|
|
58
|
+
});
|
|
59
|
+
if (!state.ok)
|
|
60
|
+
return state;
|
|
61
|
+
this.#model.value = items.value;
|
|
62
|
+
const result = this.#runtime.replace(state);
|
|
63
|
+
if (result.ok)
|
|
64
|
+
this.#options.onUpdate?.();
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
handleEvent(event) {
|
|
68
|
+
const result = this.#runtime.handle(event);
|
|
69
|
+
if (result.ok) {
|
|
70
|
+
for (const command of result.commands) {
|
|
71
|
+
if (command.type === 'request-window') {
|
|
72
|
+
this.#options.onRequestWindow?.(command.direction, command.anchor, command.revision, command.requestGeneration);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
this.#options.onUpdate?.();
|
|
77
|
+
return result.ok;
|
|
78
|
+
}
|
|
79
|
+
handleKeyboardInput(input) {
|
|
80
|
+
const event = input.key === 'down' || input.key === 'page-down'
|
|
81
|
+
? 'next'
|
|
82
|
+
: input.key === 'up' || input.key === 'page-up'
|
|
83
|
+
? 'previous'
|
|
84
|
+
: input.key === 'load-before'
|
|
85
|
+
? 'request-before'
|
|
86
|
+
: input.key === 'load-after' ? 'request-after' : null;
|
|
87
|
+
return event === null ? false : this.handleEvent(event);
|
|
88
|
+
}
|
|
31
89
|
}
|
|
32
90
|
//# sourceMappingURL=feed.js.map
|
package/dist/feed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/form.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type FormFieldInput, type FormIssue, type FormIssueSource, type FormState } from '@sectile/core/form';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
4
|
+
export interface TerminalFormFieldValidation<ID extends StableID = StableID> {
|
|
5
|
+
readonly valid: boolean;
|
|
6
|
+
readonly issues?: readonly FormIssue<ID>[];
|
|
7
|
+
}
|
|
8
|
+
export type TerminalFormFieldValidator<ID extends StableID = StableID> = () => TerminalFormFieldValidation<ID>;
|
|
9
|
+
export type TerminalFormFieldResetHandler = () => void;
|
|
10
|
+
export interface TerminalFormField<ID extends StableID = StableID> extends Omit<FormFieldInput<ID>, 'valid' | 'issues'> {
|
|
11
|
+
readonly label: string;
|
|
12
|
+
readonly available?: boolean;
|
|
13
|
+
readonly validate?: TerminalFormFieldValidator<ID>;
|
|
14
|
+
readonly reset?: TerminalFormFieldResetHandler;
|
|
15
|
+
}
|
|
16
|
+
export interface TerminalFormSnapshot<ID extends StableID = StableID> {
|
|
17
|
+
readonly revision: number;
|
|
18
|
+
readonly state: FormState<ID>;
|
|
19
|
+
readonly currentFieldId: ID | null;
|
|
20
|
+
readonly summaryIssues: readonly FormIssue<ID>[];
|
|
21
|
+
}
|
|
22
|
+
export type TerminalFormSnapshotListener<ID extends StableID = StableID> = (snapshot: TerminalFormSnapshot<ID>) => void;
|
|
23
|
+
export interface TerminalFormSubmitPayload<ID extends StableID = StableID> {
|
|
24
|
+
readonly state: FormState<ID>;
|
|
25
|
+
readonly currentFieldId: ID | null;
|
|
26
|
+
}
|
|
27
|
+
export type TerminalFormSubmitHandler<ID extends StableID = StableID> = (payload: TerminalFormSubmitPayload<ID>) => void;
|
|
28
|
+
export type TerminalFormCurrentFieldChangeHandler<ID extends StableID = StableID> = (id: ID | null) => void;
|
|
29
|
+
export type TerminalFormAnnounceSummaryHandler<ID extends StableID = StableID> = (issues: readonly FormIssue<ID>[]) => void;
|
|
30
|
+
export type TerminalFormStateChangeHandler<ID extends StableID = StableID> = (state: FormState<ID>) => void;
|
|
31
|
+
export type TerminalFormUpdateHandler = () => void;
|
|
32
|
+
export interface TerminalFormOptions<ID extends StableID = StableID> {
|
|
33
|
+
readonly fields?: readonly TerminalFormField<ID>[];
|
|
34
|
+
readonly issues?: readonly FormIssue<ID>[];
|
|
35
|
+
readonly defaultCurrentFieldId?: ID | null;
|
|
36
|
+
readonly onCurrentFieldChange?: TerminalFormCurrentFieldChangeHandler<ID>;
|
|
37
|
+
readonly onSubmit?: TerminalFormSubmitHandler<ID>;
|
|
38
|
+
readonly onAnnounceSummary?: TerminalFormAnnounceSummaryHandler<ID>;
|
|
39
|
+
readonly onStateChange?: TerminalFormStateChangeHandler<ID>;
|
|
40
|
+
readonly onUpdate?: TerminalFormUpdateHandler;
|
|
41
|
+
}
|
|
42
|
+
export interface TerminalFormConnection<ID extends StableID = StableID> {
|
|
43
|
+
readonly state: FormState<ID>;
|
|
44
|
+
readonly currentFieldId: ID | null;
|
|
45
|
+
readonly summaryIssues: readonly FormIssue<ID>[];
|
|
46
|
+
getSnapshot(): TerminalFormSnapshot<ID>;
|
|
47
|
+
registerField(field: TerminalFormField<ID>): () => void;
|
|
48
|
+
refreshField(id: ID, flags?: {
|
|
49
|
+
readonly touched?: boolean;
|
|
50
|
+
readonly dirty?: boolean;
|
|
51
|
+
}): boolean;
|
|
52
|
+
focusField(id: ID): boolean;
|
|
53
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
54
|
+
replaceIssues(source: FormIssueSource, issues: readonly FormIssue<ID>[]): boolean;
|
|
55
|
+
submit(): boolean;
|
|
56
|
+
submitStarted(): number | null;
|
|
57
|
+
submitSucceeded(generation: number): boolean;
|
|
58
|
+
submitFailed(generation: number, issues?: readonly FormIssue<ID>[]): boolean;
|
|
59
|
+
reset(): boolean;
|
|
60
|
+
subscribe(listener: TerminalFormSnapshotListener<ID>): () => void;
|
|
61
|
+
destroy(): void;
|
|
62
|
+
}
|
|
63
|
+
export declare function createForm<ID extends StableID = StableID>(options?: TerminalFormOptions<ID>): TerminalFormConnection<ID>;
|
|
64
|
+
export declare function tryCreateForm<ID extends StableID = StableID>(options?: TerminalFormOptions<ID>): Result<TerminalFormConnection<ID>>;
|
|
65
|
+
//# sourceMappingURL=form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}
|