center-center 0.0.16 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/index.html CHANGED
@@ -14,7 +14,6 @@
14
14
  import debug from 'debug'
15
15
 
16
16
  import {
17
- getElementRect,
18
17
  getRects,
19
18
  calculateLeft,
20
19
  calculateTop
package/index.mjs CHANGED
@@ -4,6 +4,51 @@
4
4
  * @typedef {import('.').CenterCenterRects} CenterCenterRects
5
5
  */
6
6
 
7
+ const elementMap = new WeakMap()
8
+
9
+ export function getOffsetParentElement (element) {
10
+ let parentElement = element.parentElement
11
+ while (!Reflect.has(parentElement, 'offsetLeft') && !Reflect.has(parentElement, 'offsetTop')) {
12
+ parentElement = element.parentElement
13
+ }
14
+
15
+ return parentElement
16
+ }
17
+
18
+ export function getOffsetLeft (element) {
19
+ if (Reflect.has(element, 'offsetLeft')) {
20
+ return Reflect.get(element, 'offsetLeft')
21
+ }
22
+
23
+ const {
24
+ left
25
+ } = element.getBoundingClientRect()
26
+
27
+ if (!elementMap.has(element)) elementMap.set(element, getOffsetParentElement(element))
28
+ const {
29
+ offsetLeft = 0
30
+ } = elementMap.get(element)
31
+
32
+ return offsetLeft + (offsetLeft - left)
33
+ }
34
+
35
+ export function getOffsetTop (element) {
36
+ if (Reflect.has(element, 'offsetTop')) {
37
+ return Reflect.get(element, 'offsetTop')
38
+ }
39
+
40
+ const {
41
+ top
42
+ } = element.getBoundingClientRect()
43
+
44
+ if (!elementMap.has(element)) elementMap.set(element, getOffsetParentElement(element))
45
+ const {
46
+ offsetTop = 0
47
+ } = elementMap.get(element)
48
+
49
+ return offsetTop + (offsetTop - top)
50
+ }
51
+
7
52
  /**
8
53
  * Gets the document `scrollingElement` (or a valid alternative)
9
54
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "center-center",
3
- "version": "0.0.16",
3
+ "version": "0.0.17",
4
4
  "description": "Position an element at the center center of a container",
5
5
  "main": "./index.mjs",
6
6
  "type": "module",
@@ -34,7 +34,7 @@
34
34
  "@babel/core": "^7.23.9",
35
35
  "@babel/eslint-parser": "^7.23.10",
36
36
  "@babel/preset-env": "^7.23.9",
37
- "@sequencemedia/hooks": "^1.0.476",
37
+ "@sequencemedia/hooks": "^1.0.477",
38
38
  "@typescript-eslint/eslint-plugin": "^6.20.0",
39
39
  "@typescript-eslint/parser": "^6.20.0",
40
40
  "chai": "^5.0.3",
@@ -43,7 +43,7 @@
43
43
  "eslint": "^8.56.0",
44
44
  "eslint-config-standard": "^17.1.0",
45
45
  "eslint-config-standard-with-typescript": "^43.0.1",
46
- "husky": "^9.0.7",
46
+ "husky": "^9.0.10",
47
47
  "mocha": "^10.2.0",
48
48
  "npm-run-all": "^4.1.5",
49
49
  "typescript": "^5.3.3"