snail.vue 1.0.23 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/snail.vue.js CHANGED
@@ -1,7 +1,7 @@
1
1
  //@ sourceURL=/snail.vue.js
2
2
  import { defineComponent, createElementBlock, openBlock, normalizeClass, renderSlot, createTextVNode, createBlock, createCommentVNode, toDisplayString, createElementVNode, normalizeProps, guardReactiveProps, unref, computed, mergeProps, mergeModels, useModel, Transition, withCtx, ref, shallowRef, watch, onErrorCaptured, onActivated, onDeactivated, Fragment, resolveDynamicComponent, createSlots, renderList, useTemplateRef, onUnmounted, createVNode, normalizeStyle, TransitionGroup, withModifiers, createApp, onMounted } from 'vue';
3
- import { tidyString, throwError, mustString, style, mustFunction, useScope, isStringNotEmpty, isObject, script, delay, getMessage, useHook, mustObject, defer, newId, isFunction } from 'snail.core';
4
- import { useAnimation, style as style$1, useObserver } from 'snail.view';
3
+ import { tidyString, throwError, mustString, mustFunction, useScope, isStringNotEmpty, isObject, script, delay, getMessage, useHook, mustObject, defer, newId, isFunction } from 'snail.core';
4
+ import { link, useAnimation, style, useObserver } from 'snail.view';
5
5
 
6
6
  var _sfc_main$h = defineComponent({
7
7
  ...{
@@ -135,6 +135,10 @@ var _sfc_main$f = defineComponent({
135
135
  }
136
136
  });
137
137
 
138
+ var addLink = href => setTimeout(link.register, 0, href);
139
+
140
+ addLink("/styles/snail.vue.vue.css");
141
+
138
142
  const _hoisted_1$8 = ["textContent"];
139
143
  var _sfc_main$e = defineComponent({
140
144
  ...{
@@ -190,10 +194,6 @@ var _sfc_main$e = defineComponent({
190
194
  }
191
195
  });
192
196
 
193
- var addLink = href => setTimeout(style.register, 0, href);
194
-
195
- addLink("/styles/snail.vue.vue.css");
196
-
197
197
  var _sfc_main$d = defineComponent({
198
198
  ...{
199
199
  name: "Switch",
@@ -393,6 +393,10 @@ const _hoisted_4$1 = {
393
393
  class: "status"
394
394
  };
395
395
  const _hoisted_5$1 = ["title"];
396
+ const _hoisted_6 = {
397
+ class: "fold-body",
398
+ ref: "foldBody"
399
+ };
396
400
  var _sfc_main$a = defineComponent({
397
401
  ...{
398
402
  name: "Fold",
@@ -420,18 +424,42 @@ var _sfc_main$a = defineComponent({
420
424
  const emit = __emit;
421
425
  const animationScope = useAnimation();
422
426
  const status = useModel(__props, "status");
423
- const statusWatch = watch(status, calcFoldStyle);
427
+ const statusWatch = watch(status, updateFoldStyle);
424
428
  const statusIcon = getFoldStatusDraw();
425
- const foldBodyRef = useTemplateRef("foldBodyRef");
426
- function calcFoldStyle() {
429
+ const foldStatusSpanRef = useTemplateRef("foldStatusSpan");
430
+ const foldBodyRef = useTemplateRef("foldBody");
431
+ function updateFoldStyle() {
432
+ const isExpand = status.value == "expand";
433
+ if (foldStatusSpanRef.value) {
434
+ animationScope.transition(foldStatusSpanRef.value, {
435
+ from: {
436
+ transition: "transform 0.2s ease",
437
+ transform: isExpand ? "rotateZ(180deg)" : "rotate(0)"
438
+ },
439
+ to: {
440
+ transform: isExpand ? "rotate(0)" : "rotateZ(180deg)"
441
+ },
442
+ end: {
443
+ transform: isExpand ? "" : "rotateZ(180deg)"
444
+ }
445
+ });
446
+ }
427
447
  if (foldBodyRef.value) {
428
448
  const minHeight = 32;
429
449
  const maxHeight = minHeight + foldBodyRef.value.getBoundingClientRect().height;
430
- animationScope.roll(foldBodyRef.value, "vertical", {
431
- start: `${status.value == "expand" ? minHeight : maxHeight}px`,
432
- target: `${status.value == "expand" ? maxHeight : minHeight}px`,
433
- time: 200,
434
- clear: true
450
+ animationScope.transition(foldBodyRef.value.parentElement, {
451
+ from: {
452
+ transition: "height 0.2s ease",
453
+ overflow: "hidden",
454
+ height: `${isExpand ? minHeight : maxHeight}px`
455
+ },
456
+ to: {
457
+ height: `${isExpand ? maxHeight : minHeight}px`
458
+ },
459
+ end: {
460
+ overflow: isExpand ? "" : "hidden",
461
+ height: isExpand ? "" : `${minHeight}px`
462
+ }
435
463
  });
436
464
  }
437
465
  }
@@ -463,16 +491,13 @@ var _sfc_main$a = defineComponent({
463
491
  class: "subtitle",
464
492
  textContent: toDisplayString(props.subtitle)
465
493
  }, null, 8, _hoisted_3$2)) : createCommentVNode("", true), props.disable != true ? (openBlock(), createElementBlock("div", _hoisted_4$1, [createElementVNode("span", {
466
- title: status.value == "expand" ? "收起" : "展开"
494
+ title: status.value == "expand" ? "收起" : "展开",
495
+ ref: "foldStatusSpan"
467
496
  }, [createVNode(_sfc_main$f, {
468
497
  type: "custom",
469
498
  draw: unref(statusIcon),
470
499
  onClick: onStatusClick
471
- }, null, 8, ["draw"])], 8, _hoisted_5$1)])) : createCommentVNode("", true)])]), createElementVNode("div", {
472
- class: "fold-body",
473
- ref_key: "foldBodyRef",
474
- ref: foldBodyRef
475
- }, [renderSlot(_ctx.$slots, "default")], 512)], 2);
500
+ }, null, 8, ["draw"])], 8, _hoisted_5$1)])) : createCommentVNode("", true)])]), createElementVNode("div", _hoisted_6, [renderSlot(_ctx.$slots, "default")], 512)], 2);
476
501
  };
