Socket
Socket
Sign inDemoInstall

@radix-ui/rect

Package Overview
Dependencies
Maintainers
6
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@radix-ui/rect - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0-rc.1

8

dist/index.d.ts

@@ -1,2 +0,2 @@

export type Measurable = {
declare type Measurable = {
getBoundingClientRect(): ClientRect;

@@ -9,3 +9,3 @@ };

*/
export function observeElementRect(
declare function observeElementRect(
/** The element whose rect to observe */

@@ -15,4 +15,4 @@ elementToObserve: Measurable,

callback: CallbackFn): () => void;
type CallbackFn = (rect: ClientRect) => void;
declare type CallbackFn = (rect: ClientRect) => void;
//# sourceMappingURL=index.d.ts.map
export { type Measurable, observeElementRect };

@@ -1,70 +0,50 @@

function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
$parcel$export(module.exports, "observeElementRect", () => $f98399f7d3345a24$export$5a50ff2cde8c3802);
/**
* Observes an element's rectangle on screen (getBoundingClientRect)
* This is useful to track elements on the screen and attach other elements
* that might be in different layers, etc.
*/ function $f98399f7d3345a24$export$5a50ff2cde8c3802(/** The element whose rect to observe */ elementToObserve, /** The callback which will be called when the rect changes */ callback) {
const observedData1 = $f98399f7d3345a24$var$observedElements.get(elementToObserve);
if (observedData1 === undefined) {
// add the element to the map of observed elements with its first callback
// because this is the first time this element is observed
$f98399f7d3345a24$var$observedElements.set(elementToObserve, {
rect: {},
callbacks: [
callback
]
});
if ($f98399f7d3345a24$var$observedElements.size === 1) // start the internal loop once at least 1 element is observed
$f98399f7d3345a24$var$rafId = requestAnimationFrame($f98399f7d3345a24$var$runLoop);
"use strict";
(() => {
// packages/core/rect/src/observeElementRect.ts
function observeElementRect(elementToObserve, callback) {
const observedData = observedElements.get(elementToObserve);
if (observedData === void 0) {
observedElements.set(elementToObserve, { rect: {}, callbacks: [callback] });
if (observedElements.size === 1) {
rafId = requestAnimationFrame(runLoop);
}
} else {
// only add a callback for this element as it's already observed
observedData1.callbacks.push(callback);
callback(elementToObserve.getBoundingClientRect());
observedData.callbacks.push(callback);
callback(elementToObserve.getBoundingClientRect());
}
return ()=>{
const observedData = $f98399f7d3345a24$var$observedElements.get(elementToObserve);
if (observedData === undefined) return; // start by removing the callback
const index = observedData.callbacks.indexOf(callback);
if (index > -1) observedData.callbacks.splice(index, 1);
if (observedData.callbacks.length === 0) {
// stop observing this element because there are no
// callbacks registered for it anymore
$f98399f7d3345a24$var$observedElements.delete(elementToObserve);
if ($f98399f7d3345a24$var$observedElements.size === 0) // stop the internal loop once no elements are observed anymore
cancelAnimationFrame($f98399f7d3345a24$var$rafId);
return () => {
const observedData2 = observedElements.get(elementToObserve);
if (observedData2 === void 0) return;
const index = observedData2.callbacks.indexOf(callback);
if (index > -1) {
observedData2.callbacks.splice(index, 1);
}
if (observedData2.callbacks.length === 0) {
observedElements.delete(elementToObserve);
if (observedElements.size === 0) {
cancelAnimationFrame(rafId);
}
}
};
} // ========================================================================
// module internals
let $f98399f7d3345a24$var$rafId;
const $f98399f7d3345a24$var$observedElements = new Map();
function $f98399f7d3345a24$var$runLoop() {
const changedRectsData = []; // process all DOM reads first (getBoundingClientRect)
$f98399f7d3345a24$var$observedElements.forEach((data, element)=>{
const newRect = element.getBoundingClientRect(); // gather all the data for elements whose rects have changed
if (!$f98399f7d3345a24$var$rectEquals(data.rect, newRect)) {
data.rect = newRect;
changedRectsData.push(data);
}
}); // group DOM writes here after the DOM reads (getBoundingClientRect)
// as DOM writes will most likely happen with the callbacks
changedRectsData.forEach((data)=>{
data.callbacks.forEach((callback)=>callback(data.rect)
);
}
var rafId;
var observedElements = /* @__PURE__ */ new Map();
function runLoop() {
const changedRectsData = [];
observedElements.forEach((data, element) => {
const newRect = element.getBoundingClientRect();
if (!rectEquals(data.rect, newRect)) {
data.rect = newRect;
changedRectsData.push(data);
}
});
$f98399f7d3345a24$var$rafId = requestAnimationFrame($f98399f7d3345a24$var$runLoop);
} // ========================================================================
/**
* Returns whether 2 rects are equal in values
*/ function $f98399f7d3345a24$var$rectEquals(rect1, rect2) {
changedRectsData.forEach((data) => {
data.callbacks.forEach((callback) => callback(data.rect));
});
rafId = requestAnimationFrame(runLoop);
}
function rectEquals(rect1, rect2) {
return rect1.width === rect2.width && rect1.height === rect2.height && rect1.top === rect2.top && rect1.right === rect2.right && rect1.bottom === rect2.bottom && rect1.left === rect2.left;
}
}
})();
//# sourceMappingURL=index.js.map
{
"name": "@radix-ui/rect",
"version": "1.0.1",
"version": "1.1.0-rc.1",
"license": "MIT",

@@ -38,5 +38,3 @@ "exports": {

},
"dependencies": {
"@babel/runtime": "^7.13.10"
}
"stableVersion": "1.0.1"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc