snail.vue 1.0.31 → 1.0.32

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.
@@ -461,7 +461,7 @@ type ButtonOptions = {
461
461
  */
462
462
  interface IReactiveManager {
463
463
  /**
464
- * 【过渡】变量值
464
+ * 响应式【过渡】变量值
465
465
  * - 通过设置 rv.value 的值来实现.value值过渡
466
466
  * - 执行顺序 from、to
467
467
  * - 开始时,设置 rv.value 值为 from;延迟time时间后,强制销毁scope
@@ -476,7 +476,7 @@ interface IReactiveManager {
476
476
  to: T;
477
477
  }, time: number): IScope;
478
478
  /**
479
- * 【任务】响应式
479
+ * 响应式【加载】任务
480
480
  * - 任务运行时,设置loading.value=true
481
481
  * - 任务完成后,设置loading.value=false
482
482
  * - 可通过delay值,延迟执行 loading.value=false 操作
@@ -486,12 +486,16 @@ interface IReactiveManager {
486
486
  * @param delay 延迟时间,单位ms;不传则不延迟
487
487
  * @returns 任务自身
488
488
  */
489
- task<T, E>(task: Promise<T>, loading: ShallowRef<boolean> | Ref<boolean>, delay: number): Promise<{
489
+ load<T, E>(task: Promise<T>, loading: ShallowRef<boolean> | Ref<boolean>, delay: number): Promise<{
490
490
  success: boolean;
491
491
  data?: T;
492
492
  error?: E;
493
493
  }>;
494
494
  }
495
+ /**
496
+ * 响应式变量
497
+ */
498
+ type ReactiveVar<T> = ShallowRef<T> | Ref<T>;
495
499
 
496
500
  /**
497
501
  * 使用【响应式管理器】
@@ -1074,4 +1078,4 @@ declare const components: {
1074
1078
  };
1075
1079
 
1076
1080
  export { components, getSvgIcon, mount, onAppCreated, triggerAppCreated, usePopup, useReactive };
1077
- export type { ButtonOptions, ComponentMountOptions, ComponentOptions, ConfirmOptions, DailogExtend, DialogHandle, DialogOptions, DragVerifyInfo, DragVerifyOptions, EmptyOptions, FoldEvents, FoldOptions, FoldStatus, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, IPopupManager, IReactiveManager, IconOptions, IconPathOptions, IconType, InputEvents, InputOptions, LoadingOptions, PopupDescriptor, PopupExtend, PopupFlagOptions, PopupHandle, PopupOptions, PopupStatus, ScrollEvents, ScrollOptions, ScrollTouchType, SwitchEvents, SwitchOptions, TableColOptions, TableOptions, TableRowOptions, ToastOptions };
1081
+ export type { ButtonOptions, ComponentMountOptions, ComponentOptions, ConfirmOptions, DailogExtend, DialogHandle, DialogOptions, DragVerifyInfo, DragVerifyOptions, EmptyOptions, FoldEvents, FoldOptions, FoldStatus, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, IPopupManager, IReactiveManager, IconOptions, IconPathOptions, IconType, InputEvents, InputOptions, LoadingOptions, PopupDescriptor, PopupExtend, PopupFlagOptions, PopupHandle, PopupOptions, PopupStatus, ReactiveVar, ScrollEvents, ScrollOptions, ScrollTouchType, SwitchEvents, SwitchOptions, TableColOptions, TableOptions, TableRowOptions, ToastOptions };
package/dist/snail.vue.js CHANGED
@@ -1,6 +1,6 @@
1
1
  //@ sourceURL=/snail.vue.js
2
2
  import { defineComponent, createElementBlock, openBlock, normalizeClass, renderSlot, createTextVNode, createBlock, createCommentVNode, toDisplayString, createElementVNode, normalizeProps, guardReactiveProps, unref, mergeModels, useModel, Transition, withCtx, ref, shallowRef, watch, onErrorCaptured, onActivated, onDeactivated, Fragment, resolveDynamicComponent, mergeProps, createSlots, renderList, useTemplateRef, onUnmounted, createVNode, computed, normalizeStyle, createApp, onMounted, withModifiers, getCurrentScope, onScopeDispose } from 'vue';
3
- import { tidyString, throwError, mustString, useScopes, mountScope, throwIfFalse, isPromise, isObject, mustFunction, useScope, isStringNotEmpty, script, delay, getMessage, mustObject, isFunction, useHook, defer, useAsyncScope, onMountScope } from 'snail.core';
3
+ import { tidyString, throwError, mustString, useScopes, mountScope, throwIfFalse, isPromise, wait, isObject, mustFunction, useScope, isStringNotEmpty, script, delay, mustObject, isFunction, useHook, defer, useAsyncScope, onMountScope } from 'snail.core';
4
4
  import { link, useAnimation, css, useObserver } from 'snail.view';
5
5
 
6
6
  var _sfc_main$j = defineComponent({
@@ -251,23 +251,17 @@ function useReactive() {
251
251
  clearTimeout(endId);
252
252
  });
253
253
  }
254
- function task(task2, loading, delay) {
255
- throwIfFalse(isPromise(task2), "task: task must be a Promise.");
256
- loading.value = true;
257
- task2.finally(function () {
258
- delay > 0 ? setTimeout(() => loading.value = false, delay) : loading.value = false;
254
+ function load(task, status, delay) {
255
+ throwIfFalse(isPromise(task), "task: task must be a Promise.");
256
+ status.value = true;
257
+ task.finally(function () {
258
+ delay > 0 ? setTimeout(() => status.value = false, delay) : status.value = false;
259
259
  });
260
- return task2.then(data => ({
261
- success: true,
262
- data
263
- }), error => ({
264
- success: false,
265
- error
266
- }));
260
+ return wait(task);
267
261
  }
268
262
  const manager = mountScope({
269
263
  transition,
270
- task
264
+ load
271
265
  });
272
266
  manager.onDestroy(scopes.destroy);
273
267
  return Object.freeze(manager);
@@ -360,7 +354,7 @@ var _sfc_main$d = defineComponent({
360
354
  isObject(comp) || isStringNotEmpty(comp) ? dynamicComponent.value = comp : dynamicError.value = `load component failed:return nulll or undefined. url:${__props.url}.`;
361
355
  } catch (ex) {
362
356
  dynamicComponent.value = void 0;
363
- dynamicError.value = getMessage(ex);
357
+ dynamicError.value = ex.message;
364
358
  }
365
359
  } else {
366
360
  dynamicError.value = "load error: name component、url are all empty.";
@@ -811,7 +805,7 @@ function checkPopup(options) {
811
805
  throwIfFalse(isStringNotEmpty(options.name) || isObject(options.component) || isStringNotEmpty(options.url), "checkPopup: options.name/component/url cannot be invalid at same time.");
812
806
  options.zIndex > 0 || (options.zIndex = DEFAULT_ZINDEX);
813
807
  } catch (ex) {
814
- return getMessage(ex);
808
+ return ex.message;
815
809
  }
816
810
  }
817
811
  function openPopup(container, options, extOptions) {
@@ -253,23 +253,17 @@
253
253
  clearTimeout(endId);
254
254
  });
255
255
  }
256
- function task(task2, loading, delay) {
257
- snail_core.throwIfFalse(snail_core.isPromise(task2), "task: task must be a Promise.");
258
- loading.value = true;
259
- task2.finally(function () {
260
- delay > 0 ? setTimeout(() => loading.value = false, delay) : loading.value = false;
256
+ function load(task, status, delay) {
257
+ snail_core.throwIfFalse(snail_core.isPromise(task), "task: task must be a Promise.");
258
+ status.value = true;
259
+ task.finally(function () {
260
+ delay > 0 ? setTimeout(() => status.value = false, delay) : status.value = false;
261
261
  });
262
- return task2.then(data => ({
263
- success: true,
264
- data
265
- }), error => ({
266
- success: false,
267
- error
268
- }));
262
+ return snail_core.wait(task);
269
263
  }
270
264
  const manager = snail_core.mountScope({
271
265
  transition,
272
- task
266
+ load
273
267
  });
274
268
  manager.onDestroy(scopes.destroy);
275
269
  return Object.freeze(manager);
@@ -362,7 +356,7 @@
362
356
  snail_core.isObject(comp) || snail_core.isStringNotEmpty(comp) ? dynamicComponent.value = comp : dynamicError.value = `load component failed:return nulll or undefined. url:${__props.url}.`;
363
357
  } catch (ex) {
364
358
  dynamicComponent.value = void 0;
365
- dynamicError.value = snail_core.getMessage(ex);
359
+ dynamicError.value = ex.message;
366
360
  }
367
361
  } else {
368
362
  dynamicError.value = "load error: name component、url are all empty.";
@@ -813,7 +807,7 @@
813
807
  snail_core.throwIfFalse(snail_core.isStringNotEmpty(options.name) || snail_core.isObject(options.component) || snail_core.isStringNotEmpty(options.url), "checkPopup: options.name/component/url cannot be invalid at same time.");
814
808
  options.zIndex > 0 || (options.zIndex = DEFAULT_ZINDEX);
815
809
  } catch (ex) {
816
- return snail_core.getMessage(ex);
810
+ return ex.message;
817
811
  }
818
812
  }
819
813
  function openPopup(container, options, extOptions) {
@@ -1,33 +1,33 @@
1
1
  /* src:base\footer.vue index:0 */
2
2
  .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}
3
- /* src:base\button.vue index:0 */
4
- .snail-button{align-items:center;border-radius:2px;cursor:pointer;display:flex;display:inline-flex;font-size:14px;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;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}
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}
7
3
  /* src:base\header.vue index:0 */
