snail.vue 2.0.9 → 2.0.11

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/README.md CHANGED
@@ -54,7 +54,11 @@
54
54
  | [Tree](https://www.yuque.com/snail-devx/js/kaynh9t44gbl6fxc#tKdSd) | **树组件;基于 nodes 渲染树,支持节点自定义,集成节点事件和本地搜索** |
55
55
  | [Wrapper](https://www.yuque.com/snail-devx/js/kaynh9t44gbl6fxc#gita6) | **包裹层组件;作为常用组件的包裹层,自动实现组件在 page 和 popup 中展现,让内容组件关注核心逻辑即可** |
56
56
 
57
- ## 3.3. **popup 弹窗组件**
57
+ ## 3.3. picker 选择器组件
58
+
59
+ > 基于IPopupManager实现的各类选择器组件,如日期选择器、时间选择器、颜色选择器、、、
60
+
61
+ ## 3.4. **popup 弹窗组件**
58
62
 
59
63
  **基于 IPopupManager 实现弹窗管理,自动管理弹窗层级、弹窗生命周期;提供基础 popup 弹窗方法;并扩展 dialog、follow、toast、confirm 弹窗方法**
60
64
 
@@ -69,7 +73,7 @@
69
73
  | [toast](https://www.yuque.com/snail-devx/js/byho94c6ms40kdb2#FWNH1) | **消息提示弹窗;模拟 Android 的 Toast 弹窗提示消息** |
70
74
  | [confirm](https://www.yuque.com/snail-devx/js/byho94c6ms40kdb2#wohc0) | **确认弹窗;模拟实现原生 confirm 弹窗** |
71
75
 
72
- ## 3.4. **prompt 提示组件**
76
+ ## 3.5. **prompt 提示组件**
73
77
 
74
78
  **封装一些提示性质的通用组件,如数据加载状态、无数据提醒等等**
75
79
 
@@ -2,7 +2,7 @@ import * as snail_view from 'snail.view';
2
2
  import { BaseStyle, HeightStyle, FlexBoxStyle, WidthStyle, BorderStyle, PaddingStyle, MarginStyle } from 'snail.view';
3
3
  import * as vue from 'vue';
4
4
  import { Component, ShallowRef, Ref, WatchSource, App } from 'vue';
5
- import { IScope, RunResult, IAsyncScope } from 'snail.core';
5
+ import { IScope, RunResult, ITimeValueManager, IAsyncScope } from 'snail.core';
6
6
 
7
7
  /**
8
8
  * loading提示框的配置选项
@@ -257,6 +257,14 @@ type ScrollOptions = {
257
257
  * - true 支持滚动
258
258
  */
259
259
  scrollY?: boolean;
260
+ /**
261
+ * 滚动条尺寸
262
+ * - normal :常规,10px
263
+ * - small :小尺寸,宽度 6px
264
+ * - mini :迷你尺寸,宽度 4px
265
+ * - none :无,不显示滚动条,但仍然能够滚动
266
+ */
267
+ barSize?: "normal" | "small" | "mini" | "none";
260
268
  };
261
269
  /**
262
270
  * 滚动视图事件
@@ -641,6 +649,17 @@ type TreeNodeSlotOptions<Node> = {
641
649
  * Vue 动画容器组件配置选项
642
650
  */
643
651
  type TransitionOptions = {
652
+ /**
653
+ * 是分组动画,还是单个动画
654
+ * - true 则使用 TransitionGroup
655
+ * - false 则使用 Transition
656
+ */
657
+ group: boolean;
658
+ /**
659
+ * 动画持续时间
660
+ * - 单位ms,默认200ms
661
+ */
662
+ duration?: number;
644
663
  /**
645
664
  * 动画的自定义类样式名称
646
665
  * - 默认为 `snail-transition`;不会作为 Transition的 name 属性名
@@ -677,12 +696,6 @@ type TransitionOptions = {
677
696
  * | `right-left` | 右进左出 | 进入时 `translateX` 100% - 0 | 离开时 `translateX` 0 - -100% |
678
697
  */
679
698
  effect?: TransitionEffectOptions | Array<TransitionEffectOptions>;
680
- /**
681
- * 是分组动画,还是单个动画
682
- * - true 则使用 TransitionGroup
683
- * - false 则使用 Transition
684
- */
685
- group: boolean;
686
699
  };
687
700
  type TransitionEffectOptions = "fade" | "scale" | "rotate" | "up" | "down" | "up-down" | "down-up" | "left" | "right" | "left-right" | "right-left";
688
701
 
@@ -880,51 +893,6 @@ type SortEvent = {
880
893
  newIndex: number | undefined;
881
894
  };
882
895
 
883
- /**
884
- * 布局组件 数据结构
885
- */
886
-
887
- type LayoutOptions = {
888
- /**
889
- * 布局模式:水平,还是垂直
890
- */
891
- mode: "horizontal" | "vertical";
892
- /**
893
- * 滚动相关配置
894
- * - 中部区域的配置
895
- */
896
- scroll?: ScrollOptions;
897
- };
898
-
899
- /**
900
- * 折叠面板配置选项
901
- * - title 折叠面板标题
902
- * - disabled 禁用折叠效果,始终展开
903
- */
904
- type FoldOptions = DisabledOptions & TitleOptions & {
905
- /**
906
- * 副标题
907
- * - 跟随在title后
908
- */
909
- subtitle?: string;
910
- };
911
- /**
912
- * 折叠状态
913
- * - expand : 展开状态
914
- * - fold : 折叠状态
915
- */
916
- type FoldStatus = "expand" | "fold";
917
- /**
918
- * 折叠面板事件
919
- */
920
- type FoldEvents = {
921
- /**
922
- * 折叠状态发生改变时
923
- * @param status 折叠状态
924
- */
925
- change: [status: FoldStatus];
926
- };
927
-
928
896
  /**
929
897
  * 组件配置选项
930
898
  */
@@ -961,6 +929,12 @@ type PropsType<Props> = Props extends Record<string, any> ? Props : undefined;
961
929
  type EmitterType<Events extends Record<string, any[]>> = {
962
930
  <K extends keyof Events>(event: K, ...payload: Events[K]): any;
963
931
  };
932
+ /**
933
+ * 提取【组件插槽】类型
934
+ */
935
+ type SlotsType<Slots extends Record<string, any>> = {
936
+ [key in keyof Slots]: (props: Slots[key]) => any;
937
+ };
964
938
  /**
965
939
  * 提取【组件事件】类型
966
940
  * - 将【组件事件】中的key首字母小写,追加上on前缀;key对应的value为监听函数参数
@@ -990,6 +964,113 @@ type ComponentBindOptions<Props = void, Model = void> = {
990
964
  model?: Model extends (void | never | null | undefined) ? undefined : (ShallowRef<Model> | Ref<Model>);
991
965
  };
992
966
 
967
+ /**
968
+ * 布局组件 数据结构
969
+ */
970
+
971
+ /**
972
+ * 布局组件 配置选项
973
+ */
974
+ type LayoutOptions = {
975
+ /**
976
+ * 布局模式
977
+ * - horizontal 水平布局:左中右
978
+ * - vertical 垂直布局:上中下
979
+ * - 默认为 `horizontal`
980
+ */
981
+ mode?: "horizontal" | "vertical";
982
+ /**
983
+ * 内容区域配置
984
+ * - 对应插槽名:default;主要内容显示区域,处于布局中的【中】区域
985
+ * - 配置主内容区域的滚动条配置
986
+ */
987
+ default?: Pick<LayoutAraeOptions<void>, "scroll">;
988
+ /**
989
+ * 【左侧】区域配置
990
+ * - 对应插槽名`left` ;`mode` 为 `horizontal` 时生效
991
+ * - 配置滚动条和宽度;宽度不配置时,默认 `fit-content`
992
+ * -
993
+ */
994
+ left?: LayoutAraeOptions<WidthStyle>;
995
+ /**
996
+ * 【右测】区域配置
997
+ * - 对应插槽名`right` ;`mode` 为 `horizontal` 时生效
998
+ * - 配置滚动条和宽度;宽度不配置时,默认 `fit-content`
999
+ */
1000
+ right?: LayoutAraeOptions<WidthStyle>;
1001
+ /**
1002
+ * 【顶部】区域配置
1003
+ * - 对应插槽名`top`;`mode` 为 `vertical` 时生效
1004
+ * - 配置滚动条和高度;高度不配置时,默认 `fit-content`
1005
+ * -
1006
+ */
1007
+ top?: LayoutAraeOptions<HeightStyle>;
1008
+ /**
1009
+ * 【底部】区域配置
1010
+ * - 对应插槽名`bottom`;`mode` 为 `vertical` 时生效
1011
+ * - 配置滚动条和高度;高度不配置时,默认 `fit-content`
1012
+ */
1013
+ bottom?: LayoutAraeOptions<HeightStyle>;
1014
+ };
1015
+ /**
1016
+ * 布局组件子区域 配置选项
1017
+ */
1018
+ type LayoutAraeOptions<Style extends WidthStyle | HeightStyle | void> = Style & {
1019
+ /**
1020
+ * 滚动视图配置
1021
+ * - 视图属性:滚动条大小、显示时机
1022
+ * - 滚动事件:滚动条显隐、滚动到顶部、底部、、、
1023
+ * - 不传入则当前区域`overflow:hidden`溢出隐藏
1024
+ */
1025
+ scroll?: ScrollOptions & EventsType<ScrollEvents>;
1026
+ };
1027
+ /**
1028
+ * 布局组件的子区域项目 描述
1029
+ */
1030
+ type LayoutAreaItem = {
1031
+ /**
1032
+ * 是否可滚动
1033
+ */
1034
+ scrollable: boolean;
1035
+ /**
1036
+ * 内容区域元素的类样式名
1037
+ */
1038
+ class: string;
1039
+ /**
1040
+ * css样式
1041
+ */
1042
+ style: Record<string, string>;
1043
+ };
1044
+
1045
+ /**
1046
+ * 折叠面板配置选项
1047
+ * - title 折叠面板标题
1048
+ * - disabled 禁用折叠效果,始终展开
1049
+ */
1050
+ type FoldOptions = DisabledOptions & TitleOptions & {
1051
+ /**
1052
+ * 副标题
1053
+ * - 跟随在title后
1054
+ */
1055
+ subtitle?: string;
1056
+ };
1057
+ /**
1058
+ * 折叠状态
1059
+ * - expand : 展开状态
1060
+ * - fold : 折叠状态
1061
+ */
1062
+ type FoldStatus = "expand" | "fold";
1063
+ /**
1064
+ * 折叠面板事件
1065
+ */
1066
+ type FoldEvents = {
1067
+ /**
1068
+ * 折叠状态发生改变时
1069
+ * @param status 折叠状态
1070
+ */
1071
+ change: [status: FoldStatus];
1072
+ };
1073
+
993
1074
  /**
994
1075
  * 选项菜单 基础配置选项
995
1076
  */
@@ -1967,6 +2048,90 @@ type DynamicOptions<Props = void> = ComponentOptions & Pick<ComponentBindOptions
1967
2048
  */
1968
2049
  declare function mount<Props>(target: HTMLElement, options: DynamicOptions<Props>, onDestroyed?: (fn: () => void) => void): IScope;
1969
2050
 
2051
+ /**
2052
+ * 时间选择控件配置项
2053
+ */
2054
+ type TimePickerOptions = {
2055
+ /**
2056
+ * 已选值
2057
+ * - 格式为 “时:分:秒"
2058
+ */
2059
+ value?: string;
2060
+ /**
2061
+ * 禁用【初始化】功能
2062
+ * - 仅在`value`为空时才生效,若`value`不为空,则忽略此属性配置
2063
+ * - 为true,不自动选中【现在】的时分秒
2064
+ * - 为false时,自动选中【现在】的时分秒
2065
+ * - 默认自动初始化
2066
+ */
2067
+ initialDisabled?: boolean;
2068
+ /**
2069
+ * 禁用【现在】功能
2070
+ * - 为true时,不出【现在】功能
2071
+ */
2072
+ nowDisabled?: boolean;
2073
+ /**
2074
+ * 时间值管理器
2075
+ * - 若传入此值,则 `format`、`min`、`max` 失效
2076
+ */
2077
+ manager?: ITimeValueManager;
2078
+ /**
2079
+ * 时间格式
2080
+ */
2081
+ format?: "HH:mm:ss" | "HH:mm";
2082
+ /**
2083
+ * 最小时间
2084
+ * - 传入值格式为 "时:分:秒"
2085
+ * - 如 "08:30:00",则08:30:00为最小时间,之前的时间不可选择
2086
+ * - 如 "08" ,则 08:00:00为最小时间,之前的时间不可选择
2087
+ */
2088
+ min?: string;
2089
+ /**
2090
+ * 最大时间
2091
+ * - 传入值格式为 "时:分:秒"
2092
+ * - 如 "08:30:00",则08:30:00为最大时间,之后的时间不可选择
2093
+ * - 如 "08" ,则 08:00:00为最大时间,之后时间不可选择
2094
+ */
2095
+ max?: string;
2096
+ };
2097
+ /**
2098
+ * 日期时间选择 事件
2099
+ */
2100
+ type DatetimePickerEvents = {
2101
+ /**
2102
+ * 清空
2103
+ */
2104
+ clear: [];
2105
+ /**
2106
+ * 确定选择
2107
+ * - @param value 已选则的日期时间
2108
+ */
2109
+ confirm: [value: string];
2110
+ };
2111
+
2112
+ /**
2113
+ * 选择器 相关数据实体
2114
+ */
2115
+
2116
+ /**
2117
+ * 接口:选择器管理器
2118
+ */
2119
+ interface IPickerManager {
2120
+ /**
2121
+ * 显示【时间】选择控件
2122
+ * @param target 哪个元素触发,基于此元素计算位置
2123
+ * @param options 时间选择控件配置选项
2124
+ * @returns 异步任务,可销毁时间选择控件;可接收时间选择控件的选择值
2125
+ */
2126
+ showTime(target: HTMLElement, options?: TimePickerOptions): IAsyncScope<string>;
2127
+ }
2128
+
2129
+ /**
2130
+ * 使用选择器
2131
+ * @returns 选择器实例+作用域对象
2132
+ */
2133
+ declare function usePicker(): IPickerManager & IScope;
2134
+
1970
2135
  /**
1971
2136
  * 公共通用数据结构:
1972
2137
  * 1、在弹窗、模态弹窗、跟随弹窗的效果下复用
@@ -2169,7 +2334,7 @@ type FollowOptions<Props = void, Model = void> = PopupOptions<Props, Model> & {
2169
2334
  */
2170
2335
  followWidth?: boolean;
2171
2336
  /**
2172
- * 启用【高度】更碎
2337
+ * 启用【高度】跟随
2173
2338
  * - 为true则和 target 高度保持一致
2174
2339
  * - false时,高度由 弹出组件 自己维护
2175
2340
  * - 不管是true、还是false,若高度超过浏览器最大高度,会进行强制干预
@@ -2237,6 +2402,7 @@ type FollowOptions<Props = void, Model = void> = PopupOptions<Props, Model> & {
2237
2402
  /**
2238
2403
  * target改变时是否关闭弹窗
2239
2404
  * - target尺寸、位置变化
2405
+ * - target点击时
2240
2406
  */
2241
2407
  closeOnTarget?: boolean;
2242
2408
  };
@@ -2658,7 +2824,7 @@ declare const components: {
2658
2824
  };
2659
2825
  });
