snail.vue 1.0.16 → 1.0.18

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.
@@ -1,23 +1,23 @@
1
1
  /* src:base\button.vue index:0 */
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:80px}.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
- /* src:base\icon.vue index:0 */
4
- .snail-icon{cursor:pointer;opacity:1}
5
3
  /* src:base\footer.vue index:0 */
6
4
  .snail-footer{align-items:center;background-color:#fff;display:flex;height:72px;padding:0 40px;width:100%}.snail-footer.start-divider{border-top:1px solid #dddfed}.snail-footer.left{justify-content:left}.snail-footer.left>.snail-button{margin-left:20px}.snail-footer.center{justify-content:center}.snail-footer.center>.snail-button:nth-child(n+2){margin-left:20px}.snail-footer.right{justify-content:right}.snail-footer.right>.snail-button{margin-right:20px}
7
5
  /* src:container\dynamic.vue index:0 */
8
6
  .snail-dynamic-error{color:red}.snail-dynamic-error>span{color:gray}
9
- /* src:container\scroll.vue index:0 */
10
- .snail-scroll{overflow:hidden}.snail-scroll.scroll-x{overflow-x:auto}.snail-scroll.scroll-y{overflow-y:auto}
11
7
  /* src:base\header.vue index:0 */
12
8
  .snail-header{align-items:center;background-color:#fff;display:flex;flex-direction:row;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>.header-slot{flex:1}.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}
13
- /* src:container\table.vue index:0 */
14
- .snail-table{display:flex;flex-direction:column}.snail-table>header.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>main.table-body>.table-row{align-items:center;display:flex}.snail-table>header.table-header>.table-col,.snail-table>main.table-body>.table-row>.table-col{align-items:center;display:inline-flex;height:100%;white-space:nowrap}.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),.snail-table.start-border>main.table-footer>.table-col:nth-child(n+2){border-left:none!important}.snail-table.start-border>main.table-body>.table-row>.table-col{border-top:none!important}
9
+ /* src:container\scroll.vue index:0 */
10
+ .snail-scroll{overflow:hidden}.snail-scroll.scroll-x{overflow-x:auto}.snail-scroll.scroll-y{overflow-y:auto}
11
+ /* src:base\icon.vue index:0 */
12
+ .snail-icon{cursor:pointer;opacity:1}
15
13
  /* src:prompt\drag-verify.vue index:0 */
16
14
  .snail-drag-verify{background:#f8f9fa;border:1px solid #dddfed;border-radius:8px;height:40px;overflow:hidden;position:relative;width:100%}.snail-drag-verify>div{height:100%;width:100%}.snail-drag-verify>.drag-progress{background-color:#0c6;transition:width .5s ease-in-out}.snail-drag-verify>.drag-handle,.snail-drag-verify>.verify-message{left:0;position:absolute;top:0;transition:left .5s ease-in-out}.snail-drag-verify>.verify-message{align-items:center;background-image:-webkit-linear-gradient(left,#666,#666 45%,#fff 50%,#666 55%,#666);color:#7e848c;display:flex;font-size:12px;font-weight:400;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-text-fill-color:transparent;animation:snail-drag-verify 2s linear infinite;-webkit-background-clip:text;background-clip:text;background-size:200% 100%}.snail-drag-verify>.drag-handle{align-items:center;background-color:#fff;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQAAAGBQUGBaWmJZWWJYWGNYWGNZWWJYWGJZWWBYWGNYWGNZWWRYWIqwlb0AAAANdFJOUwAQMMDQoFBgcCCw4ECQ8pPMAAAAP0lEQVQI12NgwATTGBgawAwRBYZwMIPRiYErAcxSFmA0AjN4HBikBcCsUgYmQxQGE0wKphhIQrSzwAyEW4EOACHhB32zIad6AAAAAElFTkSuQmCC);background-position:50%;background-repeat:no-repeat;border-right:1px solid #dddfed;cursor:move;display:flex;justify-content:center;width:40px}.snail-drag-verify.dragging>.drag-handle,.snail-drag-verify.dragging>.drag-progress{transition:none!important}.snail-drag-verify.success>.verify-message{-webkit-text-fill-color:#fff;color:#fff}.snail-drag-verify.success>.drag-handle>svg{background:#76c61d;border-radius:50%;padding:4px}@keyframes snail-drag-verify{0%{background-position:0 0}to{background-position:-200% 0}}
17
- /* src:prompt\loading.vue index:0 */
18
- .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}
15
+ /* src:container\table.vue index:0 */
16
+ .snail-table{display:flex;flex-direction:column}.snail-table>header.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>main.table-body>.table-row{align-items:center;display:flex}.snail-table>header.table-header>.table-col,.snail-table>main.table-body>.table-row>.table-col{align-items:center;display:inline-flex;height:100%;white-space:nowrap}.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),.snail-table.start-border>main.table-footer>.table-col:nth-child(n+2){border-left:none!important}.snail-table.start-border>main.table-body>.table-row>.table-col{border-top:none!important}
19
17
  /* src:prompt\no-data.vue index:0 */
20
18
  .snail-no-data{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.snail-no-data>img{height:60px;width:60px}.snail-no-data>div.hint-message{color:#babdc2;font-size:14px;font-weight:400;padding:0 10px 10px}
19
+ /* src:prompt\loading.vue index:0 */
20
+ .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}
21
21
  /* src:prompt\components\toast.vue index:0 */
22
22
  .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}
