@sectile/core 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion.d.ts +0 -1
- package/dist/adapter-runtime.d.ts +53 -2
- package/dist/adapter-runtime.js +224 -25
- package/dist/adapter-runtime.js.map +1 -1
- package/dist/alert-dialog.d.ts +0 -1
- package/dist/carousel.d.ts +0 -1
- package/dist/cascade-list.d.ts +16 -0
- package/dist/cascade-list.js +33 -0
- package/dist/cascade-list.js.map +1 -0
- package/dist/cascade-select.d.ts +0 -1
- package/dist/cascade-select.js +47 -119
- package/dist/cascade-select.js.map +1 -1
- package/dist/checkbox-group.d.ts +0 -1
- package/dist/checkbox.d.ts +0 -1
- package/dist/collection-window.d.ts +0 -1
- package/dist/color-picker.d.ts +3 -8
- package/dist/color-picker.js +60 -305
- package/dist/color-picker.js.map +1 -1
- package/dist/combobox.d.ts +0 -1
- package/dist/dialog.d.ts +0 -1
- package/dist/disclosure.d.ts +0 -1
- package/dist/drawer.d.ts +0 -1
- package/dist/editable.d.ts +0 -1
- package/dist/editing/color-text.d.ts +7 -0
- package/dist/editing/color-text.js +199 -0
- package/dist/editing/color-text.js.map +1 -0
- package/dist/error-code.d.ts +1 -2
- package/dist/feed.d.ts +0 -1
- package/dist/grid-control.d.ts +3 -0
- package/dist/grid-control.js +2 -0
- package/dist/grid-control.js.map +1 -0
- package/dist/identity.d.ts +10 -0
- package/dist/identity.js +16 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/interaction.d.ts +0 -1
- package/dist/internal/composites/cascade-choice.d.ts +54 -0
- package/dist/internal/composites/cascade-choice.js +154 -0
- package/dist/internal/composites/cascade-choice.js.map +1 -0
- package/dist/internal/composites/combobox.d.ts +0 -1
- package/dist/internal/composites/combobox.js +28 -11
- package/dist/internal/composites/combobox.js.map +1 -1
- package/dist/internal/composites/grid-control.d.ts +0 -1
- package/dist/internal/composites/grid-control.js +18 -23
- package/dist/internal/composites/grid-control.js.map +1 -1
- package/dist/internal/composites/linear-action.d.ts +0 -1
- package/dist/internal/composites/linear-action.js +20 -14
- package/dist/internal/composites/linear-action.js.map +1 -1
- package/dist/internal/composites/linear-choice.d.ts +0 -1
- package/dist/internal/composites/linear-choice.js +15 -8
- package/dist/internal/composites/linear-choice.js.map +1 -1
- package/dist/internal/composites/listbox.d.ts +0 -1
- package/dist/internal/composites/listbox.js +15 -13
- package/dist/internal/composites/listbox.js.map +1 -1
- package/dist/internal/composites/menu.d.ts +0 -1
- package/dist/internal/composites/menu.js +38 -17
- package/dist/internal/composites/menu.js.map +1 -1
- package/dist/internal/composites/popup.d.ts +0 -1
- package/dist/internal/composites/slider.d.ts +0 -1
- package/dist/internal/composites/tree-grid.d.ts +0 -1
- package/dist/internal/composites/tree-grid.js +70 -48
- package/dist/internal/composites/tree-grid.js.map +1 -1
- package/dist/internal/composites/tree-view.d.ts +0 -1
- package/dist/internal/composites/tree-view.js +32 -20
- package/dist/internal/composites/tree-view.js.map +1 -1
- package/dist/internal/editing/text.d.ts +0 -1
- package/dist/internal/editing/text.js +40 -27
- package/dist/internal/editing/text.js.map +1 -1
- package/dist/internal/kernel/bounded-scalar.d.ts +31 -0
- package/dist/internal/kernel/bounded-scalar.js +78 -0
- package/dist/internal/kernel/bounded-scalar.js.map +1 -0
- package/dist/internal/kernel/decimal.d.ts +0 -1
- package/dist/internal/kernel/exact-ratio.d.ts +5 -0
- package/dist/internal/kernel/exact-ratio.js +2 -0
- package/dist/internal/kernel/exact-ratio.js.map +1 -0
- package/dist/internal/kernel/foundation.d.ts +8 -6
- package/dist/internal/kernel/foundation.js +35 -16
- package/dist/internal/kernel/foundation.js.map +1 -1
- package/dist/internal/kernel/indexed-sequence.d.ts +28 -3
- package/dist/internal/kernel/indexed-sequence.js +162 -12
- package/dist/internal/kernel/indexed-sequence.js.map +1 -1
- package/dist/internal/kernel/machine.d.ts +1 -2
- package/dist/internal/kernel/machine.js +5 -2
- package/dist/internal/kernel/machine.js.map +1 -1
- package/dist/internal/runtime/revision.d.ts +0 -1
- package/dist/internal/state/checked.d.ts +0 -1
- package/dist/internal/state/cursor.d.ts +0 -1
- package/dist/internal/state/expansion.d.ts +0 -1
- package/dist/internal/state/open-state.d.ts +0 -1
- package/dist/internal/state/selection.d.ts +0 -1
- package/dist/internal/state/selection.js +99 -27
- package/dist/internal/state/selection.js.map +1 -1
- package/dist/layer-stack.d.ts +0 -1
- package/dist/listbox.d.ts +0 -1
- package/dist/menu-button.d.ts +0 -1
- package/dist/menu.d.ts +0 -1
- package/dist/menubar.d.ts +0 -1
- package/dist/meter-group.d.ts +38 -0
- package/dist/meter-group.js +103 -0
- package/dist/meter-group.js.map +1 -0
- package/dist/meter.d.ts +25 -0
- package/dist/meter.js +89 -0
- package/dist/meter.js.map +1 -0
- package/dist/multi-thumb-slider.d.ts +0 -1
- package/dist/navigation-menu.d.ts +0 -1
- package/dist/number-field.d.ts +0 -1
- package/dist/pagination.d.ts +0 -1
- package/dist/pin-input.d.ts +0 -1
- package/dist/popover.d.ts +0 -1
- package/dist/progress.d.ts +17 -0
- package/dist/progress.js +49 -0
- package/dist/progress.js.map +1 -0
- package/dist/quantity-field.d.ts +0 -1
- package/dist/radio-group.d.ts +0 -1
- package/dist/rating.d.ts +0 -1
- package/dist/reorder.d.ts +0 -1
- package/dist/reorder.js +92 -43
- package/dist/reorder.js.map +1 -1
- package/dist/result.d.ts +2 -1
- package/dist/result.js +14 -0
- package/dist/result.js.map +1 -1
- package/dist/revision.d.ts +1 -1
- package/dist/revision.js +1 -0
- package/dist/revision.js.map +1 -1
- package/dist/select.d.ts +0 -1
- package/dist/selection.d.ts +24 -0
- package/dist/selection.js +20 -0
- package/dist/selection.js.map +1 -0
- package/dist/shared.d.ts +0 -1
- package/dist/slider.d.ts +0 -1
- package/dist/spin-button.d.ts +0 -1
- package/dist/stepper.d.ts +0 -1
- package/dist/structures/anchored-layout.d.ts +33 -0
- package/dist/structures/anchored-layout.js +158 -0
- package/dist/structures/anchored-layout.js.map +1 -0
- package/dist/structures/color.d.ts +80 -0
- package/dist/structures/color.js +206 -0
- package/dist/structures/color.js.map +1 -0
- package/dist/structures/geometry.d.ts +53 -0
- package/dist/structures/geometry.js +165 -0
- package/dist/structures/geometry.js.map +1 -0
- package/dist/structures/grid.d.ts +20 -4
- package/dist/structures/grid.js +91 -50
- package/dist/structures/grid.js.map +1 -1
- package/dist/structures/index-span.d.ts +31 -0
- package/dist/structures/index-span.js +267 -0
- package/dist/structures/index-span.js.map +1 -0
- package/dist/structures/metric-index.d.ts +36 -0
- package/dist/structures/metric-index.js +390 -0
- package/dist/structures/metric-index.js.map +1 -0
- package/dist/structures/range.d.ts +21 -4
- package/dist/structures/range.js +156 -11
- package/dist/structures/range.js.map +1 -1
- package/dist/structures/selection-expression.d.ts +26 -0
- package/dist/structures/selection-expression.js +157 -0
- package/dist/structures/selection-expression.js.map +1 -0
- package/dist/structures/sequence.d.ts +0 -1
- package/dist/structures/sequence.js +69 -7
- package/dist/structures/sequence.js.map +1 -1
- package/dist/structures/tree.d.ts +5 -1
- package/dist/structures/tree.js +33 -5
- package/dist/structures/tree.js.map +1 -1
- package/dist/switch.d.ts +0 -1
- package/dist/tabs.d.ts +0 -1
- package/dist/tags-input.d.ts +0 -1
- package/dist/text.d.ts +0 -1
- package/dist/timer.d.ts +0 -1
- package/dist/toast.d.ts +2 -2
- package/dist/toast.js +3 -1
- package/dist/toast.js.map +1 -1
- package/dist/toggle-button.d.ts +0 -1
- package/dist/toggle-group.d.ts +0 -1
- package/dist/toolbar.d.ts +0 -1
- package/dist/tooltip.d.ts +0 -1
- package/dist/tree-grid.d.ts +0 -1
- package/dist/tree-view.d.ts +0 -1
- package/dist/units.d.ts +0 -1
- package/dist/window-splitter.d.ts +0 -1
- package/package.json +75 -12
- package/dist/accordion.d.ts.map +0 -1
- package/dist/adapter-runtime.d.ts.map +0 -1
- package/dist/alert-dialog.d.ts.map +0 -1
- package/dist/carousel.d.ts.map +0 -1
- package/dist/cascade-select.d.ts.map +0 -1
- package/dist/checkbox-group.d.ts.map +0 -1
- package/dist/checkbox.d.ts.map +0 -1
- package/dist/collection-window.d.ts.map +0 -1
- package/dist/color-picker.d.ts.map +0 -1
- package/dist/combobox.d.ts.map +0 -1
- package/dist/dialog.d.ts.map +0 -1
- package/dist/disclosure.d.ts.map +0 -1
- package/dist/drawer.d.ts.map +0 -1
- package/dist/editable.d.ts.map +0 -1
- package/dist/error-code.d.ts.map +0 -1
- package/dist/feed.d.ts.map +0 -1
- package/dist/form.d.ts +0 -135
- package/dist/form.d.ts.map +0 -1
- package/dist/form.js +0 -627
- package/dist/form.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interaction.d.ts.map +0 -1
- package/dist/internal/composites/combobox.d.ts.map +0 -1
- package/dist/internal/composites/grid-control.d.ts.map +0 -1
- package/dist/internal/composites/linear-action.d.ts.map +0 -1
- package/dist/internal/composites/linear-choice.d.ts.map +0 -1
- package/dist/internal/composites/listbox.d.ts.map +0 -1
- package/dist/internal/composites/menu.d.ts.map +0 -1
- package/dist/internal/composites/popup.d.ts.map +0 -1
- package/dist/internal/composites/slider.d.ts.map +0 -1
- package/dist/internal/composites/tree-grid.d.ts.map +0 -1
- package/dist/internal/composites/tree-view.d.ts.map +0 -1
- package/dist/internal/editing/text.d.ts.map +0 -1
- package/dist/internal/kernel/decimal.d.ts.map +0 -1
- package/dist/internal/kernel/foundation.d.ts.map +0 -1
- package/dist/internal/kernel/indexed-sequence.d.ts.map +0 -1
- package/dist/internal/kernel/machine.d.ts.map +0 -1
- package/dist/internal/runtime/revision.d.ts.map +0 -1
- package/dist/internal/state/checked.d.ts.map +0 -1
- package/dist/internal/state/cursor.d.ts.map +0 -1
- package/dist/internal/state/expansion.d.ts.map +0 -1
- package/dist/internal/state/open-state.d.ts.map +0 -1
- package/dist/internal/state/selection.d.ts.map +0 -1
- package/dist/layer-stack.d.ts.map +0 -1
- package/dist/listbox.d.ts.map +0 -1
- package/dist/menu-button.d.ts.map +0 -1
- package/dist/menu.d.ts.map +0 -1
- package/dist/menubar.d.ts.map +0 -1
- package/dist/multi-thumb-slider.d.ts.map +0 -1
- package/dist/navigation-menu.d.ts.map +0 -1
- package/dist/number-field.d.ts.map +0 -1
- package/dist/pagination.d.ts.map +0 -1
- package/dist/pin-input.d.ts.map +0 -1
- package/dist/popover.d.ts.map +0 -1
- package/dist/quantity-field.d.ts.map +0 -1
- package/dist/radio-group.d.ts.map +0 -1
- package/dist/rating.d.ts.map +0 -1
- package/dist/reorder.d.ts.map +0 -1
- package/dist/result.d.ts.map +0 -1
- package/dist/revision.d.ts.map +0 -1
- package/dist/select.d.ts.map +0 -1
- package/dist/shared.d.ts.map +0 -1
- package/dist/slider.d.ts.map +0 -1
- package/dist/spin-button.d.ts.map +0 -1
- package/dist/stepper.d.ts.map +0 -1
- package/dist/structures/grid.d.ts.map +0 -1
- package/dist/structures/range.d.ts.map +0 -1
- package/dist/structures/sequence.d.ts.map +0 -1
- package/dist/structures/tree.d.ts.map +0 -1
- package/dist/switch.d.ts.map +0 -1
- package/dist/tabs.d.ts.map +0 -1
- package/dist/tags-input.d.ts.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/timer.d.ts.map +0 -1
- package/dist/toast.d.ts.map +0 -1
- package/dist/toggle-button.d.ts.map +0 -1
- package/dist/toggle-group.d.ts.map +0 -1
- package/dist/toolbar.d.ts.map +0 -1
- package/dist/tooltip.d.ts.map +0 -1
- package/dist/tree-grid.d.ts.map +0 -1
- package/dist/tree-view.d.ts.map +0 -1
- package/dist/units.d.ts.map +0 -1
- package/dist/window-splitter.d.ts.map +0 -1
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { unwrap } from '../result.js';
|
|
2
|
+
import { fail, ok } from '../internal/kernel/foundation.js';
|
|
3
|
+
export const ZERO_POINT = Object.freeze({ x: 0, y: 0 });
|
|
4
|
+
export const ZERO_INSETS = Object.freeze({ top: 0, right: 0, bottom: 0, left: 0 });
|
|
5
|
+
export const DEFAULT_MAX_GEOMETRY_RECTS = 100_000;
|
|
6
|
+
export const MAX_GEOMETRY_RECTS = 1_000_000;
|
|
7
|
+
export function createPoint(input) { return unwrap(tryCreatePoint(input)); }
|
|
8
|
+
export function createSize(input) { return unwrap(tryCreateSize(input)); }
|
|
9
|
+
export function createRect(input) { return unwrap(tryCreateRect(input)); }
|
|
10
|
+
export function createInsets(input = 0) { return unwrap(tryCreateInsets(input)); }
|
|
11
|
+
export function tryCreatePoint(input) {
|
|
12
|
+
return isFinitePoint(input)
|
|
13
|
+
? ok(Object.freeze({ x: input.x, y: input.y }))
|
|
14
|
+
: invalid('Point coordinates must be finite numbers.', input);
|
|
15
|
+
}
|
|
16
|
+
export function tryCreateSize(input) {
|
|
17
|
+
return isFiniteSize(input)
|
|
18
|
+
? ok(Object.freeze({ width: input.width, height: input.height }))
|
|
19
|
+
: invalid('Size extents must be finite non-negative numbers.', input);
|
|
20
|
+
}
|
|
21
|
+
export function tryCreateRect(input) {
|
|
22
|
+
return isFiniteRect(input)
|
|
23
|
+
? ok(Object.freeze({ x: input.x, y: input.y, width: input.width, height: input.height }))
|
|
24
|
+
: invalid('Rect coordinates must be finite and extents must be finite non-negative numbers.', input);
|
|
25
|
+
}
|
|
26
|
+
export function tryCreateInsets(input = 0) {
|
|
27
|
+
if (typeof input === 'number') {
|
|
28
|
+
return nonNegative(input)
|
|
29
|
+
? ok(Object.freeze({ top: input, right: input, bottom: input, left: input }))
|
|
30
|
+
: invalid('Insets must be finite non-negative numbers.', input);
|
|
31
|
+
}
|
|
32
|
+
if (!validObject(input))
|
|
33
|
+
return invalid('Insets must be a number or object.', input);
|
|
34
|
+
const top = input.top ?? 0;
|
|
35
|
+
const right = input.right ?? 0;
|
|
36
|
+
const bottom = input.bottom ?? 0;
|
|
37
|
+
const left = input.left ?? 0;
|
|
38
|
+
return nonNegative(top) && nonNegative(right) && nonNegative(bottom) && nonNegative(left)
|
|
39
|
+
? ok(Object.freeze({ top, right, bottom, left }))
|
|
40
|
+
: invalid('Insets must be finite non-negative numbers.', input);
|
|
41
|
+
}
|
|
42
|
+
export function rectanglesIntersect(left, right) {
|
|
43
|
+
return left.x < right.x + right.width && right.x < left.x + left.width
|
|
44
|
+
&& left.y < right.y + right.height && right.y < left.y + left.height;
|
|
45
|
+
}
|
|
46
|
+
export function intersectRects(left, right) {
|
|
47
|
+
if (!rectanglesIntersect(left, right))
|
|
48
|
+
return null;
|
|
49
|
+
const x = Math.max(left.x, right.x);
|
|
50
|
+
const y = Math.max(left.y, right.y);
|
|
51
|
+
const width = Math.min(left.x + left.width, right.x + right.width) - x;
|
|
52
|
+
const height = Math.min(left.y + left.height, right.y + right.height) - y;
|
|
53
|
+
return Object.freeze({ x, y, width: Math.max(0, width), height: Math.max(0, height) });
|
|
54
|
+
}
|
|
55
|
+
export function rectContainsPoint(rect, point) {
|
|
56
|
+
return point.x >= rect.x && point.x <= rect.x + rect.width && point.y >= rect.y && point.y <= rect.y + rect.height;
|
|
57
|
+
}
|
|
58
|
+
export function rectContainsRect(outer, inner) {
|
|
59
|
+
return inner.x >= outer.x && inner.y >= outer.y
|
|
60
|
+
&& inner.x + inner.width <= outer.x + outer.width
|
|
61
|
+
&& inner.y + inner.height <= outer.y + outer.height;
|
|
62
|
+
}
|
|
63
|
+
export function boundRects(left, right) {
|
|
64
|
+
const x = Math.min(left.x, right.x);
|
|
65
|
+
const y = Math.min(left.y, right.y);
|
|
66
|
+
return Object.freeze({
|
|
67
|
+
x,
|
|
68
|
+
y,
|
|
69
|
+
width: Math.max(left.x + left.width, right.x + right.width) - x,
|
|
70
|
+
height: Math.max(left.y + left.height, right.y + right.height) - y,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function boundsOfRects(rects, options = {}) {
|
|
74
|
+
if (!Array.isArray(rects))
|
|
75
|
+
return unwrap(invalid('Rect bounds input must be an array.', rects));
|
|
76
|
+
const maxRects = options.maxRects ?? DEFAULT_MAX_GEOMETRY_RECTS;
|
|
77
|
+
if (!Number.isSafeInteger(maxRects) || maxRects < 0)
|
|
78
|
+
return unwrap(invalid('maxRects must be a non-negative safe integer.', maxRects));
|
|
79
|
+
if (maxRects > MAX_GEOMETRY_RECTS || rects.length > maxRects) {
|
|
80
|
+
return unwrap(fail('resource-rejection', 'item-ceiling-exceeded', 'Rect bounds input exceeds maxRects.', { size: rects.length, maxRects, hardCeiling: MAX_GEOMETRY_RECTS }));
|
|
81
|
+
}
|
|
82
|
+
if (rects.length === 0)
|
|
83
|
+
return null;
|
|
84
|
+
let left = Number.POSITIVE_INFINITY;
|
|
85
|
+
let top = Number.POSITIVE_INFINITY;
|
|
86
|
+
let right = Number.NEGATIVE_INFINITY;
|
|
87
|
+
let bottom = Number.NEGATIVE_INFINITY;
|
|
88
|
+
for (const rect of rects) {
|
|
89
|
+
if (!isFiniteRect(rect))
|
|
90
|
+
return unwrap(invalid('Rect bounds input contains an invalid rectangle.', rect));
|
|
91
|
+
left = Math.min(left, rect.x);
|
|
92
|
+
top = Math.min(top, rect.y);
|
|
93
|
+
right = Math.max(right, rect.x + rect.width);
|
|
94
|
+
bottom = Math.max(bottom, rect.y + rect.height);
|
|
95
|
+
}
|
|
96
|
+
return Object.freeze({ x: left, y: top, width: right - left, height: bottom - top });
|
|
97
|
+
}
|
|
98
|
+
export function insetRect(rect, insets) {
|
|
99
|
+
const xInset = Math.min(rect.width, insets.left);
|
|
100
|
+
const yInset = Math.min(rect.height, insets.top);
|
|
101
|
+
return Object.freeze({
|
|
102
|
+
x: rect.x + xInset,
|
|
103
|
+
y: rect.y + yInset,
|
|
104
|
+
width: Math.max(0, rect.width - insets.left - insets.right),
|
|
105
|
+
height: Math.max(0, rect.height - insets.top - insets.bottom),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
export function outsetRect(rect, insets) {
|
|
109
|
+
return Object.freeze({
|
|
110
|
+
x: rect.x - insets.left,
|
|
111
|
+
y: rect.y - insets.top,
|
|
112
|
+
width: rect.width + insets.left + insets.right,
|
|
113
|
+
height: rect.height + insets.top + insets.bottom,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
export function rectOverflow(rect, boundary, padding = ZERO_INSETS) {
|
|
117
|
+
const inner = insetRect(boundary, padding);
|
|
118
|
+
const top = Math.max(0, inner.y - rect.y);
|
|
119
|
+
const right = Math.max(0, rect.x + rect.width - inner.x - inner.width);
|
|
120
|
+
const bottom = Math.max(0, rect.y + rect.height - inner.y - inner.height);
|
|
121
|
+
const left = Math.max(0, inner.x - rect.x);
|
|
122
|
+
return Object.freeze({ top, right, bottom, left, total: top + right + bottom + left, maximum: Math.max(top, right, bottom, left) });
|
|
123
|
+
}
|
|
124
|
+
export function clampRect(rect, boundary, padding = ZERO_INSETS) {
|
|
125
|
+
const inner = insetRect(boundary, padding);
|
|
126
|
+
const maxX = inner.x + inner.width - rect.width;
|
|
127
|
+
const maxY = inner.y + inner.height - rect.height;
|
|
128
|
+
return Object.freeze({
|
|
129
|
+
x: maxX < inner.x ? inner.x : Math.min(Math.max(rect.x, inner.x), maxX),
|
|
130
|
+
y: maxY < inner.y ? inner.y : Math.min(Math.max(rect.y, inner.y), maxY),
|
|
131
|
+
width: rect.width,
|
|
132
|
+
height: rect.height,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export function alignRect(reference, size, side, align = 'center', offset = 0) {
|
|
136
|
+
if (!finite(offset))
|
|
137
|
+
return unwrap(invalid('Alignment offset must be finite.', offset));
|
|
138
|
+
const crossX = align === 'start' ? reference.x : align === 'end' ? reference.x + reference.width - size.width : reference.x + (reference.width - size.width) / 2;
|
|
139
|
+
const crossY = align === 'start' ? reference.y : align === 'end' ? reference.y + reference.height - size.height : reference.y + (reference.height - size.height) / 2;
|
|
140
|
+
if (side === 'top')
|
|
141
|
+
return Object.freeze({ x: crossX, y: reference.y - size.height - offset, ...size });
|
|
142
|
+
if (side === 'bottom')
|
|
143
|
+
return Object.freeze({ x: crossX, y: reference.y + reference.height + offset, ...size });
|
|
144
|
+
if (side === 'left')
|
|
145
|
+
return Object.freeze({ x: reference.x - size.width - offset, y: crossY, ...size });
|
|
146
|
+
return Object.freeze({ x: reference.x + reference.width + offset, y: crossY, ...size });
|
|
147
|
+
}
|
|
148
|
+
export function pointDelta(before, after) {
|
|
149
|
+
return Object.freeze({ x: after.x - before.x, y: after.y - before.y });
|
|
150
|
+
}
|
|
151
|
+
export function isFinitePoint(value) {
|
|
152
|
+
return validObject(value) && finite(value['x']) && finite(value['y']);
|
|
153
|
+
}
|
|
154
|
+
export function isFiniteSize(value) {
|
|
155
|
+
return validObject(value) && nonNegative(value['width']) && nonNegative(value['height']);
|
|
156
|
+
}
|
|
157
|
+
export function isFiniteRect(value) {
|
|
158
|
+
return validObject(value) && finite(value['x']) && finite(value['y'])
|
|
159
|
+
&& nonNegative(value['width']) && nonNegative(value['height']);
|
|
160
|
+
}
|
|
161
|
+
function validObject(value) { return value !== null && typeof value === 'object'; }
|
|
162
|
+
function finite(value) { return typeof value === 'number' && Number.isFinite(value); }
|
|
163
|
+
function nonNegative(value) { return finite(value) && value >= 0; }
|
|
164
|
+
function invalid(message, value) { return fail('construction', 'invalid-boundary', message, { value }); }
|
|
165
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../../src/structures/geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,26 @@
|
|
|
1
|
-
import { type AxisBoundaryPolicy, type GridDirection, type MoveResult, type ResourceCeilings, type Result, type ScanOptions, type StableID } from '../shared.js';
|
|
1
|
+
import { type AxisBoundaryPolicy, type GridDirection, type MoveResult, type ResourceCeilings, type Result, type ScanOptions, type SectileError, type StableID } from '../shared.js';
|
|
2
2
|
import type { Sequence } from './sequence.js';
|
|
3
3
|
export interface GridPosition {
|
|
4
4
|
readonly row: number;
|
|
5
5
|
readonly column: number;
|
|
6
6
|
}
|
|
7
|
+
export interface GridAxisScanOptions {
|
|
8
|
+
readonly boundary?: AxisBoundaryPolicy;
|
|
9
|
+
readonly maxScan?: number;
|
|
10
|
+
readonly accepts: (row: number, column: number) => boolean;
|
|
11
|
+
}
|
|
12
|
+
export type GridAxisScanResult = {
|
|
13
|
+
readonly kind: 'found';
|
|
14
|
+
readonly position: GridPosition;
|
|
15
|
+
readonly scanned: number;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: 'none';
|
|
18
|
+
readonly scanned: number;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'resource-rejected';
|
|
21
|
+
readonly scanned: number;
|
|
22
|
+
readonly error: SectileError;
|
|
23
|
+
};
|
|
7
24
|
export interface GridOptions extends ResourceCeilings {
|
|
8
25
|
readonly columnCount?: number;
|
|
9
26
|
readonly maxRows?: number;
|
|
@@ -17,13 +34,12 @@ export interface Grid<ID extends StableID = StableID> {
|
|
|
17
34
|
readonly size: number;
|
|
18
35
|
cellAt(row: number, column: number): ID | null;
|
|
19
36
|
positionOf(id: ID): GridPosition | null;
|
|
37
|
+
domain(): Sequence<ID>;
|
|
20
38
|
row(row: number): Sequence<ID> | null;
|
|
21
39
|
column(column: number): Sequence<ID> | null;
|
|
22
40
|
move(current: ID, direction: GridDirection, boundary?: AxisBoundaryPolicy, options?: ScanOptions<ID>): MoveResult<ID>;
|
|
23
41
|
}
|
|
42
|
+
export declare function scanGridAxis(rowCount: number, columnCount: number, current: GridPosition, direction: GridDirection, options: GridAxisScanOptions): GridAxisScanResult;
|
|
24
43
|
export declare function createGrid<ID extends StableID>(rows: readonly (readonly (ID | null)[])[], options?: GridOptions): Grid<ID>;
|
|
25
44
|
export declare function tryCreateGrid<ID extends StableID>(rows: readonly (readonly (ID | null)[])[], options?: GridOptions): Result<Grid<ID>>;
|
|
26
45
|
export type { AxisBoundaryPolicy, GridDirection, MoveResult, Result, ScanOptions, StableID, } from '../shared.js';
|
|
27
|
-
export { applyGridEvent, createGridState, type GridCommand, type GridEditMode, type GridEvent, type GridPolicies, type GridState, type GridStateInput, type GridUpdate, } from '../internal/composites/grid-control.js';
|
|
28
|
-
export { tryCreateGridState } from '../internal/composites/grid-control.js';
|
|
29
|
-
//# sourceMappingURL=grid.d.ts.map
|
package/dist/structures/grid.js
CHANGED
|
@@ -8,11 +8,15 @@ class IndexedGrid {
|
|
|
8
8
|
size;
|
|
9
9
|
#cells;
|
|
10
10
|
#positions;
|
|
11
|
-
|
|
11
|
+
#domainView;
|
|
12
|
+
#rowViews = new Map();
|
|
13
|
+
#columnViews = new Map();
|
|
14
|
+
constructor(rowCount, columnCount, cells, positions, domainIDs) {
|
|
12
15
|
this.rowCount = rowCount;
|
|
13
16
|
this.columnCount = columnCount;
|
|
14
17
|
this.#cells = freezeArray(cells);
|
|
15
18
|
this.#positions = positions;
|
|
19
|
+
this.#domainView = new IndexedSequence(domainIDs);
|
|
16
20
|
this.size = positions.size;
|
|
17
21
|
Object.freeze(this);
|
|
18
22
|
}
|
|
@@ -30,80 +34,117 @@ class IndexedGrid {
|
|
|
30
34
|
positionOf(id) {
|
|
31
35
|
return this.#positions.get(id) ?? null;
|
|
32
36
|
}
|
|
37
|
+
domain() {
|
|
38
|
+
return this.#domainView;
|
|
39
|
+
}
|
|
33
40
|
row(row) {
|
|
34
41
|
if (!Number.isSafeInteger(row) || row < 0 || row >= this.rowCount)
|
|
35
42
|
return null;
|
|
43
|
+
const cached = this.#rowViews.get(row);
|
|
44
|
+
if (cached !== undefined)
|
|
45
|
+
return cached;
|
|
36
46
|
const ids = [];
|
|
37
47
|
for (let column = 0; column < this.columnCount; column += 1) {
|
|
38
48
|
const id = this.cellAt(row, column);
|
|
39
49
|
if (id !== null)
|
|
40
50
|
ids.push(id);
|
|
41
51
|
}
|
|
42
|
-
|
|
52
|
+
const view = new IndexedSequence(ids);
|
|
53
|
+
this.#rowViews.set(row, view);
|
|
54
|
+
return view;
|
|
43
55
|
}
|
|
44
56
|
column(column) {
|
|
45
57
|
if (!Number.isSafeInteger(column) || column < 0 || column >= this.columnCount)
|
|
46
58
|
return null;
|
|
59
|
+
const cached = this.#columnViews.get(column);
|
|
60
|
+
if (cached !== undefined)
|
|
61
|
+
return cached;
|
|
47
62
|
const ids = [];
|
|
48
63
|
for (let row = 0; row < this.rowCount; row += 1) {
|
|
49
64
|
const id = this.cellAt(row, column);
|
|
50
65
|
if (id !== null)
|
|
51
66
|
ids.push(id);
|
|
52
67
|
}
|
|
53
|
-
|
|
68
|
+
const view = new IndexedSequence(ids);
|
|
69
|
+
this.#columnViews.set(column, view);
|
|
70
|
+
return view;
|
|
54
71
|
}
|
|
55
72
|
move(current, direction, boundary = 'stop', options = {}) {
|
|
56
73
|
const position = this.#positions.get(current);
|
|
57
74
|
if (position === undefined)
|
|
58
75
|
return { kind: 'none', scanned: 0 };
|
|
59
|
-
const maxScan = normalizeMaxScan(options.maxScan);
|
|
60
|
-
if (typeof maxScan !== 'number') {
|
|
61
|
-
return { kind: 'resource-rejected', scanned: 0, error: maxScan };
|
|
62
|
-
}
|
|
63
|
-
if (!isGridDirection(direction) || (boundary !== 'stop' && boundary !== 'wrap-axis')) {
|
|
64
|
-
return {
|
|
65
|
-
kind: 'resource-rejected',
|
|
66
|
-
scanned: 0,
|
|
67
|
-
error: {
|
|
68
|
-
class: 'internal-invariant',
|
|
69
|
-
code: 'invalid-grid-movement',
|
|
70
|
-
message: 'Grid movement received an impossible runtime value.',
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
76
|
const eligible = options.eligible ?? (() => true);
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
77
|
+
const movement = scanGridAxis(this.rowCount, this.columnCount, position, direction, {
|
|
78
|
+
boundary,
|
|
79
|
+
...(options.maxScan === undefined ? {} : { maxScan: options.maxScan }),
|
|
80
|
+
accepts: (row, column) => {
|
|
81
|
+
const candidate = this.cellAt(row, column);
|
|
82
|
+
return candidate !== null && eligible(candidate);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (movement.kind !== 'found')
|
|
86
|
+
return movement;
|
|
87
|
+
const id = this.cellAt(movement.position.row, movement.position.column);
|
|
88
|
+
return id === null
|
|
89
|
+
? { kind: 'none', scanned: movement.scanned }
|
|
90
|
+
: { kind: 'found', id, scanned: movement.scanned };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function scanGridAxis(rowCount, columnCount, current, direction, options) {
|
|
94
|
+
const boundary = options.boundary ?? 'stop';
|
|
95
|
+
const maxScan = normalizeMaxScan(options.maxScan);
|
|
96
|
+
if (typeof maxScan !== 'number') {
|
|
97
|
+
return { kind: 'resource-rejected', scanned: 0, error: maxScan };
|
|
98
|
+
}
|
|
99
|
+
if (!Number.isSafeInteger(rowCount)
|
|
100
|
+
|| !Number.isSafeInteger(columnCount)
|
|
101
|
+
|| rowCount < 0
|
|
102
|
+
|| columnCount < 0
|
|
103
|
+
|| !Number.isSafeInteger(current.row)
|
|
104
|
+
|| !Number.isSafeInteger(current.column)
|
|
105
|
+
|| current.row < 0
|
|
106
|
+
|| current.column < 0
|
|
107
|
+
|| current.row >= rowCount
|
|
108
|
+
|| current.column >= columnCount
|
|
109
|
+
|| !isGridDirection(direction)
|
|
110
|
+
|| (boundary !== 'stop' && boundary !== 'wrap-axis')) {
|
|
111
|
+
return {
|
|
112
|
+
kind: 'resource-rejected',
|
|
113
|
+
scanned: 0,
|
|
114
|
+
error: {
|
|
115
|
+
class: 'internal-invariant',
|
|
116
|
+
code: 'invalid-grid-movement',
|
|
117
|
+
message: 'Grid movement received an impossible runtime value.',
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const horizontal = direction === 'left' || direction === 'right';
|
|
122
|
+
const positive = direction === 'right' || direction === 'down';
|
|
123
|
+
const currentAxis = horizontal ? current.column : current.row;
|
|
124
|
+
const axisLength = horizontal ? columnCount : rowCount;
|
|
125
|
+
let scanned = 0;
|
|
126
|
+
let axis = currentAxis + (positive ? 1 : -1);
|
|
127
|
+
let wrapped = false;
|
|
128
|
+
while (true) {
|
|
129
|
+
if (axis < 0 || axis >= axisLength) {
|
|
130
|
+
if (boundary === 'stop' || wrapped)
|
|
131
|
+
break;
|
|
93
132
|
axis = positive ? 0 : axisLength - 1;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
133
|
+
wrapped = true;
|
|
134
|
+
}
|
|
135
|
+
if (axis === currentAxis)
|
|
136
|
+
break;
|
|
137
|
+
if (scanned === maxScan)
|
|
138
|
+
return gridScanRejected(scanned, maxScan);
|
|
139
|
+
const row = horizontal ? current.row : axis;
|
|
140
|
+
const column = horizontal ? axis : current.column;
|
|
141
|
+
scanned += 1;
|
|
142
|
+
if (options.accepts(row, column)) {
|
|
143
|
+
return { kind: 'found', position: Object.freeze({ row, column }), scanned };
|
|
104
144
|
}
|
|
105
|
-
|
|
145
|
+
axis += positive ? 1 : -1;
|
|
106
146
|
}
|
|
147
|
+
return { kind: 'none', scanned };
|
|
107
148
|
}
|
|
108
149
|
export function createGrid(rows, options = {}) {
|
|
109
150
|
return unwrap(tryCreateGrid(rows, options));
|
|
@@ -159,6 +200,7 @@ export function tryCreateGrid(rows, options = {}) {
|
|
|
159
200
|
}
|
|
160
201
|
const cells = Array.from({ length: cellCount }, () => null);
|
|
161
202
|
const positions = new Map();
|
|
203
|
+
const domainIDs = [];
|
|
162
204
|
for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
|
|
163
205
|
const row = rows[rowIndex] ?? [];
|
|
164
206
|
for (let column = 0; column < row.length; column += 1) {
|
|
@@ -182,10 +224,11 @@ export function tryCreateGrid(rows, options = {}) {
|
|
|
182
224
|
}
|
|
183
225
|
const position = Object.freeze({ row: rowIndex, column });
|
|
184
226
|
positions.set(id, position);
|
|
227
|
+
domainIDs.push(id);
|
|
185
228
|
cells[rowIndex * columnCount + column] = id;
|
|
186
229
|
}
|
|
187
230
|
}
|
|
188
|
-
return ok(new IndexedGrid(rows.length, columnCount, cells, positions));
|
|
231
|
+
return ok(new IndexedGrid(rows.length, columnCount, cells, positions, domainIDs));
|
|
189
232
|
}
|
|
190
233
|
function gridScanRejected(scanned, maxScan) {
|
|
191
234
|
return {
|
|
@@ -197,6 +240,4 @@ function gridScanRejected(scanned, maxScan) {
|
|
|
197
240
|
function isGridDirection(value) {
|
|
198
241
|
return value === 'left' || value === 'right' || value === 'up' || value === 'down';
|
|
199
242
|
}
|
|
200
|
-
export { applyGridEvent, createGridState, } from '../internal/composites/grid-control.js';
|
|
201
|
-
export { tryCreateGridState } from '../internal/composites/grid-control.js';
|
|
202
243
|
//# sourceMappingURL=grid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/structures/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/structures/grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Result } from '../shared.js';
|
|
2
|
+
export interface IndexSpan {
|
|
3
|
+
readonly start: number;
|
|
4
|
+
readonly endExclusive: number;
|
|
5
|
+
}
|
|
6
|
+
export interface IndexSpanSet {
|
|
7
|
+
readonly spans: readonly IndexSpan[];
|
|
8
|
+
readonly spanCount: number;
|
|
9
|
+
readonly coveredCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface IndexSpanOptions {
|
|
12
|
+
readonly maxExclusive?: number;
|
|
13
|
+
readonly maxSpans?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const DEFAULT_MAX_SPANS = 1000000;
|
|
16
|
+
export declare function createIndexSpan(start: number, endExclusive: number, options?: IndexSpanOptions): IndexSpan | null;
|
|
17
|
+
export declare function tryCreateIndexSpan(start: number, endExclusive: number, options?: IndexSpanOptions): Result<IndexSpan | null>;
|
|
18
|
+
export declare function containsIndex(span: IndexSpan, index: number): boolean;
|
|
19
|
+
export declare function clampIndexSpan(span: IndexSpan, bounds: IndexSpan): IndexSpan | null;
|
|
20
|
+
export declare function translateIndexSpan(span: IndexSpan, delta: number, options?: IndexSpanOptions): IndexSpan;
|
|
21
|
+
/** Adjusts the start and end boundaries independently. Empty results normalize to null. */
|
|
22
|
+
export declare function resizeIndexSpan(span: IndexSpan, startDelta: number, endDelta: number, options?: IndexSpanOptions): IndexSpan | null;
|
|
23
|
+
export declare function createIndexSpanSet(spans: readonly IndexSpan[], options?: IndexSpanOptions): IndexSpanSet;
|
|
24
|
+
export declare function tryCreateIndexSpanSet(spans: readonly IndexSpan[], options?: IndexSpanOptions): Result<IndexSpanSet>;
|
|
25
|
+
export declare function containsIndexInSpanSet(set: IndexSpanSet, index: number): boolean;
|
|
26
|
+
export declare function unionIndexSpanSets(left: IndexSpanSet, right: IndexSpanSet, options?: IndexSpanOptions): IndexSpanSet;
|
|
27
|
+
export declare function intersectIndexSpanSets(left: IndexSpanSet, right: IndexSpanSet, options?: IndexSpanOptions): IndexSpanSet;
|
|
28
|
+
export declare function subtractIndexSpanSets(left: IndexSpanSet, right: IndexSpanSet, options?: IndexSpanOptions): IndexSpanSet;
|
|
29
|
+
export declare function clampIndexSpanSet(set: IndexSpanSet, bounds: IndexSpan, options?: IndexSpanOptions): IndexSpanSet;
|
|
30
|
+
export declare function translateIndexSpanSet(set: IndexSpanSet, delta: number, options?: IndexSpanOptions): IndexSpanSet;
|
|
31
|
+
export declare function resizeIndexSpanSet(set: IndexSpanSet, startDelta: number, endDelta: number, options?: IndexSpanOptions): IndexSpanSet;
|