@sectile/core 0.7.0 → 0.9.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.
Files changed (262) hide show
  1. package/dist/accordion.d.ts +0 -1
  2. package/dist/adapter-runtime.d.ts +53 -2
  3. package/dist/adapter-runtime.js +224 -25
  4. package/dist/adapter-runtime.js.map +1 -1
  5. package/dist/alert-dialog.d.ts +0 -1
  6. package/dist/carousel.d.ts +0 -1
  7. package/dist/cascade-list.d.ts +16 -0
  8. package/dist/cascade-list.js +33 -0
  9. package/dist/cascade-list.js.map +1 -0
  10. package/dist/cascade-select.d.ts +0 -1
  11. package/dist/cascade-select.js +47 -119
  12. package/dist/cascade-select.js.map +1 -1
  13. package/dist/checkbox-group.d.ts +0 -1
  14. package/dist/checkbox.d.ts +0 -1
  15. package/dist/collection-window.d.ts +0 -1
  16. package/dist/color-picker.d.ts +3 -8
  17. package/dist/color-picker.js +60 -305
  18. package/dist/color-picker.js.map +1 -1
  19. package/dist/combobox.d.ts +0 -1
  20. package/dist/dialog.d.ts +0 -1
  21. package/dist/disclosure.d.ts +0 -1
  22. package/dist/drawer.d.ts +0 -1
  23. package/dist/editable.d.ts +0 -1
  24. package/dist/editing/color-text.d.ts +7 -0
  25. package/dist/editing/color-text.js +199 -0
  26. package/dist/editing/color-text.js.map +1 -0
  27. package/dist/error-code.d.ts +1 -2
  28. package/dist/feed.d.ts +0 -1
  29. package/dist/grid-control.d.ts +3 -0
  30. package/dist/grid-control.js +2 -0
  31. package/dist/grid-control.js.map +1 -0
  32. package/dist/identity.d.ts +10 -0
  33. package/dist/identity.js +16 -0
  34. package/dist/identity.js.map +1 -0
  35. package/dist/index.d.ts +2 -2
  36. package/dist/interaction.d.ts +0 -1
  37. package/dist/internal/composites/cascade-choice.d.ts +54 -0
  38. package/dist/internal/composites/cascade-choice.js +154 -0
  39. package/dist/internal/composites/cascade-choice.js.map +1 -0
  40. package/dist/internal/composites/combobox.d.ts +0 -1
  41. package/dist/internal/composites/combobox.js +28 -11
  42. package/dist/internal/composites/combobox.js.map +1 -1
  43. package/dist/internal/composites/grid-control.d.ts +0 -1
  44. package/dist/internal/composites/grid-control.js +18 -23
  45. package/dist/internal/composites/grid-control.js.map +1 -1
  46. package/dist/internal/composites/linear-action.d.ts +0 -1
  47. package/dist/internal/composites/linear-action.js +20 -14
  48. package/dist/internal/composites/linear-action.js.map +1 -1
  49. package/dist/internal/composites/linear-choice.d.ts +0 -1
  50. package/dist/internal/composites/linear-choice.js +15 -8
  51. package/dist/internal/composites/linear-choice.js.map +1 -1
  52. package/dist/internal/composites/listbox.d.ts +0 -1
  53. package/dist/internal/composites/listbox.js +15 -13
  54. package/dist/internal/composites/listbox.js.map +1 -1
  55. package/dist/internal/composites/menu.d.ts +0 -1
  56. package/dist/internal/composites/menu.js +38 -17
  57. package/dist/internal/composites/menu.js.map +1 -1
  58. package/dist/internal/composites/popup.d.ts +0 -1
  59. package/dist/internal/composites/slider.d.ts +0 -1
  60. package/dist/internal/composites/tree-grid.d.ts +0 -1
  61. package/dist/internal/composites/tree-grid.js +70 -48
  62. package/dist/internal/composites/tree-grid.js.map +1 -1
  63. package/dist/internal/composites/tree-view.d.ts +0 -1
  64. package/dist/internal/composites/tree-view.js +32 -20
  65. package/dist/internal/composites/tree-view.js.map +1 -1
  66. package/dist/internal/editing/text.d.ts +0 -1
  67. package/dist/internal/editing/text.js +40 -27
  68. package/dist/internal/editing/text.js.map +1 -1
  69. package/dist/internal/kernel/bounded-scalar.d.ts +31 -0
  70. package/dist/internal/kernel/bounded-scalar.js +78 -0
  71. package/dist/internal/kernel/bounded-scalar.js.map +1 -0
  72. package/dist/internal/kernel/decimal.d.ts +0 -1
  73. package/dist/internal/kernel/exact-ratio.d.ts +5 -0
  74. package/dist/internal/kernel/exact-ratio.js +2 -0
  75. package/dist/internal/kernel/exact-ratio.js.map +1 -0
  76. package/dist/internal/kernel/foundation.d.ts +8 -6
  77. package/dist/internal/kernel/foundation.js +35 -16
  78. package/dist/internal/kernel/foundation.js.map +1 -1
  79. package/dist/internal/kernel/indexed-sequence.d.ts +28 -3
  80. package/dist/internal/kernel/indexed-sequence.js +162 -12
  81. package/dist/internal/kernel/indexed-sequence.js.map +1 -1
  82. package/dist/internal/kernel/machine.d.ts +1 -2
  83. package/dist/internal/kernel/machine.js +5 -2
  84. package/dist/internal/kernel/machine.js.map +1 -1
  85. package/dist/internal/runtime/revision.d.ts +0 -1
  86. package/dist/internal/state/checked.d.ts +0 -1
  87. package/dist/internal/state/cursor.d.ts +0 -1
  88. package/dist/internal/state/expansion.d.ts +0 -1
  89. package/dist/internal/state/open-state.d.ts +0 -1
  90. package/dist/internal/state/selection.d.ts +0 -1
  91. package/dist/internal/state/selection.js +99 -27
  92. package/dist/internal/state/selection.js.map +1 -1
  93. package/dist/layer-stack.d.ts +0 -1
  94. package/dist/listbox.d.ts +0 -1
  95. package/dist/menu-button.d.ts +0 -1
  96. package/dist/menu.d.ts +0 -1
  97. package/dist/menubar.d.ts +0 -1
  98. package/dist/meter-group.d.ts +38 -0
  99. package/dist/meter-group.js +103 -0
  100. package/dist/meter-group.js.map +1 -0
  101. package/dist/meter.d.ts +25 -0
  102. package/dist/meter.js +89 -0
  103. package/dist/meter.js.map +1 -0
  104. package/dist/multi-thumb-slider.d.ts +0 -1
  105. package/dist/navigation-menu.d.ts +0 -1
  106. package/dist/number-field.d.ts +0 -1
  107. package/dist/pagination.d.ts +0 -1
  108. package/dist/pin-input.d.ts +0 -1
  109. package/dist/popover.d.ts +0 -1
  110. package/dist/progress.d.ts +17 -0
  111. package/dist/progress.js +49 -0
  112. package/dist/progress.js.map +1 -0
  113. package/dist/quantity-field.d.ts +0 -1
  114. package/dist/radio-group.d.ts +0 -1
  115. package/dist/rating.d.ts +0 -1
  116. package/dist/reorder.d.ts +0 -1
  117. package/dist/reorder.js +92 -43
  118. package/dist/reorder.js.map +1 -1
  119. package/dist/result.d.ts +2 -1
  120. package/dist/result.js +14 -0
  121. package/dist/result.js.map +1 -1
  122. package/dist/revision.d.ts +1 -1
  123. package/dist/revision.js +1 -0
  124. package/dist/revision.js.map +1 -1
  125. package/dist/select.d.ts +0 -1
  126. package/dist/selection.d.ts +24 -0
  127. package/dist/selection.js +20 -0
  128. package/dist/selection.js.map +1 -0
  129. package/dist/shared.d.ts +0 -1
  130. package/dist/slider.d.ts +0 -1
  131. package/dist/spin-button.d.ts +0 -1
  132. package/dist/stepper.d.ts +0 -1
  133. package/dist/structures/anchored-layout.d.ts +33 -0
  134. package/dist/structures/anchored-layout.js +162 -0
  135. package/dist/structures/anchored-layout.js.map +1 -0
  136. package/dist/structures/color.d.ts +80 -0
  137. package/dist/structures/color.js +206 -0
  138. package/dist/structures/color.js.map +1 -0
  139. package/dist/structures/geometry.d.ts +53 -0
  140. package/dist/structures/geometry.js +165 -0
  141. package/dist/structures/geometry.js.map +1 -0
  142. package/dist/structures/grid.d.ts +20 -4
  143. package/dist/structures/grid.js +91 -50
  144. package/dist/structures/grid.js.map +1 -1
  145. package/dist/structures/index-span.d.ts +31 -0
  146. package/dist/structures/index-span.js +267 -0
  147. package/dist/structures/index-span.js.map +1 -0
  148. package/dist/structures/metric-index.d.ts +36 -0
  149. package/dist/structures/metric-index.js +390 -0
  150. package/dist/structures/metric-index.js.map +1 -0
  151. package/dist/structures/range.d.ts +21 -4
  152. package/dist/structures/range.js +156 -11
  153. package/dist/structures/range.js.map +1 -1
  154. package/dist/structures/selection-expression.d.ts +26 -0
  155. package/dist/structures/selection-expression.js +157 -0
  156. package/dist/structures/selection-expression.js.map +1 -0
  157. package/dist/structures/sequence.d.ts +0 -1
  158. package/dist/structures/sequence.js +69 -7
  159. package/dist/structures/sequence.js.map +1 -1
  160. package/dist/structures/tree.d.ts +5 -1
  161. package/dist/structures/tree.js +33 -5
  162. package/dist/structures/tree.js.map +1 -1
  163. package/dist/switch.d.ts +0 -1
  164. package/dist/tabs.d.ts +0 -1
  165. package/dist/tags-input.d.ts +0 -1
  166. package/dist/text.d.ts +0 -1
  167. package/dist/timer.d.ts +0 -1
  168. package/dist/toast.d.ts +2 -2
  169. package/dist/toast.js +3 -1
  170. package/dist/toast.js.map +1 -1
  171. package/dist/toggle-button.d.ts +0 -1
  172. package/dist/toggle-group.d.ts +0 -1
  173. package/dist/toolbar.d.ts +0 -1
  174. package/dist/tooltip.d.ts +0 -1
  175. package/dist/tree-grid.d.ts +0 -1
  176. package/dist/tree-view.d.ts +0 -1
  177. package/dist/units.d.ts +0 -1
  178. package/dist/window-splitter.d.ts +0 -1
  179. package/package.json +75 -12
  180. package/dist/accordion.d.ts.map +0 -1
  181. package/dist/adapter-runtime.d.ts.map +0 -1
  182. package/dist/alert-dialog.d.ts.map +0 -1
  183. package/dist/carousel.d.ts.map +0 -1
  184. package/dist/cascade-select.d.ts.map +0 -1
  185. package/dist/checkbox-group.d.ts.map +0 -1
  186. package/dist/checkbox.d.ts.map +0 -1
  187. package/dist/collection-window.d.ts.map +0 -1
  188. package/dist/color-picker.d.ts.map +0 -1
  189. package/dist/combobox.d.ts.map +0 -1
  190. package/dist/dialog.d.ts.map +0 -1
  191. package/dist/disclosure.d.ts.map +0 -1
  192. package/dist/drawer.d.ts.map +0 -1
  193. package/dist/editable.d.ts.map +0 -1
  194. package/dist/error-code.d.ts.map +0 -1
  195. package/dist/feed.d.ts.map +0 -1
  196. package/dist/form.d.ts +0 -135
  197. package/dist/form.d.ts.map +0 -1
  198. package/dist/form.js +0 -627
  199. package/dist/form.js.map +0 -1
  200. package/dist/index.d.ts.map +0 -1
  201. package/dist/interaction.d.ts.map +0 -1
  202. package/dist/internal/composites/combobox.d.ts.map +0 -1
  203. package/dist/internal/composites/grid-control.d.ts.map +0 -1
  204. package/dist/internal/composites/linear-action.d.ts.map +0 -1
  205. package/dist/internal/composites/linear-choice.d.ts.map +0 -1
  206. package/dist/internal/composites/listbox.d.ts.map +0 -1
  207. package/dist/internal/composites/menu.d.ts.map +0 -1
  208. package/dist/internal/composites/popup.d.ts.map +0 -1
  209. package/dist/internal/composites/slider.d.ts.map +0 -1
  210. package/dist/internal/composites/tree-grid.d.ts.map +0 -1
  211. package/dist/internal/composites/tree-view.d.ts.map +0 -1
  212. package/dist/internal/editing/text.d.ts.map +0 -1
  213. package/dist/internal/kernel/decimal.d.ts.map +0 -1
  214. package/dist/internal/kernel/foundation.d.ts.map +0 -1
  215. package/dist/internal/kernel/indexed-sequence.d.ts.map +0 -1
  216. package/dist/internal/kernel/machine.d.ts.map +0 -1
  217. package/dist/internal/runtime/revision.d.ts.map +0 -1
  218. package/dist/internal/state/checked.d.ts.map +0 -1
  219. package/dist/internal/state/cursor.d.ts.map +0 -1
  220. package/dist/internal/state/expansion.d.ts.map +0 -1
  221. package/dist/internal/state/open-state.d.ts.map +0 -1
  222. package/dist/internal/state/selection.d.ts.map +0 -1
  223. package/dist/layer-stack.d.ts.map +0 -1
  224. package/dist/listbox.d.ts.map +0 -1
  225. package/dist/menu-button.d.ts.map +0 -1
  226. package/dist/menu.d.ts.map +0 -1
  227. package/dist/menubar.d.ts.map +0 -1
  228. package/dist/multi-thumb-slider.d.ts.map +0 -1
  229. package/dist/navigation-menu.d.ts.map +0 -1
  230. package/dist/number-field.d.ts.map +0 -1
  231. package/dist/pagination.d.ts.map +0 -1
  232. package/dist/pin-input.d.ts.map +0 -1
  233. package/dist/popover.d.ts.map +0 -1
  234. package/dist/quantity-field.d.ts.map +0 -1
  235. package/dist/radio-group.d.ts.map +0 -1
  236. package/dist/rating.d.ts.map +0 -1
  237. package/dist/reorder.d.ts.map +0 -1
  238. package/dist/result.d.ts.map +0 -1
  239. package/dist/revision.d.ts.map +0 -1
  240. package/dist/select.d.ts.map +0 -1
  241. package/dist/shared.d.ts.map +0 -1
  242. package/dist/slider.d.ts.map +0 -1
  243. package/dist/spin-button.d.ts.map +0 -1
  244. package/dist/stepper.d.ts.map +0 -1
  245. package/dist/structures/grid.d.ts.map +0 -1
  246. package/dist/structures/range.d.ts.map +0 -1
  247. package/dist/structures/sequence.d.ts.map +0 -1
  248. package/dist/structures/tree.d.ts.map +0 -1
  249. package/dist/switch.d.ts.map +0 -1
  250. package/dist/tabs.d.ts.map +0 -1
  251. package/dist/tags-input.d.ts.map +0 -1
  252. package/dist/text.d.ts.map +0 -1
  253. package/dist/timer.d.ts.map +0 -1
  254. package/dist/toast.d.ts.map +0 -1
  255. package/dist/toggle-button.d.ts.map +0 -1
  256. package/dist/toggle-group.d.ts.map +0 -1
  257. package/dist/toolbar.d.ts.map +0 -1
  258. package/dist/tooltip.d.ts.map +0 -1
  259. package/dist/tree-grid.d.ts.map +0 -1
  260. package/dist/tree-view.d.ts.map +0 -1
  261. package/dist/units.d.ts.map +0 -1
  262. package/dist/window-splitter.d.ts.map +0 -1
