@medipha/chat 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,9 @@ export declare const FILE_TYPE_OPTIONS: Array<{
18
18
  }>;
19
19
  export declare function getFileTypeCategoryByName(name: string | null | undefined): FileTypeFilter;
20
20
  export declare function getFileTypeCategory(attachment: ChatMessageAttachment): FileTypeFilter;
21
- /** Icon (label + color class) for a file by its name/extension — the archive's icon set. */
21
+ /** Icon (label + color class) for a file by its name/extension — the archive's icon set.
22
+ * Extensions sharing one color class (grouped as a category, e.g. zip/rar/7z) still each
23
+ * get their own label instead of every one reading the category's generic name. */
22
24
  export declare function getFileIcon(name: string | null | undefined): {
23
25
  label: string;
24
26
  className: string;
@@ -55,7 +55,6 @@ interface ConversationDetailProps {
55
55
  composerError: string;
56
56
  pendingAttachments: PendingAttachment[];
57
57
  onRemovePendingAttachment: (index: number) => void;
58
- typingNames: string[];
59
58
  canModerateMessages: boolean;
60
59
  canManagePins: boolean;
61
60
  dayDividerKeys: Set<string>;
@@ -0,0 +1,16 @@
1
+ export interface MultiSelectFilterPillOption {
2
+ value: string;
3
+ label: string;
4
+ }
5
+ interface MultiSelectFilterPillProps {
6
+ label: string;
7
+ value: string[];
8
+ options: MultiSelectFilterPillOption[];
9
+ onChange: (value: string[]) => void;
10
+ disabled?: boolean;
11
+ }
12
+ /** Multi-select sibling of FilterPill — same trigger/menu shell and CSS classes, but
13
+ * toggles values in and out of the array instead of picking exactly one, and the menu
14
+ * stays open across clicks so several options can be checked in one pass. */
15
+ export declare function MultiSelectFilterPill({ label, value, options, onChange, disabled, }: MultiSelectFilterPillProps): import("react/jsx-runtime").JSX.Element;
16
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reflects `value` only after it has stopped changing for `delayMs` — used on filter/search
3
+ * inputs so a fast typist doesn't trigger a re-filter (or a network request) on every
4
+ * keystroke.
5
+ */
6
+ export declare function useDebouncedValue<T>(value: T, delayMs: number): T;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Closes `onClose` on Escape, but only for the topmost overlay among every other mounted
3
+ * caller of this hook. Uses a capture-phase `document` listener + `stopPropagation` so a
4
+ * host page embedding this chat (e.g. an ERP shell with its own bubble-phase Escape
5
+ * listener to close ITS modal) never sees the key press once an overlay here has claimed
6
+ * it — capture always runs before bubble, regardless of listener registration order.
7
+ */
8
+ export declare function useTopmostEscape(onClose: () => void): void;
@@ -2,6 +2,11 @@ interface PresenceState {
2
2
  /** userId -> online, for every user presence has been reported for since connecting. */
3
3
  onlineByUserId: Record<string, boolean>;
4
4
  setOnline: (userId: string, isOnline: boolean) => void;
5
+ /** Merges several userId -> online entries at once — used to seed this store from a
6
+ * REST-fetched conversation's `member.isOnline` (already live-computed server-side),
7
+ * so a page reload doesn't show everyone as offline until their next presence:changed
8
+ * event happens to fire. */
9
+ setOnlineMany: (records: Record<string, boolean>) => void;
5
10
  }
6
11
  /** Global presence map fed by a single `presence:changed` socket subscription (wired up
7
12
  * once in ChatBootstrap) — every place that needs a user's online dot (sidebar rows,