@ -11,15 +11,15 @@ import { InvalidFractionalIndexError } from "./errors";
@@ -11,15 +11,15 @@ import { InvalidFractionalIndexError } from "./errors";
* Envisioned relation between array order and fractional indices :
*
* 1 ) Array ( or array - like ordered data structure ) should be used as a cache of elements order , hiding the internal fractional indices implementation .
* - it 's undesirable to to perform reorder for each related operation, thefe ore it' s necessary to cache the order defined by fractional indices into an ordered data structure
* - it 's undesirable to perform reorder for each related operation, there fore it' s necessary to cache the order defined by fractional indices into an ordered data structure
* - it ' s easy enough to define the order of the elements from the outside ( boundaries ) , without worrying about the underlying structure of fractional indices ( especially for the host apps )
* - it ' s necessary to always keep the array support for backwards compatibility ( restore ) - old scenes , old libraries , supporting multiple excalidraw versions etc .
* - it ' s necessary to always keep the fractional indices in sync with the array order
* - elements with invalid indices should be detected and synced , without altering the already valid indices
*
* 2 ) Fractional indices should be used to reorder the elements , whenever the cached order is expected to be invalidated .
* - as the fractional indices are encoded as part of the elements , it opens up possibilties for incremental - like APIs
* - re - order based on fractional indices should be part of ( multiplayer ) operations such as reconcill it ation & undo / redo
* - as the fractional indices are encoded as part of the elements , it opens up possibili ties for incremental - like APIs
* - re - order based on fractional indices should be part of ( multiplayer ) operations such as reconciliation & undo / redo
* - technically all the z - index actions could perform also re - order based on fractional indices , but in current state it would not bring much benefits ,
* as it ' s faster & more efficient to perform re - order based on array manipulation and later synchronisation of moved indices with the array order
* /