@semi-kit/hooks 1.1.9 → 1.1.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.
@@ -0,0 +1,24 @@
1
+ import { Ref } from "vue";
2
+ interface UseDrawerReturn {
3
+ /**
4
+ * 显示状态
5
+ */
6
+ showDrawer: Ref<boolean>;
7
+ /**
8
+ * 打开 Drawer
9
+ */
10
+ openDrawer: () => void;
11
+ /**
12
+ * 关闭 Drawer
13
+ */
14
+ closeDrawer: () => void;
15
+ /**
16
+ * 切换 Drawer 状态
17
+ */
18
+ toggleDrawer: () => void;
19
+ }
20
+ /**
21
+ * Drawer Hook
22
+ */
23
+ declare const useDrawer: () => UseDrawerReturn;
24
+ export { UseDrawerReturn, useDrawer };
package/lib/drawer.mjs ADDED
@@ -0,0 +1 @@
1
+ import{ref}from"vue";const useDrawer=()=>{let t=ref(!1);return{showDrawer:t,closeDrawer:()=>{t.value=!1},openDrawer:()=>{t.value=!0},toggleDrawer:()=>{t.value=!t.value}}};export{useDrawer};
@@ -0,0 +1,24 @@
1
+ import { Ref } from "vue";
2
+ interface UseDropdownReturn {
3
+ /**
4
+ * 显示状态
5
+ */
6
+ showDropdown: Ref<boolean>;
7
+ /**
8
+ * 打开 Dropdown
9
+ */
10
+ openDropdown: () => void;
11
+ /**
12
+ * 关闭 Dropdown
13
+ */
14
+ closeDropdown: () => void;
15
+ /**
16
+ * 切换 Dropdown 状态
17
+ */
18
+ toggleDropdown: () => void;
19
+ }
20
+ /**
21
+ * Dropdown Hook
22
+ */
23
+ declare const useDropdown: () => UseDropdownReturn;
24
+ export { UseDropdownReturn, useDropdown };
@@ -0,0 +1 @@
1
+ import{ref}from"vue";const useDropdown=()=>{let t=ref(!1);return{showDropdown:t,closeDropdown:()=>{t.value=!1},openDropdown:()=>{t.value=!0},toggleDropdown:()=>{t.value=!t.value}}};export{useDropdown};
@@ -0,0 +1,19 @@
1
+ import { ComputedRef, Ref } from "vue";
2
+ import { DataTableColumns } from "naive-ui";
3
+ import { InternalRowData } from "naive-ui/es/data-table/src/interface";
4
+ interface UseFilterColumnReturn {
5
+ /**
6
+ * 表格列配置
7
+ */
8
+ tableColumns: ComputedRef<DataTableColumns<InternalRowData>>;
9
+ /**
10
+ * 可过滤的列配置列表
11
+ */
12
+ filterColumns: Ref<any[]>;
13
+ /**
14
+ * 忽略的列类型
15
+ */
16
+ ignoreTypes: string[];
17
+ }
18
+ declare const useFilterColumn: (columns: Ref<DataTableColumns<any>>) => UseFilterColumnReturn;
19
+ export { UseFilterColumnReturn, useFilterColumn };
@@ -0,0 +1 @@
1
+ import{computed,ref,watch}from"vue";const useFilterColumn=r=>{let i=[`selection`,`expand`],a=ref([]);return watch(()=>r.value,e=>{a.value=e.map(e=>({show:!0,...e}))},{immediate:!0}),{tableColumns:computed(()=>{let e=[];for(let t=0;t<a.value.length;t++){let{show:n,...r}=a.value[t];n&&(a.value[t].type===`selection`?e.push({...r,width:45}):e.push({resizable:!0,ellipsis:{tooltip:{scrollable:!0}},minWidth:50,...r}))}return e}),filterColumns:a,ignoreTypes:i}};export{useFilterColumn};
package/lib/form.d.mts ADDED
@@ -0,0 +1,46 @@
1
+ import { Ref } from "vue";
2
+ import { FormItemRule, FormValidationError } from "naive-ui";
3
+ import { FormInst } from "naive-ui/es/form/src/interface";
4
+ interface UseFormReturn<T> {
5
+ /**
6
+ * 表单数据
7
+ */
8
+ formData: Ref<any>;
9
+ /**
10
+ * 表单实例引用
11
+ */
12
+ formInst: Ref<FormInst | null>;
13
+ /**
14
+ * 更新表单字段数据
15
+ * @param fields - 需要更新的字段对象
16
+ */
17
+ updateField: (fields: Partial<T> | null | undefined) => void;
18
+ /**
19
+ * 重置表单数据,并移除校验
20
+ */
21
+ resetField: () => void;
22
+ /**
23
+ * 重置表单验证状态
24
+ */
25
+ restoreValidation: () => void;
26
+ /**
27
+ * 验证表单
28
+ * @param validateCallback - 验证回调函数
29
+ * @param shouldRuleBeApplied - 规则应用条件函数
30
+ */
31
+ validate: (validateCallback?: (errors?: FormValidationError[]) => void, shouldRuleBeApplied?: (rule: FormItemRule) => boolean) => any;
32
+ /**
33
+ * 过滤列表选择项提供给表单
34
+ * @param selectedList - 选中列表
35
+ * @param formData - 表单数据
36
+ * @returns 过滤后的数据对象
37
+ */
38
+ useFilterSelectedData: <Q = any, R = any>(selectedList?: Q, formData?: R) => any;
39
+ }
40
+ /**
41
+ * 表单数据管理 Hook
42
+ * @param data - 原始表单数据
43
+ * @returns 表单管理对象
44
+ */
45
+ declare const useForm: <T = never>(data: NoInfer<T>) => UseFormReturn<T>;
46
+ export { UseFormReturn, useForm };
package/lib/form.mjs ADDED
@@ -0,0 +1 @@
1
+ import{ref,toRaw}from"vue";import{cloneDeep,pick}from"es-toolkit";const useForm=i=>{let a=ref(structuredClone(i)),o=ref(null),s=()=>o?.value?.restoreValidation(),c=(e,n)=>o?.value?.validate(e,n),l=e=>{e&&Object.assign(a.value,e)};return{updateField:l,resetField:()=>{l(cloneDeep(i)),s()},formData:a,formInst:o,restoreValidation:s,validate:c,useFilterSelectedData:(e,r)=>pick(toRaw(e).at(0)??{},Object.keys(r??{}))}};export{useForm};
@@ -1,16 +1,28 @@
1
+ interface UseForwardInstReturn<T> {
2
+ /**
3
+ * 转发实例函数
4
+ * @param el - 目标实例元素
5
+ */
6
+ forwardInst: (el: any) => void;
7
+ /**
8
+ * 目标实例(仅在 exposeTarget 为 true 时存在)
9
+ */
10
+ targetInst?: {
11
+ value: T | null;
12
+ };
13
+ }
14
+ /**
15
+ * 转发子组件实例
16
+ * @param options - 配置选项
17
+ * @param options.methods - 需要暴露的方法对象
18
+ * @param options.exposeTarget - 是否暴露目标实例
19
+ * @returns 实例转发对象
20
+ */
1
21
  declare function useForwardInst<T>({
2
22
  methods,
3
23
  exposeTarget
4
24
  }?: {
5
25
  methods?: Record<string, any>;
6
26
  exposeTarget?: boolean;
7
- }): {
8
- forwardInst: (el: any) => void;
9
- targetInst: {
10
- value: T | null;
11
- };
12
- } | {
13
- forwardInst: (el: any) => void;
14
- targetInst?: undefined;
15
- };
16
- export { useForwardInst };
27
+ }): UseForwardInstReturn<T>;
28
+ export { UseForwardInstReturn, useForwardInst };
package/lib/index.d.mts CHANGED
@@ -1,3 +1,11 @@
1
- import { useForwardInst } from "./forward-inst.mjs";
2
- import { useSortable } from "./sortable.mjs";
3
- export { useForwardInst, useSortable };
1
+ import { UseDrawerReturn, useDrawer } from "./drawer.mjs";
2
+ import { UseDropdownReturn, useDropdown } from "./dropdown.mjs";
3
+ import { UseFilterColumnReturn, useFilterColumn } from "./filter-column.mjs";
4
+ import { UseFormReturn, useForm } from "./form.mjs";
5
+ import { UseForwardInstReturn, useForwardInst } from "./forward-inst.mjs";
6
+ import { UseSortableReturn, useSortable } from "./sortable.mjs";
7
+ import { UseTreeReturn, useTree } from "./tree.mjs";
8
+ import { UseModalReturn, useModal } from "./modal.mjs";
9
+ import { UsePopoverReturn, usePopover } from "./popover.mjs";
10
+ import { UseTableSelectionReturn, useTableSelection } from "./selection.mjs";
11
+ export { UseDrawerReturn, UseDropdownReturn, UseFilterColumnReturn, UseFormReturn, UseForwardInstReturn, UseModalReturn, UsePopoverReturn, UseSortableReturn, UseTableSelectionReturn, UseTreeReturn, useDrawer, useDropdown, useFilterColumn, useForm, useForwardInst, useModal, usePopover, useSortable, useTableSelection, useTree };
package/lib/index.mjs CHANGED
@@ -1 +1 @@
1
- import{useForwardInst}from"./forward-inst.mjs";import{useSortable}from"./sortable.mjs";export{useForwardInst,useSortable};
1
+ import{useDrawer}from"./drawer.mjs";import{useDropdown}from"./dropdown.mjs";import{useFilterColumn}from"./filter-column.mjs";import{useForm}from"./form.mjs";import{useForwardInst}from"./forward-inst.mjs";import{useSortable}from"./sortable.mjs";import{useTree}from"./tree.mjs";import{useModal}from"./modal.mjs";import{usePopover}from"./popover.mjs";import{useTableSelection}from"./selection.mjs";export{useDrawer,useDropdown,useFilterColumn,useForm,useForwardInst,useModal,usePopover,useSortable,useTableSelection,useTree};
@@ -0,0 +1,24 @@
1
+ import { Ref } from "vue";
2
+ interface UseModalReturn {
3
+ /**
4
+ * Modal 显示状态
5
+ */
6
+ showModal: Ref<boolean>;
7
+ /**
8
+ * 打开 Modal
9
+ */
10
+ openModal: () => void;
11
+ /**
12
+ * 关闭 Modal
13
+ */
14
+ closeModal: () => void;
15
+ /**
16
+ * 切换 Modal 状态
17
+ */
18
+ toggleModal: () => void;
19
+ }
20
+ /**
21
+ * Modal Hook
22
+ */
23
+ declare const useModal: () => UseModalReturn;
24
+ export { UseModalReturn, useModal };
package/lib/modal.mjs ADDED
@@ -0,0 +1 @@
1
+ import{ref}from"vue";const useModal=()=>{let t=ref(!1);return{showModal:t,closeModal:()=>{t.value=!1},openModal:()=>{t.value=!0},toggleModal:()=>{t.value=!t.value}}};export{useModal};
@@ -0,0 +1,24 @@
1
+ import { Ref } from "vue";
2
+ interface UsePopoverReturn {
3
+ /**
4
+ * Popover 显示状态
5
+ */
6
+ showPopover: Ref<boolean>;
7
+ /**
8
+ * 打开 Popover
9
+ */
10
+ openPopover: () => void;
11
+ /**
12
+ * 关闭 Popover
13
+ */
14
+ closePopover: () => void;
15
+ /**
16
+ * 切换 Popover 状态
17
+ */
18
+ togglePopover: () => void;
19
+ }
20
+ /**
21
+ * Popover Hook
22
+ */
23
+ declare const usePopover: () => UsePopoverReturn;
24
+ export { UsePopoverReturn, usePopover };
@@ -0,0 +1 @@
1
+ import{ref}from"vue";const usePopover=()=>{let t=ref(!1);return{showPopover:t,closePopover:()=>{t.value=!1},openPopover:()=>{t.value=!0},togglePopover:()=>{t.value=!t.value}}};export{usePopover};
@@ -0,0 +1,37 @@
1
+ import { Ref } from "vue";
2
+ import { RowData } from "naive-ui/es/data-table/src/interface";
3
+ type MixedArray = (string | number)[];
4
+ interface UseTableSelectionReturn {
5
+ /**
6
+ * 选择 key 列表
7
+ */
8
+ selectedKeys: Ref<MixedArray>;
9
+ /**
10
+ * 获取行数据 key 值
11
+ * @param row - 行数据
12
+ * @returns key 值
13
+ */
14
+ rowKey: (row: RowData) => any;
15
+ /**
16
+ * 选中项改变回调函数
17
+ * @param keys - 选中的 key 列表
18
+ * @param rows - 选中的行数据列表
19
+ */
20
+ checkedChange: (keys: MixedArray, rows: object[]) => void;
21
+ /**
22
+ * 清空选中项
23
+ */
24
+ clearSelected: () => void;
25
+ /**
26
+ * 获取选中 key 列表
27
+ * @returns 选中 key 列表
28
+ */
29
+ getSelectedKeys: () => MixedArray;
30
+ /**
31
+ * 获取选中行数据列表
32
+ * @returns 选中数据列表
33
+ */
34
+ getSelectedRows: () => object[];
35
+ }
36
+ declare const useTableSelection: (keyField: string) => UseTableSelectionReturn;
37
+ export { UseTableSelectionReturn, useTableSelection };
@@ -0,0 +1 @@
1
+ import{ref,toRaw}from"vue";const useTableSelection=n=>{let r=ref([]),i=ref([]);return{selectedKeys:r,clearSelected:()=>{r.value=[],i.value=[]},rowKey:e=>e[n],checkedChange:(e,t)=>{r.value=e,i.value=t},getSelectedKeys:()=>toRaw(r.value),getSelectedRows:()=>i.value.map(e=>toRaw(e))}};export{useTableSelection};
@@ -1,8 +1,27 @@
1
1
  import Sortable from "sortablejs";
