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/core.d.ts CHANGED
@@ -1,74 +1,9 @@
1
1
  import * as React from 'react';
2
- import { FiberRoot, Fiber as Fiber$1, ReactContext, Lanes } from 'react-reconciler';
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, type ContextDependency, DEPRECATED_ASYNC_MODE_SYMBOL_STRING, DehydratedSuspenseComponentTag, type Dependencies, ELEMENT_TYPE_SYMBOL_STRING, type Effect, type Fiber, ForwardRefTag, FragmentTag, FunctionComponentTag, HostComponentTag, HostHoistableTag, HostRootTag, HostSingletonTag, HostTextTag, INSTALL_ERROR, INSTALL_HOOK_SCRIPT_STRING, type InstrumentationOptions, LegacyHiddenComponentTag, MemoComponentTag, type MemoizedState, OffscreenComponentTag, type Props, type ReactDevToolsGlobalHook, type 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 };
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-347RWTP3.js';
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-HQYIPSLJ.cjs');
6
- var chunkGVWERSAB_cjs = require('../chunk-GVWERSAB.cjs');
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 = chunkGVWERSAB_cjs.getFiberFromHostInstance(element);
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 = chunkGVWERSAB_cjs.isInstrumentationActive() || chunkGVWERSAB_cjs.hasRDTHook();
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 = chunkGVWERSAB_cjs.getRDTHook();
1420
+ const rdtHook = chunkR357CEJU_cjs.getRDTHook();
1419
1421
  for (const renderer of rdtHook.renderers.values()) {
1420
- const buildType = chunkGVWERSAB_cjs.detectReactBuildType(renderer);
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 = chunkGVWERSAB_cjs.getNearestHostFiber(selectedFiber)?.stateNode;
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
- chunkGVWERSAB_cjs.traverseFiber(
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 ? chunkGVWERSAB_cjs.getFiberStack(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 : chunkGVWERSAB_cjs.getDisplayName(fiber.type) || "unknown"}>`,
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 : chunkGVWERSAB_cjs.getDisplayName(f.type) || "unknown";
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: chunkGVWERSAB_cjs.getFiberId(f) }, /* @__PURE__ */ React17__default.default.createElement(
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 = chunkGVWERSAB_cjs.getNearestHostFiber(f)?.stateNode;
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 = chunkGVWERSAB_cjs.getNearestHostFiber(f)?.stateNode;
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-N23WFCSF.js';
2
- import { getFiberFromHostInstance, getNearestHostFiber, traverseFiber, getFiberStack, getDisplayName, getFiberId, isInstrumentationActive, hasRDTHook, getRDTHook, detectReactBuildType } from '../chunk-347RWTP3.js';
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 };