@ethora/chat-component 26.7.5 → 26.7.7

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.
Files changed (174) hide show
  1. package/README.md +72 -16
  2. package/dist/ChatProfileModal-DehQM4Bo.js +2135 -0
  3. package/dist/FilePreviewModal-BcZLtVAy.js +743 -0
  4. package/dist/ManageDataModal-DWabKhSC.js +178 -0
  5. package/dist/MarkdownBody-CSY3YKDh.js +16874 -0
  6. package/dist/SideDrawer-DewJ-iPn.js +270 -0
  7. package/dist/UserProfileModal-BHZ0TULc.js +574 -0
  8. package/dist/UserSettingsModal-BxwVWNKo.js +50 -0
  9. package/dist/{VideoCallOverlay-C4M2I9oV.js → VideoCallOverlay-D5SuimGP.js} +9 -10
  10. package/dist/VisibilityModal-Bd67b4EM.js +132 -0
  11. package/dist/assets/icons.d.ts +30 -0
  12. package/dist/components/ContextMenu/ContextMenuComponents.d.ts +1 -3
  13. package/dist/components/EmojiPicker/LazyEmojiPicker.d.ts +3 -0
  14. package/dist/components/ExampleComponents/CustomMessage.d.ts +3 -3
  15. package/dist/components/Files/FilesList.d.ts +12 -0
  16. package/dist/components/Files/FilesPanel.d.ts +3 -0
  17. package/dist/components/Files/fileCategory.d.ts +13 -0
  18. package/dist/components/InputComponents/AttachmentPreview.d.ts +17 -0
  19. package/dist/components/InputComponents/MentionDropdown.d.ts +13 -0
  20. package/dist/components/InputComponents/MentionPickerModal.d.ts +19 -0
  21. package/dist/components/MainComponents/AttachmentList.d.ts +7 -0
  22. package/dist/components/MainComponents/ChatErrorBoundary.d.ts +53 -0
  23. package/dist/components/MainComponents/ChatErrorScreen.d.ts +24 -0
  24. package/dist/components/MainComponents/ChatRoomOpeningPreview.d.ts +24 -0
  25. package/dist/components/MainComponents/ChatWrapper.d.ts +1 -0
  26. package/dist/components/MainComponents/ChooseChatMessage.d.ts +11 -1
  27. package/dist/components/MainComponents/HeaderLogo.d.ts +18 -0
  28. package/dist/components/MainComponents/MediaMessage.d.ts +5 -0
  29. package/dist/components/MainComponents/MessageContainer.d.ts +2 -2
  30. package/dist/components/MainComponents/ReduxWrapper.d.ts +1 -2
  31. package/dist/components/MainComponents/SystemMessage.d.ts +1 -2
  32. package/dist/components/MenuRoom/MenuRoom.d.ts +1 -0
  33. package/dist/components/MessageBubble/CustomDivider.d.ts +3 -3
  34. package/dist/components/MessageBubble/Message.d.ts +2 -2
  35. package/dist/components/MessageBubble/MessageTranslate.d.ts +28 -10
  36. package/dist/components/MessageBubble/QuickReplies.d.ts +6 -5
  37. package/dist/components/Modals/ChatProfileModal/ChatProfileMemberRow.d.ts +18 -0
  38. package/dist/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +17 -0
  39. package/dist/components/Modals/FilePreviewModal/ImageLightbox.d.ts +35 -0
  40. package/dist/components/Modals/FilePreviewModal/PdfView.d.ts +14 -3
  41. package/dist/components/Modals/Modal/Modal.d.ts +10 -0
  42. package/dist/components/Modals/Modal/ModalContent.d.ts +21 -0
  43. package/dist/components/Modals/ModalBox/ModalBox.d.ts +9 -0
  44. package/dist/components/Modals/ModalReportChat/ModalReportChat.d.ts +6 -1
  45. package/dist/components/Modals/ModalWrapper/ModalWrapper.d.ts +8 -0
  46. package/dist/components/Modals/NewChatModal/styledNewChatComponents.d.ts +12 -0
  47. package/dist/components/Modals/SettingsModals/SharedStyledComponents.d.ts +12 -0
  48. package/dist/components/Modals/SettingsModals/Visibility/StyledComponents.d.ts +1 -1
  49. package/dist/components/Modals/SideDrawer/DrawerProfileParts.d.ts +42 -0
  50. package/dist/components/Modals/SideDrawer/SideDrawer.d.ts +64 -0
  51. package/dist/components/Modals/SidePanel/SidePanel.d.ts +31 -0
  52. package/dist/components/Modals/UserProfileModal/EditUserModal.d.ts +5 -1
  53. package/dist/components/Modals/modalComponents.d.ts +6 -0
  54. package/dist/components/Modals/motionVariants.d.ts +37 -0
  55. package/dist/components/Modals/styledModalComponents.d.ts +13 -3
  56. package/dist/components/RoomComponents/ChatRoomItem.d.ts +0 -1
  57. package/dist/components/RoomComponents/OnlineUsersPopover.d.ts +0 -1
  58. package/dist/components/UsersList/StyledComponents.d.ts +5 -1
  59. package/dist/components/UsersList/UsersList.d.ts +23 -0
  60. package/dist/components/styled/Button.d.ts +11 -1
  61. package/dist/components/styled/ChatWrapperBox.d.ts +3 -1
  62. package/dist/components/styled/PdfMessage.d.ts +13 -0
  63. package/dist/components/styled/RoomListComponents/index.d.ts +22 -1
  64. package/dist/components/styled/SendInput.d.ts +19 -5
  65. package/dist/components/styled/StyledComponents.d.ts +1 -1
  66. package/dist/components/styled/StyledInputComponents/MediaComponents.d.ts +18 -0
  67. package/dist/components/styled/StyledInputComponents/StyledInputComponents.d.ts +21 -0
  68. package/dist/components/styled/TreadLabel.d.ts +2 -2
  69. package/dist/components/styled/UnsupportedType.d.ts +1 -1
  70. package/dist/context/ModalTransitionContext.d.ts +2 -0
  71. package/dist/examples/quiz/QuizDemo.d.ts +3 -0
  72. package/dist/examples/quiz/quizScript.d.ts +38 -0
  73. package/dist/examples/quiz/useDemoSession.d.ts +42 -0
  74. package/dist/examples/quiz/useQuizFlow.d.ts +47 -0
  75. package/dist/firebase-config.d.ts +2 -4
  76. package/dist/handleCopyClick-BoZWTBLC.js +108 -0
  77. package/dist/helpers/MarkdownBody.d.ts +7 -0
  78. package/dist/helpers/attachments.d.ts +33 -0
  79. package/dist/helpers/botMarkup.d.ts +30 -0
  80. package/dist/helpers/buildChatShareLink.d.ts +20 -0
  81. package/dist/helpers/cacheScope.d.ts +15 -1
  82. package/dist/helpers/constants/MODAL_TYPES.d.ts +13 -7
  83. package/dist/helpers/createRoomFromApi.d.ts +1 -1
  84. package/dist/helpers/ethoraLogger.d.ts +8 -0
  85. package/dist/helpers/fileKind.d.ts +17 -0
  86. package/dist/helpers/formatNumberWithCommas.d.ts +1 -1
  87. package/dist/helpers/hiddenRooms.d.ts +1 -1
  88. package/dist/helpers/historyPreloadScheduler.d.ts +1 -0
  89. package/dist/helpers/lazyEmoji.d.ts +3 -0
  90. package/dist/helpers/localStorageUser.d.ts +1 -1
  91. package/dist/helpers/markdownSanitizeSchema.d.ts +3 -0
  92. package/dist/helpers/mentions.d.ts +63 -0
  93. package/dist/helpers/parseMessageBody.d.ts +12 -2
  94. package/dist/helpers/pdf/loadPdfjs.d.ts +64 -0
  95. package/dist/helpers/remarkLineBreaks.d.ts +42 -0
  96. package/dist/helpers/resolveMessageTranslation.d.ts +34 -0
  97. package/dist/helpers/roomImageGallery.d.ts +53 -0
  98. package/dist/helpers/secureFileUrl.d.ts +8 -0
  99. package/dist/helpers/sendFailureWatchdog.d.ts +62 -0
  100. package/dist/helpers/transformTranslatations.d.ts +1 -2
  101. package/dist/hooks/pushSubscriptionSweep.d.ts +41 -0
  102. package/dist/hooks/useChatOpenPhase.d.ts +21 -0
  103. package/dist/hooks/useChatWrapperInit.d.ts +1 -0
  104. package/dist/hooks/useDelayedAction.d.ts +22 -0
  105. package/dist/hooks/useExclusiveRightPane.d.ts +25 -0
  106. package/dist/hooks/useExitTransition.d.ts +24 -0
  107. package/dist/hooks/useFilesEndpointSupport.d.ts +9 -0
  108. package/dist/hooks/useGetNewArchRoom.d.ts +3 -1
  109. package/dist/hooks/useInView.d.ts +17 -0
  110. package/dist/hooks/useMentionComposer.d.ts +45 -0
  111. package/dist/hooks/useMessageHeapState.d.ts +1 -1
  112. package/dist/hooks/useMessageTranslation.d.ts +4 -3
  113. package/dist/hooks/useModalDismiss.d.ts +27 -0
  114. package/dist/hooks/useMyFiles.d.ts +16 -0
  115. package/dist/hooks/usePdfThumbnail.d.ts +22 -0
  116. package/dist/hooks/useQRCodeChatHandler.d.ts +29 -1
  117. package/dist/hooks/useRoomMute.d.ts +19 -0
  118. package/dist/hooks/useRoomState.d.ts +1 -1
  119. package/dist/hooks/useSendMessage.d.ts +4 -3
  120. package/dist/hooks/useTypography.d.ts +1 -1
  121. package/dist/hooks/useUnreadMessagesCounter.d.ts +11 -2
  122. package/dist/index.esm-B-3fyDHY.js +28 -0
  123. package/dist/index.esm-CRM4VCRa.js +943 -0
  124. package/dist/index.esm-msbp26WN.js +3352 -0
  125. package/dist/index.esm2017-CL0mvq6y.js +1578 -0
  126. package/dist/main-C2FKeV6y.js +32375 -0
  127. package/dist/main.css +1 -1
  128. package/dist/main.d.ts +14 -0
  129. package/dist/main.js +18 -18
  130. package/dist/module-DGXkb0R_.js +2960 -0
  131. package/dist/native-CDi4YD_s.js +13 -0
  132. package/dist/networking/api-requests/files.api.d.ts +19 -0
  133. package/dist/networking/api-requests/rooms.api.d.ts +10 -2
  134. package/dist/networking/api-requests/translate.api.d.ts +15 -0
  135. package/dist/networking/api-requests/user.api.d.ts +2 -0
  136. package/dist/networking/sharedRequest.d.ts +4 -0
  137. package/dist/networking/xmpp/allRoomPresences.xmpp.d.ts +3 -1
  138. package/dist/networking/xmpp/createTimeoutPromise.xmpp.d.ts +14 -0
  139. package/dist/networking/xmpp/sendTextMessage.xmpp.d.ts +2 -1
  140. package/dist/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts +2 -1
  141. package/dist/networking/xmppClient.d.ts +12 -3
  142. package/dist/pdf-B5b7qHu6.js +17130 -0
  143. package/dist/pdf.worker.min-COYn-gId.js +24385 -0
  144. package/dist/roomStore/index.d.ts +20 -0
  145. package/dist/roomStore/persistEncryption.d.ts +51 -0
  146. package/dist/roomStore/roomsSlice.d.ts +49 -6
  147. package/dist/styles/classNames.d.ts +35 -0
  148. package/dist/styles/motion.d.ts +71 -0
  149. package/dist/styles/tokens.d.ts +27 -0
  150. package/dist/testIds.d.ts +1 -1
  151. package/dist/types/models/attachment.model.d.ts +33 -0
  152. package/dist/types/models/config.model.d.ts +160 -19
  153. package/dist/types/models/file.model.d.ts +20 -0
  154. package/dist/types/models/message.model.d.ts +15 -6
  155. package/dist/types/models/room.model.d.ts +40 -2
  156. package/dist/types/types.d.ts +3 -1
  157. package/dist/utils/resendMessage.d.ts +22 -1
  158. package/dist/utils/translateModePolicy.d.ts +1 -0
  159. package/dist/wavesurfer.esm-D_a19qBW.js +952 -0
  160. package/package.json +22 -2
  161. package/dist/VideoCallOverlay-C4M2I9oV.js.map +0 -1
  162. package/dist/components/MainComponents/VirtualList.d.ts +0 -10
  163. package/dist/components/Modals/SettingsModals/BlockedUsers/BlockedUsersModal.d.ts +0 -6
  164. package/dist/components/Modals/SettingsModals/DocumentShares/DocumentSharesModal.d.ts +0 -6
  165. package/dist/components/Modals/SettingsModals/ManageDataModal/StyledComponents.d.ts +0 -0
  166. package/dist/components/Modals/SettingsModals/ProfileShares/ProfileShares.d.ts +0 -6
  167. package/dist/components/Modals/SettingsModals/Referrals/Referrals.d.ts +0 -6
  168. package/dist/hooks/useMessageQueue.d.ts +0 -4
  169. package/dist/main-DeiuFYsl.js +0 -55812
  170. package/dist/main-DeiuFYsl.js.map +0 -1
  171. package/dist/main.js.map +0 -1
  172. package/dist/networking/xmpp/getHistory.xmpp.d.ts +0 -3
  173. package/dist/networking/xmpp/listenerManager.d.ts +0 -17
  174. package/dist/utils/xmppMemoryMonitor.d.ts +0 -16
