Cause: la logique de suivi du bas de fil était dupliquée et ad-hoc dans chaque surface (scrollRef, followsLatestRef, showLatestButton dans CustomAgentChatView), et dérivait dans certains cas — le fil ne suivait plus les nouveaux messages. Fix: nouveau hook partagé shared/lib/useThreadScrollController (resté collé au bas quand l'utilisateur est déjà en bas, position préservée pendant la consultation de l'historique, notice latest sinon) câblé dans CustomAgentChatView, ConversationViewer et TicketAssistantPanel. QA verte: npm run typecheck exit 0; tests ciblés useThreadScrollController, CustomAgentChatView, ConversationViewer/useConversationThread et tickets verts; npm test 1400/1400 verts (137 fichiers); git diff --check. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
/**
|
|
* IdeA design system (LD) — public surface of the shared UI kit.
|
|
*
|
|
* Features import components and the `cn` helper from `@/shared`; the global
|
|
* theme (`styles/theme.css`) is imported once at the app entry point.
|
|
*/
|
|
|
|
export { cn } from "./lib/cn";
|
|
export type { ClassValue } from "./lib/cn";
|
|
export { useThreadScrollController } from "./lib/useThreadScrollController";
|
|
export type {
|
|
ThreadScrollController,
|
|
ThreadScrollNotice,
|
|
} from "./lib/useThreadScrollController";
|
|
|
|
export { Button } from "./ui/Button";
|
|
export type { ButtonProps, ButtonVariant, ButtonSize } from "./ui/Button";
|
|
|
|
export { IconButton } from "./ui/IconButton";
|
|
export type { IconButtonProps, IconButtonSize } from "./ui/IconButton";
|
|
|
|
export { Input } from "./ui/Input";
|
|
export type { InputProps } from "./ui/Input";
|
|
|
|
export { Field } from "./ui/Field";
|
|
export type { FieldProps } from "./ui/Field";
|
|
|
|
export { Panel } from "./ui/Panel";
|
|
export type { PanelProps } from "./ui/Panel";
|
|
|
|
export { Tabs } from "./ui/Tabs";
|
|
export type { TabsProps, TabItem } from "./ui/Tabs";
|
|
|
|
export { Toolbar } from "./ui/Toolbar";
|
|
export type { ToolbarProps } from "./ui/Toolbar";
|
|
|
|
export { Spinner } from "./ui/Spinner";
|
|
export type { SpinnerProps } from "./ui/Spinner";
|
|
|
|
export {
|
|
EntryTimestamp,
|
|
formatFullLocalTime,
|
|
formatShortLocalTime,
|
|
normalizeTimestamp,
|
|
} from "./ui/EntryTimestamp";
|
|
|
|
export { zIndex } from "./ui/zIndex";
|
|
export type { ZIndexLevel } from "./ui/zIndex";
|
|
|
|
export { FloatingWindow } from "./ui/FloatingWindow";
|
|
export type { FloatingWindowProps, FloatingWindowSize } from "./ui/FloatingWindow";
|
|
|
|
export { MenuBar } from "./ui/MenuBar";
|
|
export type { MenuBarProps, MenuBarMenu, MenuBarItem } from "./ui/MenuBar";
|
|
|
|
export { DockRegion } from "./ui/DockRegion";
|
|
export type { DockRegionProps, DockSide } from "./ui/DockRegion";
|
|
|
|
export { SmallDropdown } from "./ui/SmallDropdown";
|
|
export type { SmallDropdownProps, SmallDropdownOption } from "./ui/SmallDropdown";
|