@king-design/vue 3.7.0 → 3.8.0-beta.0
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/__tests__/__snapshots__/Vue Next Demos.md +399 -0
- package/components/bubble/bubble.d.ts +61 -0
- package/components/bubble/bubble.js +81 -0
- package/components/bubble/bubble.vdt.js +85 -0
- package/components/bubble/index.d.ts +1 -0
- package/components/bubble/index.js +1 -0
- package/components/bubble/index.spec.d.ts +1 -0
- package/components/bubble/index.spec.js +771 -0
- package/components/bubble/styles.d.ts +5 -0
- package/components/bubble/styles.js +53 -0
- package/components/bubble/useBubbleDisplay.d.ts +18 -0
- package/components/bubble/useBubbleDisplay.js +300 -0
- package/components/bubbleList/bubbleList.d.ts +87 -0
- package/components/bubbleList/bubbleList.js +75 -0
- package/components/bubbleList/bubbleList.vdt.js +143 -0
- package/components/bubbleList/index.d.ts +1 -0
- package/components/bubbleList/index.js +1 -0
- package/components/bubbleList/index.spec.d.ts +1 -0
- package/components/bubbleList/index.spec.js +1268 -0
- package/components/bubbleList/item.d.ts +16 -0
- package/components/bubbleList/item.js +27 -0
- package/components/bubbleList/item.vdt.js +36 -0
- package/components/bubbleList/styles.d.ts +5 -0
- package/components/bubbleList/styles.js +33 -0
- package/components/bubbleList/useBubbleList.d.ts +28 -0
- package/components/bubbleList/useBubbleList.js +455 -0
- package/components/checkbox/index.d.ts +3 -3
- package/components/fileCard/fileCard.d.ts +65 -0
- package/components/fileCard/fileCard.js +72 -0
- package/components/fileCard/fileCard.vdt.js +161 -0
- package/components/fileCard/fileCardAssets.d.ts +1 -0
- package/components/fileCard/fileCardAssets.js +54 -0
- package/components/fileCard/fileCardUtils.d.ts +14 -0
- package/components/fileCard/fileCardUtils.js +94 -0
- package/components/fileCard/index.d.ts +2 -0
- package/components/fileCard/index.js +2 -0
- package/components/fileCard/index.spec.d.ts +1 -0
- package/components/fileCard/index.spec.js +1096 -0
- package/components/fileCard/list.d.ts +29 -0
- package/components/fileCard/list.js +46 -0
- package/components/fileCard/list.vdt.js +71 -0
- package/components/fileCard/styles.d.ts +5 -0
- package/components/fileCard/styles.js +83 -0
- package/components/fileCard/useFileCard.d.ts +45 -0
- package/components/fileCard/useFileCard.js +330 -0
- package/components/fileCard/useFileCardList.d.ts +14 -0
- package/components/fileCard/useFileCardList.js +49 -0
- package/components/form/form.js +2 -1
- package/components/media/context.d.ts +6 -0
- package/components/media/context.js +2 -0
- package/components/media/group.d.ts +12 -0
- package/components/media/group.js +32 -0
- package/components/media/group.vdt.js +50 -0
- package/components/media/index.d.ts +2 -0
- package/components/media/index.js +2 -0
- package/components/media/index.spec.d.ts +1 -0
- package/components/media/index.spec.js +1691 -0
- package/components/media/media.d.ts +37 -0
- package/components/media/media.js +67 -0
- package/components/media/media.vdt.js +202 -0
- package/components/media/mediaAssets.d.ts +4 -0
- package/components/media/mediaAssets.js +9 -0
- package/components/media/mediaUtils.d.ts +6 -0
- package/components/media/mediaUtils.js +66 -0
- package/components/media/styles.d.ts +13 -0
- package/components/media/styles.js +52 -0
- package/components/media/types.d.ts +37 -0
- package/components/media/types.js +1 -0
- package/components/media/useMedia.d.ts +70 -0
- package/components/media/useMedia.js +471 -0
- package/components/media/useMediaGroup.d.ts +15 -0
- package/components/media/useMediaGroup.js +136 -0
- package/components/media/useMediaViewer.d.ts +14 -0
- package/components/media/useMediaViewer.js +129 -0
- package/components/media/viewer.d.ts +24 -0
- package/components/media/viewer.js +54 -0
- package/components/media/viewer.vdt.js +100 -0
- package/components/radio/index.d.ts +3 -3
- package/components/sender/icons.d.ts +3 -0
- package/components/sender/icons.js +17 -0
- package/components/sender/index.d.ts +1 -0
- package/components/sender/index.js +1 -0
- package/components/sender/index.spec.d.ts +1 -0
- package/components/sender/index.spec.js +1597 -0
- package/components/sender/sender.d.ts +104 -0
- package/components/sender/sender.js +111 -0
- package/components/sender/sender.vdt.js +230 -0
- package/components/sender/styles.d.ts +5 -0
- package/components/sender/styles.js +56 -0
- package/components/sender/useAutoResize.d.ts +4 -0
- package/components/sender/useAutoResize.js +99 -0
- package/components/sender/useSenderDrag.d.ts +6 -0
- package/components/sender/useSenderDrag.js +320 -0
- package/components/sender/useSenderInput.d.ts +16 -0
- package/components/sender/useSenderInput.js +101 -0
- package/components/sender/useSenderPaste.d.ts +5 -0
- package/components/sender/useSenderPaste.js +36 -0
- package/components/sender/useSenderUpload.d.ts +11 -0
- package/components/sender/useSenderUpload.js +395 -0
- package/components/skeleton/skeleton.d.ts +2 -1
- package/components/skeleton/skeleton.js +1 -1
- package/components/think/index.d.ts +1 -0
- package/components/think/index.js +1 -0
- package/components/think/index.spec.d.ts +1 -0
- package/components/think/index.spec.js +345 -0
- package/components/think/index.vdt.js +82 -0
- package/components/think/styles.d.ts +5 -0
- package/components/think/styles.js +25 -0
- package/components/think/think.d.ts +28 -0
- package/components/think/think.js +48 -0
- package/components/think/useThinkExpand.d.ts +10 -0
- package/components/think/useThinkExpand.js +56 -0
- package/components/types.d.ts +4 -2
- package/components/upload/ajaxUploader.d.ts +1 -0
- package/components/upload/ajaxUploader.js +6 -0
- package/components/xmarkdown/index.d.ts +2 -0
- package/components/xmarkdown/index.js +1 -0
- package/components/xmarkdown/index.spec.d.ts +1 -0
- package/components/xmarkdown/index.spec.js +1666 -0
- package/components/xmarkdown/markdown/codeBlockRenderer.d.ts +8 -0
- package/components/xmarkdown/markdown/codeBlockRenderer.js +52 -0
- package/components/xmarkdown/markdown/codeblock.d.ts +8 -0
- package/components/xmarkdown/markdown/codeblock.js +74 -0
- package/components/xmarkdown/markdown/highlight.d.ts +17 -0
- package/components/xmarkdown/markdown/highlight.js +83 -0
- package/components/xmarkdown/markdown/index.d.ts +14 -0
- package/components/xmarkdown/markdown/index.js +14 -0
- package/components/xmarkdown/markdown/mermaid.d.ts +8 -0
- package/components/xmarkdown/markdown/mermaid.js +104 -0
- package/components/xmarkdown/markdown/renderTree.d.ts +54 -0
- package/components/xmarkdown/markdown/renderTree.js +386 -0
- package/components/xmarkdown/markdown/renderer.d.ts +18 -0
- package/components/xmarkdown/markdown/renderer.js +461 -0
- package/components/xmarkdown/markdown/streaming.d.ts +24 -0
- package/components/xmarkdown/markdown/streaming.js +513 -0
- package/components/xmarkdown/markdown/types.d.ts +124 -0
- package/components/xmarkdown/markdown/types.js +6 -0
- package/components/xmarkdown/markdown/utils.d.ts +7 -0
- package/components/xmarkdown/markdown/utils.js +9 -0
- package/components/xmarkdown/markdown.d.ts +1 -0
- package/components/xmarkdown/markdown.js +1 -0
- package/components/xmarkdown/styles.d.ts +5 -0
- package/components/xmarkdown/styles.js +50 -0
- package/components/xmarkdown/useMermaid.d.ts +27 -0
- package/components/xmarkdown/useMermaid.js +745 -0
- package/components/xmarkdown/useXMarkdownContent.d.ts +14 -0
- package/components/xmarkdown/useXMarkdownContent.js +218 -0
- package/components/xmarkdown/useXMarkdownDisplay.d.ts +26 -0
- package/components/xmarkdown/useXMarkdownDisplay.js +569 -0
- package/components/xmarkdown/xmarkdown.d.ts +61 -0
- package/components/xmarkdown/xmarkdown.js +109 -0
- package/components/xmarkdown/xmarkdown.vdt.js +43 -0
- package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
- package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
- package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/dist/i18n/en-US.js +29 -1
- package/dist/i18n/en-US.js.map +1 -1
- package/dist/i18n/en-US.min.js +1 -1
- package/dist/index.js +100506 -37457
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1569 -1
- package/dist/kpc.css +4 -0
- package/dist/ksyun.css +4 -0
- package/i18n/en-US.d.ts +27 -0
- package/i18n/en-US.js +29 -1
- package/index.d.ts +9 -2
- package/index.js +9 -2
- package/package.json +8 -2
- package/styles/global.js +12 -6
- package/yarn-error.log +0 -1012
|
@@ -0,0 +1,1268 @@
|
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
2
|
+
import _inheritsLoose from "@babel/runtime-corejs3/helpers/inheritsLoose";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
|
|
4
|
+
import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
|
|
5
|
+
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js/instance/concat";
|
|
6
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js/instance/map";
|
|
7
|
+
import _Array$from from "@babel/runtime-corejs3/core-js/array/from";
|
|
8
|
+
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js/instance/slice";
|
|
9
|
+
import _atInstanceProperty from "@babel/runtime-corejs3/core-js/instance/at";
|
|
10
|
+
import { Component } from 'intact-vue-next';
|
|
11
|
+
import { dispatchEvent, mount, unmount, wait } from '../../test/utils';
|
|
12
|
+
import { BubbleList } from '.';
|
|
13
|
+
describe('BubbleList', function () {
|
|
14
|
+
afterEach(function () {
|
|
15
|
+
unmount();
|
|
16
|
+
});
|
|
17
|
+
it('should render items with role defaults and forward bubble footer, extra and bottom slots', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
18
|
+
var Demo, _mount, element, bubbles, bottoms, footers, extras, texts, firstBubble, firstFooter, firstExtra;
|
|
19
|
+
return _regeneratorRuntime.wrap(function _callee$(_context2) {
|
|
20
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
21
|
+
case 0:
|
|
22
|
+
Demo = /*#__PURE__*/function (_Component) {
|
|
23
|
+
_inheritsLoose(Demo, _Component);
|
|
24
|
+
function Demo() {
|
|
25
|
+
var _context;
|
|
26
|
+
var _this;
|
|
27
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
28
|
+
args[_key] = arguments[_key];
|
|
29
|
+
}
|
|
30
|
+
_this = _Component.call.apply(_Component, _concatInstanceProperty(_context = [this]).call(_context, args)) || this;
|
|
31
|
+
_this.BubbleList = BubbleList;
|
|
32
|
+
return _this;
|
|
33
|
+
}
|
|
34
|
+
Demo.defaults = function defaults() {
|
|
35
|
+
return {
|
|
36
|
+
roles: {
|
|
37
|
+
ai: {
|
|
38
|
+
placement: 'start',
|
|
39
|
+
avatar: true,
|
|
40
|
+
roleName: 'AI'
|
|
41
|
+
},
|
|
42
|
+
user: {
|
|
43
|
+
placement: 'end',
|
|
44
|
+
avatar: true,
|
|
45
|
+
roleName: 'Me',
|
|
46
|
+
variant: 'outlined'
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
items: [{
|
|
50
|
+
key: 1,
|
|
51
|
+
role: 'ai',
|
|
52
|
+
content: 'hello'
|
|
53
|
+
}, {
|
|
54
|
+
key: 2,
|
|
55
|
+
role: 'user',
|
|
56
|
+
content: 'world'
|
|
57
|
+
}]
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
return Demo;
|
|
61
|
+
}(Component);
|
|
62
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 240px;\"\n items={this.get('items')}\n roles={this.get('roles')}\n >\n <b:bottom args=\"scope\">\n <span class=\"custom-bubble-bottom\">{scope.item.role}</span>\n </b:bottom>\n <b:footer args=\"scope\">\n <span class=\"custom-bubble-footer\">{scope.item.key}</span>\n </b:footer>\n <b:extra args=\"scope\">\n <span class=\"custom-bubble-extra\">{scope.item.content}</span>\n </b:extra>\n </BubbleList>\n ";
|
|
63
|
+
_mount = mount(Demo), element = _mount[1];
|
|
64
|
+
_context2.next = 5;
|
|
65
|
+
return wait(50);
|
|
66
|
+
case 5:
|
|
67
|
+
bubbles = element.querySelectorAll('.k-bubble');
|
|
68
|
+
bottoms = element.querySelectorAll('.custom-bubble-bottom');
|
|
69
|
+
footers = element.querySelectorAll('.custom-bubble-footer');
|
|
70
|
+
extras = element.querySelectorAll('.custom-bubble-extra');
|
|
71
|
+
texts = element.querySelectorAll('.k-bubble-text');
|
|
72
|
+
firstBubble = bubbles[0];
|
|
73
|
+
firstFooter = firstBubble.querySelector('.custom-bubble-footer');
|
|
74
|
+
firstExtra = firstBubble.querySelector('.custom-bubble-extra');
|
|
75
|
+
expect(bubbles.length).to.eql(2);
|
|
76
|
+
expect(bubbles[0].classList.contains('k-bubble-start')).to.be.true;
|
|
77
|
+
expect(bubbles[1].classList.contains('k-bubble-end')).to.be.true;
|
|
78
|
+
expect(bubbles[1].classList.contains('k-bubble-outlined')).to.be.true;
|
|
79
|
+
expect(texts.length).to.eql(2);
|
|
80
|
+
expect(texts[0].textContent).to.contain('hello');
|
|
81
|
+
expect(texts[1].textContent).to.contain('world');
|
|
82
|
+
expect(bottoms.length).to.eql(2);
|
|
83
|
+
expect(bottoms[0].textContent).to.eql('ai');
|
|
84
|
+
expect(bottoms[1].textContent).to.eql('user');
|
|
85
|
+
expect(footers.length).to.eql(2);
|
|
86
|
+
expect(footers[0].textContent).to.eql('1');
|
|
87
|
+
expect(footers[1].textContent).to.eql('2');
|
|
88
|
+
expect(extras.length).to.eql(2);
|
|
89
|
+
expect(extras[0].textContent).to.eql('hello');
|
|
90
|
+
expect(extras[1].textContent).to.eql('world');
|
|
91
|
+
expect(firstFooter.compareDocumentPosition(firstExtra) & Node.DOCUMENT_POSITION_FOLLOWING).to.not.eql(0);
|
|
92
|
+
case 30:
|
|
93
|
+
case "end":
|
|
94
|
+
return _context2.stop();
|
|
95
|
+
}
|
|
96
|
+
}, _callee);
|
|
97
|
+
})));
|
|
98
|
+
it('should stay at bottom when the last bubble keeps growing', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
99
|
+
var _context5, _context6;
|
|
100
|
+
var Demo, _mount2, instance, element, scrollBox, nextItems;
|
|
101
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context7) {
|
|
102
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
103
|
+
case 0:
|
|
104
|
+
Demo = /*#__PURE__*/function (_Component2) {
|
|
105
|
+
_inheritsLoose(Demo, _Component2);
|
|
106
|
+
function Demo() {
|
|
107
|
+
var _context3;
|
|
108
|
+
var _this2;
|
|
109
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
110
|
+
args[_key2] = arguments[_key2];
|
|
111
|
+
}
|
|
112
|
+
_this2 = _Component2.call.apply(_Component2, _concatInstanceProperty(_context3 = [this]).call(_context3, args)) || this;
|
|
113
|
+
_this2.listRef = null;
|
|
114
|
+
_this2.BubbleList = BubbleList;
|
|
115
|
+
return _this2;
|
|
116
|
+
}
|
|
117
|
+
Demo.defaults = function defaults() {
|
|
118
|
+
var _context4;
|
|
119
|
+
var items = _mapInstanceProperty(_context4 = _Array$from({
|
|
120
|
+
length: 12
|
|
121
|
+
})).call(_context4, function (_, index) {
|
|
122
|
+
return {
|
|
123
|
+
key: index,
|
|
124
|
+
role: index % 2 ? 'ai' : 'user',
|
|
125
|
+
content: "line " + index
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
roles: {
|
|
130
|
+
ai: {
|
|
131
|
+
placement: 'start',
|
|
132
|
+
avatar: true,
|
|
133
|
+
roleName: 'AI'
|
|
134
|
+
},
|
|
135
|
+
user: {
|
|
136
|
+
placement: 'end',
|
|
137
|
+
avatar: true,
|
|
138
|
+
roleName: 'Me',
|
|
139
|
+
variant: 'outlined'
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
items: items
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
return Demo;
|
|
146
|
+
}(Component);
|
|
147
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 220px;\"\n items={this.get('items')}\n roles={this.get('roles')}\n />\n ";
|
|
148
|
+
_mount2 = mount(Demo), instance = _mount2[0], element = _mount2[1];
|
|
149
|
+
_context7.next = 5;
|
|
150
|
+
return wait(80);
|
|
151
|
+
case 5:
|
|
152
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
153
|
+
expect(scrollBox.scrollTop).to.be.greaterThan(0);
|
|
154
|
+
expect(instance.listRef.isAtBottom()).to.be.true;
|
|
155
|
+
nextItems = _sliceInstanceProperty(_context5 = instance.get('items')).call(_context5);
|
|
156
|
+
nextItems[nextItems.length - 1] = _extends({}, nextItems[nextItems.length - 1], {
|
|
157
|
+
content: _mapInstanceProperty(_context6 = _Array$from({
|
|
158
|
+
length: 32
|
|
159
|
+
})).call(_context6, function (_, index) {
|
|
160
|
+
return "grow " + index;
|
|
161
|
+
}).join('\n'),
|
|
162
|
+
typing: true
|
|
163
|
+
});
|
|
164
|
+
instance.set('items', nextItems);
|
|
165
|
+
_context7.next = 13;
|
|
166
|
+
return wait(120);
|
|
167
|
+
case 13:
|
|
168
|
+
expect(instance.listRef.isAtBottom()).to.be.true;
|
|
169
|
+
expect(scrollBox.scrollHeight - scrollBox.scrollTop - scrollBox.clientHeight).to.be.lessThan(90);
|
|
170
|
+
case 15:
|
|
171
|
+
case "end":
|
|
172
|
+
return _context7.stop();
|
|
173
|
+
}
|
|
174
|
+
}, _callee2);
|
|
175
|
+
})));
|
|
176
|
+
it('should keep short content at the top when list has fixed height', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
177
|
+
var Demo, _mount3, element, scrollBox, firstRow, offset;
|
|
178
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context9) {
|
|
179
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
180
|
+
case 0:
|
|
181
|
+
Demo = /*#__PURE__*/function (_Component3) {
|
|
182
|
+
_inheritsLoose(Demo, _Component3);
|
|
183
|
+
function Demo() {
|
|
184
|
+
var _context8;
|
|
185
|
+
var _this3;
|
|
186
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
187
|
+
args[_key3] = arguments[_key3];
|
|
188
|
+
}
|
|
189
|
+
_this3 = _Component3.call.apply(_Component3, _concatInstanceProperty(_context8 = [this]).call(_context8, args)) || this;
|
|
190
|
+
_this3.BubbleList = BubbleList;
|
|
191
|
+
return _this3;
|
|
192
|
+
}
|
|
193
|
+
Demo.defaults = function defaults() {
|
|
194
|
+
return {
|
|
195
|
+
items: [{
|
|
196
|
+
key: 1,
|
|
197
|
+
content: 'first'
|
|
198
|
+
}, {
|
|
199
|
+
key: 2,
|
|
200
|
+
content: 'second'
|
|
201
|
+
}]
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
return Demo;
|
|
205
|
+
}(Component);
|
|
206
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 400px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"short-row\" style=\"height: 40px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
207
|
+
_mount3 = mount(Demo), element = _mount3[1];
|
|
208
|
+
_context9.next = 5;
|
|
209
|
+
return wait(50);
|
|
210
|
+
case 5:
|
|
211
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
212
|
+
firstRow = element.querySelector('.short-row');
|
|
213
|
+
offset = firstRow.getBoundingClientRect().top - scrollBox.getBoundingClientRect().top;
|
|
214
|
+
expect(offset).to.be.lessThan(16);
|
|
215
|
+
case 9:
|
|
216
|
+
case "end":
|
|
217
|
+
return _context9.stop();
|
|
218
|
+
}
|
|
219
|
+
}, _callee3);
|
|
220
|
+
})));
|
|
221
|
+
it('should scroll to bottom on mount when initial content overflows', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
222
|
+
var Demo, _mount4, element, scrollBox;
|
|
223
|
+
return _regeneratorRuntime.wrap(function _callee4$(_context12) {
|
|
224
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
225
|
+
case 0:
|
|
226
|
+
Demo = /*#__PURE__*/function (_Component4) {
|
|
227
|
+
_inheritsLoose(Demo, _Component4);
|
|
228
|
+
function Demo() {
|
|
229
|
+
var _context10;
|
|
230
|
+
var _this4;
|
|
231
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
232
|
+
args[_key4] = arguments[_key4];
|
|
233
|
+
}
|
|
234
|
+
_this4 = _Component4.call.apply(_Component4, _concatInstanceProperty(_context10 = [this]).call(_context10, args)) || this;
|
|
235
|
+
_this4.BubbleList = BubbleList;
|
|
236
|
+
return _this4;
|
|
237
|
+
}
|
|
238
|
+
Demo.defaults = function defaults() {
|
|
239
|
+
var _context11;
|
|
240
|
+
return {
|
|
241
|
+
items: _mapInstanceProperty(_context11 = _Array$from({
|
|
242
|
+
length: 8
|
|
243
|
+
})).call(_context11, function (_, index) {
|
|
244
|
+
return {
|
|
245
|
+
key: index,
|
|
246
|
+
content: "initial-" + index
|
|
247
|
+
};
|
|
248
|
+
})
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
return Demo;
|
|
252
|
+
}(Component);
|
|
253
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 160px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"initial-row\" style=\"height: 48px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
254
|
+
_mount4 = mount(Demo), element = _mount4[1];
|
|
255
|
+
_context12.next = 5;
|
|
256
|
+
return wait(80);
|
|
257
|
+
case 5:
|
|
258
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
259
|
+
expect(scrollBox.scrollTop).to.be.greaterThan(0);
|
|
260
|
+
expect(scrollBox.scrollHeight - scrollBox.scrollTop - scrollBox.clientHeight).to.be.lessThan(4);
|
|
261
|
+
case 8:
|
|
262
|
+
case "end":
|
|
263
|
+
return _context12.stop();
|
|
264
|
+
}
|
|
265
|
+
}, _callee4);
|
|
266
|
+
})));
|
|
267
|
+
it('should stop sticky scrolling after user scrolls away from the bottom', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
268
|
+
var _context15, _context16;
|
|
269
|
+
var Demo, _mount5, instance, element, scrollBox, nextItems;
|
|
270
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context17) {
|
|
271
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
272
|
+
case 0:
|
|
273
|
+
Demo = /*#__PURE__*/function (_Component5) {
|
|
274
|
+
_inheritsLoose(Demo, _Component5);
|
|
275
|
+
function Demo() {
|
|
276
|
+
var _context13;
|
|
277
|
+
var _this5;
|
|
278
|
+
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
279
|
+
args[_key5] = arguments[_key5];
|
|
280
|
+
}
|
|
281
|
+
_this5 = _Component5.call.apply(_Component5, _concatInstanceProperty(_context13 = [this]).call(_context13, args)) || this;
|
|
282
|
+
_this5.listRef = null;
|
|
283
|
+
_this5.BubbleList = BubbleList;
|
|
284
|
+
return _this5;
|
|
285
|
+
}
|
|
286
|
+
Demo.defaults = function defaults() {
|
|
287
|
+
var _context14;
|
|
288
|
+
return {
|
|
289
|
+
items: _mapInstanceProperty(_context14 = _Array$from({
|
|
290
|
+
length: 10
|
|
291
|
+
})).call(_context14, function (_, index) {
|
|
292
|
+
return {
|
|
293
|
+
key: index,
|
|
294
|
+
content: "row-" + index
|
|
295
|
+
};
|
|
296
|
+
})
|
|
297
|
+
};
|
|
298
|
+
};
|
|
299
|
+
return Demo;
|
|
300
|
+
}(Component);
|
|
301
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 220px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"custom-row\" style=\"height: 48px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
302
|
+
_mount5 = mount(Demo), instance = _mount5[0], element = _mount5[1];
|
|
303
|
+
_context17.next = 5;
|
|
304
|
+
return wait(80);
|
|
305
|
+
case 5:
|
|
306
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
307
|
+
scrollBox.scrollTop = 40;
|
|
308
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
309
|
+
_context17.next = 10;
|
|
310
|
+
return wait(30);
|
|
311
|
+
case 10:
|
|
312
|
+
expect(instance.listRef.isAtBottom()).to.be.false;
|
|
313
|
+
nextItems = _sliceInstanceProperty(_context15 = instance.get('items')).call(_context15);
|
|
314
|
+
nextItems[nextItems.length - 1] = _extends({}, nextItems[nextItems.length - 1], {
|
|
315
|
+
content: _mapInstanceProperty(_context16 = _Array$from({
|
|
316
|
+
length: 8
|
|
317
|
+
})).call(_context16, function (_, index) {
|
|
318
|
+
return "row-9-" + index;
|
|
319
|
+
}).join(' ')
|
|
320
|
+
});
|
|
321
|
+
instance.set('items', nextItems);
|
|
322
|
+
_context17.next = 16;
|
|
323
|
+
return wait(100);
|
|
324
|
+
case 16:
|
|
325
|
+
expect(instance.listRef.isAtBottom()).to.be.false;
|
|
326
|
+
expect(scrollBox.scrollTop).to.be.lessThan(120);
|
|
327
|
+
case 18:
|
|
328
|
+
case "end":
|
|
329
|
+
return _context17.stop();
|
|
330
|
+
}
|
|
331
|
+
}, _callee5);
|
|
332
|
+
})));
|
|
333
|
+
it('should preserve viewport position when prepending history while reading older messages', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
334
|
+
var _context20;
|
|
335
|
+
var Demo, _mount6, instance, element, scrollBox, prevScrollTop;
|
|
336
|
+
return _regeneratorRuntime.wrap(function _callee6$(_context21) {
|
|
337
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
338
|
+
case 0:
|
|
339
|
+
Demo = /*#__PURE__*/function (_Component6) {
|
|
340
|
+
_inheritsLoose(Demo, _Component6);
|
|
341
|
+
function Demo() {
|
|
342
|
+
var _context18;
|
|
343
|
+
var _this6;
|
|
344
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
345
|
+
args[_key6] = arguments[_key6];
|
|
346
|
+
}
|
|
347
|
+
_this6 = _Component6.call.apply(_Component6, _concatInstanceProperty(_context18 = [this]).call(_context18, args)) || this;
|
|
348
|
+
_this6.listRef = null;
|
|
349
|
+
_this6.BubbleList = BubbleList;
|
|
350
|
+
return _this6;
|
|
351
|
+
}
|
|
352
|
+
Demo.defaults = function defaults() {
|
|
353
|
+
var _context19;
|
|
354
|
+
return {
|
|
355
|
+
items: _mapInstanceProperty(_context19 = _Array$from({
|
|
356
|
+
length: 8
|
|
357
|
+
})).call(_context19, function (_, index) {
|
|
358
|
+
return {
|
|
359
|
+
key: index,
|
|
360
|
+
content: "history-" + index
|
|
361
|
+
};
|
|
362
|
+
})
|
|
363
|
+
};
|
|
364
|
+
};
|
|
365
|
+
return Demo;
|
|
366
|
+
}(Component);
|
|
367
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 160px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"history-row\" style=\"height: 40px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
368
|
+
_mount6 = mount(Demo), instance = _mount6[0], element = _mount6[1];
|
|
369
|
+
_context21.next = 5;
|
|
370
|
+
return wait(80);
|
|
371
|
+
case 5:
|
|
372
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
373
|
+
scrollBox.scrollTop = 40;
|
|
374
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
375
|
+
_context21.next = 10;
|
|
376
|
+
return wait(30);
|
|
377
|
+
case 10:
|
|
378
|
+
prevScrollTop = scrollBox.scrollTop;
|
|
379
|
+
instance.set('items', _concatInstanceProperty(_context20 = [{
|
|
380
|
+
key: -2,
|
|
381
|
+
content: 'history--2'
|
|
382
|
+
}, {
|
|
383
|
+
key: -1,
|
|
384
|
+
content: 'history--1'
|
|
385
|
+
}]).call(_context20, instance.get('items')));
|
|
386
|
+
_context21.next = 14;
|
|
387
|
+
return wait(120);
|
|
388
|
+
case 14:
|
|
389
|
+
expect(scrollBox.scrollTop).to.be.greaterThan(prevScrollTop + 40);
|
|
390
|
+
case 15:
|
|
391
|
+
case "end":
|
|
392
|
+
return _context21.stop();
|
|
393
|
+
}
|
|
394
|
+
}, _callee6);
|
|
395
|
+
})));
|
|
396
|
+
it('should keep existing item dom nodes stable when prepending history without explicit keys', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
|
|
397
|
+
var _context23;
|
|
398
|
+
var Demo, _mount7, instance, element, initialRows, firstExistingRow, secondExistingRow, currentItems, rowsAfterPrepend;
|
|
399
|
+
return _regeneratorRuntime.wrap(function _callee7$(_context24) {
|
|
400
|
+
while (1) switch (_context24.prev = _context24.next) {
|
|
401
|
+
case 0:
|
|
402
|
+
Demo = /*#__PURE__*/function (_Component7) {
|
|
403
|
+
_inheritsLoose(Demo, _Component7);
|
|
404
|
+
function Demo() {
|
|
405
|
+
var _context22;
|
|
406
|
+
var _this7;
|
|
407
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
|
408
|
+
args[_key7] = arguments[_key7];
|
|
409
|
+
}
|
|
410
|
+
_this7 = _Component7.call.apply(_Component7, _concatInstanceProperty(_context22 = [this]).call(_context22, args)) || this;
|
|
411
|
+
_this7.BubbleList = BubbleList;
|
|
412
|
+
return _this7;
|
|
413
|
+
}
|
|
414
|
+
Demo.defaults = function defaults() {
|
|
415
|
+
return {
|
|
416
|
+
items: [{
|
|
417
|
+
content: 'row-1'
|
|
418
|
+
}, {
|
|
419
|
+
content: 'row-2'
|
|
420
|
+
}, {
|
|
421
|
+
content: 'row-3'
|
|
422
|
+
}]
|
|
423
|
+
};
|
|
424
|
+
};
|
|
425
|
+
return Demo;
|
|
426
|
+
}(Component);
|
|
427
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 180px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"fallback-key-row\" style=\"height: 40px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
428
|
+
_mount7 = mount(Demo), instance = _mount7[0], element = _mount7[1];
|
|
429
|
+
_context24.next = 5;
|
|
430
|
+
return wait(80);
|
|
431
|
+
case 5:
|
|
432
|
+
initialRows = element.querySelectorAll('.fallback-key-row');
|
|
433
|
+
firstExistingRow = initialRows[0];
|
|
434
|
+
secondExistingRow = initialRows[1];
|
|
435
|
+
currentItems = instance.get('items');
|
|
436
|
+
instance.set('items', _concatInstanceProperty(_context23 = [{
|
|
437
|
+
content: 'history-a'
|
|
438
|
+
}, {
|
|
439
|
+
content: 'history-b'
|
|
440
|
+
}]).call(_context23, currentItems));
|
|
441
|
+
_context24.next = 12;
|
|
442
|
+
return wait(80);
|
|
443
|
+
case 12:
|
|
444
|
+
rowsAfterPrepend = element.querySelectorAll('.fallback-key-row');
|
|
445
|
+
expect(rowsAfterPrepend[2]).to.eql(firstExistingRow);
|
|
446
|
+
expect(rowsAfterPrepend[3]).to.eql(secondExistingRow);
|
|
447
|
+
expect(rowsAfterPrepend[2].textContent).to.eql('row-1');
|
|
448
|
+
expect(rowsAfterPrepend[3].textContent).to.eql('row-2');
|
|
449
|
+
case 17:
|
|
450
|
+
case "end":
|
|
451
|
+
return _context24.stop();
|
|
452
|
+
}
|
|
453
|
+
}, _callee7);
|
|
454
|
+
})));
|
|
455
|
+
it('should limit the root height when maxHeight is set', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee8() {
|
|
456
|
+
var Demo, _mount8, element, root, scrollBox;
|
|
457
|
+
return _regeneratorRuntime.wrap(function _callee8$(_context27) {
|
|
458
|
+
while (1) switch (_context27.prev = _context27.next) {
|
|
459
|
+
case 0:
|
|
460
|
+
Demo = /*#__PURE__*/function (_Component8) {
|
|
461
|
+
_inheritsLoose(Demo, _Component8);
|
|
462
|
+
function Demo() {
|
|
463
|
+
var _context25;
|
|
464
|
+
var _this8;
|
|
465
|
+
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
|
466
|
+
args[_key8] = arguments[_key8];
|
|
467
|
+
}
|
|
468
|
+
_this8 = _Component8.call.apply(_Component8, _concatInstanceProperty(_context25 = [this]).call(_context25, args)) || this;
|
|
469
|
+
_this8.BubbleList = BubbleList;
|
|
470
|
+
return _this8;
|
|
471
|
+
}
|
|
472
|
+
Demo.defaults = function defaults() {
|
|
473
|
+
var _context26;
|
|
474
|
+
return {
|
|
475
|
+
roles: {
|
|
476
|
+
ai: {
|
|
477
|
+
placement: 'start',
|
|
478
|
+
avatar: true,
|
|
479
|
+
roleName: 'AI'
|
|
480
|
+
},
|
|
481
|
+
user: {
|
|
482
|
+
placement: 'end',
|
|
483
|
+
avatar: true,
|
|
484
|
+
roleName: 'Me',
|
|
485
|
+
variant: 'outlined'
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
items: _mapInstanceProperty(_context26 = _Array$from({
|
|
489
|
+
length: 12
|
|
490
|
+
})).call(_context26, function (_, index) {
|
|
491
|
+
return {
|
|
492
|
+
key: index + 1,
|
|
493
|
+
role: index % 2 ? 'user' : 'ai',
|
|
494
|
+
content: "row-" + (index + 1)
|
|
495
|
+
};
|
|
496
|
+
})
|
|
497
|
+
};
|
|
498
|
+
};
|
|
499
|
+
return Demo;
|
|
500
|
+
}(Component);
|
|
501
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"border: 1px solid transparent;\"\n maxHeight={180}\n items={this.get('items')}\n roles={this.get('roles')}\n />\n ";
|
|
502
|
+
_mount8 = mount(Demo), element = _mount8[1];
|
|
503
|
+
_context27.next = 5;
|
|
504
|
+
return wait(80);
|
|
505
|
+
case 5:
|
|
506
|
+
root = element;
|
|
507
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
508
|
+
expect(root.getBoundingClientRect().height).to.be.lessThan(181);
|
|
509
|
+
expect(scrollBox.scrollHeight).to.be.greaterThan(scrollBox.clientHeight);
|
|
510
|
+
case 9:
|
|
511
|
+
case "end":
|
|
512
|
+
return _context27.stop();
|
|
513
|
+
}
|
|
514
|
+
}, _callee8);
|
|
515
|
+
})));
|
|
516
|
+
it('should scroll correctly when using a custom item slot', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee9() {
|
|
517
|
+
var Demo, _mount9, instance, element, scrollBox, targetRow, scrollBoxRect, targetRect;
|
|
518
|
+
return _regeneratorRuntime.wrap(function _callee9$(_context30) {
|
|
519
|
+
while (1) switch (_context30.prev = _context30.next) {
|
|
520
|
+
case 0:
|
|
521
|
+
Demo = /*#__PURE__*/function (_Component9) {
|
|
522
|
+
_inheritsLoose(Demo, _Component9);
|
|
523
|
+
function Demo() {
|
|
524
|
+
var _context28;
|
|
525
|
+
var _this9;
|
|
526
|
+
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
|
|
527
|
+
args[_key9] = arguments[_key9];
|
|
528
|
+
}
|
|
529
|
+
_this9 = _Component9.call.apply(_Component9, _concatInstanceProperty(_context28 = [this]).call(_context28, args)) || this;
|
|
530
|
+
_this9.listRef = null;
|
|
531
|
+
_this9.BubbleList = BubbleList;
|
|
532
|
+
return _this9;
|
|
533
|
+
}
|
|
534
|
+
Demo.defaults = function defaults() {
|
|
535
|
+
var _context29;
|
|
536
|
+
return {
|
|
537
|
+
items: _mapInstanceProperty(_context29 = _Array$from({
|
|
538
|
+
length: 12
|
|
539
|
+
})).call(_context29, function (_, index) {
|
|
540
|
+
return {
|
|
541
|
+
key: index + 1,
|
|
542
|
+
content: "row-" + (index + 1)
|
|
543
|
+
};
|
|
544
|
+
})
|
|
545
|
+
};
|
|
546
|
+
};
|
|
547
|
+
return Demo;
|
|
548
|
+
}(Component);
|
|
549
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 180px;\"\n items={this.get('items')}\n >\n <b:item args=\"scope\">\n <div class=\"custom-item-shell\" style=\"height: 48px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
550
|
+
_mount9 = mount(Demo), instance = _mount9[0], element = _mount9[1];
|
|
551
|
+
_context30.next = 5;
|
|
552
|
+
return wait(80);
|
|
553
|
+
case 5:
|
|
554
|
+
instance.listRef.scrollToKey(6, 'auto');
|
|
555
|
+
_context30.next = 8;
|
|
556
|
+
return wait(30);
|
|
557
|
+
case 8:
|
|
558
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
559
|
+
targetRow = element.querySelectorAll('.custom-item-shell')[5];
|
|
560
|
+
scrollBoxRect = scrollBox.getBoundingClientRect();
|
|
561
|
+
targetRect = targetRow.getBoundingClientRect();
|
|
562
|
+
expect(Math.abs(targetRect.top - scrollBoxRect.top)).to.be.lessThan(4);
|
|
563
|
+
case 13:
|
|
564
|
+
case "end":
|
|
565
|
+
return _context30.stop();
|
|
566
|
+
}
|
|
567
|
+
}, _callee9);
|
|
568
|
+
})));
|
|
569
|
+
it('should scroll the target item near the top when calling scrollToKey', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee10() {
|
|
570
|
+
var Demo, _mount10, instance, element, scrollBox, targetRow, scrollBoxRect, targetRect;
|
|
571
|
+
return _regeneratorRuntime.wrap(function _callee10$(_context33) {
|
|
572
|
+
while (1) switch (_context33.prev = _context33.next) {
|
|
573
|
+
case 0:
|
|
574
|
+
Demo = /*#__PURE__*/function (_Component10) {
|
|
575
|
+
_inheritsLoose(Demo, _Component10);
|
|
576
|
+
function Demo() {
|
|
577
|
+
var _context31;
|
|
578
|
+
var _this10;
|
|
579
|
+
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
|
580
|
+
args[_key10] = arguments[_key10];
|
|
581
|
+
}
|
|
582
|
+
_this10 = _Component10.call.apply(_Component10, _concatInstanceProperty(_context31 = [this]).call(_context31, args)) || this;
|
|
583
|
+
_this10.listRef = null;
|
|
584
|
+
_this10.BubbleList = BubbleList;
|
|
585
|
+
return _this10;
|
|
586
|
+
}
|
|
587
|
+
Demo.defaults = function defaults() {
|
|
588
|
+
var _context32;
|
|
589
|
+
return {
|
|
590
|
+
roles: {
|
|
591
|
+
ai: {
|
|
592
|
+
placement: 'start',
|
|
593
|
+
avatar: true,
|
|
594
|
+
roleName: 'AI'
|
|
595
|
+
},
|
|
596
|
+
user: {
|
|
597
|
+
placement: 'end',
|
|
598
|
+
avatar: true,
|
|
599
|
+
roleName: 'Me',
|
|
600
|
+
variant: 'outlined'
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
items: _mapInstanceProperty(_context32 = _Array$from({
|
|
604
|
+
length: 12
|
|
605
|
+
})).call(_context32, function (_, index) {
|
|
606
|
+
return {
|
|
607
|
+
key: index + 1,
|
|
608
|
+
role: index % 2 ? 'user' : 'ai',
|
|
609
|
+
content: "row-" + (index + 1)
|
|
610
|
+
};
|
|
611
|
+
})
|
|
612
|
+
};
|
|
613
|
+
};
|
|
614
|
+
return Demo;
|
|
615
|
+
}(Component);
|
|
616
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 180px;\"\n items={this.get('items')}\n roles={this.get('roles')}\n />\n ";
|
|
617
|
+
_mount10 = mount(Demo), instance = _mount10[0], element = _mount10[1];
|
|
618
|
+
_context33.next = 5;
|
|
619
|
+
return wait(80);
|
|
620
|
+
case 5:
|
|
621
|
+
instance.listRef.scrollToKey(6, 'auto');
|
|
622
|
+
_context33.next = 8;
|
|
623
|
+
return wait(30);
|
|
624
|
+
case 8:
|
|
625
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
626
|
+
targetRow = element.querySelectorAll('.k-bubble-list-item')[5];
|
|
627
|
+
scrollBoxRect = scrollBox.getBoundingClientRect();
|
|
628
|
+
targetRect = targetRow.getBoundingClientRect();
|
|
629
|
+
expect(Math.abs(targetRect.top - scrollBoxRect.top)).to.be.lessThan(4);
|
|
630
|
+
case 13:
|
|
631
|
+
case "end":
|
|
632
|
+
return _context33.stop();
|
|
633
|
+
}
|
|
634
|
+
}, _callee10);
|
|
635
|
+
})));
|
|
636
|
+
it('should support resolving keys from itemKey function when scrolling to a message', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11() {
|
|
637
|
+
var Demo, _mount11, instance, element, scrollBox, targetRow, scrollBoxRect, targetRect;
|
|
638
|
+
return _regeneratorRuntime.wrap(function _callee11$(_context36) {
|
|
639
|
+
while (1) switch (_context36.prev = _context36.next) {
|
|
640
|
+
case 0:
|
|
641
|
+
Demo = /*#__PURE__*/function (_Component11) {
|
|
642
|
+
_inheritsLoose(Demo, _Component11);
|
|
643
|
+
function Demo() {
|
|
644
|
+
var _context34;
|
|
645
|
+
var _this11;
|
|
646
|
+
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
|
647
|
+
args[_key11] = arguments[_key11];
|
|
648
|
+
}
|
|
649
|
+
_this11 = _Component11.call.apply(_Component11, _concatInstanceProperty(_context34 = [this]).call(_context34, args)) || this;
|
|
650
|
+
_this11.listRef = null;
|
|
651
|
+
_this11.BubbleList = BubbleList;
|
|
652
|
+
return _this11;
|
|
653
|
+
}
|
|
654
|
+
Demo.defaults = function defaults() {
|
|
655
|
+
var _context35;
|
|
656
|
+
return {
|
|
657
|
+
roles: {
|
|
658
|
+
ai: {
|
|
659
|
+
placement: 'start',
|
|
660
|
+
avatar: true,
|
|
661
|
+
roleName: 'AI'
|
|
662
|
+
},
|
|
663
|
+
user: {
|
|
664
|
+
placement: 'end',
|
|
665
|
+
avatar: true,
|
|
666
|
+
roleName: 'Me',
|
|
667
|
+
variant: 'outlined'
|
|
668
|
+
}
|
|
669
|
+
},
|
|
670
|
+
items: _mapInstanceProperty(_context35 = _Array$from({
|
|
671
|
+
length: 12
|
|
672
|
+
})).call(_context35, function (_, index) {
|
|
673
|
+
return {
|
|
674
|
+
id: "msg-" + (index + 1),
|
|
675
|
+
role: index % 2 ? 'user' : 'ai',
|
|
676
|
+
content: "row-" + (index + 1)
|
|
677
|
+
};
|
|
678
|
+
})
|
|
679
|
+
};
|
|
680
|
+
};
|
|
681
|
+
return Demo;
|
|
682
|
+
}(Component);
|
|
683
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 180px;\"\n items={this.get('items')}\n itemKey={(item) => item.id}\n roles={this.get('roles')}\n />\n ";
|
|
684
|
+
_mount11 = mount(Demo), instance = _mount11[0], element = _mount11[1];
|
|
685
|
+
_context36.next = 5;
|
|
686
|
+
return wait(80);
|
|
687
|
+
case 5:
|
|
688
|
+
instance.listRef.scrollToKey('msg-6', 'auto');
|
|
689
|
+
_context36.next = 8;
|
|
690
|
+
return wait(30);
|
|
691
|
+
case 8:
|
|
692
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
693
|
+
targetRow = element.querySelectorAll('.k-bubble-list-item')[5];
|
|
694
|
+
scrollBoxRect = scrollBox.getBoundingClientRect();
|
|
695
|
+
targetRect = targetRow.getBoundingClientRect();
|
|
696
|
+
expect(Math.abs(targetRect.top - scrollBoxRect.top)).to.be.lessThan(4);
|
|
697
|
+
case 13:
|
|
698
|
+
case "end":
|
|
699
|
+
return _context36.stop();
|
|
700
|
+
}
|
|
701
|
+
}, _callee11);
|
|
702
|
+
})));
|
|
703
|
+
it('should keep per-item slot updates working when list boundaries change', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee12() {
|
|
704
|
+
var _context38, _context39, _context40;
|
|
705
|
+
var Demo, _mount12, instance, element;
|
|
706
|
+
return _regeneratorRuntime.wrap(function _callee12$(_context41) {
|
|
707
|
+
while (1) switch (_context41.prev = _context41.next) {
|
|
708
|
+
case 0:
|
|
709
|
+
Demo = /*#__PURE__*/function (_Component12) {
|
|
710
|
+
_inheritsLoose(Demo, _Component12);
|
|
711
|
+
function Demo() {
|
|
712
|
+
var _context37;
|
|
713
|
+
var _this12;
|
|
714
|
+
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
|
715
|
+
args[_key12] = arguments[_key12];
|
|
716
|
+
}
|
|
717
|
+
_this12 = _Component12.call.apply(_Component12, _concatInstanceProperty(_context37 = [this]).call(_context37, args)) || this;
|
|
718
|
+
_this12.BubbleList = BubbleList;
|
|
719
|
+
return _this12;
|
|
720
|
+
}
|
|
721
|
+
Demo.defaults = function defaults() {
|
|
722
|
+
return {
|
|
723
|
+
items: [{
|
|
724
|
+
key: 1,
|
|
725
|
+
content: 'first'
|
|
726
|
+
}, {
|
|
727
|
+
key: 2,
|
|
728
|
+
content: 'second'
|
|
729
|
+
}]
|
|
730
|
+
};
|
|
731
|
+
};
|
|
732
|
+
return Demo;
|
|
733
|
+
}(Component);
|
|
734
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList items={this.get('items')}>\n <b:footer args=\"scope\">\n <span class=\"last-flag\">{scope.item.key}:{scope.isLast ? 'last' : 'normal'}</span>\n </b:footer>\n </BubbleList>\n ";
|
|
735
|
+
_mount12 = mount(Demo), instance = _mount12[0], element = _mount12[1];
|
|
736
|
+
_context41.next = 5;
|
|
737
|
+
return wait(50);
|
|
738
|
+
case 5:
|
|
739
|
+
expect(_mapInstanceProperty(_context38 = _Array$from(element.querySelectorAll('.last-flag'))).call(_context38, function (item) {
|
|
740
|
+
return item.textContent;
|
|
741
|
+
})).to.eql(['1:normal', '2:last']);
|
|
742
|
+
instance.set('items', _concatInstanceProperty(_context39 = []).call(_context39, instance.get('items'), [{
|
|
743
|
+
key: 3,
|
|
744
|
+
content: 'third'
|
|
745
|
+
}]));
|
|
746
|
+
_context41.next = 9;
|
|
747
|
+
return wait(50);
|
|
748
|
+
case 9:
|
|
749
|
+
expect(_mapInstanceProperty(_context40 = _Array$from(element.querySelectorAll('.last-flag'))).call(_context40, function (item) {
|
|
750
|
+
return item.textContent;
|
|
751
|
+
})).to.eql(['1:normal', '2:normal', '3:last']);
|
|
752
|
+
case 10:
|
|
753
|
+
case "end":
|
|
754
|
+
return _context41.stop();
|
|
755
|
+
}
|
|
756
|
+
}, _callee12);
|
|
757
|
+
})));
|
|
758
|
+
it('should trigger loadHistory once when scrolling near the top', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee13() {
|
|
759
|
+
var Demo, _mount13, instance, element, scrollBox;
|
|
760
|
+
return _regeneratorRuntime.wrap(function _callee13$(_context44) {
|
|
761
|
+
while (1) switch (_context44.prev = _context44.next) {
|
|
762
|
+
case 0:
|
|
763
|
+
Demo = /*#__PURE__*/function (_Component13) {
|
|
764
|
+
_inheritsLoose(Demo, _Component13);
|
|
765
|
+
function Demo() {
|
|
766
|
+
var _context42;
|
|
767
|
+
var _this13;
|
|
768
|
+
for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
|
|
769
|
+
args[_key13] = arguments[_key13];
|
|
770
|
+
}
|
|
771
|
+
_this13 = _Component13.call.apply(_Component13, _concatInstanceProperty(_context42 = [this]).call(_context42, args)) || this;
|
|
772
|
+
_this13.BubbleList = BubbleList;
|
|
773
|
+
return _this13;
|
|
774
|
+
}
|
|
775
|
+
Demo.defaults = function defaults() {
|
|
776
|
+
var _context43;
|
|
777
|
+
return {
|
|
778
|
+
count: 0,
|
|
779
|
+
loadingHistory: false,
|
|
780
|
+
items: _mapInstanceProperty(_context43 = _Array$from({
|
|
781
|
+
length: 10
|
|
782
|
+
})).call(_context43, function (_, index) {
|
|
783
|
+
return {
|
|
784
|
+
key: index,
|
|
785
|
+
content: "history-" + index
|
|
786
|
+
};
|
|
787
|
+
})
|
|
788
|
+
};
|
|
789
|
+
};
|
|
790
|
+
return Demo;
|
|
791
|
+
}(Component);
|
|
792
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 180px;\"\n items={this.get('items')}\n hasMoreHistory={true}\n loadingHistory={this.get('loadingHistory')}\n ev-loadHistory={() => this.set({count: this.get('count') + 1, loadingHistory: true})}\n >\n <b:item args=\"scope\">\n <div style=\"height: 44px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
793
|
+
_mount13 = mount(Demo), instance = _mount13[0], element = _mount13[1];
|
|
794
|
+
_context44.next = 5;
|
|
795
|
+
return wait(80);
|
|
796
|
+
case 5:
|
|
797
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
798
|
+
scrollBox.scrollTop = 0;
|
|
799
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
800
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
801
|
+
_context44.next = 11;
|
|
802
|
+
return wait(40);
|
|
803
|
+
case 11:
|
|
804
|
+
expect(instance.get('count')).to.eql(1);
|
|
805
|
+
case 12:
|
|
806
|
+
case "end":
|
|
807
|
+
return _context44.stop();
|
|
808
|
+
}
|
|
809
|
+
}, _callee13);
|
|
810
|
+
})));
|
|
811
|
+
it('should show the default history loading text only while loadingHistory is true', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee14() {
|
|
812
|
+
var Demo, _mount14, instance, element;
|
|
813
|
+
return _regeneratorRuntime.wrap(function _callee14$(_context46) {
|
|
814
|
+
while (1) switch (_context46.prev = _context46.next) {
|
|
815
|
+
case 0:
|
|
816
|
+
Demo = /*#__PURE__*/function (_Component14) {
|
|
817
|
+
_inheritsLoose(Demo, _Component14);
|
|
818
|
+
function Demo() {
|
|
819
|
+
var _context45;
|
|
820
|
+
var _this14;
|
|
821
|
+
for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
|
|
822
|
+
args[_key14] = arguments[_key14];
|
|
823
|
+
}
|
|
824
|
+
_this14 = _Component14.call.apply(_Component14, _concatInstanceProperty(_context45 = [this]).call(_context45, args)) || this;
|
|
825
|
+
_this14.BubbleList = BubbleList;
|
|
826
|
+
return _this14;
|
|
827
|
+
}
|
|
828
|
+
Demo.defaults = function defaults() {
|
|
829
|
+
return {
|
|
830
|
+
loadingHistory: false,
|
|
831
|
+
items: [{
|
|
832
|
+
key: 1,
|
|
833
|
+
content: 'hello'
|
|
834
|
+
}]
|
|
835
|
+
};
|
|
836
|
+
};
|
|
837
|
+
return Demo;
|
|
838
|
+
}(Component);
|
|
839
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 180px;\"\n items={this.get('items')}\n loadingHistory={this.get('loadingHistory')}\n />\n ";
|
|
840
|
+
_mount14 = mount(Demo), instance = _mount14[0], element = _mount14[1];
|
|
841
|
+
_context46.next = 5;
|
|
842
|
+
return wait(50);
|
|
843
|
+
case 5:
|
|
844
|
+
expect(element.querySelector('.k-bubble-list-history')).to.be.null;
|
|
845
|
+
instance.set('loadingHistory', true);
|
|
846
|
+
_context46.next = 9;
|
|
847
|
+
return wait(50);
|
|
848
|
+
case 9:
|
|
849
|
+
expect(element.querySelector('.k-bubble-list-history span').textContent).to.eql('加载历史中...');
|
|
850
|
+
instance.set('loadingHistory', false);
|
|
851
|
+
_context46.next = 13;
|
|
852
|
+
return wait(50);
|
|
853
|
+
case 13:
|
|
854
|
+
expect(element.querySelector('.k-bubble-list-history')).to.be.null;
|
|
855
|
+
case 14:
|
|
856
|
+
case "end":
|
|
857
|
+
return _context46.stop();
|
|
858
|
+
}
|
|
859
|
+
}, _callee14);
|
|
860
|
+
})));
|
|
861
|
+
it('should warn only once when items are missing stable keys', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee15() {
|
|
862
|
+
var warn, spy, Demo;
|
|
863
|
+
return _regeneratorRuntime.wrap(function _callee15$(_context48) {
|
|
864
|
+
while (1) switch (_context48.prev = _context48.next) {
|
|
865
|
+
case 0:
|
|
866
|
+
warn = console.warn;
|
|
867
|
+
spy = sinon.spy();
|
|
868
|
+
console.warn = spy;
|
|
869
|
+
Demo = /*#__PURE__*/function (_Component15) {
|
|
870
|
+
_inheritsLoose(Demo, _Component15);
|
|
871
|
+
function Demo() {
|
|
872
|
+
var _context47;
|
|
873
|
+
var _this15;
|
|
874
|
+
for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
|
|
875
|
+
args[_key15] = arguments[_key15];
|
|
876
|
+
}
|
|
877
|
+
_this15 = _Component15.call.apply(_Component15, _concatInstanceProperty(_context47 = [this]).call(_context47, args)) || this;
|
|
878
|
+
_this15.BubbleList = BubbleList;
|
|
879
|
+
return _this15;
|
|
880
|
+
}
|
|
881
|
+
Demo.defaults = function defaults() {
|
|
882
|
+
return {
|
|
883
|
+
items: [{
|
|
884
|
+
content: 'a'
|
|
885
|
+
}, {
|
|
886
|
+
content: 'b'
|
|
887
|
+
}]
|
|
888
|
+
};
|
|
889
|
+
};
|
|
890
|
+
return Demo;
|
|
891
|
+
}(Component);
|
|
892
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList items={this.get('items')}>\n <b:item args=\"scope\">\n <div style=\"height: 40px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
893
|
+
_context48.prev = 5;
|
|
894
|
+
mount(Demo);
|
|
895
|
+
_context48.next = 9;
|
|
896
|
+
return wait(50);
|
|
897
|
+
case 9:
|
|
898
|
+
expect(spy.callCount).to.eql(1);
|
|
899
|
+
expect(spy.args[0][0]).to.contain('stable `key`');
|
|
900
|
+
case 11:
|
|
901
|
+
_context48.prev = 11;
|
|
902
|
+
console.warn = warn;
|
|
903
|
+
return _context48.finish(11);
|
|
904
|
+
case 14:
|
|
905
|
+
case "end":
|
|
906
|
+
return _context48.stop();
|
|
907
|
+
}
|
|
908
|
+
}, _callee15, null, [[5,, 11, 14]]);
|
|
909
|
+
})));
|
|
910
|
+
it('should render empty slot only when there are no items', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee16() {
|
|
911
|
+
var Demo, _mount15, instance, element;
|
|
912
|
+
return _regeneratorRuntime.wrap(function _callee16$(_context50) {
|
|
913
|
+
while (1) switch (_context50.prev = _context50.next) {
|
|
914
|
+
case 0:
|
|
915
|
+
Demo = /*#__PURE__*/function (_Component16) {
|
|
916
|
+
_inheritsLoose(Demo, _Component16);
|
|
917
|
+
function Demo() {
|
|
918
|
+
var _context49;
|
|
919
|
+
var _this16;
|
|
920
|
+
for (var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {
|
|
921
|
+
args[_key16] = arguments[_key16];
|
|
922
|
+
}
|
|
923
|
+
_this16 = _Component16.call.apply(_Component16, _concatInstanceProperty(_context49 = [this]).call(_context49, args)) || this;
|
|
924
|
+
_this16.BubbleList = BubbleList;
|
|
925
|
+
return _this16;
|
|
926
|
+
}
|
|
927
|
+
Demo.defaults = function defaults() {
|
|
928
|
+
return {
|
|
929
|
+
items: []
|
|
930
|
+
};
|
|
931
|
+
};
|
|
932
|
+
return Demo;
|
|
933
|
+
}(Component);
|
|
934
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n items={this.get('items')}\n >\n <b:empty>\n <div class=\"custom-empty\">empty</div>\n </b:empty>\n </BubbleList>\n ";
|
|
935
|
+
_mount15 = mount(Demo), instance = _mount15[0], element = _mount15[1];
|
|
936
|
+
_context50.next = 5;
|
|
937
|
+
return wait(50);
|
|
938
|
+
case 5:
|
|
939
|
+
expect(element.querySelector('.custom-empty').textContent).to.eql('empty');
|
|
940
|
+
instance.set('items', [{
|
|
941
|
+
key: 1,
|
|
942
|
+
content: 'hello'
|
|
943
|
+
}]);
|
|
944
|
+
_context50.next = 9;
|
|
945
|
+
return wait(50);
|
|
946
|
+
case 9:
|
|
947
|
+
expect(element.querySelector('.custom-empty')).to.be.null;
|
|
948
|
+
case 10:
|
|
949
|
+
case "end":
|
|
950
|
+
return _context50.stop();
|
|
951
|
+
}
|
|
952
|
+
}, _callee16);
|
|
953
|
+
})));
|
|
954
|
+
it('should keep custom historyLoading slot visible for final no-more-history text', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee17() {
|
|
955
|
+
var Demo, _mount16, element;
|
|
956
|
+
return _regeneratorRuntime.wrap(function _callee17$(_context52) {
|
|
957
|
+
while (1) switch (_context52.prev = _context52.next) {
|
|
958
|
+
case 0:
|
|
959
|
+
Demo = /*#__PURE__*/function (_Component17) {
|
|
960
|
+
_inheritsLoose(Demo, _Component17);
|
|
961
|
+
function Demo() {
|
|
962
|
+
var _context51;
|
|
963
|
+
var _this17;
|
|
964
|
+
for (var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {
|
|
965
|
+
args[_key17] = arguments[_key17];
|
|
966
|
+
}
|
|
967
|
+
_this17 = _Component17.call.apply(_Component17, _concatInstanceProperty(_context51 = [this]).call(_context51, args)) || this;
|
|
968
|
+
_this17.BubbleList = BubbleList;
|
|
969
|
+
return _this17;
|
|
970
|
+
}
|
|
971
|
+
Demo.defaults = function defaults() {
|
|
972
|
+
return {
|
|
973
|
+
items: [{
|
|
974
|
+
key: 1,
|
|
975
|
+
content: 'hello'
|
|
976
|
+
}]
|
|
977
|
+
};
|
|
978
|
+
};
|
|
979
|
+
return Demo;
|
|
980
|
+
}(Component);
|
|
981
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n style=\"height: 180px;\"\n items={this.get('items')}\n hasMoreHistory={false}\n loadingHistory={false}\n >\n <b:historyLoading args=\"scope\">\n <div class=\"history-status\">\n {scope.loadingHistory ? 'loading' : scope.hasMoreHistory ? 'more' : 'done'}\n </div>\n </b:historyLoading>\n </BubbleList>\n ";
|
|
982
|
+
_mount16 = mount(Demo), element = _mount16[1];
|
|
983
|
+
_context52.next = 5;
|
|
984
|
+
return wait(50);
|
|
985
|
+
case 5:
|
|
986
|
+
expect(element.querySelector('.history-status').textContent).to.eql('done');
|
|
987
|
+
case 6:
|
|
988
|
+
case "end":
|
|
989
|
+
return _context52.stop();
|
|
990
|
+
}
|
|
991
|
+
}, _callee17);
|
|
992
|
+
})));
|
|
993
|
+
it('should not render bubble wrappers for empty scoped slots', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee18() {
|
|
994
|
+
var Demo, _mount17, element;
|
|
995
|
+
return _regeneratorRuntime.wrap(function _callee18$(_context54) {
|
|
996
|
+
while (1) switch (_context54.prev = _context54.next) {
|
|
997
|
+
case 0:
|
|
998
|
+
Demo = /*#__PURE__*/function (_Component18) {
|
|
999
|
+
_inheritsLoose(Demo, _Component18);
|
|
1000
|
+
function Demo() {
|
|
1001
|
+
var _context53;
|
|
1002
|
+
var _this18;
|
|
1003
|
+
for (var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
|
|
1004
|
+
args[_key18] = arguments[_key18];
|
|
1005
|
+
}
|
|
1006
|
+
_this18 = _Component18.call.apply(_Component18, _concatInstanceProperty(_context53 = [this]).call(_context53, args)) || this;
|
|
1007
|
+
_this18.BubbleList = BubbleList;
|
|
1008
|
+
return _this18;
|
|
1009
|
+
}
|
|
1010
|
+
Demo.defaults = function defaults() {
|
|
1011
|
+
return {
|
|
1012
|
+
roles: {
|
|
1013
|
+
ai: {
|
|
1014
|
+
placement: 'start'
|
|
1015
|
+
}
|
|
1016
|
+
},
|
|
1017
|
+
items: [{
|
|
1018
|
+
key: 1,
|
|
1019
|
+
role: 'ai',
|
|
1020
|
+
content: '生成中',
|
|
1021
|
+
completed: false
|
|
1022
|
+
}, {
|
|
1023
|
+
key: 2,
|
|
1024
|
+
role: 'ai',
|
|
1025
|
+
content: '已完成',
|
|
1026
|
+
completed: true
|
|
1027
|
+
}]
|
|
1028
|
+
};
|
|
1029
|
+
};
|
|
1030
|
+
return Demo;
|
|
1031
|
+
}(Component);
|
|
1032
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n items={this.get('items')}\n roles={this.get('roles')}\n >\n <b:extra args=\"scope\">\n <span v-if={scope.item.completed} class=\"scoped-extra\">\u5DF2\u5B8C\u6210</span>\n </b:extra>\n </BubbleList>\n ";
|
|
1033
|
+
_mount17 = mount(Demo), element = _mount17[1];
|
|
1034
|
+
_context54.next = 5;
|
|
1035
|
+
return wait(50);
|
|
1036
|
+
case 5:
|
|
1037
|
+
expect(element.querySelectorAll('.k-bubble-extra').length).to.eql(1);
|
|
1038
|
+
expect(element.querySelector('.scoped-extra').textContent).to.eql('已完成');
|
|
1039
|
+
case 7:
|
|
1040
|
+
case "end":
|
|
1041
|
+
return _context54.stop();
|
|
1042
|
+
}
|
|
1043
|
+
}, _callee18);
|
|
1044
|
+
})));
|
|
1045
|
+
it('should not render wrappers for empty outer slots', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee19() {
|
|
1046
|
+
var Demo, _mount18, element;
|
|
1047
|
+
return _regeneratorRuntime.wrap(function _callee19$(_context56) {
|
|
1048
|
+
while (1) switch (_context56.prev = _context56.next) {
|
|
1049
|
+
case 0:
|
|
1050
|
+
Demo = /*#__PURE__*/function (_Component19) {
|
|
1051
|
+
_inheritsLoose(Demo, _Component19);
|
|
1052
|
+
function Demo() {
|
|
1053
|
+
var _context55;
|
|
1054
|
+
var _this19;
|
|
1055
|
+
for (var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {
|
|
1056
|
+
args[_key19] = arguments[_key19];
|
|
1057
|
+
}
|
|
1058
|
+
_this19 = _Component19.call.apply(_Component19, _concatInstanceProperty(_context55 = [this]).call(_context55, args)) || this;
|
|
1059
|
+
_this19.BubbleList = BubbleList;
|
|
1060
|
+
return _this19;
|
|
1061
|
+
}
|
|
1062
|
+
Demo.defaults = function defaults() {
|
|
1063
|
+
return {
|
|
1064
|
+
items: [{
|
|
1065
|
+
key: 1,
|
|
1066
|
+
content: 'hello'
|
|
1067
|
+
}]
|
|
1068
|
+
};
|
|
1069
|
+
};
|
|
1070
|
+
return Demo;
|
|
1071
|
+
}(Component);
|
|
1072
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n items={this.get('items')}\n loadingHistory={true}\n >\n <b:header>\n <span v-if={false} class=\"empty-header\">header</span>\n </b:header>\n <b:historyLoading>\n <span v-if={false} class=\"empty-history\">history</span>\n </b:historyLoading>\n <b:listFooter>\n <span v-if={false} class=\"empty-footer\">footer</span>\n </b:listFooter>\n </BubbleList>\n ";
|
|
1073
|
+
_mount18 = mount(Demo), element = _mount18[1];
|
|
1074
|
+
_context56.next = 5;
|
|
1075
|
+
return wait(50);
|
|
1076
|
+
case 5:
|
|
1077
|
+
expect(element.querySelector('.k-bubble-list-header')).to.eql(null);
|
|
1078
|
+
expect(element.querySelector('.k-bubble-list-history')).to.eql(null);
|
|
1079
|
+
expect(element.querySelector('.k-bubble-list-footer')).to.eql(null);
|
|
1080
|
+
expect(element.querySelector('.k-bubble')).not.to.eql(null);
|
|
1081
|
+
case 9:
|
|
1082
|
+
case "end":
|
|
1083
|
+
return _context56.stop();
|
|
1084
|
+
}
|
|
1085
|
+
}, _callee19);
|
|
1086
|
+
})));
|
|
1087
|
+
it('should not render empty wrapper when empty slot is empty', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee20() {
|
|
1088
|
+
var Demo, _mount19, element;
|
|
1089
|
+
return _regeneratorRuntime.wrap(function _callee20$(_context58) {
|
|
1090
|
+
while (1) switch (_context58.prev = _context58.next) {
|
|
1091
|
+
case 0:
|
|
1092
|
+
Demo = /*#__PURE__*/function (_Component20) {
|
|
1093
|
+
_inheritsLoose(Demo, _Component20);
|
|
1094
|
+
function Demo() {
|
|
1095
|
+
var _context57;
|
|
1096
|
+
var _this20;
|
|
1097
|
+
for (var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
|
|
1098
|
+
args[_key20] = arguments[_key20];
|
|
1099
|
+
}
|
|
1100
|
+
_this20 = _Component20.call.apply(_Component20, _concatInstanceProperty(_context57 = [this]).call(_context57, args)) || this;
|
|
1101
|
+
_this20.BubbleList = BubbleList;
|
|
1102
|
+
return _this20;
|
|
1103
|
+
}
|
|
1104
|
+
return Demo;
|
|
1105
|
+
}(Component);
|
|
1106
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList items={[]}>\n <b:empty>\n <span v-if={false} class=\"empty-content\">empty</span>\n </b:empty>\n </BubbleList>\n ";
|
|
1107
|
+
_mount19 = mount(Demo), element = _mount19[1];
|
|
1108
|
+
_context58.next = 5;
|
|
1109
|
+
return wait(50);
|
|
1110
|
+
case 5:
|
|
1111
|
+
expect(element.querySelector('.k-bubble-list-empty')).to.eql(null);
|
|
1112
|
+
expect(element.querySelector('.k-bubble-list-items')).not.to.eql(null);
|
|
1113
|
+
case 7:
|
|
1114
|
+
case "end":
|
|
1115
|
+
return _context58.stop();
|
|
1116
|
+
}
|
|
1117
|
+
}, _callee20);
|
|
1118
|
+
})));
|
|
1119
|
+
it('should emit scroll state events and honor showScrollToBottom=false', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee21() {
|
|
1120
|
+
var _context61, _context62;
|
|
1121
|
+
var Demo, _mount20, instance, element, scrollBox;
|
|
1122
|
+
return _regeneratorRuntime.wrap(function _callee21$(_context63) {
|
|
1123
|
+
while (1) switch (_context63.prev = _context63.next) {
|
|
1124
|
+
case 0:
|
|
1125
|
+
Demo = /*#__PURE__*/function (_Component21) {
|
|
1126
|
+
_inheritsLoose(Demo, _Component21);
|
|
1127
|
+
function Demo() {
|
|
1128
|
+
var _context59;
|
|
1129
|
+
var _this21;
|
|
1130
|
+
for (var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
|
|
1131
|
+
args[_key21] = arguments[_key21];
|
|
1132
|
+
}
|
|
1133
|
+
_this21 = _Component21.call.apply(_Component21, _concatInstanceProperty(_context59 = [this]).call(_context59, args)) || this;
|
|
1134
|
+
_this21.listRef = null;
|
|
1135
|
+
_this21.BubbleList = BubbleList;
|
|
1136
|
+
return _this21;
|
|
1137
|
+
}
|
|
1138
|
+
Demo.defaults = function defaults() {
|
|
1139
|
+
var _context60;
|
|
1140
|
+
return {
|
|
1141
|
+
scrollCount: 0,
|
|
1142
|
+
bottomStates: [],
|
|
1143
|
+
autoStates: [],
|
|
1144
|
+
items: _mapInstanceProperty(_context60 = _Array$from({
|
|
1145
|
+
length: 12
|
|
1146
|
+
})).call(_context60, function (_, index) {
|
|
1147
|
+
return {
|
|
1148
|
+
key: index,
|
|
1149
|
+
content: "row-" + index
|
|
1150
|
+
};
|
|
1151
|
+
})
|
|
1152
|
+
};
|
|
1153
|
+
};
|
|
1154
|
+
return Demo;
|
|
1155
|
+
}(Component);
|
|
1156
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n ref={(i) => this.listRef = i}\n style=\"height: 180px;\"\n items={this.get('items')}\n showScrollToBottom={false}\n ev-scroll={() => this.set('scrollCount', this.get('scrollCount') + 1)}\n ev-scrollBottomChange={(value) => this.set('bottomStates', [...this.get('bottomStates'), value])}\n ev-autoScrollChange={(value) => this.set('autoStates', [...this.get('autoStates'), value])}\n >\n <b:item args=\"scope\">\n <div style=\"height: 44px;\">{scope.item.content}</div>\n </b:item>\n </BubbleList>\n ";
|
|
1157
|
+
_mount20 = mount(Demo), instance = _mount20[0], element = _mount20[1];
|
|
1158
|
+
_context63.next = 5;
|
|
1159
|
+
return wait(80);
|
|
1160
|
+
case 5:
|
|
1161
|
+
instance.set({
|
|
1162
|
+
scrollCount: 0,
|
|
1163
|
+
bottomStates: [],
|
|
1164
|
+
autoStates: []
|
|
1165
|
+
});
|
|
1166
|
+
scrollBox = element.querySelector('.k-bubble-list-scroll');
|
|
1167
|
+
scrollBox.scrollTop = 40;
|
|
1168
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
1169
|
+
dispatchEvent(scrollBox, 'scroll');
|
|
1170
|
+
_context63.next = 12;
|
|
1171
|
+
return wait(40);
|
|
1172
|
+
case 12:
|
|
1173
|
+
_atInstanceProperty(expect(instance.get('scrollCount')).to.be).least(2);
|
|
1174
|
+
expect(instance.get('bottomStates')).to.eql([false]);
|
|
1175
|
+
expect(instance.get('autoStates')).to.eql([false]);
|
|
1176
|
+
expect(element.querySelector('.k-bubble-list-scroll-to-bottom')).to.be.null;
|
|
1177
|
+
instance.listRef.scrollToBottom('auto');
|
|
1178
|
+
_context63.next = 19;
|
|
1179
|
+
return wait(50);
|
|
1180
|
+
case 19:
|
|
1181
|
+
expect(_sliceInstanceProperty(_context61 = instance.get('bottomStates')).call(_context61, -1)[0]).to.eql(true);
|
|
1182
|
+
expect(_sliceInstanceProperty(_context62 = instance.get('autoStates')).call(_context62, -1)[0]).to.eql(true);
|
|
1183
|
+
expect(instance.listRef.isAtBottom()).to.be.true;
|
|
1184
|
+
expect(element.querySelector('.k-bubble-list-scroll-to-bottom')).to.be.null;
|
|
1185
|
+
case 23:
|
|
1186
|
+
case "end":
|
|
1187
|
+
return _context63.stop();
|
|
1188
|
+
}
|
|
1189
|
+
}, _callee21);
|
|
1190
|
+
})));
|
|
1191
|
+
it('should forward typing events to role handlers and component events', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee22() {
|
|
1192
|
+
var roleTypingPayload, roleTypingCompletePayload, Demo, _mount21, instance;
|
|
1193
|
+
return _regeneratorRuntime.wrap(function _callee22$(_context65) {
|
|
1194
|
+
while (1) switch (_context65.prev = _context65.next) {
|
|
1195
|
+
case 0:
|
|
1196
|
+
roleTypingPayload = null;
|
|
1197
|
+
roleTypingCompletePayload = null;
|
|
1198
|
+
Demo = /*#__PURE__*/function (_Component22) {
|
|
1199
|
+
_inheritsLoose(Demo, _Component22);
|
|
1200
|
+
function Demo() {
|
|
1201
|
+
var _context64;
|
|
1202
|
+
var _this22;
|
|
1203
|
+
for (var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
|
|
1204
|
+
args[_key22] = arguments[_key22];
|
|
1205
|
+
}
|
|
1206
|
+
_this22 = _Component22.call.apply(_Component22, _concatInstanceProperty(_context64 = [this]).call(_context64, args)) || this;
|
|
1207
|
+
_this22.BubbleList = BubbleList;
|
|
1208
|
+
return _this22;
|
|
1209
|
+
}
|
|
1210
|
+
Demo.defaults = function defaults() {
|
|
1211
|
+
return {
|
|
1212
|
+
typingCount: 0,
|
|
1213
|
+
completeCount: 0,
|
|
1214
|
+
completedContent: '',
|
|
1215
|
+
roles: {
|
|
1216
|
+
ai: {
|
|
1217
|
+
placement: 'start',
|
|
1218
|
+
onTyping: function onTyping(renderedContent, currentContent, item, index) {
|
|
1219
|
+
roleTypingPayload = {
|
|
1220
|
+
renderedContent: renderedContent,
|
|
1221
|
+
currentContent: currentContent,
|
|
1222
|
+
item: item,
|
|
1223
|
+
index: index
|
|
1224
|
+
};
|
|
1225
|
+
},
|
|
1226
|
+
onTypingComplete: function onTypingComplete(content, item, index) {
|
|
1227
|
+
roleTypingCompletePayload = {
|
|
1228
|
+
content: content,
|
|
1229
|
+
item: item,
|
|
1230
|
+
index: index
|
|
1231
|
+
};
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
items: [{
|
|
1236
|
+
key: 1,
|
|
1237
|
+
role: 'ai',
|
|
1238
|
+
content: 'abcd',
|
|
1239
|
+
typing: {
|
|
1240
|
+
interval: 16,
|
|
1241
|
+
step: 1
|
|
1242
|
+
}
|
|
1243
|
+
}]
|
|
1244
|
+
};
|
|
1245
|
+
};
|
|
1246
|
+
return Demo;
|
|
1247
|
+
}(Component);
|
|
1248
|
+
Demo.template = "\n const { BubbleList } = this;\n <BubbleList\n items={this.get('items')}\n roles={this.get('roles')}\n ev-typing={() => this.set('typingCount', this.get('typingCount') + 1)}\n ev-typingComplete={(item, content) => this.set({\n completeCount: this.get('completeCount') + 1,\n completedContent: item.key + ':' + content,\n })}\n />\n ";
|
|
1249
|
+
_mount21 = mount(Demo), instance = _mount21[0];
|
|
1250
|
+
_context65.next = 7;
|
|
1251
|
+
return wait(120);
|
|
1252
|
+
case 7:
|
|
1253
|
+
expect(instance.get('typingCount')).to.be.greaterThan(0);
|
|
1254
|
+
expect(instance.get('completeCount')).to.eql(1);
|
|
1255
|
+
expect(instance.get('completedContent')).to.eql('1:abcd');
|
|
1256
|
+
expect(roleTypingPayload.currentContent).to.eql('abcd');
|
|
1257
|
+
expect(roleTypingPayload.item.key).to.eql(1);
|
|
1258
|
+
expect(roleTypingPayload.index).to.eql(0);
|
|
1259
|
+
expect(roleTypingCompletePayload.content).to.eql('abcd');
|
|
1260
|
+
expect(roleTypingCompletePayload.item.key).to.eql(1);
|
|
1261
|
+
expect(roleTypingCompletePayload.index).to.eql(0);
|
|
1262
|
+
case 16:
|
|
1263
|
+
case "end":
|
|
1264
|
+
return _context65.stop();
|
|
1265
|
+
}
|
|
1266
|
+
}, _callee22);
|
|
1267
|
+
})));
|
|
1268
|
+
});
|