zydx-plus 1.29.143 → 1.29.145

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zydx-plus",
3
- "version": "1.29.143",
3
+ "version": "1.29.145",
4
4
  "description": "Vue.js",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -638,7 +638,7 @@
638
638
  let that = this
639
639
  this.taskInfoList.forEach(item => {
640
640
  Object.keys(item).forEach(key=>{
641
- if(!that.keysArr.includes(key)) {
641
+ if(!that.keysArr.includes(key) || item[key] == null) {
642
642
  delete item[key];
643
643
  }
644
644
  })
@@ -647,6 +647,7 @@
647
647
  },
648
648
  dateFormat (date) {
649
649
  if (date != null) {
650
+ date = new Date(date)
650
651
  var y = date.getFullYear();
651
652
  var m = date.getMonth() + 1;
652
653
  m = m < 10 ? ('0' + m) : m;
@@ -29,7 +29,7 @@
29
29
  <div v-else>
30
30
  <div class="choice-list">
31
31
  <div class="list-title">
32
- <span>试题选项:</span>
32
+ <span><i>*</i>试题选项:</span>
33
33
  <button class="but" @click="addOption">增加选项</button>
34
34
  </div>
35
35
  <div class="list-cont">
@@ -110,14 +110,23 @@ export default {
110
110
  })
111
111
  }
112
112
  }else {
113
- v.forEach(x => {
114
- arr.push({
115
- type: (x.isRight)? 'correct' : 'interfere',
116
- letter: x.index,
117
- title: (x.isRight)? '正确选项' : '干扰选项',
118
- list: x.content.map(y => ({value: y}))
113
+ if(this.isShow) {
114
+ v.forEach(x => {
115
+ arr.push({
116
+ type: (x.isRight)? 'correct' : 'interfere',
117
+ letter: x.index,
118
+ title: (x.isRight)? '正确选项' : '干扰选项',
119
+ list: x.content.map(y => ({value: y}))
120
+ })
119
121
  })
120
- })
122
+ }else {
123
+ v.forEach(x => {
124
+ arr.push({
125
+ letter: x.index,
126
+ value: x.content[0]
127
+ })
128
+ })
129
+ }
121
130
  }
122
131
  return arr
123
132
  },
@@ -152,12 +161,16 @@ export default {
152
161
  }
153
162
  }else {
154
163
  this.list.forEach(x => {
164
+ console.log(x.value)
155
165
  arr.push({
156
166
  index: x.letter,
157
- content: [x.value? x.value : '']
167
+ content: [x.value]
158
168
  })
159
169
  })
160
- return arr
170
+ return {
171
+ testKey: arr,
172
+ prompt: arr.filter(x => x.content[0] === '').length > 0
173
+ }
161
174
  }
162
175
  },
