snail.vue 1.0.28 → 1.0.30

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/.code-snippets ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "vue template:": {
3
+ "scope": "vue",
4
+ "prefix": "VueTemplate",
5
+ "body": [
6
+ "<!-- 组件介绍写到这里 -->",
7
+ "<template>",
8
+ "\t",
9
+ "</template>",
10
+ "",
11
+ "<script setup lang=\"ts\">",
12
+ "import { ref, shallowRef, watch ,onActivated, onDeactivated} from \"vue\";",
13
+ "",
14
+ "// ***************************************** 👉 组件定义 *****************************************",
15
+ "// 1、props、data",
16
+ "// 2、可选配置选项",
17
+ "defineOptions({ name: 组件名称, inheritAttrs: true, });",
18
+ "",
19
+ "// ***************************************** 👉 方法+事件 ****************************************",
20
+ "",
21
+ "// ***************************************** 👉 组件渲染 *****************************************",
22
+ "// 1、数据初始化、变化监听",
23
+ "// 2、生命周期响应",
24
+ "",
25
+ "// 监听组件激活和卸载,适配KeepAlive组件内使用",
26
+ "onActivated(() => console.log(\"onActivated\"));",
27
+ "onDeactivated(() => console.log(\"onDeactivated\"));",
28
+ "</script>",
29
+ "",
30
+ "<style lang=\"less\">",
31
+ "// 引入基础Mixins样式",
32
+ "@import \"snail.view/dist/styles/base-mixins.less\";",
33
+ "",
34
+ "</style>"
35
+ ],
36
+ "description": "Vue组件模板代码"
37
+ }
38
+ }
@@ -1,8 +1,8 @@
1
1
  import * as snail_view from 'snail.view';
2
2
  import { BaseStyle, WidthStyle, FlexBoxStyle, HeightStyle, BorderStyle, PaddingStyle } from 'snail.view';
3
3
  import * as vue from 'vue';
4
- import { Component, App, Ref, ShallowRef } from 'vue';
5
- import { IScope } from 'snail.core';
4
+ import { Component, App, ShallowRef } from 'vue';
5
+ import { IScope, IAsyncScope } from 'snail.core';
6
6
 
7
7
  /**
8
8
  * loading提示框的配置选项
@@ -456,6 +456,42 @@ type ButtonOptions = {
456
456
  type: "primary" | "default" | "link";
457
457
  };
458
458
 
459
+ /**
460
+ * 接口:响应式管理器
461
+ */
462
+ interface IReactiveManager {
463
+ /**
464
+ * 【过渡】响应式变量值
465
+ * - 通过设置 rv.value 的值来实现.value值过渡
466
+ * - 执行顺序 from、to
467
+ * - 开始时,设置 rv.value 值为 from;延迟time时间后,强制销毁scope
468
+ * - 销毁scope时,强制将 rv.value 值设置为 to 值
469
+ * @param rv 响应式变量对象
470
+ * @param effect 过渡效果配置,约束 from end 样式
471
+ * @param time 过渡持续时间,到时间后销毁作用域
472
+ * @returns 作用域对象,可销毁【值过渡】效果
473
+ */
474
+ transition<T>(rv: {
475
+ value?: T;
476
+ }, effect: {
477
+ from: T;
478
+ to: T;
479
+ }, time: number): IScope;
480
+ }
481
+
482
+ /**
483
+ * 响应式 模块;
484
+ * 1、针对Vue的响应式相关功能,做一些便捷封装
485
+ * 2、方便使用,减少重复性代码量
486
+ */
487
+
488
+ /**
489
+ * 使用【响应式管理器】
490
+ * - 请在Vue组件的setup中使用此方法,否则 getCurrentScope 方法无法取到值
491
+ * @returns 全新的【响应式管理器】+作用域
492
+ */
493
+ declare function useReactive(): IReactiveManager & IScope;
494
+
459
495
  /**
460
496
  * Vue App助手类,做一些app实例的辅助性工作
461
497
  */
