@synnaxlabs/x 0.16.0 → 0.23.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 (511) hide show
  1. package/.turbo/turbo-build.log +99 -7
  2. package/.vscode/settings.json +5 -1
  3. package/dist/base-Cz4DfmJf.js +37 -0
  4. package/dist/base-D3FrPu8C.cjs +1 -0
  5. package/dist/binary.cjs +1 -0
  6. package/dist/binary.js +37 -0
  7. package/dist/bounds-1ouRnRJS.cjs +1 -0
  8. package/dist/bounds-BYz3mV9U.js +129 -0
  9. package/dist/bounds.cjs +1 -0
  10. package/dist/bounds.js +4 -0
  11. package/dist/box-CHDDKvN3.cjs +1 -0
  12. package/dist/box-Q7p9JFnX.js +204 -0
  13. package/dist/box.cjs +1 -0
  14. package/dist/box.js +4 -0
  15. package/dist/caseconv.cjs +1 -0
  16. package/dist/caseconv.js +4 -0
  17. package/dist/change-C-YELKx6.cjs +1 -0
  18. package/dist/change-DLl6DccR.js +12 -0
  19. package/dist/change.cjs +1 -0
  20. package/dist/change.js +4 -0
  21. package/dist/compare.cjs +1 -0
  22. package/dist/compare.js +4 -0
  23. package/dist/debounce.cjs +1 -0
  24. package/dist/debounce.js +17 -0
  25. package/dist/deep.cjs +1 -0
  26. package/dist/deep.js +119 -0
  27. package/dist/destructor.cjs +1 -0
  28. package/dist/destructor.js +1 -0
  29. package/dist/dimensions-9gLSFjFx.js +44 -0
  30. package/dist/dimensions-Fe8DhhXU.cjs +1 -0
  31. package/dist/dimensions.cjs +1 -0
  32. package/dist/dimensions.js +4 -0
  33. package/dist/direction-dXjlmg4_.cjs +1 -0
  34. package/dist/direction-wsPTe9a1.js +15 -0
  35. package/dist/direction.cjs +1 -0
  36. package/dist/direction.js +4 -0
  37. package/dist/external-B-DoBvh7.cjs +1 -0
  38. package/dist/external-DI9122wF.js +27 -0
  39. package/dist/identity.cjs +1 -0
  40. package/dist/identity.js +4 -0
  41. package/dist/index-Bcm6lEr8.js +73 -0
  42. package/dist/index-CnZb0cyW.cjs +1 -0
  43. package/dist/index-POWYBOZm.js +356 -0
  44. package/dist/index-xjptNL6Z.cjs +1 -0
  45. package/dist/index.cjs +1 -0
  46. package/dist/index.js +136 -0
  47. package/dist/kv.cjs +1 -0
  48. package/dist/kv.js +6 -0
  49. package/dist/location-C4YaXxjI.js +94 -0
  50. package/dist/location-CZOgJmu5.cjs +1 -0
  51. package/dist/location.cjs +1 -0
  52. package/dist/location.js +4 -0
  53. package/dist/observe.cjs +1 -0
  54. package/dist/observe.js +43 -0
  55. package/dist/path-BfHj5x9k.js +62 -0
  56. package/dist/path-By98WcWm.cjs +1 -0
  57. package/dist/position-BjhXUSEO.cjs +1 -0
  58. package/dist/position-PSYLZzqw.js +87 -0
  59. package/dist/position.cjs +1 -0
  60. package/dist/position.js +4 -0
  61. package/dist/record.cjs +1 -0
  62. package/dist/record.js +9 -0
  63. package/dist/runtime.cjs +1 -0
  64. package/dist/runtime.js +4 -0
  65. package/dist/scale-DCbi48di.js +205 -0
  66. package/dist/scale-DUBO0Q4s.cjs +1 -0
  67. package/dist/scale.cjs +1 -0
  68. package/dist/scale.js +4 -0
  69. package/dist/search.cjs +1 -0
  70. package/dist/search.js +15 -0
  71. package/dist/series-CSutMOtt.cjs +11 -0
  72. package/dist/series-DCv8f29w.js +1629 -0
  73. package/dist/spatial-6OGCmDve.js +11 -0
  74. package/dist/spatial-R5OeJgR6.cjs +1 -0
  75. package/dist/spatial.cjs +1 -0
  76. package/dist/spatial.js +20 -0
  77. package/dist/{binary → src/binary}/encoder.d.ts +7 -2
  78. package/dist/src/binary/encoder.d.ts.map +1 -0
  79. package/dist/src/binary/encoder.spec.d.ts.map +1 -0
  80. package/dist/src/binary/index.d.ts.map +1 -0
  81. package/dist/src/caseconv/caseconv.d.ts +4 -0
  82. package/dist/src/caseconv/caseconv.d.ts.map +1 -0
  83. package/dist/src/caseconv/index.d.ts +2 -0
  84. package/dist/src/caseconv/index.d.ts.map +1 -0
  85. package/dist/{change → src/change}/change.d.ts +10 -9
  86. package/dist/src/change/change.d.ts.map +1 -0
  87. package/dist/src/change/index.d.ts.map +1 -0
  88. package/dist/src/clamp/clamp.d.ts.map +1 -0
  89. package/dist/src/clamp/index.d.ts +2 -0
  90. package/dist/src/clamp/index.d.ts.map +1 -0
  91. package/dist/{compare → src/compare}/compare.d.ts +5 -4
  92. package/dist/src/compare/compare.d.ts.map +1 -0
  93. package/dist/src/compare/index.d.ts.map +1 -0
  94. package/dist/src/control/control.d.ts +107 -0
  95. package/dist/src/control/control.d.ts.map +1 -0
  96. package/dist/src/control/index.d.ts +2 -0
  97. package/dist/src/control/index.d.ts.map +1 -0
  98. package/dist/src/debounce/debounce.d.ts.map +1 -0
  99. package/dist/src/debounce/debounce.spec.d.ts +2 -0
  100. package/dist/src/debounce/debounce.spec.d.ts.map +1 -0
  101. package/dist/src/debounce/index.d.ts +2 -0
  102. package/dist/src/debounce/index.d.ts.map +1 -0
  103. package/dist/src/deep/copy.d.ts.map +1 -0
  104. package/dist/{deep → src/deep}/delete.d.ts +2 -1
  105. package/dist/src/deep/delete.d.ts.map +1 -0
  106. package/dist/{deep → src/deep}/delete.spec.d.ts.map +1 -1
  107. package/dist/src/deep/difference.d.ts.map +1 -0
  108. package/dist/src/deep/difference.spec.d.ts.map +1 -0
  109. package/dist/src/deep/equal.d.ts.map +1 -0
  110. package/dist/{deep → src/deep}/equal.spec.d.ts.map +1 -1
  111. package/dist/{deep → src/deep}/external.d.ts +3 -4
  112. package/dist/src/deep/external.d.ts.map +1 -0
  113. package/dist/src/deep/index.d.ts.map +1 -0
  114. package/dist/src/deep/merge.d.ts +12 -0
  115. package/dist/src/deep/merge.d.ts.map +1 -0
  116. package/dist/{deep → src/deep}/merge.spec.d.ts.map +1 -1
  117. package/dist/src/deep/partial.d.ts.map +1 -0
  118. package/dist/src/deep/path.d.ts +45 -0
  119. package/dist/src/deep/path.d.ts.map +1 -0
  120. package/dist/{deep → src/deep}/path.spec.d.ts.map +1 -1
  121. package/dist/src/destructor.d.ts.map +1 -0
  122. package/dist/{identity.d.ts → src/identity.d.ts} +2 -1
  123. package/dist/src/identity.d.ts.map +1 -0
  124. package/dist/{index.d.ts → src/index.d.ts} +22 -20
  125. package/dist/src/index.d.ts.map +1 -0
  126. package/dist/src/invert.d.ts.map +1 -0
  127. package/dist/src/join.d.ts.map +1 -0
  128. package/dist/src/kv/index.d.ts.map +1 -0
  129. package/dist/src/kv/types.d.ts.map +1 -0
  130. package/dist/src/math/index.d.ts +2 -0
  131. package/dist/src/math/index.d.ts.map +1 -0
  132. package/dist/src/math/math.d.ts +11 -0
  133. package/dist/src/math/math.d.ts.map +1 -0
  134. package/dist/src/migrate/index.d.ts.map +1 -0
  135. package/dist/{migrate → src/migrate}/migrate.d.ts +2 -1
  136. package/dist/src/migrate/migrate.d.ts.map +1 -0
  137. package/dist/src/migrate/migrate.spec.d.ts.map +1 -0
  138. package/dist/{mock → src/mock}/MockGLBufferController.d.ts +2 -1
  139. package/dist/src/mock/MockGLBufferController.d.ts.map +1 -0
  140. package/dist/src/mock/index.d.ts.map +1 -0
  141. package/dist/src/observe/index.d.ts.map +1 -0
  142. package/dist/src/observe/observe.d.ts +24 -0
  143. package/dist/src/observe/observe.d.ts.map +1 -0
  144. package/dist/src/observe/obsever.spec.d.ts +2 -0
  145. package/dist/src/observe/obsever.spec.d.ts.map +1 -0
  146. package/dist/src/optional.d.ts.map +1 -0
  147. package/dist/{primitive.d.ts → src/primitive.d.ts} +2 -1
  148. package/dist/src/primitive.d.ts.map +1 -0
  149. package/dist/{record.d.ts → src/record.d.ts} +7 -8
  150. package/dist/src/record.d.ts.map +1 -0
  151. package/dist/{renderable.d.ts → src/renderable.d.ts} +2 -1
  152. package/dist/src/renderable.d.ts.map +1 -0
  153. package/dist/src/runtime/detect.d.ts.map +1 -0
  154. package/dist/src/runtime/external.d.ts.map +1 -0
  155. package/dist/src/runtime/index.d.ts.map +1 -0
  156. package/dist/src/runtime/os.d.ts +20 -0
  157. package/dist/src/runtime/os.d.ts.map +1 -0
  158. package/dist/{search.d.ts → src/search.d.ts} +5 -2
  159. package/dist/src/search.d.ts.map +1 -0
  160. package/dist/src/shallowCopy.d.ts +2 -0
  161. package/dist/src/shallowCopy.d.ts.map +1 -0
  162. package/dist/{spatial → src/spatial}/base.d.ts +30 -5
  163. package/dist/src/spatial/base.d.ts.map +1 -0
  164. package/dist/src/spatial/bounds/bounds.d.ts +148 -0
  165. package/dist/src/spatial/bounds/bounds.d.ts.map +1 -0
  166. package/dist/src/spatial/bounds/bounds.spec.d.ts.map +1 -0
  167. package/dist/src/spatial/bounds/index.d.ts.map +1 -0
  168. package/dist/{spatial → src/spatial}/box/box.d.ts +69 -22
  169. package/dist/src/spatial/box/box.d.ts.map +1 -0
  170. package/dist/src/spatial/box/box.spec.d.ts.map +1 -0
  171. package/dist/src/spatial/box/index.d.ts.map +1 -0
  172. package/dist/{spatial → src/spatial}/dimensions/dimensions.d.ts +4 -3
  173. package/dist/src/spatial/dimensions/dimensions.d.ts.map +1 -0
  174. package/dist/src/spatial/dimensions/dimensions.spec.d.ts.map +1 -0
  175. package/dist/src/spatial/dimensions/index.d.ts.map +1 -0
  176. package/dist/{spatial → src/spatial}/direction/direction.d.ts +3 -2
  177. package/dist/src/spatial/direction/direction.d.ts.map +1 -0
  178. package/dist/src/spatial/direction/direction.spec.d.ts.map +1 -0
  179. package/dist/src/spatial/direction/index.d.ts.map +1 -0
  180. package/dist/{spatial → src/spatial}/external.d.ts +2 -2
  181. package/dist/src/spatial/external.d.ts.map +1 -0
  182. package/dist/src/spatial/index.d.ts.map +1 -0
  183. package/dist/src/spatial/location/index.d.ts.map +1 -0
  184. package/dist/{spatial → src/spatial}/location/location.d.ts +4 -3
  185. package/dist/src/spatial/location/location.d.ts.map +1 -0
  186. package/dist/src/spatial/location/location.spec.d.ts.map +1 -0
  187. package/dist/src/spatial/position/index.d.ts.map +1 -0
  188. package/dist/{spatial → src/spatial}/position/position.d.ts +4 -4
  189. package/dist/src/spatial/position/position.d.ts.map +1 -0
  190. package/dist/src/spatial/position/position.spec.d.ts.map +1 -0
  191. package/dist/src/spatial/scale/index.d.ts.map +1 -0
  192. package/dist/{spatial → src/spatial}/scale/scale.d.ts +15 -62
  193. package/dist/src/spatial/scale/scale.d.ts.map +1 -0
  194. package/dist/src/spatial/scale/scale.spec.d.ts.map +1 -0
  195. package/dist/src/spatial/spatial.d.ts +2 -0
  196. package/dist/src/spatial/spatial.d.ts.map +1 -0
  197. package/dist/src/spatial/xy/index.d.ts.map +1 -0
  198. package/dist/{spatial → src/spatial}/xy/xy.d.ts +15 -24
  199. package/dist/src/spatial/xy/xy.d.ts.map +1 -0
  200. package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts.map +1 -1
  201. package/dist/src/telem/generate.d.ts +4 -0
  202. package/dist/src/telem/generate.d.ts.map +1 -0
  203. package/dist/src/telem/gl.d.ts.map +1 -0
  204. package/dist/{telem → src/telem}/index.d.ts +1 -1
  205. package/dist/src/telem/index.d.ts.map +1 -0
  206. package/dist/{telem → src/telem}/series.d.ts +10 -8
  207. package/dist/src/telem/series.d.ts.map +1 -0
  208. package/dist/{telem → src/telem}/series.spec.d.ts.map +1 -1
  209. package/dist/{telem → src/telem}/telem.d.ts +19 -21
  210. package/dist/src/telem/telem.d.ts.map +1 -0
  211. package/dist/{telem → src/telem}/telem.spec.d.ts.map +1 -1
  212. package/dist/src/toArray.d.ts.map +1 -0
  213. package/dist/src/transform.d.ts +6 -0
  214. package/dist/src/transform.d.ts.map +1 -0
  215. package/dist/src/unique.d.ts.map +1 -0
  216. package/dist/src/url/index.d.ts +2 -0
  217. package/dist/src/url/index.d.ts.map +1 -0
  218. package/dist/src/url/url.d.ts.map +1 -0
  219. package/dist/{url → src/url}/url.spec.d.ts.map +1 -1
  220. package/dist/src/worker/index.d.ts +2 -0
  221. package/dist/src/worker/index.d.ts.map +1 -0
  222. package/dist/{worker → src/worker}/worker.d.ts +4 -4
  223. package/dist/src/worker/worker.d.ts.map +1 -0
  224. package/dist/src/worker/worker.spec.d.ts.map +1 -0
  225. package/dist/src/zodutil/index.d.ts +2 -0
  226. package/dist/src/zodutil/index.d.ts.map +1 -0
  227. package/dist/src/zodutil/zodutil.d.ts +6 -0
  228. package/dist/src/zodutil/zodutil.d.ts.map +1 -0
  229. package/dist/src/zodutil/zodutil.spec.d.ts +2 -0
  230. package/dist/src/zodutil/zodutil.spec.d.ts.map +1 -0
  231. package/dist/telem.cjs +1 -0
  232. package/dist/telem.js +17 -0
  233. package/dist/toArray.cjs +1 -0
  234. package/dist/toArray.js +5 -0
  235. package/dist/unique.cjs +1 -0
  236. package/dist/unique.js +4 -0
  237. package/dist/url.cjs +1 -0
  238. package/dist/url.js +54 -0
  239. package/dist/worker.cjs +1 -0
  240. package/dist/worker.js +47 -0
  241. package/dist/xy-B4SvvNaG.cjs +1 -0
  242. package/dist/xy-H8aUVW_X.js +90 -0
  243. package/dist/xy.cjs +1 -0
  244. package/dist/xy.js +4 -0
  245. package/dist/zodutil.cjs +1 -0
  246. package/dist/zodutil.js +22 -0
  247. package/eslint.config.js +12 -0
  248. package/package.json +158 -14
  249. package/src/binary/encoder.spec.ts +31 -6
  250. package/src/binary/encoder.ts +26 -15
  251. package/src/binary/index.ts +1 -1
  252. package/src/{case.ts → caseconv/caseconv.ts} +4 -9
  253. package/src/caseconv/index.ts +10 -0
  254. package/src/change/change.ts +7 -6
  255. package/src/change/index.ts +1 -1
  256. package/src/{clamp.ts → clamp/clamp.ts} +1 -1
  257. package/src/clamp/index.ts +10 -0
  258. package/src/compare/compare.ts +6 -9
  259. package/src/compare/index.ts +1 -1
  260. package/src/control/control.ts +77 -0
  261. package/src/control/index.ts +1 -0
  262. package/src/debounce/debounce.spec.ts +52 -0
  263. package/src/{debounce.ts → debounce/debounce.ts} +4 -4
  264. package/src/debounce/index.ts +10 -0
  265. package/src/deep/copy.ts +2 -3
  266. package/src/deep/delete.spec.ts +2 -2
  267. package/src/deep/delete.ts +3 -2
  268. package/src/deep/difference.spec.ts +28 -27
  269. package/src/deep/difference.ts +13 -11
  270. package/src/deep/equal.spec.ts +4 -4
  271. package/src/deep/equal.ts +16 -12
  272. package/src/deep/external.ts +4 -5
  273. package/src/deep/index.ts +1 -1
  274. package/src/deep/merge.spec.ts +120 -4
  275. package/src/deep/merge.ts +50 -9
  276. package/src/deep/partial.ts +1 -1
  277. package/src/deep/path.spec.ts +90 -39
  278. package/src/deep/path.ts +105 -46
  279. package/src/destructor.ts +2 -2
  280. package/src/identity.ts +1 -1
  281. package/src/index.ts +23 -21
  282. package/src/invert.ts +9 -0
  283. package/src/join.ts +1 -1
  284. package/src/kv/index.ts +1 -1
  285. package/src/kv/types.ts +1 -1
  286. package/src/math/index.ts +10 -0
  287. package/src/math/math.ts +33 -0
  288. package/src/migrate/index.ts +9 -0
  289. package/src/migrate/migrate.spec.ts +12 -2
  290. package/src/migrate/migrate.ts +9 -0
  291. package/src/mock/MockGLBufferController.ts +6 -6
  292. package/src/mock/index.ts +1 -1
  293. package/src/observe/index.ts +1 -1
  294. package/src/observe/observe.ts +37 -6
  295. package/src/observe/obsever.spec.ts +56 -0
  296. package/src/optional.ts +3 -4
  297. package/src/primitive.ts +1 -1
  298. package/src/record.ts +10 -6
  299. package/src/renderable.ts +1 -1
  300. package/src/runtime/detect.ts +3 -3
  301. package/src/runtime/external.ts +1 -1
  302. package/src/runtime/index.ts +1 -1
  303. package/src/runtime/os.ts +17 -5
  304. package/src/search.ts +3 -1
  305. package/src/shallowCopy.ts +5 -6
  306. package/src/spatial/base.ts +13 -5
  307. package/src/spatial/bounds/bounds.spec.ts +259 -180
  308. package/src/spatial/bounds/bounds.ts +200 -85
  309. package/src/spatial/bounds/index.ts +2 -2
  310. package/src/spatial/box/box.spec.ts +163 -2
  311. package/src/spatial/box/box.ts +82 -38
  312. package/src/spatial/box/index.ts +2 -2
  313. package/src/spatial/dimensions/dimensions.spec.ts +1 -1
  314. package/src/spatial/dimensions/dimensions.ts +4 -4
  315. package/src/spatial/dimensions/index.ts +2 -2
  316. package/src/spatial/direction/direction.spec.ts +1 -1
  317. package/src/spatial/direction/direction.ts +5 -5
  318. package/src/spatial/direction/index.ts +2 -2
  319. package/src/spatial/external.ts +3 -3
  320. package/src/spatial/index.ts +1 -1
  321. package/src/spatial/location/index.ts +2 -2
  322. package/src/spatial/location/location.spec.ts +1 -1
  323. package/src/spatial/location/location.ts +21 -21
  324. package/src/spatial/position/index.ts +1 -1
  325. package/src/spatial/position/position.spec.ts +1 -1
  326. package/src/spatial/position/position.ts +3 -20
  327. package/src/spatial/scale/index.ts +2 -2
  328. package/src/spatial/scale/scale.spec.ts +3 -3
  329. package/src/spatial/scale/scale.ts +3 -3
  330. package/src/spatial/spatial.ts +5 -5
  331. package/src/spatial/xy/index.ts +2 -2
  332. package/src/spatial/xy/xy.spec.ts +93 -44
  333. package/src/spatial/xy/xy.ts +17 -25
  334. package/src/telem/generate.ts +1 -1
  335. package/src/telem/gl.ts +1 -1
  336. package/src/telem/index.ts +2 -2
  337. package/src/telem/series.spec.ts +64 -5
  338. package/src/telem/series.ts +47 -35
  339. package/src/telem/telem.spec.ts +105 -2
  340. package/src/telem/telem.ts +63 -23
  341. package/src/toArray.ts +2 -2
  342. package/src/transform.ts +9 -2
  343. package/src/unique.ts +1 -1
  344. package/src/url/index.ts +2 -2
  345. package/src/url/url.spec.ts +2 -2
  346. package/src/url/url.ts +4 -4
  347. package/src/worker/index.ts +10 -0
  348. package/src/worker/worker.spec.ts +2 -2
  349. package/src/worker/worker.ts +13 -13
  350. package/src/zodutil/index.ts +10 -0
  351. package/src/zodutil/zodutil.spec.ts +103 -0
  352. package/src/zodutil/zodutil.ts +45 -0
  353. package/tsconfig.json +1 -0
  354. package/tsconfig.tsbuildinfo +1 -0
  355. package/vite.config.ts +39 -3
  356. package/.eslintrc.cjs +0 -18
  357. package/dist/binary/encoder.d.ts.map +0 -1
  358. package/dist/binary/encoder.spec.d.ts.map +0 -1
  359. package/dist/binary/index.d.ts.map +0 -1
  360. package/dist/case.d.ts +0 -6
  361. package/dist/case.d.ts.map +0 -1
  362. package/dist/change/change.d.ts.map +0 -1
  363. package/dist/change/index.d.ts.map +0 -1
  364. package/dist/clamp.d.ts.map +0 -1
  365. package/dist/compare/compare.d.ts.map +0 -1
  366. package/dist/compare/index.d.ts.map +0 -1
  367. package/dist/debounce.d.ts.map +0 -1
  368. package/dist/deep/copy.d.ts.map +0 -1
  369. package/dist/deep/delete.d.ts.map +0 -1
  370. package/dist/deep/difference.d.ts.map +0 -1
  371. package/dist/deep/difference.spec.d.ts.map +0 -1
  372. package/dist/deep/equal.d.ts.map +0 -1
  373. package/dist/deep/external.d.ts.map +0 -1
  374. package/dist/deep/index.d.ts.map +0 -1
  375. package/dist/deep/memo.d.ts +0 -2
  376. package/dist/deep/memo.d.ts.map +0 -1
  377. package/dist/deep/merge.d.ts +0 -3
  378. package/dist/deep/merge.d.ts.map +0 -1
  379. package/dist/deep/partial.d.ts.map +0 -1
  380. package/dist/deep/path.d.ts +0 -37
  381. package/dist/deep/path.d.ts.map +0 -1
  382. package/dist/destructor.d.ts.map +0 -1
  383. package/dist/identity.d.ts.map +0 -1
  384. package/dist/index.d.ts.map +0 -1
  385. package/dist/invert.d.ts.map +0 -1
  386. package/dist/join.d.ts.map +0 -1
  387. package/dist/kv/index.d.ts.map +0 -1
  388. package/dist/kv/types.d.ts.map +0 -1
  389. package/dist/migrate/index.d.ts.map +0 -1
  390. package/dist/migrate/migrate.d.ts.map +0 -1
  391. package/dist/migrate/migrate.spec.d.ts.map +0 -1
  392. package/dist/mock/MockGLBufferController.d.ts.map +0 -1
  393. package/dist/mock/index.d.ts.map +0 -1
  394. package/dist/observe/index.d.ts.map +0 -1
  395. package/dist/observe/observe.d.ts +0 -12
  396. package/dist/observe/observe.d.ts.map +0 -1
  397. package/dist/optional.d.ts.map +0 -1
  398. package/dist/primitive.d.ts.map +0 -1
  399. package/dist/record.d.ts.map +0 -1
  400. package/dist/renderable.d.ts.map +0 -1
  401. package/dist/runtime/detect.d.ts.map +0 -1
  402. package/dist/runtime/external.d.ts.map +0 -1
  403. package/dist/runtime/index.d.ts.map +0 -1
  404. package/dist/runtime/os.d.ts +0 -10
  405. package/dist/runtime/os.d.ts.map +0 -1
  406. package/dist/search.d.ts.map +0 -1
  407. package/dist/shallowCopy.d.ts +0 -2
  408. package/dist/shallowCopy.d.ts.map +0 -1
  409. package/dist/spatial/base.d.ts.map +0 -1
  410. package/dist/spatial/bounds/bounds.d.ts +0 -71
  411. package/dist/spatial/bounds/bounds.d.ts.map +0 -1
  412. package/dist/spatial/bounds/bounds.spec.d.ts.map +0 -1
  413. package/dist/spatial/bounds/index.d.ts.map +0 -1
  414. package/dist/spatial/box/box.d.ts.map +0 -1
  415. package/dist/spatial/box/box.spec.d.ts.map +0 -1
  416. package/dist/spatial/box/index.d.ts.map +0 -1
  417. package/dist/spatial/dimensions/dimensions.d.ts.map +0 -1
  418. package/dist/spatial/dimensions/dimensions.spec.d.ts.map +0 -1
  419. package/dist/spatial/dimensions/index.d.ts.map +0 -1
  420. package/dist/spatial/direction/direction.d.ts.map +0 -1
  421. package/dist/spatial/direction/direction.spec.d.ts.map +0 -1
  422. package/dist/spatial/direction/index.d.ts.map +0 -1
  423. package/dist/spatial/external.d.ts.map +0 -1
  424. package/dist/spatial/index.d.ts.map +0 -1
  425. package/dist/spatial/location/index.d.ts.map +0 -1
  426. package/dist/spatial/location/location.d.ts.map +0 -1
  427. package/dist/spatial/location/location.spec.d.ts.map +0 -1
  428. package/dist/spatial/position/index.d.ts.map +0 -1
  429. package/dist/spatial/position/position.d.ts.map +0 -1
  430. package/dist/spatial/position/position.spec.d.ts.map +0 -1
  431. package/dist/spatial/scale/index.d.ts.map +0 -1
  432. package/dist/spatial/scale/scale.d.ts.map +0 -1
  433. package/dist/spatial/scale/scale.spec.d.ts.map +0 -1
  434. package/dist/spatial/spatial.d.ts +0 -2
  435. package/dist/spatial/spatial.d.ts.map +0 -1
  436. package/dist/spatial/xy/index.d.ts.map +0 -1
  437. package/dist/spatial/xy/xy.d.ts.map +0 -1
  438. package/dist/telem/generate.d.ts +0 -3
  439. package/dist/telem/generate.d.ts.map +0 -1
  440. package/dist/telem/gl.d.ts.map +0 -1
  441. package/dist/telem/index.d.ts.map +0 -1
  442. package/dist/telem/series.d.ts.map +0 -1
  443. package/dist/telem/telem.d.ts.map +0 -1
  444. package/dist/toArray.d.ts.map +0 -1
  445. package/dist/transform.d.ts +0 -2
  446. package/dist/transform.d.ts.map +0 -1
  447. package/dist/unique.d.ts.map +0 -1
  448. package/dist/url/index.d.ts +0 -2
  449. package/dist/url/index.d.ts.map +0 -1
  450. package/dist/url/url.d.ts.map +0 -1
  451. package/dist/worker/worker.d.ts.map +0 -1
  452. package/dist/worker/worker.spec.d.ts.map +0 -1
  453. package/dist/x.cjs +0 -12
  454. package/dist/x.cjs.map +0 -1
  455. package/dist/x.js +0 -5935
  456. package/dist/x.js.map +0 -1
  457. package/src/deep/memo.ts +0 -24
  458. /package/dist/{binary → src/binary}/encoder.spec.d.ts +0 -0
  459. /package/dist/{binary → src/binary}/index.d.ts +0 -0
  460. /package/dist/{change → src/change}/index.d.ts +0 -0
  461. /package/dist/{clamp.d.ts → src/clamp/clamp.d.ts} +0 -0
  462. /package/dist/{compare → src/compare}/index.d.ts +0 -0
  463. /package/dist/{debounce.d.ts → src/debounce/debounce.d.ts} +0 -0
  464. /package/dist/{deep → src/deep}/copy.d.ts +0 -0
  465. /package/dist/{deep → src/deep}/delete.spec.d.ts +0 -0
  466. /package/dist/{deep → src/deep}/difference.d.ts +0 -0
  467. /package/dist/{deep → src/deep}/difference.spec.d.ts +0 -0
  468. /package/dist/{deep → src/deep}/equal.d.ts +0 -0
  469. /package/dist/{deep → src/deep}/equal.spec.d.ts +0 -0
  470. /package/dist/{deep → src/deep}/index.d.ts +0 -0
  471. /package/dist/{deep → src/deep}/merge.spec.d.ts +0 -0
  472. /package/dist/{deep → src/deep}/partial.d.ts +0 -0
  473. /package/dist/{deep → src/deep}/path.spec.d.ts +0 -0
  474. /package/dist/{destructor.d.ts → src/destructor.d.ts} +0 -0
  475. /package/dist/{invert.d.ts → src/invert.d.ts} +0 -0
  476. /package/dist/{join.d.ts → src/join.d.ts} +0 -0
  477. /package/dist/{kv → src/kv}/index.d.ts +0 -0
  478. /package/dist/{kv → src/kv}/types.d.ts +0 -0
  479. /package/dist/{migrate → src/migrate}/index.d.ts +0 -0
  480. /package/dist/{migrate → src/migrate}/migrate.spec.d.ts +0 -0
  481. /package/dist/{mock → src/mock}/index.d.ts +0 -0
  482. /package/dist/{observe → src/observe}/index.d.ts +0 -0
  483. /package/dist/{optional.d.ts → src/optional.d.ts} +0 -0
  484. /package/dist/{runtime → src/runtime}/detect.d.ts +0 -0
  485. /package/dist/{runtime → src/runtime}/external.d.ts +0 -0
  486. /package/dist/{runtime → src/runtime}/index.d.ts +0 -0
  487. /package/dist/{spatial → src/spatial}/bounds/bounds.spec.d.ts +0 -0
  488. /package/dist/{spatial → src/spatial}/bounds/index.d.ts +0 -0
  489. /package/dist/{spatial → src/spatial}/box/box.spec.d.ts +0 -0
  490. /package/dist/{spatial → src/spatial}/box/index.d.ts +0 -0
  491. /package/dist/{spatial → src/spatial}/dimensions/dimensions.spec.d.ts +0 -0
  492. /package/dist/{spatial → src/spatial}/dimensions/index.d.ts +0 -0
  493. /package/dist/{spatial → src/spatial}/direction/direction.spec.d.ts +0 -0
  494. /package/dist/{spatial → src/spatial}/direction/index.d.ts +0 -0
  495. /package/dist/{spatial → src/spatial}/index.d.ts +0 -0
  496. /package/dist/{spatial → src/spatial}/location/index.d.ts +0 -0
  497. /package/dist/{spatial → src/spatial}/location/location.spec.d.ts +0 -0
  498. /package/dist/{spatial → src/spatial}/position/index.d.ts +0 -0
  499. /package/dist/{spatial → src/spatial}/position/position.spec.d.ts +0 -0
  500. /package/dist/{spatial → src/spatial}/scale/index.d.ts +0 -0
  501. /package/dist/{spatial → src/spatial}/scale/scale.spec.d.ts +0 -0
  502. /package/dist/{spatial → src/spatial}/xy/index.d.ts +0 -0
  503. /package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts +0 -0
  504. /package/dist/{telem → src/telem}/gl.d.ts +0 -0
  505. /package/dist/{telem → src/telem}/series.spec.d.ts +0 -0
  506. /package/dist/{telem → src/telem}/telem.spec.d.ts +0 -0
  507. /package/dist/{toArray.d.ts → src/toArray.d.ts} +0 -0
  508. /package/dist/{unique.d.ts → src/unique.d.ts} +0 -0
  509. /package/dist/{url → src/url}/url.d.ts +0 -0
  510. /package/dist/{url → src/url}/url.spec.d.ts +0 -0
  511. /package/dist/{worker → src/worker}/worker.spec.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -9,6 +9,7 @@
