tool-shack 0.0.17 → 0.0.20

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.
@@ -4,4 +4,6 @@ export * from './isShareSupported.js';
4
4
  export * from './isTabFocused.js';
5
5
  export * from './isTouchSupported.js';
6
6
  export * from './preferColorScheme.js';
7
+ export * from './scrollToElement.js';
8
+ export * from './scrollToPosition.js';
7
9
  export * from './tabFocusListener.js';
@@ -4,5 +4,7 @@ export * from './isShareSupported.js';
4
4
  export * from './isTabFocused.js';
5
5
  export * from './isTouchSupported.js';
6
6
  export * from './preferColorScheme.js';
7
+ export * from './scrollToElement.js';
8
+ export * from './scrollToPosition.js';
7
9
  export * from './tabFocusListener.js';
8
10
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Scroll window to make HTMLElement visible
3
+ *
4
+ * @param element Element to scroll to
5
+ * @param offset Scroll offset from element, zero by default
6
+ * @param smoothScroll Enable smooth scroll if supported, true by default
7
+ * @returns void
8
+ */
9
+ export declare const scrollToElement: (element: HTMLElement, offset?: number, smoothScroll?: boolean) => void;
@@ -0,0 +1,14 @@
1
+ import { getElementOffset } from '../dom/getElementOffset.js';
2
+ import { scrollToPosition } from './scrollToPosition.js';
3
+ /**
4
+ * Scroll window to make HTMLElement visible
5
+ *
6
+ * @param element Element to scroll to
7
+ * @param offset Scroll offset from element, zero by default
8
+ * @param smoothScroll Enable smooth scroll if supported, true by default
9
+ * @returns void
10
+ */
11
+ export const scrollToElement = (element, offset = 0, smoothScroll = true) => {
12
+ scrollToPosition(0, getElementOffset(element).top - offset, smoothScroll);
13
+ };
14
+ //# sourceMappingURL=scrollToElement.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Scroll window or other scrollable element to given position
3
+ *
4
+ * @param x Horizontal position to scroll to
5
+ * @param y Vertical position to scroll to
6
+ * @param smoothScroll Enable smooth scroll if supported, true by default
7
+ * @param target Target to be scrolled, window by default
8
+ * @returns void
9
+ */
10
+ export declare const scrollToPosition: (x: number, y: number, smoothScroll?: boolean, target?: Window | HTMLElement) => void;
@@ -0,0 +1,23 @@
1
+ import { isScrollBehaviorSupported } from './isScrollBehaviorSupported.js';
2
+ /**
3
+ * Scroll window or other scrollable element to given position
4
+ *
5
+ * @param x Horizontal position to scroll to
6
+ * @param y Vertical position to scroll to
7
+ * @param smoothScroll Enable smooth scroll if supported, true by default
8
+ * @param target Target to be scrolled, window by default
9
+ * @returns void
10
+ */
11
+ export const scrollToPosition = (x, y, smoothScroll = true, target = window) => {
12
+ if (smoothScroll && isScrollBehaviorSupported()) {
13
+ target.scrollTo({
14
+ top: y,
15
+ left: x,
16
+ behavior: 'smooth',
17
+ });
18
+ }
19
+ else {
20
+ target.scrollTo(x, y);
21
+ }
22
+ };
23
+ //# sourceMappingURL=scrollToPosition.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Get element's offset relative to the whole page
3
+ *
4
+ * @param element HTMLElement for which should be calculated offset
5
+ * @returns Object with top and left offset value
6
+ */
7
+ export declare const getElementOffset: (element: HTMLElement) => {
8
+ top: number;
9
+ left: number;
10
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Get element's offset relative to the whole page
3
+ *
4
+ * @param element HTMLElement for which should be calculated offset
5
+ * @returns Object with top and left offset value
6
+ */
7
+ export const getElementOffset = (element) => {
8
+ const box = element.getBoundingClientRect();
9
+ return { top: box.top + window.pageYOffset, left: box.left + window.pageXOffset };
10
+ };
11
+ //# sourceMappingURL=getElementOffset.js.map
@@ -6,3 +6,4 @@ export * from './appendAfter.js';
6
6
  export * from './appendBefore.js';
7
7
  export * from './createElement.js';
8
8
  export * from './fireEvent.js';
9
+ export * from './getElementOffset.js';
package/dist/dom/index.js CHANGED
@@ -6,4 +6,5 @@ export * from './appendAfter.js';
6
6
  export * from './appendBefore.js';
7
7
  export * from './createElement.js';
8
8
  export * from './fireEvent.js';
9
+ export * from './getElementOffset.js';
9
10
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,48 +1,49 @@
1
- {
2
- "name": "tool-shack",
3
- "version": "0.0.17",
4
- "description": "Collection of usefull functions to ease work",
5
- "author": {
6
- "name": "David Myška",
7
- "url": "https://www.davidmyska.com/"
8
- },
9
- "license": "MIT",
10
- "bugs": {
11
- "url": "https://github.com/miskith/tool-shack/issues"
12
- },
13
- "homepage": "https://www.davidmyska.com/tool-shack/",
14
- "repository": {
15
- "type": "git",
16
- "url": "git+https://github.com/miskith/tool-shack.git"
17
- },
18
- "type": "module",
19
- "module": "dist/index.js",
20
- "main": "dist/index.js",
21
- "exports": {
22
- "./package.json": {
23
- "default": "./package.json"
24
- },
25
- ".": {
26
- "types": "./dist/index.d.ts",
27
- "default": "./dist/index.js"
28
- }
29
- },
30
- "files": [
31
- "dist/**/*.js",
32
- "dist/**/*.d.ts",
33
- "src/**/*.ts"
34
- ],
35
- "scripts": {
36
- "build": "rm -rf dist && tsc -b .",
37
- "format": "pretty-quick",
38
- "generate-docs": "rm -rf docs && typedoc --name \"Tool-Shack\" --readme README.md src/*/index.ts",
39
- "prepare": "husky install"
40
- },
41
- "devDependencies": {
42
- "husky": "^8.0.1",
43
- "prettier": "^2.7.1",
44
- "pretty-quick": "^3.1.3",
45
- "typedoc": "^0.23.11",
46
- "typescript": "^4.8.2"
47
- }
48
- }
1
+ {
2
+ "name": "tool-shack",
3
+ "version": "0.0.20",
4
+ "description": "Collection of usefull functions to ease work",
5
+ "author": {
6
+ "name": "David Myška",
7
+ "url": "https://www.davidmyska.com/"
8
+ },
9
+ "license": "MIT",
10
+ "bugs": {
11
+ "url": "https://github.com/miskith/tool-shack/issues"
12
+ },
13
+ "homepage": "https://www.davidmyska.com/tool-shack/",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/miskith/tool-shack.git"
17
+ },
18
+ "type": "module",
19
+ "module": "dist/index.js",
20
+ "main": "dist/index.js",
21
+ "exports": {
22
+ "./package.json": {
23
+ "default": "./package.json"
24
+ },
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.js"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist/**/*.js",
32
+ "dist/**/*.d.ts",
33
+ "src/**/*.ts"
34
+ ],
35
+ "sideEffects": false,
36
+ "scripts": {
37
+ "build": "rm -rf dist && tsc -b .",
38
+ "format": "pretty-quick",
39
+ "generate-docs": "rm -rf docs && typedoc --name \"Tool-Shack\" --readme README.md src/*/index.ts",
40
+ "prepare": "husky install"
41
+ },
42
+ "devDependencies": {
43
+ "husky": "^8.0.1",
44
+ "prettier": "^2.7.1",
45
+ "pretty-quick": "^3.1.3",
46
+ "typedoc": "^0.23.14",
47
+ "typescript": "^4.8.3"
48
+ }
49
+ }
@@ -4,4 +4,6 @@ export * from './isShareSupported.js';
4
4
  export * from './isTabFocused.js';
