import type { ReadonlyPureSelectorToken, RegularAtomToken, TimelineToken, } from "atom.io" import { redo, undo } from "atom.io" import { findInStore, type Timeline } from "atom.io/internal" import { useI, useO } from "atom.io/react" import { type FC, Fragment, useContext } from "react" import { button } from "./Button.tsx" import { DevtoolsContext } from "./store.ts" import { article } from "./Updates.tsx" export const YouAreHere: FC = () => { return you are here } export const TimelineLog: FC<{ token: TimelineToken isOpenState: RegularAtomToken timelineState: ReadonlyPureSelectorToken> }> = ({ token, isOpenState, timelineState }) => { const timeline = useO(timelineState) const isOpen = useO(isOpenState) const setIsOpen = useI(isOpenState) return (

{token.key}

({timeline.at}/{timeline.history.length})
{isOpen ? (
{timeline.history.map((update, index) => update.type !== `atom_creation` && update.type !== `atom_disposal` ? ( {index === timeline.at ? : null} {index === timeline.history.length - 1 && timeline.at === timeline.history.length ? ( ) : null} ) : null, )}
) : null}
) } export const TimelineIndex: FC = () => { const { timelineIndex, timelineSelectors, viewIsOpenAtoms, store } = useContext(DevtoolsContext) const tokenIds = useO(timelineIndex) const visibleTokens = tokenIds.filter((token) => !token.key.startsWith(`👁‍🗨`)) const familyMembers = new Map[]>() const standalone: TimelineToken[] = [] for (const token of visibleTokens) { if (token.family) { const members = familyMembers.get(token.family.key) ?? [] members.push(token) familyMembers.set(token.family.key, members) } else { standalone.push(token) } } const renderTimeline = (token: TimelineToken) => ( ) return (
{visibleTokens.length === 0 ? (

(no timelines)

) : ( <> {standalone.map(renderTimeline)} {[...familyMembers].map(([familyKey, members]) => (

{familyKey}

{members.map(renderTimeline)}
))} )}
) }