@robot-admin/naive-ui-components 0.6.8 → 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.
Files changed (177) hide show
  1. package/README.md +277 -261
  2. package/dist/C_AudioPlayer-DKRIGhi7.css.map +1 -0
  3. package/dist/C_AudioPlayer-DlB6eNsa.css.map +1 -0
  4. package/dist/C_AudioPlayer.cjs +1 -0
  5. package/dist/C_AudioPlayer.css +283 -0
  6. package/dist/C_AudioPlayer.d.cts +2 -0
  7. package/dist/C_AudioPlayer.d.ts +2 -0
  8. package/dist/C_AudioPlayer.js +1 -0
  9. package/dist/C_AudioPlayer.js.map +1 -0
  10. package/dist/C_AudioPlayer2.js +2 -0
  11. package/dist/C_AudioPlayer2.js.map +1 -0
  12. package/dist/C_AvatarGroup-D02zci-i.css.map +1 -0
  13. package/dist/C_AvatarGroup-DatHaUlY.css.map +1 -0
  14. package/dist/C_AvatarGroup.cjs +1 -0
  15. package/dist/C_AvatarGroup.css +107 -0
  16. package/dist/C_AvatarGroup.d.cts +2 -0
  17. package/dist/C_AvatarGroup.d.ts +2 -0
  18. package/dist/C_AvatarGroup.js +1 -0
  19. package/dist/C_AvatarGroup.js.map +1 -0
  20. package/dist/C_AvatarGroup2.js +2 -0
  21. package/dist/C_AvatarGroup2.js.map +1 -0
  22. package/dist/C_Barcode.d.cts +1 -1
  23. package/dist/C_Barcode.d.ts +1 -1
  24. package/dist/{C_Breadcrumb-B5PGpP5m.css.map → C_Breadcrumb-BiH0d9AI.css.map} +1 -1
  25. package/dist/{C_Breadcrumb-Cay7qluL.css.map → C_Breadcrumb-Bqqrl8nX.css.map} +1 -1
  26. package/dist/C_Breadcrumb.css +8 -2
  27. package/dist/C_Breadcrumb.d.cts +1 -1
  28. package/dist/C_Breadcrumb.d.ts +1 -1
  29. package/dist/C_Breadcrumb.js.map +1 -1
  30. package/dist/C_Breadcrumb2.js.map +1 -1
  31. package/dist/C_Captcha.d.cts +1 -1
  32. package/dist/C_Captcha.d.ts +1 -1
  33. package/dist/C_Cascade.d.cts +1 -1
  34. package/dist/C_Cascade.d.ts +1 -1
  35. package/dist/C_Chat-CcjZdAwu.css.map +1 -0
  36. package/dist/C_Chat-Diq7tyWU.css.map +1 -0
  37. package/dist/C_Chat.cjs +1 -0
  38. package/dist/C_Chat.css +395 -0
  39. package/dist/C_Chat.d.cts +2 -0
  40. package/dist/C_Chat.d.ts +2 -0
  41. package/dist/C_Chat.js +1 -0
  42. package/dist/C_Chat.js.map +1 -0
  43. package/dist/C_Chat2.js +2 -0
  44. package/dist/C_Chat2.js.map +1 -0
  45. package/dist/C_City.d.cts +1 -1
  46. package/dist/C_City.d.ts +1 -1
  47. package/dist/C_Code.d.cts +1 -1
  48. package/dist/C_Code.d.ts +1 -1
  49. package/dist/C_ContextMenu-B3Cgz_wJ.css.map +1 -0
  50. package/dist/C_ContextMenu-u1LixF3_.css.map +1 -0
  51. package/dist/C_ContextMenu.cjs +1 -0
  52. package/dist/C_ContextMenu.css +115 -0
  53. package/dist/C_ContextMenu.d.cts +2 -0
  54. package/dist/C_ContextMenu.d.ts +2 -0
  55. package/dist/C_ContextMenu.js +1 -0
  56. package/dist/C_ContextMenu.js.map +1 -0
  57. package/dist/C_ContextMenu2.js +2 -0
  58. package/dist/C_ContextMenu2.js.map +1 -0
  59. package/dist/C_Date.d.cts +1 -1
  60. package/dist/C_Date.d.ts +1 -1
  61. package/dist/C_Editor.d.cts +1 -1
  62. package/dist/C_Editor.d.ts +1 -1
  63. package/dist/C_Guide.d.cts +1 -1
  64. package/dist/C_Guide.d.ts +1 -1
  65. package/dist/C_Icon.d.cts +1 -1
  66. package/dist/C_Icon.d.ts +1 -1
  67. package/dist/C_Icon.js.map +1 -1
  68. package/dist/C_Icon2.js +1 -1
  69. package/dist/C_Icon2.js.map +1 -1
  70. package/dist/C_Language.d.cts +1 -1
  71. package/dist/C_Language.d.ts +1 -1
  72. package/dist/C_Language.js.map +1 -1
  73. package/dist/C_Language2.js +1 -1
  74. package/dist/C_Language2.js.map +1 -1
  75. package/dist/C_Login-BkdnkBKX.css.map +1 -0
  76. package/dist/C_Login-VkMM6OJ2.css.map +1 -0
  77. package/dist/C_Login.cjs +1 -0
  78. package/dist/C_Login.css +515 -0
  79. package/dist/C_Login.d.cts +2 -0
  80. package/dist/C_Login.d.ts +2 -0
  81. package/dist/C_Login.js +1 -0
  82. package/dist/C_Login.js.map +1 -0
  83. package/dist/C_Login2.js +2 -0
  84. package/dist/C_Login2.js.map +1 -0
  85. package/dist/C_Markdown.d.cts +1 -1
  86. package/dist/C_Markdown.d.ts +1 -1
  87. package/dist/C_Menu.d.cts +1 -1
  88. package/dist/C_Menu.d.ts +1 -1
  89. package/dist/C_Progress.d.cts +1 -1
  90. package/dist/C_Progress.d.ts +1 -1
  91. package/dist/C_Steps.d.cts +1 -1
  92. package/dist/C_Steps.d.ts +1 -1
  93. package/dist/C_TagsView.d.cts +1 -1
  94. package/dist/C_TagsView.d.ts +1 -1
  95. package/dist/C_Theme.d.cts +1 -1
  96. package/dist/C_Theme.d.ts +1 -1
  97. package/dist/C_Timeline-BIvw3f41.css.map +1 -0
  98. package/dist/C_Timeline-VsDfCv4Q.css.map +1 -0
  99. package/dist/C_Timeline.cjs +1 -0
  100. package/dist/C_Timeline.css +271 -0
  101. package/dist/C_Timeline.d.cts +2 -0
  102. package/dist/C_Timeline.d.ts +2 -0
  103. package/dist/C_Timeline.js +1 -0
  104. package/dist/C_Timeline.js.map +1 -0
  105. package/dist/C_Timeline2.js +2 -0
  106. package/dist/C_Timeline2.js.map +1 -0
  107. package/dist/C_Transfer-BOB6OBqS.css.map +1 -0
  108. package/dist/C_Transfer-Dpq7ezWC.css.map +1 -0
  109. package/dist/C_Transfer.cjs +1 -0
  110. package/dist/C_Transfer.css +193 -0
  111. package/dist/C_Transfer.d.cts +2 -0
  112. package/dist/C_Transfer.d.ts +2 -0
  113. package/dist/C_Transfer.js +1 -0
  114. package/dist/C_Transfer.js.map +1 -0
  115. package/dist/C_Transfer2.js +2 -0
  116. package/dist/C_Transfer2.js.map +1 -0
  117. package/dist/C_VtableGantt.d.cts +1 -1
  118. package/dist/C_VtableGantt.d.ts +1 -1
  119. package/dist/constants.d.ts +2 -2
  120. package/dist/constants2.d.ts +2 -2
  121. package/dist/constants4.d.ts +3 -3
  122. package/dist/constants5.d.ts +2 -2
  123. package/dist/data.d.ts +1 -1
  124. package/dist/index.cjs +1 -1
  125. package/dist/index.cjs.map +1 -1
  126. package/dist/index.d.cts +48 -41
  127. package/dist/index.d.ts +48 -41
  128. package/dist/index.js +1 -1
  129. package/dist/index.js.map +1 -1
  130. package/dist/index.vue.d.ts +1 -1
  131. package/dist/index10.vue.d.ts +41 -23
  132. package/dist/index11.vue.d.ts +80 -63
  133. package/dist/index12.vue.d.ts +48 -20
  134. package/dist/index13.vue.d.ts +23 -63
  135. package/dist/index14.vue.d.ts +21 -58
  136. package/dist/index15.vue.d.ts +65 -48
  137. package/dist/index16.vue.d.ts +16 -21
  138. package/dist/index17.vue.d.ts +106 -77
  139. package/dist/index18.vue.d.ts +74 -11
  140. package/dist/index19.vue.d.ts +58 -653
  141. package/dist/index2.vue.d.ts +75 -30
  142. package/dist/index20.vue.d.ts +55 -0
  143. package/dist/index21.vue.d.ts +33 -0
  144. package/dist/index22.vue.d.ts +88 -0
  145. package/dist/index23.vue.d.ts +18 -0
  146. package/dist/index24.vue.d.ts +112 -0
  147. package/dist/index25.vue.d.ts +81 -0
  148. package/dist/index26.vue.d.ts +662 -0
  149. package/dist/index3.vue.d.ts +77 -19
  150. package/dist/index4.vue.d.ts +29 -36
  151. package/dist/index5.vue.d.ts +19 -20
  152. package/dist/index6.vue.d.ts +36 -26
  153. package/dist/index7.vue.d.ts +23 -40
  154. package/dist/index8.vue.d.ts +117 -45
  155. package/dist/index9.vue.d.ts +19 -25
  156. package/dist/resolver.cjs +1 -1
  157. package/dist/resolver.cjs.map +1 -1
  158. package/dist/resolver.d.cts +1 -1
  159. package/dist/resolver.d.ts +1 -1
  160. package/dist/resolver.js +1 -1
  161. package/dist/resolver.js.map +1 -1
  162. package/dist/style.css +1920 -21
  163. package/dist/useCollapsePanel.d.ts +1 -1
  164. package/dist/useCropperCore.d.ts +4 -4
  165. package/dist/useDraggableLayout.d.ts +8 -8
  166. package/dist/useDynamicFormState.d.ts +10 -10
  167. package/dist/useEdgeInteraction.d.ts +1 -1
  168. package/dist/useInfiniteScroll.d.ts +2 -2
  169. package/dist/useModalEdit.d.ts +2 -2
  170. package/dist/useQRCode.d.ts +4 -4
  171. package/dist/useSearchState.d.ts +2 -2
  172. package/dist/useSignatureHistory.d.ts +1 -1
  173. package/dist/useSplitResize.d.ts +5 -5
  174. package/dist/useTimeSelection.d.ts +2 -2
  175. package/dist/useTreeOperations.d.ts +6 -6
  176. package/dist/useWorkflowValidation.d.ts +1 -1
  177. 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,2 @@