477
502
  }
478
503
  });
@@ -757,7 +782,7 @@ const initVueApp = (() => {
757
782
  })();
758
783
 
759
784
  function getTitleStyle(options, isFlex) {
760
- return options && options.titleStyle ? style$1.build({
785
+ return options && options.titleStyle ? style.build({
761
786
  ...options.titleStyle,
762
787
  width: options.titleStyle
763
788
  }, isFlex) : Object.create(null);
@@ -391,6 +391,10 @@
391
391
  class: "status"
392
392
  };
393
393
  const _hoisted_5$1 = ["title"];
394
+ const _hoisted_6 = {
395
+ class: "fold-body",
396
+ ref: "foldBody"
397
+ };
394
398
  var _sfc_main$a = vue.defineComponent({
395
399
  ...{
396
400
  name: "Fold",
@@ -418,18 +422,42 @@
418
422
  const emit = __emit;
419
423
  const animationScope = snail_view.useAnimation();
420
424
  const status = vue.useModel(__props, "status");
421
- const statusWatch = vue.watch(status, calcFoldStyle);
425
+ const statusWatch = vue.watch(status, updateFoldStyle);
422
426
  const statusIcon = getFoldStatusDraw();
423
- const foldBodyRef = vue.useTemplateRef("foldBodyRef");
424
- function calcFoldStyle() {
427
+ const foldStatusSpanRef = vue.useTemplateRef("foldStatusSpan");
428
+ const foldBodyRef = vue.useTemplateRef("foldBody");
429
+ function updateFoldStyle() {
430
+ const isExpand = status.value == "expand";
431
+ if (foldStatusSpanRef.value) {
432
+ animationScope.transition(foldStatusSpanRef.value, {
433
+ from: {
434
+ transition: "transform 0.2s ease",
435
+ transform: isExpand ? "rotateZ(180deg)" : "rotate(0)"
436
+ },
437
+ to: {
438
+ transform: isExpand ? "rotate(0)" : "rotateZ(180deg)"
439
+ },
440
+ end: {
441
+ transform: isExpand ? "" : "rotateZ(180deg)"
442
+ }
443
+ });
444
+ }
425
445
  if (foldBodyRef.value) {
426
446
  const minHeight = 32;
427
447
  const maxHeight = minHeight + foldBodyRef.value.getBoundingClientRect().height;
428
- animationScope.roll(foldBodyRef.value, "vertical", {
429
- start: `${status.value == "expand" ? minHeight : maxHeight}px`,
430
- target: `${status.value == "expand" ? maxHeight : minHeight}px`,
431
- time: 200,
432
- clear: true
448
+ animationScope.transition(foldBodyRef.value.parentElement, {
449
+ from: {
450
+ transition: "height 0.2s ease",
451
+ overflow: "hidden",
452
+ height: `${isExpand ? minHeight : maxHeight}px`
453
+ },
454
+ to: {
455
+ height: `${isExpand ? maxHeight : minHeight}px`
456
+ },
457
+ end: {
458
+ overflow: isExpand ? "" : "hidden",
459
+ height: isExpand ? "" : `${minHeight}px`
460
+ }
433
461
  });
434
462
  }
435
463
  }
@@ -461,16 +489,13 @@
461
489
  class: "subtitle",
462
490
  textContent: vue.toDisplayString(props.subtitle)
463
491
  }, null, 8, _hoisted_3$2)) : vue.createCommentVNode("", true), props.disable != true ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [vue.createElementVNode("span", {
464
- title: status.value == "expand" ? "收起" : "展开"
492
+ title: status.value == "expand" ? "收起" : "展开",
493
+ ref: "foldStatusSpan"
465
494
  }, [vue.createVNode(_sfc_main$f, {
466
495
  type: "custom",
467
496
  draw: vue.unref(statusIcon),
468
497
  onClick: onStatusClick
469
- }, null, 8, ["draw"])], 8, _hoisted_5$1)])) : vue.createCommentVNode("", true)])]), vue.createElementVNode("div", {
470
- class: "fold-body",
471
- ref_key: "foldBodyRef",
472
- ref: foldBodyRef
473
- }, [vue.renderSlot(_ctx.$slots, "default")], 512)], 2);
498
+ }, null, 8, ["draw"])], 8, _hoisted_5$1)])) : vue.createCommentVNode("", true)])]), vue.createElementVNode("div", _hoisted_6, [vue.renderSlot(_ctx.$slots, "default")], 512)], 2);
474
499
  };
