@eccenca/gui-elements 24.4.1-featurechatcomponentscmem6775.0 → 24.4.1-featurechatcomponentscmem6775.1
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.
- package/dist/cjs/components/Chat/ChatContent.js +71 -4
- package/dist/cjs/components/Chat/ChatContent.js.map +1 -1
- package/dist/esm/components/Chat/ChatContent.js +65 -5
- package/dist/esm/components/Chat/ChatContent.js.map +1 -1
- package/dist/types/components/Chat/ChatContent.d.ts +20 -2
- package/package.json +5 -4
- package/src/components/Chat/ChatContent.tsx +90 -7
- package/src/components/Chat/_chat.scss +5 -0
- package/src/components/Chat/stories/ChatArea.stories.tsx +4 -1
- package/src/components/Chat/stories/ChatContent.stories.tsx +3 -1
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
26
|
var t = {};
|
|
4
27
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -16,17 +39,58 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
40
|
exports.ChatContent = void 0;
|
|
18
41
|
const react_1 = __importDefault(require("react"));
|
|
42
|
+
const server_1 = require("react-dom/server");
|
|
43
|
+
const ReactIs = __importStar(require("react-is"));
|
|
19
44
|
const constants_1 = require("../../configuration/constants");
|
|
20
45
|
const Markdown_1 = require("./../../cmem/markdown/Markdown");
|
|
21
46
|
const FlexibleLayout_1 = require("./../FlexibleLayout");
|
|
47
|
+
const IconButton_1 = require("./../Icon/IconButton");
|
|
22
48
|
const Spacing_1 = require("./../Separation/Spacing");
|
|
23
49
|
const Typography_1 = require("./../Typography");
|
|
24
50
|
/**
|
|
25
51
|
* Component to display singe chat contents, including avatar and status line.
|
|
26
52
|
*/
|
|
27
53
|
const ChatContent = (_a) => {
|
|
28
|
-
var { className, children, statusLine, avatar, displayType = "bubble", indentationSize, alignment = "left", limitHeight, markdownProps } = _a, otherDivProps = __rest(_a, ["className", "children", "statusLine", "avatar", "displayType", "indentationSize", "alignment", "limitHeight", "markdownProps"]);
|
|
29
|
-
const
|
|
54
|
+
var { className, children, statusLine, avatar, displayType = "bubble", indentationSize, alignment = "left", limitHeight, markdownProps, shrinked, autoShrink, onToggleSize } = _a, otherDivProps = __rest(_a, ["className", "children", "statusLine", "avatar", "displayType", "indentationSize", "alignment", "limitHeight", "markdownProps", "shrinked", "autoShrink", "onToggleSize"]);
|
|
55
|
+
const [displayShrinked, setDispayShrinked] = react_1.default.useState(shrinked === true || (autoShrink === true && typeof shrinked === "undefined"));
|
|
56
|
+
const toggleSize = () => {
|
|
57
|
+
if (onToggleSize) {
|
|
58
|
+
onToggleSize();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
setDispayShrinked(!displayShrinked);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const content = markdownProps && typeof children === "string" ? react_1.default.createElement(Markdown_1.Markdown, Object.assign({}, markdownProps), children) : children;
|
|
65
|
+
const onlyText = (children) => {
|
|
66
|
+
if (children instanceof Array) {
|
|
67
|
+
return children
|
|
68
|
+
.map((child) => {
|
|
69
|
+
return onlyText(child);
|
|
70
|
+
})
|
|
71
|
+
.join(" ");
|
|
72
|
+
}
|
|
73
|
+
return react_1.default.Children.toArray(children)
|
|
74
|
+
.map((child) => {
|
|
75
|
+
var _a;
|
|
76
|
+
if (ReactIs.isFragment(child)) {
|
|
77
|
+
return onlyText((_a = child.props) === null || _a === void 0 ? void 0 : _a.children);
|
|
78
|
+
}
|
|
79
|
+
if (typeof child === "string") {
|
|
80
|
+
return child;
|
|
81
|
+
}
|
|
82
|
+
if (typeof child === "number") {
|
|
83
|
+
return child.toString();
|
|
84
|
+
}
|
|
85
|
+
if (ReactIs.isElement(child)) {
|
|
86
|
+
// for some reasons `renderToString` returns empty string if not wrappe in a `span`
|
|
87
|
+
return (0, server_1.renderToString)(react_1.default.createElement("span", null, child));
|
|
88
|
+
}
|
|
89
|
+
return "";
|
|
90
|
+
})
|
|
91
|
+
.join(" ");
|
|
92
|
+
};
|
|
93
|
+
const chatitem = (react_1.default.createElement("div", Object.assign({ className: `${constants_1.CLASSPREFIX}-chat__content` +
|
|
30
94
|
` ${constants_1.CLASSPREFIX}-chat__content--display-${displayType}` +
|
|
31
95
|
` ${constants_1.CLASSPREFIX}-chat__content--align-${alignment}` +
|
|
32
96
|
(limitHeight ? ` ${constants_1.CLASSPREFIX}-chat__content--limitheight` : "") +
|
|
@@ -34,7 +98,8 @@ const ChatContent = (_a) => {
|
|
|
34
98
|
statusLine && (react_1.default.createElement(Typography_1.HtmlContentBlock, { small: true },
|
|
35
99
|
statusLine,
|
|
36
100
|
react_1.default.createElement(Spacing_1.Spacing, { size: "tiny" }))),
|
|
37
|
-
|
|
101
|
+
displayShrinked && autoShrink ? (react_1.default.createElement(Typography_1.OverflowText, { passDown: true },
|
|
102
|
+
react_1.default.createElement(Markdown_1.Markdown, { removeMarkup: true }, onlyText(content)))) : (content)));
|
|
38
103
|
const indentationSizes = {
|
|
39
104
|
small: "8%",
|
|
40
105
|
medium: "21%",
|
|
@@ -46,7 +111,9 @@ const ChatContent = (_a) => {
|
|
|
46
111
|
} },
|
|
47
112
|
react_1.default.createElement(FlexibleLayout_1.FlexibleLayoutContainer, { noEqualItemSpace: true, gapSize: "tiny" },
|
|
48
113
|
avatar && (react_1.default.createElement(FlexibleLayout_1.FlexibleLayoutItem, { className: `${constants_1.CLASSPREFIX}-chat__content-avatar`, growFactor: 0, shrinkFactor: 0, style: alignment === "right" ? { order: 1 } : undefined }, react_1.default.cloneElement(avatar, { size: "small", ratio: "1:1", rounded: true, resizing: "cover" }))),
|
|
49
|
-
react_1.default.createElement(FlexibleLayout_1.FlexibleLayoutItem, { className: `${constants_1.CLASSPREFIX}-chat__content-wrapper` },
|
|
114
|
+
react_1.default.createElement(FlexibleLayout_1.FlexibleLayoutItem, { className: `${constants_1.CLASSPREFIX}-chat__content-wrapper` }, chatitem),
|
|
115
|
+
(displayShrinked || onToggleSize || autoShrink) && (react_1.default.createElement(FlexibleLayout_1.FlexibleLayoutItem, { className: `${constants_1.CLASSPREFIX}-chat__content-sizetoggle`, growFactor: 0, shrinkFactor: 0, style: alignment === "right" ? { order: -1 } : undefined },
|
|
116
|
+
react_1.default.createElement(IconButton_1.IconButton, { name: displayShrinked ? "toggler-showmore" : "toggler-showless", onClick: () => toggleSize() }))))));
|
|
50
117
|
};
|
|
51
118
|
exports.ChatContent = ChatContent;
|
|
52
119
|
exports.default = exports.ChatContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContent.js","sourceRoot":"","sources":["../../../../src/components/Chat/ChatContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatContent.js","sourceRoot":"","sources":["../../../../src/components/Chat/ChatContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -20,18 +20,75 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
24
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
25
|
+
if (!m) return o;
|
|
26
|
+
var i = m.call(o), r, ar = [], e;
|
|
27
|
+
try {
|
|
28
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
29
|
+
}
|
|
30
|
+
catch (error) { e = { error: error }; }
|
|
31
|
+
finally {
|
|
32
|
+
try {
|
|
33
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
34
|
+
}
|
|
35
|
+
finally { if (e) throw e.error; }
|
|
36
|
+
}
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
23
39
|
import React from "react";
|
|
40
|
+
import { renderToString } from "react-dom/server.js";
|
|
41
|
+
import * as ReactIs from "react-is";
|
|
24
42
|
import { CLASSPREFIX as eccgui } from "../../configuration/constants.js";
|
|
25
43
|
import { Markdown } from "./../../cmem/markdown/Markdown.js";
|
|
26
44
|
import { FlexibleLayoutContainer, FlexibleLayoutItem } from "./../FlexibleLayout/index.js";
|
|
45
|
+
import { IconButton } from "./../Icon/IconButton.js";
|
|
27
46
|
import { Spacing } from "./../Separation/Spacing.js";
|
|
28
|
-
import { HtmlContentBlock } from "./../Typography/index.js";
|
|
47
|
+
import { HtmlContentBlock, OverflowText } from "./../Typography/index.js";
|
|
29
48
|
/**
|
|
30
49
|
* Component to display singe chat contents, including avatar and status line.
|
|
31
50
|
*/
|
|
32
51
|
export var ChatContent = function (_a) {
|
|
33
|
-
var className = _a.className, children = _a.children, statusLine = _a.statusLine, avatar = _a.avatar, _b = _a.displayType, displayType = _b === void 0 ? "bubble" : _b, indentationSize = _a.indentationSize, _c = _a.alignment, alignment = _c === void 0 ? "left" : _c, limitHeight = _a.limitHeight, markdownProps = _a.markdownProps, otherDivProps = __rest(_a, ["className", "children", "statusLine", "avatar", "displayType", "indentationSize", "alignment", "limitHeight", "markdownProps"]);
|
|
34
|
-
var
|
|
52
|
+
var className = _a.className, children = _a.children, statusLine = _a.statusLine, avatar = _a.avatar, _b = _a.displayType, displayType = _b === void 0 ? "bubble" : _b, indentationSize = _a.indentationSize, _c = _a.alignment, alignment = _c === void 0 ? "left" : _c, limitHeight = _a.limitHeight, markdownProps = _a.markdownProps, shrinked = _a.shrinked, autoShrink = _a.autoShrink, onToggleSize = _a.onToggleSize, otherDivProps = __rest(_a, ["className", "children", "statusLine", "avatar", "displayType", "indentationSize", "alignment", "limitHeight", "markdownProps", "shrinked", "autoShrink", "onToggleSize"]);
|
|
53
|
+
var _d = __read(React.useState(shrinked === true || (autoShrink === true && typeof shrinked === "undefined")), 2), displayShrinked = _d[0], setDispayShrinked = _d[1];
|
|
54
|
+
var toggleSize = function () {
|
|
55
|
+
if (onToggleSize) {
|
|
56
|
+
onToggleSize();
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
setDispayShrinked(!displayShrinked);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var content = markdownProps && typeof children === "string" ? React.createElement(Markdown, __assign({}, markdownProps), children) : children;
|
|
63
|
+
var onlyText = function (children) {
|
|
64
|
+
if (children instanceof Array) {
|
|
65
|
+
return children
|
|
66
|
+
.map(function (child) {
|
|
67
|
+
return onlyText(child);
|
|
68
|
+
})
|
|
69
|
+
.join(" ");
|
|
70
|
+
}
|
|
71
|
+
return React.Children.toArray(children)
|
|
72
|
+
.map(function (child) {
|
|
73
|
+
var _a;
|
|
74
|
+
if (ReactIs.isFragment(child)) {
|
|
75
|
+
return onlyText((_a = child.props) === null || _a === void 0 ? void 0 : _a.children);
|
|
76
|
+
}
|
|
77
|
+
if (typeof child === "string") {
|
|
78
|
+
return child;
|
|
79
|
+
}
|
|
80
|
+
if (typeof child === "number") {
|
|
81
|
+
return child.toString();
|
|
82
|
+
}
|
|
83
|
+
if (ReactIs.isElement(child)) {
|
|
84
|
+
// for some reasons `renderToString` returns empty string if not wrappe in a `span`
|
|
85
|
+
return renderToString(React.createElement("span", null, child));
|
|
86
|
+
}
|
|
87
|
+
return "";
|
|
88
|
+
})
|
|
89
|
+
.join(" ");
|
|
90
|
+
};
|
|
91
|
+
var chatitem = (React.createElement("div", __assign({ className: "".concat(eccgui, "-chat__content") +
|
|
35
92
|
" ".concat(eccgui, "-chat__content--display-").concat(displayType) +
|
|
36
93
|
" ".concat(eccgui, "-chat__content--align-").concat(alignment) +
|
|
37
94
|
(limitHeight ? " ".concat(eccgui, "-chat__content--limitheight") : "") +
|
|
@@ -39,7 +96,8 @@ export var ChatContent = function (_a) {
|
|
|
39
96
|
statusLine && (React.createElement(HtmlContentBlock, { small: true },
|
|
40
97
|
statusLine,
|
|
41
98
|
React.createElement(Spacing, { size: "tiny" }))),
|
|
42
|
-
|
|
99
|
+
displayShrinked && autoShrink ? (React.createElement(OverflowText, { passDown: true },
|
|
100
|
+
React.createElement(Markdown, { removeMarkup: true }, onlyText(content)))) : (content)));
|
|
43
101
|
var indentationSizes = {
|
|
44
102
|
small: "8%",
|
|
45
103
|
medium: "21%",
|
|
@@ -51,7 +109,9 @@ export var ChatContent = function (_a) {
|
|
|
51
109
|
} },
|
|
52
110
|
React.createElement(FlexibleLayoutContainer, { noEqualItemSpace: true, gapSize: "tiny" },
|
|
53
111
|
avatar && (React.createElement(FlexibleLayoutItem, { className: "".concat(eccgui, "-chat__content-avatar"), growFactor: 0, shrinkFactor: 0, style: alignment === "right" ? { order: 1 } : undefined }, React.cloneElement(avatar, { size: "small", ratio: "1:1", rounded: true, resizing: "cover" }))),
|
|
54
|
-
React.createElement(FlexibleLayoutItem, { className: "".concat(eccgui, "-chat__content-wrapper") },
|
|
112
|
+
React.createElement(FlexibleLayoutItem, { className: "".concat(eccgui, "-chat__content-wrapper") }, chatitem),
|
|
113
|
+
(displayShrinked || onToggleSize || autoShrink) && (React.createElement(FlexibleLayoutItem, { className: "".concat(eccgui, "-chat__content-sizetoggle"), growFactor: 0, shrinkFactor: 0, style: alignment === "right" ? { order: -1 } : undefined },
|
|
114
|
+
React.createElement(IconButton, { name: displayShrinked ? "toggler-showmore" : "toggler-showless", onClick: function () { return toggleSize(); } }))))));
|
|
55
115
|
};
|
|
56
116
|
export default ChatContent;
|
|
57
117
|
//# sourceMappingURL=ChatContent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContent.js","sourceRoot":"","sources":["../../../../src/components/Chat/ChatContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatContent.js","sourceRoot":"","sources":["../../../../src/components/Chat/ChatContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -29,15 +29,33 @@ export interface ChatContentProps extends React.HTMLAttributes<HTMLDivElement>,
|
|
|
29
29
|
* If set then the chat bubble only grows to a height of 50% of the viewport.
|
|
30
30
|
* In case you need to set other maximum heights then use the `style` property directly.
|
|
31
31
|
*/
|
|
32
|
-
limitHeight?:
|
|
32
|
+
limitHeight?: React.ReactChild;
|
|
33
33
|
/**
|
|
34
34
|
* If given then the content is automatically parsed and displayed by our `<Markdown />` component.
|
|
35
35
|
* `children` need to a `string` then, otherwise it cannot be parsed.
|
|
36
36
|
*/
|
|
37
37
|
markdownProps?: Omit<MarkdownProps, "children">;
|
|
38
|
+
/**
|
|
39
|
+
* Callback handler if content should be expanded.
|
|
40
|
+
* Button to shrink/expand is displayed, depending on `shrinked` value.
|
|
41
|
+
* If this handler is given then the component never will change the `shrinked` state automatically.
|
|
42
|
+
*/
|
|
43
|
+
onToggleSize?: () => void;
|
|
44
|
+
/**
|
|
45
|
+
* Content should dislayed shrinked.
|
|
46
|
+
* Button to expand content is displayed.
|
|
47
|
+
* Component can reduce content automatically to one line if `autoShrink` is set to `true`.
|
|
48
|
+
* If `onToggleSize` handler is not given then `autoShrink=true` is inferred and size toggling is automatically provided.
|
|
49
|
+
*/
|
|
50
|
+
shrinked?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Children elements are automatically shrinked to one line.
|
|
53
|
+
* If `shrinked` are not given then `shrinked=true` is infered.
|
|
54
|
+
*/
|
|
55
|
+
autoShrink?: boolean;
|
|
38
56
|
}
|
|
39
57
|
/**
|
|
40
58
|
* Component to display singe chat contents, including avatar and status line.
|
|
41
59
|
*/
|
|
42
|
-
export declare const ChatContent: ({ className, children, statusLine, avatar, displayType, indentationSize, alignment, limitHeight, markdownProps, ...otherDivProps }: ChatContentProps) => React.JSX.Element;
|
|
60
|
+
export declare const ChatContent: ({ className, children, statusLine, avatar, displayType, indentationSize, alignment, limitHeight, markdownProps, shrinked, autoShrink, onToggleSize, ...otherDivProps }: ChatContentProps) => React.JSX.Element;
|
|
43
61
|
export default ChatContent;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eccenca/gui-elements",
|
|
3
3
|
"description": "GUI elements based on other libraries, usable in React application, written in Typescript.",
|
|
4
|
-
"version": "24.4.1-featurechatcomponentscmem6775.
|
|
4
|
+
"version": "24.4.1-featurechatcomponentscmem6775.1",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/eccenca/gui-elements",
|
|
7
7
|
"bugs": "https://github.com/eccenca/gui-elements/issues",
|
|
@@ -91,10 +91,11 @@
|
|
|
91
91
|
"n3": "^1.25.1",
|
|
92
92
|
"re-resizable": "^6.10.3",
|
|
93
93
|
"react": "^16.13.1",
|
|
94
|
-
"react-dom": "^16.
|
|
94
|
+
"react-dom": "^16.14.0",
|
|
95
95
|
"react-flow-renderer": "9.7.4",
|
|
96
96
|
"react-flow-renderer-lts": "npm:react-flow-renderer@^10.3.17",
|
|
97
97
|
"react-inlinesvg": "^3.0.3",
|
|
98
|
+
"react-is": "^16.13.1",
|
|
98
99
|
"react-markdown": "^10.1.0",
|
|
99
100
|
"react-markdown-deprecated": "npm:react-markdown@^8.0.7",
|
|
100
101
|
"react-syntax-highlighter": "^15.6.1",
|
|
@@ -138,6 +139,7 @@
|
|
|
138
139
|
"@types/jshint": "^2.12.4",
|
|
139
140
|
"@types/lodash": "^4.17.16",
|
|
140
141
|
"@types/n3": "^1.24.2",
|
|
142
|
+
"@types/react-is": "^19.0.0",
|
|
141
143
|
"@types/react-syntax-highlighter": "^15.5.13",
|
|
142
144
|
"@typescript-eslint/eslint-plugin": "^8.30.1",
|
|
143
145
|
"@typescript-eslint/parser": "^8.30.1",
|
|
@@ -174,8 +176,7 @@
|
|
|
174
176
|
},
|
|
175
177
|
"peerDependencies": {
|
|
176
178
|
"@blueprintjs/core": ">=5",
|
|
177
|
-
"react": ">=16"
|
|
178
|
-
"react-dom": ">=16"
|
|
179
|
+
"react": ">=16"
|
|
179
180
|
},
|
|
180
181
|
"resolutions": {
|
|
181
182
|
"**/@types/react": "^17.0.85",
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { renderToString } from "react-dom/server";
|
|
3
|
+
import * as ReactIs from "react-is";
|
|
2
4
|
|
|
3
5
|
import { TestableComponent } from "../../components/interfaces";
|
|
4
6
|
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
@@ -6,8 +8,9 @@ import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
|
6
8
|
import { Markdown, MarkdownProps } from "./../../cmem/markdown/Markdown";
|
|
7
9
|
import { DepictionProps } from "./../Depiction/Depiction";
|
|
8
10
|
import { FlexibleLayoutContainer, FlexibleLayoutItem } from "./../FlexibleLayout";
|
|
11
|
+
import { IconButton } from "./../Icon/IconButton";
|
|
9
12
|
import { Spacing } from "./../Separation/Spacing";
|
|
10
|
-
import { HtmlContentBlock, OverflowTextProps } from "./../Typography";
|
|
13
|
+
import { HtmlContentBlock, OverflowText, OverflowTextProps } from "./../Typography";
|
|
11
14
|
|
|
12
15
|
export interface ChatContentProps extends React.HTMLAttributes<HTMLDivElement>, TestableComponent {
|
|
13
16
|
/**
|
|
@@ -35,12 +38,30 @@ export interface ChatContentProps extends React.HTMLAttributes<HTMLDivElement>,
|
|
|
35
38
|
* If set then the chat bubble only grows to a height of 50% of the viewport.
|
|
36
39
|
* In case you need to set other maximum heights then use the `style` property directly.
|
|
37
40
|
*/
|
|
38
|
-
limitHeight?:
|
|
41
|
+
limitHeight?: React.ReactChild;
|
|
39
42
|
/**
|
|
40
43
|
* If given then the content is automatically parsed and displayed by our `<Markdown />` component.
|
|
41
44
|
* `children` need to a `string` then, otherwise it cannot be parsed.
|
|
42
45
|
*/
|
|
43
46
|
markdownProps?: Omit<MarkdownProps, "children">;
|
|
47
|
+
/**
|
|
48
|
+
* Callback handler if content should be expanded.
|
|
49
|
+
* Button to shrink/expand is displayed, depending on `shrinked` value.
|
|
50
|
+
* If this handler is given then the component never will change the `shrinked` state automatically.
|
|
51
|
+
*/
|
|
52
|
+
onToggleSize?: () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Content should dislayed shrinked.
|
|
55
|
+
* Button to expand content is displayed.
|
|
56
|
+
* Component can reduce content automatically to one line if `autoShrink` is set to `true`.
|
|
57
|
+
* If `onToggleSize` handler is not given then `autoShrink=true` is inferred and size toggling is automatically provided.
|
|
58
|
+
*/
|
|
59
|
+
shrinked?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Children elements are automatically shrinked to one line.
|
|
62
|
+
* If `shrinked` are not given then `shrinked=true` is infered.
|
|
63
|
+
*/
|
|
64
|
+
autoShrink?: boolean;
|
|
44
65
|
}
|
|
45
66
|
|
|
46
67
|
/**
|
|
@@ -56,9 +77,56 @@ export const ChatContent = ({
|
|
|
56
77
|
alignment = "left",
|
|
57
78
|
limitHeight,
|
|
58
79
|
markdownProps,
|
|
80
|
+
shrinked,
|
|
81
|
+
autoShrink,
|
|
82
|
+
onToggleSize,
|
|
59
83
|
...otherDivProps
|
|
60
84
|
}: ChatContentProps) => {
|
|
61
|
-
const
|
|
85
|
+
const [displayShrinked, setDispayShrinked] = React.useState<boolean>(
|
|
86
|
+
shrinked === true || (autoShrink === true && typeof shrinked === "undefined")
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
const toggleSize = () => {
|
|
90
|
+
if (onToggleSize) {
|
|
91
|
+
onToggleSize();
|
|
92
|
+
} else {
|
|
93
|
+
setDispayShrinked(!displayShrinked);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const content =
|
|
98
|
+
markdownProps && typeof children === "string" ? <Markdown {...markdownProps}>{children}</Markdown> : children;
|
|
99
|
+
|
|
100
|
+
const onlyText = (children: React.ReactNode | React.ReactNode[]): string => {
|
|
101
|
+
if (children instanceof Array) {
|
|
102
|
+
return children
|
|
103
|
+
.map((child: React.ReactNode) => {
|
|
104
|
+
return onlyText(child);
|
|
105
|
+
})
|
|
106
|
+
.join(" ");
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return React.Children.toArray(children)
|
|
110
|
+
.map((child) => {
|
|
111
|
+
if (ReactIs.isFragment(child)) {
|
|
112
|
+
return onlyText(child.props?.children);
|
|
113
|
+
}
|
|
114
|
+
if (typeof child === "string") {
|
|
115
|
+
return child;
|
|
116
|
+
}
|
|
117
|
+
if (typeof child === "number") {
|
|
118
|
+
return child.toString();
|
|
119
|
+
}
|
|
120
|
+
if (ReactIs.isElement(child)) {
|
|
121
|
+
// for some reasons `renderToString` returns empty string if not wrappe in a `span`
|
|
122
|
+
return renderToString(<span>{child}</span>);
|
|
123
|
+
}
|
|
124
|
+
return "";
|
|
125
|
+
})
|
|
126
|
+
.join(" ");
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const chatitem = (
|
|
62
130
|
<div
|
|
63
131
|
className={
|
|
64
132
|
`${eccgui}-chat__content` +
|
|
@@ -75,10 +143,12 @@ export const ChatContent = ({
|
|
|
75
143
|
<Spacing size="tiny" />
|
|
76
144
|
</HtmlContentBlock>
|
|
77
145
|
)}
|
|
78
|
-
{
|
|
79
|
-
<
|
|
146
|
+
{displayShrinked && autoShrink ? (
|
|
147
|
+
<OverflowText passDown>
|
|
148
|
+
<Markdown removeMarkup>{onlyText(content)}</Markdown>
|
|
149
|
+
</OverflowText>
|
|
80
150
|
) : (
|
|
81
|
-
|
|
151
|
+
content
|
|
82
152
|
)}
|
|
83
153
|
</div>
|
|
84
154
|
);
|
|
@@ -107,7 +177,20 @@ export const ChatContent = ({
|
|
|
107
177
|
{React.cloneElement(avatar, { size: "small", ratio: "1:1", rounded: true, resizing: "cover" })}
|
|
108
178
|
</FlexibleLayoutItem>
|
|
109
179
|
)}
|
|
110
|
-
<FlexibleLayoutItem className={`${eccgui}-chat__content-wrapper`}>{
|
|
180
|
+
<FlexibleLayoutItem className={`${eccgui}-chat__content-wrapper`}>{chatitem}</FlexibleLayoutItem>
|
|
181
|
+
{(displayShrinked || onToggleSize || autoShrink) && (
|
|
182
|
+
<FlexibleLayoutItem
|
|
183
|
+
className={`${eccgui}-chat__content-sizetoggle`}
|
|
184
|
+
growFactor={0}
|
|
185
|
+
shrinkFactor={0}
|
|
186
|
+
style={alignment === "right" ? { order: -1 } : undefined}
|
|
187
|
+
>
|
|
188
|
+
<IconButton
|
|
189
|
+
name={displayShrinked ? "toggler-showmore" : "toggler-showless"}
|
|
190
|
+
onClick={() => toggleSize()}
|
|
191
|
+
/>
|
|
192
|
+
</FlexibleLayoutItem>
|
|
193
|
+
)}
|
|
111
194
|
</FlexibleLayoutContainer>
|
|
112
195
|
</div>
|
|
113
196
|
);
|
|
@@ -26,8 +26,11 @@ Default.args = {
|
|
|
26
26
|
<ChatContent {...ShortChatBubble.args} alignment="right" indentationSize="medium" />,
|
|
27
27
|
<ChatContent {...ShortChatBubble.args} avatar={undefined} displayType="free" />,
|
|
28
28
|
<ChatContent {...ShortChatBubble.args} alignment="right" indentationSize="medium" />,
|
|
29
|
-
<ChatContent {...LongChatBubble.args} />,
|
|
29
|
+
<ChatContent {...LongChatBubble.args} autoShrink />,
|
|
30
30
|
<ChatContent {...ShortChatBubble.args} alignment="right" indentationSize="medium" />,
|
|
31
31
|
<ChatContent {...ShortChatBubble.args} />,
|
|
32
32
|
],
|
|
33
|
+
autoSpacingSize: "medium",
|
|
34
|
+
autoScrollTo: "last",
|
|
35
|
+
useAbsoluteSpace: true,
|
|
33
36
|
};
|
|
@@ -29,7 +29,8 @@ export default {
|
|
|
29
29
|
},
|
|
30
30
|
} as Meta<typeof ChatContent>;
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
let update = 0;
|
|
33
|
+
const TemplateFull: StoryFn<typeof ChatContent> = (args) => <ChatContent {...args} key={update++} />;
|
|
33
34
|
|
|
34
35
|
export const Default = TemplateFull.bind({});
|
|
35
36
|
Default.args = {
|
|
@@ -44,6 +45,7 @@ Default.args = {
|
|
|
44
45
|
<strong>Username</strong> 25 minutes ago
|
|
45
46
|
</OverflowText>
|
|
46
47
|
),
|
|
48
|
+
onToggleSize: undefined,
|
|
47
49
|
};
|
|
48
50
|
|
|
49
51
|
export const LongChatBubble = TemplateFull.bind({});
|