@@ -2,5 +2,22 @@ import { default as React } from 'react';
2
2
  interface FilePreviewModalProps {
3
3
  handleCloseModal: any;
4
4
  }
5
+ /**
6
+ * Full-screen media viewer.
7
+ *
8
+ * Images get a real lightbox: previous/next across every image loaded for
9
+ * the room (see helpers/roomImageGallery for exactly what that set is),
10
+ * wheel/pinch zoom with bounded panning, double-click/double-tap to toggle
11
+ * fit, arrow-key and swipe navigation. Video, PDF and unsupported files take
12
+ * the same paths they always did and get no navigation chrome, so opening a
13
+ * PDF is the experience it was before.
14
+ *
15
+ * Escape, initial focus and focus restore are NOT handled here: the modal
16
+ * layer (Modals/Modal/Modal.tsx) already runs `useModalDismiss` around every
17
+ * entry in MODAL_COMPONENTS, this one included. Adding a second Escape
18
+ * listener would double-handle the key and fight that hook's focus restore,
19
+ * so the only key listener below is for the arrows, and it explicitly leaves
20
+ * every other key (Escape included) alone.
21
+ */
5
22
  declare const FilePreviewModal: React.FC<FilePreviewModalProps>;
6
23
  export default FilePreviewModal;
@@ -0,0 +1,35 @@
1
+ import { default as React } from 'react';
2
+ export declare const MIN_SCALE = 1;
3
+ export declare const MAX_SCALE = 6;
4
+ /** What a double-click / double-tap jumps to from the fitted view. */
5
+ export declare const DOUBLE_TAP_SCALE = 2.5;
6
+ export interface ImageLightboxHandle {
7
+ zoomIn: () => void;
8
+ zoomOut: () => void;
9
+ reset: () => void;
10
+ }
11
+ interface ImageLightboxProps {
12
+ src: string;
13
+ alt: string;
14
+ /** Swipe (touch) navigation; also used to report gesture direction. */
15
+ onSwipeLeft?: () => void;
16
+ onSwipeRight?: () => void;
17
+ onError?: React.ReactEventHandler<HTMLImageElement>;
18
+ /** Reported on every scale change so the chrome can label its controls. */
19
+ onScaleChange?: (scale: number) => void;
20
+ }
21
+ /**
22
+ * The zoom/pan surface of the media viewer.
23
+ *
24
+ * Zoom model: the `<img>` keeps `object-fit: contain`, so scale 1 is always
25
+ * "fitted to the viewport" whatever the image's aspect ratio, and everything
26
+ * above it is a CSS transform on top of that fit - no re-layout, no
27
+ * re-decode, and the fitted view is exactly what the viewer saw before this
28
+ * feature existed. Zooming is anchored on the pointer (or on the midpoint
29
+ * between two fingers), and the pan offset is clamped every time either the
30
+ * scale or the offset changes, using the image's natural aspect ratio
31
+ * against the viewport box, so the picture can never be dragged off screen:
32
+ * at scale 1 the only legal offset is (0, 0).
33
+ */
34
+ declare const ImageLightbox: React.ForwardRefExoticComponent<ImageLightboxProps & React.RefAttributes<ImageLightboxHandle>>;
35
+ export default ImageLightbox;
@@ -1,4 +1,15 @@
1
- declare const PdfViewer: ({ pdfUrl }: {
2
- pdfUrl: any;
3
- }) => import("react/jsx-runtime").JSX.Element;
1
+ import { default as React } from 'react';
2
+ interface PdfViewerProps {
3
+ pdfUrl: string;
4
+ }
5
+ /**
6
+ * In-app PDF viewer.
7
+ *
8
+ * This used to be an iframe pointed at `mozilla.github.io/pdf.js/web/viewer.html`
9
+ * with the file URL in the query string, which meant every document a user
10
+ * opened was handed to a third-party host - and broke outright whenever that
11
+ * page changed or was unreachable. Rendering locally keeps the file URL
12
+ * inside the app and works offline-ish (the PDF itself still has to load).
13
+ */
14
+ declare const PdfViewer: React.FC<PdfViewerProps>;
4
15
  export default PdfViewer;
