@plitzi/sdk-dev-tools 0.32.0 → 0.32.2

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.
Files changed (123) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/DevToolsContainer.d.ts +1 -1
  3. package/dist/DevToolsContextProvider.d.ts +1 -1
  4. package/dist/components/DevToolsPanel/DevToolsBody.d.ts +1 -1
  5. package/dist/components/DevToolsPanel/DevToolsBody.mjs +24 -22
  6. package/dist/components/DevToolsPanel/DevToolsButton.d.ts +1 -1
  7. package/dist/components/DevToolsPanel/DevToolsHeader.d.ts +1 -1
  8. package/dist/components/DevToolsPanel/DevToolsHeader.mjs +5 -0
  9. package/dist/components/DevToolsPanel/DevToolsPanel.d.ts +1 -1
  10. package/dist/components/DevToolsPanel/DevToolsPanel.mjs +19 -12
  11. package/dist/components/DevToolsPanel/DevToolsSubHeader.d.ts +1 -1
  12. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsAttributes.d.ts +1 -1
  13. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsDefinition.d.ts +1 -1
  14. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsValue.d.ts +1 -1
  15. package/dist/components/DevToolsPanel/tabs/ElementsViewer/DetailsValue.mjs +8 -8
  16. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementDetails.d.ts +1 -1
  17. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsList.d.ts +1 -1
  18. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsListItem.d.ts +1 -1
  19. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsViewer.d.ts +1 -1
  20. package/dist/components/DevToolsPanel/tabs/ElementsViewer/ElementsViewer.mjs +6 -6
  21. package/dist/components/DevToolsPanel/tabs/HistoryViewer/HistoryViewer.d.ts +1 -1
  22. package/dist/components/DevToolsPanel/tabs/HistoryViewer/HistoryViewer.mjs +1 -1
  23. package/dist/components/DevToolsPanel/tabs/HistoryViewer/components/HistoryEntryItem/HistoryEntryItem.d.ts +1 -1
  24. package/dist/components/DevToolsPanel/tabs/HistoryViewer/components/HistoryToolbar/HistoryToolbar.d.ts +1 -1
  25. package/dist/components/DevToolsPanel/tabs/Logs/Log.d.ts +1 -1
  26. package/dist/components/DevToolsPanel/tabs/Logs/LogStatus.d.ts +1 -1
  27. package/dist/components/DevToolsPanel/tabs/Logs/LogStatusIcon.d.ts +1 -1
  28. package/dist/components/DevToolsPanel/tabs/Logs/Logs.d.ts +1 -1
  29. package/dist/components/DevToolsPanel/tabs/Logs/Logs.mjs +3 -1
  30. package/dist/components/DevToolsPanel/tabs/Logs/LogsSummary/LogsSummary.d.ts +1 -1
  31. package/dist/components/DevToolsPanel/tabs/Logs/LogsSummary/LogsSummaryItem.d.ts +1 -1
  32. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/BodyContent.d.ts +1 -1
  33. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/BodyHeader.d.ts +1 -1
  34. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/BodyHeader.mjs +15 -15
  35. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/ExecutionTree/ExecutionTree.d.ts +1 -1
  36. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/ExecutionTree/ExecutionTreeNode.d.ts +1 -1
  37. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/InteractionNode/InteractionNode.d.ts +1 -1
  38. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/InteractionNode/NodeHeader.d.ts +1 -1
  39. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/InteractionNode/NodeMetadata.d.ts +1 -1
  40. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/InteractionNode/NodeWhen.d.ts +1 -1
  41. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteraction.d.ts +1 -1
  42. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteractionBody.d.ts +1 -1
  43. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogInteraction/LogInteractionHeader.d.ts +1 -1
  44. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogNavigation/LogNavigation.d.ts +1 -1
  45. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogNavigation/LogNavigationBody.d.ts +1 -1
  46. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogNavigation/LogNavigationBody.mjs +4 -4
  47. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogNavigation/LogNavigationHeader.d.ts +1 -1
  48. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogStore/LogStore.d.ts +1 -1
  49. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogStore/LogStoreBody.d.ts +1 -1
  50. package/dist/components/DevToolsPanel/tabs/Logs/categories/LogStore/LogStoreHeader.d.ts +1 -1
  51. package/dist/components/DevToolsPanel/tabs/PluginsViewer/PluginDetails.d.ts +1 -1
  52. package/dist/components/DevToolsPanel/tabs/PluginsViewer/PluginsViewer.d.ts +1 -1
  53. package/dist/components/DevToolsPanel/tabs/StoreViewer/StoreViewer.d.ts +1 -1
  54. package/dist/components/DevToolsPanel/tabs/StoreViewer/StoreViewer.mjs +3 -3
  55. package/dist/components/DevToolsPanel/tabs/TracingViewer/TracingViewer.d.ts +2 -0
  56. package/dist/components/DevToolsPanel/tabs/TracingViewer/TracingViewer.mjs +159 -0
  57. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitCause/CommitCause.d.ts +10 -0
  58. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitCause/CommitCause.mjs +52 -0
  59. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitCause/index.d.ts +1 -0
  60. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitCause/index.mjs +2 -0
  61. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitStrip/CommitStrip.d.ts +9 -0
  62. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitStrip/CommitStrip.mjs +70 -0
  63. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitStrip/index.d.ts +1 -0
  64. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/CommitStrip/index.mjs +2 -0
  65. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DetailSidebar/DetailSidebar.d.ts +9 -0
  66. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DetailSidebar/DetailSidebar.mjs +202 -0
  67. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DetailSidebar/index.d.ts +1 -0
  68. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DetailSidebar/index.mjs +2 -0
  69. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DurationLegend/DurationLegend.d.ts +2 -0
  70. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DurationLegend/DurationLegend.mjs +38 -0
  71. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DurationLegend/index.d.ts +1 -0
  72. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/DurationLegend/index.mjs +2 -0
  73. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/FlameFrame.d.ts +12 -0
  74. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/FlameFrame.mjs +29 -0
  75. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/Flamegraph.d.ts +13 -0
  76. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/Flamegraph.mjs +105 -0
  77. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/index.d.ts +1 -0
  78. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/Flamegraph/index.mjs +2 -0
  79. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotSidebar/HotspotSidebar.d.ts +9 -0
  80. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotSidebar/HotspotSidebar.mjs +124 -0
  81. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotSidebar/index.d.ts +1 -0
  82. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotSidebar/index.mjs +2 -0
  83. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotsList/HotspotsList.d.ts +10 -0
  84. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotsList/HotspotsList.mjs +139 -0
  85. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotsList/index.d.ts +1 -0
  86. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/HotspotsList/index.mjs +2 -0
  87. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/MetricToggle/MetricToggle.d.ts +8 -0
  88. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/MetricToggle/MetricToggle.mjs +30 -0
  89. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/MetricToggle/index.d.ts +1 -0
  90. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/MetricToggle/index.mjs +2 -0
  91. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/RankedList/RankedList.d.ts +13 -0
  92. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/RankedList/RankedList.mjs +157 -0
  93. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/RankedList/index.d.ts +1 -0
  94. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/RankedList/index.mjs +2 -0
  95. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarEmpty.d.ts +2 -0
  96. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarEmpty.mjs +11 -0
  97. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarShell.d.ts +6 -0
  98. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarShell.mjs +26 -0
  99. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/index.d.ts +2 -0
  100. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/index.mjs +3 -0
  101. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarToggle/SidebarToggle.d.ts +7 -0
  102. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarToggle/SidebarToggle.mjs +12 -0
  103. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarToggle/index.d.ts +1 -0
  104. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/SidebarToggle/index.mjs +2 -0
  105. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/TracingToolbar/TracingToolbar.d.ts +11 -0
  106. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/TracingToolbar/TracingToolbar.mjs +66 -0
  107. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/TracingToolbar/index.d.ts +1 -0
  108. package/dist/components/DevToolsPanel/tabs/TracingViewer/components/TracingToolbar/index.mjs +2 -0
  109. package/dist/components/DevToolsPanel/tabs/TracingViewer/helpers.d.ts +86 -0
  110. package/dist/components/DevToolsPanel/tabs/TracingViewer/helpers.mjs +175 -0
  111. package/dist/components/DevToolsPanel/tabs/TracingViewer/index.d.ts +1 -0
  112. package/dist/components/DevToolsPanel/tabs/TracingViewer/index.mjs +2 -0
  113. package/dist/components/DevToolsPanel/tabs/TracingViewer/useHighlightElement.d.ts +2 -0
  114. package/dist/components/DevToolsPanel/tabs/TracingViewer/useHighlightElement.mjs +11 -0
  115. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariableValue.d.ts +1 -1
  116. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesList.d.ts +1 -1
  117. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesListItem.d.ts +1 -1
  118. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesStyleList.d.ts +1 -1
  119. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesViewer.d.ts +1 -1
  120. package/dist/components/DevToolsPanel/tabs/VariablesViewer/VariablesViewer.mjs +5 -5
  121. package/dist/components/List/List.d.ts +1 -1
  122. package/dist/components/List/ListItem.d.ts +1 -1
  123. package/package.json +181 -10