163
176
  add(str) { // 添加选项
@@ -236,6 +249,11 @@ export default {
236
249
  font-weight: bold;
237
250
  flex: 1;
238
251
  }
252
+ .list-title i{
253
+ color: red;
254
+ margin-right: 2px;
255
+ font-style: normal;
256
+ }
239
257
  .choice-title{
240
258
  display: flex;
241
259
  justify-content: center;
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="drag-pop" :style="position">
2
+ <div class="drag-pop" :class="{'zin': isMove}" :style="position" :id="id">
3
3
  <div class="drag-head" :style="{'background-color':titleColor}">
4
4
  <span @mousedown="mousedown"
5
5
  @mousemove="mousemove"
@@ -39,6 +39,7 @@ export default {
39
39
  isMove: false,//是否移动标识
40
40
  footIsMove: false,//是否移动标识
41
41
  direction: '',//移动方向
42
+ id: '',//id
42
43
  }
43
44
  },
44
45
  props: {
@@ -59,11 +60,23 @@ export default {
59
60
  default: true
60
61
  }
61
62
  },
63
+ watch: {
64
+ width: {
65
+ handler: function (val, oldVal) {
66
+ this.footRightOffset = val
67
+ },
68
+ immediate: true
69
+ },
70
+ height: {
71
+ handler: function (val, oldVal) {
72
+ this.footDownOffset = val
73
+ },
74
+ immediate: true
75
+ },
76
+ },
62
77
  mounted() {
63
- let clientWidth = document.documentElement.clientWidth;
64
- let clientHeight = document.documentElement.clientHeight;
65
- this.x = clientWidth / 2 - this.footDownOffset / 2;
66
- this.y = clientHeight / 2 - this.footRightOffset / 2;
78
+ this.id = Math.random().toString(36).substr(2);
79
+ this.init()
67
80
  },
68
81
  computed: {
69
82
  position() {
@@ -71,6 +84,12 @@ export default {
71
84
  },
72
85
  },
73
86
  methods: {
87
+ init() {
88
+ let clientWidth = document.documentElement.clientWidth;
89
+ let clientHeight = document.documentElement.clientHeight;
90
+ this.x = clientWidth / 2 - this.footRightOffset / 2;
91
+ this.y = clientHeight / 2 - this.footDownOffset / 2;
92
+ },
74
93
  footDown(event,v) {
75
94
  event.preventDefault()
76
95
  this.direction = v
@@ -132,11 +151,17 @@ export default {
132
151
  </script>
133
152
 
134
153
  <style scoped>
154
+ .zin{
155
+ z-index: 1000 !important;
156
+ }
135
157
  .drag-cont-slot{
136
158
  width: 100%;
137
159
  height: 100%;
138
160
  overflow: auto;
139
161
  }
162
+ .drag-cont-slot::-webkit-scrollbar {
163
+ display: none;
164
+ }
140
165
  .down-text-cont{
141
166
  display: inline-block;
142
167
  }
@@ -1,17 +1,21 @@
1
1
  <template>
2
- <div class="mind" ref="mind">
2
+ <div class="mind" :ref="id">
3
3
  <div class="table">
4
- <button :disabled="retShow" @click="ret">返回</button>
5
- <button :disabled="forwardShow" @click="forward">前进</button>
6
- <button :disabled="mindShow" @click="addNode">添加节点</button>
7
- <button :disabled="mindShow" @click="brotherNode">兄弟节点</button>
8
- <button :disabled="mindShow" @click="delNode">删除节点</button>
9
- <button :disabled="mindShow" @click="associativeLine">关联线</button>
10
- <button :disabled="mindShow" @click="nodeStyle">节点样式</button>
11
- <button @click="structure">结构切换</button>
12
- <button @click="preservation">保存</button>
4
+ <div class="table-left" v-if="!readOnly">
5
+ <button :disabled="retShow" @click="ret">返回</button>
6
+ <button :disabled="forwardShow" @click="forward">前进</button>
7
+ <button :disabled="mindShow" @click="addNode">添加节点</button>
8
+ <button :disabled="mindShow" @click="brotherNode">兄弟节点</button>
9
+ <button :disabled="mindShow" @click="delNode">删除节点</button>
10
+ <button :disabled="mindShow" @click="associativeLine">关联线</button>
11
+ <button :disabled="mindShow" @click="nodeStyle">节点样式</button>
12
+ <button @click="structure">结构切换</button>
13
+ <button @click="preservation">保存</button>
14
+ </div>
15
+ <button @click="fullTap" v-if="fullShow">全屏</button>
16
+ <button @click="fullDel" v-else>退出</button>
13
17
  </div>
14
- <div id="mindMapContainer"></div>
18
+ <div :id="id" class="mindMapContainer"></div>
15
19
  <div class="node-style" ref="nodeStyle" :class="{'node-s': trans, 'node-h': !trans}">
16
20
  <div class="style-li">
17
21
  <div class="style-title">文字</div>
@@ -27,9 +31,15 @@
27
31
  </div>
28
32
  <div class="node-but">
29
33
  <button @click="colorTap($event,'color')">颜色</button>
30
- <button :style="{'background-color': (boldAct)? '#549688': '#fff','color': (boldAct)? '#fff': '#333'}" @click="bolds">粗体</button>
31
- <button :style="{'background-color': (italicAct)? '#549688': '#fff','color': (italicAct)? '#fff': '#333'}" @click="italics">斜体</button>
32
- <button :style="{'background-color': (scribeAct)? '#549688': '#fff','color': (scribeAct)? '#fff': '#333'}" @click="scribes">划线</button>
34
+ <button :style="{'background-color': (boldAct)? '#549688': '#fff','color': (boldAct)? '#fff': '#333'}"
35
+ @click="bolds">粗体
36
+ </button>
37
+ <button :style="{'background-color': (italicAct)? '#549688': '#fff','color': (italicAct)? '#fff': '#333'}"
38
+ @click="italics">斜体
39
+ </button>
40
+ <button :style="{'background-color': (scribeAct)? '#549688': '#fff','color': (scribeAct)? '#fff': '#333'}"
41
+ @click="scribes">划线
42
+ </button>
33
43
  </div>
34
44
  </div>
35
45
  <div class="style-li">
@@ -112,10 +122,11 @@ import "simple-mind-map/dist/simpleMindMap.esm.css";
112
122
  MindMap.usePlugin(Drag).usePlugin(AssociativeLine).usePlugin(Export)
113
123
 
114
124
  export default {
115
- components: {Select,Coloring},
125
+ components: {Select, Coloring},
116
126
  name: "zydx-mind",
117
127
  data() {
118
128
  return {
129
+ id: '',
119
130
  mindMap: null,
120
131
  mindShow: false,
121
132
  retShow: false,
@@ -183,7 +194,14 @@ export default {
183
194
  color: 'rgba(84,150,136,1)',
184
195
  boldAct: false,
185
196
  italicAct: false,
186
- scribeAct: false
197
+ scribeAct: false,
198
+ defaultData: {
199
+ "data": {
200
+ "text": "根节点"
201
+ },
202
+ "children": []
203
+ },
204
+ fullShow: true
187
205
  }
188
206
  },
189
207
  props: {
@@ -202,90 +220,140 @@ export default {
202
220
  },
203
221
  },
204
222
  watch: {
223
+ readOnly: {
224
+ handler: function (val, oldVal) {
225
+ this.mindMap?.setMode(val ? 'readonly' : 'edit')
226
+ },
227
+ immediate: true
228
+ },
229
+ data: {
230
+ handler: function (val, oldVal) {
231
+ this.mindMap?.setData(val)
232
+ },
233
+ immediate: true
234
+ },
205
235
  sizeValue(e) { // 字号
206
236
  this.activeNodes.forEach(node => {
207
- node.setStyle('fontSize',e)
237
+ node.setStyle('fontSize', e)
208
238
  })
209
239
  },
210
240
  rowValue(e) { // 行高
211
241
  this.activeNodes.forEach(node => {
212
- node.setStyle('lineHeight',e)
242
+ node.setStyle('lineHeight', e)
213
243
  })
214
244
  },
215
245
  styleValue(e) { // 粗斜体
216
246
  this.activeNodes.forEach(node => {
217
- node.setStyle('borderDasharray',e)
247
+ node.setStyle('borderDasharray', e)
218
248
  })
219
249
  },
220
250
  widthValue(e) { // 线宽
221
251
  this.activeNodes.forEach(node => {
222
- node.setStyle('borderWidth',e)
252
+ node.setStyle('borderWidth', e)
223
253
  })
224
254
  },
225
255
  filletValue(e) { // 圆角
226
256
  this.activeNodes.forEach(node => {
227
- node.setStyle('borderRadius',e)
257
+ node.setStyle('borderRadius', e)
228
258
  })
229
259
  },
230
260
  shapeValue(e) { // 形状
231
261
  this.activeNodes.forEach(node => {
232
- node.setStyle('shape',e)
262
+ node.setStyle('shape', e)
233
263
  })
234
264
  },
235
265
  lineValue(e) { // 线宽
236
266
  this.activeNodes.forEach(node => {
237
- node.setStyle('lineWidth',e)
267
+ node.setStyle('lineWidth', e)
238
268
  })
239
269
  },
240
270
  lineStyleValue(e) { // 线宽
241
271
  this.activeNodes.forEach(node => {
242
- node.setStyle('lineDasharray',e)
272
+ node.setStyle('lineDasharray', e)
243
273
  })
244
274
  },
245
275
  },
246
276
  mounted() {
247
- let mindSess = sessionStorage.getItem('mind')
248
- this.mindMap = new MindMap({
249
- el: document.getElementById('mindMapContainer'),
250
- enableFreeDrag: false, // 是否开启自由拖拽
251
- enableNodeTransitionMove: false, // 是否开启节点过渡动画
252
- layout: 'logicalStructure', // 节点布局方式
253
- maxHistoryCount: 100, // 最大历史记录数
254
- maxNodeCacheCount: 100, // 最大节点缓存数
255
- data: this.data
256
- });
257
- this.mindMap.setMode(this.readOnly ? 'readonly':'edit')
258
- this.mindMap.on('node_active', (node, activeNodeList) => {
259
- this.mindShow = node === null;
260
- })
261
- this.mindMap.on('back_forward', (index, len) => {
262
- this.retShow = index <= 0;
263
- this.forwardShow = index >= len - 1
264
- })
265
- this.mindMap.on('node_active', (node, activeNodeList) => {
266
- this.activeNodes = activeNodeList
267
- })
277
+ this.id = Math.random().toString(36).substr(2)
278
+ setTimeout(() => {
279
+ this.init()
280
+ },0)
281
+ window.onresize = () => {
282
+ if (!document.fullscreenElement) {
283
+ this.fullShow = true
284
+ }
285
+ this.mindMap.resize()
286
+ }
268
287
  },
269
288
  methods: {
270
- // readOnly() {
271
- // this.mindMap.setMode(value ? 'readonly' : 'edit')
272
- // },
289
+ fullScreen(element) {
290
+ if (element.requestFullScreen) {
291
+ element.requestFullScreen()
292
+ } else if (element.webkitRequestFullScreen) {
293
+ element.webkitRequestFullScreen()
294
+ } else if (element.mozRequestFullScreen) {
295
+ element.mozRequestFullScreen()
296
+ }
297
+ },
298
+ cancelFullscreen() {
299
+ if (document.exitFullscreen) {
300
+ document.exitFullscreen();
301
+ } else if (document.msExitFullscreen) {
302
+ document.msExitFullscreen();
303
+ } else if (document.mozCancelFullScreen) {
304
+ document.mozCancelFullScreen();
305
+ } else if (document.webkitExitFullscreen) {
306
+ document.webkitExitFullscreen();
307
+ }
308
+ },
309
+ fullDel() {
310
+ this.fullShow = true
311
+ this.cancelFullscreen()
312
+ },
313
+ // 全屏
314
+ fullTap() {
315
+ this.fullShow = false
316
+ this.fullScreen(this.$refs[this.id])
317
+ },
318
+ // 初始化
319
+ init() {
320
+ this.mindMap = new MindMap({
321
+ el: document.getElementById(this.id),
322
+ enableFreeDrag: false, // 是否开启自由拖拽
323
+ enableNodeTransitionMove: false, // 是否开启节点过渡动画
324
+ layout: 'logicalStructure', // 节点布局方式
325
+ maxHistoryCount: 100, // 最大历史记录数
326
+ maxNodeCacheCount: 100, // 最大节点缓存数
327
+ data: Object.keys(this.data).length === 0 ? this.defaultData : this.data
328
+ });
329
+ this.mindMap.setMode(this.readOnly ? 'readonly' : 'edit')
330
+ this.mindMap.on('node_active', (node, activeNodeList) => {
331
+ this.mindShow = node === null;
332
+ })
333
+ this.mindMap.on('back_forward', (index, len) => {
334
+ this.retShow = index <= 0;
335
+ this.forwardShow = index >= len - 1
336
+ })
337
+ this.mindMap.on('node_active', (node, activeNodeList) => {
338
+ this.activeNodes = activeNodeList
339
+ })
340
+ },
273
341
  scribes() {
274
342
  this.scribeAct = !this.scribeAct
275
343
  this.activeNodes.forEach(node => {
276
- node.setStyle('textDecoration', (!this.scribeAct)? 'none':'underline')
344
+ node.setStyle('textDecoration', (!this.scribeAct) ? 'none' : 'underline')
277
345
  })
278
346
  },
279
347
  italics() {
280
348
  this.italicAct = !this.italicAct
281
349
  this.activeNodes.forEach(node => {
282
- node.setStyle('fontStyle', (!this.italicAct)? 'normal':'italic')
350
+ node.setStyle('fontStyle', (!this.italicAct) ? 'normal' : 'italic')
283
351
  })
284
352
  },
285
353
  bolds() {
286
354
  this.boldAct = !this.boldAct
287
355
  this.activeNodes.forEach(node => {
288
- node.setStyle('fontWeight', (!this.boldAct)? 'normal':'bold')
356
+ node.setStyle('fontWeight', (!this.boldAct) ? 'normal' : 'bold')
289
357
  })
290
358
  },
291
359
  rgba(e) {
@@ -301,10 +369,10 @@ export default {
301
369
  empty() {
302
370
  this.colorShow = false
303
371
  },
304
- colorTap(e,i) {
372
+ colorTap(e, i) {
305
373
  this.colorData = {index: i, data: e}
306
374
  let parent = this.colorData.data.target.parentNode.offsetTop + 32
307
- if(parent > 330) parent = 300
375
+ if (parent > 330) parent = 300
308
376
  this.colorShow = !this.colorShow
309
377
  this.top = parent
310
378
  },
@@ -315,16 +383,17 @@ export default {
315
383
  layoutList = 'organizationStructure'
316
384
  } else if (layout === 'organizationStructure') {
317
385
  layoutList = 'logicalStructure'
318
- }else {
386
+ } else {
319
387
  layoutList = 'mindMap'
320
388
  }
321
389
  this.mindMap.setLayout(layoutList)
322
390
  },
391
+ // 保存
323
392
  preservation() {
324
393
  let that = this
325
- that.mindMap.export('png',false,'123213', true).then(r => {
394
+ that.mindMap.export('png', false, '123213', true).then(r => {
326
395
  that.$emit('preservation', {
327
- data: that.data,
396
+ data: that.mindMap.getData(),
328
397
  url: r
329
398
  })
330
399
  })
@@ -335,7 +404,7 @@ export default {
335
404
  this.trans = !this.trans
336
405
  setTimeout(() => {
337
406
  this.$refs.mind.style.overflow = 'visible'
338
- if(!this.trans) {
407
+ if (!this.trans) {
339
408
  this.$refs.nodeStyle.style.display = 'none'
340
409
  }
341
410
  }, 250)
@@ -369,13 +438,20 @@ export default {
369
438
  </script>
370
439
 
371
440
  <style scoped>
372
- .node-s{
441
+ .table-left {
442
+ display: inline-block;
443
+ margin-right: 5px;
444
+ }
445
+
446
+ .node-s {
373
447
  animation: nodeShow 0.3s;
374
448
  display: block;
375
449
  }
376
- .node-h{
450
+
451
+ .node-h {
377
452
  animation: nodeHide 0.3s;
378
453
  }
454
+
379
455
  @keyframes nodeHide {
380
456
  0% {
381
457
  opacity: 1;
@@ -386,6 +462,7 @@ export default {
386
462
  transform: translateX(110%);
387
463
  }
388
464
  }
465
+
389
466
  @keyframes nodeShow {
390
467
  0% {
391
468
  opacity: 0;
@@ -400,23 +477,28 @@ export default {
400
477
  transform: translateX(0);
401
478
  }
402
479
  }
403
- .zIndex{
480
+
481
+ .zIndex {
404
482
  position: relative;
405
483
  z-index: 30;
406
484
  }
407
- .zIndex2{
485
+
486
+ .zIndex2 {
408
487
  position: relative;
409
488
  z-index: 33;
410
489
  }
411
- .zIndex3{
490
+
491
+ .zIndex3 {
412
492
  position: relative;
413
493
  z-index: 32;
414
494
  }
415
- .zIndex4{
495
+
496
+ .zIndex4 {
416
497
  position: relative;
417
498
  z-index: 31;
418
499
  }
419
- .backColor{
500
+
501
+ .backColor {
420
502
  width: 93px;
421
503
  height: 30px;
422
504
  border: 1px solid #ccc;
@@ -426,17 +508,20 @@ export default {
426
508
  cursor: pointer;
427
509
  background-color: #549688;
428
510
  }
429
- .back-col{
511
+
512
+ .back-col {
430
513
  position: absolute;
431
514
  top: 0;
432
515
  left: 60px;
433
516
  z-index: 40;
434
517
  }
435
- .node-but{
518
+
519
+ .node-but {
436
520
  display: flex;
437
521
  padding: 5px 0;
438
522
  }
439
- .node-but button{
523
+
524
+ .node-but button {
440
525
  flex: 1;
441
526
  margin-right: 5px;
442
527
  background-color: #fff;
@@ -446,20 +531,24 @@ export default {
446
531
  cursor: pointer;
447
532
  font-size: 12px;
448
533
  }
449
- .node-but button:last-child{
534
+
535
+ .node-but button:last-child {
450
536
  margin: 0;
451
537
  }
452
- .style-title{
538
+
539
+ .style-title {
453
540
  font-size: 16px;
454
541
  font-weight: bold;
455
542
  padding: 5px 0 10px 0;
456
543
  }
544
+
457
545
  .mind {
458
546
  width: 100%;
459
547
  height: 100%;
460
548
  position: relative;
461
549
  }
462
- .table{
550
+
551
+ .table {
463
552
  position: absolute;
464
553
  top: 10px;
465
554
  left: 30px;
@@ -469,25 +558,30 @@ export default {
469
558
  box-shadow: rgba(0, 0, 0, 0.06) 0 2px 16px 0;
470
559
  z-index: 10;
471
560
  }
472
- .style-list{
561
+
562
+ .style-list {
473
563
  display: flex;
474
564
  padding: 5px 0;
475
565
  }
476
- .node-left{
566
+
567
+ .node-left {
477
568
  display: flex;
478
569
  padding-right: 10px;
479
570
  }
480
- .node-left>span{
571
+
572
+ .node-left > span {
481
573
  display: inline-block;
482
574
  width: 80px;
483
575
  line-height: 32px;
484
576
  padding-right: 10px;
485
577
  box-sizing: border-box;
486
578
  }
487
- .padd{
579
+
580
+ .padd {
488
581
  padding-right: 0;
489
582
  }
490
- .node-style{
583
+
584
+ .node-style {
491
585
  position: absolute;
492
586
  right: 0;
493
587
  top: 50%;
@@ -502,7 +596,8 @@ export default {
502
596
  margin-top: -270px;
503
597
  display: none;
504
598
  }
505
- .table button{
599
+
600
+ .table button {
506
601
  margin-right: 5px;
507
602
  background-color: #fff;
508
603
  border: 1px solid #ccc;
@@ -511,11 +606,12 @@ export default {
511
606
  cursor: pointer;
512
607
  font-size: 12px;
513
608
  }
514
- .table button:last-child{
609
+
610
+ .table button:last-child {
515
611
  margin-right: 0;
516
612
  }
517
613
 
518
- #mindMapContainer {
614
+ .mindMapContainer {
519
615
  width: 100%;
520
616
  height: 100%;
521
617
  }
@@ -31,7 +31,7 @@
31
31
  <input class="file" :accept="item.accept" @change="fileTap($event,index)" type="file" />
32
32
  </label>
33
33
  </div>
34
- <div style="display: inline-block;" v-if="item.type === 'input'">
34
+ <div class="input-name" v-if="item.type === 'input'">
35
35
  <div v-if="item.number" class="number-input">
36
36
  <input type="number" @keypress="isNumberKey($event,index)"
37
37
  :placeholder="item.placeholder"
@@ -40,6 +40,7 @@
40
40
  </div>
41
41
  <input v-else type="text" :placeholder="item.placeholder" :maxlength="item.maxlength"
42
42
  v-model="item.value" :disabled="item.disabled"/>
43
+ <b>{{ item.tail }}</b>
43
44
  </div>
44
45
  <div style="display: inline-block;">
45
46
  <Select v-if="item.type === 'select'" :options="item.option"
@@ -251,4 +251,16 @@ font-size: 12px;
251
251
  cursor: pointer;
252
252
  min-width: 60px;
253
253
  display: inline-block;
254
+ }
255
+ .input-name{
256
+ display: inline-block;
257
+ position: relative;
258
+ }
259
+ .input-name b{
260
+ position: absolute;
261
+ top: 5px;
262
+ right: 10px;
263
+ z-index: 1;
264
+ font-size: 16px;
265
+ font-weight: normal;
254
266
  }
package/src/index.js CHANGED
@@ -69,7 +69,7 @@ function install(app) {
69
69
  }
70
70
 
71
71
  export default {
72
- version: '1.29.143',
72
+ version: '1.29.145',
73
73
  install,
74
74
  Calendar,
75
75
  Message,