@@ -5,5 +5,15 @@ interface ModalProps {
5
5
  modal?: string;
6
6
  setOpenModal: (value?: ModalType) => any;
7
7
  }
8
+ /**
9
+ * Host for the store-driven modals that really are centred dialogs: the file
10
+ * preview / lightbox. The profile, user, settings, Manage Data and Visibility
11
+ * panels used to render here too, parked against the right edge of this same
12
+ * full-viewport overlay, which is exactly why they covered the conversation.
13
+ * They are rendered by `SidePanel` instead now, as a column of the chat's own
14
+ * flex row, so opening one shrinks the chat rather than hiding it. This
15
+ * component deliberately renders nothing for those types so they can never be
16
+ * painted twice.
17
+ */
8
18
  declare const Modal: React.FC<ModalProps>;
9
19
  export default Modal;
@@ -0,0 +1,21 @@
1
+ import { default as React } from 'react';
2
+ import { ModalType } from '../../../types/types';
3
+ /**
4
+ * The store-driven modal router, minus any opinion about WHERE the panel is
5
+ * painted.
6
+ *
7
+ * There are two hosts for it now and they place their content very
8
+ * differently: `Modal.tsx` paints a centred dialog on top of everything
9
+ * inside a scrim, while `SidePanel.tsx` paints a column that takes part in
10
+ * the chat's flex row (so opening a profile shrinks the chat instead of
11
+ * covering it). Everything else - which component is open, stepping a
12
+ * settings sub-panel back to Settings, Escape, and moving focus into a
13
+ * lazily-loaded chunk once it actually mounts - is identical, so it lives
14
+ * here once rather than being copied into both hosts.
15
+ */
16
+ interface ModalContentProps {
17
+ modal: string;
18
+ setOpenModal: (value?: ModalType) => any;
19
+ }
20
+ declare const ModalContent: React.FC<ModalContentProps>;
21
+ export default ModalContent;
@@ -3,6 +3,15 @@ interface ModalBoxProps {
3
3
  title: string;
4
4
  handleCloseModal: () => void;
5
5
  children: ReactNode;
6
+ /**
7
+ * True while the caller is keeping this mounted only to let the exit
8
+ * animation finish (see `useExitTransition` at the call site - typically
9
+ * `{shouldRender && <ModalBox isClosing={isExiting} .../>}`). Every close
10
+ * trigger here (X button, Escape, outside click) still just calls
11
+ * `handleCloseModal` immediately: the caller decides how long to keep
12
+ * rendering, this component only decides how it looks while that happens.
13
+ */
14
+ isClosing?: boolean;
6
15
  }
