bippy 0.2.24 → 0.3.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/dist/{chunk-N23WFCSF.js → chunk-2R5SJTFQ.js} +1 -1
- package/dist/{chunk-347RWTP3.js → chunk-NK43KTPL.js} +30 -2
- package/dist/{chunk-HQYIPSLJ.cjs → chunk-POWCTW3F.cjs} +3 -3
- package/dist/{chunk-GVWERSAB.cjs → chunk-R357CEJU.cjs} +31 -1
- package/dist/core.cjs +67 -67
- package/dist/core.d.cts +5 -70
- package/dist/core.d.ts +5 -70
- package/dist/core.js +1 -1
- package/dist/experiments/inspect.cjs +16 -14
- package/dist/experiments/inspect.js +4 -2
- package/dist/experiments/shrinkwrap.cjs +374 -0
- package/dist/experiments/shrinkwrap.d.cts +10 -0
- package/dist/experiments/shrinkwrap.d.ts +10 -0
- package/dist/experiments/shrinkwrap.js +369 -0
- package/dist/index.cjs +68 -68
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.global.js +1 -1
- package/dist/index.js +2 -2
- package/dist/shrinkwrap.global.js +9 -0
- package/dist/source.cjs +2231 -0
- package/dist/source.d.cts +11 -0
- package/dist/source.d.ts +11 -0
- package/dist/source.global.js +9 -0
- package/dist/source.js +2229 -0
- package/dist/types-bP3PNEQt.d.cts +70 -0
- package/dist/types-bP3PNEQt.d.ts +70 -0
- package/package.json +9 -7
- package/dist/sw.cjs +0 -56
- package/dist/sw.js +0 -54
package/dist/core.d.ts
CHANGED
|
@@ -1,74 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { R as ReactDevToolsGlobalHook, F as Fiber, C as ContextDependency, M as MemoizedState, a as ReactRenderer } from './types-bP3PNEQt.js';
|
|
3
|
+
export { D as Dependencies, E as Effect, P as Props } from './types-bP3PNEQt.js';
|
|
4
|
+
import { FiberRoot } from 'react-reconciler';
|
|
3
5
|
export { BundleType, ComponentSelector, DevToolsConfig, FiberRoot, Flags, HasPseudoClassSelector, HookType, HostConfig, LanePriority, Lanes, MutableSource, OpaqueHandle, OpaqueRoot, React$AbstractComponent, ReactConsumer, ReactContext, ReactPortal, ReactProvider, ReactProviderType, RefObject, RoleSelector, RootTag, Selector, Source, SuspenseHydrationCallbacks, TestNameSelector, TextSelector, Thenable, TransitionTracingCallbacks, TypeOfMode, WorkTag } from 'react-reconciler';
|
|
4
6
|
|
|
5
|
-
interface ReactDevToolsGlobalHook {
|
|
6
|
-
checkDCE: (fn: unknown) => void;
|
|
7
|
-
supportsFiber: boolean;
|
|
8
|
-
supportsFlight: boolean;
|
|
9
|
-
renderers: Map<number, ReactRenderer>;
|
|
10
|
-
hasUnsupportedRendererAttached: boolean;
|
|
11
|
-
onCommitFiberRoot: (rendererID: number, root: FiberRoot, priority: void | number) => void;
|
|
12
|
-
onCommitFiberUnmount: (rendererID: number, fiber: Fiber) => void;
|
|
13
|
-
onPostCommitFiberRoot: (rendererID: number, root: FiberRoot) => void;
|
|
14
|
-
inject: (renderer: ReactRenderer) => number;
|
|
15
|
-
_instrumentationSource?: string;
|
|
16
|
-
_instrumentationIsActive?: boolean;
|
|
17
|
-
_sw?: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Represents a react-internal Fiber node.
|
|
21
|
-
*/
|
|
22
|
-
type Fiber<T = any> = Omit<Fiber$1, 'stateNode' | 'dependencies' | 'child' | 'sibling' | 'return' | 'alternate' | 'memoizedProps' | 'pendingProps' | 'memoizedState' | 'updateQueue'> & {
|
|
23
|
-
stateNode: T;
|
|
24
|
-
dependencies: Dependencies | null;
|
|
25
|
-
child: Fiber | null;
|
|
26
|
-
sibling: Fiber | null;
|
|
27
|
-
return: Fiber | null;
|
|
28
|
-
alternate: Fiber | null;
|
|
29
|
-
memoizedProps: Props;
|
|
30
|
-
pendingProps: Props;
|
|
31
|
-
memoizedState: MemoizedState;
|
|
32
|
-
updateQueue: {
|
|
33
|
-
lastEffect: Effect | null;
|
|
34
|
-
[key: string]: unknown;
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
interface ReactRenderer {
|
|
38
|
-
version: string;
|
|
39
|
-
bundleType: 0 | 1;
|
|
40
|
-
findFiberByHostInstance?: (hostInstance: unknown) => Fiber | null;
|
|
41
|
-
}
|
|
42
|
-
interface ContextDependency<T> {
|
|
43
|
-
context: ReactContext<T>;
|
|
44
|
-
memoizedValue: T;
|
|
45
|
-
observedBits: number;
|
|
46
|
-
next: ContextDependency<unknown> | null;
|
|
47
|
-
}
|
|
48
|
-
interface Dependencies {
|
|
49
|
-
lanes: Lanes;
|
|
50
|
-
firstContext: ContextDependency<unknown> | null;
|
|
51
|
-
}
|
|
52
|
-
interface Effect {
|
|
53
|
-
next: Effect | null;
|
|
54
|
-
create: (...args: unknown[]) => unknown;
|
|
55
|
-
destroy: ((...args: unknown[]) => unknown) | null;
|
|
56
|
-
deps: unknown[] | null;
|
|
57
|
-
tag: number;
|
|
58
|
-
[key: string]: unknown;
|
|
59
|
-
}
|
|
60
|
-
interface MemoizedState {
|
|
61
|
-
memoizedState: unknown;
|
|
62
|
-
next: MemoizedState | null;
|
|
63
|
-
[key: string]: unknown;
|
|
64
|
-
}
|
|
65
|
-
interface Props {
|
|
66
|
-
[key: string]: unknown;
|
|
67
|
-
}
|
|
68
|
-
declare global {
|
|
69
|
-
var __REACT_DEVTOOLS_GLOBAL_HOOK__: ReactDevToolsGlobalHook | undefined;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
7
|
declare const INSTALL_HOOK_SCRIPT_STRING = "(()=>{try{var t=()=>{};const n=new Map;let o=0;globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__={checkDCE:t,supportsFiber:!0,supportsFlight:!0,hasUnsupportedRendererAttached:!1,renderers:n,onCommitFiberRoot:t,onCommitFiberUnmount:t,onPostCommitFiberRoot:t,inject(t){var e=++o;return n.set(e,t),globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__._instrumentationIsActive=!0,e},_instrumentationIsActive:!1,_script:!0}}catch{}})()";
|
|
73
8
|
|
|
74
9
|
declare const version: string | undefined;
|
|
@@ -198,7 +133,7 @@ declare const hasMemoCache: (fiber: Fiber) => boolean;
|
|
|
198
133
|
*/
|
|
199
134
|
declare const getType: (type: unknown) => React.ComponentType<unknown> | null;
|
|
200
135
|
/**
|
|
201
|
-
* Returns the display name of the {@link Fiber}.
|
|
136
|
+
* Returns the display name of the {@link Fiber} type.
|
|
202
137
|
*/
|
|
203
138
|
declare const getDisplayName: (type: unknown) => string | null;
|
|
204
139
|
/**
|
|
@@ -272,4 +207,4 @@ declare const secure: (options: InstrumentationOptions, secureOptions?: {
|
|
|
272
207
|
*/
|
|
273
208
|
declare const onCommitFiberRoot: (handler: (root: FiberRoot) => void) => ReactDevToolsGlobalHook;
|
|
274
209
|
|
|
275
|
-
export { BIPPY_INSTRUMENTATION_STRING, CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag,
|
|
210
|
+
export { BIPPY_INSTRUMENTATION_STRING, CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, ContextDependency, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, Fiber, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, INSTALL_ERROR, INSTALL_HOOK_SCRIPT_STRING, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, MemoizedState, OffscreenComponentTag, ReactDevToolsGlobalHook, ReactRenderer, type RenderHandler, type RenderPhase, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, hasRDTHook, installRDTHook, instrument, isClientEnvironment, isCompositeFiber, isHostFiber, isInstrumentationActive, isReactRefresh, isRealReactDevtools, isValidElement, isValidFiber, mountFiberRecursively, onCommitFiberRoot, patchRDTHook, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseRenderedFibers, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version };
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { BIPPY_INSTRUMENTATION_STRING, CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, INSTALL_ERROR, INSTALL_HOOK_SCRIPT_STRING, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, hasRDTHook, installRDTHook, instrument, isClientEnvironment, isCompositeFiber, isHostFiber, isInstrumentationActive, isReactRefresh, isRealReactDevtools, isValidElement, isValidFiber, mountFiberRecursively, onCommitFiberRoot, patchRDTHook, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseRenderedFibers, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version } from './chunk-
|
|
1
|
+
export { BIPPY_INSTRUMENTATION_STRING, CONCURRENT_MODE_NUMBER, CONCURRENT_MODE_SYMBOL_STRING, ClassComponentTag, ContextConsumerTag, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, ELEMENT_TYPE_SYMBOL_STRING, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, INSTALL_ERROR, INSTALL_HOOK_SCRIPT_STRING, LegacyHiddenComponentTag, MemoComponentTag, OffscreenComponentTag, SimpleMemoComponentTag, SuspenseComponentTag, TRANSITIONAL_ELEMENT_TYPE_SYMBOL_STRING, createFiberVisitor, detectReactBuildType, didFiberCommit, didFiberRender, fiberIdMap, getDisplayName, getFiberFromHostInstance, getFiberId, getFiberStack, getMutatedHostFibers, getNearestHostFiber, getNearestHostFibers, getRDTHook, getTimings, getType, hasMemoCache, hasRDTHook, installRDTHook, instrument, isClientEnvironment, isCompositeFiber, isHostFiber, isInstrumentationActive, isReactRefresh, isRealReactDevtools, isValidElement, isValidFiber, mountFiberRecursively, onCommitFiberRoot, patchRDTHook, secure, setFiberId, shouldFilterFiber, traverseContexts, traverseFiber, traverseProps, traverseRenderedFibers, traverseState, unmountFiber, unmountFiberChildrenRecursively, updateFiberRecursively, version } from './chunk-NK43KTPL.js';
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
require('../chunk-
|
|
6
|
-
var
|
|
5
|
+
require('../chunk-POWCTW3F.cjs');
|
|
6
|
+
var chunkR357CEJU_cjs = require('../chunk-R357CEJU.cjs');
|
|
7
7
|
var React17 = require('react');
|
|
8
8
|
var ReactDOM = require('react-dom');
|
|
9
9
|
|
|
@@ -1204,6 +1204,8 @@ var Inspector = ({ table = false, data, ...rest }) => {
|
|
|
1204
1204
|
...rest
|
|
1205
1205
|
});
|
|
1206
1206
|
};
|
|
1207
|
+
|
|
1208
|
+
// src/experiments/inspect.tsx
|
|
1207
1209
|
var FIBER_PROP_EXPLANATIONS = {
|
|
1208
1210
|
tag: "Numeric type identifier for this fiber (e.g. 1=FunctionComponent, 5=HostComponent)",
|
|
1209
1211
|
elementType: "The original function/class/element type",
|
|
@@ -1362,7 +1364,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1362
1364
|
const [fiberHistory, setFiberHistory] = React17.useState([]);
|
|
1363
1365
|
const getFiberForDisplay = React17.useCallback(() => {
|
|
1364
1366
|
if (selectedFiber) return selectedFiber;
|
|
1365
|
-
const fiber2 =
|
|
1367
|
+
const fiber2 = chunkR357CEJU_cjs.getFiberFromHostInstance(element);
|
|
1366
1368
|
return fiber2;
|
|
1367
1369
|
}, [selectedFiber, element]);
|
|
1368
1370
|
const handlePropertyHover = (_e, propName) => {
|
|
@@ -1409,15 +1411,15 @@ var RawInspector = React17__default.default.memo(
|
|
|
1409
1411
|
React17.useEffect(() => {
|
|
1410
1412
|
const handleMouseMove = (event) => {
|
|
1411
1413
|
if (isDialogMode) return;
|
|
1412
|
-
const isActive2 =
|
|
1414
|
+
const isActive2 = chunkR357CEJU_cjs.isInstrumentationActive() || chunkR357CEJU_cjs.hasRDTHook();
|
|
1413
1415
|
if (!isActive2) {
|
|
1414
1416
|
setIsActive(false);
|
|
1415
1417
|
return;
|
|
1416
1418
|
}
|
|
1417
1419
|
if (!dangerouslyRunInProduction) {
|
|
1418
|
-
const rdtHook =
|
|
1420
|
+
const rdtHook = chunkR357CEJU_cjs.getRDTHook();
|
|
1419
1421
|
for (const renderer of rdtHook.renderers.values()) {
|
|
1420
|
-
const buildType =
|
|
1422
|
+
const buildType = chunkR357CEJU_cjs.detectReactBuildType(renderer);
|
|
1421
1423
|
if (buildType === "production") {
|
|
1422
1424
|
setIsActive(false);
|
|
1423
1425
|
return;
|
|
@@ -1478,7 +1480,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1478
1480
|
}, [rect]);
|
|
1479
1481
|
React17.useEffect(() => {
|
|
1480
1482
|
if (selectedFiber) {
|
|
1481
|
-
const element2 =
|
|
1483
|
+
const element2 = chunkR357CEJU_cjs.getNearestHostFiber(selectedFiber)?.stateNode;
|
|
1482
1484
|
if (element2) {
|
|
1483
1485
|
setElement(element2);
|
|
1484
1486
|
setRect(element2.getBoundingClientRect());
|
|
@@ -1496,7 +1498,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1496
1498
|
const fiber = getFiberForDisplay();
|
|
1497
1499
|
if (!fiber) return null;
|
|
1498
1500
|
let foundInspect = false;
|
|
1499
|
-
|
|
1501
|
+
chunkR357CEJU_cjs.traverseFiber(
|
|
1500
1502
|
fiber,
|
|
1501
1503
|
(innerFiber) => {
|
|
1502
1504
|
if (innerFiber.type === Inspector2) {
|
|
@@ -1531,7 +1533,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1531
1533
|
backgroundColor: "rgba(0, 0, 0, 0.7)",
|
|
1532
1534
|
zIndex: 999
|
|
1533
1535
|
} : {};
|
|
1534
|
-
const fiberStack = fiber ?
|
|
1536
|
+
const fiberStack = fiber ? chunkR357CEJU_cjs.getFiberStack(fiber) : [];
|
|
1535
1537
|
return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, null, isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
|
|
1536
1538
|
"div",
|
|
1537
1539
|
{
|
|
@@ -1592,7 +1594,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1592
1594
|
margin: 0
|
|
1593
1595
|
}
|
|
1594
1596
|
},
|
|
1595
|
-
`<${typeof fiber.type === "string" ? fiber.type :
|
|
1597
|
+
`<${typeof fiber.type === "string" ? fiber.type : chunkR357CEJU_cjs.getDisplayName(fiber.type) || "unknown"}>`,
|
|
1596
1598
|
!isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
|
|
1597
1599
|
"span",
|
|
1598
1600
|
{
|
|
@@ -1621,9 +1623,9 @@ var RawInspector = React17__default.default.memo(
|
|
|
1621
1623
|
}
|
|
1622
1624
|
},
|
|
1623
1625
|
fiberStack.reverse().map((f, i, arr) => {
|
|
1624
|
-
const name = typeof f.type === "string" ? f.type :
|
|
1626
|
+
const name = typeof f.type === "string" ? f.type : chunkR357CEJU_cjs.getDisplayName(f.type) || "unknown";
|
|
1625
1627
|
if (!name) return null;
|
|
1626
|
-
return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, { key:
|
|
1628
|
+
return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, { key: chunkR357CEJU_cjs.getFiberId(f) }, /* @__PURE__ */ React17__default.default.createElement(
|
|
1627
1629
|
BreadcrumbButton,
|
|
1628
1630
|
{
|
|
1629
1631
|
name,
|
|
@@ -1632,7 +1634,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1632
1634
|
setFiberHistory((prev) => [...prev, selectedFiber]);
|
|
1633
1635
|
}
|
|
1634
1636
|
setSelectedFiber(f);
|
|
1635
|
-
const element2 =
|
|
1637
|
+
const element2 = chunkR357CEJU_cjs.getNearestHostFiber(f)?.stateNode;
|
|
1636
1638
|
if (element2) {
|
|
1637
1639
|
setElement(element2);
|
|
1638
1640
|
setRect(element2.getBoundingClientRect());
|
|
@@ -1644,7 +1646,7 @@ var RawInspector = React17__default.default.memo(
|
|
|
1644
1646
|
setFiberHistory((prev) => [...prev, selectedFiber]);
|
|
1645
1647
|
}
|
|
1646
1648
|
setSelectedFiber(f);
|
|
1647
|
-
const element2 =
|
|
1649
|
+
const element2 = chunkR357CEJU_cjs.getNearestHostFiber(f)?.stateNode;
|
|
1648
1650
|
if (element2) {
|
|
1649
1651
|
setElement(element2);
|
|
1650
1652
|
setRect(element2.getBoundingClientRect());
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import '../chunk-
|
|
2
|
-
import { getFiberFromHostInstance, getNearestHostFiber, traverseFiber, getFiberStack, getDisplayName, getFiberId, isInstrumentationActive, hasRDTHook, getRDTHook, detectReactBuildType } from '../chunk-
|
|
1
|
+
import '../chunk-2R5SJTFQ.js';
|
|
2
|
+
import { getFiberFromHostInstance, getNearestHostFiber, traverseFiber, getFiberStack, getDisplayName, getFiberId, isInstrumentationActive, hasRDTHook, getRDTHook, detectReactBuildType } from '../chunk-NK43KTPL.js';
|
|
3
3
|
import React17, { createContext, memo, Children, useContext, useCallback, useState, useLayoutEffect, useEffect, useMemo } from 'react';
|
|
4
4
|
import ReactDOM from 'react-dom';
|
|
5
5
|
|
|
@@ -1195,6 +1195,8 @@ var Inspector = ({ table = false, data, ...rest }) => {
|
|
|
1195
1195
|
...rest
|
|
1196
1196
|
});
|
|
1197
1197
|
};
|
|
1198
|
+
|
|
1199
|
+
// src/experiments/inspect.tsx
|
|
1198
1200
|
var FIBER_PROP_EXPLANATIONS = {
|
|
1199
1201
|
tag: "Numeric type identifier for this fiber (e.g. 1=FunctionComponent, 5=HostComponent)",
|
|
1200
1202
|
elementType: "The original function/class/element type",
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../chunk-POWCTW3F.cjs');
|
|
4
|
+
var chunkR357CEJU_cjs = require('../chunk-R357CEJU.cjs');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @license bippy
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) Aiden Bai, Million Software, Inc.
|
|
10
|
+
*
|
|
11
|
+
* This source code is licensed under the MIT license found in the
|
|
12
|
+
* LICENSE file in the root directory of this source tree.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// src/experiments/shrinkwrap.ts
|
|
16
|
+
var getDpr = () => {
|
|
17
|
+
return Math.min(window.devicePixelRatio || 1, 2);
|
|
18
|
+
};
|
|
19
|
+
var CANVAS_HTML_STR = `<canvas style="position:fixed;top:0;left:0;pointer-events:none;z-index:2147483646" aria-hidden="true"></canvas>`;
|
|
20
|
+
var COLORS = [
|
|
21
|
+
[255, 0, 0],
|
|
22
|
+
[0, 255, 0],
|
|
23
|
+
[0, 0, 255],
|
|
24
|
+
[255, 165, 0],
|
|
25
|
+
[128, 0, 128],
|
|
26
|
+
[0, 128, 128],
|
|
27
|
+
[255, 105, 180],
|
|
28
|
+
[75, 0, 130],
|
|
29
|
+
[255, 69, 0],
|
|
30
|
+
[46, 139, 87],
|
|
31
|
+
[220, 20, 60],
|
|
32
|
+
[70, 130, 180]
|
|
33
|
+
];
|
|
34
|
+
var interactiveElements = [
|
|
35
|
+
"a",
|
|
36
|
+
"button",
|
|
37
|
+
"details",
|
|
38
|
+
"embed",
|
|
39
|
+
"input",
|
|
40
|
+
"label",
|
|
41
|
+
"menu",
|
|
42
|
+
"menuitem",
|
|
43
|
+
"object",
|
|
44
|
+
"select",
|
|
45
|
+
"textarea",
|
|
46
|
+
"summary"
|
|
47
|
+
];
|
|
48
|
+
var interactiveRoles = [
|
|
49
|
+
"button",
|
|
50
|
+
"menu",
|
|
51
|
+
"menuitem",
|
|
52
|
+
"link",
|
|
53
|
+
"checkbox",
|
|
54
|
+
"radio",
|
|
55
|
+
"slider",
|
|
56
|
+
"tab",
|
|
57
|
+
"tabpanel",
|
|
58
|
+
"textbox",
|
|
59
|
+
"combobox",
|
|
60
|
+
"grid",
|
|
61
|
+
"listbox",
|
|
62
|
+
"option",
|
|
63
|
+
"progressbar",
|
|
64
|
+
"scrollbar",
|
|
65
|
+
"searchbox",
|
|
66
|
+
"switch",
|
|
67
|
+
"tree",
|
|
68
|
+
"treeitem",
|
|
69
|
+
"spinbutton",
|
|
70
|
+
"tooltip",
|
|
71
|
+
"a-button-inner",
|
|
72
|
+
"a-dropdown-button",
|
|
73
|
+
"click",
|
|
74
|
+
"menuitemcheckbox",
|
|
75
|
+
"menuitemradio",
|
|
76
|
+
"a-button-text",
|
|
77
|
+
"button-text",
|
|
78
|
+
"button-icon",
|
|
79
|
+
"button-icon-only",
|
|
80
|
+
"button-text-icon-only",
|
|
81
|
+
"dropdown",
|
|
82
|
+
"combobox"
|
|
83
|
+
];
|
|
84
|
+
var interactiveEvents = [
|
|
85
|
+
"click",
|
|
86
|
+
"mousedown",
|
|
87
|
+
"mouseup",
|
|
88
|
+
"touchstart",
|
|
89
|
+
"touchend",
|
|
90
|
+
"keydown",
|
|
91
|
+
"keyup",
|
|
92
|
+
"focus",
|
|
93
|
+
"blur"
|
|
94
|
+
];
|
|
95
|
+
var isScrollable = (element) => {
|
|
96
|
+
const isScrollable2 = element.hasAttribute("aria-scrollable") || element.hasAttribute("scrollable") || "style" in element && (element.style.overflow === "auto" || element.style.overflow === "scroll" || element.style.overflowY === "auto" || element.style.overflowY === "scroll" || element.style.overflowX === "auto" || element.style.overflowX === "scroll");
|
|
97
|
+
return isScrollable2;
|
|
98
|
+
};
|
|
99
|
+
var isInteractive = (element) => {
|
|
100
|
+
const fiber = chunkR357CEJU_cjs.getFiberFromHostInstance(element);
|
|
101
|
+
if (fiber?.stateNode instanceof Element) {
|
|
102
|
+
for (const propName of Object.keys(fiber.memoizedProps || {})) {
|
|
103
|
+
if (!propName.startsWith("on")) continue;
|
|
104
|
+
const event = propName.slice(2).toLowerCase().replace(/capture$/, "");
|
|
105
|
+
if (!interactiveEvents.includes(event)) continue;
|
|
106
|
+
if (fiber.memoizedProps[propName]) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const event of interactiveEvents) {
|
|
112
|
+
const dotOnHandler = element[`on${event}`];
|
|
113
|
+
const explicitOnHandler = element.hasAttribute(`on${event}`);
|
|
114
|
+
const ngClick = element.hasAttribute(`ng-${event}`);
|
|
115
|
+
const atClick = element.hasAttribute(`@${event}`);
|
|
116
|
+
const vOnClick = element.hasAttribute(`v-on:${event}`);
|
|
117
|
+
if (dotOnHandler || explicitOnHandler || ngClick || atClick || vOnClick) {
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const tagName = element.tagName.toLowerCase();
|
|
122
|
+
const role = element.getAttribute("role");
|
|
123
|
+
const ariaRole = element.getAttribute("aria-role");
|
|
124
|
+
const tabIndex = element.getAttribute("tabindex");
|
|
125
|
+
const hasInteractiveRole = interactiveElements.includes(tagName) || role && interactiveRoles.includes(role) || ariaRole && interactiveRoles.includes(ariaRole) || tabIndex !== null && tabIndex !== "-1";
|
|
126
|
+
const hasAriaProps = element.hasAttribute("aria-expanded") || element.hasAttribute("aria-pressed") || element.hasAttribute("aria-selected") || element.hasAttribute("aria-checked");
|
|
127
|
+
const isFormRelated = "form" in element && element.form !== void 0 || element.hasAttribute("contenteditable");
|
|
128
|
+
const isDraggable = "draggable" in element && element.draggable || element.getAttribute("draggable") === "true";
|
|
129
|
+
return hasInteractiveRole || isFormRelated || isDraggable || hasAriaProps;
|
|
130
|
+
};
|
|
131
|
+
var isElementVisible = (element) => {
|
|
132
|
+
const style = window.getComputedStyle(element);
|
|
133
|
+
return element.offsetWidth > 0 && element.offsetHeight > 0 && style.visibility !== "hidden" && style.display !== "none";
|
|
134
|
+
};
|
|
135
|
+
var isTopElement = (element) => {
|
|
136
|
+
const doc = element.ownerDocument;
|
|
137
|
+
if (doc !== window.document) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
const shadowRoot = element.getRootNode();
|
|
141
|
+
if (shadowRoot instanceof ShadowRoot) {
|
|
142
|
+
const rect2 = element.getBoundingClientRect();
|
|
143
|
+
const point = {
|
|
144
|
+
x: rect2.left + rect2.width / 2,
|
|
145
|
+
y: rect2.top + rect2.height / 2
|
|
146
|
+
};
|
|
147
|
+
try {
|
|
148
|
+
const topEl = shadowRoot.elementFromPoint(point.x, point.y);
|
|
149
|
+
if (!topEl) return false;
|
|
150
|
+
let current = topEl;
|
|
151
|
+
while (current && current !== shadowRoot) {
|
|
152
|
+
if (current === element) return true;
|
|
153
|
+
current = current.parentElement;
|
|
154
|
+
}
|
|
155
|
+
return false;
|
|
156
|
+
} catch {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const rect = element.getBoundingClientRect();
|
|
161
|
+
const scrollX = window.scrollX;
|
|
162
|
+
const scrollY = window.scrollY;
|
|
163
|
+
const viewportTop = scrollY;
|
|
164
|
+
const viewportLeft = scrollX;
|
|
165
|
+
const viewportBottom = window.innerHeight + scrollY;
|
|
166
|
+
const viewportRight = window.innerWidth + scrollX;
|
|
167
|
+
const absTop = rect.top + scrollY;
|
|
168
|
+
const absLeft = rect.left + scrollX;
|
|
169
|
+
const absBottom = rect.bottom + scrollY;
|
|
170
|
+
const absRight = rect.right + scrollX;
|
|
171
|
+
if (absBottom < viewportTop || absTop > viewportBottom || absRight < viewportLeft || absLeft > viewportRight) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const centerX = rect.left + rect.width / 2;
|
|
176
|
+
const centerY = rect.top + rect.height / 2;
|
|
177
|
+
const point = {
|
|
178
|
+
x: centerX,
|
|
179
|
+
y: centerY
|
|
180
|
+
};
|
|
181
|
+
if (point.x < 0 || point.x >= window.innerWidth || point.y < 0 || point.y >= window.innerHeight) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
const topEl = document.elementFromPoint(point.x, point.y);
|
|
185
|
+
if (!topEl) return false;
|
|
186
|
+
let current = topEl;
|
|
187
|
+
while (current && current !== document.documentElement) {
|
|
188
|
+
if (current === element) return true;
|
|
189
|
+
current = current.parentElement;
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
} catch {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
var createShrinkwrap = () => {
|
|
197
|
+
const draw = async (elements) => {
|
|
198
|
+
if (!ctx) return;
|
|
199
|
+
const rectMap = await getRectMap(elements);
|
|
200
|
+
clear();
|
|
201
|
+
const drawnLabelBounds = [];
|
|
202
|
+
let visibleCount = 0;
|
|
203
|
+
const visibleIndices = /* @__PURE__ */ new Map();
|
|
204
|
+
const viewportWidth = window.innerWidth;
|
|
205
|
+
const viewportHeight = window.innerHeight;
|
|
206
|
+
const COVERAGE_THRESHOLD = 0.97;
|
|
207
|
+
for (let i = 0, len = elements.length; i < len; i++) {
|
|
208
|
+
const element = elements[i];
|
|
209
|
+
const rect = rectMap.get(element);
|
|
210
|
+
if (!rect) continue;
|
|
211
|
+
const { width: width2, height: height2 } = rect;
|
|
212
|
+
const x = rect.x;
|
|
213
|
+
const y = rect.y;
|
|
214
|
+
if (width2 / viewportWidth > COVERAGE_THRESHOLD && height2 / viewportHeight > COVERAGE_THRESHOLD)
|
|
215
|
+
continue;
|
|
216
|
+
const text = `${visibleCount + 1}`;
|
|
217
|
+
const textSize = 16;
|
|
218
|
+
ctx.textRendering = "optimizeSpeed";
|
|
219
|
+
ctx.font = `${textSize}px monospace`;
|
|
220
|
+
const { width: textWidth } = ctx.measureText(text);
|
|
221
|
+
let labelY = y - textSize - 4;
|
|
222
|
+
if (labelY < 0) {
|
|
223
|
+
labelY = 0;
|
|
224
|
+
}
|
|
225
|
+
const labelBounds = {
|
|
226
|
+
x,
|
|
227
|
+
y: labelY,
|
|
228
|
+
width: textWidth + 4,
|
|
229
|
+
height: textSize + 4
|
|
230
|
+
};
|
|
231
|
+
const hasCollision = drawnLabelBounds.some(
|
|
232
|
+
(bound) => labelBounds.x < bound.x + bound.width && labelBounds.x + labelBounds.width > bound.x && labelBounds.y < bound.y + bound.height && labelBounds.y + labelBounds.height > bound.y
|
|
233
|
+
);
|
|
234
|
+
if (!hasCollision) {
|
|
235
|
+
drawnLabelBounds.push(labelBounds);
|
|
236
|
+
visibleCount++;
|
|
237
|
+
visibleIndices.set(element, visibleCount);
|
|
238
|
+
ctx.beginPath();
|
|
239
|
+
ctx.rect(x, y, width2, height2);
|
|
240
|
+
const color = COLORS[i % COLORS.length].join(",");
|
|
241
|
+
ctx.fillStyle = `rgba(${color},0.1)`;
|
|
242
|
+
ctx.strokeStyle = `rgba(${color})`;
|
|
243
|
+
ctx.fill();
|
|
244
|
+
ctx.stroke();
|
|
245
|
+
ctx.fillStyle = `rgba(${color})`;
|
|
246
|
+
ctx.fillRect(x, labelY, textWidth + 4, textSize + 4);
|
|
247
|
+
ctx.fillStyle = "rgba(255,255,255)";
|
|
248
|
+
ctx.fillText(text, x + 2, labelY + textSize);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return visibleIndices;
|
|
252
|
+
};
|
|
253
|
+
const clear = () => {
|
|
254
|
+
if (!ctx) return;
|
|
255
|
+
ctx.clearRect(0, 0, canvas.width / dpr, canvas.height / dpr);
|
|
256
|
+
};
|
|
257
|
+
const host = document.createElement("div");
|
|
258
|
+
host.setAttribute("data-react-scan", "true");
|
|
259
|
+
const root = host.attachShadow({ mode: "open" });
|
|
260
|
+
root.innerHTML = CANVAS_HTML_STR;
|
|
261
|
+
const canvas = root.firstChild;
|
|
262
|
+
let dpr = Math.min(window.devicePixelRatio || 1, 2);
|
|
263
|
+
const { innerWidth, innerHeight } = window;
|
|
264
|
+
canvas.style.width = `${innerWidth}px`;
|
|
265
|
+
canvas.style.height = `${innerHeight}px`;
|
|
266
|
+
const width = innerWidth * dpr;
|
|
267
|
+
const height = innerHeight * dpr;
|
|
268
|
+
canvas.width = width;
|
|
269
|
+
canvas.height = height;
|
|
270
|
+
const ctx = canvas.getContext("2d", { alpha: true });
|
|
271
|
+
if (ctx) {
|
|
272
|
+
ctx.scale(dpr, dpr);
|
|
273
|
+
}
|
|
274
|
+
root.appendChild(canvas);
|
|
275
|
+
document.documentElement.appendChild(host);
|
|
276
|
+
let isResizeScheduled = false;
|
|
277
|
+
const resizeHandler = () => {
|
|
278
|
+
if (!isResizeScheduled) {
|
|
279
|
+
isResizeScheduled = true;
|
|
280
|
+
setTimeout(() => {
|
|
281
|
+
const width2 = window.innerWidth;
|
|
282
|
+
const height2 = window.innerHeight;
|
|
283
|
+
dpr = getDpr();
|
|
284
|
+
canvas.style.width = `${width2}px`;
|
|
285
|
+
canvas.style.height = `${height2}px`;
|
|
286
|
+
canvas.width = width2 * dpr;
|
|
287
|
+
canvas.height = height2 * dpr;
|
|
288
|
+
if (ctx) {
|
|
289
|
+
ctx.resetTransform();
|
|
290
|
+
ctx.scale(dpr, dpr);
|
|
291
|
+
}
|
|
292
|
+
shrinkwrap.trackInteractive();
|
|
293
|
+
isResizeScheduled = false;
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
let isScrollScheduled = false;
|
|
298
|
+
const scrollHandler = () => {
|
|
299
|
+
if (isScrollScheduled) return;
|
|
300
|
+
isScrollScheduled = true;
|
|
301
|
+
setTimeout(() => {
|
|
302
|
+
requestAnimationFrame(() => {
|
|
303
|
+
shrinkwrap.trackInteractive();
|
|
304
|
+
});
|
|
305
|
+
isScrollScheduled = false;
|
|
306
|
+
}, 8);
|
|
307
|
+
};
|
|
308
|
+
const fiberRoots = /* @__PURE__ */ new Set();
|
|
309
|
+
const shrinkwrap = {
|
|
310
|
+
draw(elements) {
|
|
311
|
+
draw(elements).then((visibleIndices) => {
|
|
312
|
+
if (!visibleIndices) return;
|
|
313
|
+
const elementMap = {};
|
|
314
|
+
visibleIndices.forEach((index, element) => {
|
|
315
|
+
elementMap[index] = element;
|
|
316
|
+
});
|
|
317
|
+
window.shrinkwrap = {
|
|
318
|
+
elementMap
|
|
319
|
+
};
|
|
320
|
+
});
|
|
321
|
+
},
|
|
322
|
+
trackInteractive() {
|
|
323
|
+
chunkR357CEJU_cjs.instrument({
|
|
324
|
+
onCommitFiberRoot(_, root2) {
|
|
325
|
+
fiberRoots.add(root2);
|
|
326
|
+
const elements = [];
|
|
327
|
+
for (const fiberRoot of fiberRoots) {
|
|
328
|
+
chunkR357CEJU_cjs.traverseFiber(fiberRoot.current, (fiber) => {
|
|
329
|
+
if (chunkR357CEJU_cjs.isHostFiber(fiber) && isInteractive(fiber.stateNode) && isElementVisible(fiber.stateNode) && isTopElement(fiber.stateNode)) {
|
|
330
|
+
elements.push(fiber.stateNode);
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
shrinkwrap.draw(elements);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
},
|
|
338
|
+
cleanup() {
|
|
339
|
+
fiberRoots.clear();
|
|
340
|
+
window.removeEventListener("scroll", scrollHandler);
|
|
341
|
+
window.removeEventListener("resize", resizeHandler);
|
|
342
|
+
document.documentElement.removeChild(host);
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
window.addEventListener("scroll", scrollHandler);
|
|
346
|
+
window.addEventListener("resize", resizeHandler);
|
|
347
|
+
return shrinkwrap;
|
|
348
|
+
};
|
|
349
|
+
var getRectMap = (elements) => {
|
|
350
|
+
return new Promise((resolve) => {
|
|
351
|
+
const rects = /* @__PURE__ */ new Map();
|
|
352
|
+
const observer = new IntersectionObserver((entries) => {
|
|
353
|
+
for (let i = 0, len = entries.length; i < len; i++) {
|
|
354
|
+
const entry = entries[i];
|
|
355
|
+
const element = entry.target;
|
|
356
|
+
const rect = entry.boundingClientRect;
|
|
357
|
+
if (entry.isIntersecting && rect.width && rect.height) {
|
|
358
|
+
rects.set(element, rect);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
observer.disconnect();
|
|
362
|
+
resolve(rects);
|
|
363
|
+
});
|
|
364
|
+
for (let i = 0, len = elements.length; i < len; i++) {
|
|
365
|
+
const element = elements[i];
|
|
366
|
+
observer.observe(element);
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
exports.createShrinkwrap = createShrinkwrap;
|
|
372
|
+
exports.getRectMap = getRectMap;
|
|
373
|
+
exports.isInteractive = isInteractive;
|
|
374
|
+
exports.isScrollable = isScrollable;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare const isScrollable: (element: Element) => boolean;
|
|
2
|
+
declare const isInteractive: (element: Element) => {};
|
|
3
|
+
declare const createShrinkwrap: () => {
|
|
4
|
+
draw(elements: Element[]): void;
|
|
5
|
+
trackInteractive(): void;
|
|
6
|
+
cleanup(): void;
|
|
7
|
+
};
|
|
8
|
+
declare const getRectMap: (elements: Element[]) => Promise<Map<Element, DOMRect>>;
|
|
9
|
+
|
|
10
|
+
export { createShrinkwrap, getRectMap, isInteractive, isScrollable };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare const isScrollable: (element: Element) => boolean;
|
|
2
|
+
declare const isInteractive: (element: Element) => {};
|
|
3
|
+
declare const createShrinkwrap: () => {
|
|
4
|
+
draw(elements: Element[]): void;
|
|
5
|
+
trackInteractive(): void;
|
|
6
|
+
cleanup(): void;
|
|
7
|
+
};
|
|
8
|
+
declare const getRectMap: (elements: Element[]) => Promise<Map<Element, DOMRect>>;
|
|
9
|
+
|
|
10
|
+
export { createShrinkwrap, getRectMap, isInteractive, isScrollable };
|