igpapi — Instagram private API Simulator for Node.js (API reference) 4.14.0
    Preparing search index...

    Interface PostingMusicBrowserScreenDefinition

    The definition type of PostingMusicBrowserScreen, named so declaration emit prints its name rather than serialising the whole definition (the declaration-serialization limit the other screens reachable from a tab root meet; see PostingCameraScreenDefinition).

    interface PostingMusicBrowserScreenDefinition {
        "~top"?: ScreenTopLevelMarker<never>;
        actions: {
            openSearch: (
                self: ScreenHandle,
                state: PostingMusicBrowserState,
            ) => (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "PostingMusicSearchResults",
                    "screen",
                    {
                        keywords: readonly string[];
                        query: string;
                        results: readonly (
                            | {
                                alacornSessionId: string;
                                kind: "track";
                                track: PostingMusicTrack;
                            }
                            | { kind: "originalAudio"; originalAudio: PostingMusicOriginalAudio }
                        )[];
                        searchSessionId: string;
                    },
                    PostingMusicSearchResultsActions,
                    Record<never, never>,
                    ScreenHandle,
                    "required",
                    true,
                    never,
                    AndroidScreens,
                >,

                    | IgCheckpointError
                    | IgAccountSuspendedError
                    | IgAccountDisabledError
                    | IgLoginRequiredError
                    | IgUserLoggedOutError
                    | ScreenDataError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError,
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation
                | ScreenStack
                | ScreenCatalog,
            >;
        };
        afterAssemble: | ((handle: ScreenHandle) => Effect<void, never, never>)
        | undefined;
        beforeLeave?: (
            left: ScreenBeforeLeave<
                {
                    product: | {
                        container: NavigableScreenId;
                        kind: "story-sticker";
                        nullState: string;
                        wire: string;
                    }
                    | {
                        browseSessionId: string;
                        kind: "reel";
                        media: {
                            byteLength: number;
                            durationMs: number;
                            height: number;
                            id: string;
                            kind: "video";
                            mimeType: "video/mp4";
                            width: number;
                        };
                        nullState: string;
                        overlay: NavigableScreenId;
                        wire: string;
                    };
                },
                { browseSessionId: string },
                PostingMusicBrowserState,
            >,
        ) => Effect<
            void,
            never,
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
        >;
        beforeResume?: (
            returning: ScreenBeforeResume<
                {
                    product: | {
                        container: NavigableScreenId;
                        kind: "story-sticker";
                        nullState: string;
                        wire: string;
                    }
                    | {
                        browseSessionId: string;
                        kind: "reel";
                        media: {
                            byteLength: number;
                            durationMs: number;
                            height: number;
                            id: string;
                            kind: "video";
                            mimeType: "video/mp4";
                            width: number;
                        };
                        nullState: string;
                        overlay: NavigableScreenId;
                        wire: string;
                    };
                },
                { browseSessionId: string },
                PostingMusicBrowserState,
            >,
        ) => Effect<
            void,
            never,
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
        >;
        catalogEntry: () => ScreenCatalogEntry<
            ScreenStepFailure<
                | IgCheckpointError
                | IgAccountSuspendedError
                | IgAccountDisabledError
                | IgLoginRequiredError
                | IgUserLoggedOutError,
                Record<never, never>,
            >,
            ScreenStepServices<
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
                Record<never, never>,
            >,
        >;
        checkpointExtra: (
            handle: ScreenHandle,
        ) => Effect<Json | undefined, SchemaError>;
        data: ScreenCodec<{ browseSessionId: string }>;
        enter: (
            args: ScreenEnter<
                {
                    product: | {
                        container: NavigableScreenId;
                        kind: "story-sticker";
                        nullState: string;
                        wire: string;
                    }
                    | {
                        browseSessionId: string;
                        kind: "reel";
                        media: {
                            byteLength: number;
                            durationMs: number;
                            height: number;
                            id: string;
                            kind: "video";
                            mimeType: "video/mp4";
                            width: number;
                        };
                        nullState: string;
                        overlay: NavigableScreenId;
                        wire: string;
                    };
                },
            >,
        ) => Effect<
            { browseSessionId: string },

                | IgCheckpointError
                | IgAccountSuspendedError
                | IgAccountDisabledError
                | IgLoginRequiredError
                | IgUserLoggedOutError,
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
        >;
        findItem: (
            host: ScreenHandle,
            item: ScreenItemLocation,
        ) => Effect<
            ScreenHandle
            | undefined,
            ScreenLookupFailure<
                | IgCheckpointError
                | IgAccountSuspendedError
                | IgAccountDisabledError
                | IgLoginRequiredError
                | IgUserLoggedOutError,
                Record<never, never>,
            >,
            ScreenStepServices<
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
                Record<never, never>,
            >,
        >;
        id: "PostingMusicBrowser";
        input: ScreenCodec<
            {
                product: | {
                    container: NavigableScreenId;
                    kind: "story-sticker";
                    nullState: string;
                    wire: string;
                }
                | {
                    browseSessionId: string;
                    kind: "reel";
                    media: {
                        byteLength: number;
                        durationMs: number;
                        height: number;
                        id: string;
                        kind: "video";
                        mimeType: "video/mp4";
                        width: number;
                    };
                    nullState: string;
                    overlay: NavigableScreenId;
                    wire: string;
                };
            },
            ScreenEncodedInput,
        >;
        is: (
            value: unknown,
        ) => value is AssembledHandle<
            "PostingMusicBrowser",
            "screen",
            { browseSessionId: string },
            {
                openSearch: (
                    self: ScreenHandle,
                    state: PostingMusicBrowserState,
                ) => (
                    ...args: [],
                ) => Effect<
                    AssembledHandle<
                        "PostingMusicSearchResults",
                        "screen",
                        {
                            keywords: readonly string[];
                            query: string;
                            results: readonly (
                                | { alacornSessionId: ...; kind: ...; track: ... }
                                | { kind: ...; originalAudio: ... }
                            )[];
                            searchSessionId: string;
                        },
                        PostingMusicSearchResultsActions,
                        Record<never, never>,
                        ScreenHandle,
                        "required",
                        true,
                        never,
                        AndroidScreens,
                    >,

                        | IgCheckpointError
                        | IgAccountSuspendedError
                        | IgAccountDisabledError
                        | IgLoginRequiredError
                        | IgUserLoggedOutError
                        | ScreenDataError
                        | ScreenEnterConcurrentError
                        | ScreenEdgeInputError,
                    | GraphqlJsonHttp
                    | MobileApplication
                    | MobileNavigation
                    | ScreenStack
                    | ScreenCatalog,
                >;
            },
            Record<never, never>,
            ScreenHandle | undefined,
            "optional",
            true,
            never,
            unknown,
        >;
        items: Record<never, never> | undefined;
        itemVisits: boolean;
        kind: "screen";
        leave:
            | (
                (
                    left: ScreenLeave<
                        {
                            product: | {
                                container: NavigableScreenId;
                                kind: "story-sticker";
                                nullState: string;
                                wire: string;
                            }
                            | {
                                browseSessionId: string;
                                kind: "reel";
                                media: {
                                    byteLength: number;
                                    durationMs: number;
                                    height: number;
                                    id: string;
                                    kind: "video";
                                    mimeType: "video/mp4";
                                    width: number;
                                };
                                nullState: string;
                                overlay: NavigableScreenId;
                                wire: string;
                            };
                        },
                        { browseSessionId: string },
                        PostingMusicBrowserState,
                    >,
                ) => Effect<
                    void,
                    never,
                    | PlainJsonApiHttp
                    | MobileDevice
                    | GraphqlJsonHttp
                    | MobileApplication
                    | MobileNavigation,
                >
            )
            | undefined;
        ownsCheckpoint: OwnsCheckpoint<"PostingMusicBrowser">;
        positionOf: (handle: ScreenHandle) => Json | undefined;
        readReleased?: ScreenReleasedReader;
        readReleasedInput?: ScreenReleasedInputReader;
        releasedItemLists: Readonly<Record<string, string>>;
        restoreCheckpointExtra: (
            handle: ScreenHandle,
            extra: Json,
        ) => Effect<
            void,
            ScreenDataError
            | CheckpointDecodeError,

                | ScreenStack
                | ScreenStepServices<
                    | PlainJsonApiHttp
                    | MobileDevice
                    | GraphqlJsonHttp
                    | MobileApplication
                    | MobileNavigation,
                    Record<never, never>,
                >,
        >;
        restorePosition: (
            handle: ScreenHandle,
            position: Json,
        ) => Effect<
            void,
            ScreenLookupFailure<
                | IgCheckpointError
                | IgAccountSuspendedError
                | IgAccountDisabledError
                | IgLoginRequiredError
                | IgUserLoggedOutError,
                Record<never, never>,
            >,
            ScreenStepServices<
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
                Record<never, never>,
            >,
        >;
        resume:
            | (
                (
                    resumed: ScreenResume<
                        {
                            product: | {
                                container: NavigableScreenId;
                                kind: "story-sticker";
                                nullState: string;
                                wire: string;
                            }
                            | {
                                browseSessionId: string;
                                kind: "reel";
                                media: {
                                    byteLength: number;
                                    durationMs: number;
                                    height: number;
                                    id: string;
                                    kind: "video";
                                    mimeType: "video/mp4";
                                    width: number;
                                };
                                nullState: string;
                                overlay: NavigableScreenId;
                                wire: string;
                            };
                        },
                        { browseSessionId: string },
                        PostingMusicBrowserState,
                    >,
                ) => Effect<
                    void,
                    never,
                    | PlainJsonApiHttp
                    | MobileDevice
                    | GraphqlJsonHttp
                    | MobileApplication
                    | MobileNavigation,
                >
            )
            | undefined;
        state: (
            opened: ScreenStateArgs<
                {
                    product: | {
                        container: NavigableScreenId;
                        kind: "story-sticker";
                        nullState: string;
                        wire: string;
                    }
                    | {
                        browseSessionId: string;
                        kind: "reel";
                        media: {
                            byteLength: number;
                            durationMs: number;
                            height: number;
                            id: string;
                            kind: "video";
                            mimeType: "video/mp4";
                            width: number;
                        };
                        nullState: string;
                        overlay: NavigableScreenId;
                        wire: string;
                    };
                },
                { browseSessionId: string },
                undefined,
            >,
        ) => PostingMusicBrowserState;
        "~opens"?(target: never): void;
        pipe<A>(this: A): A;
        pipe<A, B = never>(this: A, ab: (_: A) => B): B;
        pipe<A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C;
        pipe<A, B = never, C = never, D = never>(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
        ): D;
        pipe<A, B = never, C = never, D = never, E = never>(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
        ): E;
        pipe<A, B = never, C = never, D = never, E = never, F = never>(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
        ): F;
        pipe<A, B = never, C = never, D = never, E = never, F = never, G = never>(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
        ): G;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
        ): H;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
        ): I;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
        ): J;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
        ): K;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
        ): L;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
        ): M;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
        ): N;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
        ): O;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
        ): P;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
        ): Q;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
            R = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
            qr: (_: Q) => R,
        ): R;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
            R = never,
            S = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
            qr: (_: Q) => R,
            rs: (_: R) => S,
        ): S;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
            R = never,
            S = never,
            T = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
            qr: (_: Q) => R,
            rs: (_: R) => S,
            st: (_: S) => T,
        ): T;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
            R = never,
            S = never,
            T = never,
            U = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
            qr: (_: Q) => R,
            rs: (_: R) => S,
            st: (_: S) => T,
            tu: (_: T) => U,
        ): U;
        pipe<
            A,
            B = never,
            C = never,
            D = never,
            E = never,
            F = never,
            G = never,
            H = never,
            I = never,
            J = never,
            K = never,
            L = never,
            M = never,
            N = never,
            O = never,
            P = never,
            Q = never,
            R = never,
            S = never,
            T = never,
            U = never,
        >(
            this: A,
            ab: (_: A) => B,
            bc: (_: B) => C,
            cd: (_: C) => D,
            de: (_: D) => E,
            ef: (_: E) => F,
            fg: (_: F) => G,
            gh: (_: G) => H,
            hi: (_: H) => I,
            ij: (_: I) => J,
            jk: (_: J) => K,
            kl: (_: K) => L,
            lm: (_: L) => M,
            mn: (_: M) => N,
            no: (_: N) => O,
            op: (_: O) => P,
            pq: (_: P) => Q,
            qr: (_: Q) => R,
            rs: (_: R) => S,
            st: (_: S) => T,
            tu: (_: T) => U,
        ): U;
    }

    Hierarchy

    • ReturnType<typeof postingMusicBrowserScreen>
      • PostingMusicBrowserScreenDefinition
    Index

    Methods

    • Type only, never a value: the screens this definition opens through action edges — edges its handle does not show (actionEdge) — so ScreenOpenTargetsOf follows them and a screen reached only that way is still visible to the registry-derived reachability. The parameter is bivariant (a method's is), so a definition that names its targets is still accepted wherever a definition's parts are read; never for a definition whose transitions all live on its handle.

      Parameters

      • target: never

      Returns void

    • Type Parameters

      • A

      Parameters

      • this: A

      Returns A

    • Type Parameters

      • A
      • B = never

      Parameters

      • this: A
      • ab: (_: A) => B

      Returns B

    • Type Parameters

      • A
      • B = never
      • C = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C

      Returns C

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D

      Returns D

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E

      Returns E

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F

      Returns F

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G

      Returns G

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H

      Returns H

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I

      Returns I

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J

      Returns J

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K

      Returns K

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L

      Returns L

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M

      Returns M

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N

      Returns N

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O

      Returns O

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P

      Returns P

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q

      Returns Q

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never
      • R = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q
      • qr: (_: Q) => R

      Returns R

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never
      • R = never
      • S = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q
      • qr: (_: Q) => R
      • rs: (_: R) => S

      Returns S

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never
      • R = never
      • S = never
      • T = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q
      • qr: (_: Q) => R
      • rs: (_: R) => S
      • st: (_: S) => T

      Returns T

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never
      • R = never
      • S = never
      • T = never
      • U = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q
      • qr: (_: Q) => R
      • rs: (_: R) => S
      • st: (_: S) => T
      • tu: (_: T) => U

      Returns U

    • Type Parameters

      • A
      • B = never
      • C = never
      • D = never
      • E = never
      • F = never
      • G = never
      • H = never
      • I = never
      • J = never
      • K = never
      • L = never
      • M = never
      • N = never
      • O = never
      • P = never
      • Q = never
      • R = never
      • S = never
      • T = never
      • U = never

      Parameters

      • this: A
      • ab: (_: A) => B
      • bc: (_: B) => C
      • cd: (_: C) => D
      • de: (_: D) => E
      • ef: (_: E) => F
      • fg: (_: F) => G
      • gh: (_: G) => H
      • hi: (_: H) => I
      • ij: (_: I) => J
      • jk: (_: J) => K
      • kl: (_: K) => L
      • lm: (_: L) => M
      • mn: (_: M) => N
      • no: (_: N) => O
      • op: (_: O) => P
      • pq: (_: P) => Q
      • qr: (_: Q) => R
      • rs: (_: R) => S
      • st: (_: S) => T
      • tu: (_: T) => U

      Returns U

    Properties

    "~top"?: ScreenTopLevelMarker<never>

    The data fields the handle also shows on its top level: the screen's one main identifier (identity), or none. A type only, never set.

    actions: {
        openSearch: (
            self: ScreenHandle,
            state: PostingMusicBrowserState,
        ) => (
            ...args: [],
        ) => Effect<
            AssembledHandle<
                "PostingMusicSearchResults",
                "screen",
                {
                    keywords: readonly string[];
                    query: string;
                    results: readonly (
                        | {
                            alacornSessionId: string;
                            kind: "track";
                            track: PostingMusicTrack;
                        }
                        | { kind: "originalAudio"; originalAudio: PostingMusicOriginalAudio }
                    )[];
                    searchSessionId: string;
                },
                PostingMusicSearchResultsActions,
                Record<never, never>,
                ScreenHandle,
                "required",
                true,
                never,
                AndroidScreens,
            >,

                | IgCheckpointError
                | IgAccountSuspendedError
                | IgAccountDisabledError
                | IgLoginRequiredError
                | IgUserLoggedOutError
                | ScreenDataError
                | ScreenEnterConcurrentError
                | ScreenEdgeInputError,
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation
            | ScreenStack
            | ScreenCatalog,
        >;
    }

    Type Declaration

    afterAssemble:
        | ((handle: ScreenHandle) => Effect<void, never, never>)
        | undefined

    What runs once the screen's handle is assembled, inside the enter's transaction: a swipeable feed gives the first item in front its enter here, because its items were shown without one. Absent for every screen and every plain feed. A failure rolls the enter back.

    beforeLeave?: (
        left: ScreenBeforeLeave<
            {
                product: | {
                    container: NavigableScreenId;
                    kind: "story-sticker";
                    nullState: string;
                    wire: string;
                }
                | {
                    browseSessionId: string;
                    kind: "reel";
                    media: {
                        byteLength: number;
                        durationMs: number;
                        height: number;
                        id: string;
                        kind: "video";
                        mimeType: "video/mp4";
                        width: number;
                    };
                    nullState: string;
                    overlay: NavigableScreenId;
                    wire: string;
                };
            },
            { browseSessionId: string },
            PostingMusicBrowserState,
        >,
    ) => Effect<
        void,
        never,
        | PlainJsonApiHttp
        | MobileDevice
        | GraphqlJsonHttp
        | MobileApplication
        | MobileNavigation,
    >

    What the engine runs when a transition is about to cover or close the screen, while its chain and endpoint are still in front: the app's departure work that goes out before the covering screen's burst. A screen and a feed declare it (an item does not). It receives the visit in progress, cannot fail, and runs before the transition and before leave.

    beforeResume?: (
        returning: ScreenBeforeResume<
            {
                product: | {
                    container: NavigableScreenId;
                    kind: "story-sticker";
                    nullState: string;
                    wire: string;
                }
                | {
                    browseSessionId: string;
                    kind: "reel";
                    media: {
                        byteLength: number;
                        durationMs: number;
                        height: number;
                        id: string;
                        kind: "video";
                        mimeType: "video/mp4";
                        width: number;
                    };
                    nullState: string;
                    overlay: NavigableScreenId;
                    wire: string;
                };
            },
            { browseSessionId: string },
            PostingMusicBrowserState,
        >,
    ) => Effect<
        void,
        never,
        | PlainJsonApiHttp
        | MobileDevice
        | GraphqlJsonHttp
        | MobileApplication
        | MobileNavigation,
    >

    What the engine runs when a transition is about to bring the screen back on top (a tab tap back to it, the covering screen's back), while the screen in front still has its chain and endpoint: the app's tap-time work, the counterpart of the first show's burst before its own navigation event. Only a screen declares it. It cannot fail, and runs before the transition and before resume.

    catalogEntry: () => ScreenCatalogEntry<
        ScreenStepFailure<
            | IgCheckpointError
            | IgAccountSuspendedError
            | IgAccountDisabledError
            | IgLoginRequiredError
            | IgUserLoggedOutError,
            Record<never, never>,
        >,
        ScreenStepServices<
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
            Record<never, never>,
        >,
    >

    The retrace's view of this screen, with its errors and services.

    checkpointExtra: (handle: ScreenHandle) => Effect<Json | undefined, SchemaError>

    What a frame keeps beyond what entering it showed (a feed's deepest page), as a checkpoint stores it; absent when the screen keeps nothing.

    data: ScreenCodec<{ browseSessionId: string }>

    What enter returns: the user's data, under the handle's data; never in a trail.

    enter: (
        args: ScreenEnter<
            {
                product: | {
                    container: NavigableScreenId;
                    kind: "story-sticker";
                    nullState: string;
                    wire: string;
                }
                | {
                    browseSessionId: string;
                    kind: "reel";
                    media: {
                        byteLength: number;
                        durationMs: number;
                        height: number;
                        id: string;
                        kind: "video";
                        mimeType: "video/mp4";
                        width: number;
                    };
                    nullState: string;
                    overlay: NavigableScreenId;
                    wire: string;
                };
            },
        >,
    ) => Effect<
        { browseSessionId: string },

            | IgCheckpointError
            | IgAccountSuspendedError
            | IgAccountDisabledError
            | IgLoginRequiredError
            | IgUserLoggedOutError,
        | PlainJsonApiHttp
        | MobileDevice
        | GraphqlJsonHttp
        | MobileApplication
        | MobileNavigation,
    >
    findItem: (
        host: ScreenHandle,
        item: ScreenItemLocation,
    ) => Effect<
        ScreenHandle
        | undefined,
        ScreenLookupFailure<
            | IgCheckpointError
            | IgAccountSuspendedError
            | IgAccountDisabledError
            | IgLoginRequiredError
            | IgUserLoggedOutError,
            Record<never, never>,
        >,
        ScreenStepServices<
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
            Record<never, never>,
        >,
    >
    id: "PostingMusicBrowser"
    input: ScreenCodec<
        {
            product: | {
                container: NavigableScreenId;
                kind: "story-sticker";
                nullState: string;
                wire: string;
            }
            | {
                browseSessionId: string;
                kind: "reel";
                media: {
                    byteLength: number;
                    durationMs: number;
                    height: number;
                    id: string;
                    kind: "video";
                    mimeType: "video/mp4";
                    width: number;
                };
                nullState: string;
                overlay: NavigableScreenId;
                wire: string;
            };
        },
        ScreenEncodedInput,
    >

    What an edge passes to enter — for an item, the schema of one list entry.

    is: (
        value: unknown,
    ) => value is AssembledHandle<
        "PostingMusicBrowser",
        "screen",
        { browseSessionId: string },
        {
            openSearch: (
                self: ScreenHandle,
                state: PostingMusicBrowserState,
            ) => (
                ...args: [],
            ) => Effect<
                AssembledHandle<
                    "PostingMusicSearchResults",
                    "screen",
                    {
                        keywords: readonly string[];
                        query: string;
                        results: readonly (
                            | { alacornSessionId: ...; kind: ...; track: ... }
                            | { kind: ...; originalAudio: ... }
                        )[];
                        searchSessionId: string;
                    },
                    PostingMusicSearchResultsActions,
                    Record<never, never>,
                    ScreenHandle,
                    "required",
                    true,
                    never,
                    AndroidScreens,
                >,

                    | IgCheckpointError
                    | IgAccountSuspendedError
                    | IgAccountDisabledError
                    | IgLoginRequiredError
                    | IgUserLoggedOutError
                    | ScreenDataError
                    | ScreenEnterConcurrentError
                    | ScreenEdgeInputError,
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation
                | ScreenStack
                | ScreenCatalog,
            >;
        },
        Record<never, never>,
        ScreenHandle | undefined,
        "optional",
        true,
        never,
        unknown,
    >

    Whether value is this screen's handle: the narrowing of a union of handles — what back returns (the screens that can open the screen), or the launch's first-screen union — written XxxScreen.is(handle) (owner decision, 2026-10-23: the guard is a method of the definition, not a free function).

    items: Record<never, never> | undefined

    Absent when the screen shows no item lists.

    itemVisits: boolean

    Whether the items of its lists have visits (leave, resume): a plain feed's have none.

    kind: "screen"
    leave:
        | (
            (
                left: ScreenLeave<
                    {
                        product: | {
                            container: NavigableScreenId;
                            kind: "story-sticker";
                            nullState: string;
                            wire: string;
                        }
                        | {
                            browseSessionId: string;
                            kind: "reel";
                            media: {
                                byteLength: number;
                                durationMs: number;
                                height: number;
                                id: string;
                                kind: "video";
                                mimeType: "video/mp4";
                                width: number;
                            };
                            nullState: string;
                            overlay: NavigableScreenId;
                            wire: string;
                        };
                    },
                    { browseSessionId: string },
                    PostingMusicBrowserState,
                >,
            ) => Effect<
                void,
                never,
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
            >
        )
        | undefined

    What the engine runs each time the thing stops being on top — covered by another screen, closed, or left by a tab switch — after the transition that did it committed. It receives the visit that ended, with its duration by the engine's clock. It cannot fail; absent when the thing does nothing then.

    ownsCheckpoint: OwnsCheckpoint<"PostingMusicBrowser">

    Whether checkpoint is this screen's, read synchronously from the id it carries, from the object or from its JSON text (owner decision, 2026-10-24: the caller never parses before the call). A type guard for the object form, so after it the platform's restores of this screen (AndroidIgpapi.resumeSilently({ checkpoint, screen: XxxScreen, … })) cannot refuse with a mismatch; a string answers a plain boolean. A corrupt checkpoint still fails them with CheckpointDecodeError.

    The restores themselves are the platform's: they build the process from the checkpoint, so they are installed on the definition by the platform package, and the platform's type of the definition carries them (owner decision, 2026-10-24).

    positionOf: (handle: ScreenHandle) => Json | undefined

    Where the screen's frame is beyond what entering shows (a feed's deepest page shown), for a trail; absent when nowhere beyond.

    readReleased?: ScreenReleasedReader

    How a checkpoint written by an earlier release is read into this screen: the stored input and data, in the shape that release gave them, become the current stored shape before the definition's schemas decode them. A field the release wrote and the screen no longer holds is read with a schema of its own and mapped into where its fact lives now, or dropped with a logged StoredSnapshotFieldDropped; it never fails the restore (“Stored snapshots of earlier releases”). Absent on a screen whose stored shape never changed; a frame already in the current shape passes through it unchanged.

    readReleasedInput?: ScreenReleasedInputReader

    The same reading for an input stored alone — a trail's root and steps, the process's root: the input of an earlier release, read into the current stored shape before the screen's input schema decodes it.

    releasedItemLists: Readonly<Record<string, string>>

    The names a released trail format gave this screen's item lists, mapped to the current ones (a feed's items were page in formats 1 and 2): a retrace of a released trail reads a step's list through it.

    restoreCheckpointExtra: (
        handle: ScreenHandle,
        extra: Json,
    ) => Effect<
        void,
        ScreenDataError
        | CheckpointDecodeError,

            | ScreenStack
            | ScreenStepServices<
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
                Record<never, never>,
            >,
    >

    Puts that back into a handle a checkpoint rebuilt, before any action runs.

    restorePosition: (
        handle: ScreenHandle,
        position: Json,
    ) => Effect<
        void,
        ScreenLookupFailure<
            | IgCheckpointError
            | IgAccountSuspendedError
            | IgAccountDisabledError
            | IgLoginRequiredError
            | IgUserLoggedOutError,
            Record<never, never>,
        >,
        ScreenStepServices<
            | PlainJsonApiHttp
            | MobileDevice
            | GraphqlJsonHttp
            | MobileApplication
            | MobileNavigation,
            Record<never, never>,
        >,
    >

    Brings a fresh frame back to a position a trail stored, sending what the app sends to get there.

    resume:
        | (
            (
                resumed: ScreenResume<
                    {
                        product: | {
                            container: NavigableScreenId;
                            kind: "story-sticker";
                            nullState: string;
                            wire: string;
                        }
                        | {
                            browseSessionId: string;
                            kind: "reel";
                            media: {
                                byteLength: number;
                                durationMs: number;
                                height: number;
                                id: string;
                                kind: "video";
                                mimeType: "video/mp4";
                                width: number;
                            };
                            nullState: string;
                            overlay: NavigableScreenId;
                            wire: string;
                        };
                    },
                    { browseSessionId: string },
                    PostingMusicBrowserState,
                >,
            ) => Effect<
                void,
                never,
                | PlainJsonApiHttp
                | MobileDevice
                | GraphqlJsonHttp
                | MobileApplication
                | MobileNavigation,
            >
        )
        | undefined

    What the engine runs each time the thing is on top again after a leave — the screen that covered it was closed — after that transition committed. Never on the first show (that is enter), never after a rolled-back transition. It cannot fail; absent when the thing does nothing then.

    state: (
        opened: ScreenStateArgs<
            {
                product: | {
                    container: NavigableScreenId;
                    kind: "story-sticker";
                    nullState: string;
                    wire: string;
                }
                | {
                    browseSessionId: string;
                    kind: "reel";
                    media: {
                        byteLength: number;
                        durationMs: number;
                        height: number;
                        id: string;
                        kind: "video";
                        mimeType: "video/mp4";
                        width: number;
                    };
                    nullState: string;
                    overlay: NavigableScreenId;
                    wire: string;
                };
            },
            { browseSessionId: string },
            undefined,
        >,
    ) => PostingMusicBrowserState

    What continuing from it needs, from its input and data (and, for an item, its host screen's state).