pds-dev-kit-web 1.4.34 → 1.4.35
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/index.d.ts +4 -4
- package/dist/index.js +5 -3
- package/dist/src/common/styles/colorSet/PaletteColor_Dark.json +2 -1
- package/dist/src/common/styles/colorSet/PaletteColor_light.json +2 -1
- package/dist/src/common/styles/colorSet/UIColor.json +6 -1
- package/dist/src/common/styles/colorSet/index.d.ts +69 -62
- package/dist/src/common/styles/colorSet/index.js +4 -4
- package/dist/src/common/styles/colorSet/ui-type.d.ts +5 -0
- package/dist/src/desktop/components/ChatBubbleListItem/ChatBubble.d.ts +8 -0
- package/dist/src/desktop/components/ChatBubbleListItem/ChatBubble.js +75 -0
- package/dist/src/desktop/components/ChatBubbleListItem/ChatBubbleListItem.d.ts +17 -0
- package/dist/src/desktop/components/ChatBubbleListItem/ChatBubbleListItem.js +160 -0
- package/dist/src/desktop/components/ChatBubbleListItem/Popup.d.ts +19 -0
- package/dist/src/desktop/components/ChatBubbleListItem/Popup.js +238 -0
- package/dist/src/desktop/components/ChatBubbleListItem/index.d.ts +1 -0
- package/dist/src/desktop/components/ChatBubbleListItem/index.js +8 -0
- package/dist/src/desktop/components/ChatList/Body.d.ts +2 -2
- package/dist/src/desktop/components/ChatList/Body.js +18 -8
- package/dist/src/desktop/components/ChatList/ChatList.d.ts +21 -1
- package/dist/src/desktop/components/ChatList/ChatList.js +5 -5
- package/dist/src/desktop/components/ChatList/ChatTextField.d.ts +21 -3
- package/dist/src/desktop/components/ChatList/ChatTextField.js +18 -2
- package/dist/src/desktop/components/ChatList/Footer.d.ts +20 -2
- package/dist/src/desktop/components/ChatList/Footer.js +2 -2
- package/dist/src/desktop/components/ChatList/Header.d.ts +2 -2
- package/dist/src/desktop/components/ChatList/Header.js +6 -3
- package/dist/src/desktop/components/index.d.ts +2 -1
- package/dist/src/desktop/components/index.js +3 -1
- package/dist/src/desktop/index.d.ts +2 -2
- package/dist/src/desktop/index.js +3 -2
- package/dist/src/mobile/components/ChatBubbleListItem/ChatBubble.d.ts +8 -0
- package/dist/src/mobile/components/ChatBubbleListItem/ChatBubble.js +75 -0
- package/dist/src/mobile/components/ChatBubbleListItem/ChatBubbleListItem.d.ts +17 -0
- package/dist/src/mobile/components/ChatBubbleListItem/ChatBubbleListItem.js +160 -0
- package/dist/src/mobile/components/ChatBubbleListItem/Popup.d.ts +19 -0
- package/dist/src/mobile/components/ChatBubbleListItem/Popup.js +238 -0
- package/dist/src/mobile/components/ChatBubbleListItem/index.d.ts +1 -0
- package/dist/src/mobile/components/ChatBubbleListItem/index.js +8 -0
- package/dist/src/mobile/components/ChatList/Body.d.ts +2 -2
- package/dist/src/mobile/components/ChatList/Body.js +18 -8
- package/dist/src/mobile/components/ChatList/ChatList.d.ts +21 -1
- package/dist/src/mobile/components/ChatList/ChatList.js +5 -5
- package/dist/src/mobile/components/ChatList/ChatTextField.d.ts +21 -3
- package/dist/src/mobile/components/ChatList/ChatTextField.js +18 -2
- package/dist/src/mobile/components/ChatList/Footer.d.ts +20 -2
- package/dist/src/mobile/components/ChatList/Footer.js +2 -2
- package/dist/src/mobile/components/ChatList/Header.d.ts +2 -2
- package/dist/src/mobile/components/ChatList/Header.js +6 -3
- package/dist/src/mobile/components/MobileHeaderBar/MobileHeaderBar.d.ts +2 -1
- package/dist/src/mobile/components/MobileHeaderBar/MobileHeaderBar.js +22 -12
- package/dist/src/mobile/components/index.d.ts +2 -1
- package/dist/src/mobile/components/index.js +3 -1
- package/dist/src/mobile/index.d.ts +2 -2
- package/dist/src/mobile/index.js +2 -1
- package/package.json +1 -1
- package/release-note.md +28 -3
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/* eslint-disable import/order */
|
|
3
3
|
/* eslint-disable import/first */
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.
|
|
6
|
-
exports.D_DesktopHeadlessModal = exports.D_DesktopBasicModal = exports.D_UserDesktopSideTab = exports.D_UserDesktopTabBar = void 0;
|
|
5
|
+
exports.D_UploadTextButton = exports.D_UploadMainButton = exports.D_UploadIconButton = exports.D_TextLabel = exports.D_TextField = exports.D_TextButton = exports.D_StatusBlock = exports.D_ReactionButton = exports.D_Select = exports.D_Radio = exports.D_PageTitleTextGroup = exports.D_MainButton = exports.D_ImageSlide = exports.D_IconButton = exports.D_HorizontalFormGroup = exports.D_Hero = exports.D_FloatingActionButton = exports.D_FilterBar = exports.D_EditApplyTextField = exports.D_DynamicDesktopNavBarTemplates = exports.D_DynamicDesktopNavBar = exports.D_Dropdown = exports.D_DesktopTabBar = exports.D_DesktopHeaderBar = exports.D_DesktopAlertDialog = exports.D_ContextMenuItem = exports.D_ContextMenu = exports.D_Chip = exports.D_Checkbox = exports.D_ChatList = exports.D_ChatBubbleListItem = exports.D_CardList = exports.D_Card = exports.D_BodyTextGroup = exports.D_BlogTextField = exports.D_BasicListItem = exports.D_BasicList = exports.D_BasicFormGroup = exports.D_BasicChatListItem = exports.D_AdminListItem = exports.D_AdminListHeader = exports.D_AdminList = exports.WTContainersBox = exports.WTGlobalMenuContainer = exports.LayoutWT = exports.WSContainersBox = exports.WSGlobalMenuContainer = exports.LayoutWS = exports.WFContainersBox = exports.LayoutWF = void 0;
|
|
6
|
+
exports.D_DesktopHeadlessModal = exports.D_DesktopBasicModal = exports.D_UserDesktopSideTab = exports.D_UserDesktopTabBar = exports.D_UserDesktopNavBar = void 0;
|
|
7
7
|
// layoutWF
|
|
8
8
|
var LayoutWF_1 = require("./layout/LayoutWF");
|
|
9
9
|
Object.defineProperty(exports, "LayoutWF", { enumerable: true, get: function () { return LayoutWF_1.LayoutWF; } });
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "D_BlogTextField", { enumerable: true, get: funct
|
|
|
36
36
|
Object.defineProperty(exports, "D_BodyTextGroup", { enumerable: true, get: function () { return components_1.BodyTextGroup; } });
|
|
37
37
|
Object.defineProperty(exports, "D_Card", { enumerable: true, get: function () { return components_1.Card; } });
|
|
38
38
|
Object.defineProperty(exports, "D_CardList", { enumerable: true, get: function () { return components_1.CardList; } });
|
|
39
|
+
Object.defineProperty(exports, "D_ChatBubbleListItem", { enumerable: true, get: function () { return components_1.ChatBubbleListItem; } });
|
|
39
40
|
Object.defineProperty(exports, "D_ChatList", { enumerable: true, get: function () { return components_1.ChatList; } });
|
|
40
41
|
Object.defineProperty(exports, "D_Checkbox", { enumerable: true, get: function () { return components_1.Checkbox; } });
|
|
41
42
|
Object.defineProperty(exports, "D_Chip", { enumerable: true, get: function () { return components_1.Chip; } });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare type ChatBubbleProps = {
|
|
3
|
+
colorTheme?: 'grey_01' | 'primary';
|
|
4
|
+
tailType?: 'none' | 'left_top' | 'right_top';
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
declare function ChatBubble({ colorTheme, tailType, children }: ChatBubbleProps): JSX.Element;
|
|
8
|
+
export default ChatBubble;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
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
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
var react_1 = __importDefault(require("react"));
|
|
30
|
+
var styled_components_1 = __importStar(require("styled-components"));
|
|
31
|
+
var backgroundColorTheme = {
|
|
32
|
+
primary: 'ui_cpnt_list_chatbubble_base_area_my',
|
|
33
|
+
grey_01: 'ui_cpnt_list_chatbubble_base_area'
|
|
34
|
+
};
|
|
35
|
+
function ChatBubble(_a) {
|
|
36
|
+
var _b = _a.colorTheme, colorTheme = _b === void 0 ? 'grey_01' : _b, _c = _a.tailType, tailType = _c === void 0 ? 'left_top' : _c, children = _a.children;
|
|
37
|
+
return (react_1.default.createElement(S_ChatBubbleWrapper, null,
|
|
38
|
+
react_1.default.createElement(S_Tail, { width: "8", height: "11", viewBox: "0 0 8 11", tailType: tailType, colorTheme: colorTheme },
|
|
39
|
+
react_1.default.createElement("path", { d: "M1107,336.800385 C1107,341.257979 1107.46413,342.87441 1108.33566,344.50404 C1108.99708,345.740772 1109.89313,346.775532 1110.99903,347.583527 L1111,347.618755 L1110.99894,347.618755 C1108.35845,347.618755 1105.83748,347.107028 1103.52979,346.177337 C1104.54074,345.507794 1105.3496,344.61519 1105.93147,343.527194 C1106.6287,342.22349 1107,340.8866 1107,337.582996 L1107,337.582996 Z", transform: "rotate(180 555.765 173.81)" })),
|
|
40
|
+
react_1.default.createElement(S_ChatBubble, { colorTheme: colorTheme }, children)));
|
|
41
|
+
}
|
|
42
|
+
var none = (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: none;\n"], ["\n display: none;\n"])));
|
|
43
|
+
var left_top = (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n left: -4px;\n top: 0;\n"], ["\n left: -4px;\n top: 0;\n"])));
|
|
44
|
+
var right_top = (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n transform: scaleX(-1);\n right: -4px;\n top: 0;\n"], ["\n transform: scaleX(-1);\n right: -4px;\n top: 0;\n"])));
|
|
45
|
+
var S_ChatBubbleWrapper = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: inline-block;\n position: relative;\n"], ["\n display: inline-block;\n position: relative;\n"])));
|
|
46
|
+
var S_ChatBubble = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n box-sizing: border-box;\n padding-top: ", ";\n padding-right: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n\n background-color: ", ";\n border-radius: 8px;\n position: relative;\n max-width: 960px;\n min-width: 32px;\n"], ["\n box-sizing: border-box;\n padding-top: ", ";\n padding-right: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n\n background-color: ", ";\n border-radius: 8px;\n position: relative;\n max-width: 960px;\n min-width: 32px;\n"])), function (_a) {
|
|
47
|
+
var theme = _a.theme;
|
|
48
|
+
return theme.spacing.spacingB;
|
|
49
|
+
}, function (_a) {
|
|
50
|
+
var theme = _a.theme;
|
|
51
|
+
return theme.spacing.spacingC;
|
|
52
|
+
}, function (_a) {
|
|
53
|
+
var theme = _a.theme;
|
|
54
|
+
return theme.spacing.spacingB;
|
|
55
|
+
}, function (_a) {
|
|
56
|
+
var theme = _a.theme;
|
|
57
|
+
return theme.spacing.spacingC;
|
|
58
|
+
}, function (_a) {
|
|
59
|
+
var colorTheme = _a.colorTheme, theme = _a.theme;
|
|
60
|
+
return colorTheme && theme[backgroundColorTheme[colorTheme]];
|
|
61
|
+
});
|
|
62
|
+
var S_Tail = styled_components_1.default.svg(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n position: absolute;\n fill: ", ";\n\n ", ";\n"], ["\n position: absolute;\n fill: ", ";\n\n ", ";\n"])), function (_a) {
|
|
63
|
+
var colorTheme = _a.colorTheme, theme = _a.theme;
|
|
64
|
+
return colorTheme && theme[backgroundColorTheme[colorTheme]];
|
|
65
|
+
}, function (_a) {
|
|
66
|
+
var tailType = _a.tailType;
|
|
67
|
+
return tailType &&
|
|
68
|
+
{
|
|
69
|
+
none: none,
|
|
70
|
+
left_top: left_top,
|
|
71
|
+
right_top: right_top
|
|
72
|
+
}[tailType];
|
|
73
|
+
});
|
|
74
|
+
exports.default = ChatBubble;
|
|
75
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PDSTextType, PDSValueOption } from '../../../common';
|
|
3
|
+
export declare type ChatBubbleListItemProps = {
|
|
4
|
+
titleText?: PDSTextType;
|
|
5
|
+
imageMode?: 'none' | 'use';
|
|
6
|
+
imageSrc?: string;
|
|
7
|
+
hoverMode?: 'none' | 'use';
|
|
8
|
+
styleTheme?: 'seller_tail' | 'seller' | 'subscriber_tail' | 'subscriber' | 'my_tail' | 'my';
|
|
9
|
+
timeMode?: 'none' | 'use';
|
|
10
|
+
timeText?: PDSTextType;
|
|
11
|
+
contextMenuOptionArray?: PDSValueOption[];
|
|
12
|
+
contextMenuState?: 'normal' | 'disabled';
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
onClickContextMenuItem?: (option: PDSValueOption) => void;
|
|
15
|
+
};
|
|
16
|
+
declare function ChatBubbleListItem({ titleText, imageMode, imageSrc, hoverMode, styleTheme, timeMode, timeText, contextMenuOptionArray, contextMenuState, children, onClickContextMenuItem }: ChatBubbleListItemProps): JSX.Element;
|
|
17
|
+
export default ChatBubbleListItem;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
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
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
var react_1 = __importStar(require("react"));
|
|
30
|
+
var styled_components_1 = __importStar(require("styled-components"));
|
|
31
|
+
var hybrid_1 = require("../../../hybrid");
|
|
32
|
+
var ContextMenu_1 = require("../ContextMenu");
|
|
33
|
+
var ContextMenuItem_1 = require("../ContextMenuItem");
|
|
34
|
+
var IconButton_1 = require("../IconButton");
|
|
35
|
+
var TextLabel_1 = require("../TextLabel");
|
|
36
|
+
var ChatBubble_1 = __importDefault(require("./ChatBubble"));
|
|
37
|
+
var Popup_1 = require("./Popup");
|
|
38
|
+
var ChatBubbleColorTheme = {
|
|
39
|
+
seller_tail: 'grey_01',
|
|
40
|
+
seller: 'grey_01',
|
|
41
|
+
subscriber_tail: 'grey_01',
|
|
42
|
+
subscriber: 'grey_01',
|
|
43
|
+
my_tail: 'primary',
|
|
44
|
+
my: 'primary'
|
|
45
|
+
};
|
|
46
|
+
var ChatBubbleTailType = {
|
|
47
|
+
seller_tail: 'left_top',
|
|
48
|
+
seller: 'none',
|
|
49
|
+
subscriber_tail: 'left_top',
|
|
50
|
+
subscriber: 'none',
|
|
51
|
+
my_tail: 'right_top',
|
|
52
|
+
my: 'none'
|
|
53
|
+
};
|
|
54
|
+
function ChatBubbleListItem(_a) {
|
|
55
|
+
var titleText = _a.titleText, _b = _a.imageMode, imageMode = _b === void 0 ? 'use' : _b, imageSrc = _a.imageSrc, _c = _a.hoverMode, hoverMode = _c === void 0 ? 'use' : _c, _d = _a.styleTheme, styleTheme = _d === void 0 ? 'seller_tail' : _d, _e = _a.timeMode, timeMode = _e === void 0 ? 'use' : _e, timeText = _a.timeText, contextMenuOptionArray = _a.contextMenuOptionArray, _f = _a.contextMenuState, contextMenuState = _f === void 0 ? 'normal' : _f, children = _a.children, onClickContextMenuItem = _a.onClickContextMenuItem;
|
|
56
|
+
var isMy = styleTheme.includes('my');
|
|
57
|
+
var isSeller = styleTheme.includes('seller');
|
|
58
|
+
var isTail = styleTheme.includes('tail');
|
|
59
|
+
var _g = (0, react_1.useState)(false), isContextMenuOpen = _g[0], setIsContextMenuOpen = _g[1];
|
|
60
|
+
var contextMenuRef = (0, react_1.useRef)(null);
|
|
61
|
+
var chatBody = document.querySelector('#chatMessageBox');
|
|
62
|
+
var rect = chatBody === null || chatBody === void 0 ? void 0 : chatBody.getBoundingClientRect();
|
|
63
|
+
/**
|
|
64
|
+
* @when contextMenu가 열려 있을 때
|
|
65
|
+
* @expected ChatList body의 스크롤을 숨기고, contextMenu의 외부를 클릭하면 contextMenu가 닫히도록 합니다.
|
|
66
|
+
* @clear document의 클릭 이벤트를 제거합니다.
|
|
67
|
+
*/
|
|
68
|
+
(0, react_1.useEffect)(function () {
|
|
69
|
+
// NOTE pop up 개념이 생기기 전까지의 임시 조치 방법입니다.
|
|
70
|
+
if (!chatBody) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
chatBody.style.overflowY = isContextMenuOpen ? 'hidden' : 'auto';
|
|
74
|
+
}, [isContextMenuOpen, chatBody]);
|
|
75
|
+
var handleMoreButtonClick = function (e) {
|
|
76
|
+
e.stopPropagation();
|
|
77
|
+
setIsContextMenuOpen(function (prev) { return !prev; });
|
|
78
|
+
};
|
|
79
|
+
var handleContextMenuItemClick = function (option) {
|
|
80
|
+
if (onClickContextMenuItem) {
|
|
81
|
+
onClickContextMenuItem(option);
|
|
82
|
+
}
|
|
83
|
+
setIsContextMenuOpen(false);
|
|
84
|
+
};
|
|
85
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
86
|
+
react_1.default.createElement(S_ChatBubbleListItem, { hoverMode: hoverMode, isMy: isMy, imageMode: imageMode },
|
|
87
|
+
imageMode === 'use' && (react_1.default.createElement(react_1.default.Fragment, null, isTail && !isMy ? (react_1.default.createElement(S_ImageViewWrapper, { isSeller: isSeller },
|
|
88
|
+
react_1.default.createElement(hybrid_1.ImageView, { shapeType: "circular", ratio: "1_1", scaleType: "cover", src: imageSrc, width: 38 }))) : (react_1.default.createElement(hybrid_1.Spacing, { size: "spacing_g", spacingType: "width" })))),
|
|
89
|
+
react_1.default.createElement(S_RightBox, null,
|
|
90
|
+
isTail && !isMy && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
91
|
+
react_1.default.createElement(TextLabel_1.TextLabel, { text: titleText, styleTheme: "caption1Bold", colorTheme: isSeller ? 'usrTextBrandPrimary' : 'sysTextPrimary' }),
|
|
92
|
+
react_1.default.createElement(hybrid_1.Spacing, { size: "spacing_b" }))),
|
|
93
|
+
react_1.default.createElement(S_ChatBubbleBox, null,
|
|
94
|
+
react_1.default.createElement(S_ChatBubbleWrapper, { isMy: isMy },
|
|
95
|
+
timeMode === 'use' && timeText && isMy && (react_1.default.createElement(S_TimeWrapper, null,
|
|
96
|
+
react_1.default.createElement(TextLabel_1.TextLabel, { text: timeText, styleTheme: "caption2Regular", colorTheme: "sysTextTertiary", singleLineMode: "use" }),
|
|
97
|
+
react_1.default.createElement(hybrid_1.Spacing, { size: "spacing_a", spacingType: "width" }))),
|
|
98
|
+
react_1.default.createElement(ChatBubble_1.default, { colorTheme: ChatBubbleColorTheme[styleTheme], tailType: ChatBubbleTailType[styleTheme] }, children),
|
|
99
|
+
timeMode === 'use' && timeText && !isMy && (react_1.default.createElement(S_TimeWrapper, null,
|
|
100
|
+
react_1.default.createElement(hybrid_1.Spacing, { size: "spacing_a", spacingType: "width" }),
|
|
101
|
+
react_1.default.createElement(TextLabel_1.TextLabel, { text: timeText, styleTheme: "caption2Regular", colorTheme: "sysTextTertiary", singleLineMode: "use" })))),
|
|
102
|
+
hoverMode === 'use' && !isMy && (react_1.default.createElement(S_SeeMoreButton, { isContextMenuOpen: isContextMenuOpen, ref: contextMenuRef },
|
|
103
|
+
react_1.default.createElement(IconButton_1.IconButton, { fillType: "fill", baseSize: "xsmall", iconFillType: "fill", iconSize: 20, iconName: "ic_more", baseColorKey: "ui_cpnt_button_fill_base_transparent", iconColorKey: "ui_cpnt_button_icon_enabled", onClick: handleMoreButtonClick }))))),
|
|
104
|
+
react_1.default.createElement(Popup_1.PopupProvider, null,
|
|
105
|
+
react_1.default.createElement(Popup_1.Popup, { targetRef: contextMenuRef, isOpen: isContextMenuOpen, placement: "v-auto", wrapperHeight: rect === null || rect === void 0 ? void 0 : rect.height, onClickOutside: function () { return setIsContextMenuOpen(false); } },
|
|
106
|
+
react_1.default.createElement(ContextMenu_1.ContextMenu, null, contextMenuOptionArray === null || contextMenuOptionArray === void 0 ? void 0 : contextMenuOptionArray.map(function (el) { return (react_1.default.createElement(ContextMenuItem_1.ContextMenuItem, { key: el.value, option: el, onClick: handleContextMenuItemClick, state: contextMenuState })); })))))));
|
|
107
|
+
}
|
|
108
|
+
var S_SeeMoreButton = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-sizing: border-box;\n width: 48px;\n height: 24px;\n min-width: 48px;\n padding-right: ", ";\n margin-top: ", ";\n position: relative;\n visibility: ", ";\n display: flex;\n justify-content: right;\n"], ["\n box-sizing: border-box;\n width: 48px;\n height: 24px;\n min-width: 48px;\n padding-right: ", ";\n margin-top: ", ";\n position: relative;\n visibility: ", ";\n display: flex;\n justify-content: right;\n"])), function (_a) {
|
|
109
|
+
var theme = _a.theme;
|
|
110
|
+
return theme.spacing.spacingB;
|
|
111
|
+
}, function (_a) {
|
|
112
|
+
var theme = _a.theme;
|
|
113
|
+
return theme.spacing.spacingB;
|
|
114
|
+
}, function (_a) {
|
|
115
|
+
var isContextMenuOpen = _a.isContextMenuOpen;
|
|
116
|
+
return (isContextMenuOpen ? 'visible' : 'hidden');
|
|
117
|
+
});
|
|
118
|
+
var MyChatBubbleListItem = (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin-right: ", ";\n"], ["\n margin-right: ", ";\n"])), function (_a) {
|
|
119
|
+
var theme = _a.theme;
|
|
120
|
+
return theme.spacing.spacingA;
|
|
121
|
+
});
|
|
122
|
+
var NoImageChatBubbleListItem = (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n margin-left: ", ";\n"], ["\n margin-left: ", ";\n"])), function (_a) {
|
|
123
|
+
var theme = _a.theme;
|
|
124
|
+
return theme.spacing.spacingA;
|
|
125
|
+
});
|
|
126
|
+
var S_ChatBubbleListItem = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: flex;\n height: fit-content;\n max-width: 100%;\n\n :hover {\n ", " {\n visibility: ", ";\n }\n }\n\n ", ";\n ", ";\n"], ["\n display: flex;\n height: fit-content;\n max-width: 100%;\n\n :hover {\n ", " {\n visibility: ", ";\n }\n }\n\n ", ";\n ", ";\n"])), S_SeeMoreButton, function (_a) {
|
|
127
|
+
var hoverMode = _a.hoverMode;
|
|
128
|
+
return hoverMode === 'use' && 'visible';
|
|
129
|
+
}, function (_a) {
|
|
130
|
+
var isMy = _a.isMy;
|
|
131
|
+
return isMy && MyChatBubbleListItem;
|
|
132
|
+
}, function (_a) {
|
|
133
|
+
var imageMode = _a.imageMode;
|
|
134
|
+
return imageMode === 'none' && NoImageChatBubbleListItem;
|
|
135
|
+
});
|
|
136
|
+
var ImageViewSeller = (0, styled_components_1.css)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) {
|
|
137
|
+
var theme = _a.theme;
|
|
138
|
+
return theme.ui_profile_image_border_brandprimary;
|
|
139
|
+
});
|
|
140
|
+
var ImageViewDefault = (0, styled_components_1.css)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n border: 1px solid ", ";\n"], ["\n border: 1px solid ", ";\n"])), function (_a) {
|
|
141
|
+
var theme = _a.theme;
|
|
142
|
+
return theme.ui_profile_image_border;
|
|
143
|
+
});
|
|
144
|
+
var S_ImageViewWrapper = styled_components_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n border-radius: 50%;\n height: fit-content;\n min-width: fit-content;\n width: fit-content;\n margin-right: ", ";\n\n ", ";\n"], ["\n border-radius: 50%;\n height: fit-content;\n min-width: fit-content;\n width: fit-content;\n margin-right: ", ";\n\n ", ";\n"])), function (_a) {
|
|
145
|
+
var theme = _a.theme;
|
|
146
|
+
return theme.spacing.spacingB;
|
|
147
|
+
}, function (_a) {
|
|
148
|
+
var isSeller = _a.isSeller;
|
|
149
|
+
return (isSeller ? ImageViewSeller : ImageViewDefault);
|
|
150
|
+
});
|
|
151
|
+
var S_RightBox = styled_components_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n flex: 1;\n"], ["\n flex: 1;\n"])));
|
|
152
|
+
var S_ChatBubbleBox = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n display: flex;\n justify-content: space-between;\n"], ["\n display: flex;\n justify-content: space-between;\n"])));
|
|
153
|
+
var MyChatBubble = (0, styled_components_1.css)(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n justify-content: end;\n"], ["\n justify-content: end;\n"])));
|
|
154
|
+
var S_ChatBubbleWrapper = styled_components_1.default.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n flex: 1;\n display: flex;\n\n ", ";\n"], ["\n flex: 1;\n display: flex;\n\n ", ";\n"])), function (_a) {
|
|
155
|
+
var isMy = _a.isMy;
|
|
156
|
+
return isMy && MyChatBubble;
|
|
157
|
+
});
|
|
158
|
+
var S_TimeWrapper = styled_components_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n align-self: end;\n display: flex;\n"], ["\n align-self: end;\n display: flex;\n"])));
|
|
159
|
+
exports.default = ChatBubbleListItem;
|
|
160
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React, { MutableRefObject } from 'react';
|
|
2
|
+
declare type Props = {
|
|
3
|
+
targetRef: MutableRefObject<HTMLElement | null>;
|
|
4
|
+
isOpen: boolean;
|
|
5
|
+
onClickOutside?: () => void;
|
|
6
|
+
onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
|
|
7
|
+
placement: string;
|
|
8
|
+
wrapperHeight?: number;
|
|
9
|
+
children: React.ReactNode;
|
|
10
|
+
};
|
|
11
|
+
declare function Popup({ targetRef, isOpen, onClickOutside, onClick, placement, wrapperHeight, children }: Props): JSX.Element;
|
|
12
|
+
/**
|
|
13
|
+
* 팝업 루트 프로바이더
|
|
14
|
+
* 팝업을 사용하기 위해서는 팝업 프로바이더가 상위 컴포넌트로 있어야 합니다.
|
|
15
|
+
*/
|
|
16
|
+
declare function PopupProvider({ children }: {
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}): JSX.Element;
|
|
19
|
+
export { PopupProvider, Popup };
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
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
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.Popup = exports.PopupProvider = void 0;
|
|
30
|
+
var react_1 = __importStar(require("react"));
|
|
31
|
+
var react_dom_1 = require("react-dom");
|
|
32
|
+
var styled_components_1 = __importDefault(require("styled-components"));
|
|
33
|
+
var PopupContext = (0, react_1.createContext)({
|
|
34
|
+
current: null
|
|
35
|
+
});
|
|
36
|
+
function getHAutoPlacement(_a) {
|
|
37
|
+
var targetRect = _a.targetRect, popupRect = _a.popupRect;
|
|
38
|
+
var leftSpaced = targetRect.right + popupRect.width > window.innerWidth;
|
|
39
|
+
var topSpaced = targetRect.bottom + popupRect.height > window.innerHeight;
|
|
40
|
+
return (leftSpaced ? 'left' : 'right') + "-" + (topSpaced ? 'end' : 'start');
|
|
41
|
+
}
|
|
42
|
+
function getVAutoPlacement(_a) {
|
|
43
|
+
var targetRect = _a.targetRect, popupRect = _a.popupRect, wrapperHeight = _a.wrapperHeight;
|
|
44
|
+
var leftSpaced = targetRect.right + popupRect.width > window.innerWidth;
|
|
45
|
+
var topSpaced = targetRect.bottom + popupRect.height > (wrapperHeight || window.innerWidth);
|
|
46
|
+
return (topSpaced ? 'top' : 'bottom') + "-" + (leftSpaced ? 'end' : 'start');
|
|
47
|
+
}
|
|
48
|
+
function getVCenterPlacement(_a) {
|
|
49
|
+
var targetRect = _a.targetRect, popupRect = _a.popupRect;
|
|
50
|
+
var leftSpaced = targetRect.right + popupRect.width > window.innerWidth;
|
|
51
|
+
return leftSpaced ? 'left-center' : 'right-center';
|
|
52
|
+
}
|
|
53
|
+
function getHCenterPlacement(_a) {
|
|
54
|
+
var targetRect = _a.targetRect, popupRect = _a.popupRect;
|
|
55
|
+
var topSpaced = targetRect.bottom + popupRect.height > window.innerHeight;
|
|
56
|
+
return topSpaced ? 'top-center' : 'bottom-center';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 위치 정규화
|
|
60
|
+
*/
|
|
61
|
+
function getNormalizedPlacement(_a) {
|
|
62
|
+
var placement = _a.placement, targetRect = _a.targetRect, popupRect = _a.popupRect, wrapperHeight = _a.wrapperHeight;
|
|
63
|
+
switch (placement) {
|
|
64
|
+
case 'v-auto':
|
|
65
|
+
return getVAutoPlacement({ targetRect: targetRect, popupRect: popupRect, wrapperHeight: wrapperHeight });
|
|
66
|
+
case 'h-auto':
|
|
67
|
+
return getHAutoPlacement({ targetRect: targetRect, popupRect: popupRect, wrapperHeight: wrapperHeight });
|
|
68
|
+
case 'v-center':
|
|
69
|
+
return getVCenterPlacement({ targetRect: targetRect, popupRect: popupRect, wrapperHeight: wrapperHeight });
|
|
70
|
+
case 'h-center':
|
|
71
|
+
return getHCenterPlacement({ targetRect: targetRect, popupRect: popupRect, wrapperHeight: wrapperHeight });
|
|
72
|
+
default:
|
|
73
|
+
return placement;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function updatePosition(_a) {
|
|
77
|
+
var targetElem = _a.targetElem, popupElem = _a.popupElem, placement = _a.placement, wrapperHeight = _a.wrapperHeight;
|
|
78
|
+
var targetRect = targetElem.getBoundingClientRect();
|
|
79
|
+
var popupRect = popupElem.getBoundingClientRect();
|
|
80
|
+
var normPlacement = getNormalizedPlacement({ placement: placement, targetRect: targetRect, popupRect: popupRect, wrapperHeight: wrapperHeight });
|
|
81
|
+
switch (normPlacement) {
|
|
82
|
+
case 'top':
|
|
83
|
+
popupElem.style.top = targetRect.top - popupRect.height + "px";
|
|
84
|
+
popupElem.style.left = targetRect.left - (popupRect.width - targetRect.width) / 2 + "px";
|
|
85
|
+
popupElem.style.width = 'auto';
|
|
86
|
+
break;
|
|
87
|
+
case 'top-start':
|
|
88
|
+
popupElem.style.top = targetRect.top - popupRect.height + "px";
|
|
89
|
+
popupElem.style.left = targetRect.left + "px";
|
|
90
|
+
popupElem.style.width = 'auto';
|
|
91
|
+
break;
|
|
92
|
+
case 'top-end':
|
|
93
|
+
popupElem.style.top = targetRect.top - popupRect.height + "px";
|
|
94
|
+
popupElem.style.left = targetRect.left + targetRect.width - popupRect.width + "px";
|
|
95
|
+
popupElem.style.width = 'auto';
|
|
96
|
+
break;
|
|
97
|
+
case 'top-both':
|
|
98
|
+
popupElem.style.top = targetRect.top - popupRect.height + "px";
|
|
99
|
+
popupElem.style.left = targetRect.left + "px";
|
|
100
|
+
popupElem.style.width = targetRect.width + "px";
|
|
101
|
+
break;
|
|
102
|
+
case 'top-center':
|
|
103
|
+
popupElem.style.top = targetRect.top - popupRect.height + "px";
|
|
104
|
+
popupElem.style.left = targetRect.left - (popupRect.width - targetRect.width) / 2 + "px";
|
|
105
|
+
popupElem.style.width = 'auto';
|
|
106
|
+
break;
|
|
107
|
+
case 'bottom':
|
|
108
|
+
popupElem.style.top = targetRect.bottom + "px";
|
|
109
|
+
popupElem.style.left = targetRect.left - (popupRect.width - targetRect.width) / 2 + "px";
|
|
110
|
+
popupElem.style.width = 'auto';
|
|
111
|
+
break;
|
|
112
|
+
case 'bottom-start':
|
|
113
|
+
popupElem.style.top = targetRect.bottom + "px";
|
|
114
|
+
popupElem.style.left = targetRect.left + "px";
|
|
115
|
+
popupElem.style.width = 'auto';
|
|
116
|
+
break;
|
|
117
|
+
case 'bottom-end':
|
|
118
|
+
popupElem.style.top = targetRect.bottom + "px";
|
|
119
|
+
popupElem.style.left = targetRect.right - popupRect.width + "px";
|
|
120
|
+
popupElem.style.width = 'auto';
|
|
121
|
+
break;
|
|
122
|
+
case 'bottom-both':
|
|
123
|
+
popupElem.style.top = targetRect.bottom + "px";
|
|
124
|
+
popupElem.style.left = targetRect.left + "px";
|
|
125
|
+
popupElem.style.width = targetRect.width + "px";
|
|
126
|
+
break;
|
|
127
|
+
case 'bottom-center':
|
|
128
|
+
popupElem.style.top = targetRect.bottom + "px";
|
|
129
|
+
popupElem.style.left = targetRect.left - (popupRect.width - targetRect.width) / 2 + "px";
|
|
130
|
+
popupElem.style.width = 'auto';
|
|
131
|
+
break;
|
|
132
|
+
case 'left':
|
|
133
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) / 2 + "px";
|
|
134
|
+
popupElem.style.left = targetRect.left - popupRect.width + "px";
|
|
135
|
+
popupElem.style.width = 'auto';
|
|
136
|
+
break;
|
|
137
|
+
case 'left-start':
|
|
138
|
+
popupElem.style.top = targetRect.top + "px";
|
|
139
|
+
popupElem.style.left = targetRect.left - popupRect.width + "px";
|
|
140
|
+
popupElem.style.width = 'auto';
|
|
141
|
+
break;
|
|
142
|
+
case 'left-end':
|
|
143
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) + "px";
|
|
144
|
+
popupElem.style.left = targetRect.left - popupRect.width + "px";
|
|
145
|
+
popupElem.style.width = 'auto';
|
|
146
|
+
break;
|
|
147
|
+
case 'left-center':
|
|
148
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) / 2 + "px";
|
|
149
|
+
popupElem.style.left = targetRect.left - popupRect.width + "px";
|
|
150
|
+
popupElem.style.width = 'auto';
|
|
151
|
+
break;
|
|
152
|
+
case 'right':
|
|
153
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) / 2 + "px";
|
|
154
|
+
popupElem.style.left = targetRect.left + targetRect.width + "px";
|
|
155
|
+
popupElem.style.width = 'auto';
|
|
156
|
+
break;
|
|
157
|
+
case 'right-start':
|
|
158
|
+
popupElem.style.top = targetRect.top + "px";
|
|
159
|
+
popupElem.style.left = targetRect.left + targetRect.width + "px";
|
|
160
|
+
popupElem.style.width = 'auto';
|
|
161
|
+
break;
|
|
162
|
+
case 'right-end':
|
|
163
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) + "px";
|
|
164
|
+
popupElem.style.left = targetRect.left + targetRect.width + "px";
|
|
165
|
+
popupElem.style.width = 'auto';
|
|
166
|
+
break;
|
|
167
|
+
case 'right-center':
|
|
168
|
+
popupElem.style.top = targetRect.top - (popupRect.height - targetRect.height) / 2 + "px";
|
|
169
|
+
popupElem.style.left = targetRect.left + targetRect.width + "px";
|
|
170
|
+
popupElem.style.width = 'auto';
|
|
171
|
+
break;
|
|
172
|
+
default:
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
return normPlacement;
|
|
176
|
+
}
|
|
177
|
+
function Popup(_a) {
|
|
178
|
+
var targetRef = _a.targetRef, _b = _a.isOpen, isOpen = _b === void 0 ? false : _b, onClickOutside = _a.onClickOutside, onClick = _a.onClick, _c = _a.placement, placement = _c === void 0 ? 'bottom-start' : _c, wrapperHeight = _a.wrapperHeight, children = _a.children;
|
|
179
|
+
var popupRootRef = (0, react_1.useContext)(PopupContext);
|
|
180
|
+
var _d = (0, react_1.useState)('bottom'), normPlacement = _d[0], setNormPlacement = _d[1];
|
|
181
|
+
var popupRef = (0, react_1.useRef)(null);
|
|
182
|
+
/**
|
|
183
|
+
* 팝업 외의 다른 요소 클릭시 팝업이 닫히도록 합니다.
|
|
184
|
+
*/
|
|
185
|
+
(0, react_1.useEffect)(function () {
|
|
186
|
+
function handleClickOutside(e) {
|
|
187
|
+
if (popupRootRef.current && !popupRootRef.current.contains(e.target)) {
|
|
188
|
+
if (onClickOutside) {
|
|
189
|
+
onClickOutside();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
window.document.addEventListener('mousedown', handleClickOutside);
|
|
194
|
+
return function () {
|
|
195
|
+
window.document.removeEventListener('mousedown', handleClickOutside);
|
|
196
|
+
};
|
|
197
|
+
}, [popupRootRef, onClickOutside]);
|
|
198
|
+
/**
|
|
199
|
+
* 전체 UI 렌더링이 한 프레임 완료된 후에 팝업 위치를 결정합니다.
|
|
200
|
+
*/
|
|
201
|
+
(0, react_1.useEffect)(function () {
|
|
202
|
+
window.requestAnimationFrame(function () {
|
|
203
|
+
if (!targetRef.current || !popupRef.current) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
var targetElem = targetRef.current;
|
|
207
|
+
var popupElem = popupRef.current;
|
|
208
|
+
var updatedPlacement = updatePosition({ targetElem: targetElem, popupElem: popupElem, placement: placement, wrapperHeight: wrapperHeight });
|
|
209
|
+
setNormPlacement(updatedPlacement);
|
|
210
|
+
});
|
|
211
|
+
}, [isOpen, placement, wrapperHeight, targetRef, popupRef]);
|
|
212
|
+
function handlePopupClick(e) {
|
|
213
|
+
e.stopPropagation();
|
|
214
|
+
if (onClick) {
|
|
215
|
+
onClick(e);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (!popupRootRef || !popupRootRef.current || !isOpen) {
|
|
219
|
+
return react_1.default.createElement(react_1.default.Fragment, null);
|
|
220
|
+
}
|
|
221
|
+
var popupComponent = (react_1.default.createElement(S_Popup, { ref: popupRef, onClick: function (e) { return handlePopupClick(e); } }, typeof children === 'function' ? children(normPlacement) : children));
|
|
222
|
+
return (0, react_dom_1.createPortal)(popupComponent, popupRootRef.current);
|
|
223
|
+
}
|
|
224
|
+
exports.Popup = Popup;
|
|
225
|
+
var S_Popup = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n left: -1000px;\n position: fixed;\n top: -1000px;\n z-index: 1000;\n"], ["\n left: -1000px;\n position: fixed;\n top: -1000px;\n z-index: 1000;\n"])));
|
|
226
|
+
/**
|
|
227
|
+
* 팝업 루트 프로바이더
|
|
228
|
+
* 팝업을 사용하기 위해서는 팝업 프로바이더가 상위 컴포넌트로 있어야 합니다.
|
|
229
|
+
*/
|
|
230
|
+
function PopupProvider(_a) {
|
|
231
|
+
var children = _a.children;
|
|
232
|
+
var ref = (0, react_1.useRef)();
|
|
233
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
234
|
+
react_1.default.createElement(PopupContext.Provider, { value: ref }, children),
|
|
235
|
+
react_1.default.createElement("div", { ref: ref })));
|
|
236
|
+
}
|
|
237
|
+
exports.PopupProvider = PopupProvider;
|
|
238
|
+
var templateObject_1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ChatBubbleListItem } from './ChatBubbleListItem';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ChatBubbleListItem = void 0;
|
|
7
|
+
var ChatBubbleListItem_1 = require("./ChatBubbleListItem");
|
|
8
|
+
Object.defineProperty(exports, "ChatBubbleListItem", { enumerable: true, get: function () { return __importDefault(ChatBubbleListItem_1).default; } });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { Props as ChatListProps } from './ChatList';
|
|
3
|
-
declare type Props = Pick<ChatListProps, 'scrollVisibleType' | 'children' | 'bodyMBtnText'> & {
|
|
3
|
+
declare type Props = Pick<ChatListProps, 'scrollVisibleType' | 'children' | 'bodyMBtnText' | 'bodySpacingMode'> & {
|
|
4
4
|
isSubmitted: boolean;
|
|
5
5
|
};
|
|
6
|
-
declare function Body({ scrollVisibleType, children, isSubmitted, bodyMBtnText }: Props): JSX.Element;
|
|
6
|
+
declare function Body({ scrollVisibleType, children, isSubmitted, bodyMBtnText, bodySpacingMode }: Props): JSX.Element;
|
|
7
7
|
export default Body;
|
|
@@ -32,7 +32,7 @@ var MainButton_1 = require("../MainButton");
|
|
|
32
32
|
var useAutoScrollToBottom_1 = __importDefault(require("./useAutoScrollToBottom"));
|
|
33
33
|
var useTimeout_1 = __importDefault(require("./useTimeout"));
|
|
34
34
|
function Body(_a) {
|
|
35
|
-
var scrollVisibleType = _a.scrollVisibleType, children = _a.children, isSubmitted = _a.isSubmitted, bodyMBtnText = _a.bodyMBtnText;
|
|
35
|
+
var scrollVisibleType = _a.scrollVisibleType, children = _a.children, isSubmitted = _a.isSubmitted, bodyMBtnText = _a.bodyMBtnText, bodySpacingMode = _a.bodySpacingMode;
|
|
36
36
|
var _b = (0, react_1.useState)(false), isButtonShow = _b[0], setIsButtonShow = _b[1];
|
|
37
37
|
var _c = (0, useAutoScrollToBottom_1.default)(), triggerScrollToBottom = _c.triggerScrollToBottom, EndOfList = _c.EndOfList;
|
|
38
38
|
var scrollRef = (0, react_1.useRef)(null);
|
|
@@ -66,17 +66,27 @@ function Body(_a) {
|
|
|
66
66
|
setIsButtonShow(true);
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
-
return (react_1.default.createElement(S_Body,
|
|
69
|
+
return (react_1.default.createElement(S_Body, { bodySpacingMode: bodySpacingMode },
|
|
70
70
|
react_1.default.createElement(S_ChatMessageBox, { onScroll: handleScroll, ref: scrollRef, scrollVisibleType: scrollVisibleType },
|
|
71
71
|
children,
|
|
72
72
|
react_1.default.createElement(EndOfList, null)),
|
|
73
73
|
isButtonShow && (react_1.default.createElement(S_BottomButtonWrapper, null,
|
|
74
74
|
react_1.default.createElement(MainButton_1.MainButton, { text: bodyMBtnText, size: "small", onClick: handleClickMBtn })))));
|
|
75
75
|
}
|
|
76
|
-
var
|
|
77
|
-
var
|
|
78
|
-
|
|
79
|
-
|
|
76
|
+
var bodySpacing = (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n box-sizing: border-box;\n padding-right: ", ";\n padding-left: ", ";\n"], ["\n box-sizing: border-box;\n padding-right: ", ";\n padding-left: ", ";\n"])), function (_a) {
|
|
77
|
+
var theme = _a.theme;
|
|
78
|
+
return theme.spacing.spacingE;
|
|
79
|
+
}, function (_a) {
|
|
80
|
+
var theme = _a.theme;
|
|
81
|
+
return theme.spacing.spacingE;
|
|
82
|
+
});
|
|
83
|
+
var S_Body = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n flex: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n position: relative;\n\n ", ";\n"], ["\n flex: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n position: relative;\n\n ", ";\n"])), function (_a) {
|
|
84
|
+
var bodySpacingMode = _a.bodySpacingMode;
|
|
85
|
+
return bodySpacingMode === 'use' && bodySpacing;
|
|
86
|
+
});
|
|
87
|
+
var scrollVisibleStyle = (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n ::-webkit-scrollbar {\n display: block;\n }\n"], ["\n ::-webkit-scrollbar {\n display: block;\n }\n"])));
|
|
88
|
+
var scrollHiddenStyle = (0, styled_components_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n ::-webkit-scrollbar {\n display: none;\n }\n"], ["\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n ::-webkit-scrollbar {\n display: none;\n }\n"])));
|
|
89
|
+
var S_ChatMessageBox = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n height: 100%;\n overflow-y: auto;\n\n ", "\n"], ["\n height: 100%;\n overflow-y: auto;\n\n ", "\n"])), function (_a) {
|
|
80
90
|
var scrollVisibleType = _a.scrollVisibleType;
|
|
81
91
|
if (!scrollVisibleType || scrollVisibleType === 'moving') {
|
|
82
92
|
return;
|
|
@@ -86,9 +96,9 @@ var S_ChatMessageBox = styled_components_1.default.div(templateObject_4 || (temp
|
|
|
86
96
|
hidden: scrollHiddenStyle
|
|
87
97
|
}[scrollVisibleType];
|
|
88
98
|
});
|
|
89
|
-
var S_BottomButtonWrapper = styled_components_1.default.div(
|
|
99
|
+
var S_BottomButtonWrapper = styled_components_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n position: absolute;\n bottom: ", ";\n left: 50%;\n transform: translate(-50%, 0);\n"], ["\n position: absolute;\n bottom: ", ";\n left: 50%;\n transform: translate(-50%, 0);\n"])), function (_a) {
|
|
90
100
|
var theme = _a.theme;
|
|
91
101
|
return theme.spacing.spacingC;
|
|
92
102
|
});
|
|
93
103
|
exports.default = Body;
|
|
94
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
104
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|