9
9
 
10
10
  import { describe, expect, it, test } from "vitest";
11
11
 
12
+ import { type NumberCouple } from "@/spatial/base";
12
13
  import * as bounds from "@/spatial/bounds/bounds";
13
14
 
14
15
  describe("Bounds", () => {
@@ -26,12 +27,32 @@ describe("Bounds", () => {
26
27
  expect(bound.upper).toEqual(2);
27
28
  });
28
29
  });
30
+ it("should accept two arguments", () => {
31
+ const bound = bounds.construct(1, 2);
32
+ expect(bound.lower).toEqual(1);
33
+ expect(bound.upper).toEqual(2);
34
+ });
29
35
  it("should consider a single argument as the upper bound", () => {
30
36
  const bound = bounds.construct(1);
31
37
  expect(bound.lower).toEqual(0);
32
38
  expect(bound.upper).toEqual(1);
33
39
  });
34
40
  });
41
+ describe("equals", () => {
42
+ it("should return true if the bounds are equal", () => {
43
+ const a = bounds.construct([1, 2]);
44
+ const b = bounds.construct([1, 2]);
45
+ expect(bounds.equals(a, b)).toEqual(true);
46
+ });
47
+ it("should return true if both bounds are undefined", () => {
48
+ expect(bounds.equals(undefined, undefined)).toEqual(true);
49
+ });
50
+ it("should return false if the bounds are not equal", () => {
51
+ const a = bounds.construct([1, 2]);
52
+ const b = bounds.construct([1, 3]);
53
+ expect(bounds.equals(a, b)).toEqual(false);
54
+ });
55
+ });
35
56
  describe("contains", () => {
36
57
  it("should return true if the value is within the bounds", () => {
37
58
  const b = bounds.construct([1, 2]);
@@ -206,194 +227,252 @@ describe("Bounds", () => {
206
227
  [[[3, 7]], 8, { index: 1, position: 0 }],
207
228
  ];
208
229
  SPECS.forEach(([b, target, expected]) => {
209
- test(`should return ${expected} for ${b} and ${target}`, () => {
230
+ test(`should return ${JSON.stringify(expected)} for ${JSON.stringify(b)} and ${target}`, () => {
210
231
  expect(bounds.findInsertPosition(b, target)).toEqual(expected);
211
232
  });
212
233
  });
213
234
  });
214
235
  describe("insert", () => {
215
236
  describe("formal cases", () => {
216
- test("insert before adjacent upper", () => {
217
- const b: bounds.Crude[] = [
218
- [2, 3],
219
- [3, 4],
220
- [5, 6],
221
- ];
222
- const v: bounds.Crude = [1, 2];
223
- const result = bounds.insert(b, v);
224
- expect(result).toEqual([
225
- { lower: 1, upper: 2 },
226
- { lower: 2, upper: 3 },
227
- { lower: 3, upper: 4 },
228
- { lower: 5, upper: 6 },
229
- ]);
230
- });
231
- test("insert in-between with no overlap", () => {
232
- const b: bounds.Crude[] = [
233
- [2, 3],
234
- [3, 4],
235
- [7, 8],
236
- ];
237
- const v: bounds.Crude = [5, 6];
238
- const result = bounds.insert(b, v);
239
- expect(result).toEqual([
240
- { lower: 2, upper: 3 },
241
- { lower: 3, upper: 4 },
242
- { lower: 5, upper: 6 },
243
- { lower: 7, upper: 8 },
244
- ]);
245
- });
246
- test("insert in-between adjacent lower and upper", () => {
247
- const b: bounds.Crude[] = [
248
- [2, 3],
249
- [3, 4],
250
- [5, 6],
251
- ];
252
- const v: bounds.Crude = [4, 5];
253
- const result = bounds.insert(b, v);
254
- expect(result).toEqual([
255
- { lower: 2, upper: 3 },
256
- { lower: 3, upper: 4 },
257
- { lower: 4, upper: 5 },
258
- { lower: 5, upper: 6 },
259
- ]);
260
- });
261
- test("insert in-between adjacent lower not upper", () => {
262
- const b: bounds.Crude[] = [
263
- [2, 3],
264
- [3, 4],
265
- [7, 8],
266
- ];
267
- const v: bounds.Crude = [4, 6];
268
- const result = bounds.insert(b, v);
269
- expect(result).toEqual([
270
- { lower: 2, upper: 3 },
271
- { lower: 3, upper: 4 },
272
- { lower: 4, upper: 6 },
273
- { lower: 7, upper: 8 },
274
- ]);
275
- });
276
- test("insert in-between overlap lower adjacent upper", () => {
277
- const b: bounds.Crude[] = [
278
- [2, 4],
279
- [5, 6],
280
- [7, 8],
281
- ];
282
- const v: bounds.Crude = [3, 5];
283
- const result = bounds.insert(b, v);
284
- expect(result).toEqual([
285
- { lower: 2, upper: 4 },
286
- { lower: 4, upper: 5 },
287
- { lower: 5, upper: 6 },
288
- { lower: 7, upper: 8 },
289
- ]);
290
- });
291
- test("insert in-between adjacent lower contain 1 adjacent upper", () => {
292
- const b: bounds.Crude[] = [
293
- [2, 4],
294
- [5, 6],
295
- [7, 8],
296
- ];
297
- const v: bounds.Crude = [4, 7];
298
- const result = bounds.insert(b, v);
299
- expect(result).toEqual([
300
- { lower: 2, upper: 4 },
301
- { lower: 4, upper: 7 },
302
- { lower: 7, upper: 8 },
303
- ]);
304
- });
305
- test("insert in-between overlap lower consume 1 adjacent upper", () => {
306
- const b: bounds.Crude[] = [
307
- [2, 4],
308
- [5, 6],
309
- [7, 8],
310
- ];
311
- const v: bounds.Crude = [3, 7];
312
- const result = bounds.insert(b, v);
313
- expect(result).toEqual([
314
- { lower: 2, upper: 4 },
315
- { lower: 4, upper: 7 },
316
- { lower: 7, upper: 8 },
317
- ]);
318
- });
319
- test("insert in-between replace 1", () => {
320
- const b: bounds.Crude[] = [
321
- [2, 4],
322
- [5, 6],
323
- [7, 8],
324
- ];
325
- const v: bounds.Crude = [5, 6];
326
- const result = bounds.insert(b, v);
327
- expect(result).toEqual([
328
- { lower: 2, upper: 4 },
329
- { lower: 5, upper: 6 },
330
- { lower: 7, upper: 8 },
331
- ]);
332
- });
333
- test("insert before overlap first", () => {
334
- const b: bounds.Crude[] = [[3, 7]];
335
- const v: bounds.Crude = [1, 4];
336
- const result = bounds.insert(b, v);
337
- expect(result).toEqual([
338
- { lower: 1, upper: 3 },
339
- { lower: 3, upper: 7 },
340
- ]);
341
- });
342
- test("insert before no adjacent", () => {
343
- const b: bounds.Crude[] = [[3, 7]];
344
- const v: bounds.Crude = [1, 2];
345
- const result = bounds.insert(b, v);
346
- expect(result).toEqual([
347
- { lower: 1, upper: 2 },
348
- { lower: 3, upper: 7 },
349
- ]);
350
- });
351
- test("insert after no adjacent", () => {
352
- const b: bounds.Crude[] = [[3, 7]];
353
- const v: bounds.Crude = [8, 9];
354
- const result = bounds.insert(b, v);
355
- expect(result).toEqual([
356
- { lower: 3, upper: 7 },
357
- { lower: 8, upper: 9 },
358
- ]);
359
- });
360
- test("insert after adjacent upper", () => {
361
- const b: bounds.Crude[] = [[3, 7]];
362
- const v: bounds.Crude = [7, 9];
363
- const result = bounds.insert(b, v);
364
- expect(result).toEqual([
365
- { lower: 3, upper: 7 },
366
- { lower: 7, upper: 9 },
367
- ]);
237
+ interface Spec {
238
+ name: string;
239
+ b: Array<NumberCouple<bigint | number>>;
240
+ v: NumberCouple<bigint | number>;
241
+ result: Array<bounds.Bounds<bigint | number>>;
242
+ focus?: boolean;
243
+ }
244
+
245
+ const SPECS: Spec[] = [
246
+ {
247
+ name: "insert before adjacent upper",
248
+ b: [
249
+ [2, 3],
250
+ [3, 4],
251
+ [5, 6],
252
+ ],
253
+ v: [1, 2],
254
+ result: [
255
+ { lower: 1, upper: 2 },
256
+ { lower: 2, upper: 3 },
257
+ { lower: 3, upper: 4 },
258
+ { lower: 5, upper: 6 },
259
+ ],
260
+ },
261
+ {
262
+ name: "insert in-between with no overlap",
263
+ b: [
264
+ [2, 3],
265
+ [3, 4],
266
+ [7, 8],
267
+ ],
268
+ v: [5, 6],
269
+ result: [
270
+ { lower: 2, upper: 3 },
271
+ { lower: 3, upper: 4 },
272
+ { lower: 5, upper: 6 },
273
+ { lower: 7, upper: 8 },
274
+ ],
275
+ },
276
+ {
277
+ name: "insert in-between adjacent lower and upper",
278
+ b: [
279
+ [2, 3],
280
+ [3, 4],
281
+ [5, 6],
282
+ ],
283
+ v: [4, 5],
284
+ result: [
285
+ { lower: 2, upper: 3 },
286
+ { lower: 3, upper: 4 },
287
+ { lower: 4, upper: 5 },
288
+ { lower: 5, upper: 6 },
289
+ ],
290
+ },
291
+ {
292
+ name: "insert in-between adjacent lower and upper",
293
+ b: [
294
+ [2, 3],
295
+ [3, 4],
296
+ [5, 6],
297
+ ],
298
+ v: [4, 5],
299
+ result: [
300
+ { lower: 2, upper: 3 },
301
+ { lower: 3, upper: 4 },
302
+ { lower: 4, upper: 5 },
303
+ { lower: 5, upper: 6 },
304
+ ],
305
+ },
306
+ {
307
+ name: "insert in-between adjacent lower not upper",
308
+ b: [
309
+ [2, 3],
310
+ [3, 4],
311
+ [7, 8],
312
+ ],
313
+ v: [4, 6],
314
+ result: [
315
+ { lower: 2, upper: 3 },
316
+ { lower: 3, upper: 4 },
317
+ { lower: 4, upper: 6 },
318
+ { lower: 7, upper: 8 },
319
+ ],
320
+ },
321
+ {
322
+ name: "insert in-between overlap lower adjacent upper",
323
+ b: [
324
+ [2, 4],
325
+ [5, 6],
326
+ [7, 8],
327
+ ],
328
+ v: [3, 5],
329
+ result: [
330
+ { lower: 2, upper: 4 },
331
+ { lower: 4, upper: 5 },
332
+ { lower: 5, upper: 6 },
333
+ { lower: 7, upper: 8 },
334
+ ],
335
+ },
336
+ {
337
+ name: "insert in-between adjacent lower contain 1 adjacent upper",
338
+ b: [
339
+ [2, 4],
340
+ [5, 6],
341
+ [7, 8],
342
+ ],
343
+ v: [4, 7],
344
+ result: [
345
+ { lower: 2, upper: 4 },
346
+ { lower: 4, upper: 7 },
347
+ { lower: 7, upper: 8 },
348
+ ],
349
+ },
350
+ {
351
+ name: "insert in-between overlap lower consume 1 adjacent upper",
352
+ b: [
353
+ [2, 4],
354
+ [5, 6],
355
+ [7, 8],
356
+ ],
357
+ v: [3, 7],
358
+ result: [
359
+ { lower: 2, upper: 4 },
360
+ { lower: 4, upper: 7 },
361
+ { lower: 7, upper: 8 },
362
+ ],
363
+ },
364
+ {
365
+ name: "insert in-between replace 1",
366
+ b: [
367
+ [2, 4],
368
+ [5, 6],
369
+ [7, 8],
370
+ ],
371
+ v: [5, 6],
372
+ result: [
373
+ { lower: 2, upper: 4 },
374
+ { lower: 5, upper: 6 },
375
+ { lower: 7, upper: 8 },
376
+ ],
377
+ },
378
+ {
379
+ name: "insert before overlap first",
380
+ b: [[3, 7]],
381
+ v: [1, 4],
382
+ result: [
383
+ { lower: 1, upper: 3 },
384
+ { lower: 3, upper: 7 },
385
+ ],
386
+ },
387
+ {
388
+ name: "insert before no adjacent",
389
+ b: [[3, 7]],
390
+ v: [1, 2],
391
+ result: [
392
+ { lower: 1, upper: 2 },
393
+ { lower: 3, upper: 7 },
394
+ ],
395
+ },
396
+ {
397
+ name: "insert after no adjacent",
398
+ b: [[3, 7]],
399
+ v: [8, 9],
400
+ result: [
401
+ { lower: 3, upper: 7 },
402
+ { lower: 8, upper: 9 },
403
+ ],
404
+ },
405
+ {
406
+ name: "insert after adjacent upper",
407
+ b: [[3, 7]],
408
+ v: [7, 9],
409
+ result: [
410
+ { lower: 3, upper: 7 },
411
+ { lower: 7, upper: 9 },
412
+ ],
413
+ },
414
+ {
415
+ name: "insert after overlap last",
416
+ b: [[3, 7]],
417
+ v: [5, 9],
418
+ result: [
419
+ { lower: 3, upper: 7 },
420
+ { lower: 7, upper: 9 },
421
+ ],
422
+ },
423
+ {
424
+ name: "regression 1",
425
+ b: [
426
+ [0, 47040],
427
+ [47040, 47240],
428
+ [47240, 47280],
429
+ [47280, 47320],
430
+ [47320, 47400],
431
+ ],
432
+ v: [47066, 47066 + 354],
433
+ result: [
434
+ { lower: 0, upper: 47040 },
435
+ { lower: 47040, upper: 47240 },
436
+ { lower: 47240, upper: 47066 + 354 },
437
+ ],
438
+ },
439
+ ];
440
+
441
+ describe("number", () => {
442
+ SPECS.forEach(({ name, b, v, result, focus }) => {
443
+ (focus === true ? test.only : test)(name, () => {
444
+ expect(bounds.insert(b, v)).toEqual(result);
445
+ });
446
+ });
368
447
  });
369
- test("insert after overlap last", () => {
370
- const b: bounds.Crude[] = [[3, 7]];
371
- const v: bounds.Crude = [5, 9];
372
- const result = bounds.insert(b, v);
373
- expect(result).toEqual([
374
- { lower: 3, upper: 7 },
375
- { lower: 7, upper: 9 },
376
- ]);
448
+ describe("bigint", () => {
449
+ SPECS.forEach(({ name, b, v, result, focus }) => {
450
+ (focus === true ? test.only : test)(name, () => {
451
+ b = b.map(([l, u]) => [BigInt(l), BigInt(u)]);
452
+ v = [BigInt(v[0]), BigInt(v[1])];
453
+ result = result.map(({ lower, upper }) => ({
454
+ lower: BigInt(lower),
455
+ upper: BigInt(upper),
456
+ }));
457
+ expect(bounds.insert(b, v)).toEqual(result);
458
+ });
459
+ });
377
460
  });
378
461
  });
379
- describe("regressions", () => {
380
- it("should insert a value into a sorted array of bounds", () => {
381
- const b: bounds.Crude[] = [
382
- { lower: 0, upper: 47040 },
383
- { lower: 47040, upper: 47240 },
384
- { lower: 47240, upper: 47280 },
385
- { lower: 47280, upper: 47320 },
386
- { lower: 47320, upper: 47400 },
387
- ];
388
- const v: bounds.Crude = { lower: 47066, upper: 47066 + 354 };
389
- const result = bounds.insert(b, v);
390
- expect(result).toEqual([
391
- { lower: 0, upper: 47040 },
392
- { lower: 47040, upper: 47240 },
393
- { lower: 47240, upper: 47066 + 354 },
394
- ]);
395
- });
396
- it("should insert a value into a sorted array of bounds", () => {});
462
+ });
463
+ describe("linspace", () => {
464
+ it("should generate the correct array", () => {
465
+ const b = bounds.construct([1, 3]);
466
+ const result = bounds.linspace(b);
467
+ expect(result).toEqual([1, 2]);
468
+ });
469
+ });
470
+ describe("clamp", () => {
471
+ it("should clamp the provided target to the bounds", () => {
472
+ const b = bounds.construct([1, 3]);
473
+ expect(bounds.clamp(b, 0)).toEqual(1);
474
+ expect(bounds.clamp(b, 2)).toEqual(2);
475
+ expect(bounds.clamp(b, 4)).toEqual(2);
397
476
  });
398
477
  });
399
478
  });