7
16
  export declare const ModalBox: FC<ModalBoxProps>;
8
17
  export {};
@@ -1,3 +1,8 @@
1
1
  import { default as React, FC } from 'react';
2
2
  export declare const Report: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
3
- export declare const ModalReportChat: FC;
3
+ interface ModalReportChatProps {
4
+ /** Forwarded to `ModalBox` - see its `isClosing` doc. */
5
+ isClosing?: boolean;
6
+ }
7
+ export declare const ModalReportChat: FC<ModalReportChatProps>;
8
+ export {};
@@ -11,6 +11,14 @@ interface ModalWrapperProps {
11
11
  setTextarea?: (value: string) => void;
12
12
  handleCloseModal: () => void;
13
13
  handleClick: () => void;
14
+ /**
15
+ * True while the caller is keeping this mounted only so the exit
16
+ * animation can finish - see `ModalBox`'s `isClosing` doc for the pattern
17
+ * (a `useExitTransition` at the `{shouldRender && <ModalWrapper .../>}`
18
+ * call site). Buttons here still call `handleCloseModal`/`handleClick`
19
+ * immediately either way.
20
+ */
21
+ isClosing?: boolean;
14
22
  }
15
23
  export declare const ModalWrapper: FC<ModalWrapperProps>;
16
24
  export {};
