react-mention-input 1.1.12 → 1.1.14

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.
@@ -13,7 +13,10 @@ interface MentionInputProps {
13
13
  sendBtnClassName?: string;
14
14
  suggestionListClassName?: string;
15
15
  suggestionItemClassName?: string;
16
+ imgClassName?: string;
17
+ imgStyle?: React.CSSProperties;
16
18
  sendButtonIcon?: ReactNode;
19
+ attachmentButtonIcon?: ReactNode;
17
20
  onSendMessage?: (obj: {
18
21
  messageText: string;
19
22
  messageHTML: string;
@@ -39,7 +39,7 @@ import ReactDOM from "react-dom";
39
39
  import "./MentionInput.css";
40
40
  var MentionInput = function (_a) {
41
41
  var _b, _c;
42
- var users = _a.users, _d = _a.placeholder, placeholder = _d === void 0 ? "Type a message... (or drag & drop an image)" : _d, containerClassName = _a.containerClassName, inputContainerClassName = _a.inputContainerClassName, inputClassName = _a.inputClassName, sendBtnClassName = _a.sendBtnClassName, suggestionListClassName = _a.suggestionListClassName, suggestionItemClassName = _a.suggestionItemClassName, sendButtonIcon = _a.sendButtonIcon, onSendMessage = _a.onSendMessage, _e = _a.suggestionPosition, suggestionPosition = _e === void 0 ? 'bottom' : _e, onImageUpload = _a.onImageUpload;
42
+ var users = _a.users, _d = _a.placeholder, placeholder = _d === void 0 ? "Type a message... (or drag & drop an image)" : _d, containerClassName = _a.containerClassName, inputContainerClassName = _a.inputContainerClassName, inputClassName = _a.inputClassName, sendBtnClassName = _a.sendBtnClassName, suggestionListClassName = _a.suggestionListClassName, suggestionItemClassName = _a.suggestionItemClassName, imgClassName = _a.imgClassName, imgStyle = _a.imgStyle, sendButtonIcon = _a.sendButtonIcon, attachmentButtonIcon = _a.attachmentButtonIcon, onSendMessage = _a.onSendMessage, _e = _a.suggestionPosition, suggestionPosition = _e === void 0 ? 'bottom' : _e, onImageUpload = _a.onImageUpload;
43
43
  var _f = useState(""), inputValue = _f[0], setInputValue = _f[1]; // Plain text
44
44
  var _g = useState([]), suggestions = _g[0], setSuggestions = _g[1];
45
45
  var _h = useState(false), showSuggestions = _h[0], setShowSuggestions = _h[1];
@@ -339,14 +339,14 @@ var MentionInput = function (_a) {
339
339
  console.log(inputValue, (_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.innerText.trim(), "inputValue====");
340
340
  return (React.createElement("div", { className: "mention-container ".concat(containerClassName || "") },
341
341
  imageUrl && selectedImage && (React.createElement("div", { className: "image-preview-card" },
342
- React.createElement("img", { src: imageUrl, alt: "Preview" }),
342
+ React.createElement("img", { src: imageUrl, alt: "Preview", className: imgClassName || "", style: imgStyle }),
343
343
  React.createElement("button", { onClick: removeImage, className: "remove-image-btn", "aria-label": "Remove image" }, "\u00D7"))),
344
344
  React.createElement("div", { className: "mention-input-container ".concat(inputContainerClassName || "", " ").concat(isDraggingOver ? 'dragging-over' : ''), onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDragEnd: function () { return setIsDraggingOver(false); }, onDrop: handleDrop },
345
345
  isDraggingOver && (React.createElement("div", { className: "drag-overlay" },
346
346
  React.createElement("div", { className: "drag-message" },
347
347
  React.createElement("span", null, "Drop to upload")))),
348
348
  React.createElement("button", { onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, className: "attachment-button", type: "button", "aria-label": "Attach image" },
349
- React.createElement("span", { className: "attachment-icon" }, "\uD83D\uDCF7")),
349
+ React.createElement("span", { className: "attachment-icon" }, attachmentButtonIcon || "📷")),
350
350
  React.createElement("div", { className: "mention-input-wrapper" },
351
351
  (!inputValue || !inputRef.current || ((_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.innerText.trim()) === "") && (React.createElement("span", { className: "placeholder" }, placeholder)),
352
352
  React.createElement("div", { ref: inputRef, contentEditable: true, suppressContentEditableWarning: true, className: "mention-input ".concat(inputClassName || ""), onInput: handleInputChange, onKeyDown: handleKeyDown, onFocus: function () { return document.execCommand('styleWithCSS', false, 'false'); } })),
@@ -9,6 +9,7 @@ interface ShowMessageCardProps {
9
9
  dateKey?: string;
10
10
  commentKey?: string;
11
11
  imgSrcKey?: string;
12
+ imageUrlKey?: string;
12
13
  containerClassName?: string;
13
14
  containerStyle?: CSSProperties;
14
15
  cardClassName?: string;
@@ -27,6 +28,8 @@ interface ShowMessageCardProps {
27
28
  bodyStyle?: CSSProperties;
28
29
  commentClassName?: string;
29
30
  commentStyle?: CSSProperties;
31
+ attachedImageClassName?: string;
32
+ attachedImageStyle?: CSSProperties;
30
33
  renderItem?: (element: MessageCardProps) => ReactNode;
31
34
  }
32
35
  export declare const ShowMessageCard: React.FC<ShowMessageCardProps>;
@@ -12,9 +12,10 @@ var __assign = (this && this.__assign) || function () {
12
12
  import React, { useState } from "react";
13
13
  import "./ShowMessageCard.css";
14
14
  export var ShowMessageCard = function (_a) {
15
- var data = _a.data, _b = _a.nameKey, nameKey = _b === void 0 ? "name" : _b, _c = _a.dateKey, dateKey = _c === void 0 ? "date" : _c, _d = _a.commentKey, commentKey = _d === void 0 ? "comment" : _d, _e = _a.imgSrcKey, imgSrcKey = _e === void 0 ? "imgSrc" : _e, containerClassName = _a.containerClassName, containerStyle = _a.containerStyle, cardClassName = _a.cardClassName, cardStyle = _a.cardStyle, headerClassName = _a.headerClassName, headerStyle = _a.headerStyle, imgClassName = _a.imgClassName, imgStyle = _a.imgStyle, infoClassName = _a.infoClassName, infoStyle = _a.infoStyle, nameClassName = _a.nameClassName, nameStyle = _a.nameStyle, dateClassName = _a.dateClassName, dateStyle = _a.dateStyle, bodyClassName = _a.bodyClassName, bodyStyle = _a.bodyStyle, commentClassName = _a.commentClassName, commentStyle = _a.commentStyle, renderItem = _a.renderItem;
15
+ var data = _a.data, _b = _a.nameKey, nameKey = _b === void 0 ? "name" : _b, _c = _a.dateKey, dateKey = _c === void 0 ? "date" : _c, _d = _a.commentKey, commentKey = _d === void 0 ? "comment" : _d, _e = _a.imgSrcKey, imgSrcKey = _e === void 0 ? "imgSrc" : _e, _f = _a.imageUrlKey, imageUrlKey = _f === void 0 ? "imageUrl" : _f, // Default key for attached image
16
+ containerClassName = _a.containerClassName, containerStyle = _a.containerStyle, cardClassName = _a.cardClassName, cardStyle = _a.cardStyle, headerClassName = _a.headerClassName, headerStyle = _a.headerStyle, imgClassName = _a.imgClassName, imgStyle = _a.imgStyle, infoClassName = _a.infoClassName, infoStyle = _a.infoStyle, nameClassName = _a.nameClassName, nameStyle = _a.nameStyle, dateClassName = _a.dateClassName, dateStyle = _a.dateStyle, bodyClassName = _a.bodyClassName, bodyStyle = _a.bodyStyle, commentClassName = _a.commentClassName, commentStyle = _a.commentStyle, attachedImageClassName = _a.attachedImageClassName, attachedImageStyle = _a.attachedImageStyle, renderItem = _a.renderItem;
16
17
  // State to manage initials for images that fail to load
17
- var _f = useState({}), initialsState = _f[0], setInitialsState = _f[1];
18
+ var _g = useState({}), initialsState = _g[0], setInitialsState = _g[1];
18
19
  // Handle image load failure
19
20
  var handleImageError = function (id) {
20
21
  setInitialsState(function (prevState) {
@@ -44,6 +45,8 @@ export var ShowMessageCard = function (_a) {
44
45
  React.createElement("h3", { className: "message-card-name ".concat(nameClassName || ""), style: nameStyle }, item[nameKey]),
45
46
  React.createElement("p", { className: "message-card-date ".concat(dateClassName || ""), style: dateStyle }, item[dateKey]))),
46
47
  React.createElement("div", { className: "message-card-body ".concat(bodyClassName || ""), style: bodyStyle },
47
- React.createElement("p", { className: "message-card-comment ".concat(commentClassName || ""), style: commentStyle, dangerouslySetInnerHTML: { __html: item[commentKey] } }))));
48
+ React.createElement("p", { className: "message-card-comment ".concat(commentClassName || ""), style: commentStyle, dangerouslySetInnerHTML: { __html: item[commentKey] } }),
49
+ (item === null || item === void 0 ? void 0 : item[imageUrlKey]) && (React.createElement("div", { className: "message-card-attached-image-container" },
50
+ React.createElement("img", { src: item[imageUrlKey], alt: "Attached", className: "message-card-attached-image ".concat(attachedImageClassName || ""), style: attachedImageStyle }))))));
48
51
  })));
49
52
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-mention-input",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -16,7 +16,10 @@ interface MentionInputProps {
16
16
  sendBtnClassName?: string;
17
17
  suggestionListClassName?: string;
18
18
  suggestionItemClassName?: string;
19
+ imgClassName?: string; // New prop for image CSS class
20
+ imgStyle?: React.CSSProperties; // New prop for inline image styles
19
21
  sendButtonIcon?: ReactNode; // Button icon (MUI icon or image path)
22
+ attachmentButtonIcon?: ReactNode; // New prop for attachment button icon
20
23
  onSendMessage?: (obj: {
21
24
  messageText: string;
22
25
  messageHTML: string;
@@ -38,7 +41,10 @@ const MentionInput: React.FC<MentionInputProps> = ({
38
41
  sendBtnClassName,
39
42
  suggestionListClassName,
40
43
  suggestionItemClassName,
44
+ imgClassName,
45
+ imgStyle,
41
46
  sendButtonIcon,
47
+ attachmentButtonIcon,
42
48
  onSendMessage,
43
49
  suggestionPosition = 'bottom',
44
50
  onImageUpload,
@@ -390,7 +396,12 @@ const MentionInput: React.FC<MentionInputProps> = ({
390
396
  <div className={`mention-container ${containerClassName || ""}`}>
391
397
  {imageUrl && selectedImage && (
392
398
  <div className="image-preview-card">
393
- <img src={imageUrl} alt="Preview" />
399
+ <img
400
+ src={imageUrl}
401
+ alt="Preview"
402
+ className={imgClassName || ""}
403
+ style={imgStyle}
404
+ />
394
405
  <button onClick={removeImage} className="remove-image-btn" aria-label="Remove image">
395
406
  ×
396
407
  </button>
@@ -418,7 +429,7 @@ const MentionInput: React.FC<MentionInputProps> = ({
418
429
  type="button"
419
430
  aria-label="Attach image"
420
431
  >
421
- <span className="attachment-icon">📷</span>
432
+ <span className="attachment-icon">{attachmentButtonIcon || "📷"}</span>
422
433
  </button>
423
434
 
424
435
  <div className="mention-input-wrapper">
@@ -11,6 +11,7 @@ interface ShowMessageCardProps {
11
11
  dateKey?: string; // Custom key for date
12
12
  commentKey?: string; // Custom key for comment
13
13
  imgSrcKey?: string; // Custom key for image source
14
+ imageUrlKey?: string; // Custom key for attached image URL
14
15
  containerClassName?: string; // Class for the outermost container
15
16
  containerStyle?: CSSProperties; // Style for the outermost container
16
17
  cardClassName?: string; // Class for the card
@@ -29,6 +30,8 @@ interface ShowMessageCardProps {
29
30
  bodyStyle?: CSSProperties; // Style for the card body
30
31
  commentClassName?: string; // Class for the comment text
31
32
  commentStyle?: CSSProperties; // Style for the comment text
33
+ attachedImageClassName?: string; // Class for the attached image
34
+ attachedImageStyle?: CSSProperties; // Style for the attached image
32
35
  renderItem?: (element: MessageCardProps) => ReactNode; // Custom render function
33
36
  }
34
37
 
@@ -38,6 +41,7 @@ export const ShowMessageCard: React.FC<ShowMessageCardProps> = ({
38
41
  dateKey = "date",
39
42
  commentKey = "comment",
40
43
  imgSrcKey = "imgSrc",
44
+ imageUrlKey = "imageUrl", // Default key for attached image
41
45
  containerClassName,
42
46
  containerStyle,
43
47
  cardClassName,
@@ -56,6 +60,8 @@ export const ShowMessageCard: React.FC<ShowMessageCardProps> = ({
56
60
  bodyStyle,
57
61
  commentClassName,
58
62
  commentStyle,
63
+ attachedImageClassName,
64
+ attachedImageStyle,
59
65
  renderItem, // Custom render function
60
66
  }) => {
61
67
  // State to manage initials for images that fail to load
@@ -146,17 +152,23 @@ export const ShowMessageCard: React.FC<ShowMessageCardProps> = ({
146
152
  className={`message-card-body ${bodyClassName || ""}`}
147
153
  style={bodyStyle}
148
154
  >
149
- {/* <p
155
+ <p
150
156
  className={`message-card-comment ${commentClassName || ""}`}
151
157
  style={commentStyle}
152
- >
153
- {item[commentKey]}
154
- </p> */}
155
- <p
156
- className={`message-card-comment ${commentClassName || ""}`}
157
- style={commentStyle}
158
- dangerouslySetInnerHTML={{ __html: item[commentKey] }}
159
- ></p>
158
+ dangerouslySetInnerHTML={{ __html: item[commentKey] }}
159
+ ></p>
160
+
161
+ {/* Display attached image if available */}
162
+ {item?.[imageUrlKey] && (
163
+ <div className="message-card-attached-image-container">
164
+ <img
165
+ src={item[imageUrlKey]}
166
+ alt="Attached"
167
+ className={`message-card-attached-image ${attachedImageClassName || ""}`}
168
+ style={attachedImageStyle}
169
+ />
170
+ </div>
171
+ )}
160
172
  </div>
161
173
  </div>
162
174
  );