@@ -0,0 +1,157 @@
1
+ import { COMMIT_ORIGIN_LABEL as e, durationColor as t, formatMs as n, formatPercent as r, rowDuration as i } from "../../helpers.mjs";
2
+ import a from "../CommitCause/CommitCause.mjs";
3
+ import o from "../DetailSidebar/DetailSidebar.mjs";
4
+ import s from "../DurationLegend/DurationLegend.mjs";
5
+ import c from "../SidebarShell/SidebarShell.mjs";
6
+ import l from "../SidebarShell/SidebarEmpty.mjs";
7
+ import u from "../SidebarToggle/SidebarToggle.mjs";
8
+ import d from "../MetricToggle/MetricToggle.mjs";
9
+ import f from "@plitzi/plitzi-ui/hooks/useStorage";
10
+ import p from "clsx";
11
+ import { useCallback as m, useEffect as h, useMemo as g, useRef as _ } from "react";
12
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
13
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/components/RankedList/RankedList.tsx
14
+ var b = ({ commit: b, model: x, active: S, origin: C, sidebarOpen: w, onSelectElement: T, onToggleSidebar: E }) => {
15
+ let [D, O] = f("plitzi-sdk.dev-tools.tracing.metric", "self"), k = _(null), A = g(() => x.nodes.filter((e) => e.state === "rendered").sort((e, t) => i(t, D) - i(e, D)), [x, D]), j = g(() => A.reduce((e, t) => Math.max(e, i(t, D)), 0) || 1, [A, D]), M = g(() => A.findIndex((e) => e.id === S?.id), [A, S]);
16
+ h(() => k.current?.scrollIntoView({ block: "nearest" }), [S]);
17
+ let N = m((e) => {
18
+ if (e.key !== "ArrowUp" && e.key !== "ArrowDown" || A.length === 0) return;
19
+ e.preventDefault();
20
+ let t = M === -1 ? 0 : M, n = Math.max(0, Math.min(A.length - 1, t + (e.key === "ArrowUp" ? -1 : 1)));
21
+ T(A[n].id);
22
+ }, [
23
+ A,
24
+ M,
25
+ T
26
+ ]);
27
+ return /* @__PURE__ */ y("div", {
28
+ className: "flex min-h-0 flex-1 flex-col overflow-hidden",
29
+ children: [
30
+ /* @__PURE__ */ y("div", {
31
+ className: "flex shrink-0 flex-wrap items-center gap-x-2 gap-y-1 border-b border-zinc-200 px-2 py-1.5 text-[10px] text-zinc-500 dark:border-zinc-800 dark:text-zinc-400",
32
+ children: [
33
+ /* @__PURE__ */ y("span", {
34
+ className: "font-medium text-zinc-700 dark:text-zinc-200",
35
+ children: ["Commit #", b.commitId]
36
+ }),
37
+ C !== "update" && /* @__PURE__ */ v("span", {
38
+ className: "rounded bg-violet-100 px-1 text-[9px] font-medium text-violet-700 uppercase dark:bg-violet-500/20 dark:text-violet-300",
39
+ children: e[C]
40
+ }),
41
+ /* @__PURE__ */ y("span", { children: [n(b.duration), " total"] }),
42
+ /* @__PURE__ */ y("span", {
43
+ title: "Elements that re-rendered, of all in this commit's subtree",
44
+ children: [
45
+ "· ",
46
+ x.renderedCount,
47
+ " of ",
48
+ b.elementCount,
49
+ " rendered"
50
+ ]
51
+ }),
52
+ /* @__PURE__ */ v(a, {
53
+ commit: b,
54
+ model: x,
55
+ active: S,
56
+ onSelectElement: T
57
+ }),
58
+ /* @__PURE__ */ v(d, {
59
+ className: "ml-auto",
60
+ metric: D,
61
+ onChange: O
62
+ }),
63
+ /* @__PURE__ */ v(u, {
64
+ open: w,
65
+ onToggle: E
66
+ })
67
+ ]
68
+ }),
69
+ /* @__PURE__ */ y("div", {
70
+ className: "flex min-h-0 flex-1 overflow-hidden",
71
+ children: [/* @__PURE__ */ y("div", {
72
+ role: "listbox",
73
+ "aria-label": "Rendered elements, ranked",
74
+ tabIndex: 0,
75
+ onKeyDown: N,
76
+ className: "min-h-0 flex-1 overflow-auto outline-none focus-visible:ring-1 focus-visible:ring-violet-400",
77
+ children: [A.length === 0 && /* @__PURE__ */ v("div", {
78
+ className: "px-2 py-3 text-center text-[10px] text-zinc-400 dark:text-zinc-500",
79
+ children: "No element re-rendered in this commit"
80
+ }), A.map((e) => {
81
+ let a = i(e, D), o = e.id === S?.id, s = x.totalSelf > 0 ? e.selfDuration / x.totalSelf : 0, c = e.phase !== "mount", l = c && (e.changedProps === void 0 || e.changedProps.length === 0 && e.trigger), u = c && e.changedProps?.length === 0 && !e.trigger, d = !!e.changedProps?.length && e.changedProps.every((e) => e.ref), f = e.changedProps?.map((e) => e.key).join(", "), m = f || (l ? "internal state / hook" : e.type);
82
+ return /* @__PURE__ */ y("button", {
83
+ ref: o ? k : void 0,
84
+ role: "option",
85
+ "aria-selected": o,
86
+ onClick: () => T(e.id === S?.id ? void 0 : e.id),
87
+ title: `${e.name} (${e.type})\n${n(e.selfDuration)} self · ${n(e.actualDuration)} total · ${n(e.baseDuration)} base\nphase: ${e.phase ?? "update"} · ${r(s)} of render work${u ? "\nno input changed — re-rendered by an ancestor" : l ? "\nno input changed — internal state/hook/context" : d ? `\nreference-only change (missing memo): ${f}` : f ? `\nchanged: ${f}` : ""}`,
88
+ className: p("flex w-full items-center gap-2 px-2 py-0.5 text-left", {
89
+ "bg-violet-500/10": o,
90
+ "hover:bg-zinc-50 dark:hover:bg-zinc-800/50": !o
91
+ }),
92
+ children: [
93
+ /* @__PURE__ */ y("span", {
94
+ className: "flex w-40 shrink-0 flex-col",
95
+ children: [/* @__PURE__ */ y("span", {
96
+ className: "flex items-center gap-1 text-zinc-700 dark:text-zinc-200",
97
+ children: [
98
+ e.trigger && /* @__PURE__ */ v("i", {
99
+ className: "fa-solid fa-bolt shrink-0 text-[9px] text-violet-500",
100
+ title: "Trigger — a root cause of this commit"
101
+ }),
102
+ (u || d) && /* @__PURE__ */ v("i", {
103
+ className: "fa-solid fa-triangle-exclamation shrink-0 text-[9px] text-amber-500",
104
+ title: u ? "Re-rendered without any input change — possible unnecessary re-render" : "Only reference-changed props (shallow-equal content) — likely a missing memo"
105
+ }),
106
+ !e.visible && /* @__PURE__ */ v("i", {
107
+ className: "fa-solid fa-eye-slash shrink-0 text-[9px] text-amber-500",
108
+ title: "Hidden (visibility)"
109
+ }),
110
+ /* @__PURE__ */ v("span", {
111
+ className: "truncate",
112
+ children: e.name
113
+ })
114
+ ]
115
+ }), /* @__PURE__ */ v("span", {
116
+ className: "truncate text-[9px] text-zinc-400 dark:text-zinc-500",
117
+ children: m
118
+ })]
119
+ }),
120
+ /* @__PURE__ */ v("span", {
121
+ className: p("rounded px-1 text-[9px] uppercase", {
122
+ "bg-sky-500/15 text-sky-600 dark:text-sky-400": e.phase === "mount",
123
+ "bg-amber-500/15 text-amber-600 dark:text-amber-400": e.phase !== "mount"
124
+ }),
125
+ children: e.phase === "mount" ? "mount" : "update"
126
+ }),
127
+ /* @__PURE__ */ v("div", {
128
+ className: "h-2 flex-1 overflow-hidden rounded-sm bg-zinc-100 dark:bg-zinc-800",
129
+ children: /* @__PURE__ */ v("div", {
130
+ style: { width: `${Math.max(2, Math.round(a / j * 100))}%` },
131
+ className: p("h-full rounded-sm", t(a))
132
+ })
133
+ }),
134
+ /* @__PURE__ */ v("span", {
135
+ className: "w-10 shrink-0 text-right text-[10px] text-zinc-400 tabular-nums dark:text-zinc-500",
136
+ title: "Share of this commit's total render work",
137
+ children: r(s)
138
+ }),
139
+ /* @__PURE__ */ v("span", {
140
+ className: "w-12 shrink-0 text-right text-zinc-500 tabular-nums dark:text-zinc-400",
141
+ children: n(a)
142
+ })
143
+ ]
144
+ }, e.id);
145
+ })]
146
+ }), w && /* @__PURE__ */ v(c, { children: S ? /* @__PURE__ */ v(o, {
147
+ node: S,
148
+ commit: b,
149
+ model: x
150
+ }) : /* @__PURE__ */ v(l, {}) })]
151
+ }),
152
+ /* @__PURE__ */ v(s, {})
153
+ ]
154
+ });
155
+ };
156
+ //#endregion
157
+ export { b as default };
@@ -0,0 +1 @@
1
+ export { default } from './RankedList';
@@ -0,0 +1,2 @@
1
+ import e from "./RankedList.mjs";
2
+ export { e as default };
@@ -0,0 +1,2 @@
1
+ declare const SidebarEmpty: () => import("react").JSX.Element;
2
+ export default SidebarEmpty;
@@ -0,0 +1,11 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarEmpty.tsx
3
+ var n = () => /* @__PURE__ */ t("div", {
4
+ className: "flex h-full flex-col items-center justify-center gap-2 px-2 text-center text-zinc-400 dark:text-zinc-500",
5
+ children: [/* @__PURE__ */ e("i", { className: "fa-solid fa-arrow-pointer text-xl opacity-30" }), /* @__PURE__ */ e("span", {
6
+ className: "text-[10px] leading-relaxed",
7
+ children: "Select an element to inspect its timing and why it rendered"
8
+ })]
9
+ });
10
+ //#endregion
11
+ export { n as default };
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export type SidebarShellProps = {
3
+ children: ReactNode;
4
+ };
5
+ declare const SidebarShell: ({ children }: SidebarShellProps) => import("react").JSX.Element;
6
+ export default SidebarShell;
@@ -0,0 +1,26 @@
1
+ import e from "@plitzi/plitzi-ui/ContainerResizable";
2
+ import t from "@plitzi/plitzi-ui/hooks/useStorage";
3
+ import { useCallback as n } from "react";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/components/SidebarShell/SidebarShell.tsx
6
+ var i = 180, a = 480, o = 224, s = ({ children: s }) => {
7
+ let [c, l] = t("plitzi-sdk.dev-tools.tracing.sidebar-width", o);
8
+ return /* @__PURE__ */ r(e, {
9
+ className: "shrink-0 border-l border-zinc-200 dark:border-zinc-800",
10
+ resizeHandles: ["w"],
11
+ axis: "x",
12
+ autoGrow: !1,
13
+ width: c,
14
+ minConstraintsX: i,
15
+ maxConstraintsX: a,
16
+ onChange: n((e) => {
17
+ Number.isFinite(e) && l(e);
18
+ }, [l]),
19
+ children: /* @__PURE__ */ r("aside", {
20
+ className: "flex h-full w-full flex-col gap-1.5 overflow-auto bg-zinc-50 px-3 py-2 text-[10px] dark:bg-zinc-900/50",
21
+ children: s
22
+ })
23
+ });
24
+ };
25
+ //#endregion
26
+ export { s as default };
@@ -0,0 +1,2 @@
1
+ export { default } from './SidebarShell';
2
+ export { default as SidebarEmpty } from './SidebarEmpty';
@@ -0,0 +1,3 @@
1
+ import e from "./SidebarShell.mjs";
2
+ import t from "./SidebarEmpty.mjs";
3
+ export { t as SidebarEmpty, e as default };
@@ -0,0 +1,7 @@
1
+ export type SidebarToggleProps = {
2
+ open: boolean;
3
+ onToggle: () => void;
4
+ className?: string;
5
+ };
6
+ declare const SidebarToggle: ({ open, onToggle, className }: SidebarToggleProps) => import("react").JSX.Element;
7
+ export default SidebarToggle;
@@ -0,0 +1,12 @@
1
+ import e from "clsx";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/components/SidebarToggle/SidebarToggle.tsx
4
+ var n = ({ open: n, onToggle: r, className: i }) => /* @__PURE__ */ t("button", {
5
+ onClick: r,
6
+ title: n ? "Hide detail panel" : "Show detail panel",
7
+ "aria-pressed": n,
8
+ className: e("flex h-4 w-4 items-center justify-center rounded text-[10px]", n ? "bg-violet-500/15 text-violet-600 dark:text-violet-300" : "text-zinc-400 hover:bg-zinc-500/10 hover:text-zinc-600 dark:text-zinc-500 dark:hover:text-zinc-300", i),
9
+ children: /* @__PURE__ */ t("i", { className: "fa-solid fa-circle-info" })
10
+ });
11
+ //#endregion
12
+ export { n as default };
@@ -0,0 +1 @@
1
+ export { default } from './SidebarToggle';
@@ -0,0 +1,2 @@
1
+ import e from "./SidebarToggle.mjs";
2
+ export { e as default };
@@ -0,0 +1,11 @@
1
+ import { TracingView } from '../../helpers';
2
+ export type TracingToolbarProps = {
3
+ view: TracingView;
4
+ persist: boolean;
5
+ commitCount: number;
6
+ onClear: () => void;
7
+ onViewChange: (view: TracingView) => void;
8
+ onPersistChange: (persist: boolean) => void;
9
+ };
10
+ declare const TracingToolbar: ({ view, persist, commitCount, onClear, onViewChange, onPersistChange }: TracingToolbarProps) => import("react").JSX.Element;
11
+ export default TracingToolbar;
@@ -0,0 +1,66 @@
1
+ import e from "clsx";
2
+ import { useCallback as t } from "react";
3
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/components/TracingToolbar/TracingToolbar.tsx
5
+ var i = [
6
+ {
7
+ id: "ranked",
8
+ label: "Ranked",
9
+ icon: "fa-solid fa-ranking-star"
10
+ },
11
+ {
12
+ id: "flamegraph",
13
+ label: "Flamegraph",
14
+ icon: "fa-solid fa-fire"
15
+ },
16
+ {
17
+ id: "hotspots",
18
+ label: "Hotspots",
19
+ icon: "fa-solid fa-temperature-three-quarters"
20
+ }
21
+ ], a = ({ view: a, persist: o, commitCount: s, onClear: c, onViewChange: l, onPersistChange: u }) => {
22
+ let d = t((e) => () => l(e), [l]), f = t(() => u(!o), [o, u]);
23
+ return /* @__PURE__ */ r("div", {
24
+ className: "flex shrink-0 items-center gap-2 border-b border-zinc-200 bg-zinc-50 px-2 py-1.5 dark:border-zinc-800 dark:bg-zinc-900",
25
+ children: [/* @__PURE__ */ n("div", {
26
+ className: "flex items-stretch gap-1",
27
+ children: i.map((t) => {
28
+ let i = a === t.id;
29
+ return /* @__PURE__ */ r("button", {
30
+ onClick: d(t.id),
31
+ "aria-pressed": i,
32
+ className: e("flex h-6 items-center gap-1 rounded px-2 text-xs font-medium transition-colors", {
33
+ "bg-violet-500 text-white": i,
34
+ "text-zinc-600 hover:bg-zinc-200 dark:text-zinc-400 dark:hover:bg-zinc-700": !i
35
+ }),
36
+ children: [/* @__PURE__ */ n("i", { className: t.icon }), t.label]
37
+ }, t.id);
38
+ })
39
+ }), /* @__PURE__ */ r("div", {
40
+ className: "ml-auto flex items-center gap-2",
41
+ children: [
42
+ /* @__PURE__ */ r("span", {
43
+ className: "text-[10px] text-zinc-400 dark:text-zinc-500",
44
+ children: [s, " commits"]
45
+ }),
46
+ /* @__PURE__ */ r("button", {
47
+ onClick: f,
48
+ "aria-pressed": o,
49
+ title: "Keep the recorded commits when navigating to another page",
50
+ className: e("flex h-6 items-center gap-1 rounded px-2 text-xs font-medium transition-colors", {
51
+ "bg-violet-500 text-white": o,
52
+ "text-zinc-600 hover:bg-zinc-200 dark:text-zinc-300 dark:hover:bg-zinc-700": !o
53
+ }),
54
+ children: [/* @__PURE__ */ n("i", { className: "fa-solid fa-thumbtack" }), "Persist"]
55
+ }),
56
+ /* @__PURE__ */ r("button", {
57
+ onClick: c,
58
+ className: "flex h-6 items-center gap-1 rounded px-2 text-xs font-medium text-zinc-600 hover:bg-zinc-200 dark:text-zinc-300 dark:hover:bg-zinc-700",
59
+ children: [/* @__PURE__ */ n("i", { className: "fa-solid fa-trash" }), "Clear"]
60
+ })
61
+ ]
62
+ })]
63
+ });
64
+ };
65
+ //#endregion
66
+ export { a as default };
@@ -0,0 +1 @@
1
+ export { default } from './TracingToolbar';
@@ -0,0 +1,2 @@
1
+ import e from "./TracingToolbar.mjs";
2
+ export { e as default };
@@ -0,0 +1,86 @@
1
+ import { CommitEntry, Element, PropChange, RenderPhase, TracingTree } from '@plitzi/sdk-shared';
2
+ import { CSSProperties } from 'react';
3
+ export type TracingView = 'ranked' | 'flamegraph' | 'hotspots';
4
+ export type DurationMetric = 'self' | 'total';
5
+ type RenderState = 'rendered' | 'bubbled' | 'hatched';
6
+ export type FlameNode = {
7
+ id: string;
8
+ name: string;
9
+ type: string;
10
+ state: RenderState;
11
+ visible: boolean;
12
+ trigger: boolean;
13
+ phase?: RenderPhase;
14
+ actualDuration: number;
15
+ baseDuration: number;
16
+ selfDuration: number;
17
+ depth: number;
18
+ parentId?: string;
19
+ changedProps?: PropChange[];
20
+ x: number;
21
+ width: number;
22
+ };
23
+ export type FlameModel = {
24
+ nodes: FlameNode[];
25
+ maxDepth: number;
26
+ totalSelf: number;
27
+ renderedCount: number;
28
+ triggers: string[];
29
+ };
30
+ export type HotspotRow = {
31
+ id: string;
32
+ name: string;
33
+ type: string;
34
+ renders: number;
35
+ mounts: number;
36
+ totalSelf: number;
37
+ maxSelf: number;
38
+ avgSelf: number;
39
+ lastSelf: number;
40
+ };
41
+ export type CommitOrigin = 'ssr' | 'hydration' | 'mount' | 'mixed' | 'update';
42
+ export declare const SSR_COMMIT_ID = 0;
43
+ export declare const commitOrigin: (commit: CommitEntry, hydrated: boolean, isFirstReal: boolean) => CommitOrigin;
44
+ export declare const COMMIT_ORIGIN_LABEL: Record<CommitOrigin, string>;
45
+ export declare const COMMIT_ORIGIN_BADGE: Record<CommitOrigin, string>;
46
+ export declare const COMMIT_ORIGIN_LEGEND: readonly [{
47
+ readonly origin: "ssr";
48
+ readonly label: "SSR";
49
+ }, {
50
+ readonly origin: "hydration";
51
+ readonly label: "Hydration";
52
+ }, {
53
+ readonly origin: "mount";
54
+ readonly label: "Mount";
55
+ }, {
56
+ readonly origin: "mixed";
57
+ readonly label: "Mount+update";
58
+ }, {
59
+ readonly origin: "update";
60
+ readonly label: "Update";
61
+ }];
62
+ export declare const formatMs: (ms: number) => string;
63
+ export declare const formatPercent: (ratio: number) => string;
64
+ export declare const durationColor: (ms: number) => string;
65
+ export declare const DURATION_LEGEND: readonly [{
66
+ readonly color: "bg-sky-500";
67
+ readonly label: "<8ms";
68
+ }, {
69
+ readonly color: "bg-emerald-500";
70
+ readonly label: "8–16ms";
71
+ }, {
72
+ readonly color: "bg-amber-500";
73
+ readonly label: "16–50ms";
74
+ }, {
75
+ readonly color: "bg-red-500";
76
+ readonly label: "≥50ms";
77
+ }];
78
+ export declare const BUBBLED_COLOR = "bg-zinc-300 dark:bg-zinc-700";
79
+ export declare const HATCH_STYLE: CSSProperties;
80
+ export declare const frameColor: (node: FlameNode) => string;
81
+ export declare const frameTextColor: (node: FlameNode) => string;
82
+ export declare const elementVisible: (id: string, flat: Record<string, Element> | undefined) => boolean;
83
+ export declare const rowDuration: (node: FlameNode, metric: DurationMetric) => number;
84
+ export declare const buildFlameModel: (commit: CommitEntry, tree: TracingTree, flat: Record<string, Element> | undefined) => FlameModel;
85
+ export declare const buildHotspots: (commits: CommitEntry[], tree: TracingTree, flat: Record<string, Element> | undefined) => HotspotRow[];
86
+ export {};
@@ -0,0 +1,175 @@
1
+ import { get as e } from "@plitzi/plitzi-ui/helpers";
2
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/helpers.ts
3
+ var t = (e) => {
4
+ let t = 0, n = 0;
5
+ for (let r of e.elements) r.phase === "mount" ? t += 1 : n += 1;
6
+ return t > 0 && n === 0 ? "mount" : n > 0 && t === 0 ? "update" : "mixed";
7
+ }, n = (e, n, r) => {
8
+ if (e.commitId === 0) return "ssr";
9
+ let i = t(e);
10
+ return i === "mount" ? n && r ? "hydration" : "mount" : i;
11
+ }, r = {
12
+ ssr: "SSR render (server)",
13
+ hydration: "Hydration (SSR)",
14
+ mount: "Mount",
15
+ mixed: "Mount + update",
16
+ update: "Update"
17
+ }, i = {
18
+ ssr: "S",
19
+ hydration: "H",
20
+ mount: "M",
21
+ mixed: "±",
22
+ update: "·"
23
+ }, a = [
24
+ {
25
+ origin: "ssr",
26
+ label: "SSR"
27
+ },
28
+ {
29
+ origin: "hydration",
30
+ label: "Hydration"
31
+ },
32
+ {
33
+ origin: "mount",
34
+ label: "Mount"
35
+ },
36
+ {
37
+ origin: "mixed",
38
+ label: "Mount+update"
39
+ },
40
+ {
41
+ origin: "update",
42
+ label: "Update"
43
+ }
44
+ ], o = (e) => e < .1 ? "<0.1ms" : `${e.toFixed(1)}ms`, s = (e) => `${Math.round(e * 100)}%`, c = (e) => e >= 50 ? "bg-red-500" : e >= 16 ? "bg-amber-500" : e >= 8 ? "bg-emerald-500" : "bg-sky-500", l = [
45
+ {
46
+ color: "bg-sky-500",
47
+ label: "<8ms"
48
+ },
49
+ {
50
+ color: "bg-emerald-500",
51
+ label: "8–16ms"
52
+ },
53
+ {
54
+ color: "bg-amber-500",
55
+ label: "16–50ms"
56
+ },
57
+ {
58
+ color: "bg-red-500",
59
+ label: "≥50ms"
60
+ }
61
+ ], u = "bg-zinc-300 dark:bg-zinc-700", d = { backgroundImage: "repeating-linear-gradient(45deg, rgba(113,113,122,0.22) 0, rgba(113,113,122,0.22) 2px, transparent 2px, transparent 5px)" }, f = (e) => e.state === "rendered" ? c(e.selfDuration) : e.state === "bubbled" ? u : "bg-transparent", p = (e) => e.state === "bubbled" ? "text-zinc-600 dark:text-zinc-300" : e.state === "hatched" ? "text-zinc-400 dark:text-zinc-600" : c(e.selfDuration) === "bg-amber-500" ? "text-stone-900" : "text-white", m = (e, t) => {
62
+ let n = t?.[e];
63
+ if (!n) return e;
64
+ let { label: r, type: i } = n.definition;
65
+ return r || i || e;
66
+ }, h = (e, t) => t?.[e]?.definition.type ?? "unknown", g = (t, n) => {
67
+ let r = e(n?.[t], "definition.initialState.visibility", !0);
68
+ return r !== !1 && r !== "false";
69
+ }, _ = (e, t) => t === "self" ? e.selfDuration : e.actualDuration, v = .01, y = 1e-6, b = (e, t) => {
70
+ let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
71
+ for (let e of Object.keys(t)) n.set(e, t[e].parentId), r.set(e, t[e].baseDuration);
72
+ let i = new Map(e.elements.map((e) => [e.id, e])), a = /* @__PURE__ */ new Map();
73
+ for (let [e, t] of n) if (t !== void 0 && n.has(t)) {
74
+ let n = a.get(t);
75
+ n ? n.push(e) : a.set(t, [e]);
76
+ }
77
+ let o = /* @__PURE__ */ new Set();
78
+ for (let e of i.keys()) {
79
+ let t = e, r = n.get(e);
80
+ for (; r !== void 0 && n.has(r);) t = r, r = n.get(r);
81
+ o.add(t);
82
+ }
83
+ let s = (e) => {
84
+ let t = [], n = [...a.get(e) ?? []];
85
+ for (; n.length > 0;) {
86
+ let e = n.pop();
87
+ if (e === void 0) break;
88
+ i.has(e) ? t.push(e) : n.push(...a.get(e) ?? []);
89
+ }
90
+ return t;
91
+ }, c = (e) => {
92
+ let t = i.get(e);
93
+ if (!t) return 0;
94
+ let n = s(e).reduce((e, t) => e + (i.get(t)?.actualDuration ?? 0), 0);
95
+ return Math.max(0, t.actualDuration - n);
96
+ };
97
+ return {
98
+ rendered: i,
99
+ children: a,
100
+ base: r,
101
+ roots: [...o],
102
+ selfOf: c
103
+ };
104
+ }, x = (e, t, n) => {
105
+ let { rendered: r, children: i, base: a, roots: o, selfOf: s } = b(e, t), c = (e) => {
106
+ let t = a.get(e) ?? 0;
107
+ if (t > 0) return t;
108
+ let n = r.get(e)?.actualDuration ?? 0;
109
+ return n > 0 ? n : v;
110
+ }, l = [], u = [], d = 0, f = 0, p = 0, _ = (e, t, o, b, x, S) => {
111
+ let C = r.get(e), w = s(e), T = C ? w > y ? "rendered" : "bubbled" : "hatched", E = T === "rendered" && !S;
112
+ T === "rendered" && (f += w, p += 1), E && u.push(e), d = Math.max(d, x), l.push({
113
+ id: e,
114
+ name: m(e, n),
115
+ type: h(e, n),
116
+ state: T,
117
+ visible: g(e, n),
118
+ trigger: E,
119
+ phase: C?.phase,
120
+ actualDuration: C?.actualDuration ?? 0,
121
+ baseDuration: a.get(e) ?? C?.baseDuration ?? 0,
122
+ selfDuration: w,
123
+ depth: x,
124
+ parentId: t,
125
+ changedProps: C?.changedProps,
126
+ x: o,
127
+ width: b
128
+ });
129
+ let D = i.get(e) ?? [], O = D.map(c), k = O.reduce((e, t) => e + t, 0), A = Math.max(c(e), k) || 1, j = o;
130
+ D.forEach((t, n) => {
131
+ let r = (O[n] || v) / A * b;
132
+ _(t, e, j, r, x + 1, S || T === "rendered"), j += r;
133
+ });
134
+ }, x = o.map(c), S = x.reduce((e, t) => e + t, 0) || 1, C = 0;
135
+ return o.forEach((e, t) => {
136
+ let n = (x[t] || v) / S;
137
+ _(e, void 0, C, n, 0, !1), C += n;
138
+ }), {
139
+ nodes: l,
140
+ maxDepth: d,
141
+ totalSelf: f,
142
+ renderedCount: p,
143
+ triggers: u
144
+ };
145
+ }, S = (e, t, n) => {
146
+ let r = /* @__PURE__ */ new Map();
147
+ for (let n of e) {
148
+ let { selfOf: e } = b(n, t);
149
+ for (let t of n.elements) {
150
+ let n = e(t.id);
151
+ if (n <= y) continue;
152
+ let i = r.get(t.id) ?? {
153
+ renders: 0,
154
+ mounts: 0,
155
+ totalSelf: 0,
156
+ maxSelf: 0,
157
+ lastSelf: 0
158
+ };
159
+ i.renders += 1, i.mounts += +(t.phase === "mount"), i.totalSelf += n, i.maxSelf = Math.max(i.maxSelf, n), i.lastSelf = n, r.set(t.id, i);
160
+ }
161
+ }
162
+ return [...r.entries()].map(([e, t]) => ({
163
+ id: e,
164
+ name: m(e, n),
165
+ type: h(e, n),
166
+ renders: t.renders,
167
+ mounts: t.mounts,
168
+ totalSelf: t.totalSelf,
169
+ maxSelf: t.maxSelf,
170
+ avgSelf: t.totalSelf / t.renders,
171
+ lastSelf: t.lastSelf
172
+ }));
173
+ };
174
+ //#endregion
175
+ export { u as BUBBLED_COLOR, i as COMMIT_ORIGIN_BADGE, r as COMMIT_ORIGIN_LABEL, a as COMMIT_ORIGIN_LEGEND, l as DURATION_LEGEND, d as HATCH_STYLE, x as buildFlameModel, S as buildHotspots, n as commitOrigin, c as durationColor, g as elementVisible, o as formatMs, s as formatPercent, f as frameColor, p as frameTextColor, _ as rowDuration };
@@ -0,0 +1 @@
1
+ export { default } from './TracingViewer';
@@ -0,0 +1,2 @@
1
+ import e from "./TracingViewer.mjs";
2
+ export { e as default };
@@ -0,0 +1,2 @@
1
+ declare const useHighlightElement: (id: string | undefined) => void;
2
+ export default useHighlightElement;
@@ -0,0 +1,11 @@
1
+ import { useEffect as e } from "react";
2
+ //#region src/components/DevToolsPanel/tabs/TracingViewer/useHighlightElement.ts
3
+ var t = (t) => {
4
+ e(() => {
5
+ if (typeof document > "u" || !t) return;
6
+ let e = document.querySelectorAll(`[data-id="${t}"]`);
7
+ return e.forEach((e) => e.classList.add("devtools-element-hovered")), () => e.forEach((e) => e.classList.remove("devtools-element-hovered"));
8
+ }, [t]);
9
+ };
10
+ //#endregion
11
+ export { t as default };
@@ -4,5 +4,5 @@ export type VariableValueProps = {
4
4
  preffix?: string;
5
5
  value?: string;
6
6
  };