@@ -0,0 +1,12 @@
1
+ export declare const ChatTypeGroup: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
+ export declare const ChatTypeIndicator: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ $index: number;
4
+ $count: number;
5
+ }>> & string;
6
+ export declare const ChatTypeOption: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {
7
+ active: boolean;
8
+ }>> & string;
9
+ export declare const InlineUsersWrapper: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
10
+ $expanded: boolean;
11
+ }>> & string;
12
+ export declare const InlineUsersInner: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -11,11 +11,23 @@ export declare const RowWrapper: import('styled-components/dist/types').IStyledC
11
11
  export declare const SharedSettingsLabelData: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<Omit<import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>, "ref"> & {
12
12
  ref?: import('react').Ref<HTMLSpanElement>;
13
13
  }, never>> & string;
14
+ /**
15
+ * A settings action rendered as its own outlined row rather than an inline
16
+ * link, so "download my data" / "delete my account" read as deliberate,
17
+ * separately-weighted decisions - not just more text in the card. The
18
+ * border colour is caller-driven (primary for a normal action, the danger
19
+ * token for the destructive one), everything else - radius, padding,
20
+ * weight, the hover/focus feedback - comes from the shared tokens so both
21
+ * read as the same kind of control.
22
+ */
14
23
  export declare const SharedSettingsStyledButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<Omit<ButtonProps & import('react').RefAttributes<HTMLButtonElement>, "ref"> & {
15
24
  ref?: import('react').Ref<HTMLButtonElement>;
16
25
  }, {
17
26
  borderColor: string;
18
27
  }>> & string & Omit<import('react').ForwardRefExoticComponent<ButtonProps & import('react').RefAttributes<HTMLButtonElement>>, keyof import('react').Component<any, {}, any>>;
28
+ /** A quiet, boxed disclosure - the read-only counterpart to the button
29
+ * above, so a fact ("your data may be retained on-chain") doesn't compete
30
+ * visually with an action the person can take. */
19
31
  export declare const SharedSettingsInfoPanel: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
20
32
  bgColor: string;
21
33
  }>> & string;
@@ -4,5 +4,5 @@ export declare const Description: import('styled-components/dist/types').IStyled
4
4
  export declare const RadioGroup: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
5
5
  export declare const RadioLabel: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, never>> & string;
6
6
  export declare const RadioInput: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, {
7
- radioColor?: string;
7
+ $radioColor?: string;
8
8
  }>> & string;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The identity block at the top of a profile-style drawer: avatar, then the
