-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrectpackr.ts
More file actions
52 lines (44 loc) · 1.27 KB
/
rectpackr.ts
File metadata and controls
52 lines (44 loc) · 1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { BestFitStripPack } from 'best-fit-strip-pack';
import { IRectpackr } from './types';
import {
onChildResize,
onChildrenContainerMutation,
onContainerResize,
resetStyle,
startObserving,
stopObserving,
} from './util';
export function create<R extends IRectpackr>(
container: R['container'],
childrenContainer: R['childrenContainer'],
config: R['config']
) {
const childrenContainerMutation = new MutationObserver(() =>
onChildrenContainerMutation(instance)
);
const childrenResize = new ResizeObserver((entries) =>
onChildResize(instance, entries)
);
const containerResize = new ResizeObserver(() => onContainerResize(instance));
const stripPack = new BestFitStripPack(
Math.max(1, parseFloat(getComputedStyle(container).width))
);
const instance = {
config,
container,
children: [] as R['children'],
childrenContainer,
isPendingStartObservingChildren: false,
loadingImages: new Map(),
observers: { childrenContainerMutation, childrenResize, containerResize },
stripPack,
} as R;
startObserving(instance);
return instance;
}
export function clear<R extends IRectpackr>(instance: R) {
stopObserving(instance);
resetStyle(instance);
instance.children.length = 0;
instance.stripPack.reset();
}