1
+ import { i as TransferProps, n as DEFAULT_TRANSFER_PROPS, r as TransferItem, t as _default } from "./index25.vue.js";
2
+ export { _default as C_Transfer, DEFAULT_TRANSFER_PROPS, type TransferItem, type TransferProps };
@@ -0,0 +1,2 @@
1
+ import { i as TransferProps, n as DEFAULT_TRANSFER_PROPS, r as TransferItem, t as _default } from "./index25.vue.js";
2
+ export { _default as C_Transfer, DEFAULT_TRANSFER_PROPS, type TransferItem, type TransferProps };
@@ -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":"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"}
@@ -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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"}
@@ -1,2 +1,2 @@
1
- import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./index19.vue.js";
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 };
@@ -1,2 +1,2 @@
1
- import { a as presetConfigs, i as GanttTask, n as GanttOptions, r as GanttPreset, t as _default } from "./index19.vue.js";
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 };
@@ -119,11 +119,11 @@ declare const __VLS_export: vue.DefineComponent<CronProps, {
119
119
  "onValidation-change"?: ((result: CronValidation) => any) | undefined;
120
120
  }>, {
121
121
  modelValue: string;
122
- disabled: boolean;
123
122
  height: string | number;
124
- showPreview: boolean;
123
+ disabled: 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;
@@ -121,10 +121,10 @@ declare const __VLS_export: vue.DefineComponent<FormulaEditorProps, FormulaEdito
121
121
  "onValidation-change"?: ((result: FormulaValidation) => any) | undefined;
122
122
  }>, {
123
123
  modelValue: string;
124
- placeholder: string;
125
- disabled: boolean;
126
124
  height: string | number;
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>;
@@ -197,25 +197,25 @@ type __VLS_Slots = {} & {
197
197
  };
198
198
  declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
199
199
  change: (fileList: UploadFileItem[]) => any;
200
- success: (file: UploadFileItem, response: any) => any;
201
200
  error: (file: UploadFileItem, error: Error) => 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
- onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
209
208
  onError?: ((file: UploadFileItem, error: Error) => 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;
214
214
  }>, {
215
+ data: Record<string, any>;
215
216
  disabled: boolean;
216
217
  multiple: boolean;
217
218
  draggable: boolean;
218
- data: Record<string, any>;
219
219
  maxSize: number;
220
220
  action: string;
221
221
  headers: Record<string, string>;
@@ -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
@@ -26,8 +26,8 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
26
26
  center: [number, number];
27
27
  zoom: number;
28
28
  markers: MapMarker$1[];
29
- mapType: "osm" | "amap";
30
29
  amapKey: string;
30
+ mapType: "osm" | "amap";
31
31
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
32
32
  declare const _default: typeof __VLS_export;
33
33
  //#endregion
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