3
+ * name. It carries no section heading on purpose - it IS the heading for the
4
+ * panel, and a "Profile" label above a face reads as filler.
5
+ *
6
+ * Shared by the user profile and the room profile so the two panels open with
7
+ * the same shape.
8
+ */
9
+ export declare const ProfileHero: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
10
+ /**
11
+ * The one bold, largest line in the entire panel family: deliberately so.
12
+ * Everything else in these drawers tops out at semibold (section labels,
13
+ * header title, row labels), so this is the only place `font-weight-bold`
14
+ * is used - it is what makes the hero read as the peak of the hierarchy
15
+ * instead of just another slightly-bigger label.
16
+ */
17
+ export declare const ProfileHeroName: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
18
+ export declare const ProfileHeroSubtitle: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
19
+ /** Stack of full-width action buttons, one per row. */
20
+ export declare const ProfileActions: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
21
+ /**
22
+ * Room/profile description, set directly under the hero with no "Description"
23
+ * label above it - the About section heading already says what this is.
24
+ * When there is no description yet, `$empty` swaps in a muted italic tone so
25
+ * the placeholder line reads as an unwritten blank rather than a failed
26
+ * value, without changing the copy or the layout.
27
+ */
28
+ export declare const DrawerDescriptionText: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, {
29
+ $empty?: boolean;
30
+ }>> & string;
31
+ /** Small icon+label tag for a single fact (chat type, visibility, ...). */
32
+ export declare const DrawerFactPill: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
33
+ /**
34
+ * A deliberate blank state - icon, title, optional hint - for "nothing here
35
+ * yet" spots (no files, no members) that used to be a single line of grey
36
+ * text sitting in a box and reading like something had gone wrong.
37
+ */
38
+ export declare const DrawerEmptyState: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
39
+ $compact?: boolean;
40
+ }>> & string;
41
+ export declare const DrawerEmptyStateTitle: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
42
+ export declare const DrawerEmptyStateHint: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -0,0 +1,64 @@
1
+ import { FC, ReactNode } from 'react';
2
+ export declare const DrawerPanel: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ $closing?: boolean;
4
+ }>> & string;
5
+ /** A labelled group: small caps heading, then a bordered card of rows. */
6
+ export declare const DrawerSection: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLElement>, HTMLElement>, never>> & string;
7
+ export declare const DrawerSectionTitle: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
8
+ /** The surface a section's rows sit on. */
9
+ export declare const DrawerCard: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
10
+ /** Padded block inside a card, for free-form content rather than a row list. */
11
+ export declare const DrawerCardBody: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
12
+ /** Section heading with a trailing control (e.g. "Files" ... "Show all"). */
13
+ export declare const SectionHeaderRow: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
14
+ /**
15
+ * Text-only affordance for "Show more" / "Show all". A real <button>, so it
16
+ * is reachable by keyboard and announced as a button - the panels used to
17
+ * fake this with a div carrying role="button" and hand-rolled key handling.
18
+ */
19
+ export declare const ShowMoreButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
20
+ /** Hairline between two rows of the same card. */
21
+ export declare const DrawerRowDivider: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
22
+ /**
23
+ * Filled, borderless search field - matches the room list's and the Files
24
+ * tab's own search bars (bg-subtle fill, no border) rather than the boxed,
25
+ * bordered field the member search used to be, which sat inside a bordered
26
+ * `DrawerCard` and read as a box nested in another box. Not built on the
27
+ * shared `InputComponents/Search` component: that one adds its own visible
28
+ * border and isn't in this pass's file list, so this is a local, purpose-fit
29
+ * equivalent that shares the same visual language as the other search bars
30
+ * in the app.
31
+ */
32
+ export declare const DrawerSearchBar: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
33
+ export declare const DrawerSearchInput: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, never>> & string;
34
+ /**
35
+ * Flat row list with no surrounding card border - used where the rows
36
+ * themselves (via hover/press state) already read as one group, e.g. the
37
+ * member list, so it doesn't also need a bounding box drawn around it.
38
+ */
39
+ export declare const DrawerList: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
40
+ export declare const DrawerLabel: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
41
+ export declare const DrawerHint: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
42
+ interface DrawerNavRowProps {
43
+ label: string;
44
+ hint?: string;
45
+ onClick: () => void;
46
+ }
47
+ /** One "opens another panel" row inside a `DrawerCard`. */
48
+ export declare const DrawerNavRow: FC<DrawerNavRowProps>;
49
+ export interface SideDrawerProps {
50
+ /** Heading text; also the dialog's accessible name. */
51
+ title: string;
52
+ /** Invoked by the back button and by Escape. */
53
+ onClose: () => void;
54
+ /** Controls in the header's trailing slot (edit, overflow menu, QR, ...). */
55
+ headerActions?: ReactNode;
56
+ /**
57
+ * Label for the leading button. Sub-panels step back to their parent, so
58
+ * they read as "Back"; a top-level panel reads as "Close".
59
+ */
60
+ backLabel?: string;
61
+ children: ReactNode;
62
+ }
63
+ declare const SideDrawer: FC<SideDrawerProps>;
64
+ export default SideDrawer;
@@ -0,0 +1,31 @@
1
+ import { default as React } from 'react';
2
+ import { ModalType } from '../../../types/types';
3
+ /**
4
+ * The chat's third column: chat profile, user profile, settings, Manage Data
5
+ * and Visibility.
6
+ *
7
+ * These used to be children of the modal overlay layer - a fixed,
8
+ * full-viewport `ModalBackground` with the panel parked against its right
9
+ * edge - so opening one dropped a 400px panel ON TOP of the conversation and
10
+ * the message you were reading disappeared underneath it. This component is
11
+ * rendered as a sibling of the chat pane inside `ChatWrapper`'s flex row
12
+ * instead, so the panel occupies real layout space and the chat simply gets
13
+ * narrower, the way Telegram Web behaves.
14
+ *
15
+ * Which panel is open is still the store's `activeModal` and is still routed
16
+ * through `MODAL_COMPONENTS`; `ModalContent` is the shared router both this
17
+ * and `Modal` use, so there is exactly one source of truth.
18
+ *
19
+ * Below the mobile breakpoint the column goes back to covering everything:
20
+ * three columns cannot fit on a phone, and the panel being the whole screen
21
+ * is the behaviour that was already there. `ChatWrapperInnerBox` is
22
+ * positioned, so `inset: 0` here is the chat's own box, not the host page.
23
+ */
24
+ export declare const SIDE_PANEL_WIDTH_PX = 400;
25
+ export declare const SIDE_PANEL_BREAKPOINT_PX = 767;
26
+ interface SidePanelProps {
27
+ modal?: string;
28
+ setOpenModal: (value?: ModalType) => any;
29
+ }
30
+ declare const SidePanel: React.FC<SidePanelProps>;
31
+ export default SidePanel;
@@ -4,5 +4,9 @@ interface EditUserModalProps {
4
4
  modalUser: any;
5
5
  config: any;
6
6
  }