23
23
  /* src:prompt\components\confirm.vue index:0 */
@@ -1,5 +1,5 @@
1
1
  import * as vue from 'vue';
2
- import { Component, App } from 'vue';
2
+ import { Component, App, Ref, ShallowRef } from 'vue';
3
3
  import { IScope } from 'snail.core';
4
4
 
5
5
  /**
@@ -497,6 +497,22 @@ declare function onResize(el: Element, fn: (size: Readonly<{
497
497
  */
498
498
  declare function onRerect(el: Element, fn: (rect: DOMRectReadOnly) => void): IScope;
499
499
 
500
+ /**
501
+ * 响应式助手类,封装一些响应式相关的工具方法
502
+ */
503
+
504
+ /**
505
+ * 作用域ref
506
+ * - 在scope创建时,为rv变量赋 sv 值;scope销毁时赋 dv 值
507
+ * - 可和 snail.core 中的awaitInScope方法联动实现:api请求开始时显示loading,api请求结束后隐藏loading
508
+ * @param rv 响应式变量对象
509
+ * @param sv 起始值,scope创建时执行 rv.value = sv
510
+ * @param dv 销毁值,scope销毁时执行 rv.value = dv
511
+ * @param dealy 销毁时的延迟时间;单位 ms ;实现延迟设置 dv 值
512
+ * @returns 新创建的作用域对象
513
+ */
514
+ declare function scopeRef<T>(rv: Ref<T> | ShallowRef<T>, sv: T, dv: T, dealy?: number): IScope;
515
+
500
516
  /**
501
517
  * 模态弹窗显示的组件配置选项
502
518
  */
@@ -894,5 +910,5 @@ declare const components: {
894
910
  */
895
911
  declare function mount(options: ComponentMountOptions, onDestroyed?: (fn: () => void) => void): IScope;
896
912
 
897
- export { components, confirm, getSvgIcon, mount, onAppCreated, onEvent, onInterval, onRerect, onResize, onTimeout, openDialog, toast, triggerAppCreated, useScopes };
913
+ export { components, confirm, getSvgIcon, mount, onAppCreated, onEvent, onInterval, onRerect, onResize, onTimeout, openDialog, scopeRef, toast, triggerAppCreated, useScopes };
898
914
  export type { ButtonOptions, ComponentMountOptions, ComponentOptions, ConfirmHandle, ConfirmOptions, Dialog, DialogHandle, DialogOpenResult, DialogOptions, DragVerifyInfo, DragVerifyOptions, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, IconOptions, IconPathOptions, IconType, LoadingOptions, NoDataOptions, ScrollEvents, ScrollOptions, ScrollTouchType, TableColOptions, TableOptions, TableRowOptions, TableStyleOptions, ToastHandle, ToastOptions };
package/dist/snail.vue.js CHANGED
@@ -306,6 +306,16 @@ function onRerect(el, fn) {
306
306
  };
307
307
  }
308
308
 
309
+ function scopeRef(rv, sv, dv, dealy) {
310
+ rv.value = sv;
311
+ const destroy = () => rv.value = dv;
312
+ return dealy > 0 ? {
313
+ destroy: () => setTimeout(destroy, dealy)
314
+ } : {
315
+ destroy
316
+ };
317
+ }
318
+
309
319
  var _sfc_main$a = defineComponent({
310
320
  ...{
311
321
  name: "Loading",
@@ -1029,4 +1039,4 @@ function mount(options, onDestroyed) {
1029
1039
  };
1030
1040
  }
1031
1041
 
1032
- export { components, confirm, getSvgIcon, mount, onAppCreated, onEvent, onInterval, onRerect, onResize, onTimeout, openDialog, toast, triggerAppCreated, useScopes };
1042
+ export { components, confirm, getSvgIcon, mount, onAppCreated, onEvent, onInterval, onRerect, onResize, onTimeout, openDialog, scopeRef, toast, triggerAppCreated, useScopes };
@@ -305,6 +305,16 @@
305
305
  };
306
306
  }
307
307
 
308
+ function scopeRef(rv, sv, dv, dealy) {
309
+ rv.value = sv;
310
+ const destroy = () => rv.value = dv;
311
+ return dealy > 0 ? {
312
+ destroy: () => setTimeout(destroy, dealy)
313
+ } : {
314
+ destroy
315
+ };
316
+ }
317
+
308
318
  var _sfc_main$a = vue.defineComponent({
309
319
  ...{
310
320
  name: "Loading",
@@ -1039,6 +1049,7 @@
1039
1049
  exports.onResize = onResize;
1040
1050
  exports.onTimeout = onTimeout;
1041
1051
  exports.openDialog = openDialog;
1052
+ exports.scopeRef = scopeRef;
1042
1053
  exports.toast = toast;
1043
1054
  exports.triggerAppCreated = triggerAppCreated;
1044
1055
  exports.useScopes = useScopes;
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.16",
6
+ "version": "1.0.18",
7
7
  "type": "module",
8
8
  "main": "dist/snail.vue.js",
9
9
  "module": "dist/snail.vue.js",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "vue": "^3.5.14",
18
- "snail.core": ">=1.2.11"
18
+ "snail.core": ">=1.2.12"
19
19
  },
20
20
  "devDependencies": {
21
21
  "vue-tsc": "^2.2.10",