bippy 0.2.6 → 0.2.7

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/inspect.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('./chunk-YZYCWAB2.cjs');
6
- var chunkA425RZH5_cjs = require('./chunk-A425RZH5.cjs');
6
+ var chunk7H6RTVXX_cjs = require('./chunk-7H6RTVXX.cjs');
7
7
  var React17 = require('react');
8
8
 
9
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -4584,6 +4584,8 @@ function zoom_default2() {
4584
4584
  }
4585
4585
 
4586
4586
  // src/inspect.tsx
4587
+ var renderCounts = /* @__PURE__ */ new WeakMap();
4588
+ var fiberStates = /* @__PURE__ */ new Map();
4587
4589
  var FIBER_PROP_EXPLANATIONS = {
4588
4590
  tag: "Numeric type identifier for this fiber (e.g. 1=FunctionComponent, 5=HostComponent)",
4589
4591
  elementType: "The original function/class/element type",
@@ -4796,14 +4798,29 @@ var FiberGraph = React17__default.default.memo(
4796
4798
  const zoomRef = React17.useRef();
4797
4799
  const linksGroupRef = React17.useRef(null);
4798
4800
  const nodesGroupRef = React17.useRef(null);
4801
+ const renderedFibersRef = React17.useRef(/* @__PURE__ */ new Set());
4802
+ const flashTimeoutRef = React17.useRef();
4803
+ const [timelineIndex, setTimelineIndex] = React17.useState(-1);
4804
+ const [isPlaying, setIsPlaying] = React17.useState(false);
4805
+ const playIntervalRef = React17.useRef();
4806
+ const [activeTab, setActiveTab] = React17.useState("graph");
4807
+ const [tooltip, setTooltip] = React17.useState(null);
4808
+ const handlePropertyHover = (e, propName) => {
4809
+ if (!isDialogMode) return;
4810
+ const explanation = FIBER_PROP_EXPLANATIONS[propName];
4811
+ setTooltip(explanation || null);
4812
+ };
4813
+ const handlePropertyLeave = () => {
4814
+ setTooltip(null);
4815
+ };
4799
4816
  const { nodes, links } = React17.useMemo(() => {
4800
4817
  const nodes2 = [];
4801
4818
  const links2 = [];
4802
4819
  const nodeMap = /* @__PURE__ */ new Map();
4803
4820
  let nodeCounter = 0;
4804
- const baseId = chunkA425RZH5_cjs.getFiberId(fiber).toString();
4821
+ const baseId = chunk7H6RTVXX_cjs.getFiberId(fiber).toString();
4805
4822
  const rootId = `${baseId}-${nodeCounter++}`;
4806
- const rootName = typeof fiber.type === "string" ? fiber.type : fiber.type === null && fiber.tag === chunkA425RZH5_cjs.HostRootTag ? "#root" : fiber.type === null && fiber.tag === chunkA425RZH5_cjs.HostTextTag ? "#text" : chunkA425RZH5_cjs.getDisplayName(fiber.type) || fiber.type?.name || fiber.type?.displayName || "Component";
4823
+ const rootName = typeof fiber.type === "string" ? fiber.type : fiber.type === null && fiber.tag === chunk7H6RTVXX_cjs.HostRootTag ? "#root" : fiber.type === null && fiber.tag === chunk7H6RTVXX_cjs.HostTextTag ? "#text" : chunk7H6RTVXX_cjs.getDisplayName(fiber.type) || fiber.type?.name || fiber.type?.displayName || "Component";
4807
4824
  const rootNode = {
4808
4825
  id: rootId,
4809
4826
  name: rootName,
@@ -4824,7 +4841,7 @@ var FiberGraph = React17__default.default.memo(
4824
4841
  const current = stack2.pop();
4825
4842
  if (!current) continue;
4826
4843
  const { fiber: currentFiber, parentId, depth } = current;
4827
- if (currentFiber.tag === chunkA425RZH5_cjs.FragmentTag) {
4844
+ if (currentFiber.tag === chunk7H6RTVXX_cjs.FragmentTag) {
4828
4845
  if (currentFiber.child) {
4829
4846
  stack2.push({
4830
4847
  fiber: currentFiber.child,
@@ -4835,13 +4852,13 @@ var FiberGraph = React17__default.default.memo(
4835
4852
  if (currentFiber.sibling && currentFiber.return === currentFiber.sibling.return) {
4836
4853
  stack2.push({
4837
4854
  fiber: currentFiber.sibling,
4838
- parentId: currentFiber.return ? nodeMap.get(chunkA425RZH5_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4855
+ parentId: currentFiber.return ? nodeMap.get(chunk7H6RTVXX_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4839
4856
  depth
4840
4857
  });
4841
4858
  }
4842
4859
  continue;
4843
4860
  }
4844
- if (currentFiber.type === null && chunkA425RZH5_cjs.isHostFiber(currentFiber)) {
4861
+ if (currentFiber.type === null && chunk7H6RTVXX_cjs.isHostFiber(currentFiber)) {
4845
4862
  if (currentFiber.child) {
4846
4863
  stack2.push({
4847
4864
  fiber: currentFiber.child,
@@ -4852,27 +4869,27 @@ var FiberGraph = React17__default.default.memo(
4852
4869
  if (currentFiber.sibling && currentFiber.return === currentFiber.sibling.return) {
4853
4870
  stack2.push({
4854
4871
  fiber: currentFiber.sibling,
4855
- parentId: currentFiber.return ? nodeMap.get(chunkA425RZH5_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4872
+ parentId: currentFiber.return ? nodeMap.get(chunk7H6RTVXX_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4856
4873
  depth
4857
4874
  });
4858
4875
  }
4859
4876
  continue;
4860
4877
  }
4861
- const childId = `${chunkA425RZH5_cjs.getFiberId(currentFiber)}-${nodeCounter++}`;
4878
+ const childId = `${chunk7H6RTVXX_cjs.getFiberId(currentFiber)}-${nodeCounter++}`;
4862
4879
  let name = "unknown";
4863
4880
  if (typeof currentFiber.type === "string") {
4864
4881
  name = currentFiber.type;
4865
- } else if (currentFiber.type === null && currentFiber.tag === chunkA425RZH5_cjs.HostTextTag) {
4882
+ } else if (currentFiber.type === null && currentFiber.tag === chunk7H6RTVXX_cjs.HostTextTag) {
4866
4883
  const text = currentFiber.stateNode?.nodeValue?.trim() || "";
4867
4884
  if (text) {
4868
4885
  name = text.length > 20 ? `"${text.slice(0, 20)}..."` : `"${text}"`;
4869
4886
  } else {
4870
4887
  name = "#text";
4871
4888
  }
4872
- } else if (currentFiber.type === null && currentFiber.tag === chunkA425RZH5_cjs.HostRootTag) {
4889
+ } else if (currentFiber.type === null && currentFiber.tag === chunk7H6RTVXX_cjs.HostRootTag) {
4873
4890
  name = "#root";
4874
4891
  } else {
4875
- name = chunkA425RZH5_cjs.getDisplayName(currentFiber.type) || currentFiber.type?.name || currentFiber.type?.displayName || "Component";
4892
+ name = chunk7H6RTVXX_cjs.getDisplayName(currentFiber.type) || currentFiber.type?.name || currentFiber.type?.displayName || "Component";
4876
4893
  }
4877
4894
  const node = {
4878
4895
  id: childId,
@@ -4896,7 +4913,7 @@ var FiberGraph = React17__default.default.memo(
4896
4913
  if (currentFiber.sibling && currentFiber.return === currentFiber.sibling.return) {
4897
4914
  stack2.push({
4898
4915
  fiber: currentFiber.sibling,
4899
- parentId: currentFiber.return ? nodeMap.get(chunkA425RZH5_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4916
+ parentId: currentFiber.return ? nodeMap.get(chunk7H6RTVXX_cjs.getFiberId(currentFiber.return).toString())?.id || parentId : parentId,
4900
4917
  depth
4901
4918
  });
4902
4919
  }
@@ -4969,7 +4986,7 @@ var FiberGraph = React17__default.default.memo(
4969
4986
  nodeElements.exit().remove();
4970
4987
  const nodeEnter = nodeElements.enter().append("g").attr("transform", (d) => `translate(${d.x},${d.y})`).style("cursor", "pointer").on("click", (event, d) => {
4971
4988
  event.stopPropagation();
4972
- const element = chunkA425RZH5_cjs.getNearestHostFiber(d.data.fiber)?.stateNode;
4989
+ const element = chunk7H6RTVXX_cjs.getNearestHostFiber(d.data.fiber)?.stateNode;
4973
4990
  if (element instanceof HTMLElement) {
4974
4991
  element.scrollIntoView({ behavior: "smooth", block: "center" });
4975
4992
  const originalOutline = element.style.outline;
@@ -4991,17 +5008,22 @@ var FiberGraph = React17__default.default.memo(
4991
5008
  const isRoot = d.data.id === nodes[0].id;
4992
5009
  const isPreview = !isDialogMode;
4993
5010
  const scale = isRoot ? isPreview ? 2 : 1.75 : 1;
4994
- const rect = g.selectAll("rect").data([d]).join("rect").attr("x", -75 * scale).attr("y", -30 * scale).attr("width", 150 * scale).attr("height", 60 * scale).attr("rx", 6 * scale).attr("fill", chunkA425RZH5_cjs.isCompositeFiber(d.data.fiber) ? "#FFF" : "#232323").attr("stroke", "#505050").attr("stroke-width", isRoot ? "3" : "2");
5011
+ const isRendered = renderedFibersRef.current.has(
5012
+ chunk7H6RTVXX_cjs.getFiberId(d.data.fiber).toString()
5013
+ );
5014
+ const rect = g.selectAll("rect").data([d]).join("rect").attr("x", -75 * scale).attr("y", -30 * scale).attr("width", 150 * scale).attr("height", 60 * scale).attr("rx", 6 * scale).attr("fill", chunk7H6RTVXX_cjs.isCompositeFiber(d.data.fiber) ? "#FFF" : "#232323").attr("stroke", isRendered ? "#FFC799" : "#505050").attr("stroke-width", isRoot ? "3" : "2");
4995
5015
  rect.on("mouseover", function() {
4996
5016
  select_default2(this).attr("stroke", "#808080").attr("stroke-width", isRoot ? "4" : "3");
4997
5017
  }).on("mouseout", function() {
4998
- select_default2(this).attr("stroke", "#505050").attr("stroke-width", isRoot ? "3" : "2");
5018
+ select_default2(this).attr("stroke", isRendered ? "#FFC799" : "#505050").attr("stroke-width", isRoot ? "3" : "2");
4999
5019
  });
5000
- g.selectAll("text.name").data([d]).join("text").attr("class", "name").attr("text-anchor", "middle").attr("dy", `${-0.6 * scale}em`).attr("fill", chunkA425RZH5_cjs.isCompositeFiber(d.data.fiber) ? "#000" : "#FFF").attr("font-weight", "500").attr(
5020
+ const renderCount = renderCounts.get(d.data.fiber) || 0;
5021
+ const renderText = renderCount > 0 ? ` \xD7${renderCount}` : "";
5022
+ g.selectAll("text.name").data([d]).join("text").attr("class", "name").attr("text-anchor", "middle").attr("dy", `${-0.6 * scale}em`).attr("fill", chunk7H6RTVXX_cjs.isCompositeFiber(d.data.fiber) ? "#000" : "#FFF").attr("font-weight", "500").attr(
5001
5023
  "font-size",
5002
5024
  isRoot ? isPreview ? "1.75em" : "1.5em" : "1em"
5003
- ).text(d.data.name);
5004
- g.selectAll("text.props").data([d]).join("text").attr("class", "props").attr("text-anchor", "middle").attr("dy", `${0.9 * scale}em`).attr("fill", chunkA425RZH5_cjs.isCompositeFiber(d.data.fiber) ? "#666" : "#999").attr(
5025
+ ).text(d.data.name + renderText);
5026
+ g.selectAll("text.props").data([d]).join("text").attr("class", "props").attr("text-anchor", "middle").attr("dy", `${0.9 * scale}em`).attr("fill", chunk7H6RTVXX_cjs.isCompositeFiber(d.data.fiber) ? "#666" : "#999").attr(
5005
5027
  "font-size",
5006
5028
  isRoot ? isPreview ? "1.25em" : "1.1em" : "0.75em"
5007
5029
  ).text(() => {
@@ -5065,7 +5087,173 @@ var FiberGraph = React17__default.default.memo(
5065
5087
  setTimeout(handleFit, 0);
5066
5088
  }
5067
5089
  }, [nodes.length, handleFit]);
5068
- return /* @__PURE__ */ React17__default.default.createElement("div", { style: { height: "50ch", marginTop: "2ch" } }, /* @__PURE__ */ React17__default.default.createElement(
5090
+ React17.useEffect(() => {
5091
+ chunk7H6RTVXX_cjs.onCommitFiberRoot((root2) => {
5092
+ if (flashTimeoutRef.current) {
5093
+ clearTimeout(flashTimeoutRef.current);
5094
+ }
5095
+ renderedFibersRef.current = /* @__PURE__ */ new Set();
5096
+ chunk7H6RTVXX_cjs.traverseRenderedFibers(root2, (renderedFiber) => {
5097
+ const fiberId = chunk7H6RTVXX_cjs.getFiberId(renderedFiber).toString();
5098
+ renderedFibersRef.current.add(fiberId);
5099
+ const states = fiberStates.get(fiberId) || [];
5100
+ states.push({
5101
+ props: renderedFiber.memoizedProps ?? {},
5102
+ hookState: renderedFiber.memoizedState ?? {},
5103
+ timestamp: Date.now()
5104
+ });
5105
+ fiberStates.set(fiberId, states);
5106
+ renderCounts.set(renderedFiber, (renderCounts.get(renderedFiber) || 0) + 1);
5107
+ });
5108
+ if (nodesGroupRef.current) {
5109
+ const nodeElements = select_default2(nodesGroupRef.current).selectAll("g");
5110
+ nodeElements.each(function(d) {
5111
+ const isRendered = renderedFibersRef.current.has(
5112
+ chunk7H6RTVXX_cjs.getFiberId(d.data.fiber).toString()
5113
+ );
5114
+ if (isRendered) {
5115
+ const rect = select_default2(this).select("rect");
5116
+ rect.attr("stroke", "#FFC799").style("filter", "drop-shadow(0 0 8px #FFC799)").transition().duration(400).style("filter", "none").attr("stroke", "#505050");
5117
+ const renderCount = renderCounts.get(d.data.fiber) || 0;
5118
+ const renderText = renderCount > 0 ? ` \xD7${renderCount}` : "";
5119
+ select_default2(this).select("text.name").text(d.data.name + renderText);
5120
+ }
5121
+ });
5122
+ }
5123
+ flashTimeoutRef.current = setTimeout(() => {
5124
+ renderedFibersRef.current = /* @__PURE__ */ new Set();
5125
+ }, 400);
5126
+ });
5127
+ return () => {
5128
+ if (flashTimeoutRef.current) {
5129
+ clearTimeout(flashTimeoutRef.current);
5130
+ }
5131
+ };
5132
+ }, []);
5133
+ const handleTimelineChange = React17.useCallback((index) => {
5134
+ setTimelineIndex(index);
5135
+ const fiberId = chunk7H6RTVXX_cjs.getFiberId(fiber).toString();
5136
+ const states = fiberStates.get(fiberId);
5137
+ if (states?.[index]) {
5138
+ const rdtHook = chunk7H6RTVXX_cjs.getRDTHook();
5139
+ if (rdtHook?.renderers.size > 0) {
5140
+ const renderer = Array.from(rdtHook.renderers.values())?.[0];
5141
+ const overrideProps = renderer?.currentDispatcherRef?.current?.overrideProps;
5142
+ const overrideHookState = renderer?.currentDispatcherRef?.current?.overrideHookState;
5143
+ const state = states?.[index];
5144
+ if (state) {
5145
+ if (overrideProps) {
5146
+ overrideProps(fiber, state.props);
5147
+ }
5148
+ if (overrideHookState) {
5149
+ overrideHookState(fiber, state.hookState);
5150
+ }
5151
+ }
5152
+ }
5153
+ }
5154
+ }, [fiber]);
5155
+ const handlePlayPause = React17.useCallback(() => {
5156
+ setIsPlaying((prev) => !prev);
5157
+ }, []);
5158
+ const handleStepForward = React17.useCallback(() => {
5159
+ const states = fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString());
5160
+ if (states) {
5161
+ const nextIndex = Math.min(timelineIndex + 1, states.length - 1);
5162
+ handleTimelineChange(nextIndex);
5163
+ }
5164
+ }, [fiber, timelineIndex, handleTimelineChange]);
5165
+ const handleStepBack = React17.useCallback(() => {
5166
+ const states = fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString());
5167
+ if (states) {
5168
+ const prevIndex = Math.max(timelineIndex - 1, 0);
5169
+ handleTimelineChange(prevIndex);
5170
+ }
5171
+ }, [fiber, timelineIndex, handleTimelineChange]);
5172
+ React17.useEffect(() => {
5173
+ if (isPlaying) {
5174
+ playIntervalRef.current = setInterval(() => {
5175
+ const states = fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString());
5176
+ if (states) {
5177
+ const nextIndex = timelineIndex + 1;
5178
+ if (nextIndex >= states.length) {
5179
+ setIsPlaying(false);
5180
+ } else {
5181
+ handleTimelineChange(nextIndex);
5182
+ }
5183
+ }
5184
+ }, 1e3);
5185
+ } else if (playIntervalRef.current) {
5186
+ clearInterval(playIntervalRef.current);
5187
+ }
5188
+ return () => {
5189
+ if (playIntervalRef.current) {
5190
+ clearInterval(playIntervalRef.current);
5191
+ }
5192
+ };
5193
+ }, [isPlaying, fiber, timelineIndex, handleTimelineChange]);
5194
+ return /* @__PURE__ */ React17__default.default.createElement("div", { style: { height: "50ch", marginTop: "2ch", display: "flex", flexDirection: "column", position: "relative" } }, isDialogMode && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5195
+ display: "flex",
5196
+ gap: "0.5ch",
5197
+ marginBottom: "1ch",
5198
+ padding: "0 1ch",
5199
+ borderBottom: "1px solid #282828"
5200
+ } }, /* @__PURE__ */ React17__default.default.createElement(
5201
+ "button",
5202
+ {
5203
+ type: "button",
5204
+ onClick: () => setActiveTab("graph"),
5205
+ style: {
5206
+ background: "transparent",
5207
+ border: "none",
5208
+ color: activeTab === "graph" ? "#FFC799" : "#A0A0A0",
5209
+ padding: "1ch",
5210
+ cursor: "pointer",
5211
+ position: "relative",
5212
+ fontSize: "0.875rem",
5213
+ fontWeight: activeTab === "graph" ? 500 : 400
5214
+ }
5215
+ },
5216
+ "Graph View",
5217
+ activeTab === "graph" && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5218
+ position: "absolute",
5219
+ bottom: "-1px",
5220
+ left: 0,
5221
+ right: 0,
5222
+ height: "2px",
5223
+ background: "#FFC799",
5224
+ borderRadius: "2px 2px 0 0"
5225
+ } })
5226
+ ), /* @__PURE__ */ React17__default.default.createElement(
5227
+ "button",
5228
+ {
5229
+ type: "button",
5230
+ onClick: () => setActiveTab("fiber"),
5231
+ style: {
5232
+ background: "transparent",
5233
+ border: "none",
5234
+ color: activeTab === "fiber" ? "#FFC799" : "#A0A0A0",
5235
+ padding: "1ch",
5236
+ cursor: "pointer",
5237
+ position: "relative",
5238
+ fontSize: "0.875rem",
5239
+ fontWeight: activeTab === "fiber" ? 500 : 400
5240
+ }
5241
+ },
5242
+ "Fiber View",
5243
+ activeTab === "fiber" && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5244
+ position: "absolute",
5245
+ bottom: "-1px",
5246
+ left: 0,
5247
+ right: 0,
5248
+ height: "2px",
5249
+ background: "#FFC799",
5250
+ borderRadius: "2px 2px 0 0"
5251
+ } })
5252
+ )), /* @__PURE__ */ React17__default.default.createElement("div", { style: { position: "relative", flex: 1 } }, /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5253
+ position: "absolute",
5254
+ inset: 0,
5255
+ display: activeTab === "graph" ? "block" : "none"
5256
+ } }, /* @__PURE__ */ React17__default.default.createElement(
5069
5257
  Controls,
5070
5258
  {
5071
5259
  onZoomIn: handleZoomIn,
@@ -5090,7 +5278,213 @@ var FiberGraph = React17__default.default.memo(
5090
5278
  },
5091
5279
  /* @__PURE__ */ React17__default.default.createElement("title", null, "Fiber Tree Visualization"),
5092
5280
  /* @__PURE__ */ React17__default.default.createElement("g", { ref: svgGroupRef }, /* @__PURE__ */ React17__default.default.createElement("g", { ref: linksGroupRef, className: "links" }), /* @__PURE__ */ React17__default.default.createElement("g", { ref: nodesGroupRef, className: "nodes" }))
5093
- ));
5281
+ )), /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5282
+ position: "absolute",
5283
+ inset: 0,
5284
+ display: activeTab === "fiber" ? "block" : "none",
5285
+ overflow: "auto",
5286
+ background: "#101010",
5287
+ borderRadius: "0.25rem",
5288
+ padding: "1ch"
5289
+ } }, /* @__PURE__ */ React17__default.default.createElement(
5290
+ Inspector,
5291
+ {
5292
+ theme: theme3,
5293
+ data: fiber,
5294
+ expandLevel: isDialogMode ? 1 : 0,
5295
+ table: false,
5296
+ nodeRenderer: (props) => {
5297
+ const Component = props.depth === 0 ? ObjectRootLabel : ObjectLabel;
5298
+ return /* @__PURE__ */ React17__default.default.createElement(
5299
+ "span",
5300
+ {
5301
+ onMouseEnter: (e) => handlePropertyHover(e, props.name),
5302
+ onMouseLeave: handlePropertyLeave,
5303
+ style: {
5304
+ cursor: FIBER_PROP_EXPLANATIONS[props.name] ? "help" : "default",
5305
+ padding: "1px 0",
5306
+ display: "inline-block",
5307
+ fontWeight: FIBER_PROP_EXPLANATIONS[props.name] ? 500 : "normal"
5308
+ }
5309
+ },
5310
+ /* @__PURE__ */ React17__default.default.createElement(
5311
+ Component,
5312
+ {
5313
+ name: props.name,
5314
+ data: props.data,
5315
+ isNonenumerable: props.isNonenumerable
5316
+ }
5317
+ )
5318
+ );
5319
+ }
5320
+ }
5321
+ ), tooltip && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5322
+ position: "absolute",
5323
+ zIndex: 1001,
5324
+ backgroundColor: "#161616",
5325
+ color: "#FFF",
5326
+ bottom: "2ch",
5327
+ right: "2ch",
5328
+ pointerEvents: "none",
5329
+ overflowY: "auto",
5330
+ padding: "1ch",
5331
+ fontSize: "1ch",
5332
+ border: "1px solid #282828",
5333
+ borderRadius: "0.25ch"
5334
+ } }, tooltip))), isDialogMode && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5335
+ background: "#161616",
5336
+ padding: "1ch",
5337
+ margin: "1ch 1ch 0 1ch",
5338
+ borderRadius: "0.25rem",
5339
+ border: "1px solid #282828",
5340
+ display: "flex",
5341
+ flexDirection: "column",
5342
+ gap: "0.5ch",
5343
+ opacity: fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ? 1 : 0.5
5344
+ } }, /* @__PURE__ */ React17__default.default.createElement("div", { style: { display: "flex", alignItems: "center", gap: "0.5ch" } }, /* @__PURE__ */ React17__default.default.createElement(
5345
+ "button",
5346
+ {
5347
+ type: "button",
5348
+ onClick: handleStepBack,
5349
+ disabled: !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length,
5350
+ style: {
5351
+ background: "transparent",
5352
+ border: "1px solid #282828",
5353
+ color: "#FFF",
5354
+ borderRadius: "0.25rem",
5355
+ cursor: fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ? "pointer" : "not-allowed",
5356
+ padding: "0.25ch 0.5ch"
5357
+ }
5358
+ },
5359
+ "\u23EE"
5360
+ ), /* @__PURE__ */ React17__default.default.createElement(
5361
+ "button",
5362
+ {
5363
+ type: "button",
5364
+ onClick: handlePlayPause,
5365
+ disabled: !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length,
5366
+ style: {
5367
+ background: "transparent",
5368
+ border: "1px solid #282828",
5369
+ color: "#FFF",
5370
+ borderRadius: "0.25rem",
5371
+ cursor: fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ? "pointer" : "not-allowed",
5372
+ padding: "0.25ch 0.5ch"
5373
+ }
5374
+ },
5375
+ isPlaying ? "\u23F8" : "\u25B6\uFE0F"
5376
+ ), /* @__PURE__ */ React17__default.default.createElement(
5377
+ "button",
5378
+ {
5379
+ type: "button",
5380
+ onClick: handleStepForward,
5381
+ disabled: !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length,
5382
+ style: {
5383
+ background: "transparent",
5384
+ border: "1px solid #282828",
5385
+ color: "#FFF",
5386
+ borderRadius: "0.25rem",
5387
+ cursor: fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ? "pointer" : "not-allowed",
5388
+ padding: "0.25ch 0.5ch"
5389
+ }
5390
+ },
5391
+ "\u23ED"
5392
+ ), /* @__PURE__ */ React17__default.default.createElement("span", { style: { color: "#A0A0A0", fontSize: "0.75rem" } }, timelineIndex >= 0 && fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.[timelineIndex]?.timestamp ? new Date(fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.[timelineIndex]?.timestamp ?? 0).toLocaleTimeString() : "--:--:--"), !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length && /* @__PURE__ */ React17__default.default.createElement("span", { style: { color: "#A0A0A0", fontSize: "0.75rem", marginLeft: "auto" } }, "No state changes recorded yet")), /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5393
+ display: "flex",
5394
+ alignItems: "center",
5395
+ gap: "0.25ch",
5396
+ height: "2ch",
5397
+ position: "relative"
5398
+ } }, (fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString()) ?? []).map((state, i) => {
5399
+ const isActive = i === timelineIndex;
5400
+ return /* @__PURE__ */ React17__default.default.createElement(
5401
+ "div",
5402
+ {
5403
+ key: state.timestamp,
5404
+ onClick: () => handleTimelineChange(i),
5405
+ onKeyDown: (e) => {
5406
+ if (e.key === "Enter" || e.key === " ") {
5407
+ handleTimelineChange(i);
5408
+ }
5409
+ },
5410
+ role: "button",
5411
+ tabIndex: 0,
5412
+ style: {
5413
+ flex: 1,
5414
+ height: "100%",
5415
+ background: isActive ? "#FFC799" : "#282828",
5416
+ cursor: "pointer",
5417
+ position: "relative",
5418
+ borderRadius: "0.125rem",
5419
+ transition: "background-color 150ms",
5420
+ outline: "none"
5421
+ },
5422
+ onMouseEnter: (e) => {
5423
+ const target = e.currentTarget;
5424
+ const tooltip2 = document.createElement("div");
5425
+ tooltip2.style.position = "absolute";
5426
+ tooltip2.style.bottom = "100%";
5427
+ tooltip2.style.left = "50%";
5428
+ tooltip2.style.transform = "translateX(-50%)";
5429
+ tooltip2.style.background = "#161616";
5430
+ tooltip2.style.color = "#FFF";
5431
+ tooltip2.style.padding = "0.5ch";
5432
+ tooltip2.style.borderRadius = "0.25rem";
5433
+ tooltip2.style.fontSize = "0.75rem";
5434
+ tooltip2.style.whiteSpace = "nowrap";
5435
+ tooltip2.style.pointerEvents = "none";
5436
+ tooltip2.style.border = "1px solid #282828";
5437
+ tooltip2.style.zIndex = "1000";
5438
+ const changes = [];
5439
+ const states = fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString());
5440
+ const prevState = i > 0 && states ? states[i - 1] : null;
5441
+ if (prevState) {
5442
+ const propChanges = Object.keys(state.props).filter(
5443
+ (key) => state.props[key] !== prevState.props[key]
5444
+ );
5445
+ if (propChanges.length > 0) {
5446
+ changes.push(`Props: ${propChanges.join(", ")}`);
5447
+ }
5448
+ const hookChanges = Object.keys(state.hookState).filter(
5449
+ (key) => state.hookState[key] !== prevState.hookState[key]
5450
+ );
5451
+ if (hookChanges.length > 0) {
5452
+ changes.push(`State: ${hookChanges.join(", ")}`);
5453
+ }
5454
+ }
5455
+ tooltip2.textContent = changes.length > 0 ? changes.join(" | ") : prevState ? "No changes" : "Initial state";
5456
+ target.appendChild(tooltip2);
5457
+ },
5458
+ onMouseLeave: (e) => {
5459
+ const tooltip2 = e.currentTarget.querySelector("div");
5460
+ if (tooltip2) {
5461
+ tooltip2.remove();
5462
+ }
5463
+ }
5464
+ }
5465
+ );
5466
+ }), !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length && /* @__PURE__ */ React17__default.default.createElement("div", { style: {
5467
+ flex: 1,
5468
+ height: "100%",
5469
+ background: "#282828",
5470
+ borderRadius: "0.125rem",
5471
+ opacity: 0.5
5472
+ } })), /* @__PURE__ */ React17__default.default.createElement(
5473
+ "input",
5474
+ {
5475
+ type: "range",
5476
+ min: 0,
5477
+ max: (fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ?? 1) - 1,
5478
+ value: timelineIndex,
5479
+ onChange: (e) => handleTimelineChange(Number(e.target.value)),
5480
+ disabled: !fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length,
5481
+ style: {
5482
+ width: "100%",
5483
+ accentColor: "#FFC799",
5484
+ opacity: fiberStates.get(chunk7H6RTVXX_cjs.getFiberId(fiber).toString())?.length ? 1 : 0.5
5485
+ }
5486
+ }
5487
+ )));
5094
5488
  }
