@pingux/astro 2.104.0-alpha.0 → 2.104.0-alpha.2
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/lib/cjs/components/AIComponents/Response/Response.d.ts +4 -0
- package/lib/cjs/components/AIComponents/Response/Response.js +52 -0
- package/lib/cjs/components/AIComponents/Response/Response.stories.d.ts +7 -0
- package/lib/cjs/components/AIComponents/Response/Response.stories.js +82 -0
- package/lib/cjs/components/AIComponents/Response/Response.test.jsx +215 -0
- package/lib/cjs/components/AIComponents/Response/ResponseAttachment.d.ts +4 -0
- package/lib/cjs/components/AIComponents/Response/ResponseAttachment.js +54 -0
- package/lib/cjs/components/AIComponents/Response/ResponseList.d.ts +4 -0
- package/lib/cjs/components/AIComponents/Response/ResponseList.js +66 -0
- package/lib/cjs/components/AIComponents/Response/ResponseText.d.ts +4 -0
- package/lib/cjs/components/AIComponents/Response/ResponseText.js +46 -0
- package/lib/cjs/components/AIComponents/Response/ResponseToolbar.d.ts +4 -0
- package/lib/cjs/components/AIComponents/Response/ResponseToolbar.js +79 -0
- package/lib/cjs/components/AIComponents/Response/index.d.ts +5 -0
- package/lib/cjs/components/AIComponents/Response/index.js +42 -0
- package/lib/cjs/components/Image/Image.stories.js +1 -1
- package/lib/cjs/hooks/useTypeAnimation/index.d.ts +1 -0
- package/lib/cjs/hooks/useTypeAnimation/index.js +14 -0
- package/lib/cjs/hooks/useTypeAnimation/useTypeAnimation.d.ts +8 -0
- package/lib/cjs/hooks/useTypeAnimation/useTypeAnimation.js +50 -0
- package/lib/cjs/hooks/useTypeAnimation/useTypeAnimation.test.d.ts +1 -0
- package/lib/cjs/hooks/useTypeAnimation/useTypeAnimation.test.js +66 -0
- package/lib/cjs/index.d.ts +5 -0
- package/lib/cjs/index.js +40 -0
- package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +42 -0
- package/lib/cjs/styles/themes/next-gen/variants/response.d.ts +33 -0
- package/lib/cjs/styles/themes/next-gen/variants/response.js +43 -0
- package/lib/cjs/styles/themes/next-gen/variants/text.d.ts +10 -0
- package/lib/cjs/styles/themes/next-gen/variants/text.js +10 -0
- package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +32 -0
- package/lib/cjs/styles/themes/next-gen/variants/variants.js +3 -1
- package/lib/cjs/types/response.d.ts +48 -0
- package/lib/cjs/types/response.js +6 -0
- package/lib/cjs/utils/devUtils/constants/images.d.ts +1 -0
- package/lib/cjs/utils/devUtils/constants/images.js +4 -2
- package/lib/cjs/utils/devUtils/shouldReturnComingSoon.js +1 -1
- package/lib/components/AIComponents/Response/Response.js +38 -0
- package/lib/components/AIComponents/Response/Response.stories.js +72 -0
- package/lib/components/AIComponents/Response/Response.test.jsx +215 -0
- package/lib/components/AIComponents/Response/ResponseAttachment.js +40 -0
- package/lib/components/AIComponents/Response/ResponseList.js +52 -0
- package/lib/components/AIComponents/Response/ResponseText.js +37 -0
- package/lib/components/AIComponents/Response/ResponseToolbar.js +65 -0
- package/lib/components/AIComponents/Response/index.js +5 -0
- package/lib/components/Image/Image.stories.js +2 -2
- package/lib/hooks/useTypeAnimation/index.js +1 -0
- package/lib/hooks/useTypeAnimation/useTypeAnimation.js +41 -0
- package/lib/hooks/useTypeAnimation/useTypeAnimation.test.js +63 -0
- package/lib/index.js +5 -0
- package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/styles/themes/next-gen/variants/response.js +35 -0
- package/lib/styles/themes/next-gen/variants/text.js +10 -0
- package/lib/styles/themes/next-gen/variants/variants.js +3 -1
- package/lib/types/response.js +1 -0
- package/lib/utils/devUtils/constants/images.js +2 -1
- package/lib/utils/devUtils/shouldReturnComingSoon.js +1 -1
- package/package.json +1 -1
@@ -0,0 +1,52 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
|
+
_Object$defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports["default"] = void 0;
|
12
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
13
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
15
|
+
var _react = _interopRequireWildcard(require("react"));
|
16
|
+
var _AutoAwesomeOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/AutoAwesomeOutlineIcon"));
|
17
|
+
var _index = require("../../../index");
|
18
|
+
var _react2 = require("@emotion/react");
|
19
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
21
|
+
var Response = function Response(props) {
|
22
|
+
var children = props.children,
|
23
|
+
containerProps = props.containerProps,
|
24
|
+
iconProps = props.iconProps,
|
25
|
+
iconWrapperProps = props.iconWrapperProps,
|
26
|
+
_props$delay = props.delay,
|
27
|
+
delay = _props$delay === void 0 ? 10 : _props$delay;
|
28
|
+
var _useState = (0, _react.useState)(0),
|
29
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
30
|
+
index = _useState2[0],
|
31
|
+
setIndex = _useState2[1];
|
32
|
+
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
33
|
+
isRow: true,
|
34
|
+
gap: "md"
|
35
|
+
}, containerProps), (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({}, iconWrapperProps, {
|
36
|
+
variant: "response.iconWrapper"
|
37
|
+
}), (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
|
38
|
+
icon: _AutoAwesomeOutlineIcon["default"]
|
39
|
+
}, iconProps))), (0, _react2.jsx)(_index.Box, {
|
40
|
+
gap: "md"
|
41
|
+
}, (0, _map["default"])(_react.Children).call(_react.Children, children, function (child, i) {
|
42
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].cloneElement(child, {
|
43
|
+
shouldStartAnimation: index === i,
|
44
|
+
setAnimationIndex: setIndex,
|
45
|
+
animationIndex: i,
|
46
|
+
parentIndex: index,
|
47
|
+
delay: delay
|
48
|
+
}));
|
49
|
+
})));
|
50
|
+
};
|
51
|
+
var _default = Response;
|
52
|
+
exports["default"] = _default;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = exports.Default = void 0;
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
11
|
+
var _ContentCopyIcon = _interopRequireDefault(require("@pingux/mdi-react/ContentCopyIcon"));
|
12
|
+
var _TextIcon = _interopRequireDefault(require("@pingux/mdi-react/TextIcon"));
|
13
|
+
var _ThumbDownOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/ThumbDownOutlineIcon"));
|
14
|
+
var _ThumbUpOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/ThumbUpOutlineIcon"));
|
15
|
+
var _VolumeHighIcon = _interopRequireDefault(require("@pingux/mdi-react/VolumeHighIcon"));
|
16
|
+
var _ = require("../../..");
|
17
|
+
var _Response = _interopRequireDefault(require("./Response"));
|
18
|
+
var _ResponseAttachment = _interopRequireDefault(require("./ResponseAttachment"));
|
19
|
+
var _ResponseList = _interopRequireDefault(require("./ResponseList"));
|
20
|
+
var _ResponseText = _interopRequireDefault(require("./ResponseText"));
|
21
|
+
var _ResponseToolbar = _interopRequireDefault(require("./ResponseToolbar"));
|
22
|
+
var _react2 = require("@emotion/react");
|
23
|
+
var _default = {
|
24
|
+
title: 'Ai Components/Response',
|
25
|
+
component: _Response["default"]
|
26
|
+
};
|
27
|
+
exports["default"] = _default;
|
28
|
+
var testText = 'Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet';
|
29
|
+
var Default = function Default(args) {
|
30
|
+
var toolBarProps = {
|
31
|
+
readButtonProps: {
|
32
|
+
title: 'Read aloud',
|
33
|
+
icon: _VolumeHighIcon["default"]
|
34
|
+
},
|
35
|
+
copyButtonProps: {
|
36
|
+
title: 'Copy',
|
37
|
+
icon: _ContentCopyIcon["default"]
|
38
|
+
},
|
39
|
+
goodButtonProps: {
|
40
|
+
title: 'Good Response',
|
41
|
+
icon: _ThumbUpOutlineIcon["default"]
|
42
|
+
},
|
43
|
+
badButtonProps: {
|
44
|
+
title: 'Bad Response',
|
45
|
+
icon: _ThumbDownOutlineIcon["default"]
|
46
|
+
},
|
47
|
+
rephraseButtonProps: {
|
48
|
+
title: 'Rephrase Answer',
|
49
|
+
icon: _TextIcon["default"]
|
50
|
+
}
|
51
|
+
};
|
52
|
+
var delay = 20;
|
53
|
+
return (0, _react2.jsx)(_.AstroWrapper, (0, _extends2["default"])({}, args, {
|
54
|
+
themeOverrides: [_.NextGenTheme]
|
55
|
+
}), (0, _react2.jsx)(_Response["default"], {
|
56
|
+
delay: delay
|
57
|
+
}, (0, _react2.jsx)(_ResponseText["default"], {
|
58
|
+
text: testText
|
59
|
+
}), (0, _react2.jsx)(_ResponseAttachment["default"], null), (0, _react2.jsx)(_ResponseText["default"], {
|
60
|
+
text: testText
|
61
|
+
}), (0, _react2.jsx)(_ResponseText["default"], {
|
62
|
+
text: testText
|
63
|
+
}), (0, _react2.jsx)(_ResponseList["default"], null, (0, _react2.jsx)(_ResponseText["default"], {
|
64
|
+
as: "h5",
|
65
|
+
sx: {
|
66
|
+
fontWeight: 2
|
67
|
+
},
|
68
|
+
text: "heading"
|
69
|
+
}), (0, _react2.jsx)(_ResponseText["default"], {
|
70
|
+
as: "li",
|
71
|
+
text: "list item 1"
|
72
|
+
}), (0, _react2.jsx)(_ResponseText["default"], {
|
73
|
+
as: "li",
|
74
|
+
text: "list item 2"
|
75
|
+
}), (0, _react2.jsx)(_ResponseText["default"], {
|
76
|
+
as: "li",
|
77
|
+
text: "list item 3"
|
78
|
+
})), (0, _react2.jsx)(_ResponseText["default"], {
|
79
|
+
text: "follow up text"
|
80
|
+
}), (0, _react2.jsx)(_ResponseToolbar["default"], toolBarProps)));
|
81
|
+
};
|
82
|
+
exports.Default = Default;
|
@@ -0,0 +1,215 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import AccountGroupIcon from '@pingux/mdi-react/AccountGroupIcon';
|
3
|
+
import AccountIcon from '@pingux/mdi-react/AccountIcon';
|
4
|
+
import LockIcon from '@pingux/mdi-react/LockIcon';
|
5
|
+
import SearchIcon from '@pingux/mdi-react/SearchIcon';
|
6
|
+
import TagIcon from '@pingux/mdi-react/TagIcon';
|
7
|
+
|
8
|
+
import { act, render, screen } from '../../../utils/testUtils/testWrapper';
|
9
|
+
|
10
|
+
import Response from './Response';
|
11
|
+
import ResponseAttachment from './ResponseAttachment';
|
12
|
+
import ResponseList from './ResponseList';
|
13
|
+
import ResponseText from './ResponseText';
|
14
|
+
import ResponseToolbar from './ResponseToolbar';
|
15
|
+
|
16
|
+
const delay = 100;
|
17
|
+
|
18
|
+
const headingText = 'heading';
|
19
|
+
|
20
|
+
const listItem1 = 'list item 1';
|
21
|
+
const listItem2 = 'list item 2';
|
22
|
+
const listItem3 = 'list item 3';
|
23
|
+
const nextText = 'nextText';
|
24
|
+
const attachmentWrapperId = 'wrapper-id';
|
25
|
+
const toolbarId = 'id';
|
26
|
+
|
27
|
+
const customProps = {
|
28
|
+
readButtonProps: {
|
29
|
+
title: 'Read aloud test',
|
30
|
+
icon: AccountGroupIcon,
|
31
|
+
},
|
32
|
+
copyButtonProps: {
|
33
|
+
title: 'Copy test',
|
34
|
+
icon: AccountIcon,
|
35
|
+
},
|
36
|
+
goodButtonProps: {
|
37
|
+
title: 'Good Response test',
|
38
|
+
icon: LockIcon,
|
39
|
+
},
|
40
|
+
badButtonProps: {
|
41
|
+
title: 'Bad Response test',
|
42
|
+
icon: SearchIcon,
|
43
|
+
},
|
44
|
+
rephraseButtonProps: {
|
45
|
+
title: 'Rephrase Answer test',
|
46
|
+
icon: TagIcon,
|
47
|
+
},
|
48
|
+
};
|
49
|
+
|
50
|
+
const defaultProps = {
|
51
|
+
containerProps: {
|
52
|
+
'data-testid': 'container',
|
53
|
+
},
|
54
|
+
text: 'Hello',
|
55
|
+
delay,
|
56
|
+
};
|
57
|
+
|
58
|
+
beforeEach(() => {
|
59
|
+
jest.useFakeTimers();
|
60
|
+
});
|
61
|
+
|
62
|
+
const getComponent = props => render(
|
63
|
+
<Response {...defaultProps} {...props}>
|
64
|
+
<ResponseText text={defaultProps.text} />
|
65
|
+
</Response>,
|
66
|
+
);
|
67
|
+
|
68
|
+
const getComponentWithList = props => render(
|
69
|
+
<Response {...defaultProps} {...props}>
|
70
|
+
<ResponseText text={headingText} delay={delay} />
|
71
|
+
<ResponseList as="ul">
|
72
|
+
<ResponseText as="li" text={listItem1} />
|
73
|
+
<ResponseText as="li" text={listItem2} />
|
74
|
+
<ResponseText as="li" text={listItem3} />
|
75
|
+
</ResponseList>
|
76
|
+
<ResponseText text={nextText} />
|
77
|
+
</Response>,
|
78
|
+
);
|
79
|
+
|
80
|
+
const getComponentWithToolbar = props => render(
|
81
|
+
<Response {...defaultProps} {...props}>
|
82
|
+
<ResponseText text={defaultProps.text} />
|
83
|
+
<ResponseToolbar data-testid={toolbarId} />
|
84
|
+
</Response>,
|
85
|
+
);
|
86
|
+
|
87
|
+
const getComponentWithAttachment = props => render(
|
88
|
+
<Response {...defaultProps} {...props}>
|
89
|
+
<ResponseText text={defaultProps.text} />
|
90
|
+
<ResponseAttachment wrapperProps={{ 'data-testid': attachmentWrapperId }} />
|
91
|
+
<ResponseText text={defaultProps.text} />
|
92
|
+
</Response>,
|
93
|
+
);
|
94
|
+
|
95
|
+
const getComponentWithToolbarCustomProps = props => render(
|
96
|
+
<Response {...defaultProps} {...props}>
|
97
|
+
<ResponseText text={defaultProps.text} />
|
98
|
+
<ResponseToolbar data-testid={toolbarId} {...customProps} />
|
99
|
+
</Response>,
|
100
|
+
);
|
101
|
+
|
102
|
+
test('component renders', () => {
|
103
|
+
getComponent();
|
104
|
+
const container = screen.getByTestId('container');
|
105
|
+
|
106
|
+
expect(container).toBeInTheDocument();
|
107
|
+
});
|
108
|
+
|
109
|
+
test('delay prop works correctly', async () => {
|
110
|
+
getComponent();
|
111
|
+
|
112
|
+
expect(screen.queryByText(defaultProps.text)).not.toBeInTheDocument();
|
113
|
+
for (let i = 1; i < defaultProps.text.length + 1; i += 1) {
|
114
|
+
act(() => { jest.advanceTimersByTime(100); });
|
115
|
+
expect(screen.queryByText(defaultProps.text.slice(0, i))).toBeInTheDocument();
|
116
|
+
}
|
117
|
+
expect(screen.queryByText(defaultProps.text)).toBeInTheDocument();
|
118
|
+
});
|
119
|
+
|
120
|
+
test('delay prop works correctly, with list', async () => {
|
121
|
+
getComponentWithList();
|
122
|
+
|
123
|
+
expect(screen.queryByText(headingText)).not.toBeInTheDocument();
|
124
|
+
for (let i = 1; i < headingText.length + 1; i += 1) {
|
125
|
+
act(() => { jest.advanceTimersByTime(100); });
|
126
|
+
expect(screen.queryByText(headingText.slice(0, i))).toBeInTheDocument();
|
127
|
+
}
|
128
|
+
expect(screen.queryByText(headingText)).toBeInTheDocument();
|
129
|
+
|
130
|
+
// advance through the listItems
|
131
|
+
for (let i = 1; i < (listItem1.length * 3) + 1; i += 1) {
|
132
|
+
act(() => { jest.advanceTimersByTime(100); });
|
133
|
+
}
|
134
|
+
expect(screen.queryByText(nextText)).not.toBeInTheDocument();
|
135
|
+
|
136
|
+
// ensure that the subsequent text renders correctly
|
137
|
+
for (let i = 1; i < nextText.length + 1; i += 1) {
|
138
|
+
act(() => { jest.advanceTimersByTime(100); });
|
139
|
+
expect(screen.queryByText(nextText.slice(0, i))).toBeInTheDocument();
|
140
|
+
}
|
141
|
+
expect(screen.queryByText(nextText)).toBeInTheDocument();
|
142
|
+
});
|
143
|
+
|
144
|
+
test('default delay prop works correctly', async () => {
|
145
|
+
render(
|
146
|
+
<Response {...defaultProps} delay={undefined}>
|
147
|
+
<ResponseText text={defaultProps.text} />
|
148
|
+
</Response>,
|
149
|
+
);
|
150
|
+
|
151
|
+
expect(screen.queryByText(defaultProps.text)).not.toBeInTheDocument();
|
152
|
+
for (let i = 1; i < defaultProps.text.length + 1; i += 1) {
|
153
|
+
act(() => { jest.advanceTimersByTime(10); });
|
154
|
+
expect(screen.queryByText(defaultProps.text.slice(0, i))).toBeInTheDocument();
|
155
|
+
}
|
156
|
+
expect(screen.queryByText(defaultProps.text)).toBeInTheDocument();
|
157
|
+
});
|
158
|
+
|
159
|
+
test('ResponseToolbar renders correctly', async () => {
|
160
|
+
getComponentWithToolbar();
|
161
|
+
|
162
|
+
const toolbar = screen.getByTestId(toolbarId);
|
163
|
+
expect(toolbar).toHaveClass('is-not-loaded');
|
164
|
+
|
165
|
+
for (let i = 1; i < defaultProps.text.length + 1; i += 1) {
|
166
|
+
act(() => { jest.advanceTimersByTime(100); });
|
167
|
+
}
|
168
|
+
expect(toolbar).not.toHaveClass('is-not-loaded');
|
169
|
+
});
|
170
|
+
|
171
|
+
test('ResponseAttachment renders correctly', async () => {
|
172
|
+
getComponentWithAttachment();
|
173
|
+
act(() => { jest.advanceTimersByTime(10); });
|
174
|
+
|
175
|
+
expect(screen.getByText('Attachment text')).toBeInTheDocument();
|
176
|
+
const wrapper = screen.getByTestId(attachmentWrapperId);
|
177
|
+
expect(wrapper).toHaveClass('is-not-loaded');
|
178
|
+
for (let i = 1; i < defaultProps.text.length + 1; i += 1) {
|
179
|
+
act(() => { jest.advanceTimersByTime(100); });
|
180
|
+
}
|
181
|
+
expect(wrapper).not.toHaveClass('is-not-loaded');
|
182
|
+
});
|
183
|
+
|
184
|
+
test('ResponseAttachment renders correctly, with custom props', async () => {
|
185
|
+
getComponentWithToolbarCustomProps();
|
186
|
+
act(() => { jest.advanceTimersByTime(10); });
|
187
|
+
|
188
|
+
expect(screen.getByTitle('Read aloud test')).toBeInTheDocument();
|
189
|
+
expect(screen.getByTitle('Copy test')).toBeInTheDocument();
|
190
|
+
expect(screen.getByTitle('Good Response test')).toBeInTheDocument();
|
191
|
+
expect(screen.getByTitle('Bad Response test')).toBeInTheDocument();
|
192
|
+
expect(screen.getByTitle('Rephrase Answer test')).toBeInTheDocument();
|
193
|
+
});
|
194
|
+
|
195
|
+
test('ResponseToolbar conditional rendering of IconButton based on title prop', async () => {
|
196
|
+
render(
|
197
|
+
<Response {...defaultProps}>
|
198
|
+
<ResponseText text={defaultProps.text} />
|
199
|
+
<ResponseToolbar
|
200
|
+
data-testid={toolbarId}
|
201
|
+
readButtonProps={{ title: 'Read aloud' }}
|
202
|
+
copyButtonProps={{ title: '' }}
|
203
|
+
goodButtonProps={{ title: 'Good Response' }}
|
204
|
+
badButtonProps={{ title: '' }}
|
205
|
+
rephraseButtonProps={{ title: 'Rephrase Answer' }}
|
206
|
+
/>
|
207
|
+
</Response>,
|
208
|
+
);
|
209
|
+
|
210
|
+
expect(screen.getByTitle('Read aloud')).toBeInTheDocument();
|
211
|
+
expect(screen.queryByTitle('Copy')).not.toBeInTheDocument();
|
212
|
+
expect(screen.getByTitle('Good Response')).toBeInTheDocument();
|
213
|
+
expect(screen.queryByTitle('Bad Response')).not.toBeInTheDocument();
|
214
|
+
expect(screen.getByTitle('Rephrase Answer')).toBeInTheDocument();
|
215
|
+
});
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
|
+
_Object$defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports["default"] = void 0;
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
14
|
+
var _FileTableOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/FileTableOutlineIcon"));
|
15
|
+
var _hooks = require("../../../hooks");
|
16
|
+
var _index = require("../../../index");
|
17
|
+
var _react2 = require("@emotion/react");
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
19
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
20
|
+
var ResponseAttachment = function ResponseAttachment(props) {
|
21
|
+
var setAnimationIndex = props.setAnimationIndex,
|
22
|
+
parentIndex = props.parentIndex,
|
23
|
+
wrapperProps = props.wrapperProps,
|
24
|
+
textProps = props.textProps,
|
25
|
+
iconProps = props.iconProps,
|
26
|
+
className = props.className,
|
27
|
+
animationIndex = props.animationIndex,
|
28
|
+
shouldStartAnimation = props.shouldStartAnimation;
|
29
|
+
var isLoaded = (0, _react.useRef)(false);
|
30
|
+
(0, _react.useEffect)(function () {
|
31
|
+
if (shouldStartAnimation && setAnimationIndex && animationIndex !== undefined && isLoaded.current === false) {
|
32
|
+
isLoaded.current = true;
|
33
|
+
setAnimationIndex(animationIndex + 1);
|
34
|
+
}
|
35
|
+
}, [setAnimationIndex, parentIndex, animationIndex, shouldStartAnimation]);
|
36
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
|
37
|
+
isNotLoaded: !isLoaded.current
|
38
|
+
}),
|
39
|
+
classNames = _useStatusClasses.classNames;
|
40
|
+
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
41
|
+
isRow: true
|
42
|
+
}, wrapperProps, {
|
43
|
+
className: classNames,
|
44
|
+
variant: "response.attachmentWrapper"
|
45
|
+
}), (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
|
46
|
+
color: "green",
|
47
|
+
icon: _FileTableOutlineIcon["default"],
|
48
|
+
title: {
|
49
|
+
name: 'attachment icon'
|
50
|
+
}
|
51
|
+
}, iconProps)), (0, _react2.jsx)(_index.Text, textProps, "Attachment text"));
|
52
|
+
};
|
53
|
+
var _default = ResponseAttachment;
|
54
|
+
exports["default"] = _default;
|
@@ -0,0 +1,66 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
|
+
_Object$defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports["default"] = void 0;
|
12
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
13
|
+
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
14
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
15
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
17
|
+
var _index = require("../../../index");
|
18
|
+
var _react2 = require("@emotion/react");
|
19
|
+
var _excluded = ["children", "parentIndex", "setAnimationIndex", "shouldStartAnimation", "delay"];
|
20
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
21
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
22
|
+
var ResponseList = function ResponseList(props) {
|
23
|
+
var _useState = (0, _react.useState)(-1),
|
24
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
25
|
+
index = _useState2[0],
|
26
|
+
setIndex = _useState2[1];
|
27
|
+
var children = props.children,
|
28
|
+
parentIndex = props.parentIndex,
|
29
|
+
setAnimationIndex = props.setAnimationIndex,
|
30
|
+
shouldStartAnimation = props.shouldStartAnimation,
|
31
|
+
delay = props.delay,
|
32
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
33
|
+
(0, _react.useEffect)(function () {
|
34
|
+
if (children && setAnimationIndex && index === children.length && parentIndex) {
|
35
|
+
setAnimationIndex(parentIndex + 1);
|
36
|
+
}
|
37
|
+
}, [index]);
|
38
|
+
(0, _react.useEffect)(function () {
|
39
|
+
if (shouldStartAnimation) {
|
40
|
+
setIndex(0);
|
41
|
+
}
|
42
|
+
}, [shouldStartAnimation]);
|
43
|
+
return (0, _react2.jsx)(_index.Box, others, (0, _react2.jsx)(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].cloneElement(children[0], {
|
44
|
+
shouldStartAnimation: index === 0,
|
45
|
+
setAnimationIndex: setIndex,
|
46
|
+
animationIndex: 0,
|
47
|
+
delay: delay
|
48
|
+
})), (0, _react2.jsx)(_index.Box, {
|
49
|
+
as: "ul",
|
50
|
+
sx: {
|
51
|
+
pl: 'md',
|
52
|
+
listStyleType: 'disc',
|
53
|
+
listStylePosition: 'inside'
|
54
|
+
}
|
55
|
+
}, (0, _map["default"])(_react.Children).call(_react.Children, (0, _slice["default"])(children).call(children, 1, children.length), function (child, i) {
|
56
|
+
return /*#__PURE__*/_react["default"].cloneElement(child, {
|
57
|
+
shouldStartAnimation: index === i + 1,
|
58
|
+
setAnimationIndex: setIndex,
|
59
|
+
animationIndex: i + 1,
|
60
|
+
delay: delay,
|
61
|
+
isListItem: true
|
62
|
+
});
|
63
|
+
})));
|
64
|
+
};
|
65
|
+
var _default = ResponseList;
|
66
|
+
exports["default"] = _default;
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = void 0;
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
10
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
11
|
+
var _react = _interopRequireDefault(require("react"));
|
12
|
+
var _hooks = require("../../../hooks");
|
13
|
+
var _useTypeAnimation = _interopRequireDefault(require("../../../hooks/useTypeAnimation/useTypeAnimation"));
|
14
|
+
var _index = require("../../../index");
|
15
|
+
var _react2 = require("@emotion/react");
|
16
|
+
var _excluded = ["delay", "text", "shouldStartAnimation", "setAnimationIndex", "animationIndex", "isListItem", "className"];
|
17
|
+
var ResponseText = function ResponseText(props) {
|
18
|
+
var delay = props.delay,
|
19
|
+
text = props.text,
|
20
|
+
shouldStartAnimation = props.shouldStartAnimation,
|
21
|
+
setAnimationIndex = props.setAnimationIndex,
|
22
|
+
animationIndex = props.animationIndex,
|
23
|
+
isListItem = props.isListItem,
|
24
|
+
className = props.className,
|
25
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
26
|
+
var animationProps = {
|
27
|
+
delay: delay,
|
28
|
+
text: text,
|
29
|
+
setAnimationIndex: setAnimationIndex,
|
30
|
+
animationIndex: animationIndex,
|
31
|
+
shouldStartAnimation: shouldStartAnimation
|
32
|
+
};
|
33
|
+
var currentText = (0, _useTypeAnimation["default"])(animationProps);
|
34
|
+
var hasBullet = isListItem && currentText.length > 0;
|
35
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
|
36
|
+
hasBullet: hasBullet
|
37
|
+
}),
|
38
|
+
classNames = _useStatusClasses.classNames;
|
39
|
+
return (0, _react2.jsx)(_index.Text, (0, _extends2["default"])({}, others, {
|
40
|
+
role: isListItem ? 'listitem' : '',
|
41
|
+
variant: "response",
|
42
|
+
className: classNames
|
43
|
+
}), currentText);
|
44
|
+
};
|
45
|
+
var _default = ResponseText;
|
46
|
+
exports["default"] = _default;
|
@@ -0,0 +1,79 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
|
+
_Object$defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports["default"] = void 0;
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
13
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
15
|
+
var _ContentCopyIcon = _interopRequireDefault(require("@pingux/mdi-react/ContentCopyIcon"));
|
16
|
+
var _TextIcon = _interopRequireDefault(require("@pingux/mdi-react/TextIcon"));
|
17
|
+
var _ThumbDownOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/ThumbDownOutlineIcon"));
|
18
|
+
var _ThumbUpOutlineIcon = _interopRequireDefault(require("@pingux/mdi-react/ThumbUpOutlineIcon"));
|
19
|
+
var _VolumeHighIcon = _interopRequireDefault(require("@pingux/mdi-react/VolumeHighIcon"));
|
20
|
+
var _hooks = require("../../../hooks");
|
21
|
+
var _index = require("../../../index");
|
22
|
+
var _react2 = require("@emotion/react");
|
23
|
+
var _excluded = ["parentIndex", "setAnimationIndex", "readButtonProps", "copyButtonProps", "goodButtonProps", "badButtonProps", "rephraseButtonProps", "className", "shouldStartAnimation", "animationIndex"];
|
24
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
25
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
26
|
+
var ResponseToolbarIcon = function ResponseToolbarIcon(props) {
|
27
|
+
var title = props.title,
|
28
|
+
icon = props.icon;
|
29
|
+
return (0, _react2.jsx)(_index.IconButton, {
|
30
|
+
title: title
|
31
|
+
}, (0, _react2.jsx)(_index.Icon, {
|
32
|
+
icon: icon,
|
33
|
+
title: {
|
34
|
+
name: title
|
35
|
+
}
|
36
|
+
}));
|
37
|
+
};
|
38
|
+
var ResponseToolbar = function ResponseToolbar(props) {
|
39
|
+
var parentIndex = props.parentIndex,
|
40
|
+
setAnimationIndex = props.setAnimationIndex,
|
41
|
+
readButtonProps = props.readButtonProps,
|
42
|
+
copyButtonProps = props.copyButtonProps,
|
43
|
+
goodButtonProps = props.goodButtonProps,
|
44
|
+
badButtonProps = props.badButtonProps,
|
45
|
+
rephraseButtonProps = props.rephraseButtonProps,
|
46
|
+
className = props.className,
|
47
|
+
shouldStartAnimation = props.shouldStartAnimation,
|
48
|
+
animationIndex = props.animationIndex,
|
49
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
50
|
+
var isLoaded = (0, _react.useRef)(false);
|
51
|
+
(0, _react.useEffect)(function () {
|
52
|
+
if (shouldStartAnimation && setAnimationIndex && animationIndex !== undefined && isLoaded.current === false) {
|
53
|
+
isLoaded.current = true;
|
54
|
+
setAnimationIndex(animationIndex + 1);
|
55
|
+
}
|
56
|
+
}, [setAnimationIndex, parentIndex, shouldStartAnimation, animationIndex]);
|
57
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)(className, {
|
58
|
+
isNotLoaded: !isLoaded.current
|
59
|
+
}),
|
60
|
+
classNames = _useStatusClasses.classNames;
|
61
|
+
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
62
|
+
isRow: true,
|
63
|
+
gap: "sm",
|
64
|
+
variant: "response.toolbar",
|
65
|
+
className: classNames
|
66
|
+
}, others), (readButtonProps === null || readButtonProps === void 0 ? void 0 : readButtonProps.title) && (0, _react2.jsx)(ResponseToolbarIcon, (0, _extends2["default"])({
|
67
|
+
icon: _VolumeHighIcon["default"]
|
68
|
+
}, readButtonProps)), (copyButtonProps === null || copyButtonProps === void 0 ? void 0 : copyButtonProps.title) && (0, _react2.jsx)(ResponseToolbarIcon, (0, _extends2["default"])({
|
69
|
+
icon: _ContentCopyIcon["default"]
|
70
|
+
}, copyButtonProps)), (goodButtonProps === null || goodButtonProps === void 0 ? void 0 : goodButtonProps.title) && (0, _react2.jsx)(ResponseToolbarIcon, (0, _extends2["default"])({
|
71
|
+
icon: _ThumbUpOutlineIcon["default"]
|
72
|
+
}, goodButtonProps)), (badButtonProps === null || badButtonProps === void 0 ? void 0 : badButtonProps.title) && (0, _react2.jsx)(ResponseToolbarIcon, (0, _extends2["default"])({
|
73
|
+
icon: _ThumbDownOutlineIcon["default"]
|
74
|
+
}, badButtonProps)), (rephraseButtonProps === null || rephraseButtonProps === void 0 ? void 0 : rephraseButtonProps.title) && (0, _react2.jsx)(ResponseToolbarIcon, (0, _extends2["default"])({
|
75
|
+
icon: _TextIcon["default"]
|
76
|
+
}, rephraseButtonProps)));
|
77
|
+
};
|
78
|
+
var _default = ResponseToolbar;
|
79
|
+
exports["default"] = _default;
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { default } from './Response';
|
2
|
+
export { default as ResponseAttachment } from './ResponseAttachment';
|
3
|
+
export { default as ResponseList } from './ResponseList';
|
4
|
+
export { default as ResponseText } from './ResponseText';
|
5
|
+
export { default as ResponseToolbar } from './ResponseToolbar';
|