@owocow/saber-ui 0.0.2 → 0.0.3

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.
Files changed (130) hide show
  1. package/README.md +206 -11
  2. package/dist/BadgeStatus.types.d.ts +1 -1
  3. package/dist/BadgeStatus.vue.d.ts +1 -1
  4. package/dist/SaberConfirmModal.vue_vue_type_script_setup_true_lang-Cqp9krYl.js +86 -0
  5. package/dist/SaberConfirmProvider.vue_vue_type_script_setup_true_lang-DUJ6ftNJ.js +30 -0
  6. package/dist/SaberDictCheckbox.vue_vue_type_script_setup_true_lang-DUbzy_C6.js +34 -0
  7. package/dist/SaberDictRadio.vue_vue_type_script_setup_true_lang-DR6-jSID.js +50 -0
  8. package/dist/SaberDictSelect.vue_vue_type_script_setup_true_lang-B8PTKNKX.js +35 -0
  9. package/dist/SaberDistrictSelect.vue_vue_type_script_setup_true_lang-BX8nLC35.js +257 -0
  10. package/dist/SaberInfo.vue_vue_type_script_setup_true_lang-B3W5VsGR.js +58 -0
  11. package/dist/SaberInfoProvider.vue_vue_type_script_setup_true_lang-3rF6bSCn.js +28 -0
  12. package/dist/SaberModal.vue_vue_type_script_setup_true_lang-DJno3jA3.js +71 -0
  13. package/dist/SaberModalWithMobile.vue_vue_type_script_setup_true_lang-aQlToncY.js +87 -0
  14. package/dist/SaberNoData.types.d.ts +11 -0
  15. package/dist/SaberNoData.vue.d.ts +24 -0
  16. package/dist/SaberPopSelect.vue_vue_type_script_setup_true_lang-BcS27NXI.js +125 -0
  17. package/dist/SaberStatus.vue_vue_type_script_setup_true_lang-D9aRVCow.js +38 -0
  18. package/dist/SaberSwitchBar.vue_vue_type_script_setup_true_lang-CDx3Dcas.js +47 -0
  19. package/dist/SaberUploadImage.vue_vue_type_script_setup_true_lang-CAwci2Vr.js +224 -0
  20. package/dist/colors.d.ts +1 -1
  21. package/dist/components/SaberConfirmModal.mjs +4 -0
  22. package/dist/components/SaberConfirmModal.vue.d.ts +28 -0
  23. package/dist/components/SaberConfirmProvider.mjs +4 -0
  24. package/dist/components/SaberConfirmProvider.vue.d.ts +2 -0
  25. package/dist/components/SaberInfo.mjs +4 -0
  26. package/dist/components/SaberInfo.types.d.ts +14 -0
  27. package/dist/components/SaberInfo.vue.d.ts +21 -0
  28. package/dist/components/SaberInfoProvider.mjs +4 -0
  29. package/dist/components/SaberInfoProvider.vue.d.ts +20 -0
  30. package/dist/components/SaberModalWithMobile.mjs +4 -0
  31. package/dist/components/SaberModalWithMobile.vue.d.ts +36 -0
  32. package/dist/components/SaberStatus.mjs +4 -0
  33. package/dist/components/SaberStatus.types.d.ts +1 -0
  34. package/dist/components/SaberStatus.vue.d.ts +8 -0
  35. package/dist/components/SaberSwitchBar.mjs +4 -0
  36. package/dist/components/SaberSwitchBar.types.d.ts +13 -0
  37. package/dist/components/SaberSwitchBar.vue.d.ts +18 -0
  38. package/dist/components/info-context.d.ts +3 -0
  39. package/dist/composables/index.d.ts +12 -0
  40. package/dist/composables/use-address-parse.d.ts +15 -0
  41. package/dist/composables/use-address-parse.mjs +20 -0
  42. package/dist/composables/use-boolean.d.ts +8 -0
  43. package/dist/composables/use-boolean.mjs +20 -0
  44. package/dist/composables/use-confirm.d.ts +34 -0
  45. package/dist/composables/use-confirm.mjs +28 -0
  46. package/dist/composables/use-delay-unmount.d.ts +7 -0
  47. package/dist/composables/use-delay-unmount.mjs +26 -0
  48. package/dist/composables/use-delete.d.ts +13 -0
  49. package/dist/composables/use-delete.mjs +19 -0
  50. package/dist/composables/use-loading.d.ts +6 -0
  51. package/dist/composables/use-loading.mjs +8 -0
  52. package/dist/composables/use-skeleton.d.ts +5 -0
  53. package/dist/composables/use-skeleton.mjs +23 -0
  54. package/dist/composables/use-table.d.ts +57 -0
  55. package/dist/composables/use-table.mjs +87 -0
  56. package/dist/composables.mjs +21 -0
  57. package/dist/district-service-cOu1tbQG.js +147 -0
  58. package/dist/district.d.ts +3 -0
  59. package/dist/district.mjs +8 -0
  60. package/dist/forms/components/SaberFilterBar.vue.d.ts +41 -0
  61. package/dist/forms/components/SaberFormModal.vue.d.ts +31 -0
  62. package/dist/forms/components/SaberModal.vue.d.ts +34 -0
  63. package/dist/forms/components/fields/SaberDictCheckbox.vue.d.ts +24 -0
  64. package/dist/forms/components/fields/SaberDictRadio.vue.d.ts +24 -0
  65. package/dist/forms/components/fields/SaberDictSelect.vue.d.ts +28 -0
  66. package/dist/forms/components/fields/SaberDistrictSelect.vue.d.ts +31 -0
  67. package/dist/forms/components/fields/SaberInput.vue.d.ts +16 -0
  68. package/dist/forms/components/fields/SaberInputNumber.vue.d.ts +11 -0
  69. package/dist/forms/components/fields/SaberPopSelect.vue.d.ts +25 -0
  70. package/dist/forms/components/fields/SaberRadioGroup.vue.d.ts +11 -0
  71. package/dist/forms/components/fields/SaberSelect.vue.d.ts +11 -0
  72. package/dist/forms/components/fields/SaberTextarea.vue.d.ts +11 -0
  73. package/dist/forms/components/fields/SaberUploadImage.vue.d.ts +113 -0
  74. package/dist/forms/dict-checkbox.mjs +4 -0
  75. package/dist/forms/dict-radio.mjs +4 -0
  76. package/dist/forms/dict-select.mjs +4 -0
  77. package/dist/forms/dict-source.d.ts +3 -0
  78. package/dist/forms/district-select.mjs +4 -0
  79. package/dist/forms/district-service.d.ts +46 -0
  80. package/dist/forms/filter-state.d.ts +4 -0
  81. package/dist/forms/index.d.ts +24 -0
  82. package/dist/forms/plugin.d.ts +20 -0
  83. package/dist/forms/pop-select.mjs +4 -0
  84. package/dist/forms/presets/basic.d.ts +5 -0
  85. package/dist/forms/registry.d.ts +15 -0
  86. package/dist/forms/types.d.ts +102 -0
  87. package/dist/forms/upload-image-source.d.ts +3 -0
  88. package/dist/forms/upload-image.mjs +4 -0
  89. package/dist/forms/use-dict-options.d.ts +8 -0
  90. package/dist/forms.mjs +45 -0
  91. package/dist/index.d.ts +62 -1
  92. package/dist/index.mjs +122 -33
  93. package/dist/info-context-MfOfJNDT.js +4 -0
  94. package/dist/plugin-Dr3z0YFg.js +396 -0
  95. package/dist/types/api.d.ts +30 -0
  96. package/dist/types/auth.d.ts +54 -0
  97. package/dist/types/common.d.ts +14 -0
  98. package/dist/types/index.d.ts +3 -0
  99. package/dist/types/index.mjs +1 -0
  100. package/dist/upload-image-source-On8NHgmx.js +4 -0
  101. package/dist/use-dict-options-DjtbYYIa.js +38 -0
  102. package/dist/utils/addressParse.d.ts +37 -0
  103. package/dist/utils/addressParse.mjs +623 -0
  104. package/dist/utils/crypto.d.ts +11 -0
  105. package/dist/utils/crypto.mjs +36 -0
  106. package/dist/utils/filter.d.ts +20 -0
  107. package/dist/utils/filter.mjs +11 -0
  108. package/dist/utils/format.d.ts +9 -0
  109. package/dist/utils/format.mjs +7 -0
  110. package/dist/utils/http.d.ts +45 -0
  111. package/dist/utils/http.mjs +147 -0
  112. package/dist/utils/index.d.ts +12 -0
  113. package/dist/utils/index.mjs +41 -0
  114. package/dist/utils/klona.d.ts +2 -0
  115. package/dist/utils/klona.mjs +4 -0
  116. package/dist/utils/nanoid.d.ts +2 -0
  117. package/dist/utils/nanoid.mjs +4 -0
  118. package/dist/utils/permission.d.ts +45 -0
  119. package/dist/utils/permission.mjs +38 -0
  120. package/dist/utils/rsa.d.ts +26 -0
  121. package/dist/utils/rsa.mjs +2073 -0
  122. package/dist/utils/storage.d.ts +29 -0
  123. package/dist/utils/storage.mjs +39 -0
  124. package/dist/utils/toast.d.ts +26 -0
  125. package/dist/utils/toast.mjs +17 -0
  126. package/dist/utils/tree.d.ts +20 -0
  127. package/dist/utils/tree.mjs +30 -0
  128. package/package.json +179 -9
  129. package/dist/index.cjs +0 -1
  130. package/dist/vite.cjs +0 -1