@@ -486,26 +522,26 @@ declare function triggerAppCreated(app: App): App;
486
522
  declare function getSvgIcon(options: IconOptions): IconPathOptions;
487
523
 
488
524
  /**
489
- * 响应式助手类,封装一些响应式相关的工具方法
525
+ * 挂载vue组件
526
+ * - 全新创建一个Vue实例挂载的传入组件
527
+ * - 用于在非vue环境下渲染vue组件内容
528
+ * @param options 挂载配置选项
529
+ * @param onDestroyed 监听【调用方】的销毁时机,用于自动销毁挂载的实力
530
+ * @returns
490
531
  */
532
+ declare function mount(options: ComponentMountOptions, onDestroyed?: (fn: () => void) => void): IScope;
491
533
 
492
534
  /**
493
- * 作用域ref,方法执行逻辑:
494
- * -1、初始化作用域,设置rv值: rv.value = start
495
- * -2、在延迟 dealy 销毁作用域,设置rv值:rv.value = end
496
- * - 备注示例:可和 snail.core 中的 waitInScope 方法联动实现:api请求开始时显示loading,api请求结束后隐藏loading
497
- * @param rv 响应式变量对象
498
- * @param start 起始值,scope创建时执行 rv.value = start
499
- * @param end 销毁值,scope销毁时执行 rv.value = end
500
- * @param dealy 销毁时的延迟时间;单位 ms ;实现延迟设置 end 值
501
- * @returns 新创建的作用域对象
502
- */
503
- declare function scopeRef<T>(rv: Ref<T> | ShallowRef<T>, start: T, end: T, dealy?: number): IScope;
535
+ * 公共通用数据结构:
536
+ * 1、在弹窗、模态弹窗、跟随弹窗的效果下复用
537
+ */
504
538
 
505
539
  /**
506
- * 模态弹窗显示的组件配置选项
540
+ * 弹窗配置选项
541
+ * - 约束弹出组件信息
542
+ * - 弹出组件时传递的参数信息
507
543
  */