7
- declare const VariableValue: ({ className, type, preffix, value }: VariableValueProps) => import("react/jsx-runtime").JSX.Element;
7
+ declare const VariableValue: ({ className, type, preffix, value }: VariableValueProps) => import("react").JSX.Element;
8
8
  export default VariableValue;
@@ -3,5 +3,5 @@ export type VariablesListProps = {
3
3
  variables?: SchemaVariable[];
4
4
  variablesParsed?: Record<string, string>;
5
5
  };
6
- declare const VariablesList: ({ variables, variablesParsed }: VariablesListProps) => import("react/jsx-runtime").JSX.Element;
6
+ declare const VariablesList: ({ variables, variablesParsed }: VariablesListProps) => import("react").JSX.Element;
7
7
  export default VariablesList;
@@ -4,5 +4,5 @@ export type VariablesListItemProps = {
4
4
  type?: string;
5
5
  value?: StyleVariableValue;
6
6
  };
7
- declare const VariablesListItem: ({ name, type, value }: VariablesListItemProps) => import("react/jsx-runtime").JSX.Element;
7
+ declare const VariablesListItem: ({ name, type, value }: VariablesListItemProps) => import("react").JSX.Element;
8
8
  export default VariablesListItem;
@@ -2,5 +2,5 @@ import { StyleVariables } from '@plitzi/sdk-shared';
2
2
  export type VariablesListProps = {
3
3
  variables?: Partial<StyleVariables>;
4
4
  };
5
- declare const VariablesStyleList: ({ variables }: VariablesListProps) => import("react/jsx-runtime").JSX.Element;
5
+ declare const VariablesStyleList: ({ variables }: VariablesListProps) => import("react").JSX.Element;
6
6
  export default VariablesStyleList;