8
4
  .snail-header{align-items:center;background-color:#fff;display:flex;flex-shrink:0;position:relative;width:100%}.snail-header>.header-title{color:#2e3033;flex:1;line-height:48px;overflow:hidden;padding:0 30px;text-overflow:ellipsis;white-space:nowrap;width:100%}.snail-header>.header-title.left{text-align:left}.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}
9
- /* src:container\fold.vue index:0 */
10
- .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;text-overflow:ellipsis;white-space:nowrap;width:100%}.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{align-items:right;display:flex;flex:1;justify-content:right}.snail-fold>div.fold-body{padding-left:20px}
11
5
  /* src:base\icon.vue index:0 */
12
6
  .snail-icon{cursor:pointer;opacity:1}
7
+ /* src:base\button.vue index:0 */
8
+ .snail-button{align-items:center;border-radius:2px;cursor:pointer;display:flex;display:inline-flex;font-size:14px;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;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}
9
+ /* src:base\switch.vue index:0 */
10
+ .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
11
  /* src:container\scroll.vue index:0 */
14
12
  .snail-scroll{overflow:hidden}.snail-scroll.scroll-x{overflow-x:auto}.snail-scroll.scroll-y{overflow-y:auto}
15
- /* src:container\dynamic.vue index:0 */
16
- .snail-dynamic-error{color:red}.snail-dynamic-error>span{color:gray}
13
+ /* src:container\fold.vue index:0 */
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;text-overflow:ellipsis;white-space:nowrap;width:100%}.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{align-items:right;display:flex;flex:1;justify-content:right}.snail-fold>div.fold-body{padding-left:20px}
17
15
  /* src:container\table.vue index:0 */
