diff --git a/desktop/plugins/public/ui-debugger/components/Controls.tsx b/desktop/plugins/public/ui-debugger/components/Controls.tsx
new file mode 100644
index 000000000..6a5d5fdd9
--- /dev/null
+++ b/desktop/plugins/public/ui-debugger/components/Controls.tsx
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+import React from 'react';
+import {plugin} from '../index';
+import {Button, Input, Tooltip} from 'antd';
+import {PauseCircleOutlined, PlayCircleOutlined} from '@ant-design/icons';
+import {usePlugin, useValue, Layout} from 'flipper-plugin';
+
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @format
+ */
+
+export const Controls: React.FC = () => {
+ const instance = usePlugin(plugin);
+ const searchTerm = useValue(instance.uiState.searchTerm);
+ const isPaused = useValue(instance.uiState.isPaused);
+ return (
+
+ instance.uiState.searchTerm.set(e.target.value)}
+ />
+
+
+ );
+};
diff --git a/desktop/plugins/public/ui-debugger/components/main.tsx b/desktop/plugins/public/ui-debugger/components/main.tsx
index 7d4fb19a9..0d24585b3 100644
--- a/desktop/plugins/public/ui-debugger/components/main.tsx
+++ b/desktop/plugins/public/ui-debugger/components/main.tsx
@@ -17,8 +17,8 @@ import {Tree} from './Tree';
import {Visualization2D} from './Visualization2D';
import {useKeyboardModifiers} from '../hooks/useKeyboardModifiers';
import {Inspector} from './sidebar/Inspector';
-import {Button, Input, Spin, Tooltip} from 'antd';
-import {PauseCircleOutlined, PlayCircleOutlined} from '@ant-design/icons';
+import {Spin} from 'antd';
+import {Controls} from './Controls';
export function Component() {
const instance = usePlugin(plugin);
@@ -31,10 +31,8 @@ export function Component() {
useHotkeys('ctrl+i', () => setShowPerfStats((show) => !show));
- const searchTerm = useValue(instance.uiState.searchTerm);
const {ctrlPressed} = useKeyboardModifiers();
- const isPaused = useValue(instance.uiState.isPaused);
function renderSidebar(
node: UINode | undefined,
metadata: Map,
@@ -53,46 +51,31 @@ export function Component() {
if (rootId) {
return (
-
-
-
- instance.uiState.searchTerm.set(e.target.value)}
- />
-
-
-
-
-
-
-
- {selectedNode && renderSidebar(nodes.get(selectedNode), metadata)}
-
+
+
+
+
+
+
+
+
+
+
+
+ {selectedNode && renderSidebar(nodes.get(selectedNode), metadata)}
+
+
);
}
diff --git a/desktop/plugins/public/ui-debugger/index.tsx b/desktop/plugins/public/ui-debugger/index.tsx
index 9e1f09d87..441a3c900 100644
--- a/desktop/plugins/public/ui-debugger/index.tsx
+++ b/desktop/plugins/public/ui-debugger/index.tsx
@@ -32,6 +32,15 @@ type LiveClientState = {
nodes: Map;
};
+type UIState = {
+ isPaused: Atom;
+ searchTerm: Atom;
+ isContextMenuOpen: Atom;
+ hoveredNodes: Atom;
+ focusedNode: Atom;
+ treeState: Atom;
+};
+
export function plugin(client: PluginClient) {
const rootId = createState(undefined);
const metadata = createState