2
- declare const useSortable: (id: string, options?: Sortable.Options) => {
3
- instance: null;
2
+ interface UseSortableReturn {
3
+ /**
4
+ * Sortable 实例
5
+ */
6
+ instance: Sortable | null;
7
+ /**
8
+ * 初始化 Sortable
9
+ */
4
10
  initSortable: () => void;
11
+ /**
12
+ * 获取 Sortable 实例
13
+ * @returns Sortable 实例或 null
14
+ */
5
15
  getInstance: () => Sortable | null;
6
- destroy: () => null;
7
- };
8
- export { useSortable };
16
+ /**
17
+ * 销毁 Sortable 实例
18
+ */
19
+ destroy: () => void;
20
+ }
21
+ /**
22
+ * Sortable Hook
23
+ * @param selector - 目标元素选择器
24
+ * @param options - Sortable 配置选项
25
+ */
26
+ declare const useSortable: (selector: string, options?: Sortable.Options) => UseSortableReturn;
27
+ export { UseSortableReturn, useSortable };
package/lib/sortable.mjs CHANGED
@@ -1 +1 @@
1
- import Sortable from"sortablejs";const useSortable=(t,n)=>{let r=null;return{instance:r,initSortable:()=>{let i=document.getElementById(t);i&&(r=Sortable.create(i,{animation:500,...n}))},getInstance:()=>r,destroy:()=>r&&=(r?.destroy(),null)}};export{useSortable};
1
+ import Sortable from"sortablejs";const useSortable=(t,n)=>{let r=null;return{instance:r,initSortable:()=>{let i=document.querySelector(t);i&&(r=Sortable.create(i,{animation:500,...n}))},getInstance:()=>r,destroy:()=>r&&=(r?.destroy(),null)}};export{useSortable};
package/lib/tree.d.mts ADDED
@@ -0,0 +1,79 @@
1
+ import { Ref } from "vue";
2
+ type MixedArray = (string | number)[];
3
+ interface UseTreeReturn<T> {
4
+ /**
5
+ * 当前选中的节点 key 列表
6
+ */
7
+ selectedKeys: Ref<MixedArray>;
8
+ /**
9
+ * 搜索文本
10
+ */
11
+ searchText: Ref<string>;
12
+ /**
13
+ * 全选状态的节点 key 列表
14
+ */
15
+ checkedKeys: Ref<MixedArray>;
16
+ /**
17
+ * 全选状态的节点数据列表
18
+ */
19
+ checkedRows: Ref<T[]>;
20
+ /**
21
+ * 半选状态的节点 key 列表
22
+ */
23
+ halfCheckedKeys: Ref<MixedArray>;
24
+ /**
25
+ * 半选状态的节点数据列表
26
+ */
27
+ halfCheckedRows: Ref<T[]>;
28
+ /**
29
+ * 更新全选状态的 key 列表
30
+ * @param val - 新 key 列表
31
+ */
32
+ updateCheckedKeys: (val: MixedArray) => void;
33
+ /**
34
+ * 更新全选状态的数据列表
35
+ * @param val - 新数据列表
36
+ */
37
+ updateCheckedRows: (val: T[]) => void;
38
+ /**
39
+ * 更新半选状态的 key 列表
40
+ * @param val - 新 key 列表
41
+ */
42
+ updateHalfCheckedKeys: (val: MixedArray) => void;
43
+ /**
44
+ * 更新半选状态的 rows 列表
45
+ * @param val - 新 rows 列表
46
+ */
47
+ updateHalfCheckedRows: (val: T[]) => void;
48
+ /**
49
+ * 节点勾选项发生变化时的回调函数
50
+ * @param keys - 勾选 key 列表
51
+ * @param options - 勾选数据列表
52
+ */
53
+ onUpdateChecked: (keys: MixedArray, options: T[]) => void;
54
+ /**
55
+ * 节点部分勾选项发生变化时的回调函数
56
+ * @param keys - 半选 key 列表
57
+ * @param options - 半选数据列表
58
+ */
59
+ onUpdateHalfChecked: (keys: MixedArray, options: T[]) => void;
60
+ /**
61
+ * 根据条件过滤全选状态的 key 列表
62
+ * @param predicate - 过滤条件函数
63
+ * @param key - 数据中作为 key 的字段名,默认为 'id'
64
+ * @returns 过滤后 key 列表
65
+ */
66
+ getFilteredCheckedKeys: (predicate: (value: T, index: number) => boolean, key?: string) => MixedArray;
67
+ /**
68
+ * 根据条件过滤全选状态的 rows 列表
69
+ * @param predicate - 过滤条件函数
70
+ * @returns 过滤后 rows 列表
71
+ */
72
+ getFilteredCheckedRows: (predicate: (value: T, index: number) => boolean) => T[];
73
+ /**
74
+ * 清空所有勾选状态
75
+ */
76
+ clear: () => void;
77
+ }
78
+ declare const useTree: <T>() => UseTreeReturn<T>;
79
+ export { UseTreeReturn, useTree };
package/lib/tree.mjs ADDED
@@ -0,0 +1 @@
1
+ import{ref,toRaw}from"vue";const useTree=()=>{let n=ref([]),r=ref(``),i=ref([]),a=ref([]),o=ref([]),s=ref([]),c=e=>i.value=e,l=e=>a.value=e,u=e=>o.value=e,d=e=>s.value=e,f=(e,t)=>{i.value=e,a.value=t},p=(e,t)=>{o.value=e,s.value=t},m=(e,t=`id`)=>h(e).map(e=>e[t]),h=e=>toRaw(a.value).filter((t,n)=>e(t,n));return{checkedRows:a,getFilteredCheckedKeys:m,getFilteredCheckedRows:h,halfCheckedRows:s,clear:()=>(c([]),u([])),updateHalfCheckedKeys:u,updateCheckedKeys:c,updateCheckedRows:l,updateHalfCheckedRows:d,selectedKeys:n,searchText:r,halfCheckedKeys:o,checkedKeys:i,onUpdateChecked:f,onUpdateHalfChecked:p}};export{useTree};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semi-kit/hooks",
3
- "version": "1.1.9",
3
+ "version": "1.1.11",
4
4
  "description": "Commonly used Hooks collection",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -16,8 +16,16 @@
