@buoy-gg/js-top 7.0.3
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/LICENSE +58 -0
- package/README.md +56 -0
- package/lib/commonjs/index.js +97 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/js-top/components/BusySparkline.js +56 -0
- package/lib/commonjs/js-top/components/BusySparkline.js.map +1 -0
- package/lib/commonjs/js-top/components/JsTopHudOverlay.js +79 -0
- package/lib/commonjs/js-top/components/JsTopHudOverlay.js.map +1 -0
- package/lib/commonjs/js-top/components/JsTopModal.js +347 -0
- package/lib/commonjs/js-top/components/JsTopModal.js.map +1 -0
- package/lib/commonjs/js-top/components/TaskDetailView.js +329 -0
- package/lib/commonjs/js-top/components/TaskDetailView.js.map +1 -0
- package/lib/commonjs/js-top/components/TaskTable.js +360 -0
- package/lib/commonjs/js-top/components/TaskTable.js.map +1 -0
- package/lib/commonjs/js-top/engine/JsTopController.js +350 -0
- package/lib/commonjs/js-top/engine/JsTopController.js.map +1 -0
- package/lib/commonjs/js-top/engine/aggregator.js +148 -0
- package/lib/commonjs/js-top/engine/aggregator.js.map +1 -0
- package/lib/commonjs/js-top/engine/busyProbe.js +101 -0
- package/lib/commonjs/js-top/engine/busyProbe.js.map +1 -0
- package/lib/commonjs/js-top/engine/frameStack.js +133 -0
- package/lib/commonjs/js-top/engine/frameStack.js.map +1 -0
- package/lib/commonjs/js-top/engine/longtasks.js +141 -0
- package/lib/commonjs/js-top/engine/longtasks.js.map +1 -0
- package/lib/commonjs/js-top/engine/now.js +38 -0
- package/lib/commonjs/js-top/engine/now.js.map +1 -0
- package/lib/commonjs/js-top/engine/originRegistry.js +402 -0
- package/lib/commonjs/js-top/engine/originRegistry.js.map +1 -0
- package/lib/commonjs/js-top/engine/patches/bridge.js +60 -0
- package/lib/commonjs/js-top/engine/patches/bridge.js.map +1 -0
- package/lib/commonjs/js-top/engine/patches/microtasks.js +27 -0
- package/lib/commonjs/js-top/engine/patches/microtasks.js.map +1 -0
- package/lib/commonjs/js-top/engine/patches/promises.js +65 -0
- package/lib/commonjs/js-top/engine/patches/promises.js.map +1 -0
- package/lib/commonjs/js-top/engine/patches/timers.js +66 -0
- package/lib/commonjs/js-top/engine/patches/timers.js.map +1 -0
- package/lib/commonjs/js-top/engine/state.js +63 -0
- package/lib/commonjs/js-top/engine/state.js.map +1 -0
- package/lib/commonjs/js-top/engine/symbolicate.js +95 -0
- package/lib/commonjs/js-top/engine/symbolicate.js.map +1 -0
- package/lib/commonjs/js-top/sync/jsTopSyncAdapter.js +74 -0
- package/lib/commonjs/js-top/sync/jsTopSyncAdapter.js.map +1 -0
- package/lib/commonjs/js-top/types/index.js +46 -0
- package/lib/commonjs/js-top/types/index.js.map +1 -0
- package/lib/commonjs/js-top/utils/preferences.js +39 -0
- package/lib/commonjs/js-top/utils/preferences.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/preset.js +75 -0
- package/lib/commonjs/preset.js.map +1 -0
- package/lib/module/index.js +47 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/js-top/components/BusySparkline.js +52 -0
- package/lib/module/js-top/components/BusySparkline.js.map +1 -0
- package/lib/module/js-top/components/JsTopHudOverlay.js +75 -0
- package/lib/module/js-top/components/JsTopHudOverlay.js.map +1 -0
- package/lib/module/js-top/components/JsTopModal.js +343 -0
- package/lib/module/js-top/components/JsTopModal.js.map +1 -0
- package/lib/module/js-top/components/TaskDetailView.js +325 -0
- package/lib/module/js-top/components/TaskDetailView.js.map +1 -0
- package/lib/module/js-top/components/TaskTable.js +353 -0
- package/lib/module/js-top/components/TaskTable.js.map +1 -0
- package/lib/module/js-top/engine/JsTopController.js +347 -0
- package/lib/module/js-top/engine/JsTopController.js.map +1 -0
- package/lib/module/js-top/engine/aggregator.js +136 -0
- package/lib/module/js-top/engine/aggregator.js.map +1 -0
- package/lib/module/js-top/engine/busyProbe.js +94 -0
- package/lib/module/js-top/engine/busyProbe.js.map +1 -0
- package/lib/module/js-top/engine/frameStack.js +126 -0
- package/lib/module/js-top/engine/frameStack.js.map +1 -0
- package/lib/module/js-top/engine/longtasks.js +133 -0
- package/lib/module/js-top/engine/longtasks.js.map +1 -0
- package/lib/module/js-top/engine/now.js +33 -0
- package/lib/module/js-top/engine/now.js.map +1 -0
- package/lib/module/js-top/engine/originRegistry.js +388 -0
- package/lib/module/js-top/engine/originRegistry.js.map +1 -0
- package/lib/module/js-top/engine/patches/bridge.js +56 -0
- package/lib/module/js-top/engine/patches/bridge.js.map +1 -0
- package/lib/module/js-top/engine/patches/microtasks.js +23 -0
- package/lib/module/js-top/engine/patches/microtasks.js.map +1 -0
- package/lib/module/js-top/engine/patches/promises.js +62 -0
- package/lib/module/js-top/engine/patches/promises.js.map +1 -0
- package/lib/module/js-top/engine/patches/timers.js +62 -0
- package/lib/module/js-top/engine/patches/timers.js.map +1 -0
- package/lib/module/js-top/engine/state.js +54 -0
- package/lib/module/js-top/engine/state.js.map +1 -0
- package/lib/module/js-top/engine/symbolicate.js +91 -0
- package/lib/module/js-top/engine/symbolicate.js.map +1 -0
- package/lib/module/js-top/sync/jsTopSyncAdapter.js +70 -0
- package/lib/module/js-top/sync/jsTopSyncAdapter.js.map +1 -0
- package/lib/module/js-top/types/index.js +42 -0
- package/lib/module/js-top/types/index.js.map +1 -0
- package/lib/module/js-top/utils/preferences.js +34 -0
- package/lib/module/js-top/utils/preferences.js.map +1 -0
- package/lib/module/preset.js +71 -0
- package/lib/module/preset.js.map +1 -0
- package/lib/typescript/index.d.ts +21 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/js-top/components/BusySparkline.d.ts +8 -0
- package/lib/typescript/js-top/components/BusySparkline.d.ts.map +1 -0
- package/lib/typescript/js-top/components/JsTopHudOverlay.d.ts +8 -0
- package/lib/typescript/js-top/components/JsTopHudOverlay.d.ts.map +1 -0
- package/lib/typescript/js-top/components/JsTopModal.d.ts +39 -0
- package/lib/typescript/js-top/components/JsTopModal.d.ts.map +1 -0
- package/lib/typescript/js-top/components/TaskDetailView.d.ts +15 -0
- package/lib/typescript/js-top/components/TaskDetailView.d.ts.map +1 -0
- package/lib/typescript/js-top/components/TaskTable.d.ts +38 -0
- package/lib/typescript/js-top/components/TaskTable.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/JsTopController.d.ts +78 -0
- package/lib/typescript/js-top/engine/JsTopController.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/__tests__/engine.test.d.ts +9 -0
- package/lib/typescript/js-top/engine/__tests__/engine.test.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/aggregator.d.ts +33 -0
- package/lib/typescript/js-top/engine/aggregator.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/busyProbe.d.ts +25 -0
- package/lib/typescript/js-top/engine/busyProbe.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/frameStack.d.ts +44 -0
- package/lib/typescript/js-top/engine/frameStack.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/longtasks.d.ts +37 -0
- package/lib/typescript/js-top/engine/longtasks.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/now.d.ts +9 -0
- package/lib/typescript/js-top/engine/now.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/originRegistry.d.ts +82 -0
- package/lib/typescript/js-top/engine/originRegistry.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/patches/bridge.d.ts +17 -0
- package/lib/typescript/js-top/engine/patches/bridge.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/patches/microtasks.d.ts +6 -0
- package/lib/typescript/js-top/engine/patches/microtasks.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/patches/promises.d.ts +18 -0
- package/lib/typescript/js-top/engine/patches/promises.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/patches/timers.d.ts +11 -0
- package/lib/typescript/js-top/engine/patches/timers.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/state.d.ts +35 -0
- package/lib/typescript/js-top/engine/state.d.ts.map +1 -0
- package/lib/typescript/js-top/engine/symbolicate.d.ts +16 -0
- package/lib/typescript/js-top/engine/symbolicate.d.ts.map +1 -0
- package/lib/typescript/js-top/sync/jsTopSyncAdapter.d.ts +43 -0
- package/lib/typescript/js-top/sync/jsTopSyncAdapter.d.ts.map +1 -0
- package/lib/typescript/js-top/types/index.d.ts +130 -0
- package/lib/typescript/js-top/types/index.d.ts.map +1 -0
- package/lib/typescript/js-top/utils/preferences.d.ts +13 -0
- package/lib/typescript/js-top/utils/preferences.d.ts.map +1 -0
- package/lib/typescript/preset.d.ts +49 -0
- package/lib/typescript/preset.d.ts.map +1 -0
- package/package.json +67 -0
- package/src/index.tsx +69 -0
- package/src/js-top/components/BusySparkline.tsx +59 -0
- package/src/js-top/components/JsTopHudOverlay.tsx +78 -0
- package/src/js-top/components/JsTopModal.tsx +421 -0
- package/src/js-top/components/TaskDetailView.tsx +349 -0
- package/src/js-top/components/TaskTable.tsx +365 -0
- package/src/js-top/engine/JsTopController.ts +401 -0
- package/src/js-top/engine/__tests__/engine.test.ts +337 -0
- package/src/js-top/engine/aggregator.ts +148 -0
- package/src/js-top/engine/busyProbe.ts +100 -0
- package/src/js-top/engine/frameStack.ts +142 -0
- package/src/js-top/engine/longtasks.ts +137 -0
- package/src/js-top/engine/now.ts +33 -0
- package/src/js-top/engine/originRegistry.ts +495 -0
- package/src/js-top/engine/patches/bridge.ts +69 -0
- package/src/js-top/engine/patches/microtasks.ts +25 -0
- package/src/js-top/engine/patches/promises.ts +57 -0
- package/src/js-top/engine/patches/timers.ts +80 -0
- package/src/js-top/engine/state.ts +66 -0
- package/src/js-top/engine/symbolicate.ts +109 -0
- package/src/js-top/sync/jsTopSyncAdapter.ts +72 -0
- package/src/js-top/types/index.ts +144 -0
- package/src/js-top/utils/preferences.ts +35 -0
- package/src/preset.tsx +67 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TaskDetailView — the "inspect process" screen behind a row tap.
|
|
5
|
+
*
|
|
6
|
+
* Shows everything the engine knows about one origin: a 5s activity bar
|
|
7
|
+
* chart (the per-origin bucket ring, rendered nowhere else), the full stat
|
|
8
|
+
* grid (schedules vs runs, avg/max/total, freezes), the captured scheduling
|
|
9
|
+
* site (caller + raw frames), and a plain-language explanation of what this
|
|
10
|
+
* origin type means. Data refreshes with the modal's snapshot tick — the
|
|
11
|
+
* parent re-renders us and we re-pull the detail.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { memo } from "react";
|
|
15
|
+
import { ScrollView, StyleSheet, Text, View } from "react-native";
|
|
16
|
+
import { macOSColors, useSafeAreaInsets } from "@buoy-gg/shared-ui";
|
|
17
|
+
import { badgeFor, displayName } from "./TaskTable";
|
|
18
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
19
|
+
const API_EXPLAINER = {
|
|
20
|
+
timeout: "Work scheduled with setTimeout. Time shown is the callback's exclusive run time on the JS thread.",
|
|
21
|
+
interval: "A repeating setInterval. One scheduling site, many runs — a hot interval is the classic silent JS-FPS killer.",
|
|
22
|
+
immediate: "Work scheduled with setImmediate — runs at the end of the current event-loop turn.",
|
|
23
|
+
raf: "requestAnimationFrame work — runs once per frame while scheduled. Cost here directly trades against 60fps.",
|
|
24
|
+
microtask: "queueMicrotask work — runs after the current task, before the thread yields.",
|
|
25
|
+
then: "Promise reaction (.then/.catch/.finally). Named by the function that attached the reaction. Note: async/await bodies bypass .then and land in the System row instead.",
|
|
26
|
+
bridge: "A native→JS call-in over the legacy bridge (events, module callbacks), measured as its un-nested remainder.",
|
|
27
|
+
unattributed: "Thread time the probe measured but no JS wrapper could claim: touch handlers, React commits, native call-ins, and async/await bodies. High here on New Architecture is normal — it's where UI work lives.",
|
|
28
|
+
other: "Origins evicted from the table when the registry hit its cap — their totals are preserved here."
|
|
29
|
+
};
|
|
30
|
+
function explainerFor(api) {
|
|
31
|
+
return API_EXPLAINER[api] ?? API_EXPLAINER.other;
|
|
32
|
+
}
|
|
33
|
+
function fmt(n) {
|
|
34
|
+
if (n >= 10_000) return `${Math.round(n / 1000)}k`;
|
|
35
|
+
if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;
|
|
36
|
+
if (n >= 100) return `${Math.round(n)}`;
|
|
37
|
+
return `${Math.round(n * 100) / 100}`;
|
|
38
|
+
}
|
|
39
|
+
function agoFmt(ms) {
|
|
40
|
+
if (ms <= 0) return "—";
|
|
41
|
+
const sec = ms / 1000;
|
|
42
|
+
if (sec < 1) return "just now";
|
|
43
|
+
if (sec < 60) return `${Math.round(sec)}s ago`;
|
|
44
|
+
return `${Math.floor(sec / 60)}m ago`;
|
|
45
|
+
}
|
|
46
|
+
function Stat({
|
|
47
|
+
label,
|
|
48
|
+
value,
|
|
49
|
+
accent
|
|
50
|
+
}) {
|
|
51
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
52
|
+
style: styles.stat,
|
|
53
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
54
|
+
style: styles.statLabel,
|
|
55
|
+
children: label
|
|
56
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
57
|
+
style: [styles.statValue, accent ? {
|
|
58
|
+
color: accent
|
|
59
|
+
} : null],
|
|
60
|
+
children: value
|
|
61
|
+
})]
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export const TaskDetailView = /*#__PURE__*/memo(function TaskDetailView({
|
|
65
|
+
detail
|
|
66
|
+
}) {
|
|
67
|
+
const badge = badgeFor(detail.api);
|
|
68
|
+
const insets = useSafeAreaInsets({
|
|
69
|
+
minBottom: 12
|
|
70
|
+
});
|
|
71
|
+
const maxBucket = Math.max(1, ...detail.buckets);
|
|
72
|
+
return /*#__PURE__*/_jsxs(ScrollView, {
|
|
73
|
+
style: styles.root,
|
|
74
|
+
contentContainerStyle: {
|
|
75
|
+
paddingBottom: insets.bottom
|
|
76
|
+
},
|
|
77
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
78
|
+
style: styles.identityRow,
|
|
79
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
80
|
+
style: [styles.badge, {
|
|
81
|
+
borderColor: badge.color,
|
|
82
|
+
backgroundColor: `${badge.color}1A`
|
|
83
|
+
}],
|
|
84
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
85
|
+
style: [styles.badgeText, {
|
|
86
|
+
color: badge.color
|
|
87
|
+
}],
|
|
88
|
+
children: badge.text
|
|
89
|
+
})
|
|
90
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
91
|
+
style: styles.name,
|
|
92
|
+
numberOfLines: 2,
|
|
93
|
+
children: displayName(detail)
|
|
94
|
+
})]
|
|
95
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
96
|
+
style: styles.explainer,
|
|
97
|
+
children: explainerFor(detail.api)
|
|
98
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
99
|
+
style: styles.sectionTitle,
|
|
100
|
+
children: "ACTIVITY \xB7 LAST 5S"
|
|
101
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
102
|
+
style: styles.chartRow,
|
|
103
|
+
children: detail.buckets.map((ms, i) => /*#__PURE__*/_jsx(View, {
|
|
104
|
+
style: styles.chartBarSlot,
|
|
105
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
106
|
+
style: [styles.chartBar, {
|
|
107
|
+
height: Math.max(2, ms / maxBucket * 44),
|
|
108
|
+
backgroundColor: badge.color
|
|
109
|
+
}]
|
|
110
|
+
})
|
|
111
|
+
}, `bk${i}`))
|
|
112
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
113
|
+
style: styles.chartLegend,
|
|
114
|
+
children: [/*#__PURE__*/_jsxs(Text, {
|
|
115
|
+
style: styles.chartLegendText,
|
|
116
|
+
children: [fmt(detail.windowMs), " ms in window \xB7 ", detail.pctOfBusy.toFixed(1), "% of busy time"]
|
|
117
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
118
|
+
style: styles.chartLegendText,
|
|
119
|
+
children: ["peak ", fmt(maxBucket), " ms/250ms"]
|
|
120
|
+
})]
|
|
121
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
122
|
+
style: styles.sectionTitle,
|
|
123
|
+
children: "STATS \xB7 SINCE START"
|
|
124
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
125
|
+
style: styles.statGrid,
|
|
126
|
+
children: [/*#__PURE__*/_jsx(Stat, {
|
|
127
|
+
label: "RUNS",
|
|
128
|
+
value: detail.calls > 0 ? fmt(detail.calls) : "—"
|
|
129
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
130
|
+
label: "SCHEDULED",
|
|
131
|
+
value: detail.scheduleCount > 0 ? fmt(detail.scheduleCount) : "—"
|
|
132
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
133
|
+
label: "AVG / RUN",
|
|
134
|
+
value: detail.calls > 0 ? `${fmt(detail.avgMs)} ms` : "—"
|
|
135
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
136
|
+
label: "MAX / RUN",
|
|
137
|
+
value: detail.maxMs > 0 ? `${fmt(detail.maxMs)} ms` : "—",
|
|
138
|
+
accent: detail.maxMs >= 50 ? macOSColors.semantic.warning : undefined
|
|
139
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
140
|
+
label: "TOTAL",
|
|
141
|
+
value: detail.totalMs > 0 ? `${fmt(detail.totalMs)} ms` : "—"
|
|
142
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
143
|
+
label: "LAST RUN",
|
|
144
|
+
value: agoFmt(detail.lastSeenAgoMs)
|
|
145
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
146
|
+
label: "FREEZES \xB7 60S",
|
|
147
|
+
value: detail.freezes > 0 ? `${detail.freezes}` : "0",
|
|
148
|
+
accent: detail.freezes > 0 ? macOSColors.semantic.error : undefined
|
|
149
|
+
}), /*#__PURE__*/_jsx(Stat, {
|
|
150
|
+
label: "WORST FREEZE",
|
|
151
|
+
value: detail.worstFreezeMs > 0 ? `${detail.worstFreezeMs} ms` : "—",
|
|
152
|
+
accent: detail.worstFreezeMs >= 100 ? macOSColors.semantic.error : detail.worstFreezeMs > 0 ? macOSColors.semantic.warning : undefined
|
|
153
|
+
})]
|
|
154
|
+
}), (detail.caller || (detail.frames?.length ?? 0) > 0) && /*#__PURE__*/_jsxs(_Fragment, {
|
|
155
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
156
|
+
style: styles.sectionTitle,
|
|
157
|
+
children: "SCHEDULED FROM"
|
|
158
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
159
|
+
style: styles.siteCard,
|
|
160
|
+
children: [detail.caller && /*#__PURE__*/_jsxs(Text, {
|
|
161
|
+
style: styles.siteCaller,
|
|
162
|
+
children: [detail.caller, "()"]
|
|
163
|
+
}), detail.file && /*#__PURE__*/_jsxs(Text, {
|
|
164
|
+
style: styles.siteFile,
|
|
165
|
+
children: [detail.file, detail.line != null ? `:${detail.line}` : ""]
|
|
166
|
+
}), detail.frames?.map((f, i) => /*#__PURE__*/_jsxs(Text, {
|
|
167
|
+
style: styles.siteFrame,
|
|
168
|
+
numberOfLines: 1,
|
|
169
|
+
children: [f.file, ":", f.line, ":", f.col]
|
|
170
|
+
}, `fr${i}`)), /*#__PURE__*/_jsx(Text, {
|
|
171
|
+
style: styles.siteNote,
|
|
172
|
+
children: "Frames are bundle offsets (Hermes) \u2014 the caller name above is the readable part. Captured once when this origin got hot."
|
|
173
|
+
})]
|
|
174
|
+
})]
|
|
175
|
+
}), !detail.caller && (detail.frames?.length ?? 0) === 0 && detail.api !== "unattributed" && detail.api !== "other" && /*#__PURE__*/_jsxs(_Fragment, {
|
|
176
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
177
|
+
style: styles.sectionTitle,
|
|
178
|
+
children: "SCHEDULED FROM"
|
|
179
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
180
|
+
style: styles.sitePending,
|
|
181
|
+
children: detail.promoted ? "Stack capture pending — next schedule from this site will record it." : "Not hot enough yet — the scheduling stack is captured once an origin passes 25 schedules or 50ms total."
|
|
182
|
+
})]
|
|
183
|
+
})]
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
const styles = StyleSheet.create({
|
|
187
|
+
root: {
|
|
188
|
+
flex: 1,
|
|
189
|
+
backgroundColor: macOSColors.background.base,
|
|
190
|
+
paddingHorizontal: 12
|
|
191
|
+
},
|
|
192
|
+
identityRow: {
|
|
193
|
+
flexDirection: "row",
|
|
194
|
+
alignItems: "center",
|
|
195
|
+
gap: 8,
|
|
196
|
+
paddingTop: 12
|
|
197
|
+
},
|
|
198
|
+
badge: {
|
|
199
|
+
borderWidth: 1,
|
|
200
|
+
borderRadius: 3,
|
|
201
|
+
paddingHorizontal: 5,
|
|
202
|
+
paddingVertical: 2
|
|
203
|
+
},
|
|
204
|
+
badgeText: {
|
|
205
|
+
fontSize: 9,
|
|
206
|
+
fontWeight: "700",
|
|
207
|
+
letterSpacing: 0.4
|
|
208
|
+
},
|
|
209
|
+
name: {
|
|
210
|
+
flex: 1,
|
|
211
|
+
color: macOSColors.text.primary,
|
|
212
|
+
fontSize: 15,
|
|
213
|
+
fontWeight: "600"
|
|
214
|
+
},
|
|
215
|
+
explainer: {
|
|
216
|
+
color: macOSColors.text.muted,
|
|
217
|
+
fontSize: 11,
|
|
218
|
+
lineHeight: 15,
|
|
219
|
+
marginTop: 6,
|
|
220
|
+
marginBottom: 4
|
|
221
|
+
},
|
|
222
|
+
sectionTitle: {
|
|
223
|
+
color: macOSColors.text.muted,
|
|
224
|
+
fontSize: 9,
|
|
225
|
+
fontWeight: "700",
|
|
226
|
+
letterSpacing: 0.5,
|
|
227
|
+
marginTop: 14,
|
|
228
|
+
marginBottom: 6
|
|
229
|
+
},
|
|
230
|
+
chartRow: {
|
|
231
|
+
flexDirection: "row",
|
|
232
|
+
alignItems: "flex-end",
|
|
233
|
+
height: 48,
|
|
234
|
+
gap: 2,
|
|
235
|
+
backgroundColor: macOSColors.background.card,
|
|
236
|
+
borderRadius: 6,
|
|
237
|
+
borderWidth: 1,
|
|
238
|
+
borderColor: macOSColors.border.default,
|
|
239
|
+
paddingHorizontal: 6,
|
|
240
|
+
paddingTop: 2
|
|
241
|
+
},
|
|
242
|
+
chartBarSlot: {
|
|
243
|
+
flex: 1,
|
|
244
|
+
alignItems: "center",
|
|
245
|
+
justifyContent: "flex-end"
|
|
246
|
+
},
|
|
247
|
+
chartBar: {
|
|
248
|
+
width: "70%",
|
|
249
|
+
borderTopLeftRadius: 2,
|
|
250
|
+
borderTopRightRadius: 2,
|
|
251
|
+
opacity: 0.9
|
|
252
|
+
},
|
|
253
|
+
chartLegend: {
|
|
254
|
+
flexDirection: "row",
|
|
255
|
+
justifyContent: "space-between",
|
|
256
|
+
marginTop: 4
|
|
257
|
+
},
|
|
258
|
+
chartLegendText: {
|
|
259
|
+
color: macOSColors.text.muted,
|
|
260
|
+
fontSize: 10,
|
|
261
|
+
fontVariant: ["tabular-nums"]
|
|
262
|
+
},
|
|
263
|
+
statGrid: {
|
|
264
|
+
flexDirection: "row",
|
|
265
|
+
flexWrap: "wrap",
|
|
266
|
+
gap: 8
|
|
267
|
+
},
|
|
268
|
+
stat: {
|
|
269
|
+
width: "23%",
|
|
270
|
+
minWidth: 76,
|
|
271
|
+
flexGrow: 1,
|
|
272
|
+
backgroundColor: macOSColors.background.card,
|
|
273
|
+
borderWidth: 1,
|
|
274
|
+
borderColor: macOSColors.border.default,
|
|
275
|
+
borderRadius: 6,
|
|
276
|
+
paddingHorizontal: 8,
|
|
277
|
+
paddingVertical: 6
|
|
278
|
+
},
|
|
279
|
+
statLabel: {
|
|
280
|
+
color: macOSColors.text.muted,
|
|
281
|
+
fontSize: 8,
|
|
282
|
+
fontWeight: "700",
|
|
283
|
+
letterSpacing: 0.4,
|
|
284
|
+
marginBottom: 3
|
|
285
|
+
},
|
|
286
|
+
statValue: {
|
|
287
|
+
color: macOSColors.text.primary,
|
|
288
|
+
fontSize: 13,
|
|
289
|
+
fontWeight: "600",
|
|
290
|
+
fontVariant: ["tabular-nums"]
|
|
291
|
+
},
|
|
292
|
+
siteCard: {
|
|
293
|
+
backgroundColor: macOSColors.background.card,
|
|
294
|
+
borderWidth: 1,
|
|
295
|
+
borderColor: macOSColors.border.default,
|
|
296
|
+
borderRadius: 6,
|
|
297
|
+
padding: 10,
|
|
298
|
+
gap: 3
|
|
299
|
+
},
|
|
300
|
+
siteCaller: {
|
|
301
|
+
color: macOSColors.text.primary,
|
|
302
|
+
fontSize: 13,
|
|
303
|
+
fontWeight: "600"
|
|
304
|
+
},
|
|
305
|
+
siteFile: {
|
|
306
|
+
color: macOSColors.semantic.info,
|
|
307
|
+
fontSize: 11
|
|
308
|
+
},
|
|
309
|
+
siteFrame: {
|
|
310
|
+
color: macOSColors.text.muted,
|
|
311
|
+
fontSize: 10,
|
|
312
|
+
fontVariant: ["tabular-nums"]
|
|
313
|
+
},
|
|
314
|
+
siteNote: {
|
|
315
|
+
color: macOSColors.text.muted,
|
|
316
|
+
fontSize: 9,
|
|
317
|
+
opacity: 0.8,
|
|
318
|
+
marginTop: 4
|
|
319
|
+
},
|
|
320
|
+
sitePending: {
|
|
321
|
+
color: macOSColors.text.muted,
|
|
322
|
+
fontSize: 11
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
//# sourceMappingURL=TaskDetailView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","ScrollView","StyleSheet","Text","View","macOSColors","useSafeAreaInsets","badgeFor","displayName","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","API_EXPLAINER","timeout","interval","immediate","raf","microtask","then","bridge","unattributed","other","explainerFor","api","fmt","n","Math","round","toFixed","agoFmt","ms","sec","floor","Stat","label","value","accent","style","styles","stat","children","statLabel","statValue","color","TaskDetailView","detail","badge","insets","minBottom","maxBucket","max","buckets","root","contentContainerStyle","paddingBottom","bottom","identityRow","borderColor","backgroundColor","badgeText","text","name","numberOfLines","explainer","sectionTitle","chartRow","map","i","chartBarSlot","chartBar","height","chartLegend","chartLegendText","windowMs","pctOfBusy","statGrid","calls","scheduleCount","avgMs","maxMs","semantic","warning","undefined","totalMs","lastSeenAgoMs","freezes","error","worstFreezeMs","caller","frames","length","siteCard","siteCaller","file","siteFile","line","f","siteFrame","col","siteNote","sitePending","promoted","create","flex","background","base","paddingHorizontal","flexDirection","alignItems","gap","paddingTop","borderWidth","borderRadius","paddingVertical","fontSize","fontWeight","letterSpacing","primary","muted","lineHeight","marginTop","marginBottom","card","border","default","justifyContent","width","borderTopLeftRadius","borderTopRightRadius","opacity","fontVariant","flexWrap","minWidth","flexGrow","padding","info"],"sourceRoot":"../../../../src","sources":["js-top/components/TaskDetailView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The ranked task table — the "process list".
|
|
5
|
+
*
|
|
6
|
+
* Row layout (phone-first): the API is a small colored badge and the FULL
|
|
7
|
+
* width goes to the task name (the part that varies); numbers live on a
|
|
8
|
+
* second stats line instead of fixed-width columns, so nothing truncates:
|
|
9
|
+
*
|
|
10
|
+
* 1 [INTERVAL] hotIntervalWork 1240 ms 41%
|
|
11
|
+
* ▓▓▓▓▓░░░░░ 50 calls · avg 24.8 · max 31.0 · total 1.2k
|
|
12
|
+
*
|
|
13
|
+
* Sorting is a chip row above the list (column headers don't survive on a
|
|
14
|
+
* narrow screen). Rows keyed by origin key (never index: rows re-rank every
|
|
15
|
+
* tick) and memoized with a precise comparator so a tick only re-renders
|
|
16
|
+
* rows whose numbers moved.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { memo, useState } from "react";
|
|
20
|
+
import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
21
|
+
import { macOSColors } from "@buoy-gg/shared-ui";
|
|
22
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
|
+
const SORT_OPTIONS = [{
|
|
24
|
+
key: "windowMs",
|
|
25
|
+
title: "RECENT"
|
|
26
|
+
}, {
|
|
27
|
+
key: "calls",
|
|
28
|
+
title: "CALLS"
|
|
29
|
+
}, {
|
|
30
|
+
key: "avgMs",
|
|
31
|
+
title: "AVG"
|
|
32
|
+
}, {
|
|
33
|
+
key: "maxMs",
|
|
34
|
+
title: "MAX"
|
|
35
|
+
}, {
|
|
36
|
+
key: "totalMs",
|
|
37
|
+
title: "TOTAL"
|
|
38
|
+
}];
|
|
39
|
+
export const API_BADGE = {
|
|
40
|
+
timeout: {
|
|
41
|
+
text: "TIMEOUT",
|
|
42
|
+
color: "#38BDF8",
|
|
43
|
+
prefix: "setTimeout"
|
|
44
|
+
},
|
|
45
|
+
interval: {
|
|
46
|
+
text: "INTERVAL",
|
|
47
|
+
color: "#22D3EE",
|
|
48
|
+
prefix: "setInterval"
|
|
49
|
+
},
|
|
50
|
+
immediate: {
|
|
51
|
+
text: "IMMED",
|
|
52
|
+
color: "#60A5FA",
|
|
53
|
+
prefix: "setImmediate"
|
|
54
|
+
},
|
|
55
|
+
raf: {
|
|
56
|
+
text: "RAF",
|
|
57
|
+
color: "#34D399",
|
|
58
|
+
prefix: "requestAnimationFrame"
|
|
59
|
+
},
|
|
60
|
+
microtask: {
|
|
61
|
+
text: "MICRO",
|
|
62
|
+
color: "#A78BFA",
|
|
63
|
+
prefix: "queueMicrotask"
|
|
64
|
+
},
|
|
65
|
+
then: {
|
|
66
|
+
text: "PROMISE",
|
|
67
|
+
color: "#BF5AF2",
|
|
68
|
+
prefix: "Promise.then"
|
|
69
|
+
},
|
|
70
|
+
bridge: {
|
|
71
|
+
text: "BRIDGE",
|
|
72
|
+
color: "#FBBF24",
|
|
73
|
+
prefix: "bridge"
|
|
74
|
+
},
|
|
75
|
+
unattributed: {
|
|
76
|
+
text: "SYSTEM",
|
|
77
|
+
color: "#8E8E93"
|
|
78
|
+
},
|
|
79
|
+
other: {
|
|
80
|
+
text: "OTHER",
|
|
81
|
+
color: "#8E8E93",
|
|
82
|
+
prefix: "other"
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
export function badgeFor(api) {
|
|
86
|
+
return API_BADGE[api] ?? API_BADGE.other;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** The row label minus its API prefix — the badge already says the API. */
|
|
90
|
+
export function displayName(row) {
|
|
91
|
+
if (row.api === "unattributed") return "events · React · native call-ins";
|
|
92
|
+
if (row.api === "other") return "evicted cold origins";
|
|
93
|
+
const prefix = badgeFor(row.api).prefix;
|
|
94
|
+
let name = row.label;
|
|
95
|
+
if (prefix && name.startsWith(prefix)) name = name.slice(prefix.length);
|
|
96
|
+
name = name.replace(/^[\s←@]+/, "").trim();
|
|
97
|
+
return name.length > 0 ? name : "anonymous";
|
|
98
|
+
}
|
|
99
|
+
function fmt(n) {
|
|
100
|
+
if (n >= 10_000) return `${Math.round(n / 1000)}k`;
|
|
101
|
+
if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;
|
|
102
|
+
if (n >= 100) return `${Math.round(n)}`;
|
|
103
|
+
return `${Math.round(n * 10) / 10}`;
|
|
104
|
+
}
|
|
105
|
+
function statsLine(row) {
|
|
106
|
+
if (row.calls <= 0) return "measured by probe · not reachable from JS";
|
|
107
|
+
return `${fmt(row.calls)} calls · avg ${fmt(row.avgMs)} · max ${fmt(row.maxMs)} · total ${fmt(row.totalMs)} ms`;
|
|
108
|
+
}
|
|
109
|
+
const TaskRow = /*#__PURE__*/memo(function TaskRow({
|
|
110
|
+
row,
|
|
111
|
+
rank,
|
|
112
|
+
onPress
|
|
113
|
+
}) {
|
|
114
|
+
const badge = badgeFor(row.api);
|
|
115
|
+
const Wrapper = onPress ? TouchableOpacity : View;
|
|
116
|
+
return /*#__PURE__*/_jsxs(Wrapper, {
|
|
117
|
+
style: rowStyles.row,
|
|
118
|
+
...(onPress ? {
|
|
119
|
+
onPress: () => onPress(row),
|
|
120
|
+
activeOpacity: 0.6
|
|
121
|
+
} : {}),
|
|
122
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
123
|
+
style: rowStyles.topLine,
|
|
124
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
125
|
+
style: rowStyles.rank,
|
|
126
|
+
children: rank
|
|
127
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
128
|
+
style: [rowStyles.badge, {
|
|
129
|
+
borderColor: badge.color,
|
|
130
|
+
backgroundColor: `${badge.color}1A`
|
|
131
|
+
}],
|
|
132
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
133
|
+
style: [rowStyles.badgeText, {
|
|
134
|
+
color: badge.color
|
|
135
|
+
}],
|
|
136
|
+
children: badge.text
|
|
137
|
+
})
|
|
138
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
139
|
+
style: rowStyles.name,
|
|
140
|
+
numberOfLines: 1,
|
|
141
|
+
children: displayName(row)
|
|
142
|
+
}), row.freezes > 0 && /*#__PURE__*/_jsxs(Text, {
|
|
143
|
+
style: [rowStyles.freezeBadge, row.worstFreezeMs >= 100 && rowStyles.freezeBadgeSevere],
|
|
144
|
+
children: ["\u26A0 \xD7", row.freezes]
|
|
145
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
146
|
+
style: [rowStyles.windowMs, row.api !== "unattributed" && row.pctOfBusy >= 25 && {
|
|
147
|
+
color: row.pctOfBusy >= 50 ? macOSColors.semantic.error : macOSColors.semantic.warning
|
|
148
|
+
}],
|
|
149
|
+
children: [fmt(row.windowMs), /*#__PURE__*/_jsx(Text, {
|
|
150
|
+
style: rowStyles.unit,
|
|
151
|
+
children: " ms"
|
|
152
|
+
})]
|
|
153
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
154
|
+
style: [rowStyles.pct, row.api === "unattributed" && rowStyles.pctMuted],
|
|
155
|
+
children: [Math.round(row.pctOfBusy), "%"]
|
|
156
|
+
})]
|
|
157
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
158
|
+
style: rowStyles.subLine,
|
|
159
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
160
|
+
style: rowStyles.barTrack,
|
|
161
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
162
|
+
style: [rowStyles.barFill, {
|
|
163
|
+
width: `${Math.min(100, row.pctOfBusy)}%`,
|
|
164
|
+
backgroundColor: badge.color
|
|
165
|
+
}]
|
|
166
|
+
})
|
|
167
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
168
|
+
style: rowStyles.stats,
|
|
169
|
+
numberOfLines: 1,
|
|
170
|
+
children: statsLine(row)
|
|
171
|
+
})]
|
|
172
|
+
})]
|
|
173
|
+
});
|
|
174
|
+
}, (prev, next) => prev.rank === next.rank && prev.onPress === next.onPress && prev.row.key === next.row.key && prev.row.windowMs === next.row.windowMs && prev.row.calls === next.row.calls && prev.row.maxMs === next.row.maxMs && prev.row.totalMs === next.row.totalMs && prev.row.pctOfBusy === next.row.pctOfBusy && prev.row.freezes === next.row.freezes && prev.row.worstFreezeMs === next.row.worstFreezeMs);
|
|
175
|
+
export function TaskTable({
|
|
176
|
+
rows,
|
|
177
|
+
onSelectRow
|
|
178
|
+
}) {
|
|
179
|
+
const [sortKey, setSortKey] = useState("windowMs");
|
|
180
|
+
const sorted = sortKey === "windowMs" ? rows : [...rows].sort((a, b) => b[sortKey] - a[sortKey]);
|
|
181
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
182
|
+
style: styles.root,
|
|
183
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
184
|
+
style: styles.sortRow,
|
|
185
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
186
|
+
style: styles.sortLabel,
|
|
187
|
+
children: "SORT"
|
|
188
|
+
}), SORT_OPTIONS.map(o => /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
189
|
+
onPress: () => setSortKey(o.key),
|
|
190
|
+
style: [styles.sortChip, sortKey === o.key && styles.sortChipOn],
|
|
191
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
192
|
+
style: [styles.sortChipText, sortKey === o.key && styles.sortChipTextOn],
|
|
193
|
+
children: o.title
|
|
194
|
+
})
|
|
195
|
+
}, o.key))]
|
|
196
|
+
}), /*#__PURE__*/_jsxs(ScrollView, {
|
|
197
|
+
style: styles.body,
|
|
198
|
+
children: [sorted.map((row, i) => /*#__PURE__*/_jsx(TaskRow, {
|
|
199
|
+
row: row,
|
|
200
|
+
rank: i + 1,
|
|
201
|
+
onPress: onSelectRow
|
|
202
|
+
}, row.key)), sorted.length === 0 && /*#__PURE__*/_jsx(Text, {
|
|
203
|
+
style: styles.empty,
|
|
204
|
+
children: "No tasks observed yet \u2014 interact with the app."
|
|
205
|
+
})]
|
|
206
|
+
})]
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const styles = StyleSheet.create({
|
|
210
|
+
root: {
|
|
211
|
+
flex: 1,
|
|
212
|
+
minHeight: 0
|
|
213
|
+
},
|
|
214
|
+
sortRow: {
|
|
215
|
+
flexDirection: "row",
|
|
216
|
+
alignItems: "center",
|
|
217
|
+
gap: 6,
|
|
218
|
+
paddingHorizontal: 10,
|
|
219
|
+
paddingVertical: 6,
|
|
220
|
+
borderBottomWidth: 1,
|
|
221
|
+
borderBottomColor: macOSColors.border.default,
|
|
222
|
+
backgroundColor: macOSColors.background.card
|
|
223
|
+
},
|
|
224
|
+
sortLabel: {
|
|
225
|
+
color: macOSColors.text.muted,
|
|
226
|
+
fontSize: 9,
|
|
227
|
+
fontWeight: "700",
|
|
228
|
+
letterSpacing: 0.5,
|
|
229
|
+
marginRight: 2
|
|
230
|
+
},
|
|
231
|
+
sortChip: {
|
|
232
|
+
borderWidth: 1,
|
|
233
|
+
borderColor: macOSColors.border.default,
|
|
234
|
+
borderRadius: 4,
|
|
235
|
+
paddingHorizontal: 7,
|
|
236
|
+
paddingVertical: 3
|
|
237
|
+
},
|
|
238
|
+
sortChipOn: {
|
|
239
|
+
borderColor: macOSColors.semantic.info,
|
|
240
|
+
backgroundColor: `${macOSColors.semantic.info}1A`
|
|
241
|
+
},
|
|
242
|
+
sortChipText: {
|
|
243
|
+
color: macOSColors.text.muted,
|
|
244
|
+
fontSize: 9,
|
|
245
|
+
fontWeight: "600",
|
|
246
|
+
fontVariant: ["tabular-nums"]
|
|
247
|
+
},
|
|
248
|
+
sortChipTextOn: {
|
|
249
|
+
color: macOSColors.semantic.info
|
|
250
|
+
},
|
|
251
|
+
body: {
|
|
252
|
+
flex: 1
|
|
253
|
+
},
|
|
254
|
+
empty: {
|
|
255
|
+
color: macOSColors.text.muted,
|
|
256
|
+
fontSize: 12,
|
|
257
|
+
textAlign: "center",
|
|
258
|
+
paddingVertical: 24
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
const rowStyles = StyleSheet.create({
|
|
262
|
+
row: {
|
|
263
|
+
paddingHorizontal: 10,
|
|
264
|
+
paddingVertical: 8,
|
|
265
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
266
|
+
borderBottomColor: macOSColors.border.default,
|
|
267
|
+
gap: 5
|
|
268
|
+
},
|
|
269
|
+
topLine: {
|
|
270
|
+
flexDirection: "row",
|
|
271
|
+
alignItems: "center",
|
|
272
|
+
gap: 6
|
|
273
|
+
},
|
|
274
|
+
rank: {
|
|
275
|
+
width: 16,
|
|
276
|
+
color: macOSColors.text.muted,
|
|
277
|
+
fontSize: 10,
|
|
278
|
+
fontVariant: ["tabular-nums"]
|
|
279
|
+
},
|
|
280
|
+
badge: {
|
|
281
|
+
borderWidth: 1,
|
|
282
|
+
borderRadius: 3,
|
|
283
|
+
paddingHorizontal: 4,
|
|
284
|
+
paddingVertical: 1
|
|
285
|
+
},
|
|
286
|
+
badgeText: {
|
|
287
|
+
fontSize: 8,
|
|
288
|
+
fontWeight: "700",
|
|
289
|
+
letterSpacing: 0.4
|
|
290
|
+
},
|
|
291
|
+
name: {
|
|
292
|
+
flex: 1,
|
|
293
|
+
color: macOSColors.text.primary,
|
|
294
|
+
fontSize: 13,
|
|
295
|
+
fontWeight: "500"
|
|
296
|
+
},
|
|
297
|
+
freezeBadge: {
|
|
298
|
+
color: macOSColors.semantic.warning,
|
|
299
|
+
fontSize: 10,
|
|
300
|
+
fontWeight: "700",
|
|
301
|
+
fontVariant: ["tabular-nums"]
|
|
302
|
+
},
|
|
303
|
+
freezeBadgeSevere: {
|
|
304
|
+
color: macOSColors.semantic.error
|
|
305
|
+
},
|
|
306
|
+
windowMs: {
|
|
307
|
+
color: macOSColors.text.primary,
|
|
308
|
+
fontSize: 13,
|
|
309
|
+
fontWeight: "700",
|
|
310
|
+
fontVariant: ["tabular-nums"]
|
|
311
|
+
},
|
|
312
|
+
unit: {
|
|
313
|
+
color: macOSColors.text.muted,
|
|
314
|
+
fontSize: 10,
|
|
315
|
+
fontWeight: "400"
|
|
316
|
+
},
|
|
317
|
+
pct: {
|
|
318
|
+
width: 38,
|
|
319
|
+
textAlign: "right",
|
|
320
|
+
color: macOSColors.text.secondary,
|
|
321
|
+
fontSize: 12,
|
|
322
|
+
fontWeight: "600",
|
|
323
|
+
fontVariant: ["tabular-nums"]
|
|
324
|
+
},
|
|
325
|
+
pctMuted: {
|
|
326
|
+
color: macOSColors.text.muted
|
|
327
|
+
},
|
|
328
|
+
subLine: {
|
|
329
|
+
flexDirection: "row",
|
|
330
|
+
alignItems: "center",
|
|
331
|
+
gap: 8,
|
|
332
|
+
paddingLeft: 22
|
|
333
|
+
},
|
|
334
|
+
barTrack: {
|
|
335
|
+
width: 72,
|
|
336
|
+
height: 4,
|
|
337
|
+
borderRadius: 2,
|
|
338
|
+
backgroundColor: macOSColors.background.input,
|
|
339
|
+
overflow: "hidden"
|
|
340
|
+
},
|
|
341
|
+
barFill: {
|
|
342
|
+
height: 4,
|
|
343
|
+
borderRadius: 2,
|
|
344
|
+
opacity: 0.85
|
|
345
|
+
},
|
|
346
|
+
stats: {
|
|
347
|
+
flex: 1,
|
|
348
|
+
color: macOSColors.text.muted,
|
|
349
|
+
fontSize: 10,
|
|
350
|
+
fontVariant: ["tabular-nums"]
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
//# sourceMappingURL=TaskTable.js.map
|