Skip to content

Commit e203d81

Browse files
committed
Fall back to ResizeObserver contentRect for Safari
1 parent e1ef688 commit e203d81

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/components/ResizeListener.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,26 @@ class Evented implements ResizeListener {
6666

6767
private onResize_ = (entries: ResizeObserverEntry[]) => {
6868
for (const entry of entries) {
69+
this.callback_(Evented.getResizeObserverEntrySize(entry), entry.target);
70+
}
71+
};
72+
73+
private static getResizeObserverEntrySize(entry: ResizeObserverEntry): Vector2 {
74+
if (entry.borderBoxSize) {
75+
// Firefox implements borderBoxSize as an object instead of an array, so check for either
6976
const borderBoxSize = entry.borderBoxSize as unknown;
7077
const borderBox: ResizeObserverSize = Array.isArray(borderBoxSize)
7178
? borderBoxSize[0] as ResizeObserverSize
7279
: borderBoxSize as ResizeObserverSize;
73-
this.callback_({ x: borderBox.inlineSize, y: borderBox.blockSize }, entry.target);
80+
return { x: borderBox.inlineSize, y: borderBox.blockSize };
81+
} else if (entry.contentRect) {
82+
// Safari doesn't return borderBoxSize, so fall back to contentRect
83+
return { x: entry.contentRect.width, y: entry.contentRect.height };
7484
}
75-
};
85+
86+
console.error('failed to get size of ResizeObserverEntry');
87+
return { x: 0, y: 0 };
88+
}
7689

7790
constructor(callback: ResizeCallback) {
7891
this.callback_ = callback;

0 commit comments

Comments
 (0)