7
- declare const EditUserModal: React.FC<EditUserModalProps>;
7
+ /** What the parent drawer's header Save button calls. */
8
+ export interface EditUserModalHandle {
9
+ save: () => Promise<void>;
10
+ }
11
+ declare const EditUserModal: React.ForwardRefExoticComponent<EditUserModalProps & React.RefAttributes<EditUserModalHandle>>;
8
12
  export default EditUserModal;
@@ -0,0 +1,6 @@
1
+ import { default as React } from 'react';
2
+ type ModalComponent = React.FC<{
3
+ handleCloseModal: () => void;
4
+ }>;
5
+ export declare const MODAL_COMPONENTS: Record<string, React.LazyExoticComponent<ModalComponent>>;
6
+ export {};
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Exit-animation variants of the shared modal primitives from
3
+ * `styledModalComponents.tsx` (owned by another agent right now - see
4
+ * CLAUDE.md coordination notes, not edited here). `styled(Component)`
5
+ * composition lets these add a `$closing` branch without touching that
6
+ * file: styled-components injects the extending component's class after the
7
+ * base one, so its rules win the cascade for the same element.
8
+ *
9
+ * Used by `Modal.tsx`, `NewChatModal.tsx` and `ModalWrapper.tsx` to fade/
10
+ * scale a modal out instead of letting it vanish when it unmounts.
11
+ */
12
+ /**
13
+ * `$closing` fades the scrim back out.
14
+ *
15
+ * This used to skip the fade in the backdrop's old `$drawer` mode, where the
16
+ * scrim was transparent and had nothing to fade. That mode is gone: the
17
+ * profile and settings panels are a layout column now (see SidePanel), so the
18
+ * only things left behind this backdrop are real centred dialogs, and they all
19
+ * want the fade.
20
+ */
21
+ export declare const PresenceModalBackground: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<Omit<import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "$anchorTop"> & {
22
+ $anchorTop?: boolean;
23
+ }, "ref"> & {
24
+ ref?: import('react').Ref<HTMLDivElement>;
25
+ }, {
26
+ $closing?: boolean;
27
+ }>> & string;
28
+ export declare const PresenceModalContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('styled-components').FastOmit<import('styled-components').FastOmit<import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
29
+ ref?: import('react').Ref<HTMLDivElement>;
30
+ }>, never>, never>, {
31
+ $closing?: boolean;
32
+ }>> & string;
33
+ export declare const PresenceModalContainerFullScreen: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('styled-components').FastOmit<import('styled-components').FastOmit<import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
34
+ ref?: import('react').Ref<HTMLDivElement>;
35
+ }>, never>, never>, {
36
+ $closing?: boolean;
37
+ }>> & string;
@@ -1,11 +1,21 @@
1
1
  import { ButtonProps } from '../styled/Button';
2
- export declare const ModalBackground: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
+ export declare const ModalBackground: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ $anchorTop?: boolean;
4
+ }>> & string;
3
5
  export declare const CloseButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
4
- export declare const ModalContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
6
+ export declare const ModalContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('styled-components').FastOmit<import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
7
+ ref?: import('react').Ref<HTMLDivElement>;
8
+ }>, never>, never>> & string;
5
9
  export declare const ModalTitle: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, never>> & string;
10
+ /** Small uppercase-weight label above a field/list inside a modal - e.g. "Select Users (max 20)". */
11
+ export declare const ModalSectionLabel: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
12
+ /** 48px-min-height row used for members/blocked-users/etc. lists inside modals. */
13
+ export declare const ModalListRow: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
6
14
  export declare const ModalDescription: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, never>> & string;
7
15
  export declare const GroupContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
8
- export declare const ModalContainerFullScreen: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
16
+ export declare const ModalContainerFullScreen: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('styled-components').FastOmit<import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
17
+ ref?: import('react').Ref<HTMLDivElement>;
18
+ }>, never>, never>> & string;
9
19
  export declare const HeaderContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<Omit<import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>, "ref"> & {
10
20
  ref?: import('react').Ref<HTMLDivElement>;
11
21
  }, never>> & string;
@@ -2,7 +2,6 @@ import { default as React } from 'react';
2
2
  import { IConfig, IRoom } from '../../types/types';
