askbot-dragon 1.6.80-beta → 1.6.82-beta

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.
Files changed (101) hide show
  1. package/README.md +27 -27
  2. package/babel.config.js +6 -6
  3. package/dragon.iml +7 -7
  4. package/package.json +55 -55
  5. package/public/index.html +72 -72
  6. package/src/App.vue +31 -31
  7. package/src/api/index.js +1 -1
  8. package/src/api/mock.http +2 -2
  9. package/src/api/requestUrl.js +185 -185
  10. package/src/assets/image/default_avt_ui.png +0 -0
  11. package/src/assets/image/filtType/audio.png +0 -0
  12. package/src/assets/image/filtType/excel1.png +0 -0
  13. package/src/assets/image/filtType/general.png +0 -0
  14. package/src/assets/image/filtType/image1.png +0 -0
  15. package/src/assets/image/filtType/link.png +0 -0
  16. package/src/assets/image/filtType/md2.png +0 -0
  17. package/src/assets/image/filtType/mode.png +0 -0
  18. package/src/assets/image/filtType/news.png +0 -0
  19. package/src/assets/image/filtType/pdf1.png +0 -0
  20. package/src/assets/image/filtType/ppt1.png +0 -0
  21. package/src/assets/image/filtType/selfadd1.png +0 -0
  22. package/src/assets/image/filtType/txt1.png +0 -0
  23. package/src/assets/image/filtType/video.png +0 -0
  24. package/src/assets/image/filtType/wechat.png +0 -0
  25. package/src/assets/image/filtType/word1.png +0 -0
  26. package/src/assets/image/loading.gif +0 -0
  27. package/src/assets/js/AliyunlssUtil.js +92 -92
  28. package/src/assets/js/Base64Util.js +22 -22
  29. package/src/assets/js/common.js +252 -252
  30. package/src/assets/js/hammer.js +89 -100
  31. package/src/assets/js/script.js +36 -36
  32. package/src/assets/less/common.css +6773 -6773
  33. package/src/assets/less/converSationContainer/common.less +192 -199
  34. package/src/assets/less/converSationContainer/converSatonContainer.less +493 -493
  35. package/src/assets/less/iconfont.css +37 -37
  36. package/src/assets/less/ticketMessage.less +294 -294
  37. package/src/components/ActionAlertIframe.vue +154 -177
  38. package/src/components/AiGuide.vue +468 -466
  39. package/src/components/AnswerDocknowledge.vue +1068 -1061
  40. package/src/components/AnswerVoice.vue +285 -285
  41. package/src/components/AskIFrame.vue +15 -15
  42. package/src/components/ConversationContainer.vue +5140 -4934
  43. package/src/components/FileType.vue +86 -86
  44. package/src/components/Message.vue +27 -27
  45. package/src/components/MyEditor.vue +350 -351
  46. package/src/components/actionSatisfaction.vue +107 -107
  47. package/src/components/actionSendToBot.vue +62 -62
  48. package/src/components/answerDissatisfaction.vue +62 -62
  49. package/src/components/answerRadio.vue +186 -186
  50. package/src/components/ask-components/DissatisfactionOptions.vue +57 -57
  51. package/src/components/ask-components/Msgloading.vue +37 -37
  52. package/src/components/ask-components/SatisfactionV2.vue +15 -15
  53. package/src/components/askVideo.vue +139 -162
  54. package/src/components/assetDetails.vue +378 -378
  55. package/src/components/assetMessage.vue +228 -228
  56. package/src/components/associationIntention.vue +374 -355
  57. package/src/components/attachmentPreview.vue +90 -90
  58. package/src/components/botActionSatisfactor.vue +68 -68
  59. package/src/components/chatContent.vue +513 -513
  60. package/src/components/feedBack.vue +136 -136
  61. package/src/components/fielListView.vue +351 -351
  62. package/src/components/file/AliyunOssComponents.vue +108 -108
  63. package/src/components/formTemplate.vue +3572 -3572
  64. package/src/components/intelligentSummary.vue +227 -231
  65. package/src/components/kkview.vue +1138 -1138
  66. package/src/components/loadingProcess.vue +164 -164
  67. package/src/components/message/ActionAlertIframe.vue +112 -112
  68. package/src/components/message/ShopMessage.vue +164 -164
  69. package/src/components/message/TextMessage.vue +924 -924
  70. package/src/components/message/TicketMessage.vue +201 -201
  71. package/src/components/message/swiper/index.js +4 -4
  72. package/src/components/message/swiper/ticketSwiper.vue +503 -503
  73. package/src/components/message/swiper/ticketSwiperItem.vue +61 -61
  74. package/src/components/msgLoading.vue +231 -231
  75. package/src/components/myPopup.vue +70 -70
  76. package/src/components/pdfPosition.vue +1334 -1508
  77. package/src/components/popup.vue +227 -227
  78. package/src/components/previewDoc.vue +247 -247
  79. package/src/components/previewPdf.vue +779 -799
  80. package/src/components/receiverMessagePlatform.vue +65 -65
  81. package/src/components/recommend.vue +80 -80
  82. package/src/components/selector/hOption.vue +20 -20
  83. package/src/components/selector/hSelector.vue +199 -199
  84. package/src/components/selector/hWrapper.vue +216 -216
  85. package/src/components/senderMessagePlatform.vue +50 -50
  86. package/src/components/source/BotMessage.vue +24 -24
  87. package/src/components/source/CustomMessage.vue +24 -24
  88. package/src/components/test.vue +260 -260
  89. package/src/components/tree.vue +294 -294
  90. package/src/components/utils/AliyunIssUtil.js +81 -81
  91. package/src/components/utils/ckeditor.js +174 -174
  92. package/src/components/utils/format_date.js +25 -25
  93. package/src/components/utils/index.js +6 -6
  94. package/src/components/utils/math_utils.js +29 -29
  95. package/src/components/voiceComponent.vue +119 -119
  96. package/src/components/welcomeKnowledgeFile.vue +340 -340
  97. package/src/components/welcomeLlmCard.vue +140 -140
  98. package/src/components/welcomeSuggest.vue +97 -97
  99. package/src/main.js +57 -57
  100. package/vue.config.js +54 -54
  101. package/src/components/newPdfPosition.vue +0 -878
