Skip to content

Commit daee34d

Browse files
authored
chore: fix rendering (#6)
1 parent ec0cd88 commit daee34d

File tree

4 files changed

+19
-10
lines changed

4 files changed

+19
-10
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rectpackr-layout",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "A web component that creates layouts by packing HTML elements as rectangles using a best-fit 2D strip-packing algorithm. Automatically measures dimensions and handles mixed content.",
55
"keywords": [
66
"best-fit",
@@ -71,12 +71,12 @@
7171
"@rollup/plugin-typescript": "^12.1.4",
7272
"@tsconfig/node22": "^22.0.2",
7373
"@types/jest": "^30.0.0",
74-
"@types/node": "^24.7.0",
74+
"@types/node": "^24.7.1",
7575
"jest": "^30.2.0",
7676
"jest-environment-jsdom": "^30.2.0",
7777
"rollup": "^4.52.4",
7878
"rollup-plugin-dts": "^6.2.3",
79-
"ts-jest": "^29.4.4",
79+
"ts-jest": "^29.4.5",
8080
"tslib": "^2.8.1",
8181
"typescript": "^5.9.3"
8282
},

src/core/rectpackr.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export function create<R extends IRectpackr>(
3333
container,
3434
children: [] as R['children'],
3535
childrenContainer,
36-
isPendingStartObservingChildren: false,
36+
isPending: { render: false, restartObservingChildren: false },
3737
loadingImages: new Map(),
3838
observers: { childrenContainerMutation, childrenResize, containerResize },
3939
stripPack,

src/core/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ export interface IRectpackr {
1717
width: number;
1818
}[];
1919
childrenContainer: HTMLElement;
20-
isPendingStartObservingChildren: boolean;
21-
loadingImages: Map<HTMLElement, (this: HTMLImageElement) => void>;
20+
isPending: { render: boolean; restartObservingChildren: boolean };
21+
loadingImages: Map<HTMLImageElement, (this: HTMLImageElement) => void>;
2222
observers: {
2323
childrenContainerMutation: MutationObserver;
2424
childrenResize: ResizeObserver;

src/core/util.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,28 @@ const isValidChildInstance = (el: Element): el is IRectpackrChildElement =>
99
el instanceof HTMLElement || el instanceof SVGElement;
1010

1111
function render(instance: IRectpackr) {
12-
updateStyle(instance, updateStripPack(instance));
12+
if (instance.isPending.render) {
13+
return;
14+
}
15+
16+
instance.isPending.render = true;
17+
18+
requestAnimationFrame(() => {
19+
instance.isPending.render = false;
20+
updateStyle(instance, updateStripPack(instance));
21+
});
1322
}
1423

1524
function restartObservingChildren(instance: IRectpackr) {
16-
if (instance.isPendingStartObservingChildren) {
25+
if (instance.isPending.restartObservingChildren) {
1726
return;
1827
}
1928

20-
instance.isPendingStartObservingChildren = true;
29+
instance.isPending.restartObservingChildren = true;
2130
stopObservingChildren(instance);
2231

2332
requestAnimationFrame(() => {
24-
instance.isPendingStartObservingChildren = false;
33+
instance.isPending.restartObservingChildren = false;
2534
startObservingChildren(instance);
2635
});
2736
}

0 commit comments

Comments
 (0)