@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,34 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import type { RevisionSnapshot } from '@sectile/core/revision';
|
|
4
|
+
import { type AccordionEvent, type AccordionPolicies, type AccordionState } from '@sectile/core/accordion';
|
|
5
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
6
|
+
export interface AccordionOptions<ID extends StableID = StableID> {
|
|
7
|
+
readonly items: readonly ID[];
|
|
8
|
+
readonly policies?: AccordionPolicies<ID>;
|
|
9
|
+
readonly disabledItems?: readonly ID[];
|
|
10
|
+
readonly disabled?: boolean;
|
|
11
|
+
readonly openIDs?: readonly ID[];
|
|
12
|
+
readonly defaultOpenIDs?: readonly ID[];
|
|
13
|
+
readonly highlightedValue?: ID | null;
|
|
14
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
15
|
+
readonly onOpenChange?: (openIDs: readonly ID[]) => void;
|
|
16
|
+
readonly onHighlightedValueChange?: (value: ID | null) => void;
|
|
17
|
+
readonly onUpdate?: () => void;
|
|
18
|
+
}
|
|
19
|
+
export type AccordionOpenChangeHandler<ID extends StableID = StableID> = NonNullable<AccordionOptions<ID>['onOpenChange']>;
|
|
20
|
+
export type AccordionHighlightedValueChangeHandler<ID extends StableID = StableID> = NonNullable<AccordionOptions<ID>['onHighlightedValueChange']>;
|
|
21
|
+
export type AccordionUpdateHandler<ID extends StableID = StableID> = NonNullable<AccordionOptions<ID>['onUpdate']>;
|
|
22
|
+
export interface AccordionConnection<ID extends StableID = StableID> {
|
|
23
|
+
getSnapshot(): RevisionSnapshot<AccordionState<ID>>;
|
|
24
|
+
syncControlledValues(values: {
|
|
25
|
+
readonly openIDs?: readonly ID[];
|
|
26
|
+
readonly highlightedValue?: ID | null;
|
|
27
|
+
}): Result<RevisionSnapshot<AccordionState<ID>>>;
|
|
28
|
+
handleEvent(event: AccordionEvent<ID>): boolean;
|
|
29
|
+
handleKeyboardInput(input: TerminalKeyboardInput): boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function createAccordion<ID extends StableID>(options: AccordionOptions<ID>): FacadeConnection<AccordionConnection<ID>>;
|
|
32
|
+
export declare function tryCreateAccordion<ID extends StableID>(options: AccordionOptions<ID>): Result<FacadeConnection<AccordionConnection<ID>>>;
|
|
33
|
+
export declare function toAccordionEvent<ID extends StableID = StableID>(input: TerminalKeyboardInput): AccordionEvent<ID> | null;
|
|
34
|
+
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../src/accordion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { tryCreateSequence } from '@sectile/core/sequence';
|
|
4
|
+
import { applyAccordionEvent, tryCreateAccordionState } from '@sectile/core/accordion';
|
|
5
|
+
import { createSemanticController } from './internal/semantic-controller.js';
|
|
6
|
+
import { createDisabledItems } from './internal/disabled-items.js';
|
|
7
|
+
export function createAccordion(options) {
|
|
8
|
+
return unwrap(tryCreateAccordion(options));
|
|
9
|
+
}
|
|
10
|
+
export function tryCreateAccordion(options) {
|
|
11
|
+
return createFacadeConnection(options, (options) => tryCreateAccordionConnection(options));
|
|
12
|
+
}
|
|
13
|
+
function tryCreateAccordionConnection(options) {
|
|
14
|
+
const domain = tryCreateSequence(options.items);
|
|
15
|
+
if (!domain.ok)
|
|
16
|
+
return domain;
|
|
17
|
+
const disabled = createDisabledItems(domain.value, options.disabledItems);
|
|
18
|
+
if (!disabled.ok)
|
|
19
|
+
return disabled;
|
|
20
|
+
const suppliedEligibility = options.policies?.eligible;
|
|
21
|
+
const policies = Object.freeze({ ...options.policies, eligible: (id) => !disabled.value.has(id) && (suppliedEligibility?.(id) ?? true) });
|
|
22
|
+
const openControlled = options.openIDs !== undefined;
|
|
23
|
+
const highlightControlled = options.highlightedValue !== undefined;
|
|
24
|
+
const initialOpen = options.openIDs ?? options.defaultOpenIDs ?? (options.policies?.collapsible === false && options.items[0] !== undefined ? [options.items[0]] : []);
|
|
25
|
+
const runtime = createSemanticController({
|
|
26
|
+
initial: tryCreateAccordionState(domain.value, { openIDs: initialOpen, current: options.highlightedValue !== undefined ? options.highlightedValue : options.defaultHighlightedValue ?? null }, policies),
|
|
27
|
+
reducer: (state, event) => applyAccordionEvent(domain.value, state, event, policies),
|
|
28
|
+
reconcile: (previous, proposed) => tryCreateAccordionState(domain.value, { openIDs: openControlled ? previous.openIDs : proposed.openIDs, current: highlightControlled ? previous.cursor.current : proposed.cursor.current }, policies),
|
|
29
|
+
notify: (previous, proposed) => { if (!sameIDs(previous.openIDs, proposed.openIDs))
|
|
30
|
+
options.onOpenChange?.(proposed.openIDs); if (previous.cursor.current !== proposed.cursor.current)
|
|
31
|
+
options.onHighlightedValueChange?.(proposed.cursor.current); },
|
|
32
|
+
toEffect: (command) => command,
|
|
33
|
+
interaction: options,
|
|
34
|
+
});
|
|
35
|
+
if (!runtime.ok)
|
|
36
|
+
return runtime;
|
|
37
|
+
return { ok: true, value: new TerminalAccordionConnection(options, domain.value, runtime.value, openControlled, highlightControlled, policies) };
|
|
38
|
+
}
|
|
39
|
+
export function toAccordionEvent(input) {
|
|
40
|
+
if (input.key === 'down')
|
|
41
|
+
return 'next';
|
|
42
|
+
if (input.key === 'up')
|
|
43
|
+
return 'previous';
|
|
44
|
+
if (input.key === 'home')
|
|
45
|
+
return 'first';
|
|
46
|
+
if (input.key === 'end')
|
|
47
|
+
return 'last';
|
|
48
|
+
if (input.key === 'enter' || input.key === 'space')
|
|
49
|
+
return 'toggle';
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
class TerminalAccordionConnection {
|
|
53
|
+
#options;
|
|
54
|
+
#domain;
|
|
55
|
+
#runtime;
|
|
56
|
+
#openControlled;
|
|
57
|
+
#highlightControlled;
|
|
58
|
+
#policies;
|
|
59
|
+
constructor(options, domain, runtime, openControlled, highlightControlled, policies) { this.#options = options; this.#domain = domain; this.#runtime = runtime; this.#openControlled = openControlled; this.#highlightControlled = highlightControlled; this.#policies = policies; }
|
|
60
|
+
getSnapshot() { return this.#runtime.getSnapshot(); }
|
|
61
|
+
syncControlledValues(values) {
|
|
62
|
+
if (this.#openControlled !== (values.openIDs !== undefined) || this.#highlightControlled !== (values.highlightedValue !== undefined))
|
|
63
|
+
return { ok: false, error: { class: 'construction', code: 'controlled-shape-mismatch', message: 'Controlled accordion values must preserve their construction-time shape.' } };
|
|
64
|
+
const state = this.#runtime.getSnapshot().state;
|
|
65
|
+
const result = this.#runtime.replace(tryCreateAccordionState(this.#domain, { openIDs: this.#openControlled ? values.openIDs : state.openIDs, current: this.#highlightControlled ? values.highlightedValue : state.cursor.current }, this.#policies));
|
|
66
|
+
if (result.ok)
|
|
67
|
+
this.#options.onUpdate?.();
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
handleEvent(event) { const result = this.#runtime.handle(event); if (result.ok)
|
|
71
|
+
this.#options.onUpdate?.(); return result.ok; }
|
|
72
|
+
handleKeyboardInput(input) { const event = toAccordionEvent(input); if (event === null)
|
|
73
|
+
return false; return this.handleEvent(event); }
|
|
74
|
+
}
|
|
75
|
+
function sameIDs(left, right) { return left.length === right.length && left.every((id, index) => id === right[index]); }
|
|
76
|
+
//# sourceMappingURL=accordion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion.js","sourceRoot":"","sources":["../src/accordion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result } from '@sectile/core';
|
|
3
|
+
import { type AlertDialogEvent, type AlertDialogState } from '@sectile/core/alert-dialog';
|
|
4
|
+
import { type TerminalPopupConnection } from './internal/popup-control.js';
|
|
5
|
+
export interface AlertDialogOptions {
|
|
6
|
+
readonly open?: boolean;
|
|
7
|
+
readonly defaultOpen?: boolean;
|
|
8
|
+
readonly disabled?: boolean;
|
|
9
|
+
readonly onOpenChange?: (open: boolean) => void;
|
|
10
|
+
readonly onInitialFocus?: () => void;
|
|
11
|
+
readonly onFocusRestore?: () => void;
|
|
12
|
+
readonly onAnnounce?: () => void;
|
|
13
|
+
readonly onUpdate?: () => void;
|
|
14
|
+
}
|
|
15
|
+
export type AlertDialogOpenChangeHandler = NonNullable<AlertDialogOptions['onOpenChange']>;
|
|
16
|
+
export type AlertDialogInitialFocusHandler = NonNullable<AlertDialogOptions['onInitialFocus']>;
|
|
17
|
+
export type AlertDialogFocusRestoreHandler = NonNullable<AlertDialogOptions['onFocusRestore']>;
|
|
18
|
+
export type AlertDialogAnnounceHandler = NonNullable<AlertDialogOptions['onAnnounce']>;
|
|
19
|
+
export type AlertDialogUpdateHandler = NonNullable<AlertDialogOptions['onUpdate']>;
|
|
20
|
+
export type AlertDialogConnection = TerminalPopupConnection<AlertDialogState, AlertDialogEvent>;
|
|
21
|
+
export declare function createAlertDialog(o?: AlertDialogOptions): FacadeConnection<AlertDialogConnection>;
|
|
22
|
+
export declare function tryCreateAlertDialog(o?: AlertDialogOptions): Result<FacadeConnection<AlertDialogConnection>>;
|
|
23
|
+
//# sourceMappingURL=alert-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../src/alert-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAA6E,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACrK,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAChG,MAAM,WAAW,kBAAkB;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,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE;AAE3T,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC;AAC3F,MAAM,MAAM,8BAA8B,GAAG,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,8BAA8B,GAAG,WAAW,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;AACvF,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;AACnF,MAAM,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAChG,wBAAgB,iBAAiB,CAAC,CAAC,GAAE,kBAAuB,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAErG;AAED,wBAAgB,oBAAoB,CAAC,CAAC,GAAE,kBAAuB,GAAG,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAEhH"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createFacadeConnection } from './internal/facade.js';
|
|
2
|
+
import { unwrap } from '@sectile/core/result';
|
|
3
|
+
import { applyAlertDialogEvent, tryCreateAlertDialogState } from '@sectile/core/alert-dialog';
|
|
4
|
+
import { createTerminalPopup } from './internal/popup-control.js';
|
|
5
|
+
export function createAlertDialog(o = {}) {
|
|
6
|
+
return unwrap(tryCreateAlertDialog(o));
|
|
7
|
+
}
|
|
8
|
+
export function tryCreateAlertDialog(o = {}) {
|
|
9
|
+
return createFacadeConnection(o, (o) => tryCreateAlertDialogConnection(o));
|
|
10
|
+
}
|
|
11
|
+
function tryCreateAlertDialogConnection(o = {}) { return createTerminalPopup({ controlled: o.open !== undefined, initial: tryCreateAlertDialogState(o.open ?? o.defaultOpen ?? false), reducer: applyAlertDialogEvent, create: tryCreateAlertDialogState, read: (s) => s.open, close: 'close', interaction: o, onOpenChange: o.onOpenChange, command: (c) => c.type === 'request-initial-focus' ? o.onInitialFocus?.() : c.type === 'request-focus-restore' ? o.onFocusRestore?.() : o.onAnnounce?.(), onUpdate: o.onUpdate }); }
|
|
12
|
+
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog.js","sourceRoot":"","sources":["../src/alert-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAyE,MAAM,4BAA4B,CAAC;AACrK,OAAO,EAAE,mBAAmB,EAAgC,MAAM,6BAA6B,CAAC;AAShG,MAAM,UAAU,iBAAiB,CAAC,CAAC,GAAuB,EAAE;IAC1D,OAAO,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAC,GAAuB,EAAE;IAC7D,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,8BAA8B,CAAC,CAAC,GAAuB,EAAE,IAAmC,OAAO,mBAAmB,CAAyD,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,yBAAyB,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,IAAI,KAAK,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type TerminalColorLevel = 0 | 1 | 2 | 3;
|
|
2
|
+
export interface TerminalCapabilities {
|
|
3
|
+
readonly colorLevel: TerminalColorLevel;
|
|
4
|
+
readonly unicode: boolean;
|
|
5
|
+
}
|
|
6
|
+
export type TerminalNamedColor = 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'bright-black' | 'bright-red' | 'bright-green' | 'bright-yellow' | 'bright-blue' | 'bright-magenta' | 'bright-cyan' | 'bright-white';
|
|
7
|
+
export interface TerminalIndexedColor {
|
|
8
|
+
readonly index: number;
|
|
9
|
+
}
|
|
10
|
+
export interface TerminalRGBColor {
|
|
11
|
+
readonly red: number;
|
|
12
|
+
readonly green: number;
|
|
13
|
+
readonly blue: number;
|
|
14
|
+
}
|
|
15
|
+
export type TerminalColor = TerminalNamedColor | TerminalIndexedColor | TerminalRGBColor;
|
|
16
|
+
export interface TerminalStyle {
|
|
17
|
+
readonly foreground?: TerminalColor;
|
|
18
|
+
readonly background?: TerminalColor;
|
|
19
|
+
readonly bold?: boolean;
|
|
20
|
+
readonly dim?: boolean;
|
|
21
|
+
readonly italic?: boolean;
|
|
22
|
+
readonly underline?: boolean;
|
|
23
|
+
readonly inverse?: boolean;
|
|
24
|
+
readonly strikethrough?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export type TerminalThemeRole = 'default' | 'accent' | 'muted' | 'current' | 'selected' | 'disabled' | 'editing' | 'success' | 'warning' | 'danger';
|
|
27
|
+
export type TerminalTheme = Readonly<Record<TerminalThemeRole, TerminalStyle>>;
|
|
28
|
+
export type TerminalStyleReference = TerminalThemeRole | TerminalStyle;
|
|
29
|
+
export interface TerminalCellState {
|
|
30
|
+
readonly current?: boolean;
|
|
31
|
+
readonly selected?: boolean;
|
|
32
|
+
readonly disabled?: boolean;
|
|
33
|
+
readonly editing?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface TerminalAppearanceOptions {
|
|
36
|
+
readonly capabilities?: TerminalCapabilities;
|
|
37
|
+
readonly theme?: Partial<TerminalTheme>;
|
|
38
|
+
}
|
|
39
|
+
export interface TerminalAppearance {
|
|
40
|
+
readonly capabilities: TerminalCapabilities;
|
|
41
|
+
readonly theme: TerminalTheme;
|
|
42
|
+
readonly reset: string;
|
|
43
|
+
open(style?: TerminalStyleReference): string;
|
|
44
|
+
style(value: string, style?: TerminalStyleReference): string;
|
|
45
|
+
cell(value: string, width: number, state?: TerminalCellState): string;
|
|
46
|
+
}
|
|
47
|
+
export declare const defaultTerminalCapabilities: TerminalCapabilities;
|
|
48
|
+
export declare const defaultTerminalTheme: TerminalTheme;
|
|
49
|
+
export declare function createTerminalAppearance(options?: TerminalAppearanceOptions): TerminalAppearance;
|
|
50
|
+
//# sourceMappingURL=appearance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { fitTerminalText } from './layout.js';
|
|
2
|
+
const ANSI_RGB = Object.freeze({
|
|
3
|
+
black: [0, 0, 0],
|
|
4
|
+
red: [205, 49, 49],
|
|
5
|
+
green: [13, 188, 121],
|
|
6
|
+
yellow: [229, 229, 16],
|
|
7
|
+
blue: [36, 114, 200],
|
|
8
|
+
magenta: [188, 63, 188],
|
|
9
|
+
cyan: [17, 168, 205],
|
|
10
|
+
white: [229, 229, 229],
|
|
11
|
+
'bright-black': [102, 102, 102],
|
|
12
|
+
'bright-red': [241, 76, 76],
|
|
13
|
+
'bright-green': [35, 209, 139],
|
|
14
|
+
'bright-yellow': [245, 245, 67],
|
|
15
|
+
'bright-blue': [59, 142, 234],
|
|
16
|
+
'bright-magenta': [214, 112, 214],
|
|
17
|
+
'bright-cyan': [41, 184, 219],
|
|
18
|
+
'bright-white': [255, 255, 255],
|
|
19
|
+
});
|
|
20
|
+
const ANSI_NAMES = Object.freeze(Object.keys(ANSI_RGB));
|
|
21
|
+
export const defaultTerminalCapabilities = Object.freeze({
|
|
22
|
+
colorLevel: 1,
|
|
23
|
+
unicode: true,
|
|
24
|
+
});
|
|
25
|
+
export const defaultTerminalTheme = Object.freeze({
|
|
26
|
+
default: Object.freeze({}),
|
|
27
|
+
accent: Object.freeze({ foreground: 'cyan' }),
|
|
28
|
+
muted: Object.freeze({ dim: true }),
|
|
29
|
+
current: Object.freeze({ foreground: 'black', background: 'cyan' }),
|
|
30
|
+
selected: Object.freeze({ foreground: 'cyan', bold: true }),
|
|
31
|
+
disabled: Object.freeze({ dim: true }),
|
|
32
|
+
editing: Object.freeze({ foreground: 'black', background: 'yellow' }),
|
|
33
|
+
success: Object.freeze({ foreground: 'green' }),
|
|
34
|
+
warning: Object.freeze({ foreground: 'yellow' }),
|
|
35
|
+
danger: Object.freeze({ foreground: 'red' }),
|
|
36
|
+
});
|
|
37
|
+
export function createTerminalAppearance(options = {}) {
|
|
38
|
+
const capabilities = Object.freeze({
|
|
39
|
+
...defaultTerminalCapabilities,
|
|
40
|
+
...options.capabilities,
|
|
41
|
+
});
|
|
42
|
+
const theme = mergeTerminalTheme(options.theme);
|
|
43
|
+
const reset = capabilities.colorLevel === 0 ? '' : '\u001b[0m';
|
|
44
|
+
const open = (reference = 'default') => {
|
|
45
|
+
if (capabilities.colorLevel === 0)
|
|
46
|
+
return '';
|
|
47
|
+
const style = typeof reference === 'string' ? theme[reference] : reference;
|
|
48
|
+
const codes = [];
|
|
49
|
+
if (style.bold === true)
|
|
50
|
+
codes.push('1');
|
|
51
|
+
if (style.dim === true)
|
|
52
|
+
codes.push('2');
|
|
53
|
+
if (style.italic === true)
|
|
54
|
+
codes.push('3');
|
|
55
|
+
if (style.underline === true)
|
|
56
|
+
codes.push('4');
|
|
57
|
+
if (style.inverse === true)
|
|
58
|
+
codes.push('7');
|
|
59
|
+
if (style.strikethrough === true)
|
|
60
|
+
codes.push('9');
|
|
61
|
+
if (style.foreground !== undefined) {
|
|
62
|
+
codes.push(...colorCodes(style.foreground, capabilities.colorLevel, false));
|
|
63
|
+
}
|
|
64
|
+
if (style.background !== undefined) {
|
|
65
|
+
codes.push(...colorCodes(style.background, capabilities.colorLevel, true));
|
|
66
|
+
}
|
|
67
|
+
return codes.length === 0 ? '' : `\u001b[${codes.join(';')}m`;
|
|
68
|
+
};
|
|
69
|
+
const style = (value, reference = 'default') => {
|
|
70
|
+
const prefix = open(reference);
|
|
71
|
+
return prefix.length === 0 ? value : `${prefix}${value}${reset}`;
|
|
72
|
+
};
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
capabilities,
|
|
75
|
+
theme,
|
|
76
|
+
reset,
|
|
77
|
+
open,
|
|
78
|
+
style,
|
|
79
|
+
cell(value, width, state = {}) {
|
|
80
|
+
const marker = state.current === true ? '>' : ' ';
|
|
81
|
+
const selection = state.selected === true ? '●' : ' ';
|
|
82
|
+
const content = `${marker}${selection}${fitTerminalText(value, Math.max(0, width - 2))}`;
|
|
83
|
+
const fitted = fitTerminalText(content, width);
|
|
84
|
+
const role = state.disabled === true
|
|
85
|
+
? 'disabled'
|
|
86
|
+
: state.editing === true
|
|
87
|
+
? 'editing'
|
|
88
|
+
: state.current === true
|
|
89
|
+
? 'current'
|
|
90
|
+
: state.selected === true
|
|
91
|
+
? 'selected'
|
|
92
|
+
: 'default';
|
|
93
|
+
return style(fitted, role);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function mergeTerminalTheme(theme) {
|
|
98
|
+
if (theme === undefined)
|
|
99
|
+
return defaultTerminalTheme;
|
|
100
|
+
return Object.freeze({
|
|
101
|
+
default: Object.freeze({ ...defaultTerminalTheme.default, ...theme.default }),
|
|
102
|
+
accent: Object.freeze({ ...defaultTerminalTheme.accent, ...theme.accent }),
|
|
103
|
+
muted: Object.freeze({ ...defaultTerminalTheme.muted, ...theme.muted }),
|
|
104
|
+
current: Object.freeze({ ...defaultTerminalTheme.current, ...theme.current }),
|
|
105
|
+
selected: Object.freeze({ ...defaultTerminalTheme.selected, ...theme.selected }),
|
|
106
|
+
disabled: Object.freeze({ ...defaultTerminalTheme.disabled, ...theme.disabled }),
|
|
107
|
+
editing: Object.freeze({ ...defaultTerminalTheme.editing, ...theme.editing }),
|
|
108
|
+
success: Object.freeze({ ...defaultTerminalTheme.success, ...theme.success }),
|
|
109
|
+
warning: Object.freeze({ ...defaultTerminalTheme.warning, ...theme.warning }),
|
|
110
|
+
danger: Object.freeze({ ...defaultTerminalTheme.danger, ...theme.danger }),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function colorCodes(color, level, background) {
|
|
114
|
+
const rgb = toRGB(color);
|
|
115
|
+
if (level === 3) {
|
|
116
|
+
return [background ? '48' : '38', '2', String(rgb[0]), String(rgb[1]), String(rgb[2])];
|
|
117
|
+
}
|
|
118
|
+
if (level === 2) {
|
|
119
|
+
const index = typeof color === 'object' && 'index' in color
|
|
120
|
+
? clampInteger(color.index, 0, 255)
|
|
121
|
+
: rgbToANSI256(rgb);
|
|
122
|
+
return [background ? '48' : '38', '5', String(index)];
|
|
123
|
+
}
|
|
124
|
+
const index = typeof color === 'string'
|
|
125
|
+
? ANSI_NAMES.indexOf(color)
|
|
126
|
+
: nearestANSIIndex(rgb);
|
|
127
|
+
const base = index < 8
|
|
128
|
+
? (background ? 40 : 30) + index
|
|
129
|
+
: (background ? 100 : 90) + index - 8;
|
|
130
|
+
return [String(base)];
|
|
131
|
+
}
|
|
132
|
+
function toRGB(color) {
|
|
133
|
+
if (typeof color === 'string')
|
|
134
|
+
return ANSI_RGB[color];
|
|
135
|
+
if ('index' in color)
|
|
136
|
+
return ansi256ToRGB(clampInteger(color.index, 0, 255));
|
|
137
|
+
return [
|
|
138
|
+
clampInteger(color.red, 0, 255),
|
|
139
|
+
clampInteger(color.green, 0, 255),
|
|
140
|
+
clampInteger(color.blue, 0, 255),
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
function nearestANSIIndex(rgb) {
|
|
144
|
+
let nearest = 0;
|
|
145
|
+
let nearestDistance = Number.POSITIVE_INFINITY;
|
|
146
|
+
for (let index = 0; index < ANSI_NAMES.length; index += 1) {
|
|
147
|
+
const name = ANSI_NAMES[index];
|
|
148
|
+
if (name === undefined)
|
|
149
|
+
continue;
|
|
150
|
+
const candidate = ANSI_RGB[name];
|
|
151
|
+
const distance = squaredDistance(rgb, candidate);
|
|
152
|
+
if (distance < nearestDistance) {
|
|
153
|
+
nearest = index;
|
|
154
|
+
nearestDistance = distance;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return nearest;
|
|
158
|
+
}
|
|
159
|
+
function rgbToANSI256(rgb) {
|
|
160
|
+
const maximum = Math.max(rgb[0], rgb[1], rgb[2]);
|
|
161
|
+
const minimum = Math.min(rgb[0], rgb[1], rgb[2]);
|
|
162
|
+
if (maximum - minimum < 10) {
|
|
163
|
+
if (maximum < 8)
|
|
164
|
+
return 16;
|
|
165
|
+
if (maximum > 248)
|
|
166
|
+
return 231;
|
|
167
|
+
return Math.round((maximum - 8) / 247 * 24) + 232;
|
|
168
|
+
}
|
|
169
|
+
const red = Math.round(rgb[0] / 255 * 5);
|
|
170
|
+
const green = Math.round(rgb[1] / 255 * 5);
|
|
171
|
+
const blue = Math.round(rgb[2] / 255 * 5);
|
|
172
|
+
return 16 + 36 * red + 6 * green + blue;
|
|
173
|
+
}
|
|
174
|
+
function ansi256ToRGB(index) {
|
|
175
|
+
if (index < 16) {
|
|
176
|
+
const name = ANSI_NAMES[index];
|
|
177
|
+
return name === undefined ? [0, 0, 0] : ANSI_RGB[name];
|
|
178
|
+
}
|
|
179
|
+
if (index >= 232) {
|
|
180
|
+
const value = 8 + (index - 232) * 10;
|
|
181
|
+
return [value, value, value];
|
|
182
|
+
}
|
|
183
|
+
const cube = index - 16;
|
|
184
|
+
const red = Math.floor(cube / 36);
|
|
185
|
+
const green = Math.floor(cube % 36 / 6);
|
|
186
|
+
const blue = cube % 6;
|
|
187
|
+
const channel = (value) => value === 0 ? 0 : 55 + value * 40;
|
|
188
|
+
return [channel(red), channel(green), channel(blue)];
|
|
189
|
+
}
|
|
190
|
+
function squaredDistance(left, right) {
|
|
191
|
+
return (left[0] - right[0]) ** 2
|
|
192
|
+
+ (left[1] - right[1]) ** 2
|
|
193
|
+
+ (left[2] - right[2]) ** 2;
|
|
194
|
+
}
|
|
195
|
+
function clampInteger(value, minimum, maximum) {
|
|
196
|
+
if (!Number.isFinite(value))
|
|
197
|
+
return minimum;
|
|
198
|
+
return Math.min(maximum, Math.max(minimum, Math.round(value)));
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=appearance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appearance.js","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type FacadeConnection } from './internal/facade.js';
|
|
2
|
+
import type { Result, StableID } from '@sectile/core';
|
|
3
|
+
import { type CalendarCommand, type CalendarEvent, type CalendarPolicies, type CalendarState } from '@sectile/core/calendar';
|
|
4
|
+
import { type Grid } from '@sectile/core/grid';
|
|
5
|
+
import { type RevisionResult, type RevisionSnapshot } from '@sectile/core/revision';
|
|
6
|
+
import type { TerminalKeyboardInput } from './keyboard.js';
|
|
7
|
+
export type KeyboardInput = TerminalKeyboardInput;
|
|
8
|
+
export type CalendarEffect<ID extends StableID = StableID> = {
|
|
9
|
+
readonly type: 'move-highlight';
|
|
10
|
+
readonly id: ID;
|
|
11
|
+
} | {
|
|
12
|
+
readonly type: 'request-page';
|
|
13
|
+
readonly direction: -1 | 1;
|
|
14
|
+
readonly from: ID | null;
|
|
15
|
+
};
|
|
16
|
+
export interface CalendarValueChangeDetails<ID extends StableID = StableID> {
|
|
17
|
+
readonly value: ID | null;
|
|
18
|
+
readonly previousValue: ID | null;
|
|
19
|
+
}
|
|
20
|
+
export interface CalendarHighlightChangeDetails<ID extends StableID = StableID> {
|
|
21
|
+
readonly value: ID | null;
|
|
22
|
+
readonly previousValue: ID | null;
|
|
23
|
+
}
|
|
24
|
+
export interface CalendarControllerOptions<ID extends StableID = StableID> {
|
|
25
|
+
readonly grid: Grid<ID>;
|
|
26
|
+
readonly disabled?: boolean;
|
|
27
|
+
readonly policies?: CalendarPolicies<ID>;
|
|
28
|
+
readonly value?: ID | null;
|
|
29
|
+
readonly defaultValue?: ID | null;
|
|
30
|
+
readonly highlightedValue?: ID | null;
|
|
31
|
+
readonly defaultHighlightedValue?: ID | null;
|
|
32
|
+
readonly onValueChange?: (change: CalendarValueChangeDetails<ID>) => void;
|
|
33
|
+
readonly onHighlightedValueChange?: (change: CalendarHighlightChangeDetails<ID>) => void;
|
|
34
|
+
}
|
|
35
|
+
export type CalendarControllerValueChangeHandler<ID extends StableID = StableID> = NonNullable<CalendarControllerOptions<ID>['onValueChange']>;
|
|
36
|
+
export type CalendarControllerHighlightedValueChangeHandler<ID extends StableID = StableID> = NonNullable<CalendarControllerOptions<ID>['onHighlightedValueChange']>;
|
|
37
|
+
export interface CalendarControlledValues<ID extends StableID = StableID> {
|
|
38
|
+
readonly value?: ID | null;
|
|
39
|
+
readonly highlightedValue?: ID | null;
|
|
40
|
+
}
|
|
41
|
+
export interface CalendarController<ID extends StableID = StableID> {
|
|
42
|
+
readonly grid: Grid<ID>;
|
|
43
|
+
getSnapshot(): RevisionSnapshot<CalendarState<ID>>;
|
|
44
|
+
syncControlledValues(values: CalendarControlledValues<ID>): Result<RevisionSnapshot<CalendarState<ID>>>;
|
|
45
|
+
handleKeyboardInput(input: KeyboardInput, expectedRevision?: number): RevisionResult<CalendarState<ID>, CalendarEffect<ID>>;
|
|
46
|
+
}
|
|
47
|
+
export interface CalendarPageRequestDetails<ID extends StableID = StableID> {
|
|
48
|
+
readonly direction: -1 | 1;
|
|
49
|
+
readonly from: ID | null;
|
|
50
|
+
}
|
|
51
|
+
export interface CalendarTransitionDetails<ID extends StableID = StableID> {
|
|
52
|
+
readonly event: CalendarEvent<ID>;
|
|
53
|
+
readonly result: RevisionResult<CalendarState<ID>, CalendarEffect<ID>>;
|
|
54
|
+
}
|
|
55
|
+
export interface CalendarConnectionOptions<ID extends StableID = StableID> {
|
|
56
|
+
readonly controller: CalendarController<ID>;
|
|
57
|
+
readonly disabled?: boolean;
|
|
58
|
+
readonly onPageRequest?: (details: CalendarPageRequestDetails<ID>) => void;
|
|
59
|
+
readonly onTransition?: (details: CalendarTransitionDetails<ID>) => void;
|
|
60
|
+
readonly onUpdate?: () => void;
|
|
61
|
+
}
|
|
62
|
+
export type CalendarConnectionPageRequestHandler<ID extends StableID = StableID> = NonNullable<CalendarConnectionOptions<ID>['onPageRequest']>;
|
|
63
|
+
export type CalendarConnectionTransitionHandler<ID extends StableID = StableID> = NonNullable<CalendarConnectionOptions<ID>['onTransition']>;
|
|
64
|
+
export type CalendarConnectionUpdateHandler<ID extends StableID = StableID> = NonNullable<CalendarConnectionOptions<ID>['onUpdate']>;
|
|
65
|
+
export interface CalendarConnection<ID extends StableID = StableID> {
|
|
66
|
+
readonly grid: Grid<ID>;
|
|
67
|
+
getSnapshot(): RevisionSnapshot<CalendarState<ID>>;
|
|
68
|
+
syncControlledValues(values: CalendarControlledValues<ID>): Result<RevisionSnapshot<CalendarState<ID>>>;
|
|
69
|
+
handleKeyboardInput(input: KeyboardInput): boolean;
|
|
70
|
+
}
|
|
71
|
+
export type CalendarOptions<ID extends StableID = StableID> = Omit<CalendarControllerOptions<ID>, 'grid'> & Omit<CalendarConnectionOptions<ID>, 'controller'> & {
|
|
72
|
+
readonly rows: readonly (readonly ID[])[];
|
|
73
|
+
};
|
|
74
|
+
export declare function createCalendarController<ID extends StableID>(options: CalendarControllerOptions<ID>): Result<CalendarController<ID>>;
|
|
75
|
+
export declare function createCalendar<ID extends StableID>(options: CalendarOptions<ID>): FacadeConnection<CalendarConnection<ID>>;
|
|
76
|
+
export declare function tryCreateCalendar<ID extends StableID>(options: CalendarOptions<ID>): Result<FacadeConnection<CalendarConnection<ID>>>;
|
|
77
|
+
export declare function connectCalendar<ID extends StableID>(options: CalendarConnectionOptions<ID>): CalendarConnection<ID>;
|
|
78
|
+
export declare function toCalendarEvent<ID extends StableID = StableID>(input: KeyboardInput): CalendarEvent<ID> | null;
|
|
79
|
+
export declare function toCalendarEffect<ID extends StableID>(command: CalendarCommand<ID>): CalendarEffect<ID>;
|
|
80
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}
|