@@ -0,0 +1,31 @@
1
+ import { DistrictNode, DistrictValue } from '../../types';
2
+ type __VLS_Props = {
3
+ districts?: readonly DistrictNode[];
4
+ placeholder?: string;
5
+ clearable?: boolean;
6
+ disabled?: boolean;
7
+ loading?: boolean;
8
+ };
9
+ type __VLS_PublicProps = {
10
+ modelValue?: DistrictValue | undefined;
11
+ } & __VLS_Props;
12
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
13
+ districts: import('vue').ComputedRef<readonly DistrictNode[]>;
14
+ loading: import('vue').ComputedRef<boolean>;
15
+ error: import('vue').ComputedRef<{} | null>;
16
+ reload: () => Promise<readonly DistrictNode[]> | undefined;
17
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
18
+ change: (value: DistrictValue | undefined) => any;
19
+ "update:modelValue": (value: DistrictValue | undefined) => any;
20
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
+ onChange?: ((value: DistrictValue | undefined) => any) | undefined;
22
+ "onUpdate:modelValue"?: ((value: DistrictValue | undefined) => any) | undefined;
23
+ }>, {
24
+ loading: boolean;
25
+ placeholder: string;
26
+ disabled: boolean;
27
+ clearable: boolean;
28
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
29
+ searchInputRef: unknown;
30
+ }, any>;
31
+ export default _default;
@@ -0,0 +1,16 @@
1
+ type __VLS_Props = {
2
+ clearable?: boolean;
3
+ };
4
+ type __VLS_PublicProps = {
5
+ modelValue?: string | number | undefined;
6
+ } & __VLS_Props;
7
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
8
+ change: (value: string | number | undefined) => any;
9
+ "update:modelValue": (value: string | number | undefined) => any;
10
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
11
+ onChange?: ((value: string | number | undefined) => any) | undefined;
12
+ "onUpdate:modelValue"?: ((value: string | number | undefined) => any) | undefined;
13
+ }>, {
14
+ clearable: boolean;
15
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
16
+ export default _default;
@@ -0,0 +1,11 @@
1
+ type __VLS_PublicProps = {
2
+ modelValue?: number | undefined;
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
+ change: (value: number | undefined) => any;
6
+ "update:modelValue": (value: number | undefined) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
8
+ onChange?: ((value: number | undefined) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((value: number | undefined) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { PopSelectOption } from '../../types';
2
+ type __VLS_Props = {
3
+ items?: PopSelectOption[];
4
+ placeholder?: string;
5
+ multiple?: boolean;
6
+ clearable?: boolean;
7
+ disabled?: boolean;
8
+ };
9
+ type __VLS_PublicProps = {
10
+ modelValue?: any;
11
+ } & __VLS_Props;
12
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
13
+ change: (value: any) => any;
14
+ "update:modelValue": (value: any) => any;
15
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
16
+ onChange?: ((value: any) => any) | undefined;
17
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
18
+ }>, {
19
+ placeholder: string;
20
+ disabled: boolean;
21
+ clearable: boolean;
22
+ items: PopSelectOption[];
23
+ multiple: boolean;
24
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
25
+ export default _default;
@@ -0,0 +1,11 @@
1
+ type __VLS_PublicProps = {
2
+ modelValue?: any;
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
+ change: (value: any) => any;
6
+ "update:modelValue": (value: any) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
8
+ onChange?: ((value: any) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,11 @@
1
+ type __VLS_PublicProps = {
2
+ modelValue?: any;
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
+ change: (value: any) => any;
6
+ "update:modelValue": (value: any) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
8
+ onChange?: ((value: any) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,11 @@
1
+ type __VLS_PublicProps = {
2
+ modelValue?: string | undefined;
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
5
+ change: (value: string | undefined) => any;
6
+ "update:modelValue": (value: string | undefined) => any;
7
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
8
+ onChange?: ((value: string | undefined) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
10
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,113 @@
1
+ import { UploadImageDataSource } from '../../types';
2
+ type UploadOrigin = 'initial' | 'uploaded';
3
+ type UploadStatus = 'uploading' | 'success' | 'error';
4
+ interface UploadItem {
5
+ uid: string;
6
+ key?: string | number;
7
+ name: string;
8
+ status: UploadStatus;
9
+ percent: number;
10
+ url: string;
11
+ value?: any;
12
+ origin: UploadOrigin;
13
+ removing: boolean;
14
+ controller?: AbortController;
15
+ error?: string;
16
+ }
17
+ type __VLS_Props = {
18
+ /** 覆盖 app.use(SaberUI) 配置的全局上传数据源。 */
19
+ dataSource?: UploadImageDataSource<any>;
20
+ multiple?: boolean;
21
+ max?: number;
22
+ maxSize?: number;
23
+ accept?: string;
24
+ disabled?: boolean;
25
+ size?: string;
26
+ };
27
+ type __VLS_PublicProps = {
28
+ modelValue?: any | any[] | null;
29
+ } & __VLS_Props;
30
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {
31
+ items: import('vue').Ref<{
32
+ uid: string;
33
+ key?: string | number | undefined;
34
+ name: string;
35
+ status: UploadStatus;
36
+ percent: number;
37
+ url: string;
38
+ value?: any;
39
+ origin: UploadOrigin;
40
+ removing: boolean;
41
+ controller?: {
42
+ readonly signal: {
43
+ readonly aborted: boolean;
44
+ onabort: ((this: AbortSignal, ev: Event) => any) | null;
45
+ readonly reason: any;
46
+ throwIfAborted: () => void;
47
+ addEventListener: {
48
+ <K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
49
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
50
+ };
51
+ removeEventListener: {
52
+ <K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
53
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
54
+ };
55
+ dispatchEvent: (event: Event) => boolean;
56
+ };
57
+ abort: (reason?: any) => void;
58
+ } | undefined;
59
+ error?: string | undefined;
60
+ }[], UploadItem[] | {
61
+ uid: string;
62
+ key?: string | number | undefined;
63
+ name: string;
64
+ status: UploadStatus;
65
+ percent: number;
66
+ url: string;
67
+ value?: any;
68
+ origin: UploadOrigin;
69
+ removing: boolean;
70
+ controller?: {
71
+ readonly signal: {
72
+ readonly aborted: boolean;
73
+ onabort: ((this: AbortSignal, ev: Event) => any) | null;
74
+ readonly reason: any;
75
+ throwIfAborted: () => void;
76
+ addEventListener: {
77
+ <K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
78
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
79
+ };
80
+ removeEventListener: {
81
+ <K extends keyof AbortSignalEventMap>(type: K, listener: (this: AbortSignal, ev: AbortSignalEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
82
+ (type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
83
+ };
84
+ dispatchEvent: (event: Event) => boolean;
85
+ };
86
+ abort: (reason?: any) => void;
87
+ } | undefined;
88
+ error?: string | undefined;
89
+ }[]>;
90
+ /** 只清理本地状态和 model,不调用远程 remove。 */
91
+ clear(): void;
92
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
93
+ progress: (percent: number, file: File) => any;
94
+ error: (error: Error, file: File) => any;
95
+ success: (value: any) => any;
96
+ "update:modelValue": (value: any) => any;
97
+ removeError: (error: Error, value: any) => any;
98
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
99
+ onProgress?: ((percent: number, file: File) => any) | undefined;
100
+ onError?: ((error: Error, file: File) => any) | undefined;
101
+ onSuccess?: ((value: any) => any) | undefined;
102
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
103
+ onRemoveError?: ((error: Error, value: any) => any) | undefined;
104
+ }>, {
105
+ disabled: boolean;
106
+ size: string;
107
+ dataSource: UploadImageDataSource<any>;
108
+ multiple: boolean;
109
+ max: number;
110
+ maxSize: number;
111
+ accept: string;
112
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
113
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberDictCheckbox.vue_vue_type_script_setup_true_lang-DUbzy_C6.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberDictRadio.vue_vue_type_script_setup_true_lang-DR6-jSID.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberDictSelect.vue_vue_type_script_setup_true_lang-B8PTKNKX.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,3 @@
1
+ import { InjectionKey } from 'vue';
2
+ import { DictDataSource } from './types';
3
+ export declare const DictDataSourceKey: InjectionKey<DictDataSource>;
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberDistrictSelect.vue_vue_type_script_setup_true_lang-BX8nLC35.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,46 @@
1
+ import { InjectionKey, Ref, ShallowRef } from 'vue';
2
+ import { DistrictNode } from './types';
3
+ export interface ResolvedDistrict {
4
+ province: string;
5
+ provinceCode: string;
6
+ city: string | null;
7
+ cityCode: string | null;
8
+ district: string | null;
9
+ districtCode: string | null;
10
+ }
11
+ /** 行政区划数据源;请求协议、鉴权和持久化缓存由具体实现负责。 */
12
+ export interface DistrictDataSource {
13
+ loadDistricts(): readonly DistrictNode[] | Promise<readonly DistrictNode[]>;
14
+ }
15
+ export interface DistrictService {
16
+ readonly districts: Readonly<ShallowRef<readonly DistrictNode[]>>;
17
+ readonly loading: Readonly<Ref<boolean>>;
18
+ readonly error: Readonly<ShallowRef<unknown>>;
19
+ load(force?: boolean): Promise<readonly DistrictNode[]>;
20
+ resolveByCode(code: string | number): ResolvedDistrict | null;
21
+ }
22
+ export interface AmapDistrictDataSourceOptions {
23
+ /** 高德 Web 服务 Key。该 Key 会出现在浏览器请求中,应在高德控制台配置安全限制。 */
24
+ key: string;
25
+ /** 默认缓存 7 天;设为 0 可关闭 localStorage 缓存。 */
26
+ cacheTtl?: number;
27
+ cacheKey?: string;
28
+ fetcher?: typeof fetch;
29
+ }
30
+ export interface SaberDistrictOptions {
31
+ /** 自定义数据源优先于 amapKey。 */
32
+ dataSource?: DistrictDataSource;
33
+ /** 使用 saber-ui 内置高德数据源时只需配置此项。 */
34
+ amapKey?: string;
35
+ cacheTtl?: number;
36
+ cacheKey?: string;
37
+ fetcher?: typeof fetch;
38
+ }
39
+ export declare const DistrictServiceKey: InjectionKey<DistrictService>;
40
+ /** 创建高德行政区划数据源,返回的树从省级节点开始。 */
41
+ export declare function createAmapDistrictDataSource(options: AmapDistrictDataSourceOptions): DistrictDataSource;
42
+ export declare function resolveDistrictDataSource(options?: SaberDistrictOptions): DistrictDataSource | undefined;
43
+ /** 创建 app 级共享服务;内存数据和在途请求由选择组件与地址解析器共同复用。 */
44
+ export declare function createDistrictService(dataSource?: DistrictDataSource): DistrictService;
45
+ /** 必须在已安装 SaberUI 的 Vue setup 作用域内调用。 */
46
+ export declare function useDistrictService(): DistrictService;
@@ -0,0 +1,4 @@
1
+ import { FilterField } from './types';
2
+ export declare function hasMeaningfulValue(value: unknown): boolean;
3
+ export declare function isSameFormValue(a: unknown, b: unknown): boolean;
4
+ export declare function hasActiveFilterValues(params: Record<string, unknown>, fields: FilterField[], initialParams?: Record<string, unknown> | null): boolean;
@@ -0,0 +1,24 @@
1
+ export { default as SaberFilterBar } from './components/SaberFilterBar.vue';
2
+ export { default as SaberFormModal } from './components/SaberFormModal.vue';
3
+ export { default as SaberModal } from './components/SaberModal.vue';
4
+ export { default as SaberInput } from './components/fields/SaberInput.vue';
5
+ export { default as SaberInputNumber } from './components/fields/SaberInputNumber.vue';
6
+ export { default as SaberDictCheckbox } from './components/fields/SaberDictCheckbox.vue';
7
+ export { default as SaberDictRadio } from './components/fields/SaberDictRadio.vue';
8
+ export { default as SaberDictSelect } from './components/fields/SaberDictSelect.vue';
9
+ export { default as SaberRadioGroup } from './components/fields/SaberRadioGroup.vue';
10
+ export { default as SaberSelect } from './components/fields/SaberSelect.vue';
11
+ export { default as SaberTextarea } from './components/fields/SaberTextarea.vue';
12
+ export { default as SaberPopSelect } from './components/fields/SaberPopSelect.vue';
13
+ export { default as SaberDistrictSelect } from './components/fields/SaberDistrictSelect.vue';
14
+ export { default as SaberUploadImage } from './components/fields/SaberUploadImage.vue';
15
+ export { hasActiveFilterValues, hasMeaningfulValue, isSameFormValue } from './filter-state';
16
+ export { DictDataSourceKey } from './dict-source';
17
+ export { UploadImageDataSourceKey } from './upload-image-source';
18
+ export { createAmapDistrictDataSource, createDistrictService, DistrictServiceKey, resolveDistrictDataSource, useDistrictService, } from './district-service';
19
+ export type { AmapDistrictDataSourceOptions, DistrictDataSource, DistrictService, ResolvedDistrict, SaberDistrictOptions, } from './district-service';
20
+ export { useDictOptions } from './use-dict-options';
21
+ export { installSaberForms, type SaberFormsOptions } from './plugin';
22
+ export { createFormRegistry, FormRegistryKey, resolveFormComponent, useFormRegistry, type FormRegistry, } from './registry';
23
+ export { basicFormComponents, basicGlobalFormComponents } from './presets/basic';
24
+ export type { BuiltinFormComponentKey, DictDataSource, DictOption, DistrictNode, DistrictValue, FilterField, FilterSearchOn, FormComponentKey, FormComponentMap, FormComponentReference, FormField, FormSubmitHandler, FormValidationError, FormValidator, OptionalFormComponentKey, PopSelectOption, UploadImageContext, UploadImageDataSource, UploadImageModelValue, UploadImageRemoveContext, } from './types';
@@ -0,0 +1,20 @@
1
+ import { App } from 'vue';
2
+ import { SaberDistrictOptions } from './district-service';
3
+ import { FormRegistry } from './registry';
4
+ import { DictDataSource, FormComponentMap, UploadImageDataSource } from './types';
5
+ export interface SaberFormsOptions {
6
+ /** 在默认字段之外注册或覆盖字段。 */
7
+ components?: FormComponentMap;
8
+ /** 为 SaberDict* 字段提供项目侧的字典加载与缓存适配。 */
9
+ dictDataSource?: DictDataSource;
10
+ /** 为按需使用的 SaberUploadImage 提供项目侧上传与删除适配。 */
11
+ uploadImageDataSource?: UploadImageDataSource<any>;
12
+ /** 配置共享行政区划服务;可只传高德 Web 服务 Key,也可替换为自定义数据源。 */
13
+ district?: SaberDistrictOptions;
14
+ }
15
+ /**
16
+ * 为某个 Vue app 安装 Saber forms。
17
+ *
18
+ * 该函数由 SaberUI 默认调用,也可供只需要 forms 的项目单独使用。
19
+ */
20
+ export declare function installSaberForms(app: App, options?: SaberFormsOptions): FormRegistry;
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberPopSelect.vue_vue_type_script_setup_true_lang-BcS27NXI.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,5 @@
1
+ import { FormComponentMap } from '../types';
2
+ /** 随 `app.use(SaberUI)` 默认安装的轻量字段。 */
3
+ export declare const basicFormComponents: FormComponentMap;
4
+ /** 需要作为全局模板组件暴露的 Saber 字段。 */
5
+ export declare const basicGlobalFormComponents: FormComponentMap;
@@ -0,0 +1,15 @@
1
+ import { Component, InjectionKey } from 'vue';
2
+ import { FormComponentMap, FormComponentReference } from './types';
3
+ export interface FormRegistry {
4
+ register(key: string, component: Component): void;
5
+ registerMany(components: FormComponentMap): void;
6
+ resolve(key: string): Component | undefined;
7
+ has(key: string): boolean;
8
+ }
9
+ export declare const FormRegistryKey: InjectionKey<FormRegistry>;
10
+ /** 创建独立的字段注册表;每个 Vue app 应拥有自己的实例。 */
11
+ export declare function createFormRegistry(initialComponents?: FormComponentMap): FormRegistry;
12
+ /** 在 Saber forms 组件中读取当前 app 的注册表。 */
13
+ export declare function useFormRegistry(): FormRegistry | undefined;
14
+ /** 将 field.which 解析为可渲染组件。 */
15
+ export declare function resolveFormComponent(registry: FormRegistry | undefined, reference: FormComponentReference): Component;
@@ -0,0 +1,102 @@
1
+ import { Component } from 'vue';
2
+ /** 已由 saber-ui 内置提供的字段 key。 */
3
+ export type BuiltinFormComponentKey = 'saber-input' | 'saber-input-number' | 'saber-dict-checkbox' | 'saber-dict-radio' | 'saber-dict-select' | 'saber-district-select' | 'saber-pop-select' | 'saber-select' | 'saber-textarea' | 'saber-radio-group' | 'ui-input' | 'ui-input-number' | 'ui-select' | 'ui-textarea' | 'ui-radio-group';
4
+ /** saber-ui 提供、但不会随默认 registry 注册的按需字段 key。 */
5
+ export type OptionalFormComponentKey = 'saber-upload-image';
6
+ /**
7
+ * 字段注册 key。
8
+ *
9
+ * 保留内置 key 的自动补全,同时允许宿主项目注册自己的字段。
10
+ */
11
+ export type FormComponentKey = BuiltinFormComponentKey | OptionalFormComponentKey | (string & {});
12
+ /** 字段既可以引用注册 key,也可在一次性场景直接传 Vue 组件。 */
13
+ export type FormComponentReference = FormComponentKey | Component;
14
+ export type FormComponentMap = Record<string, Component>;
15
+ /** PopSelect 组件选项。 */
16
+ export interface PopSelectOption<T = unknown> {
17
+ label: string;
18
+ value: T;
19
+ disabled?: boolean;
20
+ }
21
+ /** 字典字段消费的标准选项;允许保留业务侧附加元数据。 */
22
+ export interface DictOption<T = string | number> {
23
+ label: string;
24
+ value: T;
25
+ disabled?: boolean;
26
+ [key: string]: unknown;
27
+ }
28
+ /**
29
+ * 字典数据源由宿主项目实现。
30
+ * 请求、缓存、租户隔离和后端数据转换均由宿主负责,saber-ui 只负责调用和渲染。
31
+ */
32
+ export interface DictDataSource {
33
+ loadOptions(dictType: string): readonly DictOption[] | Promise<readonly DictOption[]>;
34
+ }
35
+ export interface UploadImageContext {
36
+ onProgress(percent: number): void;
37
+ signal: AbortSignal;
38
+ }
39
+ export interface UploadImageRemoveContext {
40
+ /** initial 表示表单初始值,uploaded 表示当前组件实例中新上传的文件。 */
41
+ origin: 'initial' | 'uploaded';
42
+ }
43
+ /**
44
+ * 图片上传适配器。T 完全由宿主定义,组件通过 getKey/getUrl 读取必要字段。
45
+ */
46
+ export interface UploadImageDataSource<T = unknown> {
47
+ upload(file: File, context: UploadImageContext): Promise<T>;
48
+ remove?(value: T, context: UploadImageRemoveContext): Promise<void>;
49
+ getKey(value: T): string | number;
50
+ getUrl(value: T): string;
51
+ getName?(value: T): string;
52
+ }
53
+ export type UploadImageModelValue<T = unknown> = T | T[] | null;
54
+ /** 通用行政区划树节点。 */
55
+ export interface DistrictNode {
56
+ name: string;
57
+ adcode: string;
58
+ citycode?: string;
59
+ level: 'province' | 'city' | 'district' | 'street';
60
+ districts?: DistrictNode[];
61
+ }
62
+ /** DistrictSelect 的标准选中值。 */
63
+ export interface DistrictValue {
64
+ province: string;
65
+ provinceCode: string;
66
+ city: string;
67
+ cityCode: string;
68
+ district: string;
69
+ districtCode: string;
70
+ }
71
+ export type FilterSearchOn = 'change' | 'update:model-value' | 'manual';
72
+ export interface FilterField {
73
+ /** 对应筛选参数对象中的字段名。 */
74
+ key: string;
75
+ /** 已注册字段的 key,或一次性传入的 Vue 组件。 */
76
+ which: FormComponentReference;
77
+ /** 透传给字段组件的 props / attrs。 */
78
+ props?: Record<string, unknown>;
79
+ /** 附加到字段组件根节点的 class。 */
80
+ class?: string;
81
+ /** 控制该字段何时触发 FilterBar 的 search 事件。 */
82
+ searchOn?: FilterSearchOn;
83
+ }
84
+ export interface FormField<T extends Record<string, unknown> = Record<string, unknown>> {
85
+ /** 对应表单状态中的字段名。 */
86
+ key: Extract<keyof T, string> | string;
87
+ /** UFormField 标签。 */
88
+ label?: string;
89
+ /** 已注册字段的 key,或一次性传入的 Vue 组件。 */
90
+ which: FormComponentReference;
91
+ /** 透传给字段组件的 props / attrs。 */
92
+ props?: Record<string, unknown>;
93
+ /** 附加到 UFormField 的 class。 */
94
+ class?: string;
95
+ }
96
+ /** 与 Nuxt UI UForm 的校验结果兼容的最小错误结构。 */
97
+ export interface FormValidationError {
98
+ name?: string;
99
+ message: string;
100
+ }
101
+ export type FormValidator<T extends Record<string, unknown>> = (state: T) => FormValidationError[] | void | Promise<FormValidationError[] | void>;
102
+ export type FormSubmitHandler<T extends Record<string, unknown>> = (state: T) => unknown | Promise<unknown>;
@@ -0,0 +1,3 @@
1
+ import { InjectionKey } from 'vue';
2
+ import { UploadImageDataSource } from './types';
3
+ export declare const UploadImageDataSourceKey: InjectionKey<UploadImageDataSource<any>>;
@@ -0,0 +1,4 @@
1
+ import { _ as f } from "../SaberUploadImage.vue_vue_type_script_setup_true_lang-CAwci2Vr.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,8 @@
1
+ import { Ref } from 'vue';
2
+ import { DictDataSource, DictOption } from './types';
3
+ /** 为字典字段加载标准选项,并避免 dictType 快速切换造成旧请求覆盖新数据。 */
4
+ export declare function useDictOptions(dictType: Readonly<Ref<string>>, dataSourceOverride: Readonly<Ref<DictDataSource | undefined>>): {
5
+ items: import('vue').ShallowRef<DictOption<string | number>[], DictOption<string | number>[]>;
6
+ loading: Ref<boolean, boolean>;
7
+ error: import('vue').ShallowRef<unknown, unknown>;
8
+ };
package/dist/forms.mjs ADDED
@@ -0,0 +1,45 @@
1
+ import { F as r, _ as s, a as o, b as t, c as i, d as c, e as m, f as S, g as p, h as b, i as l, j as u, k as D, l as f, r as x, u as n } from "./plugin-Dr3z0YFg.js";
2
+ import { _ } from "./SaberModal.vue_vue_type_script_setup_true_lang-DJno3jA3.js";
3
+ import { _ as g } from "./SaberDictCheckbox.vue_vue_type_script_setup_true_lang-DUbzy_C6.js";
4
+ import { _ as v, a as R } from "./SaberDictRadio.vue_vue_type_script_setup_true_lang-DR6-jSID.js";
5
+ import { _ as C } from "./SaberDictSelect.vue_vue_type_script_setup_true_lang-B8PTKNKX.js";
6
+ import { _ as K } from "./SaberPopSelect.vue_vue_type_script_setup_true_lang-BcS27NXI.js";
7
+ import { _ as U } from "./SaberDistrictSelect.vue_vue_type_script_setup_true_lang-BX8nLC35.js";
8
+ import { _ as k } from "./SaberUploadImage.vue_vue_type_script_setup_true_lang-CAwci2Vr.js";
9
+ import { D as G, u as j } from "./use-dict-options-DjtbYYIa.js";
10
+ import { U as N } from "./upload-image-source-On8NHgmx.js";
11
+ import { D as P, c as T, a as q, r as w, u as z } from "./district-service-cOu1tbQG.js";
12
+ export {
13
+ G as DictDataSourceKey,
14
+ P as DistrictServiceKey,
15
+ r as FormRegistryKey,
16
+ g as SaberDictCheckbox,
17
+ v as SaberDictRadio,
18
+ C as SaberDictSelect,
19
+ U as SaberDistrictSelect,
20
+ s as SaberFilterBar,
21
+ o as SaberFormModal,
22
+ t as SaberInput,
23
+ i as SaberInputNumber,
24
+ _ as SaberModal,
25
+ K as SaberPopSelect,
26
+ R as SaberRadioGroup,
27
+ c as SaberSelect,
28
+ m as SaberTextarea,
29
+ k as SaberUploadImage,
30
+ N as UploadImageDataSourceKey,
31
+ S as basicFormComponents,
32
+ p as basicGlobalFormComponents,
33
+ T as createAmapDistrictDataSource,
34
+ q as createDistrictService,
35
+ b as createFormRegistry,
36
+ l as hasActiveFilterValues,
37
+ u as hasMeaningfulValue,
38
+ D as installSaberForms,
39
+ f as isSameFormValue,
40
+ w as resolveDistrictDataSource,
41
+ x as resolveFormComponent,
42
+ j as useDictOptions,
43
+ z as useDistrictService,
44
+ n as useFormRegistry
45
+ };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,67 @@
1
1
  import { Plugin } from 'vue';
2
2
  import { default as BadgeStatus } from './BadgeStatus.vue';
3
+ import { default as SaberNoData } from './SaberNoData.vue';
4
+ import { default as SaberConfirmModal } from './components/SaberConfirmModal.vue';
5
+ import { default as SaberConfirmProvider } from './components/SaberConfirmProvider.vue';
6
+ import { default as SaberInfo } from './components/SaberInfo.vue';
7
+ import { default as SaberInfoProvider } from './components/SaberInfoProvider.vue';
8
+ import { default as SaberModalWithMobile } from './components/SaberModalWithMobile.vue';
9
+ import { default as SaberStatus } from './components/SaberStatus.vue';
10
+ import { default as SaberSwitchBar } from './components/SaberSwitchBar.vue';
11
+ import { default as SaberFilterBar } from './forms/components/SaberFilterBar.vue';
12
+ import { default as SaberFormModal } from './forms/components/SaberFormModal.vue';
13
+ import { default as SaberModal } from './forms/components/SaberModal.vue';
14
+ import { default as SaberInput } from './forms/components/fields/SaberInput.vue';
15
+ import { default as SaberInputNumber } from './forms/components/fields/SaberInputNumber.vue';
16
+ import { default as SaberDictCheckbox } from './forms/components/fields/SaberDictCheckbox.vue';
17
+ import { default as SaberDictRadio } from './forms/components/fields/SaberDictRadio.vue';
18
+ import { default as SaberDictSelect } from './forms/components/fields/SaberDictSelect.vue';
19
+ import { default as SaberDistrictSelect } from './forms/components/fields/SaberDistrictSelect.vue';
20
+ import { default as SaberPopSelect } from './forms/components/fields/SaberPopSelect.vue';
21
+ import { default as SaberRadioGroup } from './forms/components/fields/SaberRadioGroup.vue';
22
+ import { default as SaberSelect } from './forms/components/fields/SaberSelect.vue';
23
+ import { default as SaberTextarea } from './forms/components/fields/SaberTextarea.vue';
24
+ import { SaberFormsOptions } from './forms/plugin';
25
+ export interface SaberUIOptions {
26
+ forms?: SaberFormsOptions;
27
+ }
3
28
  declare const SaberUI: Plugin;
4
29
  export default SaberUI;
5
- export { BadgeStatus };
30
+ export { BadgeStatus as SaberBadgeStatus };
6
31
  export type { BadgeStatusProps } from './BadgeStatus.types';
32
+ export { SaberNoData };
33
+ export type { SaberNoDataProps } from './SaberNoData.types';
34
+ export { SaberConfirmModal, SaberConfirmProvider, SaberInfo, SaberInfoProvider, SaberModalWithMobile, SaberStatus, SaberSwitchBar, };
35
+ export type { SaberInfoContext, SaberInfoMode, SaberInfoProps, SaberInfoVariant } from './components/SaberInfo.types';
36
+ export type { SaberStatusType } from './components/SaberStatus.types';
37
+ export type { SaberSwitchBarItem, SaberSwitchBarUI, SaberSwitchBarValue } from './components/SaberSwitchBar.types';
38
+ export { SaberFilterBar, SaberFormModal, SaberDictCheckbox, SaberDictRadio, SaberDictSelect, SaberDistrictSelect, SaberInput, SaberInputNumber, SaberModal, SaberPopSelect, SaberRadioGroup, SaberSelect, SaberTextarea, };
39
+ export { installSaberForms, type SaberFormsOptions } from './forms/plugin';
40
+ export type { DictDataSource, DictOption, FilterField, FormField, FormSubmitHandler, FormValidator } from './forms/types';
41
+ export type { DistrictDataSource, SaberDistrictOptions } from './forms/district-service';
42
+ declare module 'vue' {
43
+ interface GlobalComponents {
44
+ SaberBadgeStatus: typeof BadgeStatus;
45
+ SaberNoData: typeof SaberNoData;
46
+ SaberConfirmModal: typeof SaberConfirmModal;
47
+ SaberConfirmProvider: typeof SaberConfirmProvider;
48
+ SaberInfo: typeof SaberInfo;
49
+ SaberInfoProvider: typeof SaberInfoProvider;
50
+ SaberModalWithMobile: typeof SaberModalWithMobile;
51
+ SaberStatus: typeof SaberStatus;
52
+ SaberSwitchBar: typeof SaberSwitchBar;
53
+ SaberFilterBar: typeof SaberFilterBar;
54
+ SaberFormModal: typeof SaberFormModal;
55
+ SaberModal: typeof SaberModal;
56
+ SaberDictCheckbox: typeof SaberDictCheckbox;
57
+ SaberDictRadio: typeof SaberDictRadio;
58
+ SaberDictSelect: typeof SaberDictSelect;
59
+ SaberDistrictSelect: typeof SaberDistrictSelect;
60
+ SaberInput: typeof SaberInput;
61
+ SaberInputNumber: typeof SaberInputNumber;
62
+ SaberPopSelect: typeof SaberPopSelect;
63
+ SaberRadioGroup: typeof SaberRadioGroup;
64
+ SaberSelect: typeof SaberSelect;
65
+ SaberTextarea: typeof SaberTextarea;
66
+ }
67
+ }