@derivesome/webtools 1.0.0
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/.package.json.~undo-tree~ +8 -0
- package/.tsconfig.cjs.json.~undo-tree~ +8 -0
- package/.tsconfig.json.~undo-tree~ +8 -0
- package/dist/cjs/element-size-ref.d.ts +15 -0
- package/dist/cjs/element-size-ref.d.ts.map +1 -0
- package/dist/cjs/element-size-ref.js +54 -0
- package/dist/cjs/element-size-ref.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/resize-observer-ref.d.ts +4 -0
- package/dist/cjs/resize-observer-ref.d.ts.map +1 -0
- package/dist/cjs/resize-observer-ref.js +20 -0
- package/dist/cjs/resize-observer-ref.js.map +1 -0
- package/dist/esm/element-size-ref.d.ts +15 -0
- package/dist/esm/element-size-ref.d.ts.map +1 -0
- package/dist/esm/element-size-ref.js +50 -0
- package/dist/esm/element-size-ref.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/resize-observer-ref.d.ts +4 -0
- package/dist/esm/resize-observer-ref.d.ts.map +1 -0
- package/dist/esm/resize-observer-ref.js +16 -0
- package/dist/esm/resize-observer-ref.js.map +1 -0
- package/package.json +46 -0
- package/package.json~ +42 -0
- package/src/.element-size-ref.ts.~undo-tree~ +118 -0
- package/src/.index.ts.~undo-tree~ +9 -0
- package/src/.resize-observer-ref.ts.~undo-tree~ +74 -0
- package/src/.resize-observer.ts.~undo-tree~ +42 -0
- package/src/element-size-ref.ts +74 -0
- package/src/element-size-ref.ts~ +65 -0
- package/src/index.ts +2 -0
- package/src/index.ts~ +1 -0
- package/src/resize-observer-ref.ts +21 -0
- package/src/resize-observer-ref.ts~ +19 -0
- package/src/resize-observer.ts~ +21 -0
- package/tsconfig.cjs.json +8 -0
- package/tsconfig.cjs.json~ +8 -0
- package/tsconfig.json +24 -0
- package/tsconfig.json~ +24 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ref, Reference, unref, type MaybeReference } from "@derivesome/core";
|
|
2
|
+
import {
|
|
3
|
+
createResizeObserverRef,
|
|
4
|
+
ResizeObserverRef,
|
|
5
|
+
} from "./resize-observer-ref";
|
|
6
|
+
|
|
7
|
+
export type ElementSize = { width: number; height: number };
|
|
8
|
+
|
|
9
|
+
export type CreateElementSizeRefOptions = ResizeObserverOptions & {
|
|
10
|
+
initialSize?: ElementSize;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type ElementSizeRef = {
|
|
14
|
+
size: Reference<ElementSize>;
|
|
15
|
+
observer: ResizeObserverRef;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const createElementSizeRef = (
|
|
19
|
+
element: MaybeReference<Element | null | undefined>,
|
|
20
|
+
options: CreateElementSizeRefOptions = {},
|
|
21
|
+
): ElementSizeRef => {
|
|
22
|
+
const { box = "content-box" } = options;
|
|
23
|
+
|
|
24
|
+
const initialElement = unref(element);
|
|
25
|
+
const initialRect = initialElement
|
|
26
|
+
? initialElement.getBoundingClientRect()
|
|
27
|
+
: null;
|
|
28
|
+
const size = ref<ElementSize>({
|
|
29
|
+
width: initialRect?.width || options.initialSize?.width || 0,
|
|
30
|
+
height: initialRect?.height || options.initialSize?.height || 0,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const obs = createResizeObserverRef(
|
|
34
|
+
element,
|
|
35
|
+
(entries) => {
|
|
36
|
+
const entry = entries[0];
|
|
37
|
+
if (!entry) return;
|
|
38
|
+
const el = unref(element);
|
|
39
|
+
if (!el) return;
|
|
40
|
+
const isSVG = el.namespaceURI?.includes("svg") ?? false;
|
|
41
|
+
if (isSVG) {
|
|
42
|
+
const rect = el.getBoundingClientRect();
|
|
43
|
+
size.set({ width: rect.width, height: rect.height });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const boxSize =
|
|
48
|
+
box === "border-box"
|
|
49
|
+
? entry.borderBoxSize
|
|
50
|
+
: box === "content-box"
|
|
51
|
+
? entry.contentBoxSize
|
|
52
|
+
: entry.devicePixelContentBoxSize;
|
|
53
|
+
|
|
54
|
+
if (boxSize && boxSize.length > 0) {
|
|
55
|
+
let width = 0;
|
|
56
|
+
let height = 0;
|
|
57
|
+
for (const bs of boxSize) {
|
|
58
|
+
width += bs.inlineSize;
|
|
59
|
+
height += bs.blockSize;
|
|
60
|
+
}
|
|
61
|
+
size.set({ width, height });
|
|
62
|
+
} else {
|
|
63
|
+
// fallback for browsers without boxSize support
|
|
64
|
+
size.set({
|
|
65
|
+
width: entry.contentRect.width,
|
|
66
|
+
height: entry.contentRect.height,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
options,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
return { size, observer: obs };
|
|
74
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ref, Reference, unref, type MaybeReference } from '@derivesome/core';
|
|
2
|
+
import { createResizeObserverRef, ResizeObserverRef } from './resize-observer-ref';
|
|
3
|
+
|
|
4
|
+
export type ElementSize = { width: number, height: number };
|
|
5
|
+
|
|
6
|
+
export type CreateElementSizeRefOptions = ResizeObserverOptions & {
|
|
7
|
+
initialSize?: ElementSize;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type ElementSizeRef = {
|
|
11
|
+
size: Reference<ElementSize>;
|
|
12
|
+
observer: ResizeObserverRef;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const createElementSizeRef = (
|
|
16
|
+
element: MaybeReference<Element | null | undefined>,
|
|
17
|
+
options: CreateElementSizeRefOptions = {}
|
|
18
|
+
): ElementSizeRef => {
|
|
19
|
+
const { box = "content-box" } = options;
|
|
20
|
+
|
|
21
|
+
const initialElement = unref(element);
|
|
22
|
+
const initialRect = initialElement ? initialElement.getBoundingClientRect() : null;
|
|
23
|
+
const size = ref<ElementSize>({
|
|
24
|
+
width: (initialRect?.width || options.initialSize?.width || 0),
|
|
25
|
+
height: (initialRect?.height || options.initialSize?.height || 0),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const obs = createResizeObserverRef(element, (entries) => {
|
|
29
|
+
const entry = entries[0];
|
|
30
|
+
if (!entry) return;
|
|
31
|
+
const el = unref(element);
|
|
32
|
+
if (!el) return;
|
|
33
|
+
const isSVG = el.namespaceURI?.includes("svg") ?? false;
|
|
34
|
+
if (isSVG) {
|
|
35
|
+
const rect = el.getBoundingClientRect();
|
|
36
|
+
size.set({ width: rect.width, height: rect.height });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const boxSize =
|
|
41
|
+
box === "border-box"
|
|
42
|
+
? entry.borderBoxSize
|
|
43
|
+
: box === "content-box"
|
|
44
|
+
? entry.contentBoxSize
|
|
45
|
+
: entry.devicePixelContentBoxSize;
|
|
46
|
+
|
|
47
|
+
if (boxSize && boxSize.length > 0) {
|
|
48
|
+
let width = 0;
|
|
49
|
+
let height = 0;
|
|
50
|
+
for (const bs of boxSize) {
|
|
51
|
+
width += bs.inlineSize;
|
|
52
|
+
height += bs.blockSize;
|
|
53
|
+
}
|
|
54
|
+
size.set({ width, height });
|
|
55
|
+
} else {
|
|
56
|
+
// fallback for browsers without boxSize support
|
|
57
|
+
size.set({
|
|
58
|
+
width: entry.contentRect.width,
|
|
59
|
+
height: entry.contentRect.height,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}, options);
|
|
63
|
+
|
|
64
|
+
return { size, observer: obs }
|
|
65
|
+
}
|
package/src/index.ts
ADDED
package/src/index.ts~
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './resize-observer-ref';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Derived, derived, unref, type MaybeReference } from '@derivesome/core';
|
|
2
|
+
|
|
3
|
+
export type ResizeObserverRef = Derived<ResizeObserver | null>;
|
|
4
|
+
|
|
5
|
+
export const createResizeObserverRef = (
|
|
6
|
+
element: MaybeReference<Element | null | undefined>,
|
|
7
|
+
callback: ResizeObserverCallback,
|
|
8
|
+
options: ResizeObserverOptions = {}
|
|
9
|
+
): ResizeObserverRef => {
|
|
10
|
+
const elref = derived(() => unref(element));
|
|
11
|
+
return derived<ResizeObserver | null>((prev) => {
|
|
12
|
+
if (prev) {
|
|
13
|
+
prev.disconnect();
|
|
14
|
+
}
|
|
15
|
+
const el = elref.get();
|
|
16
|
+
if (!el) return null;
|
|
17
|
+
const obs = new ResizeObserver(callback);
|
|
18
|
+
obs.observe(el, options);
|
|
19
|
+
return obs;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Derived, derived, unref, type MaybeReference } from '@derivesome/core';
|
|
2
|
+
|
|
3
|
+
export const createResizeObserverRef = (
|
|
4
|
+
element: MaybeReference<Element | null | undefined>,
|
|
5
|
+
callback: ResizeObserverCallback,
|
|
6
|
+
options: ResizeObserverOptions = {}
|
|
7
|
+
): Derived<ResizeObserver | null> => {
|
|
8
|
+
const elref = derived(() => unref(element));
|
|
9
|
+
return derived<ResizeObserver | null>((prev) => {
|
|
10
|
+
if (prev) {
|
|
11
|
+
prev.disconnect();
|
|
12
|
+
}
|
|
13
|
+
const el = elref.get();
|
|
14
|
+
if (!el) return null;
|
|
15
|
+
const obs = new ResizeObserver(callback);
|
|
16
|
+
obs.observe(el, options);
|
|
17
|
+
return obs;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { unref, type MaybeReference } from '@derivesome/core';
|
|
2
|
+
|
|
3
|
+
export type ElementSize = { width: number, height: number };
|
|
4
|
+
|
|
5
|
+
export type ResizeObserverBox =
|
|
6
|
+
| "border-box"
|
|
7
|
+
| "content-box"
|
|
8
|
+
| "device-pixel-content-box";
|
|
9
|
+
|
|
10
|
+
export interface CreateResizeObserverOptions {
|
|
11
|
+
box?: ResizeObserverBox;
|
|
12
|
+
initialSize?: ElementSize;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const createResizeObserver = (
|
|
16
|
+
element: MaybeReference<Element | null | undefined>,
|
|
17
|
+
options: CreateResizeObserverOptions = {}
|
|
18
|
+
) => {
|
|
19
|
+
|
|
20
|
+
const initialElement = unref(element);
|
|
21
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"rootDir": "./src",
|
|
4
|
+
"outDir": "./dist/esm",
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"lib": ["esnext", "dom", "dom.iterable", "ES2020"],
|
|
9
|
+
"types": ["node"],
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"noUncheckedIndexedAccess": true,
|
|
14
|
+
"exactOptionalPropertyTypes": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"esModuleInterop": true,
|
|
18
|
+
"noUncheckedSideEffectImports": true,
|
|
19
|
+
"moduleDetection": "force",
|
|
20
|
+
"skipLibCheck": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["./src/**/*.ts"],
|
|
23
|
+
"exclude": ["./src/**/*.test.ts"]
|
|
24
|
+
}
|
package/tsconfig.json~
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"rootDir": "./src",
|
|
4
|
+
"outDir": "./dist/esm",
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"lib": ["esnext", "dom", "dom.iterable", "ES2020"],
|
|
9
|
+
"types": ["node"],
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"noUncheckedIndexedAccess": true,
|
|
14
|
+
"exactOptionalPropertyTypes": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"esModuleInterop": true,
|
|
18
|
+
"noUncheckedSideEffectImports": true,
|
|
19
|
+
"moduleDetection": "force",
|
|
20
|
+
"skipLibCheck": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["./src/**/*.ts"],
|
|
23
|
+
"exclude": ["./src/**/*.test.ts"]
|
|
24
|
+
}
|