3
3
  interface ChatRoomItemProps {
4
4
  chat: IRoom;
5
- index: number;
6
5
  isChatActive: boolean;
7
6
  performClick: (chat: IRoom) => void;
8
7
  config: IConfig;
@@ -5,7 +5,6 @@ interface OnlineUsersPopoverProps {
5
5
  onlineUsernames: string[];
6
6
  members?: RoomMember[];
7
7
  myXmppUsername: string;
8
- isChatActive?: boolean;
9
8
  }
10
9
  declare const OnlineUsersPopover: React.FC<OnlineUsersPopoverProps>;
11
10
  export default OnlineUsersPopover;
@@ -1,4 +1,8 @@
1
1
  export declare const ScrollableContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
- export declare const UserItem: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
2
+ export declare const UserItem: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ $selected?: boolean;
4
+ }>> & string;
5
+ export declare const UserItemInfo: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
3
6
  export declare const Checkbox: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, never>> & string;
4
7
  export declare const Label: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
8
+ export declare const EmptyState: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -6,6 +6,29 @@ interface UsersListProps {
6
6
  headerElement?: boolean;
7
7
  style?: any;
8
8
  filter?: RoomMember[];
9
+ /**
10
+ * When set, sources rows from this list instead of the global `usersSet`
11
+ * (e.g. the current room's members for the @-mention picker) rather than
12
+ * every user the client has ever seen.
13
+ */
14
+ members?: RoomMember[];
15
+ /**
16
+ * Excludes one user (by bare-jid local part, or the raw id) from the list -
17
+ * used by the mention picker to hide the current reader from their own
18
+ * mention candidates.
19
+ */
20
+ excludeUserId?: string;
21
+ /**
22
+ * Single-select mode: a row click calls `onSingleSelect` immediately
23
+ * instead of toggling the multi-select checkbox array, and no checkbox is
24
+ * rendered. Used by MentionPickerModal, which reuses this windowed list
25
+ * for a "pick one person" flow instead of building a separate one.
26
+ */
27
+ singleSelect?: boolean;
28
+ onSingleSelect?: (user: RoomMember) => void;
29
+ /** Overrides the default "Select Users (max 20)" heading - used by
30
+ * MentionPickerModal so the reused list reads as a mention picker. */
31
+ titleOverride?: string;
9
32
  }
10
33
  declare const UsersList: React.FC<UsersListProps>;
11
34
  export default UsersList;
@@ -4,8 +4,18 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
4
4
  EndIcon?: ReactElement;
5
5
  StartIcon?: ReactElement;
6
6
  loading?: boolean;
7
+ /**
8
+ * @deprecated No-op. `CustomButton`'s styles never actually read this
9
+ * prop, so it has had no visual effect for as long as it's existed - many
10
+ * call sites pass it expecting the default (unstyled-looking) button they
11
+ * already get from `variant="default"`. Kept accepted here only so those
12
+ * call sites keep compiling/rendering exactly as before; implementing it
13
+ * for real would change their visuals. Use `variant` instead.
14
+ */
7
15
  unstyled?: boolean;
8
- variant?: 'default' | 'filled' | 'outlined';
16
+ variant?: 'default' | 'filled' | 'outlined' | 'ghost';
17
+ /** Recolors the button around the danger token for destructive actions. Optional, defaults to the existing brand-blue styling. */
18
+ tone?: 'default' | 'danger';
9
19
  children?: React.ReactNode;
10
20
  }
11
21
  declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
@@ -1 +1,3 @@
1
- export declare const ChatWrapperBox: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
1
+ import { default as React } from 'react';
2
+ export declare const ChatWrapperBox: React.ForwardRefExoticComponent<Omit<import('styled-components').FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>, "ref"> & React.RefAttributes<HTMLDivElement>>;
3
+ export declare const ChatWrapperInnerBox: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
@@ -0,0 +1,13 @@
1
+ import { default as React } from 'react';
2
+ interface PdfMessageProps {
3
+ fileURL: string;
4
+ fileName: string;
5
+ mimetype?: string;
6
+ size?: string;
7
+ /** Server-side preview, when the storage produced one. Wins over pdf.js. */
8
+ locationPreview?: string;
9
+ /** Denser layout used when the message carries more than one file. */
10
+ compact?: boolean;
11
+ }
12
+ declare const PdfMessage: React.FC<PdfMessageProps>;
13
+ export default PdfMessage;
@@ -15,4 +15,25 @@ export declare const LastMessage: import('styled-components/dist/types').IStyled
15
15
  export declare const UserCount: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
16
16
  active: boolean;
17
17
  }>> & string;
18
- export declare const Divider: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
18
+ export declare const Divider: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
19
+ $hidden?: boolean;
20
+ }>> & string;
21
+ export declare const AnimatedRow: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
22
+ $delay?: number;
23
+ $skipAnimation?: boolean;
24
+ }>> & string;
25
+ export declare const TabsContainer: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
26
+ export declare const TabIndicator: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
27
+ $index: number;
28
+ $count: number;
29
+ }>> & string;
30
+ export declare const TabButton: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {
31
+ active: boolean;
32
+ }>> & string;
33
+ export declare const TabContent: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
34
+ export declare const SkeletonRow: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
35
+ export declare const SkeletonAvatar: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
36
+ export declare const SkeletonLines: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components').FastOmit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
37
+ export declare const SkeletonLine: import('styled-components/dist/types').IStyledComponentBase<"web", import('styled-components/dist/types').Substitute<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
38
+ $width?: string;
39
+ }>> & string;