@@ -1,165 +1,165 @@
1
- <template>
2
- <div id="loading-process">
3
- <div class="bg-color"></div>
4
- <ul class="display-container" >
5
- <li class="note-display" :data-note="dataNodes">
6
- <div class="circle">
7
- <svg width="30" height="30" class="circle__svg" viewBox="0 0 90 90">
8
- <circle cx="41" cy="41" r="38" class="circle__progress circle__progress--path"></circle>
9
- <circle cx="41" cy="41" r="38" class="circle__progress circle__progress--fill"></circle>
10
- </svg>
11
- </div>
12
- </li>
13
- </ul>
14
- </div>
15
- </template>
16
-
17
- <script>
18
- const transitionDuration = 1000
19
- export default {
20
- name: "loadingProcess",
21
- data(){
22
- return{
23
- timer:null,
24
- dataNodes:0
25
- }
26
- },
27
- props:['dataNote','finished'],
28
- methods:{
29
- strokeTransition(display, note) {
30
- let progress = display.querySelector('.circle__progress--fill');
31
- let radius = progress.r.baseVal.value;
32
- let circumference = 2 * Math.PI * radius;
33
- let offset = circumference * (10 - note) / 10;
34
- progress.style.setProperty('--initialStroke', circumference);
35
- progress.style.setProperty('--transitionDuration', `${transitionDuration}ms`);
36
-
37
- setTimeout(() => progress.style.strokeDashoffset = offset, 100);
38
- },
39
- increaseNumber(display, number, className) {
40
- let element = display.querySelector(`.percent__${className}`),
41
- decPoint = className === 'int' ? '' : '',
42
- interval = transitionDuration / number,
43
- counter = 0;
44
- console.debug('element',element,counter,decPoint)
45
- let increaseInterval = setInterval(() => {
46
- if (counter === number) { window.clearInterval(increaseInterval); }
47
- /*
48
- element.textContent = counter + decPoint;*/
49
- counter++;
50
- }, interval);
51
- }
52
- },
53
- mounted() {
54
- this.timer = setInterval(()=>{
55
- const displays = document.querySelectorAll('.note-display');
56
- displays.forEach(display => {
57
- let note = parseFloat(display.dataset.note);
58
- let [int, dec] = display.dataset.note.split('.');
59
- [int, dec] = [Number(int), Number(dec)];
60
- this.strokeTransition(display, note);
61
- this.increaseNumber(display, this.dataNote, 'int');
62
- /* this.increaseNumber(display, dec, 'dec');*/
63
- })
64
- },1000)
65
- },
66
- watch:{
67
- dataNote:{
68
- handler(val){
69
- this.dataNodes = val
70
- console.debug('this.dataNodes',val,this.dataNodes)
71
- },
72
- immediate:true,
73
- deep:true
74
- },
75
- finished:{
76
- handler(val){
77
- if (val){
78
- setTimeout(()=>{
79
- clearInterval(this.timer)
80
- },1000)
81
- }
82
- },
83
- immediate:true
84
- }
85
- }
86
- }
87
- </script>
88
-
89
- <style scoped lang="less">
90
- /*@import url('https://fonts.googleapis.com/css?family=Nixie+One|Raleway:200');*/
91
- #loading-process{
92
- height: 100px;
93
- width: 100px;
94
- .bg-color{
95
- background-color:#000000 ;
96
- opacity: 0.4;
97
- width: 100%;
98
- height: 100%;
99
- }
100
- .display-container{
101
- position: absolute;
102
- top: calc(50% - 15px);
103
- left: 10px;
104
- }
105
- }
106
- * {
107
- padding: 0;
108
- margin: 0;
109
- box-sizing: border-box;
110
- }
111
- /*
112
- body {
113
- height: 100vh;
114
- color: #fff;
115
- display: flex;
116
- background: #3E423A;
117
- font-family: 'Nixie One', cursive;
118
- }
119
- */
120
-
121
- .display-container {
122
- margin: auto;
123
- display: flex;
124
- .note-display {
125
- display: flex;
126
- flex-direction: column;
127
- align-items: center;
128
- margin: 0 25px;
129
- }
130
- }
131
- .circle__progress {
132
- fill: none;
133
- stroke-width: 5;
134
- stroke-opacity: 0.3;
135
- stroke-linecap: round;
136
- }
137
- .note-display:nth-child(1) .circle__progress--fill{
138
- stroke: #FFFFFF!important;
139
- stroke-opacity: 1;
140
- }
141
- .circle__progress--path{
142
- stroke: #EFEFEF!important;
143
- stroke-opacity: 0.5;
144
- }
145
- .note-display:nth-child(1) .circle__progress { stroke: #AAFF00; }
146
- .note-display:nth-child(2) .circle__progress { stroke: #FF00AA; }
147
- .note-display:nth-child(3) .circle__progress { stroke: #AA00FF; }
148
- .note-display:nth-child(4) .circle__progress { stroke: #00AAFF; }
149
- .circle {
150
- position: relative;
151
- }
152
-
153
- .percent {
154
- width: 100%;
155
- top: 50%;
156
- left: 50%;
157
- position: absolute;
158
- font-weight: bold;
159
- text-align: center;
160
- /* line-height: 28px;*/
161
- transform: translate(-50%, -50%);
162
- font-size: 12px;
163
- }
164
-
1
+ <template>
2
+ <div id="loading-process">
3
+ <div class="bg-color"></div>
4
+ <ul class="display-container" >
5
+ <li class="note-display" :data-note="dataNodes">
6
+ <div class="circle">
7
+ <svg width="30" height="30" class="circle__svg" viewBox="0 0 90 90">
8
+ <circle cx="41" cy="41" r="38" class="circle__progress circle__progress--path"></circle>
9
+ <circle cx="41" cy="41" r="38" class="circle__progress circle__progress--fill"></circle>
10
+ </svg>
11
+ </div>
12
+ </li>
13
+ </ul>
14
+ </div>
15
+ </template>
16
+
17
+ <script>
18
+ const transitionDuration = 1000
19
+ export default {
20
+ name: "loadingProcess",
21
+ data(){
22
+ return{
23
+ timer:null,
24
+ dataNodes:0
25
+ }
26
+ },
27
+ props:['dataNote','finished'],
28
+ methods:{
29
+ strokeTransition(display, note) {
30
+ let progress = display.querySelector('.circle__progress--fill');
31
+ let radius = progress.r.baseVal.value;
32
+ let circumference = 2 * Math.PI * radius;
33
+ let offset = circumference * (10 - note) / 10;
34
+ progress.style.setProperty('--initialStroke', circumference);
35
+ progress.style.setProperty('--transitionDuration', `${transitionDuration}ms`);
36
+
37
+ setTimeout(() => progress.style.strokeDashoffset = offset, 100);
38
+ },
39
+ increaseNumber(display, number, className) {
40
+ let element = display.querySelector(`.percent__${className}`),
41
+ decPoint = className === 'int' ? '' : '',
42
+ interval = transitionDuration / number,
43
+ counter = 0;
44
+ console.debug('element',element,counter,decPoint)
45
+ let increaseInterval = setInterval(() => {
46
+ if (counter === number) { window.clearInterval(increaseInterval); }
47
+ /*
48
+ element.textContent = counter + decPoint;*/
49
+ counter++;
50
+ }, interval);
51
+ }
52
+ },
53
+ mounted() {
54
+ this.timer = setInterval(()=>{
55
+ const displays = document.querySelectorAll('.note-display');
56
+ displays.forEach(display => {
57
+ let note = parseFloat(display.dataset.note);
58
+ let [int, dec] = display.dataset.note.split('.');
59
+ [int, dec] = [Number(int), Number(dec)];
60
+ this.strokeTransition(display, note);
61
+ this.increaseNumber(display, this.dataNote, 'int');
62
+ /* this.increaseNumber(display, dec, 'dec');*/
63
+ })
64
+ },1000)
65
+ },
66
+ watch:{
67
+ dataNote:{
68
+ handler(val){
69
+ this.dataNodes = val
70
+ console.debug('this.dataNodes',val,this.dataNodes)
71
+ },
72
+ immediate:true,
73
+ deep:true
74
+ },
75
+ finished:{
76
+ handler(val){
77
+ if (val){
78
+ setTimeout(()=>{
79
+ clearInterval(this.timer)
80
+ },1000)
81
+ }
82
+ },
83
+ immediate:true
84
+ }
85
+ }
86
+ }
87
+ </script>
88
+
89
+ <style scoped lang="less">
90
+ /*@import url('https://fonts.googleapis.com/css?family=Nixie+One|Raleway:200');*/
91
+ #loading-process{
92
+ height: 100px;
93
+ width: 100px;
94
+ .bg-color{
95
+ background-color:#000000 ;
96
+ opacity: 0.4;
97
+ width: 100%;
98
+ height: 100%;
99
+ }
100
+ .display-container{
101
+ position: absolute;
102
+ top: calc(50% - 15px);
103
+ left: 10px;
104
+ }
105
+ }
106
+ * {
107
+ padding: 0;
108
+ margin: 0;
109
+ box-sizing: border-box;
110
+ }
111
+ /*
112
+ body {
113
+ height: 100vh;
114
+ color: #fff;
115
+ display: flex;
116
+ background: #3E423A;
117
+ font-family: 'Nixie One', cursive;
118
+ }
119
+ */
120
+
121
+ .display-container {
122
+ margin: auto;
123
+ display: flex;
124
+ .note-display {
125
+ display: flex;
126
+ flex-direction: column;
127
+ align-items: center;
128
+ margin: 0 25px;
129
+ }
130
+ }
131
+ .circle__progress {
132
+ fill: none;
133
+ stroke-width: 5;
134
+ stroke-opacity: 0.3;
135
+ stroke-linecap: round;
136
+ }
137
+ .note-display:nth-child(1) .circle__progress--fill{
138
+ stroke: #FFFFFF!important;
139
+ stroke-opacity: 1;
140
+ }
141
+ .circle__progress--path{
142
+ stroke: #EFEFEF!important;
143
+ stroke-opacity: 0.5;
144
+ }
145
+ .note-display:nth-child(1) .circle__progress { stroke: #AAFF00; }
146
+ .note-display:nth-child(2) .circle__progress { stroke: #FF00AA; }
147
+ .note-display:nth-child(3) .circle__progress { stroke: #AA00FF; }
148
+ .note-display:nth-child(4) .circle__progress { stroke: #00AAFF; }
149
+ .circle {
150
+ position: relative;
151
+ }
152
+
153
+ .percent {
154
+ width: 100%;
155
+ top: 50%;
156
+ left: 50%;
157
+ position: absolute;
158
+ font-weight: bold;
159
+ text-align: center;
160
+ /* line-height: 28px;*/
161
+ transform: translate(-50%, -50%);
162
+ font-size: 12px;
163
+ }
164
+
165
165
  </style>
@@ -1,113 +1,113 @@
1
- <template>
2
- <div id="action_alert_iframe">
3
- <iframe
4
- class="grzh-iframe"
5
- :id="tampId"
6
- :data-name="tampId"
7
- :src="actionAlertIframe.template"
8
- :width="actionAlertIframe.version == 1?actionAlertIframe.width:'100%'"
9
- :height="actionAlertIframe.height"
10
- :scrolling="actionAlertIframe.scrolling"
11
- frameborder="no"
12
- border="0"
13
- ></iframe>
14
- </div>
15
- </template>
16
- <script>
17
- export default {
18
- name: "action_alert_iframe",
19
- props: ["actionAlertIframe"],
20
- data() {
21
- return {
22
- name: "action_alert_iframe",
23
- dataName: "",
24
- tampId:'',
25
- // 组件接收数据
26
- actionAlertIframeObj: {
27
- template: "url地址(可插入变量)",
28
- description: "描述",
29
- height: "frame高度",
30
- width: "iframe 的宽度",
31
- scrolling: "yes/no/auto(是否在 iframe 中显示滚动条)",
32
- sandbox: [
33
- "预留",
34
- "启用一系列对 <iframe> 中内容的额外限制",
35
- "参考 https://www.w3school.com.cn/tags/att_iframe_sandbox.asp",
36
- ],
37
- frameborder: "0/1(是否显示框架周围的边框)",
38
- displayStyle:
39
- "iframe 样式(点击弹出/嵌入iframe 字符串类型后端未做限制)",
40
- },
41
- };
42
- },
43
- methods: {},
44
- mounted() {
45
- this.tampId = 'iframeId++' + new Date().getTime();
46
- let tampUrl = this.actionAlertIframe.template;
47
- function GetRequest() {
48
- var url = tampUrl.split("?")[1]; //获取url中"?"符后的字串
49
- var theRequest = new Object();
50
- if (url) {
51
- // var str = url.substr(1);
52
- let strs = url.split("&");
53
- for (var i = 0; i < strs.length; i++) {
54
- theRequest[strs[i].split("=")[0]] = unescape(
55
- strs[i].split("=")[1]
56
- );
57
- }
58
- }
59
- return theRequest;
60
- }
61
- if (JSON.stringify(GetRequest()) == "{}") {
62
- this.actionAlertIframe.template = this.actionAlertIframe.template + "?iframeId=" + this.tampId
63
- } else {
64
- this.actionAlertIframe.template = this.actionAlertIframe.template + "&iframeId=" + this.tampId
65
- }
66
- },
67
- };
68
- </script>
69
- <style lang="less" scoped>
70
- // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
71
-
72
- #action_alert_iframe {
73
- width: 100%;
74
- margin: 0 auto;
75
- overflow-x: auto;
76
- .grzh-iframe {
77
- scrollbar-face-color: #9aa1c4;
78
- /* 滚动条滑块按钮的颜色 */
79
- scrollbar-highlight-color: #f60;
80
- /* 滚动条整体颜色 */
81
- scrollbar-3dlight-color: #f00;
82
- scrollbar-darkshadow-color: #000;
83
- /* 滚动条阴影 */
84
- scrollbar-shadow-color: #000;
85
- /* 三角箭头颜色 */
86
- scrollbar-arrow-color: #394264;
87
- /* 滚动条轨道颜色 */
88
- scrollbar-track-color: #394264;
89
-
90
- ::-webkit-scrollbar {
91
- width: 5px;
92
- height: 5px;
93
- }
94
- ::-webkit-scrollbar-thumb {
95
- background-color: #999;
96
- -webkit-border-radius: 5px;
97
- border-radius: 5px;
98
- }
99
- ::-webkit-scrollbar-thumb:vertical:hover {
100
- background-color: #666;
101
- }
102
- ::-webkit-scrollbar-thumb:vertical:active {
103
- background-color: #333;
104
- }
105
- ::-webkit-scrollbar-button {
106
- display: none;
107
- }
108
- ::-webkit-scrollbar-track {
109
- background-color: #f1f1f1;
110
- }
111
- }
112
- }
1
+ <template>
2
+ <div id="action_alert_iframe">
3
+ <iframe
4
+ class="grzh-iframe"
5
+ :id="tampId"
6
+ :data-name="tampId"
7
+ :src="actionAlertIframe.template"
8
+ :width="actionAlertIframe.version == 1?actionAlertIframe.width:'100%'"
9
+ :height="actionAlertIframe.height"
10
+ :scrolling="actionAlertIframe.scrolling"
11
+ frameborder="no"
12
+ border="0"
13
+ ></iframe>
14
+ </div>
15
+ </template>
16
+ <script>
17
+ export default {
18
+ name: "action_alert_iframe",
19
+ props: ["actionAlertIframe"],
20
+ data() {
21
+ return {
22
+ name: "action_alert_iframe",
23
+ dataName: "",
24
+ tampId:'',
25
+ // 组件接收数据
26
+ actionAlertIframeObj: {
27
+ template: "url地址(可插入变量)",
28
+ description: "描述",
29
+ height: "frame高度",
30
+ width: "iframe 的宽度",
31
+ scrolling: "yes/no/auto(是否在 iframe 中显示滚动条)",
32
+ sandbox: [
33
+ "预留",
34
+ "启用一系列对 <iframe> 中内容的额外限制",
35
+ "参考 https://www.w3school.com.cn/tags/att_iframe_sandbox.asp",
36
+ ],
37
+ frameborder: "0/1(是否显示框架周围的边框)",
38
+ displayStyle:
39
+ "iframe 样式(点击弹出/嵌入iframe 字符串类型后端未做限制)",
40
+ },
41
+ };
42
+ },
43
+ methods: {},
44
+ mounted() {
45
+ this.tampId = 'iframeId++' + new Date().getTime();
46
+ let tampUrl = this.actionAlertIframe.template;
47
+ function GetRequest() {
48
+ var url = tampUrl.split("?")[1]; //获取url中"?"符后的字串
49
+ var theRequest = new Object();
50
+ if (url) {
51
+ // var str = url.substr(1);
52
+ let strs = url.split("&");
53
+ for (var i = 0; i < strs.length; i++) {
54
+ theRequest[strs[i].split("=")[0]] = unescape(
55
+ strs[i].split("=")[1]
56
+ );
57
+ }
58
+ }
59
+ return theRequest;
60
+ }
61
+ if (JSON.stringify(GetRequest()) == "{}") {
62
+ this.actionAlertIframe.template = this.actionAlertIframe.template + "?iframeId=" + this.tampId
63
+ } else {
64
+ this.actionAlertIframe.template = this.actionAlertIframe.template + "&iframeId=" + this.tampId
65
+ }
66
+ },
67
+ };
68
+ </script>
69
+ <style lang="less" scoped>
70
+ // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
71
+
72
+ #action_alert_iframe {
73
+ width: 100%;
74
+ margin: 0 auto;
75
+ overflow-x: auto;
76
+ .grzh-iframe {
77
+ scrollbar-face-color: #9aa1c4;
78
+ /* 滚动条滑块按钮的颜色 */
79
+ scrollbar-highlight-color: #f60;
80
+ /* 滚动条整体颜色 */
81
+ scrollbar-3dlight-color: #f00;
82
+ scrollbar-darkshadow-color: #000;
83
+ /* 滚动条阴影 */
84
+ scrollbar-shadow-color: #000;
85
+ /* 三角箭头颜色 */
86
+ scrollbar-arrow-color: #394264;
87
+ /* 滚动条轨道颜色 */
88
+ scrollbar-track-color: #394264;
89
+
90
+ ::-webkit-scrollbar {
91
+ width: 5px;
92
+ height: 5px;
93
+ }
94
+ ::-webkit-scrollbar-thumb {
95
+ background-color: #999;
96
+ -webkit-border-radius: 5px;
97
+ border-radius: 5px;
98
+ }
99
+ ::-webkit-scrollbar-thumb:vertical:hover {
100
+ background-color: #666;
101
+ }
102
+ ::-webkit-scrollbar-thumb:vertical:active {
103
+ background-color: #333;
104
+ }
105
+ ::-webkit-scrollbar-button {
106
+ display: none;
107
+ }
108
+ ::-webkit-scrollbar-track {
109
+ background-color: #f1f1f1;
110
+ }
111
+ }
112
+ }
113
113
  </style>