@robot-admin/naive-ui-components 0.6.10 → 0.6.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 +277 -261
- package/dist/C_AudioPlayer-DKRIGhi7.css.map +1 -0
- package/dist/C_AudioPlayer-DlB6eNsa.css.map +1 -0
- package/dist/C_AudioPlayer.cjs +1 -0
- package/dist/C_AudioPlayer.css +283 -0
- package/dist/C_AudioPlayer.d.cts +2 -0
- package/dist/C_AudioPlayer.d.ts +2 -0
- package/dist/C_AudioPlayer.js +1 -0
- package/dist/C_AudioPlayer.js.map +1 -0
- package/dist/C_AudioPlayer2.js +2 -0
- package/dist/C_AudioPlayer2.js.map +1 -0
- package/dist/C_AvatarGroup-D02zci-i.css.map +1 -0
- package/dist/C_AvatarGroup-DatHaUlY.css.map +1 -0
- package/dist/C_AvatarGroup.cjs +1 -0
- package/dist/C_AvatarGroup.css +107 -0
- package/dist/C_AvatarGroup.d.cts +2 -0
- package/dist/C_AvatarGroup.d.ts +2 -0
- package/dist/C_AvatarGroup.js +1 -0
- package/dist/C_AvatarGroup.js.map +1 -0
- package/dist/C_AvatarGroup2.js +2 -0
- package/dist/C_AvatarGroup2.js.map +1 -0
- package/dist/C_Barcode.d.cts +1 -1
- package/dist/C_Barcode.d.ts +1 -1
- package/dist/C_Breadcrumb.d.cts +1 -1
- package/dist/C_Breadcrumb.d.ts +1 -1
- package/dist/C_Captcha.d.cts +1 -1
- package/dist/C_Captcha.d.ts +1 -1
- package/dist/C_Cascade.d.cts +1 -1
- package/dist/C_Cascade.d.ts +1 -1
- package/dist/C_Chat-CcjZdAwu.css.map +1 -0
- package/dist/C_Chat-Diq7tyWU.css.map +1 -0
- package/dist/C_Chat.cjs +1 -0
- package/dist/C_Chat.css +395 -0
- package/dist/C_Chat.d.cts +2 -0
- package/dist/C_Chat.d.ts +2 -0
- package/dist/C_Chat.js +1 -0
- package/dist/C_Chat.js.map +1 -0
- package/dist/C_Chat2.js +2 -0
- package/dist/C_Chat2.js.map +1 -0
- package/dist/C_City.d.cts +1 -1
- package/dist/C_City.d.ts +1 -1
- package/dist/C_Code.d.cts +1 -1
- package/dist/C_Code.d.ts +1 -1
- package/dist/C_ContextMenu-B3Cgz_wJ.css.map +1 -0
- package/dist/C_ContextMenu-u1LixF3_.css.map +1 -0
- package/dist/C_ContextMenu.cjs +1 -0
- package/dist/C_ContextMenu.css +115 -0
- package/dist/C_ContextMenu.d.cts +2 -0
- package/dist/C_ContextMenu.d.ts +2 -0
- package/dist/C_ContextMenu.js +1 -0
- package/dist/C_ContextMenu.js.map +1 -0
- package/dist/C_ContextMenu2.js +2 -0
- package/dist/C_ContextMenu2.js.map +1 -0
- package/dist/C_Date.d.cts +1 -1
- package/dist/C_Date.d.ts +1 -1
- package/dist/C_Editor.d.cts +1 -1
- package/dist/C_Editor.d.ts +1 -1
- package/dist/C_Guide.d.cts +1 -1
- package/dist/C_Guide.d.ts +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Language.js.map +1 -1
- package/dist/C_Language2.js.map +1 -1
- package/dist/C_Login-BkdnkBKX.css.map +1 -0
- package/dist/C_Login-VkMM6OJ2.css.map +1 -0
- package/dist/C_Login.cjs +1 -0
- package/dist/C_Login.css +515 -0
- package/dist/C_Login.d.cts +2 -0
- package/dist/C_Login.d.ts +2 -0
- package/dist/C_Login.js +1 -0
- package/dist/C_Login.js.map +1 -0
- package/dist/C_Login2.js +2 -0
- package/dist/C_Login2.js.map +1 -0
- package/dist/C_Markdown.d.cts +1 -1
- package/dist/C_Markdown.d.ts +1 -1
- package/dist/C_Menu.d.cts +1 -1
- package/dist/C_Menu.d.ts +1 -1
- package/dist/C_Progress.d.cts +1 -1
- package/dist/C_Progress.d.ts +1 -1
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_TagsView.d.ts +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Timeline-BIvw3f41.css.map +1 -0
- package/dist/C_Timeline-VsDfCv4Q.css.map +1 -0
- package/dist/C_Timeline.cjs +1 -0
- package/dist/C_Timeline.css +271 -0
- package/dist/C_Timeline.d.cts +2 -0
- package/dist/C_Timeline.d.ts +2 -0
- package/dist/C_Timeline.js +1 -0
- package/dist/C_Timeline.js.map +1 -0
- package/dist/C_Timeline2.js +2 -0
- package/dist/C_Timeline2.js.map +1 -0
- package/dist/C_Transfer-BOB6OBqS.css.map +1 -0
- package/dist/C_Transfer-Dpq7ezWC.css.map +1 -0
- package/dist/C_Transfer.cjs +1 -0
- package/dist/C_Transfer.css +193 -0
- package/dist/C_Transfer.d.cts +2 -0
- package/dist/C_Transfer.d.ts +2 -0
- package/dist/C_Transfer.js +1 -0
- package/dist/C_Transfer.js.map +1 -0
- package/dist/C_Transfer2.js +2 -0
- package/dist/C_Transfer2.js.map +1 -0
- package/dist/C_VtableGantt.d.cts +1 -1
- package/dist/C_VtableGantt.d.ts +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants2.d.ts +1 -1
- package/dist/constants3.d.ts +3 -3
- package/dist/constants4.d.ts +3 -3
- package/dist/constants5.d.ts +2 -2
- package/dist/data.d.ts +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +48 -41
- package/dist/index.d.ts +48 -41
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.vue.d.ts +1 -1
- package/dist/index10.vue.d.ts +41 -23
- package/dist/index11.vue.d.ts +80 -63
- package/dist/index12.vue.d.ts +48 -20
- package/dist/index13.vue.d.ts +23 -63
- package/dist/index14.vue.d.ts +21 -58
- package/dist/index15.vue.d.ts +65 -48
- package/dist/index16.vue.d.ts +16 -21
- package/dist/index17.vue.d.ts +106 -77
- package/dist/index18.vue.d.ts +74 -11
- package/dist/index19.vue.d.ts +58 -653
- package/dist/index2.vue.d.ts +75 -30
- package/dist/index20.vue.d.ts +55 -0
- package/dist/index21.vue.d.ts +33 -0
- package/dist/index22.vue.d.ts +88 -0
- package/dist/index23.vue.d.ts +18 -0
- package/dist/index24.vue.d.ts +112 -0
- package/dist/index25.vue.d.ts +81 -0
- package/dist/index26.vue.d.ts +662 -0
- package/dist/index3.vue.d.ts +77 -19
- package/dist/index4.vue.d.ts +29 -36
- package/dist/index5.vue.d.ts +19 -20
- package/dist/index6.vue.d.ts +36 -26
- package/dist/index7.vue.d.ts +23 -40
- package/dist/index8.vue.d.ts +117 -45
- package/dist/index9.vue.d.ts +19 -25
- package/dist/resolver.cjs +1 -1
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.d.cts +1 -1
- package/dist/resolver.d.ts +1 -1
- package/dist/resolver.js +1 -1
- package/dist/resolver.js.map +1 -1
- package/dist/style.css +1911 -18
- package/dist/useCalendarEvents.d.ts +1 -1
- package/dist/useCollapsePanel.d.ts +4 -4
- package/dist/useCropperCore.d.ts +7 -7
- package/dist/useDraggableLayout.d.ts +8 -8
- package/dist/useDynamicFormState.d.ts +6 -6
- package/dist/useEdgeInteraction.d.ts +2 -2
- package/dist/useFullscreen.d.ts +2 -2
- package/dist/useInfiniteScroll.d.ts +3 -3
- package/dist/useQRCode.d.ts +5 -5
- package/dist/useSearchState.d.ts +2 -2
- package/dist/useSignatureHistory.d.ts +2 -2
- package/dist/useSplitResize.d.ts +6 -6
- package/dist/useTimeSelection.d.ts +2 -2
- package/dist/useTreeOperations.d.ts +4 -4
- package/dist/useWorkflowValidation.d.ts +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/* unplugin-vue-components disabled *//**
|
|
2
|
+
* C_Transfer — 穿梭框组件样式
|
|
3
|
+
* 变量说明:
|
|
4
|
+
* --tf-border : 面板边框色
|
|
5
|
+
* --tf-header-bg : 标题栏背景
|
|
6
|
+
* --tf-item-hover : 列表行悬停色
|
|
7
|
+
* --tf-accent : 操作按钮主色
|
|
8
|
+
* --tf-height : 面板高度
|
|
9
|
+
*/
|
|
10
|
+
.c-transfer[data-v-6de1c97f] {
|
|
11
|
+
--tf-border: var(--border-color);
|
|
12
|
+
--tf-header-bg: color-mix(in srgb, var(--primary-color) 6%, var(--card-color));
|
|
13
|
+
--tf-item-hover: color-mix(in srgb, var(--primary-color) 8%, var(--card-color));
|
|
14
|
+
--tf-accent: var(--primary-color);
|
|
15
|
+
--tf-height: 380px;
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: stretch;
|
|
18
|
+
gap: 16px;
|
|
19
|
+
user-select: none;
|
|
20
|
+
/* ======================== Panel ======================== */
|
|
21
|
+
/* ---- Header ---- */
|
|
22
|
+
/* ---- Filter ---- */
|
|
23
|
+
/* ---- List ---- */
|
|
24
|
+
/* ---- Empty ---- */
|
|
25
|
+
/* ======================== Actions ======================== */
|
|
26
|
+
/* ======================== Sizes ======================== */
|
|
27
|
+
/* ======================== Group divider ======================== */
|
|
28
|
+
}
|
|
29
|
+
.c-transfer__panel[data-v-6de1c97f] {
|
|
30
|
+
flex: 1;
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
border: 1px solid var(--tf-border);
|
|
34
|
+
border-radius: 8px;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
background: var(--card-color);
|
|
37
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
|
|
38
|
+
transition: box-shadow 0.2s;
|
|
39
|
+
}
|
|
40
|
+
.c-transfer__panel[data-v-6de1c97f]:hover {
|
|
41
|
+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.07);
|
|
42
|
+
}
|
|
43
|
+
.c-transfer__header[data-v-6de1c97f] {
|
|
44
|
+
display: flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: space-between;
|
|
47
|
+
padding: 10px 14px;
|
|
48
|
+
background: var(--tf-header-bg);
|
|
49
|
+
border-bottom: 1px solid var(--tf-border);
|
|
50
|
+
font-weight: 600;
|
|
51
|
+
font-size: 13px;
|
|
52
|
+
color: var(--text-color-1);
|
|
53
|
+
}
|
|
54
|
+
.c-transfer__count[data-v-6de1c97f] {
|
|
55
|
+
font-weight: 400;
|
|
56
|
+
font-size: 12px;
|
|
57
|
+
color: var(--text-color-3);
|
|
58
|
+
}
|
|
59
|
+
.c-transfer__filter[data-v-6de1c97f] {
|
|
60
|
+
padding: 8px 10px;
|
|
61
|
+
border-bottom: 1px solid var(--tf-border);
|
|
62
|
+
}
|
|
63
|
+
.c-transfer__filter .n-input[data-v-6de1c97f] {
|
|
64
|
+
--n-border: 1px solid var(--tf-border);
|
|
65
|
+
--n-border-focus: 1px solid var(--tf-accent);
|
|
66
|
+
}
|
|
67
|
+
.c-transfer__list[data-v-6de1c97f] {
|
|
68
|
+
flex: 1;
|
|
69
|
+
overflow-y: auto;
|
|
70
|
+
padding: 4px 0;
|
|
71
|
+
min-height: 0;
|
|
72
|
+
max-height: var(--tf-height);
|
|
73
|
+
}
|
|
74
|
+
.c-transfer__item[data-v-6de1c97f] {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: 8px;
|
|
78
|
+
padding: 7px 14px;
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
transition: background 0.15s;
|
|
81
|
+
font-size: 13px;
|
|
82
|
+
color: var(--text-color-1);
|
|
83
|
+
}
|
|
84
|
+
.c-transfer__item[data-v-6de1c97f]:hover {
|
|
85
|
+
background: var(--tf-item-hover);
|
|
86
|
+
}
|
|
87
|
+
.c-transfer__item.is-disabled[data-v-6de1c97f] {
|
|
88
|
+
opacity: 0.45;
|
|
89
|
+
cursor: not-allowed;
|
|
90
|
+
}
|
|
91
|
+
.c-transfer__item.is-disabled[data-v-6de1c97f]:hover {
|
|
92
|
+
background: transparent;
|
|
93
|
+
}
|
|
94
|
+
.c-transfer__item.is-checked[data-v-6de1c97f] {
|
|
95
|
+
color: var(--tf-accent);
|
|
96
|
+
font-weight: 500;
|
|
97
|
+
}
|
|
98
|
+
.c-transfer__item-icon[data-v-6de1c97f] {
|
|
99
|
+
font-size: 16px;
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
color: var(--text-color-3);
|
|
102
|
+
}
|
|
103
|
+
.c-transfer__item-label[data-v-6de1c97f] {
|
|
104
|
+
flex: 1;
|
|
105
|
+
overflow: hidden;
|
|
106
|
+
text-overflow: ellipsis;
|
|
107
|
+
white-space: nowrap;
|
|
108
|
+
}
|
|
109
|
+
.c-transfer__item-desc[data-v-6de1c97f] {
|
|
110
|
+
font-size: 11px;
|
|
111
|
+
color: var(--text-color-3);
|
|
112
|
+
margin-top: 2px;
|
|
113
|
+
}
|
|
114
|
+
.c-transfer__empty[data-v-6de1c97f] {
|
|
115
|
+
display: flex;
|
|
116
|
+
align-items: center;
|
|
117
|
+
justify-content: center;
|
|
118
|
+
flex: 1;
|
|
119
|
+
color: var(--text-color-3);
|
|
120
|
+
font-size: 13px;
|
|
121
|
+
padding: 32px 0;
|
|
122
|
+
}
|
|
123
|
+
.c-transfer__actions[data-v-6de1c97f] {
|
|
124
|
+
display: flex;
|
|
125
|
+
flex-direction: column;
|
|
126
|
+
justify-content: center;
|
|
127
|
+
gap: 10px;
|
|
128
|
+
}
|
|
129
|
+
.c-transfer__btn[data-v-6de1c97f] {
|
|
130
|
+
display: inline-flex;
|
|
131
|
+
align-items: center;
|
|
132
|
+
justify-content: center;
|
|
133
|
+
width: 36px;
|
|
134
|
+
height: 36px;
|
|
135
|
+
border-radius: 8px;
|
|
136
|
+
border: 1px solid var(--tf-border);
|
|
137
|
+
background: var(--card-color);
|
|
138
|
+
color: var(--tf-accent);
|
|
139
|
+
font-size: 18px;
|
|
140
|
+
cursor: pointer;
|
|
141
|
+
transition: background 0.2s, color 0.2s, box-shadow 0.2s;
|
|
142
|
+
}
|
|
143
|
+
.c-transfer__btn[data-v-6de1c97f]:hover:not(.is-disabled) {
|
|
144
|
+
background: var(--tf-accent);
|
|
145
|
+
color: #fff;
|
|
146
|
+
box-shadow: 0 2px 8px color-mix(in srgb, var(--tf-accent) 30%, transparent);
|
|
147
|
+
}
|
|
148
|
+
.c-transfer__btn.is-disabled[data-v-6de1c97f] {
|
|
149
|
+
opacity: 0.35;
|
|
150
|
+
cursor: not-allowed;
|
|
151
|
+
}
|
|
152
|
+
.c-transfer.is-small[data-v-6de1c97f] {
|
|
153
|
+
--tf-height: 280px;
|
|
154
|
+
}
|
|
155
|
+
.c-transfer.is-small .c-transfer__header[data-v-6de1c97f] {
|
|
156
|
+
padding: 8px 12px;
|
|
157
|
+
font-size: 12px;
|
|
158
|
+
}
|
|
159
|
+
.c-transfer.is-small .c-transfer__item[data-v-6de1c97f] {
|
|
160
|
+
padding: 5px 12px;
|
|
161
|
+
font-size: 12px;
|
|
162
|
+
}
|
|
163
|
+
.c-transfer.is-small .c-transfer__btn[data-v-6de1c97f] {
|
|
164
|
+
width: 30px;
|
|
165
|
+
height: 30px;
|
|
166
|
+
font-size: 15px;
|
|
167
|
+
}
|
|
168
|
+
.c-transfer.is-large[data-v-6de1c97f] {
|
|
169
|
+
--tf-height: 480px;
|
|
170
|
+
}
|
|
171
|
+
.c-transfer.is-large .c-transfer__header[data-v-6de1c97f] {
|
|
172
|
+
padding: 12px 16px;
|
|
173
|
+
font-size: 14px;
|
|
174
|
+
}
|
|
175
|
+
.c-transfer.is-large .c-transfer__item[data-v-6de1c97f] {
|
|
176
|
+
padding: 9px 16px;
|
|
177
|
+
font-size: 14px;
|
|
178
|
+
}
|
|
179
|
+
.c-transfer.is-large .c-transfer__btn[data-v-6de1c97f] {
|
|
180
|
+
width: 42px;
|
|
181
|
+
height: 42px;
|
|
182
|
+
font-size: 20px;
|
|
183
|
+
}
|
|
184
|
+
.c-transfer__group[data-v-6de1c97f] {
|
|
185
|
+
padding: 6px 14px 4px;
|
|
186
|
+
font-size: 11px;
|
|
187
|
+
font-weight: 600;
|
|
188
|
+
color: var(--text-color-3);
|
|
189
|
+
text-transform: uppercase;
|
|
190
|
+
letter-spacing: 0.04em;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/*# sourceMappingURL=C_Transfer-BOB6OBqS.css.map*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./C_Icon2.js";import{n as e,t}from"./C_Transfer2.js";export{t as C_Transfer,e as DEFAULT_TRANSFER_PROPS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_Transfer.js","names":[],"sources":["../src/components/C_Transfer/types.ts","../src/components/C_Transfer/index.vue","../src/components/C_Transfer/index.vue","../src/components/C_Transfer/index.vue"],"sourcesContent":["/**\n * @Description: 穿梭框组件类型定义\n */\n\n/** 穿梭框数据项 */\nexport interface TransferItem {\n /** 唯一标识 */\n key: string | number\n /** 显示标签 */\n label: string\n /** 是否禁用 */\n disabled?: boolean\n /** 分组名称 */\n group?: string\n /** 描述信息(用于详细模式) */\n description?: string\n /** 图标(Iconify) */\n icon?: string\n /** 额外数据 */\n extra?: Record<string, unknown>\n}\n\n/** 组件 Props */\nexport interface TransferProps {\n /** 数据源 */\n data: TransferItem[]\n /** 右侧已选 key 列表 (v-model) */\n modelValue: Array<string | number>\n /** 左右栏标题 */\n titles?: [string, string]\n /** 是否可搜索 */\n filterable?: boolean\n /** 搜索占位符 */\n filterPlaceholder?: string\n /** 自定义筛选函数 */\n filterMethod?: (query: string, item: TransferItem) => boolean\n /** 是否显示全选复选框 */\n showSelectAll?: boolean\n /** 左侧空状态描述 */\n sourceEmptyText?: string\n /** 右侧空状态描述 */\n targetEmptyText?: string\n /** 尺寸 */\n size?: 'small' | 'medium' | 'large'\n}\n\n/** 默认 Props */\nexport const DEFAULT_TRANSFER_PROPS: Partial<TransferProps> = {\n titles: ['可选列表', '已选列表'],\n filterable: false,\n filterPlaceholder: '搜索...',\n showSelectAll: true,\n sourceEmptyText: '暂无数据',\n targetEmptyText: '未选择任何项',\n size: 'medium',\n}\n","/* unplugin-vue-components disabled */<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"gIA+CA,MAAa,EAAiD,CAC5D,OAAQ,CAAC,OAAQ,OAAO,CACxB,WAAY,GACZ,kBAAmB,QACnB,cAAe,GACf,gBAAiB,OACjB,gBAAiB,SACjB,KAAM,SACP,wiCG4IC,IAAM,EAAQ,EAwBR,EAAO,EASP,GAAA,EAAA,EAAA,eAA8B,CAAE,GAAG,EAAwB,GAAG,EAAO,EAAC,CAItE,GAAA,EAAA,EAAA,cAAyB,CAC7B,IAAM,EAAI,IAAI,IACd,IAAK,IAAM,KAAQ,EAAM,KAAM,EAAE,IAAI,EAAK,IAAK,EAAI,CACnD,OAAO,GACR,CAEK,GAAA,EAAA,EAAA,cAA8B,IAAI,IAAI,EAAM,WAAW,CAAA,CAEvD,GAAA,EAAA,EAAA,cACJ,EAAM,KAAK,OAAO,GAAK,CAAC,EAAa,MAAM,IAAI,EAAE,IAAI,CAAA,CACvD,CAEM,GAAA,EAAA,EAAA,cAA4B,CAChC,IAAM,EAAyB,EAAC,CAChC,IAAK,IAAM,KAAO,EAAM,WAAY,CAClC,IAAM,EAAO,EAAQ,MAAM,IAAI,EAAG,CAC9B,GAAM,EAAO,KAAK,EAAI,CAE5B,OAAO,GACR,CAIK,GAAA,EAAA,EAAA,KAAkB,GAAE,CACpB,GAAA,EAAA,EAAA,KAAkB,GAAE,CAG1B,SAAS,EAAc,EAAe,EAA6B,CACjE,OAAO,EAAK,MAAM,aAAa,CAAC,SAAS,EAAM,aAAa,CAAA,CAG9D,IAAM,GAAA,EAAA,EAAA,cAA0B,EAAM,cAAgB,EAAa,CAE7D,GAAA,EAAA,EAAA,cAAoC,CACxC,IAAM,EAAI,EAAY,MAAM,MAAK,CACjC,OAAO,EACH,EAAW,MAAM,OAAO,GAAQ,EAAS,MAAM,EAAG,EAAK,CAAA,CACvD,EAAW,OAChB,CAEK,GAAA,EAAA,EAAA,cAAoC,CACxC,IAAM,EAAI,EAAY,MAAM,MAAK,CACjC,OAAO,EACH,EAAW,MAAM,OAAO,GAAQ,EAAS,MAAM,EAAG,EAAK,CAAA,CACvD,EAAW,OAChB,CAIK,GAAA,EAAA,EAAA,UAAyB,IAAI,IAAsB,CACnD,GAAA,EAAA,EAAA,UAAyB,IAAI,IAAsB,CAGzD,SAAS,EAAkB,EAAsB,CAC3C,EAAc,IAAI,EAAI,CAAE,EAAc,OAAO,EAAG,CAC/C,EAAc,IAAI,EAAG,CAI5B,SAAS,EAAkB,EAAsB,CAC3C,EAAc,IAAI,EAAI,CAAE,EAAc,OAAO,EAAG,CAC/C,EAAc,IAAI,EAAG,CAG5B,IAAM,GAAA,EAAA,EAAA,cAEF,EAAmB,MAAM,OAAS,GAClC,EAAmB,MAAM,MACvB,GAAK,EAAE,UAAY,EAAc,IAAI,EAAE,IAAG,CAC5C,CACJ,CACM,GAAA,EAAA,EAAA,cAEF,CAAC,EAAmB,OACpB,EAAmB,MAAM,KAAK,GAAK,EAAc,IAAI,EAAE,IAAI,CAAA,CAC/D,CACM,GAAA,EAAA,EAAA,cAEF,EAAmB,MAAM,OAAS,GAClC,EAAmB,MAAM,MACvB,GAAK,EAAE,UAAY,EAAc,IAAI,EAAE,IAAG,CAC5C,CACJ,CACM,GAAA,EAAA,EAAA,cAEF,CAAC,EAAmB,OACpB,EAAmB,MAAM,KAAK,GAAK,EAAc,IAAI,EAAE,IAAI,CAAA,CAC/D,CAGA,SAAS,EAAgB,EAAkB,CACzC,IAAK,IAAM,KAAQ,EAAmB,MAChC,EAAK,WACL,EAAS,EAAc,IAAI,EAAK,IAAG,CAClC,EAAc,OAAO,EAAK,IAAG,EAKtC,SAAS,EAAgB,EAAkB,CACzC,IAAK,IAAM,KAAQ,EAAmB,MAChC,EAAK,WACL,EAAS,EAAc,IAAI,EAAK,IAAG,CAClC,EAAc,OAAO,EAAK,IAAG,EAOtC,SAAS,GAAe,CACtB,IAAM,EAAO,CAAC,GAAG,EAAa,CACxB,EAAS,CAAC,GAAG,EAAM,WAAY,GAAG,EAAI,CAC5C,EAAK,oBAAqB,EAAM,CAChC,EAAK,SAAU,EAAQ,QAAS,EAAI,CACpC,EAAc,OAAM,CAItB,SAAS,GAAe,CACtB,IAAM,EAAO,CAAC,GAAG,EAAa,CACxB,EAAY,IAAI,IAAI,EAAI,CACxB,EAAS,EAAM,WAAW,OAAO,GAAK,CAAC,EAAU,IAAI,EAAE,CAAA,CAC7D,EAAK,oBAAqB,EAAM,CAChC,EAAK,SAAU,EAAQ,OAAQ,EAAI,CACnC,EAAc,OAAM,6FA9KhB,MAAA,CAlLJ,OAAA,EAAA,EAAA,gBAAK,CAAC,aAAY,CAAA,MACH,EAAA,MAAY,OAAI,CAAA,CAAA,CAAA,CAAA,0BAE/B,mDAAuD,0BA4EjD,MA3EN,EA2EM,0BAxDE,MAlBN,EAkBM,CAhBI,EAAA,MAAY,gBAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,aAMR,EAAA,OALT,QAAS,EAAA,MACT,cAAe,EAAA,MACf,mBAAgB,8BAEY,EAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAA1B,EAAA,MAAY,SAAM,GAAA,CAAA,EAAA,CAAA,CAAA,kFAOhB,OALP,GAAA,EAAA,EAAA,iBAIK,EAAA,MAAY,SAAM,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,oBAItB,OAFD,GAAA,EAAA,EAAA,iBACM,EAAc,KAAI,CAAG,OAAA,EAAA,EAAA,iBAAM,EAAA,MAAW,OAAM,CAAA,EAAA,CAAA,CAAA,CAK5C,EAAA,MAAY,aAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAad,MAdN,EAcM,EAAA,EAAA,EAAA,aADK,EAAA,CARC,MAAO,EAAA,iCAAA,EAAW,MAAA,EAC1B,UAAA,GACA,KAAK,QACJ,YAAa,EAAA,MAAY,oBAEf,QAAA,EAAA,EAAA,aACoB,EAAA,EAAA,EAAA,aAAA,EAAA,EAAA,CAArB,KAAK,cAAa,CAAA,CAAA,CAAA,wEAMxB,EAAA,MAAmB,SAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBA8BrB,MA/BN,EA+BM,GAAA,EAAA,EAAA,WAAA,GAAA,EAAA,EAAA,EAAA,oBADO,EAAA,SAAA,MAAA,EAAA,EAAA,YAzBM,EAAA,MAAR,+CAwBD,MAAA,KAvBA,EAAK,IAGT,OAAA,EAAA,EAAA,gBAAK,CAAC,mBAAkB,eACe,EAAK,sBAAsC,EAAc,IAAI,EAAK,IAAG,IAI3G,QAAK,GAAA,CAAG,EAAK,UAAY,EAAkB,EAAK,IAAG,qBAQlD,EAAA,CALC,QAAS,EAAc,IAAI,EAAK,IAAG,CACnC,SAAU,EAAK,SAChB,KAAK,QACJ,mBAAc,GAAE,EAAkB,EAAK,IAAG,CAC1C,QAAK,AAAA,EAAA,MAAA,EAAA,EAAA,mBAAN,GAAW,CAAA,OAAA,CAAA,oDAGL,EAAK,OAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,aAGX,EAAA,EAAA,OAFC,KAAM,EAAK,KACZ,MAAM,wGAEoD,OAA5D,GAAA,EAAA,EAAA,iBAAwC,EAAK,MAAK,CAAA,EAAA,+DASlD,MALN,GAAA,EAAA,EAAA,iBAIK,EAAA,MAAY,gBAAe,CAAA,EAAA,6BAIlC,8CAAkD,0BAkB5C,MAjBN,EAiBM,EAAA,EAAA,EAAA,oBATK,SAAA,CANP,OAAA,EAAA,EAAA,gBAAK,CAAC,kBAAiB,CAAA,cACE,EAAc,OAAI,EAAA,CAAA,CAAA,CAC1C,SAAU,EAAc,OAAI,EAC5B,QAAO,sBAE2B,EAAA,EAAA,CAA3B,KAAK,oBAAmB,CAAA,CAAA,CAAA,GAAA,EAAA,EAAA,EAAA,EAAA,oBASzB,SAAA,CANP,OAAA,EAAA,EAAA,gBAAK,CAAC,kBAAiB,CAAA,cACE,EAAc,OAAI,EAAA,CAAA,CAAA,CAC1C,SAAU,EAAc,OAAI,EAC5B,QAAO,sBAE0B,EAAA,EAAA,CAA1B,KAAK,mBAAkB,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,0BAInC,mDAAuD,0BA4EjD,MA3EN,EA2EM,0BAxDE,MAlBN,EAkBM,CAhBI,EAAA,MAAY,gBAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,aAMR,EAAA,OALT,QAAS,EAAA,MACT,cAAe,EAAA,MACf,mBAAgB,8BAEY,EAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAA1B,EAAA,MAAY,SAAM,GAAA,CAAA,EAAA,CAAA,CAAA,kFAOhB,OALP,GAAA,EAAA,EAAA,iBAIK,EAAA,MAAY,SAAM,GAAA,CAAA,EAAA,GAAA,EAAA,EAAA,oBAItB,OAFD,GAAA,EAAA,EAAA,iBACM,EAAc,KAAI,CAAG,OAAA,EAAA,EAAA,iBAAM,EAAA,MAAW,OAAM,CAAA,EAAA,CAAA,CAAA,CAK5C,EAAA,MAAY,aAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBAad,MAdN,EAcM,EAAA,EAAA,EAAA,aADK,EAAA,CARC,MAAO,EAAA,iCAAA,EAAW,MAAA,EAC1B,UAAA,GACA,KAAK,QACJ,YAAa,EAAA,MAAY,oBAEf,QAAA,EAAA,EAAA,aACoB,EAAA,EAAA,EAAA,aAAA,EAAA,EAAA,CAArB,KAAK,cAAa,CAAA,CAAA,CAAA,wEAMxB,EAAA,MAAmB,SAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,oBA8BrB,MA/BN,EA+BM,GAAA,EAAA,EAAA,WAAA,GAAA,EAAA,EAAA,EAAA,oBADO,EAAA,SAAA,MAAA,EAAA,EAAA,YAzBM,EAAA,MAAR,+CAwBD,MAAA,KAvBA,EAAK,IAGT,OAAA,EAAA,EAAA,gBAAK,CAAC,mBAAkB,eACe,EAAK,sBAAsC,EAAc,IAAI,EAAK,IAAG,IAI3G,QAAK,GAAA,CAAG,EAAK,UAAY,EAAkB,EAAK,IAAG,qBAQlD,EAAA,CALC,QAAS,EAAc,IAAI,EAAK,IAAG,CACnC,SAAU,EAAK,SAChB,KAAK,QACJ,mBAAc,GAAE,EAAkB,EAAK,IAAG,CAC1C,QAAK,AAAA,EAAA,MAAA,EAAA,EAAA,mBAAN,GAAW,CAAA,OAAA,CAAA,oDAGL,EAAK,OAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,aAGX,EAAA,EAAA,OAFC,KAAM,EAAK,KACZ,MAAM,wGAEoD,OAA5D,GAAA,EAAA,EAAA,iBAAwC,EAAK,MAAK,CAAA,EAAA,+DASlD,MALN,GAAA,EAAA,EAAA,iBAIK,EAAA,MAAY,gBAAe,CAAA,EAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{NCheckbox as n,NInput as r}from"naive-ui";import{Fragment as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,normalizeClass as p,openBlock as m,reactive as h,ref as g,renderList as _,toDisplayString as v,withCtx as y,withModifiers as b}from"vue";const x={titles:[`可选列表`,`已选列表`],filterable:!1,filterPlaceholder:`搜索...`,showSelectAll:!0,sourceEmptyText:`暂无数据`,targetEmptyText:`未选择任何项`,size:`medium`},S={class:`c-transfer__panel`},ee={class:`c-transfer__header`},te={key:1,class:`c-transfer__title`},ne={class:`c-transfer__count`},re={key:0,class:`c-transfer__filter`},ie={key:1,class:`c-transfer__list`},ae=[`onClick`],C={class:`c-transfer__item-label`},w={key:2,class:`c-transfer__empty`},T={class:`c-transfer__actions`},E=[`disabled`],D=[`disabled`],O={class:`c-transfer__panel`},k={class:`c-transfer__header`},oe={key:1,class:`c-transfer__title`},se={class:`c-transfer__count`},ce={key:0,class:`c-transfer__filter`},A={key:1,class:`c-transfer__list`},j=[`onClick`],M={class:`c-transfer__item-label`},N={key:2,class:`c-transfer__empty`};var P=t(f({__name:`index`,props:{data:{},modelValue:{},titles:{default:()=>x.titles},filterable:{type:Boolean,default:x.filterable},filterPlaceholder:{default:x.filterPlaceholder},filterMethod:{},showSelectAll:{type:Boolean,default:x.showSelectAll},sourceEmptyText:{default:x.sourceEmptyText},targetEmptyText:{default:x.targetEmptyText},size:{default:x.size}},emits:[`update:modelValue`,`change`],setup(t,{emit:f}){let P=t,F=f,I=a(()=>({...x,...P})),L=a(()=>{let e=new Map;for(let t of P.data)e.set(t.key,t);return e}),R=a(()=>new Set(P.modelValue)),z=a(()=>P.data.filter(e=>!R.value.has(e.key))),B=a(()=>{let e=[];for(let t of P.modelValue){let n=L.value.get(t);n&&e.push(n)}return e}),V=g(``),H=g(``);function U(e,t){return t.label.toLowerCase().includes(e.toLowerCase())}let W=a(()=>P.filterMethod??U),G=a(()=>{let e=V.value.trim();return e?z.value.filter(t=>W.value(e,t)):z.value}),K=a(()=>{let e=H.value.trim();return e?B.value.filter(t=>W.value(e,t)):B.value}),q=h(new Set),J=h(new Set);function Y(e){q.has(e)?q.delete(e):q.add(e)}function X(e){J.has(e)?J.delete(e):J.add(e)}let Z=a(()=>G.value.length>0&&G.value.every(e=>e.disabled||q.has(e.key))),le=a(()=>!Z.value&&G.value.some(e=>q.has(e.key))),Q=a(()=>K.value.length>0&&K.value.every(e=>e.disabled||J.has(e.key))),$=a(()=>!Q.value&&K.value.some(e=>J.has(e.key)));function ue(e){for(let t of G.value)t.disabled||(e?q.add(t.key):q.delete(t.key))}function de(e){for(let t of K.value)t.disabled||(e?J.add(t.key):J.delete(t.key))}function fe(){let e=[...q],t=[...P.modelValue,...e];F(`update:modelValue`,t),F(`change`,t,`right`,e),q.clear()}function pe(){let e=[...J],t=new Set(e),n=P.modelValue.filter(e=>!t.has(e));F(`update:modelValue`,n),F(`change`,n,`left`,e),J.clear()}return(t,a)=>{let f=n,h=r;return m(),c(`div`,{class:p([`c-transfer`,[`is-${I.value.size}`]])},[s(` ================ Source Panel ================ `),l(`div`,S,[l(`div`,ee,[I.value.showSelectAll?(m(),o(f,{key:0,checked:Z.value,indeterminate:le.value,"onUpdate:checked":ue},{default:y(()=>[u(v(I.value.titles?.[0]),1)]),_:1},8,[`checked`,`indeterminate`])):(m(),c(`span`,te,v(I.value.titles?.[0]),1)),l(`span`,ne,v(q.size)+` / `+v(z.value.length),1)]),I.value.filterable?(m(),c(`div`,re,[d(h,{value:V.value,"onUpdate:value":a[0]||=e=>V.value=e,clearable:``,size:`small`,placeholder:I.value.filterPlaceholder},{prefix:y(()=>[d(e,{name:`mdi:magnify`})]),_:1},8,[`value`,`placeholder`])])):s(`v-if`,!0),G.value.length?(m(),c(`div`,ie,[(m(!0),c(i,null,_(G.value,t=>(m(),c(`div`,{key:t.key,class:p([`c-transfer__item`,{"is-disabled":t.disabled,"is-checked":q.has(t.key)}]),onClick:e=>!t.disabled&&Y(t.key)},[d(f,{checked:q.has(t.key),disabled:t.disabled,size:`small`,"onUpdate:checked":e=>Y(t.key),onClick:a[1]||=b(()=>{},[`stop`])},null,8,[`checked`,`disabled`,`onUpdate:checked`]),t.icon?(m(),o(e,{key:0,name:t.icon,class:`c-transfer__item-icon`},null,8,[`name`])):s(`v-if`,!0),l(`span`,C,v(t.label),1)],10,ae))),128))])):(m(),c(`div`,w,v(I.value.sourceEmptyText),1))]),s(` ================ Actions ================ `),l(`div`,T,[l(`button`,{class:p([`c-transfer__btn`,{"is-disabled":q.size===0}]),disabled:q.size===0,onClick:fe},[d(e,{name:`mdi:chevron-right`})],10,E),l(`button`,{class:p([`c-transfer__btn`,{"is-disabled":J.size===0}]),disabled:J.size===0,onClick:pe},[d(e,{name:`mdi:chevron-left`})],10,D)]),s(` ================ Target Panel ================ `),l(`div`,O,[l(`div`,k,[I.value.showSelectAll?(m(),o(f,{key:0,checked:Q.value,indeterminate:$.value,"onUpdate:checked":de},{default:y(()=>[u(v(I.value.titles?.[1]),1)]),_:1},8,[`checked`,`indeterminate`])):(m(),c(`span`,oe,v(I.value.titles?.[1]),1)),l(`span`,se,v(J.size)+` / `+v(B.value.length),1)]),I.value.filterable?(m(),c(`div`,ce,[d(h,{value:H.value,"onUpdate:value":a[2]||=e=>H.value=e,clearable:``,size:`small`,placeholder:I.value.filterPlaceholder},{prefix:y(()=>[d(e,{name:`mdi:magnify`})]),_:1},8,[`value`,`placeholder`])])):s(`v-if`,!0),K.value.length?(m(),c(`div`,A,[(m(!0),c(i,null,_(K.value,t=>(m(),c(`div`,{key:t.key,class:p([`c-transfer__item`,{"is-disabled":t.disabled,"is-checked":J.has(t.key)}]),onClick:e=>!t.disabled&&X(t.key)},[d(f,{checked:J.has(t.key),disabled:t.disabled,size:`small`,"onUpdate:checked":e=>X(t.key),onClick:a[3]||=b(()=>{},[`stop`])},null,8,[`checked`,`disabled`,`onUpdate:checked`]),t.icon?(m(),o(e,{key:0,name:t.icon,class:`c-transfer__item-icon`},null,8,[`name`])):s(`v-if`,!0),l(`span`,M,v(t.label),1)],10,j))),128))])):(m(),c(`div`,N,v(I.value.targetEmptyText),1))])],2)}}}),[[`__scopeId`,`data-v-6de1c97f`]]);export{x as n,P as t};
|
|
2
|
+
//# sourceMappingURL=C_Transfer2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"C_Transfer2.js","names":[],"sources":["../src/components/C_Transfer/types.ts","../src/components/C_Transfer/index.vue","../src/components/C_Transfer/index.vue","../src/components/C_Transfer/index.vue"],"sourcesContent":["/**\n * @Description: 穿梭框组件类型定义\n */\n\n/** 穿梭框数据项 */\nexport interface TransferItem {\n /** 唯一标识 */\n key: string | number\n /** 显示标签 */\n label: string\n /** 是否禁用 */\n disabled?: boolean\n /** 分组名称 */\n group?: string\n /** 描述信息(用于详细模式) */\n description?: string\n /** 图标(Iconify) */\n icon?: string\n /** 额外数据 */\n extra?: Record<string, unknown>\n}\n\n/** 组件 Props */\nexport interface TransferProps {\n /** 数据源 */\n data: TransferItem[]\n /** 右侧已选 key 列表 (v-model) */\n modelValue: Array<string | number>\n /** 左右栏标题 */\n titles?: [string, string]\n /** 是否可搜索 */\n filterable?: boolean\n /** 搜索占位符 */\n filterPlaceholder?: string\n /** 自定义筛选函数 */\n filterMethod?: (query: string, item: TransferItem) => boolean\n /** 是否显示全选复选框 */\n showSelectAll?: boolean\n /** 左侧空状态描述 */\n sourceEmptyText?: string\n /** 右侧空状态描述 */\n targetEmptyText?: string\n /** 尺寸 */\n size?: 'small' | 'medium' | 'large'\n}\n\n/** 默认 Props */\nexport const DEFAULT_TRANSFER_PROPS: Partial<TransferProps> = {\n titles: ['可选列表', '已选列表'],\n filterable: false,\n filterPlaceholder: '搜索...',\n showSelectAll: true,\n sourceEmptyText: '暂无数据',\n targetEmptyText: '未选择任何项',\n size: 'medium',\n}\n","/* unplugin-vue-components disabled */<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 穿梭框组件\n-->\n<template>\n <div\n class=\"c-transfer\"\n :class=\"[`is-${mergedProps.size}`]\"\n >\n <!-- ================ Source Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isSourceAllChecked\"\n :indeterminate=\"isSourceIndeterminate\"\n @update:checked=\"toggleSourceAll\"\n >\n {{ mergedProps.titles?.[0] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[0] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ sourceChecked.size }} / {{ sourceList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"sourceQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredSourceList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredSourceList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': sourceChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleSourceCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"sourceChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleSourceCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.sourceEmptyText }}\n </div>\n </div>\n\n <!-- ================ Actions ================ -->\n <div class=\"c-transfer__actions\">\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': sourceChecked.size === 0 }\"\n :disabled=\"sourceChecked.size === 0\"\n @click=\"moveToTarget\"\n >\n <C_Icon name=\"mdi:chevron-right\" />\n </button>\n <button\n class=\"c-transfer__btn\"\n :class=\"{ 'is-disabled': targetChecked.size === 0 }\"\n :disabled=\"targetChecked.size === 0\"\n @click=\"moveToSource\"\n >\n <C_Icon name=\"mdi:chevron-left\" />\n </button>\n </div>\n\n <!-- ================ Target Panel ================ -->\n <div class=\"c-transfer__panel\">\n <div class=\"c-transfer__header\">\n <NCheckbox\n v-if=\"mergedProps.showSelectAll\"\n :checked=\"isTargetAllChecked\"\n :indeterminate=\"isTargetIndeterminate\"\n @update:checked=\"toggleTargetAll\"\n >\n {{ mergedProps.titles?.[1] }}\n </NCheckbox>\n <span\n v-else\n class=\"c-transfer__title\"\n >\n {{ mergedProps.titles?.[1] }}\n </span>\n <span class=\"c-transfer__count\"\n >{{ targetChecked.size }} / {{ targetList.length }}</span\n >\n </div>\n\n <div\n v-if=\"mergedProps.filterable\"\n class=\"c-transfer__filter\"\n >\n <NInput\n v-model:value=\"targetQuery\"\n clearable\n size=\"small\"\n :placeholder=\"mergedProps.filterPlaceholder\"\n >\n <template #prefix>\n <C_Icon name=\"mdi:magnify\" />\n </template>\n </NInput>\n </div>\n\n <div\n v-if=\"filteredTargetList.length\"\n class=\"c-transfer__list\"\n >\n <template\n v-for=\"item in filteredTargetList\"\n :key=\"item.key\"\n >\n <div\n class=\"c-transfer__item\"\n :class=\"{\n 'is-disabled': item.disabled,\n 'is-checked': targetChecked.has(item.key),\n }\"\n @click=\"!item.disabled && toggleTargetCheck(item.key)\"\n >\n <NCheckbox\n :checked=\"targetChecked.has(item.key)\"\n :disabled=\"item.disabled\"\n size=\"small\"\n @update:checked=\"toggleTargetCheck(item.key)\"\n @click.stop\n />\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n class=\"c-transfer__item-icon\"\n />\n <span class=\"c-transfer__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </div>\n <div\n v-else\n class=\"c-transfer__empty\"\n >\n {{ mergedProps.targetEmptyText }}\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, reactive, ref } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TRANSFER_PROPS,\n type TransferItem,\n type TransferProps,\n } from './types'\n\n const props = withDefaults(\n defineProps<{\n data: TransferProps['data']\n modelValue: TransferProps['modelValue']\n titles?: TransferProps['titles']\n filterable?: boolean\n filterPlaceholder?: string\n filterMethod?: TransferProps['filterMethod']\n showSelectAll?: boolean\n sourceEmptyText?: string\n targetEmptyText?: string\n size?: TransferProps['size']\n }>(),\n {\n titles: () => DEFAULT_TRANSFER_PROPS.titles as [string, string],\n filterable: DEFAULT_TRANSFER_PROPS.filterable,\n filterPlaceholder: DEFAULT_TRANSFER_PROPS.filterPlaceholder,\n showSelectAll: DEFAULT_TRANSFER_PROPS.showSelectAll,\n sourceEmptyText: DEFAULT_TRANSFER_PROPS.sourceEmptyText,\n targetEmptyText: DEFAULT_TRANSFER_PROPS.targetEmptyText,\n size: DEFAULT_TRANSFER_PROPS.size,\n }\n )\n\n const emit = defineEmits<{\n 'update:modelValue': [value: Array<string | number>]\n change: [\n targetKeys: Array<string | number>,\n direction: 'left' | 'right',\n moveKeys: Array<string | number>,\n ]\n }>()\n\n const mergedProps = computed(() => ({ ...DEFAULT_TRANSFER_PROPS, ...props }))\n\n // ==================== 数据列表 ====================\n\n const dataMap = computed(() => {\n const m = new Map<string | number, TransferItem>()\n for (const item of props.data) m.set(item.key, item)\n return m\n })\n\n const targetKeySet = computed(() => new Set(props.modelValue))\n\n const sourceList = computed(() =>\n props.data.filter(d => !targetKeySet.value.has(d.key))\n )\n\n const targetList = computed(() => {\n const result: TransferItem[] = []\n for (const key of props.modelValue) {\n const item = dataMap.value.get(key)\n if (item) result.push(item)\n }\n return result\n })\n\n // ==================== 搜索 ====================\n\n const sourceQuery = ref('')\n const targetQuery = ref('')\n\n /** 默认过滤方法 */\n function defaultFilter(query: string, item: TransferItem): boolean {\n return item.label.toLowerCase().includes(query.toLowerCase())\n }\n\n const filterFn = computed(() => props.filterMethod ?? defaultFilter)\n\n const filteredSourceList = computed(() => {\n const q = sourceQuery.value.trim()\n return q\n ? sourceList.value.filter(item => filterFn.value(q, item))\n : sourceList.value\n })\n\n const filteredTargetList = computed(() => {\n const q = targetQuery.value.trim()\n return q\n ? targetList.value.filter(item => filterFn.value(q, item))\n : targetList.value\n })\n\n // ==================== 选中态 ====================\n\n const sourceChecked = reactive(new Set<string | number>())\n const targetChecked = reactive(new Set<string | number>())\n\n /** 切换源列表项选中状态 */\n function toggleSourceCheck(key: string | number) {\n if (sourceChecked.has(key)) sourceChecked.delete(key)\n else sourceChecked.add(key)\n }\n\n /** 切换目标列表项选中状态 */\n function toggleTargetCheck(key: string | number) {\n if (targetChecked.has(key)) targetChecked.delete(key)\n else targetChecked.add(key)\n }\n\n const isSourceAllChecked = computed(\n () =>\n filteredSourceList.value.length > 0 &&\n filteredSourceList.value.every(\n i => i.disabled || sourceChecked.has(i.key)\n )\n )\n const isSourceIndeterminate = computed(\n () =>\n !isSourceAllChecked.value &&\n filteredSourceList.value.some(i => sourceChecked.has(i.key))\n )\n const isTargetAllChecked = computed(\n () =>\n filteredTargetList.value.length > 0 &&\n filteredTargetList.value.every(\n i => i.disabled || targetChecked.has(i.key)\n )\n )\n const isTargetIndeterminate = computed(\n () =>\n !isTargetAllChecked.value &&\n filteredTargetList.value.some(i => targetChecked.has(i.key))\n )\n\n /** 切换源列表全选状态 */\n function toggleSourceAll(checked: boolean) {\n for (const item of filteredSourceList.value) {\n if (item.disabled) continue\n if (checked) sourceChecked.add(item.key)\n else sourceChecked.delete(item.key)\n }\n }\n\n /** 切换目标列表全选状态 */\n function toggleTargetAll(checked: boolean) {\n for (const item of filteredTargetList.value) {\n if (item.disabled) continue\n if (checked) targetChecked.add(item.key)\n else targetChecked.delete(item.key)\n }\n }\n\n // ==================== 穿梭操作 ====================\n\n /** 将选中项移至目标列表 */\n function moveToTarget() {\n const keys = [...sourceChecked]\n const newVal = [...props.modelValue, ...keys]\n emit('update:modelValue', newVal)\n emit('change', newVal, 'right', keys)\n sourceChecked.clear()\n }\n\n /** 将选中项移回源列表 */\n function moveToSource() {\n const keys = [...targetChecked]\n const removeSet = new Set(keys)\n const newVal = props.modelValue.filter(k => !removeSet.has(k))\n emit('update:modelValue', newVal)\n emit('change', newVal, 'left', keys)\n targetChecked.clear()\n }\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
|
package/dist/C_VtableGantt.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./
|
|
1
|
+
import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./index26.vue.js";
|
|
2
2
|
export { _default as C_VtableGantt, type GanttOptions, type GanttPreset, type GanttTask, presetConfigs as ganttPresetConfigs };
|
package/dist/C_VtableGantt.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./
|
|
1
|
+
import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./index26.vue.js";
|
|
2
2
|
export { _default as C_VtableGantt, type GanttOptions, type GanttPreset, type GanttTask, presetConfigs as ganttPresetConfigs };
|
package/dist/constants.d.ts
CHANGED
|
@@ -121,9 +121,9 @@ declare const __VLS_export: vue.DefineComponent<CronProps, {
|
|
|
121
121
|
modelValue: string;
|
|
122
122
|
height: string | number;
|
|
123
123
|
disabled: boolean;
|
|
124
|
-
showPreview: boolean;
|
|
125
124
|
previewCount: number;
|
|
126
125
|
showTemplates: boolean;
|
|
126
|
+
showPreview: boolean;
|
|
127
127
|
showSecond: boolean;
|
|
128
128
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
|
|
129
129
|
declare const _default: typeof __VLS_export;
|
package/dist/constants2.d.ts
CHANGED
|
@@ -122,9 +122,9 @@ declare const __VLS_export: vue.DefineComponent<FormulaEditorProps, FormulaEdito
|
|
|
122
122
|
}>, {
|
|
123
123
|
modelValue: string;
|
|
124
124
|
height: string | number;
|
|
125
|
-
placeholder: string;
|
|
126
125
|
disabled: boolean;
|
|
127
126
|
showPreview: boolean;
|
|
127
|
+
placeholder: string;
|
|
128
128
|
variables: FormulaVariable[];
|
|
129
129
|
functions: FormulaFunction[];
|
|
130
130
|
sampleData: Record<string, number | string | boolean>;
|
package/dist/constants3.d.ts
CHANGED
|
@@ -168,11 +168,11 @@ declare const __VLS_export: vue.DefineComponent<NotificationCenterProps, Notific
|
|
|
168
168
|
onNewMessage?: ((message: NotificationMessage) => any) | undefined;
|
|
169
169
|
onNavigate?: ((url: string) => any) | undefined;
|
|
170
170
|
}>, {
|
|
171
|
+
pageSize: number;
|
|
172
|
+
storageKey: string;
|
|
171
173
|
desktopNotification: boolean;
|
|
172
174
|
maxBadgeCount: number;
|
|
173
175
|
pollingInterval: number;
|
|
174
|
-
pageSize: number;
|
|
175
|
-
storageKey: string;
|
|
176
176
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
|
|
177
177
|
declare const _default: typeof __VLS_export;
|
|
178
178
|
//#endregion
|
|
@@ -217,7 +217,7 @@ declare function useNotificationCore(props: NotificationCenterProps): {
|
|
|
217
217
|
actionText?: string | undefined;
|
|
218
218
|
extra?: Record<string, unknown> | undefined;
|
|
219
219
|
}[]>;
|
|
220
|
-
activeCategory: vue.Ref<
|
|
220
|
+
activeCategory: vue.Ref<"all" | NotificationCategory, "all" | NotificationCategory>;
|
|
221
221
|
loading: vue.Ref<boolean, boolean>;
|
|
222
222
|
total: vue.Ref<number, number>;
|
|
223
223
|
page: vue.Ref<number, number>;
|
package/dist/constants4.d.ts
CHANGED
|
@@ -198,16 +198,16 @@ type __VLS_Slots = {} & {
|
|
|
198
198
|
declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
|
|
199
199
|
change: (fileList: UploadFileItem[]) => any;
|
|
200
200
|
error: (file: UploadFileItem, error: Error) => any;
|
|
201
|
-
success: (file: UploadFileItem, response: any) => any;
|
|
202
201
|
progress: (file: UploadFileItem, percent: number) => any;
|
|
202
|
+
success: (file: UploadFileItem, response: any) => any;
|
|
203
203
|
remove: (file: UploadFileItem) => any;
|
|
204
204
|
finish: (fileList: UploadFileItem[]) => any;
|
|
205
205
|
exceed: (files: File[], fileList: UploadFileItem[]) => any;
|
|
206
206
|
}, string, vue.PublicProps, Readonly<UploadProps> & Readonly<{
|
|
207
207
|
onChange?: ((fileList: UploadFileItem[]) => any) | undefined;
|
|
208
208
|
onError?: ((file: UploadFileItem, error: Error) => any) | undefined;
|
|
209
|
-
onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
|
|
210
209
|
onProgress?: ((file: UploadFileItem, percent: number) => any) | undefined;
|
|
210
|
+
onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
|
|
211
211
|
onRemove?: ((file: UploadFileItem) => any) | undefined;
|
|
212
212
|
onFinish?: ((fileList: UploadFileItem[]) => any) | undefined;
|
|
213
213
|
onExceed?: ((files: File[], fileList: UploadFileItem[]) => any) | undefined;
|
|
@@ -216,11 +216,11 @@ declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {},
|
|
|
216
216
|
disabled: boolean;
|
|
217
217
|
multiple: boolean;
|
|
218
218
|
draggable: boolean;
|
|
219
|
+
maxSize: number;
|
|
219
220
|
action: string;
|
|
220
221
|
headers: Record<string, string>;
|
|
221
222
|
directory: boolean;
|
|
222
223
|
accept: string;
|
|
223
|
-
maxSize: number;
|
|
224
224
|
maxCount: number;
|
|
225
225
|
pasteable: boolean;
|
|
226
226
|
chunked: boolean;
|
package/dist/constants5.d.ts
CHANGED
|
@@ -259,8 +259,8 @@ type PlayerInstance = InstanceType<typeof xgplayer.default>;
|
|
|
259
259
|
//#endregion
|
|
260
260
|
//#region src/components/C_VideoPlayer/index.vue.d.ts
|
|
261
261
|
declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
|
|
262
|
-
error: (error: Error) => any;
|
|
263
262
|
ready: () => any;
|
|
263
|
+
error: (error: Error) => any;
|
|
264
264
|
ended: () => any;
|
|
265
265
|
stateChange: (state: PlayerState) => any;
|
|
266
266
|
timeUpdate: (currentTime: number, duration: number) => any;
|
|
@@ -272,8 +272,8 @@ declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExp
|
|
|
272
272
|
chapterChange: (chapter: Chapter) => any;
|
|
273
273
|
progressUpdate: (data: ProgressData) => any;
|
|
274
274
|
}, string, vue.PublicProps, Readonly<VideoPlayerProps> & Readonly<{
|
|
275
|
-
onError?: ((error: Error) => any) | undefined;
|
|
276
275
|
onReady?: (() => any) | undefined;
|
|
276
|
+
onError?: ((error: Error) => any) | undefined;
|
|
277
277
|
onEnded?: (() => any) | undefined;
|
|
278
278
|
onStateChange?: ((state: PlayerState) => any) | undefined;
|
|
279
279
|
onTimeUpdate?: ((currentTime: number, duration: number) => any) | undefined;
|
package/dist/data.d.ts
CHANGED
|
@@ -24,9 +24,9 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
|
|
|
24
24
|
}>, {
|
|
25
25
|
height: string;
|
|
26
26
|
center: [number, number];
|
|
27
|
+
zoom: number;
|
|
27
28
|
markers: MapMarker$1[];
|
|
28
29
|
amapKey: string;
|
|
29
|
-
zoom: number;
|
|
30
30
|
mapType: "osm" | "amap";
|
|
31
31
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
|
|
32
32
|
declare const _default: typeof __VLS_export;
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./chunk.js`),t=require(`./C_Icon.js`),n=require(`./C_Code.js`),r=require(`./C_Upload.js`),i=require(`./C_Barcode.js`),a=require(`./C_Captcha.js`),ee=require(`./C_Cascade.js`),o=require(`./C_Guide.js`),te=require(`./C_Progress.js`),s=require(`./C_Steps.js`),c=require(`./C_ActionBar.js`),ne=require(`./C_Theme.js`),l=require(`./C_Language.js`),u=require(`./C_Date.js`),d=require(`./C_Editor.js`),f=require(`./C_Markdown.js`),p=require(`./C_Map.js`),m=require(`./C_City.js`),h=require(`./C_VtableGantt.js`),g=require(`./C_Signature.js`),_=require(`./C_SplitPane.js`),v=require(`./C_CollapsePanel.js`),y=require(`./C_Time.js`),b=require(`./storage.js`),x=require(`./C_FormSearch.js`),S=require(`./C_Tree.js`),C=require(`./C_QRCode.js`),w=require(`./C_ImageCropper.js`),T=require(`./C_Draggable.js`),E=require(`./C_WaterFall.js`),D=require(`./C_FullCalendar.js`),O=require(`./C_NotificationCenter.js`),k=require(`./C_Cron.js`),A=require(`./C_FormulaEditor.js`),j=require(`./C_AntV.js`),M=require(`./C_VideoPlayer.js`),N=require(`./C_FilePreview.js`),P=require(`./C_WorkFlow.js`),F=require(`./C_Form.js`),I=require(`./C_Table.js`),L=require(`./C_GlobalSearch.js`),re=require(`./menuAdapter.js`),ie=require(`./C_Menu.js`),ae=require(`./C_Breadcrumb.js`),R=require(`./C_TagsView.js`);let z=require(`highlight.js/lib/core`);z=e.t(z),require(`highlight.js/styles/github.css`);let B=require(`highlight.js/lib/languages/javascript`);B=e.t(B);let V=require(`highlight.js/lib/languages/typescript`);V=e.t(V);let H=require(`highlight.js/lib/languages/json`);H=e.t(H);let U=require(`highlight.js/lib/languages/xml`);U=e.t(U);let W=require(`highlight.js/lib/languages/css`);W=e.t(W);let G=require(`highlight.js/lib/languages/bash`);G=e.t(G);let K=require(`highlight.js/lib/languages/yaml`);K=e.t(K);let q=require(`highlight.js/lib/languages/markdown`);q=e.t(q);let J=require(`highlight.js/lib/languages/java`);J=e.t(J);let Y=require(`highlight.js/lib/languages/csharp`);Y=e.t(Y);let X=require(`highlight.js/lib/languages/go`);X=e.t(X);let Z=require(`highlight.js/lib/languages/python`);Z=e.t(Z);const oe={cpp:()=>import(`highlight.js/lib/languages/cpp`),c:()=>import(`highlight.js/lib/languages/c`),php:()=>import(`highlight.js/lib/languages/php`),ruby:()=>import(`highlight.js/lib/languages/ruby`),rust:()=>import(`highlight.js/lib/languages/rust`),swift:()=>import(`highlight.js/lib/languages/swift`),kotlin:()=>import(`highlight.js/lib/languages/kotlin`),scss:()=>import(`highlight.js/lib/languages/scss`),less:()=>import(`highlight.js/lib/languages/less`),sql:()=>import(`highlight.js/lib/languages/sql`),dockerfile:()=>import(`highlight.js/lib/languages/dockerfile`),powershell:()=>import(`highlight.js/lib/languages/powershell`)},Q=new Set,$=z.default;function se(e,t){$.registerLanguage(e,t),Q.add(e)}function ce(e){[[`javascript`,B.default],[`typescript`,V.default],[`json`,H.default],[`html`,U.default],[`xml`,U.default],[`css`,W.default],[`bash`,G.default],[`shell`,G.default],[`yaml`,K.default],[`yml`,K.default],[`markdown`,q.default],[`java`,J.default],[`csharp`,Y.default],[`go`,X.default],[`python`,Z.default]].forEach(([e,t])=>{se(e,t)}),$.configure({ignoreUnescapedHTML:!0,languages:e.autoDetect?void 0:[]}),e.extraLanguages?.length&&le(e.extraLanguages)}async function le(e){let t=e.map(e=>ue(e));return(await Promise.allSettled(t)).map((t,n)=>t.status===`fulfilled`?e[n]:null).filter(Boolean)}async function ue(e){if(Q.has(e))return!0;let t=oe[e.toLowerCase()];if(!t)return console.warn(`[HighlightPlugin] Language '${e}' not supported`),!1;try{return se(e,(await t()).default),console.log(`[HighlightPlugin] Language '${e}' loaded successfully`),!0}catch(t){return console.error(`[HighlightPlugin] Failed to load language '${e}':`,t),!1}}const de=()=>({getHljs:()=>$,loadLanguage:e=>ue(e),loadLanguages:e=>le(e),getLoadedLanguages:()=>Array.from(Q)});function fe(e,t={}){ce({autoDetect:!1,extraLanguages:[],...t}),typeof window<`u`&&(window.hljs=$);let n=de();e.provide(`highlightManager`,n),e.config.globalProperties.$highlight=n,console.log(`[HighlightPlugin] 🎨 highlight.js plugin installed successfully`)}const pe=[n.t,t.t,r.t,i.t,a.t,ee.t,o.t,te.t,s.t,c.t,ne.t,l.t,u.t,d.t,f.t,p.t,m.t,h.t,g.t,_.t,v.t,y.t,x.t,S.t,C.t,w.t,T.t,E.t,D.t,O.t,k.t,A.t,j.t,M.t,N.t,P.t,F.t,I.t,L.t,ie.t,ae.t,R.t];var me={install:(e,t={})=>{pe.forEach(t=>{let n=t.__name||t.name||`UnknownComponent`;e.component(n,t)}),t.highlight!==void 0&&fe(e,t.highlight)}};exports.ACTION_KEYS=A.i,exports.BUTTON_TEXT=D.r,exports.CATEGORY_MAP=O.a,exports.CATEGORY_TABS=O.o,exports.CRON_FIELD_META=k.a,exports.CRON_TEMPLATES=k.o,exports.C_ActionBar=c.t,exports.C_AntV=j.t,exports.C_Barcode=i.t,exports.C_Breadcrumb=ae.t,exports.C_Captcha=a.t,exports.C_Cascade=ee.t,exports.C_City=m.t,exports.C_Code=n.t,exports.C_CollapsePanel=v.t,exports.C_Cron=k.t,exports.C_Date=u.t,exports.C_Draggable=T.t,exports.C_Editor=d.t,exports.C_FilePreview=N.t,exports.C_Form=F.t,exports.C_FormSearch=x.t,exports.C_FormulaEditor=A.t,exports.C_FullCalendar=D.t,exports.C_GlobalSearch=L.t,exports.C_Guide=o.t,exports.C_Icon=t.t,exports.C_ImageCropper=w.t,exports.C_Language=l.t,exports.C_Map=p.t,exports.C_Markdown=f.t,exports.C_Menu=ie.t,exports.C_NotificationCenter=O.t,exports.C_Progress=te.t,exports.C_QRCode=C.t,exports.C_Signature=g.t,exports.C_SplitPane=_.t,exports.C_Steps=s.t,exports.C_Table=I.t,exports.C_TagsView=R.t,exports.C_Theme=ne.t,exports.C_Time=y.t,exports.C_Tree=S.t,exports.C_Upload=r.t,exports.C_VideoPlayer=M.t,exports.C_VtableGantt=h.t,exports.C_WaterFall=E.t,exports.C_WorkFlow=P.t,exports.DEFAULT_ANIMATION_DURATION=E.a,exports.DEFAULT_BREAKPOINTS=E.o,exports.DEFAULT_CRON_EXPRESSION=k.s,exports.DEFAULT_CRON_VALUE=k.c,exports.DEFAULT_EDIT_FORM=D.i,exports.DEFAULT_FIELD_VALUE=k.l,exports.DEFAULT_FUNCTIONS=A.a,exports.DEFAULT_GAP=E.s,exports.DEFAULT_HEARTBEAT_INTERVAL=M.c,exports.DEFAULT_MAP_CONFIG=p.n,exports.DEFAULT_MAX_BADGE_COUNT=O.s,exports.DEFAULT_PAGE_SIZE=O.c,exports.DEFAULT_PLAYBACK_RATE=M.l,exports.DEFAULT_PLAYBACK_RATES=M.u,exports.DEFAULT_POLLING_INTERVAL=O.l,exports.DEFAULT_SKELETON_COUNT=E.c,exports.DEFAULT_STORAGE_KEY=O.u,exports.DEFAULT_VOLUME=M.d,exports.DEFAULT_WS_HEARTBEAT_INTERVAL=O.d,exports.DEFAULT_WS_HEARTBEAT_MESSAGE=O.f,exports.DEFAULT_WS_MAX_RECONNECT=O.p,exports.DEFAULT_WS_RECONNECT_INTERVAL=O.m,exports.DYNAMIC_FORM_STATE_KEY=F.n,exports.EVENT_COLORS=D.a,exports.FIELD_TYPE_OPTIONS=F.r,exports.FORM_DEFAULTS=F.c,exports.HEADER_TOOLBAR=D.o,exports.INFINITE_SCROLL_THRESHOLD=E.l,exports.KEYBOARD_SHORTCUTS=M.f,exports.LAYOUTS_WITH_OWN_CONTROLS=F.l,exports.MAP_TYPES=p.r,exports.MOCK_MESSAGES=O.h,exports.MONTH_LABELS=k.u,exports.NUMBER_KEYS=A.o,exports.OPERATORS=A.s,exports.OPERATOR_KEYS=A.c,exports.OSM_TILE_CONFIG=p.i,exports.PRIORITY_MAP=O.g,exports.PROGRESS_THROTTLE_INTERVAL=M.p,exports.QUALITY_LABEL_MAP=M.m,exports.SEEK_STEP=M.h,exports.SKELETON_HEIGHT_RANGE=E.u,exports.SOURCE_TYPE_MAP=M.g,exports.SPACED_OPERATORS=A.l,exports.STORAGE_KEYS=M._,exports.STORAGE_PREFIX=M.v,exports.VOLUME_STEP=M.y,exports.WATERMARK_DEFAULT_STYLE=M.b,exports.WEEK_LABELS=k.d,exports.createEditModeChecker=I.p,exports.createMenuOptions=re.t,exports.default=me,exports.flattenRoutes=re.n,exports.formatFileSize=r.s,exports.ganttPresetConfigs=h.n,exports.getFileIcon=r.c,exports.getItem=b.t,exports.printPresets=I.s,exports.registerRenderer=F.a,exports.removeAllItem=b.n,exports.removeItem=b.r,exports.resolveConfig=I.m,exports.resolveFormConfig=F.u,exports.setItem=b.i,exports.setupHighlight=fe,exports.shouldShowActions=F.d,exports.treePresetConfigs=S.r,exports.useBookmarks=M.r,exports.useCalendarEvents=D.n,exports.useCellEdit=I.d,exports.useChapters=M.i,exports.useChunkUpload=r.a,exports.useCollapsePanel=v.n,exports.useCronDescription=k.n,exports.useCronParser=k.i,exports.useCronPreview=k.r,exports.useCropperCore=w.n,exports.useDragDrop=r.n,exports.useDraggableLayout=T.n,exports.useDynamicFormState=F.i,exports.useDynamicRows=I.o,exports.useEdgeInteraction=j.n,exports.useFileHash=r.o,exports.useFilePreview=N.r,exports.useFormRenderer=F.o,exports.useFormState=F.s,exports.useFormulaEvaluator=A.n,exports.useFormulaParser=A.r,exports.useFullscreen=N.n,exports.useGlobalSearch=L.n,exports.useGraphBase=j.i,exports.useGraphExport=j.r,exports.useHighlight=de,exports.useInfiniteScroll=E.n,exports.useModalEdit=I.u,exports.useNotificationCore=O.r,exports.useNotificationFormat=O.n,exports.useNotificationWS=O.i,exports.usePagination=I.i,exports.usePlaybackControl=M.o,exports.usePlayerCore=M.s,exports.usePrintWatermark=I.c,exports.useProgressTracker=M.a,exports.useQRCode=C.n,exports.useResponsiveColumns=E.i,exports.useRowEdit=I.f,exports.useSearchHistory=x.r,exports.useSearchState=x.n,exports.useSignatureCanvas=g.i,exports.useSignatureExport=g.n,exports.useSignatureHistory=g.r,exports.useSplitResize=_.n,exports.useSubtitle=M.n,exports.useTableActions=I.r,exports.useTableColumns=I.n,exports.useTableExpand=I.l,exports.useTableManager=I.a,exports.useTagsView=R.n,exports.useTimeSelection=y.n,exports.useTreeOperations=S.n,exports.useUploadCore=r.r,exports.useUploadQueue=r.i,exports.useWaterFallLayout=E.r,exports.useWorkflowNodes=P.i,exports.useWorkflowPreview=P.n,exports.useWorkflowValidation=P.r;
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./chunk.js`),t=require(`./C_Icon.js`),n=require(`./C_Code.js`),r=require(`./C_Upload.js`),ee=require(`./C_Barcode.js`),i=require(`./C_Captcha.js`),te=require(`./C_Cascade.js`),ne=require(`./C_Guide.js`),re=require(`./C_Progress.js`),a=require(`./C_Steps.js`),ie=require(`./C_ActionBar.js`),o=require(`./C_Theme.js`),ae=require(`./C_Language.js`),oe=require(`./C_Date.js`),se=require(`./C_Editor.js`),ce=require(`./C_Markdown.js`),s=require(`./C_Map.js`),le=require(`./C_City.js`),c=require(`./C_VtableGantt.js`),l=require(`./C_Signature.js`),u=require(`./C_SplitPane.js`),d=require(`./C_CollapsePanel.js`),f=require(`./C_Time.js`),p=require(`./storage.js`),m=require(`./C_FormSearch.js`),h=require(`./C_Tree.js`),g=require(`./C_QRCode.js`),_=require(`./C_ImageCropper.js`),v=require(`./C_Draggable.js`),y=require(`./C_WaterFall.js`),b=require(`./C_FullCalendar.js`),x=require(`./C_NotificationCenter.js`),S=require(`./C_Cron.js`),C=require(`./C_FormulaEditor.js`),w=require(`./C_AntV.js`),T=require(`./C_VideoPlayer.js`),E=require(`./C_FilePreview.js`),D=require(`./C_WorkFlow.js`),O=require(`./C_Form.js`),k=require(`./C_Table.js`),A=require(`./C_GlobalSearch.js`),ue=require(`./menuAdapter.js`),de=require(`./C_Menu.js`),fe=require(`./C_Breadcrumb.js`),j=require(`./C_TagsView.js`),M=require(`./C_AudioPlayer.js`),N=require(`./C_AvatarGroup.js`),P=require(`./C_Chat.js`),F=require(`./C_ContextMenu.js`),I=require(`./C_Login.js`),L=require(`./C_Timeline.js`),R=require(`./C_Transfer.js`);let z=require(`highlight.js/lib/core`);z=e.t(z),require(`highlight.js/styles/github.css`);let B=require(`highlight.js/lib/languages/javascript`);B=e.t(B);let V=require(`highlight.js/lib/languages/typescript`);V=e.t(V);let H=require(`highlight.js/lib/languages/json`);H=e.t(H);let U=require(`highlight.js/lib/languages/xml`);U=e.t(U);let W=require(`highlight.js/lib/languages/css`);W=e.t(W);let G=require(`highlight.js/lib/languages/bash`);G=e.t(G);let K=require(`highlight.js/lib/languages/yaml`);K=e.t(K);let q=require(`highlight.js/lib/languages/markdown`);q=e.t(q);let J=require(`highlight.js/lib/languages/java`);J=e.t(J);let Y=require(`highlight.js/lib/languages/csharp`);Y=e.t(Y);let X=require(`highlight.js/lib/languages/go`);X=e.t(X);let Z=require(`highlight.js/lib/languages/python`);Z=e.t(Z);const pe={cpp:()=>import(`highlight.js/lib/languages/cpp`),c:()=>import(`highlight.js/lib/languages/c`),php:()=>import(`highlight.js/lib/languages/php`),ruby:()=>import(`highlight.js/lib/languages/ruby`),rust:()=>import(`highlight.js/lib/languages/rust`),swift:()=>import(`highlight.js/lib/languages/swift`),kotlin:()=>import(`highlight.js/lib/languages/kotlin`),scss:()=>import(`highlight.js/lib/languages/scss`),less:()=>import(`highlight.js/lib/languages/less`),sql:()=>import(`highlight.js/lib/languages/sql`),dockerfile:()=>import(`highlight.js/lib/languages/dockerfile`),powershell:()=>import(`highlight.js/lib/languages/powershell`)},Q=new Set,$=z.default;function me(e,t){$.registerLanguage(e,t),Q.add(e)}function he(e){[[`javascript`,B.default],[`typescript`,V.default],[`json`,H.default],[`html`,U.default],[`xml`,U.default],[`css`,W.default],[`bash`,G.default],[`shell`,G.default],[`yaml`,K.default],[`yml`,K.default],[`markdown`,q.default],[`java`,J.default],[`csharp`,Y.default],[`go`,X.default],[`python`,Z.default]].forEach(([e,t])=>{me(e,t)}),$.configure({ignoreUnescapedHTML:!0,languages:e.autoDetect?void 0:[]}),e.extraLanguages?.length&&ge(e.extraLanguages)}async function ge(e){let t=e.map(e=>_e(e));return(await Promise.allSettled(t)).map((t,n)=>t.status===`fulfilled`?e[n]:null).filter(Boolean)}async function _e(e){if(Q.has(e))return!0;let t=pe[e.toLowerCase()];if(!t)return console.warn(`[HighlightPlugin] Language '${e}' not supported`),!1;try{return me(e,(await t()).default),console.log(`[HighlightPlugin] Language '${e}' loaded successfully`),!0}catch(t){return console.error(`[HighlightPlugin] Failed to load language '${e}':`,t),!1}}const ve=()=>({getHljs:()=>$,loadLanguage:e=>_e(e),loadLanguages:e=>ge(e),getLoadedLanguages:()=>Array.from(Q)});function ye(e,t={}){he({autoDetect:!1,extraLanguages:[],...t}),typeof window<`u`&&(window.hljs=$);let n=ve();e.provide(`highlightManager`,n),e.config.globalProperties.$highlight=n,console.log(`[HighlightPlugin] 🎨 highlight.js plugin installed successfully`)}const be=[n.t,t.t,r.t,ee.t,i.t,te.t,ne.t,re.t,a.t,ie.t,o.t,ae.t,oe.t,se.t,ce.t,s.t,le.t,c.t,l.t,u.t,d.t,f.t,m.t,h.t,g.t,_.t,v.t,y.t,b.t,x.t,S.t,C.t,w.t,T.t,E.t,D.t,O.t,k.t,A.t,de.t,fe.t,j.t,M.t,N.t,P.t,F.t,I.t,L.t,R.t];var xe={install:(e,t={})=>{be.forEach(t=>{let n=t.__name||t.name||`UnknownComponent`;e.component(n,t)}),t.highlight!==void 0&&ye(e,t.highlight)}};exports.ACTION_KEYS=C.i,exports.BUTTON_TEXT=b.r,exports.CATEGORY_MAP=x.a,exports.CATEGORY_TABS=x.o,exports.CRON_FIELD_META=S.a,exports.CRON_TEMPLATES=S.o,exports.C_ActionBar=ie.t,exports.C_AntV=w.t,exports.C_AudioPlayer=M.t,exports.C_AvatarGroup=N.t,exports.C_Barcode=ee.t,exports.C_Breadcrumb=fe.t,exports.C_Captcha=i.t,exports.C_Cascade=te.t,exports.C_Chat=P.t,exports.C_City=le.t,exports.C_Code=n.t,exports.C_CollapsePanel=d.t,exports.C_ContextMenu=F.t,exports.C_Cron=S.t,exports.C_Date=oe.t,exports.C_Draggable=v.t,exports.C_Editor=se.t,exports.C_FilePreview=E.t,exports.C_Form=O.t,exports.C_FormSearch=m.t,exports.C_FormulaEditor=C.t,exports.C_FullCalendar=b.t,exports.C_GlobalSearch=A.t,exports.C_Guide=ne.t,exports.C_Icon=t.t,exports.C_ImageCropper=_.t,exports.C_Language=ae.t,exports.C_Login=I.t,exports.C_Map=s.t,exports.C_Markdown=ce.t,exports.C_Menu=de.t,exports.C_NotificationCenter=x.t,exports.C_Progress=re.t,exports.C_QRCode=g.t,exports.C_Signature=l.t,exports.C_SplitPane=u.t,exports.C_Steps=a.t,exports.C_Table=k.t,exports.C_TagsView=j.t,exports.C_Theme=o.t,exports.C_Time=f.t,exports.C_Timeline=L.t,exports.C_Transfer=R.t,exports.C_Tree=h.t,exports.C_Upload=r.t,exports.C_VideoPlayer=T.t,exports.C_VtableGantt=c.t,exports.C_WaterFall=y.t,exports.C_WorkFlow=D.t,exports.DEFAULT_ANIMATION_DURATION=y.a,exports.DEFAULT_AUDIO_PLAYER_PROPS=M.n,exports.DEFAULT_AVATAR_GROUP_PROPS=N.n,exports.DEFAULT_BREAKPOINTS=y.o,exports.DEFAULT_CHAT_PROPS=P.n,exports.DEFAULT_CONTEXT_MENU_PROPS=F.n,exports.DEFAULT_CRON_EXPRESSION=S.s,exports.DEFAULT_CRON_VALUE=S.c,exports.DEFAULT_EDIT_FORM=b.i,exports.DEFAULT_FEATURES=I.n,exports.DEFAULT_FIELD_VALUE=S.l,exports.DEFAULT_FUNCTIONS=C.a,exports.DEFAULT_GAP=y.s,exports.DEFAULT_HEARTBEAT_INTERVAL=T.c,exports.DEFAULT_MAP_CONFIG=s.n,exports.DEFAULT_MAX_BADGE_COUNT=x.s,exports.DEFAULT_PAGE_SIZE=x.c,exports.DEFAULT_PLAYBACK_RATE=T.l,exports.DEFAULT_PLAYBACK_RATES=T.u,exports.DEFAULT_POLLING_INTERVAL=x.l,exports.DEFAULT_SKELETON_COUNT=y.c,exports.DEFAULT_SOCIAL_PROVIDERS=I.r,exports.DEFAULT_STORAGE_KEY=x.u,exports.DEFAULT_TIMELINE_PROPS=L.n,exports.DEFAULT_TRANSFER_PROPS=R.n,exports.DEFAULT_VOLUME=T.d,exports.DEFAULT_WS_HEARTBEAT_INTERVAL=x.d,exports.DEFAULT_WS_HEARTBEAT_MESSAGE=x.f,exports.DEFAULT_WS_MAX_RECONNECT=x.p,exports.DEFAULT_WS_RECONNECT_INTERVAL=x.m,exports.DYNAMIC_FORM_STATE_KEY=O.n,exports.EVENT_COLORS=b.a,exports.FIELD_TYPE_OPTIONS=O.r,exports.FORM_DEFAULTS=O.c,exports.HEADER_TOOLBAR=b.o,exports.INFINITE_SCROLL_THRESHOLD=y.l,exports.KEYBOARD_SHORTCUTS=T.f,exports.LAYOUTS_WITH_OWN_CONTROLS=O.l,exports.MAP_TYPES=s.r,exports.MOCK_MESSAGES=x.h,exports.MODE_ICON_MAP=M.r,exports.MONTH_LABELS=S.u,exports.NUMBER_KEYS=C.o,exports.OPERATORS=C.s,exports.OPERATOR_KEYS=C.c,exports.OSM_TILE_CONFIG=s.i,exports.PRIORITY_MAP=x.g,exports.PROGRESS_THROTTLE_INTERVAL=T.p,exports.QUALITY_LABEL_MAP=T.m,exports.SEEK_STEP=T.h,exports.SKELETON_HEIGHT_RANGE=y.u,exports.SOURCE_TYPE_MAP=T.g,exports.SPACED_OPERATORS=C.l,exports.STORAGE_KEYS=T._,exports.STORAGE_PREFIX=T.v,exports.VOLUME_STEP=T.y,exports.WATERMARK_DEFAULT_STYLE=T.b,exports.WEEK_LABELS=S.d,exports.createEditModeChecker=k.p,exports.createMenuOptions=ue.t,exports.default=xe,exports.flattenRoutes=ue.n,exports.formatFileSize=r.s,exports.formatTime=M.i,exports.ganttPresetConfigs=c.n,exports.getFileIcon=r.c,exports.getInitials=N.i,exports.getItem=p.t,exports.nameToColor=N.a,exports.printPresets=k.s,exports.registerRenderer=O.a,exports.removeAllItem=p.n,exports.removeItem=p.r,exports.resolveConfig=k.m,exports.resolveFormConfig=O.u,exports.setItem=p.i,exports.setupHighlight=ye,exports.shouldShowActions=O.d,exports.treePresetConfigs=h.r,exports.useBookmarks=T.r,exports.useCalendarEvents=b.n,exports.useCellEdit=k.d,exports.useChapters=T.i,exports.useChunkUpload=r.a,exports.useCollapsePanel=d.n,exports.useCronDescription=S.n,exports.useCronParser=S.i,exports.useCronPreview=S.r,exports.useCropperCore=_.n,exports.useDragDrop=r.n,exports.useDraggableLayout=v.n,exports.useDynamicFormState=O.i,exports.useDynamicRows=k.o,exports.useEdgeInteraction=w.n,exports.useFileHash=r.o,exports.useFilePreview=E.r,exports.useFormRenderer=O.o,exports.useFormState=O.s,exports.useFormulaEvaluator=C.n,exports.useFormulaParser=C.r,exports.useFullscreen=E.n,exports.useGlobalSearch=A.n,exports.useGraphBase=w.i,exports.useGraphExport=w.r,exports.useHighlight=ve,exports.useInfiniteScroll=y.n,exports.useModalEdit=k.u,exports.useNotificationCore=x.r,exports.useNotificationFormat=x.n,exports.useNotificationWS=x.i,exports.usePagination=k.i,exports.usePlaybackControl=T.o,exports.usePlayerCore=T.s,exports.usePrintWatermark=k.c,exports.useProgressTracker=T.a,exports.useQRCode=g.n,exports.useResponsiveColumns=y.i,exports.useRowEdit=k.f,exports.useSearchHistory=m.r,exports.useSearchState=m.n,exports.useSignatureCanvas=l.i,exports.useSignatureExport=l.n,exports.useSignatureHistory=l.r,exports.useSplitResize=u.n,exports.useSubtitle=T.n,exports.useTableActions=k.r,exports.useTableColumns=k.n,exports.useTableExpand=k.l,exports.useTableManager=k.a,exports.useTagsView=j.n,exports.useTimeSelection=f.n,exports.useTreeOperations=h.n,exports.useUploadCore=r.r,exports.useUploadQueue=r.i,exports.useWaterFallLayout=y.r,exports.useWorkflowNodes=D.i,exports.useWorkflowPreview=D.n,exports.useWorkflowValidation=D.r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|