475
500
  }
476
501
  });
@@ -2,22 +2,24 @@
2
2
  .snail-button{align-items:center;border-radius:2px;cursor:pointer;display:inline-flex;font-size:14px;justify-content:center;white-space:nowrap}.snail-button.max{height:40px;width:120px}.snail-button.middle{height:32px;width:90px}.snail-button.normal{height:28px;width:54px}.snail-button.small{height:20px;width:30px}.snail-button.primary{background-color:#5ca3ff;color:#fff}.snail-button.default{background-color:#fff;border:1px solid #dddfed;color:#2e2f33}.snail-button.link{color:#4c9aff}
3
3
  /* src:base\footer.vue index:0 */
4
4
  .snail-footer{align-items:center;background-color:#fff;display:flex;flex-shrink:0;height:72px;padding:0 40px;width:100%}.snail-footer>.snail-button:nth-child(n+2){margin-left:20px}.snail-footer.start-divider{border-top:1px solid #dddfed}.snail-footer.left{justify-content:left}.snail-footer.center{justify-content:center}.snail-footer.right{justify-content:right}
5
+ /* src:base\switch.vue index:0 */
6
+ .snail-switch{border-radius:10px 10px 10px 10px;cursor:pointer;height:20px!important;overflow:hidden;position:relative;width:36px!important}.snail-switch>div{height:100%;width:100%}.snail-switch>div.on{background-color:#5ca3ff}.snail-switch>div.off{background-color:#c4c8cc;position:absolute;transition:left .2s ease}.snail-switch>div.status{background:#fff;border-radius:10px 10px 10px 10px;height:16px;position:absolute;top:2px;transition:left .2s ease;width:16px}.snail-switch.on>div.off{left:100%;top:0}.snail-switch.on>div.status{left:calc(100% - 18px)}.snail-switch.off>div.off{left:0;top:0}.snail-switch.off>div.status{left:2px}.snail-switch.readonly{cursor:default}
5
7
  /* src:base\header.vue index:0 */
6
8
  .snail-header{align-items:center;background-color:#fff;display:flex;flex-direction:row;flex-shrink:0;position:relative;width:100%}.snail-header>.header-title{color:#2e3033;flex:1;line-height:48px;overflow:hidden;padding-left:24px;text-overflow:ellipsis;white-space:nowrap}.snail-header>.header-title.center{text-align:center}.snail-header>.header-title.right{text-align:right}.snail-header.start-divider{border-bottom:1px solid #dddfed}.snail-header.page{height:48px}.snail-header.page>.header-title{font-size:16px;font-weight:700}.snail-header.page>.close-icon{margin-right:18px}.snail-header.dialog{height:64px;padding-top:16px}.snail-header.dialog>.header-title{font-size:20px}.snail-header.dialog>.close-icon{position:absolute;right:8px;top:8px}
7
9
  /* src:base\icon.vue index:0 */
8
10
  .snail-icon{cursor:pointer;opacity:1}
9
11
  /* src:container\dynamic.vue index:0 */
10
12
  .snail-dynamic-error{color:red}.snail-dynamic-error>span{color:gray}
11
- /* src:base\switch.vue index:0 */
12
- .snail-switch{border-radius:10px 10px 10px 10px;cursor:pointer;height:20px!important;overflow:hidden;position:relative;width:36px!important}.snail-switch>div{height:100%;width:100%}.snail-switch>div.on{background-color:#5ca3ff}.snail-switch>div.off{background-color:#c4c8cc;position:absolute;transition:left .2s ease}.snail-switch>div.status{background:#fff;border-radius:10px 10px 10px 10px;height:16px;position:absolute;top:2px;transition:left .2s ease;width:16px}.snail-switch.on>div.off{left:100%;top:0}.snail-switch.on>div.status{left:calc(100% - 18px)}.snail-switch.off>div.off{left:0;top:0}.snail-switch.off>div.status{left:2px}.snail-switch.readonly{cursor:default}
13
13
  /* src:container\fold.vue index:0 */
14
- .snail-fold{flex-shrink:0;transition:height .2s ease}.snail-fold>div.fold-header{align-items:center;display:flex;height:32px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.snail-fold>div.fold-header:before{background-color:#2c97fb;content:"";height:18px;left:0;position:absolute;top:7px;width:4px}.snail-fold>div.fold-header>.subtitle,.snail-fold>div.fold-header>.title{overflow:hidden;white-space:nowrap}.snail-fold>div.fold-header>.title{color:#2e3033;font-size:14px;font-weight:700;padding-left:20px}.snail-fold>div.fold-header>.subtitle{color:#8a9099;font-size:13px}.snail-fold>div.fold-header>div.status{display:flex;flex:1;justify-content:right;justify-self:right}.snail-fold>div.fold-header>div.status>span{transition:transform .2s ease}.snail-fold>div.fold-body{padding-left:20px}.snail-fold.expand>div.fold-header>div.status>span{transform:rotate(0deg)}.snail-fold.fold{height:32px;overflow:hidden}.snail-fold.fold>div.fold-header>div.status>span{transform:rotate(180deg)}
15
- /* src:container\components\table-col.vue index:0 */
16
- .table-col{align-items:center;display:inline-flex;height:100%;white-space:nowrap}.table-col.left{justify-content:left}.table-col.center{justify-content:center}.table-col.right{justify-content:right}
14
+ .snail-fold{flex-shrink:0}.snail-fold>div.fold-header{align-items:center;display:flex;height:32px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.snail-fold>div.fold-header:before{background-color:#2c97fb;content:"";height:18px;left:0;position:absolute;top:7px;width:4px}.snail-fold>div.fold-header>.subtitle,.snail-fold>div.fold-header>.title{overflow:hidden;white-space:nowrap}.snail-fold>div.fold-header>.title{color:#2e3033;font-size:14px;font-weight:700;padding-left:20px}.snail-fold>div.fold-header>.subtitle{color:#8a9099;font-size:13px}.snail-fold>div.fold-header>div.status{display:flex;flex:1;justify-content:right;justify-self:right}.snail-fold>div.fold-body{padding-left:20px}
15
+ /* src:container\scroll.vue index:0 */
16
+ .snail-scroll{overflow:hidden}.snail-scroll.scroll-x{overflow-x:auto}.snail-scroll.scroll-y{overflow-y:auto}
17
17
  /* src:container\table.vue index:0 */
18
18
  .snail-table{display:flex;flex-direction:column}.snail-table>footer.table-footer,.snail-table>header.table-header{align-items:center;display:flex;flex-shrink:0;width:100%}.snail-table>header.table-header{position:sticky!important;top:0}.snail-table>main.table-body{flex:1;width:100%}.snail-table.start-border>footer.table-footer>.table-col:nth-child(n+2),.snail-table.start-border>header.table-header>.table-col:nth-child(n+2),.snail-table.start-border>main.table-body>.table-row>.table-col:nth-child(n+2){border-left:none!important}.snail-table.start-border>footer.table-footer>.table-col,.snail-table.start-border>main.table-body>.table-row>.table-col{border-top:none!important}
19
19
  /* src:container\components\table-row.vue index:0 */
20
20
  .table-row{align-items:center;display:flex;min-width:100%}
21
+ /* src:container\components\table-col.vue index:0 */
22
+ .table-col{align-items:center;display:inline-flex;height:100%;white-space:nowrap}.table-col.left{justify-content:left}.table-col.center{justify-content:center}.table-col.right{justify-content:right}
21
23
  /* src:form\input.vue index:0 */
22
24
  .snail-input{display:inline-flex;min-height:34px}.snail-input>.input-title{flex-shrink:0;font-size:14px;padding-top:6px}.snail-input>.input-title>span.text{color:#2e3033}.snail-input>.input-title>span.required{color:#f74b4b;margin-left:2px}.snail-input>.input-body{align-self:start;display:flex;flex:1;height:32px}.snail-input>.input-body>input{border:1px solid #dddfed;color:#2e3033;flex:1;font-size:14px;font-weight:400;padding:0 10px;text-overflow:ellipsis}.snail-input>.input-body>input:focus{border:1px solid #3292ea}.snail-input>.input-body>span{background-color:red;flex-shrink:0}.snail-input.readonly>div.input-body>input:focus{border:1px solid #dddfed}
23
25
  /* src:prompt\drag-verify.vue index:0 */
@@ -26,11 +28,9 @@
26
28
  .snail-empty{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.snail-empty>img{height:60px;width:60px}.snail-empty>div.message{color:#babdc2;font-size:14px;font-weight:400;padding:0 10px 10px}
27
29
  /* src:prompt\loading.vue index:0 */
28
30
  .snail-loading{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10000}.snail-loading.show-mask{background-color:rgba(0,0,0,.15)}.snail-loading:after,.snail-loading:before{animation:snail-loading-stretch 1s ease-in-out infinite;border-radius:50%;content:"";display:block;display:inline-block;height:10px;left:50%;margin-left:-18px;margin-top:-6px;position:absolute;top:50%;width:10px}.snail-loading:before{background-color:#279bf1}.snail-loading:after{animation-delay:-.5s;background:#64d214;margin-left:0;margin-right:-18px}@keyframes snail-loading-stretch{0%,to{transform:scale(1)}50%{transform:scale(2)}}.snail-loading-enter-active,.snail-loading-leave-active{transition:opacity .5s ease-in-out}.snail-loading-enter-from,.snail-loading-leave-to{opacity:0}
29
- /* src:container\scroll.vue index:0 */
30
- .snail-scroll{overflow:hidden}.snail-scroll.scroll-x{overflow-x:auto}.snail-scroll.scroll-y{overflow-y:auto}
31
- /* src:container\components\dialog-wrapper.vue index:0 */
32
- .snail-dialog{align-items:center;bottom:0;display:flex;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0}.snail-dialog:before{background-color:rgba(24,27,33,.45);content:"";height:100%;position:absolute;width:100%}.snail-dialog>.dialog-body{background-color:#fff;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.3);box-sizing:border-box;position:relative}.snail-dialog.unactive:before{display:none!important}.snail-dialog.unactive>.dialog-body{box-shadow:0 0 4px rgba(0,0,0,.3)}.snail-dialog-enter-active,.snail-dialog-leave-active{transition:scale .1s ease-in-out,opacity .1s ease}.snail-dialog-enter-from{opacity:0;scale:.4}.snail-dialog-leave-to{opacity:0;scale:0}
31
+ /* src:prompt\components\toast.vue index:0 */
32
+ .snail-toast{background:rgba(0,0,0,.7);border-radius:5px;color:#fff;display:flex;max-height:200px;max-width:500px;min-width:200px;opacity:.2;overflow:hidden;padding:20px 30px 20px 20px;position:fixed;transition:opacity .2s ease;z-index:99999}.snail-toast.show-toast{opacity:1}.snail-toast>svg.close-icon{position:absolute;right:10px;top:12px}.snail-toast>div.icon{align-items:center;align-self:center;background:hsla(0,0%,100%,.15);border-radius:50%;display:flex;height:26px;justify-content:center;margin-right:6px;width:26px}.snail-toast>div.icon>svg{background:#fff;border-radius:50%;cursor:none!important}.snail-toast>div.message{flex:1;line-height:24px;overflow:hidden;word-break:break-all}
33
33
  /* src:prompt\components\confirm.vue index:0 */
34
34
  .snail-confirm{background-color:#fff;border-radius:4px;box-sizing:border-box;color:#2e2f33;display:flex;flex-direction:column;max-height:350px;max-width:548px;min-width:348px}.snail-confirm>main{flex:1;font-size:14px;margin:20px 40px;overflow:auto;word-wrap:break-word;box-sizing:border-box}
35
- /* src:prompt\components\toast.vue index:0 */
36
- .snail-toast{background:rgba(0,0,0,.7);border-radius:5px;color:#fff;display:flex;max-height:200px;max-width:500px;min-width:200px;opacity:.2;overflow:hidden;padding:20px 30px 20px 20px;position:fixed;transition:opacity .2s ease;z-index:99999}.snail-toast.show-toast{opacity:1}.snail-toast>svg.close-icon{position:absolute;right:10px;top:12px}.snail-toast>div.icon{align-items:center;align-self:center;background:hsla(0,0%,100%,.15);border-radius:50%;display:flex;height:26px;justify-content:center;margin-right:6px;width:26px}.snail-toast>div.icon>svg{background:#fff;border-radius:50%;cursor:none!important}.snail-toast>div.message{flex:1;line-height:24px;overflow:hidden;word-break:break-all}
35
+ /* src:container\components\dialog-wrapper.vue index:0 */
36
+ .snail-dialog{align-items:center;bottom:0;display:flex;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0}.snail-dialog:before{background-color:rgba(24,27,33,.45);content:"";height:100%;position:absolute;width:100%}.snail-dialog>.dialog-body{background-color:#fff;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.3);box-sizing:border-box;position:relative}.snail-dialog.unactive:before{display:none!important}.snail-dialog.unactive>.dialog-body{box-shadow:0 0 4px rgba(0,0,0,.3)}.snail-dialog-enter-active,.snail-dialog-leave-active{transition:scale .1s ease-in-out,opacity .1s ease}.snail-dialog-enter-from{opacity:0;scale:.4}.snail-dialog-leave-to{opacity:0;scale:0}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "依赖【snail】,基于vue封装常用UI组件",
4
4
  "author": "snail_dev@163.com",
5
5
  "license": "MIT",
6
- "version": "1.0.23",
6
+ "version": "1.0.24",
7
7
  "type": "module",
8
8
  "main": "dist/snail.vue.js",
9
9
  "module": "dist/snail.vue.js",
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "vue": "^3.5.14",
18
- "snail.core": ">=2.0.3",
19
- "snail.view": ">=1.0.2"
18
+ "snail.core": ">=2.0.4",
19
+ "snail.view": ">=1.0.4"
20
20
  },
21
21
  "devDependencies": {
22
22
  "vue-tsc": "^2.2.10",