18
16
  .snail-table{display:flex;flex-direction:column}.snail-table>div.table-footer,.snail-table>div.table-header{align-items:center;display:flex;flex-shrink:0;width:100%}.snail-table>div.table-header{position:sticky!important;top:0}.snail-table>div.table-body{flex:1;width:100%}.snail-table.start-border>div.table-body>.table-row>.table-col:nth-child(n+2),.snail-table.start-border>div.table-footer>.table-col:nth-child(n+2),.snail-table.start-border>div.table-header>.table-col:nth-child(n+2){border-left:none!important}.snail-table.start-border>div.table-body>.table-row>.table-col,.snail-table.start-border>div.table-footer>.table-col{border-top:none!important}
19
- /* src:container\components\table-row.vue index:0 */
20
- .table-row{align-items:center;display:flex;min-width:100%}
21
17
  /* src:container\components\table-col.vue index:0 */
22
18
  .table-col{align-items:center;display:flex;height:100%;white-space:nowrap}.table-col.left{justify-content:left}.table-col.center{justify-content:center}.table-col.right{justify-content:right}
23
- /* src:form\input.vue index:0 */
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}
19
+ /* src:container\dynamic.vue index:0 */
20
+ .snail-dynamic-error{color:red}.snail-dynamic-error>span{color:gray}
21
+ /* src:container\components\table-row.vue index:0 */
22
+ .table-row{align-items:center;display:flex;min-width:100%}
25
23
  /* src:prompt\drag-verify.vue index:0 */
26
24
  .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{background-image:-webkit-linear-gradient(left,#666,#666 45%,#fff 50%,#666 55%,#666);-webkit-text-fill-color:transparent;align-items:center;animation:snail-drag-verify 2s linear infinite;-webkit-background-clip:text;background-clip:text;background-size:200% 100%;color:#7e848c;display:flex;font-size:12px;font-weight:400;justify-content:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.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}}
27
25
  /* src:prompt\empty.vue index:0 */
28
26
  .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}
29
27
  /* src:prompt\loading.vue index:0 */
30
28
  .snail-loading{height:100%;left:0;position:absolute;top:0;width:100%;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:form\input.vue index:0 */
30
+ .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}
31
31
  /* src:popup\components\dialog-container.vue index:0 */
32
32
  .snail-dialog{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:fixed;top:0;width:100%}.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);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}
33
33
  /* src:popup\components\popup-container.vue index: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.31",
6
+ "version": "1.0.32",
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": ">=2.0.9",
18
+ "snail.core": ">=2.0.10",
19
19
  "snail.view": ">=1.0.13"
20
20
  },
21
21
  "devDependencies": {