16
16
  "types": "./lib/index.d.mts",
17
17
  "exports": {
18
18
  ".": "./lib/index.mjs",
19
+ "./drawer": "./lib/drawer.mjs",
20
+ "./dropdown": "./lib/dropdown.mjs",
21
+ "./filter-column": "./lib/filter-column.mjs",
22
+ "./form": "./lib/form.mjs",
19
23
  "./forward-inst": "./lib/forward-inst.mjs",
24
+ "./modal": "./lib/modal.mjs",
25
+ "./popover": "./lib/popover.mjs",
26
+ "./selection": "./lib/selection.mjs",
20
27
  "./sortable": "./lib/sortable.mjs",
28
+ "./tree": "./lib/tree.mjs",
21
29
  "./package.json": "./package.json"
22
30
  },
23
31
  "scripts": {
@@ -34,12 +42,16 @@
34
42
  "typescript": "catalog:",
35
43
  "sortablejs": "catalog:",
36
44
  "@types/sortablejs": "catalog:",
37
- "vue": "catalog:"
45
+ "vue": "catalog:",
46
+ "naive-ui": "catalog:",
47
+ "es-toolkit": "catalog:"
38
48
  },
39
49
  "peerDependencies": {
40
50
  "sortablejs": "*",
41
51
  "@types/sortablejs": "*",
42
- "vue": "*"
52
+ "vue": "*",
53
+ "naive-ui": "*",
54
+ "es-toolkit": "*"
43
55
  },
44
56
  "peerDependenciesMeta": {
45
57
  "sortablejs": {
@@ -50,6 +62,12 @@
50
62
  },
51
63
  "vue": {
52
64
  "optional": true
65
+ },
66
+ "naive-ui": {
67
+ "optional": true
68
+ },
69
+ "es-toolkit": {
70
+ "optional": true
53
71
  }
54
72
  }
55
73
  }