508
- type DialogOptions = ComponentOptions & {
544
+ type PopupOptions = ComponentOptions & {
509
545
  /**
510
546
  * 传递给组件的属性值,执行v-bind绑定到要显示的组件
511
547
  * - key为属性名称,遵循vue解析规则
@@ -514,29 +550,101 @@ type DialogOptions = ComponentOptions & {
514
550
  props?: Record<string, any>;
515
551
  /**
516
552
  * 自定义class
517
- * - 绑定模块弹窗显示的组件根元素上
518
- */
553
+ * - 绑定到内容组件根元素上
554
+ * - 可以直接在props中指定,无需特殊设置
519
555
  class?: string | string[];
556
+ */
520
557
  /**
521
558
  * 自定义style
522
- * - 绑定模块弹窗显示的组件根元素上
559
+ * - 绑定到内容组件根元素上
560
+ * - 可以直接在props中指定,无需特殊设置
561
+ style?: AllStyle;
523
562
  */
524
- style?: string | string[];
525
563
  /**
526
- * 按下esc健时是否关闭弹窗
527
- * - 默认值:false
564
+ * 弹窗的z-index值
565
+ * - 无特殊情况,建议不指定,内部会自动生成,确保弹窗正确性
528
566
  */
529
- closeOnEscape?: boolean;
567
+ zIndex?: number;
568
+ };
569
+ /**
570
+ * 弹窗标识信息
571
+ */
572
+ type PopupFlagOptions = {
530
573
  /**
531
- * 点击遮罩层时是否关闭弹窗
532
- * - 默认值:false
574
+ * 分配给弹窗的Id值
575
+ */
576
+ id: number;
577
+ /**
578
+ * 实际分配的zIndex值
579
+ */
580
+ zIndex: number;
581
+ };
582
+ /**
583
+ * 弹出组件句柄
584
+ */
585
+ type PopupHandle<T> = {
586
+ /**
587
+ * 组件是否在【弹出窗口】中
588
+ */
589
+ inPopup: Readonly<boolean>;
590
+ /**
591
+ * 关闭弹窗
592
+ * @param data 关闭时传递数据
593
+ */
594
+ closePopup(data?: T): void;
595
+ };
596
+ /**
597
+ * 弹窗状态:响应式
598
+ * - open 打开
599
+ * - active 激活
600
+ * - unactive 非激活
601
+ * - close 关闭
602
+ */
603
+ type PopupStatus = ShallowRef<"open" | "active" | "unactive" | "close">;
604
+ /**
605
+ * 弹窗扩展信息
606
+ */
607
+ type PopupExtend = {
608
+ /**
609
+ * 弹窗状态
610
+ */
611
+ popupStatus: PopupStatus;
612
+ };
613
+
614
+ /**
615
+ * 模态弹窗数据结构
616
+ */
617
+
618
+ /**
619
+ * 模态弹窗配置选项
620
+ * - 继承 ComponentOptions ,动态加载组件
621
+ */
622
+ type DialogOptions = PopupOptions & {
623
+ /**
624
+ * 禁用【遮罩层】
625
+ * - 目前没实现,先忽略
626
+ maskDisabled?: boolean;
627
+ */
628
+ /**
629
+ * 点击【遮罩层】时是否关闭弹窗
630
+ * - 针对无遮罩层的弹窗,则点击非【弹窗组件】区域时是否关闭
533
631
  */
534
632
  closeOnMask?: boolean;
535
633
  /**
536
- * 弹窗的z-index值
537
- * - 无特殊情况,建议不粗韩,内部会自动生成,确保弹窗正确性
634
+ * 按下【ESC】健时是否关闭弹窗
538
635
  */
539
- zIndex?: number;
636
+ closeOnEscape?: boolean;
637
+ /**
638
+ * 模态弹窗动画名
639
+ * - 不传则使用默认,具体有弹窗容器确认,如dialog为 snail-dialog
640
+ */
641
+ transition?: string;
642
+ /**
643
+ * 动画持续时间
644
+ * - 配合 transition 使用;单位ms,默认100ms
645
+ * - 外部传入自定义动画时,传入动画持续时间,否则可能导致关闭时动画失效
646
+ */
647
+ transitionDuration?: number;
540
648
  /**
541
649
  * 模态弹窗的自定义class
542
650
  * - 绑定到模态弹窗的根元素上
@@ -544,73 +652,36 @@ type DialogOptions = ComponentOptions & {
544
652
  rootClass?: string | string[];
545
653
  };
546
654
  /**
547
- * 模块弹窗打开后的结果
548
- * - 执行destroy方法时,强制关闭,不会执行onDialogClose
549
- */
550
- type DialogOpenResult<T> = Promise<T> & IScope;
551
- /**
552
- * 弹窗句柄:绑定给子组件使用
655
+ * 弹窗组件句柄
656
+ * - 用于在弹窗内容组件中进行模式判断和关闭
553
657
  */
554
658
  type DialogHandle<T> = {
555
- /** 组件是否处于【弹窗】模式下 */
556
- inDialog: boolean;
557
659
  /**
558
- * 关闭弹窗的方法
660
+ * 组件是否处于【模态弹窗】模式
661
+ */
662
+ inDialog: Readonly<boolean>;
663
+ /**
664
+ * 关闭弹窗
559
665
  * @param data 关闭时传递数据
560
666
  */
561
667
  closeDialog(data?: T): void;
562
668
  /**
563
- * 注册监听【弹窗关闭的方法】
669
+ * 注册监听【弹窗关闭】事件方法
564
670
  * - 仅支持注册一次,多次注册以最后一次的为准
565
671
  * @param fn 关闭时执行的钩子函数,支持异步,返回false时将阻止弹窗关闭
566
672
  */
567
673
  onDialogClose(fn: () => false | undefined | Promise<false | undefined>): void;
568
674
  };
569
675
  /**
570
- * 模态弹窗;配合【../components/dialog-wrapper.vue】使用
676
+ * 弹窗扩展信息
571
677
  */
572
- type Dialog = {
573
- /**
574
- * 弹窗Id,唯一值
575
- */
576
- id: string;
678
+ type DailogExtend = {
577
679
  /**
578
- * 模态弹窗显示的组件配置选项
680
+ * 弹窗状态
579
681
  */
580
- options: DialogOptions;
581
- /**
582
- * 弹窗句柄
583
- * - 提供关闭弹窗等操作
584
- * - 将挂载到内容组件的属性上,方便使用
585
- */
586
- handle: DialogHandle<any>;
682
+ dialogStatus: PopupStatus;
587
683
  };
588
684
 
589
- /**
590
- * 模态弹窗助手;提供模态弹窗相关功能
591
- * 1、内部维护一个VueApp实例,专门用于进行模态弹窗操
592
- * 2、模态弹窗展示效果,通过 @see ../componets/dialog-wrapper.vue 实现
593
- */
594
-
595
- /**
596
- * 打开模态弹窗
597
- * @param options 弹窗组件配置选项
598
- * @param onDestroyed 监听【调用方】的销毁时机,用于自动销毁打开的弹窗
599
- * @returns 弹窗打开结果,可手动关闭弹窗
600
- */
601
- declare function openDialog<T>(options: DialogOptions, onDestroyed?: (fn: () => void) => void): DialogOpenResult<T>;
602
- /**
603
- * 作用域弹窗:方法执行逻辑:
604
- * - 1、打开弹窗前:若scopeRef有值,则强制执行 scopeRef.value.destroy() 做销毁
605
- * - 2、打开弹窗 :构建IScope赋值给 scopeRef.value ;外部可 scopeRef.value.destroy() 强制关闭弹窗
606
- * - 3、等待弹窗关闭 :得到弹窗返回值,置空scopeRef值,并返回弹窗返回值:scopeRef.value = undefined
607
- * - 备注说明:封装重复性代码,简化外部开发逻辑;无实际业务意义
608
- * @param options 弹窗配置选项
609
- * @param scopeRef 作用域响应式对象
610
- * @returns 弹窗关闭时传递的数据
611
- */
612
- declare function scopeDialog<T>(options: DialogOptions, scopeRef: ShallowRef<IScope | undefined>): Promise<T>;
613
-
614
685
  /**
615
686
  * 确认弹窗配置选项
616
687
  */
@@ -647,16 +718,6 @@ type ConfirmOptions = {
647
718
  */
648
719
  confirmDisabled?: boolean;
649
720
  };
650
- /**
651
- * 确认弹窗句柄
652
- */
653
- type ConfirmHandle = {
654
- /**
655
- * 关闭弹窗
656
- * @param confirm 是否是点击【确认】按钮触发的关闭
657
- */
658
- close: (confirm: boolean) => void;
659
- };
660
721
 
661
722
  /**
662
723
  * Toast配置选项
@@ -671,29 +732,65 @@ type ToastOptions = {
671
732
  */
672
733
  message: string;
673
734
  };
735
+
674
736
  /**
675
- * Toast弹窗句柄
737
+ * 弹窗管理器
676
738
  */
677
- type ToastHandle = {
739
+ interface IPopupManager {
678
740
  /**
679
- * 关闭toast弹窗
741
+ * 弹出
742
+ * - 弹窗位置位置、大小、动画效果等由组件自己完成
743
+ * @param options 弹窗配置选项
744
+ * @returns 弹窗打开结果,外部可手动关闭弹窗
680
745
  */
681
- close: () => void;
682
- };
683
-
746
+ popup<T>(options: PopupOptions): IAsyncScope<T>;
747
+ /**
748
+ * 对话框
749
+ * - 支持指定模态和非模态对话框
750
+ * - 默认垂直水平居中展示
751
+ * @param options 弹窗配置选项
752
+ * @returns 弹窗打开结果,外部可手动关闭弹窗
753
+ */
754
+ dialog<T>(options: DialogOptions): IAsyncScope<T>;
755
+ /**
756
+ * 打开【确认】弹窗
757
+ * @param title 弹窗标题
758
+ * @param message 确认提示信息,支持html片段
759
+ * @param options 确认弹窗其他配置信息
760
+ * @returns 弹窗打开结果,外部可手动关闭弹窗
761
+ */
762
+ confirm(title: string, message: string, options?: Omit<ConfirmOptions, "title" | "message">): IAsyncScope<boolean>;
763
+ /**
764
+ * Toast 提示框
765
+ * @param type 提示类型:成功、失败、、、
766
+ * @param message 提示消息
767
+ * @param options 提示框配置选项
768
+ */
769
+ toast(type: IconType, message: string, options?: Omit<ToastOptions, "type" | "message">): void;
770
+ }
684
771
  /**
685
- * toast提示
686
- * @param type 提示类型:成功、失败、、、
687
- * @param message 提示消息
772
+ * 弹窗描述器
688
773
  */
689
- declare function toast(type: IconType, message: string): void;
774
+ type PopupDescriptor<Options extends PopupOptions, ExtOptions> = PopupFlagOptions & {
775
+ /**
776
+ * 弹窗打开的容器组件:如DialogContainer、PopupContainer、、、
777
+ */
778
+ container: Component;
779
+ /**
780
+ * 弹窗配置选项
781
+ */
782
+ options: Options;
783
+ /**
784
+ * 扩展数据
785
+ */
786
+ extOptions: ExtOptions;
787
+ };
788
+
690
789
  /**
691
- * 打开【确认】弹窗
692
- * @param title 弹窗标题
693
- * @param message 确认提示信息,支持html片段
694
- * @returns 弹窗句柄
790
+ * 使用【弹窗管理器】
791
+ * @returns 全新的【弹窗管理器】实例+作用域对象
695
792
  */
696
- declare function confirm(title: string, message: string): DialogOpenResult<boolean>;
793
+ declare function usePopup(): IPopupManager & IScope;
697
794
 
698
795
  declare const components: {
699
796
  Button: {
@@ -968,15 +1065,5 @@ declare const components: {
968
1065
  });
969
1066
  };
970
1067
 
971
- /**
972
- * 挂载vue组件
973
- * - 全新创建一个Vue实例挂载的传入组件
974
- * - 用于在非vue环境下渲染vue组件内容
975
- * @param options 挂载配置选项
976
- * @param onDestroyed 监听【调用方】的销毁时机,用于自动销毁挂载的实力
977
- * @returns
978
- */
979
- declare function mount(options: ComponentMountOptions, onDestroyed?: (fn: () => void) => void): IScope;
980
-
981
- export { components, confirm, getSvgIcon, mount, onAppCreated, openDialog, scopeDialog, scopeRef, toast, triggerAppCreated };
982
- export type { ButtonOptions, ComponentMountOptions, ComponentOptions, ConfirmHandle, ConfirmOptions, Dialog, DialogHandle, DialogOpenResult, DialogOptions, DragVerifyInfo, DragVerifyOptions, EmptyOptions, FoldEvents, FoldOptions, FoldStatus, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, IconOptions, IconPathOptions, IconType, InputEvents, InputOptions, LoadingOptions, ScrollEvents, ScrollOptions, ScrollTouchType, SwitchEvents, SwitchOptions, TableColOptions, TableOptions, TableRowOptions, ToastHandle, ToastOptions };
1068
+ export { components, getSvgIcon, mount, onAppCreated, triggerAppCreated, usePopup, useReactive };
1069
+ 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 };