/** * Questions offered at once on the launcher dock. * * Figma 14071:40078 stacks three. A fourth starts crowding the fold on a laptop * once questions wrap, and the panel already lists the rest. */ export declare const MAX_BUBBLES = 3; /** Structural shape of the operator's `starters` config; no import needed. */ export interface StarterTopicLike { questions?: readonly string[]; } export interface StartersLike { topics?: readonly StarterTopicLike[]; questions?: readonly string[]; } /** * FNV-1a, 32-bit. Not cryptographic, the only property that matters is that the * same page in the same visit always resolves to the same questions, with no * state to store and nothing to coordinate. Without that, the launcher would * reshuffle under the visitor's cursor on any re-render. */ export declare function hashSeed(input: string): number; /** * The pool, as one group per topic, trimmed, blanks dropped, empty groups * dropped. * * Grouping is kept rather than flattened because the draw below walks ACROSS * groups first. Reading a single topic was the original bug: an operator with * Pricing / Setup / Security / Integrations only ever got asked about pricing. */ export declare function buildStarterPool(starters: StartersLike | undefined): string[][]; /** * Draw up to `max` questions across topics before going deeper into any one, so * the stack offers several subjects rather than several angles on one. * * `seed` rotates both which topic leads and which question inside it, so a * different page draws a different slice of the same pool. * * The lap ceiling is the longest group: the inner index cycles with period * `qs.length`, so after that many laps nothing new can appear and the loop would * spin. Fewer topics than `max` degrades on its own, later laps refill from * topics already used, and `seen` stops a question repeating. */ export declare function pickStarterQuestions(pool: readonly (readonly string[])[], seed: number, max?: number): string[];