-
- {Icon &&
}
- {group.title}
+
+
+ {Icon && }
+ {group.title}
+
+ {group.pages.map((page) => (
+
+ ))}
- {group.pages.map((page) => (
-
- ))}
-
);
})}
@@ -255,7 +259,9 @@ function DemoPanel({ page }: { page: PageConfig }) {
function ActorDemoPanel({ page }: { page: PageConfig }) {
const [selectedIdx, setSelectedIdx] = useState(0);
- useEffect(() => { setSelectedIdx(0); }, [page.id]);
+ useEffect(() => {
+ setSelectedIdx(0);
+ }, [page.id]);
const actorName = page.actors[selectedIdx] ?? page.actors[0];
@@ -294,7 +300,13 @@ function ActorDemoPanel({ page }: { page: PageConfig }) {
// ── Actor View (two-column: controls | inspector) ─
-function ActorView({ actorName, page }: { actorName: string; page: PageConfig }) {
+function ActorView({
+ actorName,
+ page,
+}: {
+ actorName: string;
+ page: PageConfig;
+}) {
const [keyInput, setKeyInput] = usePersistedState(
`kitchen-sink:${page.id}:${actorName}:key`,
`demo-${page.id}`,
@@ -339,7 +351,7 @@ function ActorView({ actorName, page }: { actorName: string; page: PageConfig })
const [stateRefreshCounter, setStateRefreshCounter] = useState(0);
const triggerStateRefresh = useCallback(
- () => setStateRefreshCounter(c => c + 1),
+ () => setStateRefreshCounter((c) => c + 1),
[],
);
@@ -352,13 +364,12 @@ function ActorView({ actorName, page }: { actorName: string; page: PageConfig })
)}
{actor.connStatus ?? "idle"}
@@ -486,43 +497,55 @@ function StatePanel({
// ── Events Panel ──────────────────────────────────
-function EventsPanel({ actor, defaultEvents }: { actor: ActorPanelActor; defaultEvents?: string[] }) {
+function EventsPanel({
+ actor,
+ defaultEvents,
+}: {
+ actor: ActorPanelActor;
+ defaultEvents?: string[];
+}) {
const [eventInput, setEventInput] = useState("");
- const [subscribedEvents, setSubscribedEvents] = useState
(defaultEvents ?? []);
- const [events, setEvents] = useState>([]);
+ const [subscribedEvents, setSubscribedEvents] = useState(
+ defaultEvents ?? [],
+ );
+ const [events, setEvents] = useState<
+ Array<{ time: string; name: string; data: string }>
+ >([]);
const subscribedKey = subscribedEvents.join(",");
const addEvent = () => {
const name = eventInput.trim();
if (name && !subscribedEvents.includes(name)) {
- setSubscribedEvents(prev => [...prev, name]);
+ setSubscribedEvents((prev) => [...prev, name]);
}
setEventInput("");
};
const removeEvent = (name: string) => {
- setSubscribedEvents(prev => prev.filter(e => e !== name));
+ setSubscribedEvents((prev) => prev.filter((e) => e !== name));
};
useEffect(() => {
if (!actor.connection || !subscribedKey) return;
const names = subscribedKey.split(",");
- const stops = names.map(name =>
+ const stops = names.map((name) =>
actor.connection!.on(name, (...args: unknown[]) => {
const now = new Date();
const time = [now.getHours(), now.getMinutes(), now.getSeconds()]
- .map(n => n.toString().padStart(2, "0"))
+ .map((n) => n.toString().padStart(2, "0"))
.join(":");
setEvents((prev) => [
{ time, name, data: formatJson(args.length === 1 ? args[0] : args) },
...prev.slice(0, 49),
]);
- })
+ }),
);
- return () => { for (const stop of stops) stop(); };
+ return () => {
+ for (const stop of stops) stop();
+ };
}, [actor.connection, subscribedKey]);
return (
@@ -533,7 +556,9 @@ function EventsPanel({ actor, defaultEvents }: { actor: ActorPanelActor; default
setEventInput(e.target.value)}
- onKeyDown={(e) => { if (e.key === "Enter") addEvent(); }}
+ onKeyDown={(e) => {
+ if (e.key === "Enter") addEvent();
+ }}
placeholder="add event name"
className="inspector-input"
/>
@@ -558,7 +583,7 @@ function EventsPanel({ actor, defaultEvents }: { actor: ActorPanelActor; default
{subscribedEvents.length > 0 && (