2660
2826
  Layout: {
2661
- new (...args: any[]): vue.CreateComponentPublicInstanceWithMixins<Readonly<LayoutOptions> & Readonly<{}>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, vue.PublicProps, {}, false, {}, {}, vue.GlobalComponents, vue.GlobalDirectives, string, {}, any, vue.ComponentProvideOptions, {
2827
+ new (...args: any[]): vue.CreateComponentPublicInstanceWithMixins<Readonly<LayoutOptions> & Readonly<{}>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, vue.PublicProps, {}, true, {}, {}, vue.GlobalComponents, vue.GlobalDirectives, string, {}, any, vue.ComponentProvideOptions, {
2662
2828
  P: {};
2663
2829
  B: {};
2664
2830
  D: {};
@@ -2670,13 +2836,7 @@ declare const components: {
2670
2836
  __isTeleport?: never;
2671
2837
  __isSuspense?: never;
2672
2838
  } & vue.ComponentOptionsBase<Readonly<LayoutOptions> & Readonly<{}>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, {}, {}, string, {}, vue.GlobalComponents, vue.GlobalDirectives, string, vue.ComponentProvideOptions> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new () => {
2673
- $slots: {
2674
- start?: (props: {}) => any;
2675
- } & {
2676
- default?: (props: {}) => any;
2677
- } & {
2678
- end?: (props: {}) => any;
2679
- };
2839
+ $slots: SlotsType<Pick<LayoutOptions, "default" | "left" | "right" | "bottom" | "top">>;
2680
2840
  });
2681
2841
  Scroll: {
2682
2842
  new (...args: any[]): vue.CreateComponentPublicInstanceWithMixins<Readonly<ScrollOptions> & Readonly<{
@@ -3028,5 +3188,5 @@ declare const components: {
3028
3188
  });
3029
3189
  };
3030
3190
 
3031
- export { components, getSvgDraw, mount, onAppCreated, triggerAppCreated, usePopup, useReactive, useTreeContext };
3032
- export type { ButtonOptions, ChangeEvents, ChooseEvents, ChooseItem, ChooseOptions, ClickEvents, CloseEvents, ComponentBindOptions, ComponentOptions, ConfirmAreaOptions, ConfirmOptions, DatePickerEvents, DatepickerOptions, DeleteEvents, DialogHandle, DialogOptions, DisabledOptions, DragVerifyInfo, DragVerifyOptions, EmitterType, EmptyOptions, EventsType, FoldEvents, FoldOptions, FoldStatus, FollowElectResult, FollowExtend, FollowHandle, FollowOptions, FollowStrategy, FollowStrategyOptions, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, INumberFormatter, IPopupManager, IReactiveManager, ISelectContext, ITreeBaseContext, IconOptions, IconType, InputEvents, InputOptions, LayoutOptions, LoadingOptions, MessageOptions, MoveEvents, NumberBaseOptions, NumberEvents, NumberFormatResult, NumberOptions, PlaceholderOptions, PopupDescriptor, PopupHandle, PopupOptions, PopupStatus, PopupStatusOptions, PropsType, ReactiveVar, ReadonlyOptions, ScrollEvents, ScrollOptions, ScrollStatus, SearchEvents, SearchOptions, SelectBaseEvents, SelectBaseOptions, SelectEvents, SelectItem, SelectNodeEvents, SelectNodeOptions, SelectOptions, SelectPopupEvents, SelectPopupExtend, SelectPopupOptions, SelectSlotOptions, SortEvent, SortEvents, SortGroupHook, SortGroupOptions, SortOptions, SwitchEvents, SwitchOptions, TableColOptions, TableOptions, TableRowOptions, TextareaEvents, TextareaOptions, TitleOptions, ToastOptions, TransitionEffectOptions, TransitionOptions, TreeEvents, TreeNode, TreeNodeEvents, TreeNodeExtend, TreeNodeModel, TreeNodeOptions, TreeNodeRenderOptions, TreeNodeSlotOptions, TreeOptions, TreeSearchResult, ValueOptions, WrapperEvents, WrapperOptions };
3191
+ export { components, getSvgDraw, mount, onAppCreated, triggerAppCreated, usePicker, usePopup, useReactive, useTreeContext };
3192
+ export type { ButtonOptions, ChangeEvents, ChooseEvents, ChooseItem, ChooseOptions, ClickEvents, CloseEvents, ComponentBindOptions, ComponentOptions, ConfirmAreaOptions, ConfirmOptions, DatePickerEvents, DatepickerOptions, DatetimePickerEvents, DeleteEvents, DialogHandle, DialogOptions, DisabledOptions, DragVerifyInfo, DragVerifyOptions, EmitterType, EmptyOptions, EventsType, FoldEvents, FoldOptions, FoldStatus, FollowElectResult, FollowExtend, FollowHandle, FollowOptions, FollowStrategy, FollowStrategyOptions, FooterEvents, FooterOptions, HeaderEvents, HeaderOptions, INumberFormatter, IPickerManager, IPopupManager, IReactiveManager, ISelectContext, ITreeBaseContext, IconOptions, IconType, InputEvents, InputOptions, LayoutAraeOptions, LayoutAreaItem, LayoutOptions, LoadingOptions, MessageOptions, MoveEvents, NumberBaseOptions, NumberEvents, NumberFormatResult, NumberOptions, PlaceholderOptions, PopupDescriptor, PopupHandle, PopupOptions, PopupStatus, PopupStatusOptions, PropsType, ReactiveVar, ReadonlyOptions, ScrollEvents, ScrollOptions, ScrollStatus, SearchEvents, SearchOptions, SelectBaseEvents, SelectBaseOptions, SelectEvents, SelectItem, SelectNodeEvents, SelectNodeOptions, SelectOptions, SelectPopupEvents, SelectPopupExtend, SelectPopupOptions, SelectSlotOptions, SlotsType, SortEvent, SortEvents, SortGroupHook, SortGroupOptions, SortOptions, SwitchEvents, SwitchOptions, TableColOptions, TableOptions, TableRowOptions, TextareaEvents, TextareaOptions, TimePickerOptions, TitleOptions, ToastOptions, TransitionEffectOptions, TransitionOptions, TreeEvents, TreeNode, TreeNodeEvents, TreeNodeExtend, TreeNodeModel, TreeNodeOptions, TreeNodeRenderOptions, TreeNodeSlotOptions, TreeOptions, TreeSearchResult, ValueOptions, WrapperEvents, WrapperOptions };