5095
5489
  );
5096
5490
  var Inspector2 = React17__default.default.memo(
@@ -5108,17 +5502,9 @@ var Inspector2 = React17__default.default.memo(
5108
5502
  const [fiberHistory, setFiberHistory] = React17.useState([]);
5109
5503
  const getFiberForDisplay = React17.useCallback(() => {
5110
5504
  if (selectedFiber) return selectedFiber;
5111
- const fiber2 = chunkA425RZH5_cjs.getFiberFromHostInstance(element);
5505
+ const fiber2 = chunk7H6RTVXX_cjs.getFiberFromHostInstance(element);
5112
5506
  return fiber2;
5113
5507
  }, [selectedFiber, element]);
5114
- const handlePropertyHover = (_e, propName) => {
5115
- if (!isDialogMode) return;
5116
- const explanation = FIBER_PROP_EXPLANATIONS[propName];
5117
- setTooltip(explanation || null);
5118
- };
5119
- const handlePropertyLeave = () => {
5120
- setTooltip(null);
5121
- };
5122
5508
  const handleFiberSelect = (fiber2) => {
5123
5509
  if (fiber2 !== selectedFiber) {
5124
5510
  if (!isDialogMode) {
@@ -5169,15 +5555,15 @@ var Inspector2 = React17__default.default.memo(
5169
5555
  React17.useEffect(() => {
5170
5556
  const handleMouseMove = (event) => {
5171
5557
  if (isDialogMode) return;
5172
- const isActive2 = chunkA425RZH5_cjs.isInstrumentationActive() || chunkA425RZH5_cjs.hasRDTHook();
5558
+ const isActive2 = chunk7H6RTVXX_cjs.isInstrumentationActive() || chunk7H6RTVXX_cjs.hasRDTHook();
5173
5559
  if (!isActive2) {
5174
5560
  setIsActive(false);
5175
5561
  return;
5176
5562
  }
5177
5563
  if (!dangerouslyRunInProduction) {
5178
- const rdtHook = chunkA425RZH5_cjs.getRDTHook();
5564
+ const rdtHook = chunk7H6RTVXX_cjs.getRDTHook();
5179
5565
  for (const renderer of rdtHook.renderers.values()) {
5180
- const buildType = chunkA425RZH5_cjs.detectReactBuildType(renderer);
5566
+ const buildType = chunk7H6RTVXX_cjs.detectReactBuildType(renderer);
5181
5567
  if (buildType === "production") {
5182
5568
  setIsActive(false);
5183
5569
  return;
@@ -5238,7 +5624,7 @@ var Inspector2 = React17__default.default.memo(
5238
5624
  }, [rect]);
5239
5625
  React17.useEffect(() => {
5240
5626
  if (selectedFiber) {
5241
- const element2 = chunkA425RZH5_cjs.getNearestHostFiber(selectedFiber)?.stateNode;
5627
+ const element2 = chunk7H6RTVXX_cjs.getNearestHostFiber(selectedFiber)?.stateNode;
5242
5628
  if (element2) {
5243
5629
  setElement(element2);
5244
5630
  setRect(element2.getBoundingClientRect());
@@ -5256,7 +5642,7 @@ var Inspector2 = React17__default.default.memo(
5256
5642
  const fiber = getFiberForDisplay();
5257
5643
  if (!fiber) return null;
5258
5644
  let foundInspect = false;
5259
- chunkA425RZH5_cjs.traverseFiber(
5645
+ chunk7H6RTVXX_cjs.traverseFiber(
5260
5646
  fiber,
5261
5647
  (innerFiber) => {
5262
5648
  if (innerFiber.type === Inspector2) {
@@ -5291,7 +5677,7 @@ var Inspector2 = React17__default.default.memo(
5291
5677
  backgroundColor: "rgba(0, 0, 0, 0.7)",
5292
5678
  zIndex: 999
5293
5679
  } : {};
5294
- const fiberStack = fiber ? chunkA425RZH5_cjs.getFiberStack(fiber) : [];
5680
+ const fiberStack = fiber ? chunk7H6RTVXX_cjs.getFiberStack(fiber) : [];
5295
5681
  return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, null, isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
5296
5682
  "div",
5297
5683
  {
@@ -5352,7 +5738,7 @@ var Inspector2 = React17__default.default.memo(
5352
5738
  margin: 0
5353
5739
  }
5354
5740
  },
5355
- `<${typeof fiber.type === "string" ? fiber.type : chunkA425RZH5_cjs.getDisplayName(fiber.type) || "unknown"}>`,
5741
+ `<${typeof fiber.type === "string" ? fiber.type : chunk7H6RTVXX_cjs.getDisplayName(fiber.type) || "unknown"}>`,
5356
5742
  !isDialogMode && /* @__PURE__ */ React17__default.default.createElement(
5357
5743
  "span",
5358
5744
  {
@@ -5381,9 +5767,9 @@ var Inspector2 = React17__default.default.memo(
5381
5767
  }
5382
5768
  },
5383
5769
  fiberStack.reverse().map((f, i, arr) => {
5384
- const name = typeof f.type === "string" ? f.type : chunkA425RZH5_cjs.getDisplayName(f.type) || "unknown";
5770
+ const name = typeof f.type === "string" ? f.type : chunk7H6RTVXX_cjs.getDisplayName(f.type) || "unknown";
5385
5771
  if (!name) return null;
5386
- return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, { key: chunkA425RZH5_cjs.getFiberId(f) }, /* @__PURE__ */ React17__default.default.createElement(
5772
+ return /* @__PURE__ */ React17__default.default.createElement(React17__default.default.Fragment, { key: chunk7H6RTVXX_cjs.getFiberId(f) }, /* @__PURE__ */ React17__default.default.createElement(
5387
5773
  BreadcrumbButton,
5388
5774
  {
5389
5775
  name,
@@ -5392,7 +5778,7 @@ var Inspector2 = React17__default.default.memo(
5392
5778
  setFiberHistory((prev) => [...prev, selectedFiber]);
5393
5779
  }
5394
5780
  setSelectedFiber(f);
5395
- const element2 = chunkA425RZH5_cjs.getNearestHostFiber(f)?.stateNode;
5781
+ const element2 = chunk7H6RTVXX_cjs.getNearestHostFiber(f)?.stateNode;
5396
5782
  if (element2) {
5397
5783
  setElement(element2);
5398
5784
  setRect(element2.getBoundingClientRect());
@@ -5404,7 +5790,7 @@ var Inspector2 = React17__default.default.memo(
5404
5790
  setFiberHistory((prev) => [...prev, selectedFiber]);
5405
5791
  }
5406
5792
  setSelectedFiber(f);
5407
- const element2 = chunkA425RZH5_cjs.getNearestHostFiber(f)?.stateNode;
5793
+ const element2 = chunk7H6RTVXX_cjs.getNearestHostFiber(f)?.stateNode;
5408
5794
  if (element2) {
5409
5795
  setElement(element2);
5410
5796
  setRect(element2.getBoundingClientRect());
@@ -5418,58 +5804,12 @@ var Inspector2 = React17__default.default.memo(
5418
5804
  fiber && /* @__PURE__ */ React17__default.default.createElement(
5419
5805
  FiberGraph,
5420
5806
  {
5421
- key: chunkA425RZH5_cjs.getFiberId(fiber),
5807
+ key: chunk7H6RTVXX_cjs.getFiberId(fiber),
5422
5808
  fiber,
5423
5809
  onFiberSelect: handleFiberSelect,
5424
5810
  isDialogMode
5425
5811
  }
5426
5812
  ),
5427
- /* @__PURE__ */ React17__default.default.createElement(
5428
- "div",
5429
- {
5430
- onMouseLeave: handlePropertyLeave,
5431
- style: {
5432
- flex: isDialogMode ? 1 : "none",
5433
- overflow: "auto",
5434
- marginTop: "1ch",
5435
- borderTop: "1px solid #282828",
5436
- paddingTop: "1ch"
5437
- }
5438
- },
5439
- /* @__PURE__ */ React17__default.default.createElement(
5440
- Inspector,
5441
- {
5442
- theme: theme3,
5443
- data: fiber,
5444
- expandLevel: isDialogMode ? 1 : 0,
5445
- table: false,
5446
- nodeRenderer: (props) => {
5447
- const Component = props.depth === 0 ? ObjectRootLabel : ObjectLabel;
5448
- return /* @__PURE__ */ React17__default.default.createElement(
5449
- "span",
5450
- {
5451
- onMouseEnter: (e) => handlePropertyHover(e, props.name),
5452
- onMouseLeave: handlePropertyLeave,
5453
- style: {
5454
- cursor: FIBER_PROP_EXPLANATIONS[props.name] ? "help" : "default",
5455
- padding: "1px 0",
5456
- display: "inline-block",
5457
- fontWeight: FIBER_PROP_EXPLANATIONS[props.name] ? 500 : "normal"
5458
- }
5459
- },
5460
- /* @__PURE__ */ React17__default.default.createElement(
5461
- Component,
5462
- {
5463
- name: props.name,
5464
- data: props.data,
5465
- isNonenumerable: props.isNonenumerable
5466
- }
5467
- )
5468
- );
5469
- }
5470
- }
5471
- )
5472
- ),
5473
5813
  tooltip && /* @__PURE__ */ React17__default.default.createElement(
5474
5814
  "div",
5475
5815
  {