@sectile/terminal 0.2.0 → 0.3.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 +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/drawer.d.ts +23 -0
- package/dist/drawer.d.ts.map +1 -0
- package/dist/drawer.js +26 -0
- package/dist/drawer.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 +112 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -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 +8 -3
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result } from '@sectile/core';
|
|
3
|
+
import { type CheckboxEvent, type CheckboxPolicies, type CheckboxState, type CheckboxValue } from '@sectile/core/checkbox';
|
|
4
|
+
import { type TerminalCheckedControl } from './internal/checked-control.js';
|
|
5
|
+
export interface CheckboxOptions {
|
|
6
|
+
readonly value?: CheckboxValue;
|
|
7
|
+
readonly defaultValue?: CheckboxValue;
|
|
8
|
+
readonly policies?: CheckboxPolicies;
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
readonly readOnly?: boolean;
|
|
11
|
+
readonly onValueChange?: (value: CheckboxValue) => void;
|
|
12
|
+
readonly onUpdate?: () => void;
|
|
13
|
+
}
|
|
14
|
+
export type CheckboxValueChangeHandler = NonNullable<CheckboxOptions['onValueChange']>;
|
|
15
|
+
export type CheckboxUpdateHandler = NonNullable<CheckboxOptions['onUpdate']>;
|
|
16
|
+
export type CheckboxConnection = TerminalCheckedControl<CheckboxState, CheckboxEvent, CheckboxValue>;
|
|
17
|
+
export declare function createCheckbox(options?: CheckboxOptions): FacadeConnection<CheckboxConnection>;
|
|
18
|
+
export declare function tryCreateCheckbox(options?: CheckboxOptions): Result<FacadeConnection<CheckboxConnection>>;
|
|
19
|
+
//# sourceMappingURL=checkbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.d.ts","sourceRoot":"","sources":["../src/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAAC,OAAO,EAAoE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAAC,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACrV,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAEnS,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACrG,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/checkbox.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { applyCheckboxEvent, tryCreateCheckboxState } from '@sectile/core/checkbox';
|
|
4
|
+
import { createTerminalCheckedControl } from './internal/checked-control.js';
|
|
5
|
+
export function createCheckbox(options = {}) {
|
|
6
|
+
return unwrap(tryCreateCheckbox(options));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateCheckbox(options = {}) {
|
|
9
|
+
return createFacadeConnection(options, (options) => tryCreateCheckboxConnection(options));
|
|
10
|
+
}
|
|
11
|
+
function tryCreateCheckboxConnection(options = {}) { return createTerminalCheckedControl({ controlled: options.value !== undefined, initial: tryCreateCheckboxState(options.value ?? options.defaultValue ?? false, options.policies), toggleEvent: 'toggle', reducer: (state, event) => applyCheckboxEvent(state, event, options.policies), create: (value) => tryCreateCheckboxState(value, options.policies), read: (state) => state.checked, interaction: options, onChange: options.onValueChange, onUpdate: options.onUpdate }); }
|
|
12
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","sourceRoot":"","sources":["../src/checkbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAA2G,MAAM,wBAAwB,CAAC;AAAC,OAAO,EAAE,4BAA4B,EAA+B,MAAM,+BAA+B,CAAC;AAMrV,MAAM,UAAU,cAAc,CAAC,OAAO,GAAoB,EAAE;IAC1D,OAAO,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAoB,EAAE;IAC7D,OAAO,sBAAsB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAO,GAAoB,EAAE,IAAgC,OAAO,4BAA4B,CAA+D,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Result } from '@sectile/core';
|
|
2
|
+
import { type ColorFormat, type ColorPickerEvent, type ColorPickerPolicies, type ColorPickerState, type ColorValue } from '@sectile/core/color-picker';
|
|
3
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
5
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
6
|
+
export interface ColorPickerOptions extends ColorPickerPolicies {
|
|
7
|
+
readonly value?: ColorValue | string;
|
|
8
|
+
readonly defaultValue?: ColorValue | string;
|
|
9
|
+
readonly draft?: string | null;
|
|
10
|
+
readonly defaultDraft?: string | null;
|
|
11
|
+
readonly format?: ColorFormat;
|
|
12
|
+
readonly defaultFormat?: ColorFormat;
|
|
13
|
+
readonly disabled?: boolean;
|
|
14
|
+
readonly readOnly?: boolean;
|
|
15
|
+
readonly onValueChange?: (value: ColorValue) => void;
|
|
16
|
+
readonly onDraftChange?: (draft: string | null) => void;
|
|
17
|
+
readonly onFormatChange?: (format: ColorFormat) => void;
|
|
18
|
+
readonly onUpdate?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export type ColorPickerValueChangeHandler = NonNullable<ColorPickerOptions['onValueChange']>;
|
|
21
|
+
export type ColorPickerDraftChangeHandler = NonNullable<ColorPickerOptions['onDraftChange']>;
|
|
22
|
+
export type ColorPickerFormatChangeHandler = NonNullable<ColorPickerOptions['onFormatChange']>;
|
|
23
|
+
export type ColorPickerUpdateHandler = NonNullable<ColorPickerOptions['onUpdate']>;
|
|
24
|
+
export interface ColorPickerConnection {
|
|
25
|
+
getSnapshot(): RevisionSnapshot<ColorPickerState>;
|
|
26
|
+
getText(): string;
|
|
27
|
+
getCSSColor(): string;
|
|
28
|
+
syncControlledValues(values: {
|
|
29
|
+
readonly value?: ColorValue | string;
|
|
30
|
+
readonly draft?: string | null;
|
|
31
|
+
readonly format?: ColorFormat;
|
|
32
|
+
}): Result<RevisionSnapshot<ColorPickerState>>;
|
|
33
|
+
handleEvent(event: ColorPickerEvent): boolean;
|
|
34
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
35
|
+
handleTextInput(text: string): boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare function createColorPicker(options?: ColorPickerOptions): FacadeConnection<ColorPickerConnection>;
|
|
38
|
+
export declare function tryCreateColorPicker(options?: ColorPickerOptions): Result<FacadeConnection<ColorPickerConnection>>;
|
|
39
|
+
//# sourceMappingURL=color-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../src/color-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAyF,KAAK,WAAW,EAA2B,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACvQ,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7F,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC;AAC7F,MAAM,MAAM,8BAA8B,GAAG,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;AACnF,MAAM,WAAW,qBAAqB;IACpC,WAAW,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,IAAI,MAAM,CAAC;IAClB,WAAW,IAAI,MAAM,CAAC;IACtB,oBAAoB,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClL,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAC9C,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAC3D,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AACD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAkD;AAC9J,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAA6F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { applyColorPickerEvent, tryCreateColorPickerState, formatColorValue } from '@sectile/core/color-picker';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
4
|
+
import { createSemanticController } from './internal/semantic-controller.js';
|
|
5
|
+
export function createColorPicker(options = {}) { return unwrap(tryCreateColorPicker(options)); }
|
|
6
|
+
export function tryCreateColorPicker(options = {}) { return createFacadeConnection(options, (normalized) => tryCreateConnection(normalized)); }
|
|
7
|
+
function tryCreateConnection(options) {
|
|
8
|
+
const controlled = [options.value !== undefined, options.draft !== undefined, options.format !== undefined];
|
|
9
|
+
const policies = { ...(options.allowAlpha === undefined ? {} : { allowAlpha: options.allowAlpha }), ...(options.channelStep === undefined ? {} : { channelStep: options.channelStep }), ...(options.alphaStep === undefined ? {} : { alphaStep: options.alphaStep }) };
|
|
10
|
+
const runtime = createSemanticController({
|
|
11
|
+
initial: tryCreateColorPickerState({ value: options.value ?? options.defaultValue ?? '#000000', draft: options.draft !== undefined ? options.draft : options.defaultDraft ?? null, format: options.format ?? options.defaultFormat ?? 'hex' }, policies),
|
|
12
|
+
reducer: (state, event) => applyColorPickerEvent(state, event, policies),
|
|
13
|
+
reconcile: (previous, proposed) => tryCreateColorPickerState({ value: controlled[0] ? previous.value : proposed.value, draft: controlled[1] ? previous.draft : proposed.draft, format: controlled[2] ? previous.format : proposed.format, channel: proposed.channel }, policies),
|
|
14
|
+
notify: (previous, proposed) => { if (!sameColor(previous.value, proposed.value))
|
|
15
|
+
options.onValueChange?.(proposed.value); if (previous.draft !== proposed.draft)
|
|
16
|
+
options.onDraftChange?.(proposed.draft); if (previous.format !== proposed.format)
|
|
17
|
+
options.onFormatChange?.(proposed.format); },
|
|
18
|
+
toEffect: (command) => command, interaction: options,
|
|
19
|
+
});
|
|
20
|
+
return runtime.ok ? { ok: true, value: new TerminalColorPicker(options, policies, runtime.value, controlled) } : runtime;
|
|
21
|
+
}
|
|
22
|
+
class TerminalColorPicker {
|
|
23
|
+
#options;
|
|
24
|
+
#policies;
|
|
25
|
+
#runtime;
|
|
26
|
+
#controlled;
|
|
27
|
+
constructor(options, policies, runtime, controlled) { this.#options = options; this.#policies = policies; this.#runtime = runtime; this.#controlled = controlled; }
|
|
28
|
+
getSnapshot() { return this.#runtime.getSnapshot(); }
|
|
29
|
+
getText() { const state = this.getSnapshot().state; return state.draft ?? unwrap(formatColorValue(state.value, state.format)); }
|
|
30
|
+
getCSSColor() { return unwrap(formatColorValue(this.getSnapshot().state.value, 'rgb')); }
|
|
31
|
+
syncControlledValues(values) {
|
|
32
|
+
if (this.#controlled[0] !== (values.value !== undefined) || this.#controlled[1] !== (values.draft !== undefined) || this.#controlled[2] !== (values.format !== undefined))
|
|
33
|
+
return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled color picker values must preserve their construction-time shape.' } };
|
|
34
|
+
const state = this.getSnapshot().state;
|
|
35
|
+
const result = this.#runtime.replace(tryCreateColorPickerState({ value: values.value ?? state.value, draft: values.draft === undefined ? state.draft : values.draft, format: values.format ?? state.format, channel: state.channel }, this.#policies));
|
|
36
|
+
if (result.ok)
|
|
37
|
+
this.#options.onUpdate?.();
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
|
|
41
|
+
this.#options.onUpdate?.(); return result.ok; }
|
|
42
|
+
handleKeyboardInput(input) {
|
|
43
|
+
if (input.key === 'up')
|
|
44
|
+
return this.handleEvent('increment');
|
|
45
|
+
if (input.key === 'down')
|
|
46
|
+
return this.handleEvent('decrement');
|
|
47
|
+
if (input.key === 'left' || input.key === 'right') {
|
|
48
|
+
const channels = this.#policies.allowAlpha === false ? ['red', 'green', 'blue'] : ['red', 'green', 'blue', 'alpha'];
|
|
49
|
+
const current = channels.indexOf(this.getSnapshot().state.channel);
|
|
50
|
+
const next = (current + (input.key === 'right' ? 1 : channels.length - 1)) % channels.length;
|
|
51
|
+
return this.handleEvent({ type: 'focus-channel', channel: channels[next] });
|
|
52
|
+
}
|
|
53
|
+
if (input.key === 'enter')
|
|
54
|
+
return this.handleEvent('commit');
|
|
55
|
+
if (input.key === 'escape')
|
|
56
|
+
return this.handleEvent('cancel');
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
handleTextInput(text) { return this.handleEvent({ type: 'input', text }); }
|
|
60
|
+
}
|
|
61
|
+
function sameColor(left, right) { return left.red === right.red && left.green === right.green && left.blue === right.blue && left.alpha === right.alpha; }
|
|
62
|
+
//# sourceMappingURL=color-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-picker.js","sourceRoot":"","sources":["../src/color-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type ComboboxCommand, type ComboboxEvent, type ComboboxPolicies, type ComboboxState } from '@sectile/core/combobox';
|
|
4
|
+
import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
|
|
5
|
+
import { type Sequence } from '@sectile/core/sequence';
|
|
6
|
+
import { type TextEditingState } from '@sectile/core/text';
|
|
7
|
+
import { type TextInput } from './text.js';
|
|
8
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
9
|
+
export type KeyboardInput = TerminalKeyboardInput;
|
|
10
|
+
export type ComboboxEffect<ID extends StableID = StableID> = {
|
|
11
|
+
readonly type: 'highlight-candidate';
|
|
12
|
+
readonly id: ID;
|
|
13
|
+
} | {
|
|
14
|
+
readonly type: 'submit-candidate';
|
|
15
|
+
readonly id: ID;
|
|
16
|
+
};
|
|
17
|
+
export interface ComboboxValueChangeDetails<ID extends StableID = StableID> {
|
|
18
|
+
readonly value: ID | null;
|
|
19
|
+
readonly previousValue: ID | null;
|
|
20
|
+
}
|
|
21
|
+
export interface ComboboxInputStateChangeDetails {
|
|
22
|
+
readonly value: TextEditingState;
|
|
23
|
+
readonly previousValue: TextEditingState;
|
|
24
|
+
}
|
|
25
|
+
export interface ComboboxOpenChangeDetails {
|
|
26
|
+
readonly value: boolean;
|
|
27
|
+
readonly previousValue: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ComboboxHighlightChangeDetails<ID extends StableID = StableID> {
|
|
30
|
+
readonly value: ID | null;
|
|
31
|
+
readonly previousValue: ID | null;
|
|
32
|
+
}
|
|
33
|
+
export interface ComboboxControllerOptions<ID extends StableID = StableID> {
|
|
34
|
+
readonly domain: Sequence<ID>;
|
|
35
|
+
readonly labels: ReadonlyMap<ID, string>;
|
|
36
|
+
readonly policies?: ComboboxPolicies<ID>;
|
|
37
|
+
readonly value?: ID | null;
|
|
38
|
+
readonly defaultValue?: ID | null;
|
|
39
|
+
readonly inputState?: TextEditingState;
|
|
40
|
+
readonly defaultInputState?: TextEditingState;
|
|
41
|
+
readonly open?: boolean;
|
|
42
|
+
readonly defaultOpen?: boolean;
|
|
43
|
+
readonly highlightedValue?: ID | null;
|
|
44
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
45
|
+
readonly disabled?: boolean;
|
|
46
|
+
readonly readOnly?: boolean;
|
|
47
|
+
readonly onValueChange?: (change: ComboboxValueChangeDetails<ID>) => void;
|
|
48
|
+
readonly onInputStateChange?: (change: ComboboxInputStateChangeDetails) => void;
|
|
49
|
+
readonly onOpenChange?: (change: ComboboxOpenChangeDetails) => void;
|
|
50
|
+
readonly onHighlightedValueChange?: (change: ComboboxHighlightChangeDetails<ID>) => void;
|
|
51
|
+
}
|
|
52
|
+
export type ComboboxControllerValueChangeHandler<ID extends StableID = StableID> = NonNullable<ComboboxControllerOptions<ID>['onValueChange']>;
|
|
53
|
+
export type ComboboxControllerInputStateChangeHandler<ID extends StableID = StableID> = NonNullable<ComboboxControllerOptions<ID>['onInputStateChange']>;
|
|
54
|
+
export type ComboboxControllerOpenChangeHandler<ID extends StableID = StableID> = NonNullable<ComboboxControllerOptions<ID>['onOpenChange']>;
|
|
55
|
+
export type ComboboxControllerHighlightedValueChangeHandler<ID extends StableID = StableID> = NonNullable<ComboboxControllerOptions<ID>['onHighlightedValueChange']>;
|
|
56
|
+
export interface ComboboxControlledValues<ID extends StableID = StableID> {
|
|
57
|
+
readonly value?: ID | null;
|
|
58
|
+
readonly inputState?: TextEditingState;
|
|
59
|
+
readonly open?: boolean;
|
|
60
|
+
readonly highlightedValue?: ID | null;
|
|
61
|
+
}
|
|
62
|
+
export interface ComboboxController<ID extends StableID = StableID> {
|
|
63
|
+
readonly domain: Sequence<ID>;
|
|
64
|
+
readonly labels: ReadonlyMap<ID, string>;
|
|
65
|
+
getSnapshot(): RevisionSnapshot<ComboboxState<ID>>;
|
|
66
|
+
syncControlledValues(values: ComboboxControlledValues<ID>): Result<RevisionSnapshot<ComboboxState<ID>>>;
|
|
67
|
+
handleKeyboardInput(input: KeyboardInput, expectedRevision?: number): RevisionResult<ComboboxState<ID>, ComboboxEffect<ID>>;
|
|
68
|
+
handleTextInput(input: TextInput, expectedRevision?: number): RevisionResult<ComboboxState<ID>, ComboboxEffect<ID>>;
|
|
69
|
+
}
|
|
70
|
+
export interface ComboboxItem<ID extends StableID = StableID> {
|
|
71
|
+
readonly id: ID;
|
|
72
|
+
readonly label: string;
|
|
73
|
+
}
|
|
74
|
+
export interface ComboboxTransitionDetails<ID extends StableID = StableID> {
|
|
75
|
+
readonly event: ComboboxEvent<ID>;
|
|
76
|
+
readonly result: RevisionResult<ComboboxState<ID>, ComboboxEffect<ID>>;
|
|
77
|
+
}
|
|
78
|
+
export interface ComboboxConnectionOptions<ID extends StableID = StableID> {
|
|
79
|
+
readonly controller: ComboboxController<ID>;
|
|
80
|
+
readonly disabled?: boolean;
|
|
81
|
+
readonly readOnly?: boolean;
|
|
82
|
+
readonly onAccept?: (id: ID) => void;
|
|
83
|
+
readonly onTransition?: (details: ComboboxTransitionDetails<ID>) => void;
|
|
84
|
+
readonly onUpdate?: () => void;
|
|
85
|
+
}
|
|
86
|
+
export type ComboboxConnectionAcceptHandler<ID extends StableID = StableID> = NonNullable<ComboboxConnectionOptions<ID>['onAccept']>;
|
|
87
|
+
export type ComboboxConnectionTransitionHandler<ID extends StableID = StableID> = NonNullable<ComboboxConnectionOptions<ID>['onTransition']>;
|
|
88
|
+
export type ComboboxConnectionUpdateHandler<ID extends StableID = StableID> = NonNullable<ComboboxConnectionOptions<ID>['onUpdate']>;
|
|
89
|
+
export interface ComboboxConnection<ID extends StableID = StableID> {
|
|
90
|
+
readonly domain: Sequence<ID>;
|
|
91
|
+
readonly labels: ReadonlyMap<ID, string>;
|
|
92
|
+
getSnapshot(): RevisionSnapshot<ComboboxState<ID>>;
|
|
93
|
+
getInputValue(): string;
|
|
94
|
+
syncControlledValues(values: ComboboxControlledValues<ID>): Result<RevisionSnapshot<ComboboxState<ID>>>;
|
|
95
|
+
handleKeyboardInput(input: KeyboardInput): boolean;
|
|
96
|
+
}
|
|
97
|
+
export type ComboboxOptions<ID extends StableID = StableID> = Omit<ComboboxControllerOptions<ID>, 'domain' | 'labels'> & Omit<ComboboxConnectionOptions<ID>, 'controller'> & {
|
|
98
|
+
readonly items: readonly ComboboxItem<ID>[];
|
|
99
|
+
};
|
|
100
|
+
export declare function createComboboxController<ID extends StableID>(options: ComboboxControllerOptions<ID>): Result<ComboboxController<ID>>;
|
|
101
|
+
export declare function createCombobox<ID extends StableID>(options: ComboboxOptions<ID>): FacadeConnection<ComboboxConnection<ID>>;
|
|
102
|
+
export declare function tryCreateCombobox<ID extends StableID>(options: ComboboxOptions<ID>): Result<FacadeConnection<ComboboxConnection<ID>>>;
|
|
103
|
+
export declare function connectCombobox<ID extends StableID>(options: ComboboxConnectionOptions<ID>): ComboboxConnection<ID>;
|
|
104
|
+
export declare function toComboboxEvent<ID extends StableID = StableID>(input: KeyboardInput): ComboboxEvent<ID> | null;
|
|
105
|
+
export declare function toComboboxTextEvent<ID extends StableID = StableID>(input: TextInput): ComboboxEvent<ID> | null;
|
|
106
|
+
export declare function toComboboxEffect<ID extends StableID>(command: ComboboxCommand<ID>): ComboboxEffect<ID>;
|
|
107
|
+
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../src/combobox.ts"],"names":[],"mappings":"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"}
|
package/dist/combobox.js
ADDED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { tryCreateInteractionState, requireInteraction } from '@sectile/core/interaction';
|
|
4
|
+
import { applyComboboxEvent, tryCreateComboboxState, } from '@sectile/core/combobox';
|
|
5
|
+
import { tryCreateRevisionSnapshot, rejectRevisionInput, } from '@sectile/core/revision';
|
|
6
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
7
|
+
import { tryCreateTextEditingState, } from '@sectile/core/text';
|
|
8
|
+
import { applyControllerEvent, sameControllerState, synchronizeControllerState, } from './internal/controller.js';
|
|
9
|
+
import { toTextEvent } from './text.js';
|
|
10
|
+
import { toTerminalTextInput } from './internal/text-input.js';
|
|
11
|
+
export function createComboboxController(options) {
|
|
12
|
+
const value = options.value !== undefined ? options.value : options.defaultValue ?? null;
|
|
13
|
+
const requestedInput = options.inputState !== undefined
|
|
14
|
+
? options.inputState
|
|
15
|
+
: options.defaultInputState;
|
|
16
|
+
const inputState = requestedInput === undefined
|
|
17
|
+
? tryCreateTextEditingState()
|
|
18
|
+
: { ok: true, value: requestedInput };
|
|
19
|
+
if (!inputState.ok)
|
|
20
|
+
return inputState;
|
|
21
|
+
const initial = tryCreateComboboxState(options.domain, {
|
|
22
|
+
text: inputState.value,
|
|
23
|
+
popupOpen: options.open !== undefined ? options.open : options.defaultOpen ?? false,
|
|
24
|
+
current: options.highlightedValue !== undefined
|
|
25
|
+
? options.highlightedValue
|
|
26
|
+
: options.defaultHighlightedValue ?? null,
|
|
27
|
+
selected: value === null ? [] : [value],
|
|
28
|
+
anchor: value,
|
|
29
|
+
});
|
|
30
|
+
if (!initial.ok)
|
|
31
|
+
return initial;
|
|
32
|
+
const snapshot = tryCreateRevisionSnapshot(initial.value);
|
|
33
|
+
if (!snapshot.ok)
|
|
34
|
+
return snapshot;
|
|
35
|
+
const interaction = tryCreateInteractionState(options);
|
|
36
|
+
if (!interaction.ok)
|
|
37
|
+
return interaction;
|
|
38
|
+
return { ok: true, value: new TerminalComboboxController(options, interaction.value, snapshot.value) };
|
|
39
|
+
}
|
|
40
|
+
export function createCombobox(options) {
|
|
41
|
+
return unwrap(tryCreateCombobox(options));
|
|
42
|
+
}
|
|
43
|
+
export function tryCreateCombobox(options) {
|
|
44
|
+
return createFacadeConnection(options, (options) => tryCreateComboboxConnection(options));
|
|
45
|
+
}
|
|
46
|
+
function tryCreateComboboxConnection(options) {
|
|
47
|
+
const domain = tryCreateSequence(options.items.map((item) => item.id));
|
|
48
|
+
if (!domain.ok)
|
|
49
|
+
return domain;
|
|
50
|
+
const labels = new Map(options.items.map((item) => [item.id, item.label]));
|
|
51
|
+
const controller = createComboboxController({ ...options, domain: domain.value, labels });
|
|
52
|
+
if (!controller.ok)
|
|
53
|
+
return controller;
|
|
54
|
+
return { ok: true, value: connectCombobox({ ...options, controller: controller.value }) };
|
|
55
|
+
}
|
|
56
|
+
export function connectCombobox(options) {
|
|
57
|
+
return new TerminalComboboxConnection(options);
|
|
58
|
+
}
|
|
59
|
+
export function toComboboxEvent(input) {
|
|
60
|
+
if (input.key === 'down')
|
|
61
|
+
return 'next';
|
|
62
|
+
if (input.key === 'up')
|
|
63
|
+
return 'previous';
|
|
64
|
+
if (input.key === 'escape')
|
|
65
|
+
return 'close';
|
|
66
|
+
if (input.key === 'enter')
|
|
67
|
+
return 'accept';
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
export function toComboboxTextEvent(input) {
|
|
71
|
+
const event = toTextEvent(input);
|
|
72
|
+
return event === null ? null : Object.freeze({ type: 'text', event });
|
|
73
|
+
}
|
|
74
|
+
export function toComboboxEffect(command) {
|
|
75
|
+
return Object.freeze(command.type === 'focus'
|
|
76
|
+
? { type: 'highlight-candidate', id: command.id }
|
|
77
|
+
: { type: 'submit-candidate', id: command.id });
|
|
78
|
+
}
|
|
79
|
+
class TerminalComboboxConnection {
|
|
80
|
+
domain;
|
|
81
|
+
labels;
|
|
82
|
+
#controller;
|
|
83
|
+
#onAccept;
|
|
84
|
+
#onTransition;
|
|
85
|
+
#onUpdate;
|
|
86
|
+
constructor(options) {
|
|
87
|
+
this.#controller = options.controller;
|
|
88
|
+
this.domain = options.controller.domain;
|
|
89
|
+
this.labels = options.controller.labels;
|
|
90
|
+
this.#onAccept = options.onAccept;
|
|
91
|
+
this.#onTransition = options.onTransition;
|
|
92
|
+
this.#onUpdate = options.onUpdate;
|
|
93
|
+
}
|
|
94
|
+
getSnapshot() {
|
|
95
|
+
return this.#controller.getSnapshot();
|
|
96
|
+
}
|
|
97
|
+
getInputValue() {
|
|
98
|
+
return this.#controller.getSnapshot().state.text.snapshot.text;
|
|
99
|
+
}
|
|
100
|
+
syncControlledValues(values) {
|
|
101
|
+
const result = this.#controller.syncControlledValues(values);
|
|
102
|
+
if (result.ok)
|
|
103
|
+
this.#onUpdate?.();
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
handleKeyboardInput(input) {
|
|
107
|
+
const keyboardEvent = toComboboxEvent(input);
|
|
108
|
+
if (keyboardEvent !== null) {
|
|
109
|
+
const result = this.#controller.handleKeyboardInput(input);
|
|
110
|
+
if (result.ok)
|
|
111
|
+
this.#applyEffects(result.commands);
|
|
112
|
+
this.#onTransition?.(Object.freeze({ event: keyboardEvent, result }));
|
|
113
|
+
if (result.ok)
|
|
114
|
+
this.#onUpdate?.();
|
|
115
|
+
return result.ok;
|
|
116
|
+
}
|
|
117
|
+
const textInput = toTerminalTextInput(this.#controller.getSnapshot().state.text, input);
|
|
118
|
+
if (textInput === null)
|
|
119
|
+
return false;
|
|
120
|
+
const event = toComboboxTextEvent(textInput);
|
|
121
|
+
const result = this.#controller.handleTextInput(textInput);
|
|
122
|
+
if (result.ok)
|
|
123
|
+
this.#applyEffects(result.commands);
|
|
124
|
+
if (event !== null)
|
|
125
|
+
this.#onTransition?.(Object.freeze({ event, result }));
|
|
126
|
+
if (result.ok)
|
|
127
|
+
this.#onUpdate?.();
|
|
128
|
+
return result.ok;
|
|
129
|
+
}
|
|
130
|
+
#applyEffects(effects) {
|
|
131
|
+
for (const effect of effects) {
|
|
132
|
+
if (effect.type === 'submit-candidate')
|
|
133
|
+
this.#onAccept?.(effect.id);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
class TerminalComboboxController {
|
|
138
|
+
domain;
|
|
139
|
+
labels;
|
|
140
|
+
#domain;
|
|
141
|
+
#labels;
|
|
142
|
+
#policies;
|
|
143
|
+
#interaction;
|
|
144
|
+
#valueControlled;
|
|
145
|
+
#inputStateControlled;
|
|
146
|
+
#openControlled;
|
|
147
|
+
#highlightControlled;
|
|
148
|
+
#onValueChange;
|
|
149
|
+
#onInputStateChange;
|
|
150
|
+
#onOpenChange;
|
|
151
|
+
#onHighlightedValueChange;
|
|
152
|
+
#snapshot;
|
|
153
|
+
constructor(options, interaction, snapshot) {
|
|
154
|
+
this.domain = options.domain;
|
|
155
|
+
this.labels = options.labels;
|
|
156
|
+
this.#domain = options.domain;
|
|
157
|
+
this.#labels = options.labels;
|
|
158
|
+
this.#policies = options.policies ?? {};
|
|
159
|
+
this.#interaction = interaction;
|
|
160
|
+
this.#valueControlled = options.value !== undefined;
|
|
161
|
+
this.#inputStateControlled = options.inputState !== undefined;
|
|
162
|
+
this.#openControlled = options.open !== undefined;
|
|
163
|
+
this.#highlightControlled = options.highlightedValue !== undefined;
|
|
164
|
+
this.#onValueChange = options.onValueChange;
|
|
165
|
+
this.#onInputStateChange = options.onInputStateChange;
|
|
166
|
+
this.#onOpenChange = options.onOpenChange;
|
|
167
|
+
this.#onHighlightedValueChange = options.onHighlightedValueChange;
|
|
168
|
+
this.#snapshot = snapshot;
|
|
169
|
+
}
|
|
170
|
+
getSnapshot() {
|
|
171
|
+
return this.#snapshot;
|
|
172
|
+
}
|
|
173
|
+
syncControlledValues(values) {
|
|
174
|
+
const error = controlledInputError(this.#valueControlled, this.#inputStateControlled, this.#openControlled, this.#highlightControlled, values);
|
|
175
|
+
if (error !== null)
|
|
176
|
+
return { ok: false, error };
|
|
177
|
+
const selected = this.#valueControlled
|
|
178
|
+
? values.value
|
|
179
|
+
: selectedValue(this.#snapshot.state);
|
|
180
|
+
const state = tryCreateComboboxState(this.#domain, {
|
|
181
|
+
text: this.#inputStateControlled
|
|
182
|
+
? values.inputState
|
|
183
|
+
: this.#snapshot.state.text,
|
|
184
|
+
popupOpen: this.#openControlled
|
|
185
|
+
? values.open
|
|
186
|
+
: this.#snapshot.state.popupOpen,
|
|
187
|
+
current: this.#highlightControlled
|
|
188
|
+
? values.highlightedValue
|
|
189
|
+
: this.#snapshot.state.cursor.current,
|
|
190
|
+
selected: selected === null ? [] : [selected],
|
|
191
|
+
anchor: this.#valueControlled ? selected : this.#snapshot.state.selection.anchor,
|
|
192
|
+
});
|
|
193
|
+
const snapshot = synchronizeControllerState(this.#snapshot, state);
|
|
194
|
+
if (!snapshot.ok)
|
|
195
|
+
return snapshot;
|
|
196
|
+
this.#snapshot = snapshot.value;
|
|
197
|
+
return snapshot;
|
|
198
|
+
}
|
|
199
|
+
handleKeyboardInput(input, expectedRevision = this.#snapshot.revision) {
|
|
200
|
+
const event = toComboboxEvent(input);
|
|
201
|
+
return event === null
|
|
202
|
+
? rejectRevisionInput(this.#snapshot, {
|
|
203
|
+
class: 'transition-rejection',
|
|
204
|
+
code: 'unsupported-terminal-key',
|
|
205
|
+
message: 'Terminal keyboard input does not map to a combobox semantic event.',
|
|
206
|
+
details: { key: input.key },
|
|
207
|
+
})
|
|
208
|
+
: this.#applyEvent(event, expectedRevision);
|
|
209
|
+
}
|
|
210
|
+
handleTextInput(input, expectedRevision = this.#snapshot.revision) {
|
|
211
|
+
const event = toComboboxTextEvent(input);
|
|
212
|
+
return event === null
|
|
213
|
+
? rejectRevisionInput(this.#snapshot, {
|
|
214
|
+
class: 'transition-rejection',
|
|
215
|
+
code: 'unsupported-terminal-text-input',
|
|
216
|
+
message: 'Terminal text input does not map to a combobox semantic event.',
|
|
217
|
+
})
|
|
218
|
+
: this.#applyEvent(event, expectedRevision);
|
|
219
|
+
}
|
|
220
|
+
#applyEvent(event, expectedRevision) {
|
|
221
|
+
const permitted = requireInteraction(this.#interaction, comboboxIntent(event));
|
|
222
|
+
if (!permitted.ok)
|
|
223
|
+
return rejectRevisionInput(this.#snapshot, permitted.error);
|
|
224
|
+
const result = applyControllerEvent(this.#snapshot, expectedRevision, event, (state, semanticEvent) => applyComboboxEvent(this.#domain, this.#labels, state, semanticEvent, this.#policies), (previous, proposed) => controlledState(this.#domain, previous, proposed, this.#valueControlled, this.#inputStateControlled, this.#openControlled, this.#highlightControlled), (previous, proposed) => this.#notify(previous, proposed), toComboboxEffect);
|
|
225
|
+
if (result.ok)
|
|
226
|
+
this.#snapshot = result.snapshot;
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
#notify(previous, proposed) {
|
|
230
|
+
const previousValue = selectedValue(previous);
|
|
231
|
+
const value = selectedValue(proposed);
|
|
232
|
+
if (previousValue !== value)
|
|
233
|
+
this.#onValueChange?.(Object.freeze({ value, previousValue }));
|
|
234
|
+
if (!sameControllerState(previous.text, proposed.text)) {
|
|
235
|
+
this.#onInputStateChange?.(Object.freeze({
|
|
236
|
+
value: proposed.text,
|
|
237
|
+
previousValue: previous.text,
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
if (previous.popupOpen !== proposed.popupOpen) {
|
|
241
|
+
this.#onOpenChange?.(Object.freeze({
|
|
242
|
+
value: proposed.popupOpen,
|
|
243
|
+
previousValue: previous.popupOpen,
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
if (previous.cursor.current !== proposed.cursor.current) {
|
|
247
|
+
this.#onHighlightedValueChange?.(Object.freeze({
|
|
248
|
+
value: proposed.cursor.current,
|
|
249
|
+
previousValue: previous.cursor.current,
|
|
250
|
+
}));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function comboboxIntent(event) {
|
|
255
|
+
return event === 'next' || event === 'previous' || event === 'close' ? 'navigate' : 'mutate';
|
|
256
|
+
}
|
|
257
|
+
function controlledState(domain, previous, proposed, valueControlled, inputStateControlled, openControlled, highlightControlled) {
|
|
258
|
+
return tryCreateComboboxState(domain, {
|
|
259
|
+
text: inputStateControlled ? previous.text : proposed.text,
|
|
260
|
+
popupOpen: openControlled ? previous.popupOpen : proposed.popupOpen,
|
|
261
|
+
current: highlightControlled ? previous.cursor.current : proposed.cursor.current,
|
|
262
|
+
selected: valueControlled ? previous.selection.selected : proposed.selection.selected,
|
|
263
|
+
anchor: valueControlled ? previous.selection.anchor : proposed.selection.anchor,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
function selectedValue(state) {
|
|
267
|
+
return state.selection.selected[0] ?? null;
|
|
268
|
+
}
|
|
269
|
+
function controlledInputError(valueControlled, inputStateControlled, openControlled, highlightControlled, values) {
|
|
270
|
+
return fieldError(valueControlled, values.value !== undefined, 'value', 'combobox value')
|
|
271
|
+
?? fieldError(inputStateControlled, values.inputState !== undefined, 'input-state', 'combobox input state')
|
|
272
|
+
?? fieldError(openControlled, values.open !== undefined, 'open', 'combobox open state')
|
|
273
|
+
?? fieldError(highlightControlled, values.highlightedValue !== undefined, 'highlighted-value', 'combobox highlight');
|
|
274
|
+
}
|
|
275
|
+
function fieldError(controlled, provided, codeName, label) {
|
|
276
|
+
if (controlled === provided)
|
|
277
|
+
return null;
|
|
278
|
+
return {
|
|
279
|
+
class: 'construction',
|
|
280
|
+
code: controlled ? `controlled-${codeName}-required` : `uncontrolled-${codeName}-update`,
|
|
281
|
+
message: controlled
|
|
282
|
+
? `Controlled ${label} sync requires its external value.`
|
|
283
|
+
: `Uncontrolled ${label} cannot be synchronized externally.`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","sourceRoot":"","sources":["../src/combobox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Result } from '@sectile/core';
|
|
2
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
3
|
+
import type { TextEditingState } from '@sectile/core/text';
|
|
4
|
+
import { type DateFieldEvent, type DateFieldPolicies, type DateFieldState, type DateValue } from '@sectile/core/date-field';
|
|
5
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
6
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
7
|
+
export interface DateFieldOptions {
|
|
8
|
+
readonly policies?: DateFieldPolicies;
|
|
9
|
+
readonly value?: DateValue | null;
|
|
10
|
+
readonly defaultValue?: DateValue | null;
|
|
11
|
+
readonly inputState?: TextEditingState;
|
|
12
|
+
readonly defaultInputState?: TextEditingState;
|
|
13
|
+
readonly disabled?: boolean;
|
|
14
|
+
readonly readOnly?: boolean;
|
|
15
|
+
readonly required?: boolean;
|
|
16
|
+
readonly onValueChange?: (value: DateValue | null) => void;
|
|
17
|
+
readonly onInputStateChange?: (value: TextEditingState, previousValue: TextEditingState) => void;
|
|
18
|
+
readonly onUpdate?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export type DateFieldValueChangeHandler = NonNullable<DateFieldOptions['onValueChange']>;
|
|
21
|
+
export type DateFieldInputStateChangeHandler = NonNullable<DateFieldOptions['onInputStateChange']>;
|
|
22
|
+
export type DateFieldUpdateHandler = NonNullable<DateFieldOptions['onUpdate']>;
|
|
23
|
+
export interface DateFieldControlledValues {
|
|
24
|
+
readonly value?: DateValue | null;
|
|
25
|
+
readonly inputState?: TextEditingState;
|
|
26
|
+
}
|
|
27
|
+
export interface DateFieldConnection {
|
|
28
|
+
getSnapshot(): RevisionSnapshot<DateFieldState>;
|
|
29
|
+
getText(): string;
|
|
30
|
+
getValue(): DateValue | null;
|
|
31
|
+
getCaret(): number;
|
|
32
|
+
syncControlledValues(values: DateFieldControlledValues): Result<RevisionSnapshot<DateFieldState>>;
|
|
33
|
+
handleEvent(event: DateFieldEvent): boolean;
|
|
34
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
35
|
+
handleTextInput(text: string): boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare function createDateField(options?: DateFieldOptions): FacadeConnection<DateFieldConnection>;
|
|
38
|
+
export declare function tryCreateDateField(options?: DateFieldOptions): Result<FacadeConnection<DateFieldConnection>>;
|
|
39
|
+
//# sourceMappingURL=date-field.d.ts.map
|