5
5
  export * from './isTouchSupported.js';
6
6
  export * from './preferColorScheme.js';
7
+ export * from './scrollToElement.js';
8
+ export * from './scrollToPosition.js';
7
9
  export * from './tabFocusListener.js';
@@ -0,0 +1,18 @@
1
+ import { getElementOffset } from '../dom/getElementOffset.js';
2
+ import { scrollToPosition } from './scrollToPosition.js';
3
+
4
+ /**
5
+ * Scroll window to make HTMLElement visible
6
+ *
7
+ * @param element Element to scroll to
8
+ * @param offset Scroll offset from element, zero by default
9
+ * @param smoothScroll Enable smooth scroll if supported, true by default
10
+ * @returns void
11
+ */
12
+ export const scrollToElement = (
13
+ element: HTMLElement,
14
+ offset: number = 0,
15
+ smoothScroll: boolean = true,
16
+ ): void => {
17
+ scrollToPosition(0, getElementOffset(element).top - offset, smoothScroll);
18
+ };
@@ -0,0 +1,27 @@
1
+ import { isScrollBehaviorSupported } from './isScrollBehaviorSupported.js';
2
+
3
+ /**
4
+ * Scroll window or other scrollable element to given position
5
+ *
6
+ * @param x Horizontal position to scroll to
7
+ * @param y Vertical position to scroll to
8
+ * @param smoothScroll Enable smooth scroll if supported, true by default
9
+ * @param target Target to be scrolled, window by default
10
+ * @returns void
11
+ */
12
+ export const scrollToPosition = (
13
+ x: number,
14
+ y: number,
15
+ smoothScroll: boolean = true,
16
+ target: Window | HTMLElement = window,
17
+ ): void => {
18
+ if (smoothScroll && isScrollBehaviorSupported()) {
19
+ target.scrollTo({
20
+ top: y,
21
+ left: x,
22
+ behavior: 'smooth',
23
+ });
24
+ } else {
25
+ target.scrollTo(x, y);
26
+ }
27
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Get element's offset relative to the whole page
3
+ *
4
+ * @param element HTMLElement for which should be calculated offset
5
+ * @returns Object with top and left offset value
6
+ */
7
+ export const getElementOffset = (element: HTMLElement): { top: number; left: number } => {
8
+ const box: DOMRect = element.getBoundingClientRect();
9
+
10
+ return { top: box.top + window.pageYOffset, left: box.left + window.pageXOffset };
11
+ };
package/src/dom/index.ts CHANGED
@@ -7,3 +7,4 @@ export * from './appendAfter.js';
7
7
  export * from './appendBefore.js';
8
8
  export * from './createElement.js';
9
9
  export * from './fireEvent.js';
10
+ export * from './getElementOffset.js';