@@ -0,0 +1,267 @@
1
+ import { unwrap } from '../result.js';
2
+ import { fail, ok } from '../internal/kernel/foundation.js';
3
+ export const DEFAULT_MAX_SPANS = 1_000_000;
4
+ export function createIndexSpan(start, endExclusive, options = {}) {
5
+ return unwrap(tryCreateIndexSpan(start, endExclusive, options));
6
+ }
7
+ export function tryCreateIndexSpan(start, endExclusive, options = {}) {
8
+ const limits = trySpanLimits(options);
9
+ if (!limits.ok)
10
+ return limits;
11
+ return checkedSpan(start, endExclusive, limits.value);
12
+ }
13
+ export function containsIndex(span, index) {
14
+ return Number.isSafeInteger(index) && index >= span.start && index < span.endExclusive;
15
+ }
16
+ export function clampIndexSpan(span, bounds) {
17
+ const start = Math.max(span.start, bounds.start);
18
+ const endExclusive = Math.min(span.endExclusive, bounds.endExclusive);
19
+ return start >= endExclusive ? null : Object.freeze({ start, endExclusive });
20
+ }
21
+ export function translateIndexSpan(span, delta, options = {}) {
22
+ if (!Number.isSafeInteger(delta))
23
+ throwSpanOverflow(delta);
24
+ const start = span.start + delta;
25
+ const endExclusive = span.endExclusive + delta;
26
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(endExclusive))
27
+ throwSpanOverflow(delta);
28
+ const translated = createIndexSpan(start, endExclusive, options);
29
+ if (translated === null)
30
+ throw new Error('Internal invariant breach: translation erased a non-empty span.');
31
+ return translated;
32
+ }
33
+ /** Adjusts the start and end boundaries independently. Empty results normalize to null. */
34
+ export function resizeIndexSpan(span, startDelta, endDelta, options = {}) {
35
+ if (!Number.isSafeInteger(startDelta) || !Number.isSafeInteger(endDelta)) {
36
+ throwSpanOverflow(!Number.isSafeInteger(startDelta) ? startDelta : endDelta);
37
+ }
38
+ const start = span.start + startDelta;
39
+ const endExclusive = span.endExclusive + endDelta;
40
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(endExclusive)) {
41
+ throwSpanOverflow(!Number.isSafeInteger(start) ? startDelta : endDelta);
42
+ }
43
+ if (start > endExclusive) {
44
+ return unwrap(fail('construction', 'invalid-boundary', 'resized start must not exceed endExclusive.', {
45
+ start,
46
+ endExclusive,
47
+ }));
48
+ }
49
+ return createIndexSpan(start, endExclusive, options);
50
+ }
51
+ export function createIndexSpanSet(spans, options = {}) {
52
+ return unwrap(tryCreateIndexSpanSet(spans, options));
53
+ }
54
+ export function tryCreateIndexSpanSet(spans, options = {}) {
55
+ const limits = trySpanLimits(options);
56
+ if (!limits.ok)
57
+ return limits;
58
+ if (spans.length > limits.value.maxSpans)
59
+ return spanCeilingFailure(spans.length, limits.value.maxSpans);
60
+ const snapshot = [];
61
+ for (const span of spans) {
62
+ const error = validateSpanBounds(span.start, span.endExclusive, limits.value);
63
+ if (error !== null)
64
+ return { ok: false, error };
65
+ if (span.start !== span.endExclusive)
66
+ snapshot.push(span);
67
+ }
68
+ snapshot.sort(compareSpans);
69
+ return normalizedSpanSet(snapshot, limits.value.maxSpans);
70
+ }
71
+ export function containsIndexInSpanSet(set, index) {
72
+ if (!Number.isSafeInteger(index) || index < 0)
73
+ return false;
74
+ let low = 0;
75
+ let high = set.spans.length - 1;
76
+ while (low <= high) {
77
+ const middle = low + ((high - low) >> 1);
78
+ const span = set.spans[middle];
79
+ if (span === undefined)
80
+ return false;
81
+ if (index < span.start)
82
+ high = middle - 1;
83
+ else if (index >= span.endExclusive)
84
+ low = middle + 1;
85
+ else
86
+ return true;
87
+ }
88
+ return false;
89
+ }
90
+ export function unionIndexSpanSets(left, right, options = {}) {
91
+ const limits = unwrap(trySpanLimits(options));
92
+ const output = [];
93
+ let leftIndex = 0;
94
+ let rightIndex = 0;
95
+ while (leftIndex < left.spans.length || rightIndex < right.spans.length) {
96
+ const a = left.spans[leftIndex];
97
+ const b = right.spans[rightIndex];
98
+ if (b === undefined || (a !== undefined && compareSpans(a, b) <= 0)) {
99
+ emitNormalized(output, a, limits.maxSpans);
100
+ leftIndex += 1;
101
+ }
102
+ else {
103
+ emitNormalized(output, b, limits.maxSpans);
104
+ rightIndex += 1;
105
+ }
106
+ }
107
+ return freezeSpanSet(output);
108
+ }
109
+ export function intersectIndexSpanSets(left, right, options = {}) {
110
+ const limits = unwrap(trySpanLimits(options));
111
+ const output = [];
112
+ let leftIndex = 0;
113
+ let rightIndex = 0;
114
+ while (leftIndex < left.spans.length && rightIndex < right.spans.length) {
115
+ const a = left.spans[leftIndex];
116
+ const b = right.spans[rightIndex];
117
+ const overlap = clampIndexSpan(a, b);
118
+ if (overlap !== null)
119
+ emitNormalized(output, overlap, limits.maxSpans);
120
+ if (a.endExclusive <= b.endExclusive)
121
+ leftIndex += 1;
122
+ else
123
+ rightIndex += 1;
124
+ }
125
+ return freezeSpanSet(output);
126
+ }
127
+ export function subtractIndexSpanSets(left, right, options = {}) {
128
+ const limits = unwrap(trySpanLimits(options));
129
+ const output = [];
130
+ let rightIndex = 0;
131
+ for (const span of left.spans) {
132
+ let cursor = span.start;
133
+ while (rightIndex < right.spans.length && right.spans[rightIndex].endExclusive <= cursor) {
134
+ rightIndex += 1;
135
+ }
136
+ let scan = rightIndex;
137
+ while (scan < right.spans.length) {
138
+ const excluded = right.spans[scan];
139
+ if (excluded.start >= span.endExclusive)
140
+ break;
141
+ if (excluded.start > cursor) {
142
+ emitNormalized(output, Object.freeze({ start: cursor, endExclusive: Math.min(excluded.start, span.endExclusive) }), limits.maxSpans);
143
+ }
144
+ cursor = Math.max(cursor, excluded.endExclusive);
145
+ if (cursor >= span.endExclusive)
146
+ break;
147
+ scan += 1;
148
+ }
149
+ if (cursor < span.endExclusive) {
150
+ emitNormalized(output, Object.freeze({ start: cursor, endExclusive: span.endExclusive }), limits.maxSpans);
151
+ }
152
+ rightIndex = scan;
153
+ }
154
+ return freezeSpanSet(output);
155
+ }
156
+ export function clampIndexSpanSet(set, bounds, options = {}) {
157
+ const limits = unwrap(trySpanLimits(options));
158
+ const output = [];
159
+ for (const span of set.spans) {
160
+ if (span.endExclusive <= bounds.start)
161
+ continue;
162
+ if (span.start >= bounds.endExclusive)
163
+ break;
164
+ const overlap = clampIndexSpan(span, bounds);
165
+ if (overlap !== null)
166
+ emitNormalized(output, overlap, limits.maxSpans);
167
+ }
168
+ return freezeSpanSet(output);
169
+ }
170
+ export function translateIndexSpanSet(set, delta, options = {}) {
171
+ const limits = unwrap(trySpanLimits(options));
172
+ const output = [];
173
+ for (const span of set.spans) {
174
+ emitNormalized(output, translateIndexSpan(span, delta, limits), limits.maxSpans);
175
+ }
176
+ return freezeSpanSet(output);
177
+ }
178
+ export function resizeIndexSpanSet(set, startDelta, endDelta, options = {}) {
179
+ const limits = unwrap(trySpanLimits(options));
180
+ const output = [];
181
+ for (const span of set.spans) {
182
+ const resized = resizeIndexSpan(span, startDelta, endDelta, limits);
183
+ if (resized !== null)
184
+ emitNormalized(output, resized, limits.maxSpans);
185
+ }
186
+ return freezeSpanSet(output);
187
+ }
188
+ function trySpanLimits(options) {
189
+ const maxExclusive = options.maxExclusive ?? Number.MAX_SAFE_INTEGER;
190
+ const maxSpans = options.maxSpans ?? DEFAULT_MAX_SPANS;
191
+ if (!Number.isSafeInteger(maxExclusive) || maxExclusive < 0) {
192
+ return fail('construction', 'invalid-boundary', 'maxExclusive must be a non-negative safe integer.', { maxExclusive });
193
+ }
194
+ if (!Number.isSafeInteger(maxSpans) || maxSpans < 0) {
195
+ return fail('construction', 'invalid-max-count', 'maxSpans must be a non-negative safe integer.', { maxSpans });
196
+ }
197
+ return ok(Object.freeze({ maxExclusive, maxSpans }));
198
+ }
199
+ function checkedSpan(start, endExclusive, limits) {
200
+ const error = validateSpanBounds(start, endExclusive, limits);
201
+ if (error !== null)
202
+ return { ok: false, error };
203
+ return ok(start === endExclusive ? null : Object.freeze({ start, endExclusive }));
204
+ }
205
+ function validateSpanBounds(start, endExclusive, limits) {
206
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(endExclusive) || start < 0 || start > endExclusive) {
207
+ return {
208
+ class: 'construction',
209
+ code: 'invalid-boundary',
210
+ message: 'span bounds must be non-negative safe integers with start <= endExclusive.',
211
+ details: { start, endExclusive },
212
+ };
213
+ }
214
+ if (endExclusive > limits.maxExclusive) {
215
+ return {
216
+ class: 'resource-rejection',
217
+ code: 'count-ceiling-exceeded',
218
+ message: 'span exceeds maxExclusive.',
219
+ details: { endExclusive, maxExclusive: limits.maxExclusive },
220
+ };
221
+ }
222
+ return null;
223
+ }
224
+ function normalizedSpanSet(spans, maxSpans) {
225
+ const output = [];
226
+ for (const span of spans) {
227
+ if (output.length >= maxSpans && !canMergeLast(output, span))
228
+ return spanCeilingFailure(output.length + 1, maxSpans);
229
+ emitNormalized(output, span, maxSpans);
230
+ }
231
+ return ok(freezeSpanSet(output));
232
+ }
233
+ function emitNormalized(output, span, maxSpans) {
234
+ const last = output.at(-1);
235
+ if (last !== undefined && span.start <= last.endExclusive) {
236
+ if (span.endExclusive > last.endExclusive) {
237
+ last.endExclusive = span.endExclusive;
238
+ }
239
+ return;
240
+ }
241
+ if (output.length >= maxSpans)
242
+ unwrap(spanCeilingFailure(output.length + 1, maxSpans));
243
+ output.push({ start: span.start, endExclusive: span.endExclusive });
244
+ }
245
+ function canMergeLast(output, span) {
246
+ const last = output.at(-1);
247
+ return last !== undefined && span.start <= last.endExclusive;
248
+ }
249
+ function freezeSpanSet(spans) {
250
+ for (const span of spans)
251
+ Object.freeze(span);
252
+ const frozenSpans = Object.freeze(spans);
253
+ let coveredCount = 0;
254
+ for (const span of frozenSpans)
255
+ coveredCount += span.endExclusive - span.start;
256
+ return Object.freeze({ spans: frozenSpans, spanCount: frozenSpans.length, coveredCount });
257
+ }
258
+ function spanCeilingFailure(count, maxSpans) {
259
+ return fail('resource-rejection', 'count-ceiling-exceeded', 'normalized span count exceeds maxSpans.', { count, maxSpans });
260
+ }
261
+ function throwSpanOverflow(delta) {
262
+ return unwrap(fail('resource-rejection', 'count-not-safe', 'span translation leaves the safe-integer domain.', { delta }));
263
+ }
264
+ function compareSpans(left, right) {
265
+ return left.start - right.start || left.endExclusive - right.endExclusive;
266
+ }
267
+ //# sourceMappingURL=index-span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-span.js","sourceRoot":"","sources":["../../src/structures/index-span.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type ResourceCeilings, type Result, type StableID } from '../shared.js';
2
+ export interface MetricPoint<ID extends StableID = StableID> {
3
+ readonly id: ID;
4
+ readonly coordinates: readonly number[];
5
+ }
6
+ export interface MetricMatch<ID extends StableID = StableID> {
7
+ readonly id: ID;
8
+ readonly squaredDistance: number;
9
+ }
10
+ export interface MetricIndexOptions extends ResourceCeilings {
11
+ readonly dimensions?: number;
12
+ readonly expectedQueries?: number;
13
+ readonly maxItems?: number;
14
+ readonly maxDimensions?: number;
15
+ readonly maxCoordinateMagnitude?: number;
16
+ }
17
+ export interface MetricIndex<ID extends StableID = StableID> {
18
+ readonly size: number;
19
+ readonly dimensions: number;
20
+ readonly ids: readonly ID[];
21
+ readonly maxItems: number;
22
+ readonly maxDimensions: number;
23
+ readonly maxCoordinateMagnitude: number;
24
+ coordinateOf(id: ID): readonly number[] | null;
25
+ squaredDistance(left: ID, right: ID): number | null;
26
+ nearest(target: readonly number[]): MetricMatch<ID> | null;
27
+ withinRadius(target: readonly number[], radius: number): readonly MetricMatch<ID>[];
28
+ forwardNearest(origin: readonly number[], direction: readonly number[]): MetricMatch<ID> | null;
29
+ }
30
+ export declare const DEFAULT_MAX_METRIC_ITEMS = 100000;
31
+ export declare const MAX_METRIC_ITEMS = 1000000;
32
+ export declare const DEFAULT_MAX_METRIC_DIMENSIONS = 32;
33
+ export declare const MAX_METRIC_DIMENSIONS = 32;
34
+ export declare const DEFAULT_MAX_METRIC_COORDINATE_MAGNITUDE = 1e+150;
35
+ export declare function createMetricIndex<ID extends StableID>(points: readonly MetricPoint<ID>[], options?: MetricIndexOptions): MetricIndex<ID>;
36
+ export declare function tryCreateMetricIndex<ID extends StableID>(points: readonly MetricPoint<ID>[], options?: MetricIndexOptions): Result<MetricIndex<ID>>;