x-sccba 0.2.3 → 0.2.5

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 (212) hide show
  1. package/dist/umd/index.js +2 -2
  2. package/dist/vue2/index122.cjs +1 -1
  3. package/dist/vue2/index122.mjs +1 -1
  4. package/dist/vue2/index144.cjs +1 -1
  5. package/dist/vue2/index144.mjs +3 -3
  6. package/dist/vue2/index211.cjs +1 -1
  7. package/dist/vue2/index211.cjs.map +1 -1
  8. package/dist/vue2/index211.mjs +5 -35
  9. package/dist/vue2/index211.mjs.map +1 -1
  10. package/dist/vue2/index230.cjs +1 -1
  11. package/dist/vue2/index230.cjs.map +1 -1
  12. package/dist/vue2/index230.mjs +5 -167
  13. package/dist/vue2/index230.mjs.map +1 -1
  14. package/dist/vue2/index231.cjs +1 -1
  15. package/dist/vue2/index231.mjs +5 -5
  16. package/dist/vue2/index232.cjs +1 -1
  17. package/dist/vue2/index232.mjs +5 -5
  18. package/dist/vue2/index233.cjs +1 -1
  19. package/dist/vue2/index233.cjs.map +1 -1
  20. package/dist/vue2/index233.mjs +167 -5
  21. package/dist/vue2/index233.mjs.map +1 -1
  22. package/dist/vue2/index238.cjs +1 -1
  23. package/dist/vue2/index238.cjs.map +1 -1
  24. package/dist/vue2/index238.mjs +283 -49
  25. package/dist/vue2/index238.mjs.map +1 -1
  26. package/dist/vue2/index239.cjs +1 -1
  27. package/dist/vue2/index239.cjs.map +1 -1
  28. package/dist/vue2/index239.mjs +2 -127
  29. package/dist/vue2/index239.mjs.map +1 -1
  30. package/dist/vue2/index240.cjs +1 -1
  31. package/dist/vue2/index240.cjs.map +1 -1
  32. package/dist/vue2/index240.mjs +56 -35
  33. package/dist/vue2/index240.mjs.map +1 -1
  34. package/dist/vue2/index241.cjs +1 -1
  35. package/dist/vue2/index241.cjs.map +1 -1
  36. package/dist/vue2/index241.mjs +2 -208
  37. package/dist/vue2/index241.mjs.map +1 -1
  38. package/dist/vue2/index242.cjs +1 -1
  39. package/dist/vue2/index242.cjs.map +1 -1
  40. package/dist/vue2/index242.mjs +31 -170
  41. package/dist/vue2/index242.mjs.map +1 -1
  42. package/dist/vue2/index243.cjs +1 -1
  43. package/dist/vue2/index243.cjs.map +1 -1
  44. package/dist/vue2/index243.mjs +2 -970
  45. package/dist/vue2/index243.mjs.map +1 -1
  46. package/dist/vue2/index244.cjs +1 -1
  47. package/dist/vue2/index244.cjs.map +1 -1
  48. package/dist/vue2/index244.mjs +3 -845
  49. package/dist/vue2/index244.mjs.map +1 -1
  50. package/dist/vue2/index73.cjs.map +1 -1
  51. package/dist/vue2/index73.mjs.map +1 -1
  52. package/dist/vue3/index123.cjs +1 -1
  53. package/dist/vue3/index123.mjs +1 -1
  54. package/dist/vue3/index212.cjs +1 -1
  55. package/dist/vue3/index212.cjs.map +1 -1
  56. package/dist/vue3/index212.mjs +5 -34
  57. package/dist/vue3/index212.mjs.map +1 -1
  58. package/dist/vue3/index231.cjs +1 -1
  59. package/dist/vue3/index231.mjs +2 -2
  60. package/dist/vue3/index232.cjs +1 -1
  61. package/dist/vue3/index232.mjs +2 -2
  62. package/dist/vue3/index233.cjs +1 -1
  63. package/dist/vue3/index233.mjs +2 -2
  64. package/dist/vue3/index238.cjs +1 -1
  65. package/dist/vue3/index238.cjs.map +1 -1
  66. package/dist/vue3/index238.mjs +165 -32
  67. package/dist/vue3/index238.mjs.map +1 -1
  68. package/dist/vue3/index239.cjs +1 -1
  69. package/dist/vue3/index239.cjs.map +1 -1
  70. package/dist/vue3/index239.mjs +284 -167
  71. package/dist/vue3/index239.mjs.map +1 -1
  72. package/dist/vue3/index240.cjs +1 -1
  73. package/dist/vue3/index240.cjs.map +1 -1
  74. package/dist/vue3/index240.mjs +2 -284
  75. package/dist/vue3/index240.mjs.map +1 -1
  76. package/dist/vue3/index241.cjs +1 -1
  77. package/dist/vue3/index241.cjs.map +1 -1
  78. package/dist/vue3/index241.mjs +56 -2
  79. package/dist/vue3/index241.mjs.map +1 -1
  80. package/dist/vue3/index242.cjs +1 -1
  81. package/dist/vue3/index242.cjs.map +1 -1
  82. package/dist/vue3/index242.mjs +2 -56
  83. package/dist/vue3/index242.mjs.map +1 -1
  84. package/dist/vue3/index243.cjs +1 -1
  85. package/dist/vue3/index243.cjs.map +1 -1
  86. package/dist/vue3/index243.mjs +31 -2
  87. package/dist/vue3/index243.mjs.map +1 -1
  88. package/dist/vue3/index244.cjs +1 -1
  89. package/dist/vue3/index244.cjs.map +1 -1
  90. package/dist/vue3/index244.mjs +2 -31
  91. package/dist/vue3/index244.mjs.map +1 -1
  92. package/dist/vue3/index245.cjs +1 -1
  93. package/dist/vue3/index245.mjs +4 -2
  94. package/dist/vue3/index245.mjs.map +1 -1
  95. package/dist/vue3/index73.cjs.map +1 -1
  96. package/dist/vue3/index73.mjs.map +1 -1
  97. package/package.json +16 -28
  98. package/style.css +4 -0
  99. package/types/components/XTable/useVirtualScroll.d.ts +3 -4
  100. package/vue2/style.css +4 -0
  101. package/dist/vue2/index245.cjs +0 -2
  102. package/dist/vue2/index245.cjs.map +0 -1
  103. package/dist/vue2/index245.mjs +0 -59
  104. package/dist/vue2/index245.mjs.map +0 -1
  105. package/dist/vue2/index246.cjs +0 -2
  106. package/dist/vue2/index246.cjs.map +0 -1
  107. package/dist/vue2/index246.mjs +0 -36
  108. package/dist/vue2/index246.mjs.map +0 -1
  109. package/dist/vue2/index247.cjs +0 -2
  110. package/dist/vue2/index247.cjs.map +0 -1
  111. package/dist/vue2/index247.mjs +0 -167
  112. package/dist/vue2/index247.mjs.map +0 -1
  113. package/dist/vue2/index248.cjs +0 -2
  114. package/dist/vue2/index248.cjs.map +0 -1
  115. package/dist/vue2/index248.mjs +0 -17
  116. package/dist/vue2/index248.mjs.map +0 -1
  117. package/dist/vue2/index249.cjs +0 -2
  118. package/dist/vue2/index249.cjs.map +0 -1
  119. package/dist/vue2/index249.mjs +0 -287
  120. package/dist/vue2/index249.mjs.map +0 -1
  121. package/dist/vue2/index250.cjs +0 -2
  122. package/dist/vue2/index250.cjs.map +0 -1
  123. package/dist/vue2/index250.mjs +0 -5
  124. package/dist/vue2/index250.mjs.map +0 -1
  125. package/dist/vue2/index251.cjs +0 -2
  126. package/dist/vue2/index251.cjs.map +0 -1
  127. package/dist/vue2/index251.mjs +0 -59
  128. package/dist/vue2/index251.mjs.map +0 -1
  129. package/dist/vue2/index252.cjs +0 -2
  130. package/dist/vue2/index252.cjs.map +0 -1
  131. package/dist/vue2/index252.mjs +0 -5
  132. package/dist/vue2/index252.mjs.map +0 -1
  133. package/dist/vue2/index253.cjs +0 -2
  134. package/dist/vue2/index253.cjs.map +0 -1
  135. package/dist/vue2/index253.mjs +0 -34
  136. package/dist/vue2/index253.mjs.map +0 -1
  137. package/dist/vue2/index254.cjs +0 -2
  138. package/dist/vue2/index254.cjs.map +0 -1
  139. package/dist/vue2/index254.mjs +0 -5
  140. package/dist/vue2/index254.mjs.map +0 -1
  141. package/dist/vue2/index255.cjs +0 -2
  142. package/dist/vue2/index255.cjs.map +0 -1
  143. package/dist/vue2/index255.mjs +0 -105
  144. package/dist/vue2/index255.mjs.map +0 -1
  145. package/dist/vue2/index256.cjs +0 -2
  146. package/dist/vue2/index256.cjs.map +0 -1
  147. package/dist/vue2/index256.mjs +0 -21
  148. package/dist/vue2/index256.mjs.map +0 -1
  149. package/dist/vue2/index257.cjs +0 -2
  150. package/dist/vue2/index257.cjs.map +0 -1
  151. package/dist/vue2/index257.mjs +0 -134
  152. package/dist/vue2/index257.mjs.map +0 -1
  153. package/dist/vue2/index258.cjs +0 -2
  154. package/dist/vue2/index258.cjs.map +0 -1
  155. package/dist/vue2/index258.mjs +0 -7
  156. package/dist/vue2/index258.mjs.map +0 -1
  157. package/dist/vue3/index246.cjs +0 -2
  158. package/dist/vue3/index246.cjs.map +0 -1
  159. package/dist/vue3/index246.mjs +0 -130
  160. package/dist/vue3/index246.mjs.map +0 -1
  161. package/dist/vue3/index247.cjs +0 -2
  162. package/dist/vue3/index247.cjs.map +0 -1
  163. package/dist/vue3/index247.mjs +0 -38
  164. package/dist/vue3/index247.mjs.map +0 -1
  165. package/dist/vue3/index248.cjs +0 -2
  166. package/dist/vue3/index248.cjs.map +0 -1
  167. package/dist/vue3/index248.mjs +0 -211
  168. package/dist/vue3/index248.mjs.map +0 -1
  169. package/dist/vue3/index249.cjs +0 -2
  170. package/dist/vue3/index249.cjs.map +0 -1
  171. package/dist/vue3/index249.mjs +0 -173
  172. package/dist/vue3/index249.mjs.map +0 -1
  173. package/dist/vue3/index250.cjs +0 -2
  174. package/dist/vue3/index250.cjs.map +0 -1
  175. package/dist/vue3/index250.mjs +0 -936
  176. package/dist/vue3/index250.mjs.map +0 -1
  177. package/dist/vue3/index251.cjs +0 -2
  178. package/dist/vue3/index251.cjs.map +0 -1
  179. package/dist/vue3/index251.mjs +0 -807
  180. package/dist/vue3/index251.mjs.map +0 -1
  181. package/dist/vue3/index252.cjs +0 -2
  182. package/dist/vue3/index252.cjs.map +0 -1
  183. package/dist/vue3/index252.mjs +0 -55
  184. package/dist/vue3/index252.mjs.map +0 -1
  185. package/dist/vue3/index253.cjs +0 -2
  186. package/dist/vue3/index253.cjs.map +0 -1
  187. package/dist/vue3/index253.mjs +0 -36
  188. package/dist/vue3/index253.mjs.map +0 -1
  189. package/dist/vue3/index254.cjs +0 -2
  190. package/dist/vue3/index254.cjs.map +0 -1
  191. package/dist/vue3/index254.mjs +0 -138
  192. package/dist/vue3/index254.mjs.map +0 -1
  193. package/dist/vue3/index255.cjs +0 -2
  194. package/dist/vue3/index255.cjs.map +0 -1
  195. package/dist/vue3/index255.mjs +0 -17
  196. package/dist/vue3/index255.mjs.map +0 -1
  197. package/dist/vue3/index256.cjs +0 -2
  198. package/dist/vue3/index256.cjs.map +0 -1
  199. package/dist/vue3/index256.mjs +0 -7
  200. package/dist/vue3/index256.mjs.map +0 -1
  201. package/dist/vue3/index257.cjs +0 -2
  202. package/dist/vue3/index257.cjs.map +0 -1
  203. package/dist/vue3/index257.mjs +0 -105
  204. package/dist/vue3/index257.mjs.map +0 -1
  205. package/dist/vue3/index258.cjs +0 -2
  206. package/dist/vue3/index258.cjs.map +0 -1
  207. package/dist/vue3/index258.mjs +0 -21
  208. package/dist/vue3/index258.mjs.map +0 -1
  209. package/dist/vue3/index259.cjs +0 -2
  210. package/dist/vue3/index259.cjs.map +0 -1
  211. package/dist/vue3/index259.mjs +0 -134
  212. package/dist/vue3/index259.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index244.mjs","sources":["../../../../node_modules/vue-virtual-scroller/dist/composables/useDynamicScroller.js"],"sourcesContent":["import { nextTick as re, reactive as pe, computed as W, toValue as j, provide as G, shallowRef as Y, watchEffect as ge, shallowReactive as ie, triggerRef as he, watch as A, onActivated as Qe, onDeactivated as qe, onUnmounted as je, effectScope as Ge } from \"vue\";\nimport { a as Ye, b as X, d as ye, u as Je, f as Ve, e as Ie, r as se } from \"../useRecycleScroller-CXk06epd.js\";\nimport { r as Xe, a as ke } from \"../keyField-D6okV6nC.js\";\nimport { c as Ze } from \"../dynamicScrollerMeasurement-Cq5NQLJa.js\";\nfunction et() {\n const n = /* @__PURE__ */ new Map();\n return {\n on(i, l) {\n let a = n.get(i);\n a || (a = /* @__PURE__ */ new Set(), n.set(i, a)), a.add(l);\n },\n off(i, l) {\n const a = n.get(i);\n a && (a.delete(l), a.size || n.delete(i));\n },\n emit(i, l) {\n const a = n.get(i);\n if (a != null && a.size)\n for (const d of [...a])\n d(l);\n },\n clear() {\n n.clear();\n }\n };\n}\nfunction tt(n = {}) {\n const i = n.queueFlush ?? ((m) => re(m)), l = n.overflowQueueFlush ?? i, a = Math.max(1, n.maxTasksPerFlush ?? Number.POSITIVE_INFINITY);\n let d = !1;\n const p = /* @__PURE__ */ new Map();\n function w() {\n d || !p.size || (d = !0, i(x));\n }\n function x() {\n if (d = !1, !p.size)\n return;\n const m = [];\n for (const [g, I] of p)\n if (m.push(I), p.delete(g), m.length >= a)\n break;\n const R = m.map((g) => ({\n task: g,\n value: g.read()\n }));\n for (const g of R)\n g.value != null && g.task.write(g.value), g.task.done();\n p.size && (l(x), d = !0);\n }\n function D(m, R) {\n p.set(m, R), w();\n }\n function y(m) {\n p.delete(m);\n }\n return {\n schedule: D,\n cancel: y\n };\n}\nfunction nt(n) {\n for (let i = 0; i < n.length; i++)\n n[i];\n}\nfunction Fe(n) {\n return n.item;\n}\nfunction Q(n, i) {\n const l = i.get(n);\n return l || n;\n}\nfunction it(n) {\n const i = {};\n return Object.defineProperties(i, {\n item: {\n enumerable: !0,\n get: () => n.item.item\n },\n itemWithSize: {\n enumerable: !0,\n get: () => n.item\n },\n size: {\n enumerable: !0,\n get: () => n.item.size\n },\n position: {\n enumerable: !0,\n get: () => n.position\n },\n offset: {\n enumerable: !0,\n get: () => n.offset\n },\n id: {\n enumerable: !0,\n get: () => n.nr.id\n },\n index: {\n enumerable: !0,\n get: () => n.nr.index\n },\n used: {\n enumerable: !0,\n get: () => n.nr.used\n },\n key: {\n enumerable: !0,\n get: () => n.nr.key\n },\n type: {\n enumerable: !0,\n get: () => n.nr.type\n }\n }), i;\n}\nfunction rt(n) {\n return n._vs_styleStamp ?? 0;\n}\nfunction st(n) {\n return n._vs_visibilityStamp ?? 0;\n}\nconst Te = [\n \"position\",\n \"top\",\n \"left\",\n \"transform\",\n \"willChange\",\n \"visibility\",\n \"pointerEvents\",\n \"display\"\n];\nfunction Se(n) {\n const i = {};\n for (const l of Te)\n i[l] = n.style[l];\n return i;\n}\nfunction _e(n, i) {\n for (const l of Te)\n n.style[l] = i[l] ?? \"\";\n}\nfunction U(n, i, l) {\n n.style[i] !== l && (n.style[i] = l);\n}\nfunction ze(n, i, l, a, d, p, w) {\n if (!(\"view\" in i)) {\n _e(n, p);\n return;\n }\n const x = n.tagName === \"TR\", D = d ? se({\n direction: l,\n flowMode: !0\n }) : se({\n direction: l,\n disableTransform: a || x\n }), y = Ie(Q(i.view, w), {\n direction: l,\n mode: D\n });\n U(n, \"position\", String(y.position ?? \"\")), U(n, \"top\", String(y.top ?? \"\")), U(n, \"left\", String(y.left ?? \"\")), U(n, \"transform\", D === \"flow\" || x ? \"\" : String(y.transform ?? \"\")), U(n, \"willChange\", String(y.willChange ?? \"\")), U(n, \"visibility\", String(y.visibility ?? \"\")), U(n, \"pointerEvents\", String(y.pointerEvents ?? \"\")), U(n, \"display\", String(y.display ?? \"\"));\n}\nfunction be(n, i) {\n return \"view\" in n && !i;\n}\nfunction we(n, i, l, a, d, p) {\n if (\"view\" in n) {\n const w = Q(n.view, p);\n return {\n active: w.nr.used && d,\n id: Fe(w).id\n };\n }\n return {\n active: i.active && d,\n id: ut(\n i.item,\n l,\n a,\n i.index\n )\n };\n}\nfunction lt(n, i, l, a) {\n if (!(\"view\" in n))\n return {\n direction: i,\n flowMode: l,\n legacy: !0\n };\n if (l) {\n const p = Q(n.view, a);\n return {\n direction: i,\n flowMode: l,\n legacy: !1,\n visibilityStamp: st(p)\n };\n }\n const d = Q(n.view, a);\n return {\n active: d.nr.used,\n direction: i,\n flowMode: l,\n legacy: !1,\n styleStamp: rt(d),\n position: be(n, l) ? d.position : null,\n offset: be(n, l) ? d.offset : null\n };\n}\nfunction Re(n, i) {\n if (\"view\" in n) {\n const l = Q(n.view, i);\n return {\n item: Fe(l).item,\n active: l.nr.used,\n index: l.nr.index,\n watchData: n.watchData ?? !1,\n emitResize: n.emitResize ?? !1,\n sizeDependencies: n.sizeDependencies ?? null,\n onResize: n.onResize\n };\n }\n return {\n watchData: !1,\n emitResize: !1,\n sizeDependencies: null,\n ...n\n };\n}\nfunction ot(n, i) {\n n.item !== i.item && (n.item = i.item), n.active !== i.active && (n.active = i.active), n.index !== i.index && (n.index = i.index), n.watchData !== i.watchData && (n.watchData = i.watchData), n.sizeDependencies !== i.sizeDependencies && (n.sizeDependencies = i.sizeDependencies), n.emitResize !== i.emitResize && (n.emitResize = i.emitResize), n.onResize !== i.onResize && (n.onResize = i.onResize);\n}\nfunction ct(n, i) {\n n.onResize !== i.onResize && (n.onResize = i.onResize);\n}\nfunction ut(n, i, l, a) {\n return l ? a ?? null : ke(n, a, i);\n}\nfunction vt(n) {\n const i = Ye(n);\n let l = 0, a = {};\n const d = et();\n let p = !1, w, x = !1, D = [], y = null, m = null, R = null;\n const g = /* @__PURE__ */ new Set(), I = [], v = pe({\n active: !0,\n sizes: {},\n keyField: o().keyField,\n simpleArray: !1\n }), C = W(() => {\n const e = j(o().items);\n return nt(e), e;\n }), E = W(() => o().direction ?? \"vertical\"), b = W(() => j(o().el)), Me = W(() => j(o().before)), Ae = W(() => j(o().after)), H = /* @__PURE__ */ new Map();\n function o() {\n return i.value;\n }\n const z = W(() => j(o().enabled ?? !0));\n function $(e) {\n let t = -1;\n return t = requestAnimationFrame(() => {\n g.delete(t), e();\n }), g.add(t), t;\n }\n function le() {\n for (const e of g)\n cancelAnimationFrame(e);\n g.clear();\n }\n const xe = tt({\n // Spread row measurement across frames so one huge flush cannot monopolize layout time.\n maxTasksPerFlush: 6,\n overflowQueueFlush(e) {\n $(e);\n }\n });\n typeof ResizeObserver < \"u\" && (w = new ResizeObserver((e) => {\n $(() => {\n if (Array.isArray(e)) {\n for (const t of e)\n if (t.target && t.target.$_vs_onResize) {\n let r, s;\n if (t.borderBoxSize) {\n const u = t.borderBoxSize[0];\n r = u.inlineSize, s = u.blockSize;\n } else\n r = t.contentRect.width, s = t.contentRect.height;\n t.target.$_vs_onResize(t.target.$_vs_id, r, s);\n }\n }\n });\n }));\n const Z = {\n vscrollData: v,\n resizeObserver: w,\n measureQueue: xe,\n direction: E,\n undefinedMap: a,\n undefinedSizeCount: {\n get value() {\n return l;\n },\n set value(e) {\n l = e;\n }\n },\n onVscrollUpdate(e) {\n const t = (r) => {\n e(r);\n };\n return d.on(\"vscroll:update\", t), () => d.off(\"vscroll:update\", t);\n }\n };\n G(\"vscrollData\", v), G(\"vscrollParent\", {\n get $_undefinedSizes() {\n return l;\n },\n set $_undefinedSizes(e) {\n l = e;\n },\n get $_undefinedMap() {\n return a;\n },\n set $_undefinedMap(e) {\n a = e;\n },\n $_events: d,\n direction: E\n }), G(\"vscrollResizeObserver\", w), G(\"vscrollMeasurementContext\", Z), G(\"vscrollAnchorRegistry\", {\n delete(e) {\n H.delete(e);\n },\n set(e, t) {\n H.set(e, t);\n }\n });\n const k = W(() => {\n const e = C.value;\n return e.length > 0 && typeof e[0] != \"object\";\n }), oe = Y(0), L = Y(I);\n ge(() => {\n if (!z.value)\n return;\n const e = m || !b.value ? null : De(b.value.scrollTop, I), r = o().keyField, s = k.value, u = v.sizes, c = C.value, f = c.length;\n let S = I.length !== f, h = I.length !== f;\n for (let _ = 0; _ < f; _++) {\n const M = c[_], K = s ? _ : Xe(M, _, r);\n let B = u[K];\n typeof B > \"u\" && !a[K] && (B = 0);\n let P = I[_];\n if (!P) {\n P = ie({\n item: M,\n id: K,\n size: B\n }), I[_] = P, S = !0, h = !0;\n continue;\n }\n P.item !== M && (P.item = M, S = !0, h = !0), P.id !== K && (P.id = K, S = !0, h = !0), P.size !== B && (P.size = B, S = !0);\n }\n I.length !== f && (I.length = f, S = !0, h = !0), S && (y = e, oe.value++, h ? L.value = I.slice() : he(L));\n });\n function De(e, t) {\n if (!t.length)\n return null;\n const r = o().minItemSize;\n let s = 0, u = 0, c = t[0].id;\n for (const f of t) {\n const S = f.size || r, h = s + S;\n if (u = s, c = f.id, e < h)\n return {\n key: f.id,\n offset: e - s\n };\n s = h;\n }\n return {\n key: c,\n offset: Math.max(0, e - u)\n };\n }\n const J = o();\n D = X(C.value, k.value ? null : J.keyField), J.cache && (v.sizes = ye(J.cache, C.value, k.value ? null : J.keyField));\n function Oe() {\n var e, t;\n (t = (e = o()).onHidden) == null || t.call(e);\n }\n function Pe(e, t, r, s) {\n var u, c;\n (c = (u = o()).onUpdate) == null || c.call(u, e, t, r, s);\n }\n const Ce = pe({\n get enabled() {\n return z.value;\n },\n get items() {\n return L.value;\n },\n get keyField() {\n return \"id\";\n },\n get direction() {\n return E.value;\n },\n get itemSize() {\n return null;\n },\n get gridItems() {\n },\n get itemSecondarySize() {\n },\n get minItemSize() {\n return o().minItemSize;\n },\n get sizeField() {\n return \"size\";\n },\n get typeField() {\n return \"type\";\n },\n get buffer() {\n return o().buffer ?? 200;\n },\n get pageMode() {\n return o().pageMode ?? !1;\n },\n get shift() {\n return !1;\n },\n get cache() {\n return o().cache;\n },\n get prerender() {\n return o().prerender ?? 0;\n },\n get emitUpdate() {\n return o().emitUpdate ?? !1;\n },\n get disableTransform() {\n return o().disableTransform ?? !1;\n },\n get flowMode() {\n return o().flowMode ?? !1;\n },\n get hiddenPosition() {\n return o().hiddenPosition;\n },\n get updateInterval() {\n return o().updateInterval ?? 0;\n },\n get el() {\n return b.value;\n },\n get before() {\n return Me.value;\n },\n get after() {\n return Ae.value;\n },\n get scrollParent() {\n return o().scrollParent;\n },\n get onResize() {\n return ce;\n },\n get onVisible() {\n return ue;\n },\n get onHidden() {\n return Oe;\n },\n get onUpdate() {\n return Pe;\n }\n });\n function ce() {\n var e, t;\n N(), (t = (e = o()).onResize) == null || t.call(e);\n }\n function ue() {\n var e, t;\n d.emit(\"vscroll:update\", { force: !1 }), (t = (e = o()).onVisible) == null || t.call(e);\n }\n const F = Je(\n Ce\n ), O = /* @__PURE__ */ new WeakMap(), ae = /* @__PURE__ */ new WeakMap(), ee = Y([]);\n function Ee(e) {\n const t = o();\n return Ie(Q(e, O), {\n direction: E.value,\n mode: se({\n direction: E.value,\n disableTransform: t.disableTransform ?? !1,\n flowMode: t.flowMode ?? !1\n })\n });\n }\n function fe(e) {\n let t = ae.get(e);\n return t || (t = it(e), ae.set(e, t), O.set(t, e)), t;\n }\n ge(() => {\n const e = F.pool.value, t = e.length, r = ee.value;\n let s = r.length !== t;\n for (let u = 0; u < t; u++) {\n const c = fe(e[u]);\n r[u] !== c && (r[u] = c, s = !0);\n }\n r.length !== t && (r.length = t, s = !0), s && he(ee);\n });\n const Ke = W(\n () => F.visiblePool.value.map(fe)\n ), V = /* @__PURE__ */ new WeakMap();\n function te() {\n R != null && (cancelAnimationFrame(R), g.delete(R), R = null);\n }\n function T() {\n te(), m = null;\n }\n function Be() {\n m == null || R != null || (R = $(() => {\n R = null, ne();\n }));\n }\n function We() {\n const e = b.value;\n if (!e)\n return null;\n const t = e.getBoundingClientRect();\n let r = null;\n for (const [s, u] of H.entries()) {\n if (!u.active || getComputedStyle(s).visibility === \"hidden\")\n continue;\n const c = s.getBoundingClientRect();\n if (c.bottom <= t.top || c.top >= t.bottom)\n continue;\n const f = Math.max(c.top, t.top) - t.top;\n (!r || f < r.score) && (r = {\n key: u.id,\n offset: c.top - t.top,\n score: f\n });\n }\n return r;\n }\n function Ue(e) {\n const t = b.value;\n if (!t) {\n T();\n return;\n }\n const r = t.scrollTop, s = Math.min(F.findItemIndex(r), e.length - 1), u = e[s];\n if (u == null) {\n T();\n return;\n }\n const c = We();\n m = {\n logicalKey: u,\n logicalOffset: r - F.getItemOffset(s),\n pendingKeys: /* @__PURE__ */ new Set(),\n stableFrames: 0,\n visualKey: (c == null ? void 0 : c.key) ?? null,\n visualOffset: (c == null ? void 0 : c.offset) ?? 0\n };\n }\n function de(e) {\n const t = b.value;\n return !t || Math.abs(t.scrollTop - e) < 0.5 ? !1 : (x = !0, t.scrollTop = e, F.updateVisibleItems(!0), t.dispatchEvent(new Event(\"scroll\")), $(() => {\n x = !1;\n }), !0);\n }\n function ne() {\n const e = m, t = b.value;\n if (!e || !t)\n return;\n const r = L.value.findIndex((f) => f.id === e.logicalKey);\n if (r === -1) {\n T();\n return;\n }\n let s = !1;\n const u = F.getItemOffset(r) + e.logicalOffset;\n if (s = de(u) || s, !s && e.visualKey != null)\n for (const [f, S] of H.entries()) {\n if (!S.active || S.id !== e.visualKey || getComputedStyle(f).visibility === \"hidden\")\n continue;\n const h = f.getBoundingClientRect().top - t.getBoundingClientRect().top - e.visualOffset;\n s = de(t.scrollTop + h) || s;\n break;\n }\n let c = !0;\n for (const f of e.pendingKeys)\n if (!(typeof v.sizes[f] == \"number\" && v.sizes[f] > 0)) {\n c = !1;\n break;\n }\n if (!s && c) {\n if (e.stableFrames++, e.stableFrames >= 2) {\n T();\n return;\n }\n } else\n e.stableFrames = 0;\n Be();\n }\n function me(e, t, r, s) {\n const u = Ge(), c = Y(t), f = ie({\n ...r\n }), S = ie({\n onResize: r.onResize\n }), h = Y(e), _ = u.run(() => (A(() => we(\n c.value,\n f,\n o().keyField,\n v.simpleArray,\n v.active,\n O\n ), () => {\n const M = h.value;\n if (M) {\n const K = we(\n c.value,\n f,\n o().keyField,\n v.simpleArray,\n v.active,\n O\n ), B = K.id;\n B != null && H.set(M, {\n active: K.active,\n id: B\n });\n }\n }, {\n immediate: !0\n }), A(() => lt(\n c.value,\n E.value,\n o().flowMode ?? !1,\n O\n ), () => {\n const M = h.value;\n M && ze(\n M,\n c.value,\n E.value,\n o().disableTransform ?? !1,\n o().flowMode ?? !1,\n s,\n O\n );\n }, {\n immediate: !0\n }), Ze(\n f,\n h,\n Z,\n S\n )));\n _.mount(), V.set(e, {\n binding: c,\n scope: u,\n options: f,\n callbacks: S,\n el: h,\n controller: _,\n restoreStyles: s\n });\n }\n const $e = {\n mounted(e, t) {\n if (!z.value)\n return;\n const r = Se(e);\n me(e, t.value, Re(t.value, O), r);\n },\n updated(e, t) {\n if (!z.value)\n return;\n const r = V.get(e), s = Re(t.value, O);\n if (!r) {\n const c = Se(e);\n me(e, t.value, s, c);\n return;\n }\n const u = r.binding.value !== t.value;\n u && (r.binding.value = t.value), ot(r.options, s), ct(r.callbacks, s), r.el.value !== e && (r.el.value = e), u && ze(\n e,\n t.value,\n E.value,\n o().disableTransform ?? !1,\n o().flowMode ?? !1,\n r.restoreStyles,\n O\n );\n },\n unmounted(e) {\n const t = V.get(e);\n t && (t.controller.unmount(), t.scope.stop(), _e(e, t.restoreStyles), H.delete(e), V.delete(e));\n }\n };\n function N(e = !1) {\n z.value && ((e || k.value) && (v.sizes = {}), d.emit(\"vscroll:update\", { force: !0 }));\n }\n function He(e, t) {\n F.scrollToItem(e, t);\n }\n function ve(e) {\n const t = o();\n return v.sizes = ye(e, C.value, k.value ? null : t.keyField), F.restoreCache(e);\n }\n function Le(e, t) {\n const r = o(), s = t ?? C.value.indexOf(e), u = k.value ? s : ke(e, s >= 0 ? s : t, r.keyField);\n return v.sizes[u] || 0;\n }\n function Ne() {\n if (!z.value)\n return;\n const e = b.value;\n e && (p || (p = !0, re(() => {\n e.scrollTop = e.scrollHeight + 5e3;\n const t = () => {\n e.scrollTop = e.scrollHeight + 5e3, $(() => {\n e.scrollTop = e.scrollHeight + 5e3, l === 0 ? p = !1 : $(t);\n });\n };\n $(t);\n })));\n }\n function q() {\n m && !x && T();\n }\n return A(() => C.value.slice(), (e, t) => {\n if (!z.value)\n return;\n const r = o(), s = k.value ? null : r.keyField, u = X(e, s);\n if (r.shift) {\n const c = t ? X(t, s) : D, f = Ve(c, u);\n f > 0 ? (Ue(c), m && (m.pendingKeys = new Set(u.slice(0, f)), m.stableFrames = 0, re(() => {\n m && ne();\n }))) : T();\n } else\n T();\n D = u, N();\n }, { flush: \"sync\" }), A(() => o().cache, (e) => {\n z.value && e && ve(e);\n }), A(() => o().keyField, (e) => {\n z.value && (v.keyField = e, D = X(C.value, k.value ? null : e), T(), N(!0));\n }, { flush: \"sync\" }), A(k, (e) => {\n v.simpleArray = e;\n }, { immediate: !0 }), A(() => o().direction, () => {\n z.value && (T(), N(!0));\n }), A(b, (e, t) => {\n t == null || t.removeEventListener(\"scroll\", q), z.value && (e == null || e.addEventListener(\"scroll\", q));\n }, {\n immediate: !0\n }), A(z, (e) => {\n const t = b.value;\n e ? (t == null || t.addEventListener(\"scroll\", q), N()) : (t == null || t.removeEventListener(\"scroll\", q), te(), le(), T());\n }), A(oe, () => {\n if (!z.value)\n return;\n const e = b.value;\n if (!e)\n return;\n if (m) {\n ne();\n return;\n }\n const t = y;\n if (y = null, !t)\n return;\n const r = L.value.findIndex((c) => c.id === t.key);\n if (r === -1)\n return;\n const s = F.getItemOffset(r) + t.offset;\n s - e.scrollTop !== 0 && (e.scrollTop = s);\n }, { flush: \"post\" }), Qe(() => {\n v.active = !0;\n }), qe(() => {\n v.active = !1;\n }), je(() => {\n var e;\n te(), le(), (e = b.value) == null || e.removeEventListener(\"scroll\", q), d.clear();\n }), {\n vscrollData: v,\n itemsWithSize: L,\n resizeObserver: w,\n measurementContext: Z,\n vDynamicScrollerItem: $e,\n ...F,\n pool: ee,\n visiblePool: Ke,\n simpleArray: k,\n forceUpdate: N,\n scrollToItem: He,\n restoreCache: ve,\n getItemSize: Le,\n getViewStyle: Ee,\n scrollToBottom: Ne,\n onScrollerResize: ce,\n onScrollerVisible: ue\n };\n}\nexport {\n vt as useDynamicScroller\n};\n//# sourceMappingURL=useDynamicScroller.js.map\n"],"names":["re","se","Ie","_e","ke","Ye","pe","W","e","j","G","Y","ge","f","Xe","ie","he","X","ye","Je","Be","Ge","A","Ze","q","Ve","Qe","qe","je"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index244.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index73.cjs","sources":["../../src/components/XSelect/index.tsx"],"sourcesContent":["import type { PropType } from 'vue-demi';\nimport type {\n AuditFieldConfig,\n AuditState,\n TrackFieldConfig,\n TrackState,\n PermissionFieldConfig\n} from '../../hooks/capability/types';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n isVue2\n} from 'vue-demi';\nimport { getUIComponent } from '../../adapters/ui-provider';\nimport { h } from '../../compat/h';\nimport {\n renderSlot,\n useCompatListeners,\n useCompatSlots\n} from '../../compat/slots';\nimport { useForwardProps, useOmitForwardProps } from '../../hooks';\nimport { useAuditInternal } from '../../hooks/capability/useAuditInternal';\n\nimport { useTrackInternal } from '../../hooks/capability/useTrackInternal';\nimport { useDisabledTip } from '../../hooks/useDisabledTip';\nimport { useLooseModel } from '../../hooks/useLooseModel';\nimport { warnOnce } from '../../utils/warnOnce';\nimport AuditFeedback from '../AuditFeedback/index';\nimport { renderOptionTree } from './render-options';\nimport { usePagination } from './usePagination';\nimport './style.scss';\n\n// ============ Props 声明 ============\nexport const selectProps = {\n // v-model:必须声明,否则 Vue3 下 modelValue 进入 attrs 而非 props,\n // 导致 useLooseModel 的 readExternal() 读取 props.modelValue 为 undefined,\n // innerValue 始终为 undefined,选中值后无法回显。\n // 参考 XInput/index.tsx 既定范式。\n modelValue: {\n type: [String, Number, Boolean, Object, Array] as PropType<any>,\n default: undefined\n },\n loose: { type: Boolean, default: false },\n multipleString: { type: Boolean, default: false },\n valueSeparator: { type: String, default: ',' },\n disabledTip: { type: String, default: '' },\n disabledTipPlacement: { type: String, default: 'top' },\n useVirtual: { type: Boolean, default: false },\n optionSource: { type: Array as PropType<any[]>, default: () => [] },\n optionValueKey: { type: String, default: 'value' },\n optionLabelKey: { type: String, default: 'label' },\n customLabel: {\n type: [Function, String] as PropType<\n ((option: Record<string, any>, index: number) => any) | string\n >,\n default: ''\n },\n returnObject: { type: Boolean, default: false },\n isShowPagination: { type: Boolean, default: false },\n paginationOption: {\n type: Object as PropType<{\n pageSize?: number;\n currentPage?: number;\n pagerCount?: number;\n total?: number;\n }>,\n default: () => ({ pageSize: 6, currentPage: 1, pagerCount: 5, total: 0 })\n },\n isCached: { type: Boolean, default: true },\n isRadioEchoLabel: { type: Boolean, default: true },\n radioSelectValLabel: { type: String, default: '' },\n selectAllTxt: { type: String, default: '' },\n showSelectAll: { type: Boolean, default: true },\n // 文本模式:true 时跳过 ElSelect 渲染,以 <span> 展示当前选中项 label,用于只读回显\n textMode: { type: Boolean, default: false },\n // ---- 审查能力 ----\n audit: {\n type: [Boolean, Object] as PropType<boolean | AuditFieldConfig | undefined>,\n default: undefined\n },\n auditState: {\n type: Object as PropType<AuditState | undefined>,\n default: undefined\n },\n // ---- 埋点能力 ----\n track: {\n type: [Boolean, Object] as PropType<boolean | TrackFieldConfig | undefined>,\n default: undefined\n },\n trackState: {\n type: Object as PropType<TrackState | undefined>,\n default: undefined\n },\n // ---- 权限能力 ----\n /** 权限配置:控制 disabled/hidden/readonly 效果 */\n permission: {\n type: [Boolean, Object] as PropType<\n boolean | PermissionFieldConfig | undefined\n >,\n default: undefined\n }\n} as const;\n\nexport const selectEmits = [\n 'update:modelValue',\n 'input',\n 'change',\n 'select-all',\n 'pagination-change',\n 'audit-trigger',\n 'track-event',\n 'permission-check'\n] as const;\n\n// SELF_PROP_KEYS 仅驼峰(Vue 模板编译已转驼峰;useOmitForwardProps 按字符串 delete)\nconst SELF_PROP_KEYS = [\n 'modelValue',\n 'loose',\n 'multipleString',\n 'valueSeparator',\n 'disabledTip',\n 'disabledTipPlacement',\n 'useVirtual',\n 'optionSource',\n 'optionValueKey',\n 'optionLabelKey',\n 'customLabel',\n 'returnObject',\n 'isShowPagination',\n 'paginationOption',\n 'isCached',\n 'isRadioEchoLabel',\n 'radioSelectValLabel',\n 'selectAllTxt',\n 'showSelectAll',\n 'textMode',\n 'audit',\n 'auditState',\n 'track',\n 'trackState',\n 'permission'\n] as const;\n\n/**\n * 计算 textMode 下的展示文本。\n * 优先级:returnObject > multipleString(string) > multiple(array) > 单值。\n * optionSource 为空时降级为 String(原始值),并 dev warn 一次。\n */\nfunction computeDisplayText(props: any, instance: any): string {\n // 双端读外部值(与 useLooseModel.readExternal 思路一致)\n const vm = instance?.proxy || instance;\n const raw = isVue2\n ? (vm?.$attrs?.value ?? (vm as any)?.value)\n : props.modelValue;\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw) && raw.length === 0) return '';\n\n const sep = props.valueSeparator || ',';\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const src: any[] = Array.isArray(props.optionSource)\n ? props.optionSource\n : [];\n\n // returnObject 分支:直接读对象上的 label\n if (props.returnObject) {\n if (props.multiple && Array.isArray(raw)) {\n return raw\n .map(o => (o && o[labelKey] != null ? String(o[labelKey]) : ''))\n .filter(Boolean)\n .join(sep);\n }\n return raw && typeof raw === 'object' ? String(raw[labelKey] ?? '') : '';\n }\n\n // 拆分为值数组\n let values: any[];\n if (props.multiple && props.multipleString && typeof raw === 'string') {\n values = raw\n .split(sep)\n .map((s: string) => s.trim())\n .filter((s: string) => s !== '');\n } else if (Array.isArray(raw)) {\n values = raw;\n } else {\n values = [raw];\n }\n\n // optionSource 为空(slot 模式)→ 降级为原始值 + dev warn 一次\n if (src.length === 0) {\n warnOnce(\n 'XSelect:textMode-noSource',\n '[XSelect] textMode=true 但 optionSource 为空,无法查找 label,已降级为原始值展示。推荐配合 optionSource 使用。'\n );\n return values.map(v => String(v ?? '')).join(sep);\n }\n\n // 扁平化 optionSource(展开 group 子项),与 render-options.tsx 的 group 识别一致\n const flat: any[] = [];\n for (const it of src) {\n if (it && Array.isArray(it.options)) flat.push(...it.options);\n else if (it) flat.push(it);\n }\n\n // 每个 value 查 label(loose=true 时宽松比较)\n const lookup = (v: any): string => {\n const matched = flat.find(o =>\n props.loose ? String(o?.[valueKey]) === String(v) : o?.[valueKey] === v\n );\n return matched && matched[labelKey] != null\n ? String(matched[labelKey])\n : String(v ?? '');\n };\n\n return values.map(lookup).join(sep);\n}\n\nexport default defineComponent({\n name: 'XSelect',\n inheritAttrs: false,\n props: selectProps,\n emits: [...selectEmits],\n setup(props, { attrs, emit }) {\n const instance = getCurrentInstance()!;\n const ElSelect = getUIComponent('Select');\n const ElSelectV2 = getUIComponent('SelectV2'); // Vue2 下 undefined\n\n // 组件选择:useVirtual 且存在 ElSelectV2 → SelectV2;否则回退 Select\n const Comp = (() => {\n if (!props.useVirtual) return ElSelect;\n if (ElSelectV2) {\n // ElSelectV2 要求 options 必填,若 optionSource 为空则降级\n if (\n !Array.isArray(props.optionSource) ||\n props.optionSource.length === 0\n ) {\n // 注意:不可用 import process from 'node:process'(webpack 4 运行时无法解析 node: 协议,得到 undefined)\n // 用 (globalThis as any).process?.env?.NODE_ENV 保证浏览器运行时安全(同 XButton 范式)\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual=true 但 optionSource 为空,已降级为 ElSelect'\n );\n }\n return ElSelect;\n }\n return ElSelectV2;\n }\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual 在 Vue2/element-ui 下降级为 ElSelect'\n );\n }\n return ElSelect;\n })();\n\n // —— 三大 hooks ——\n const { innerValue, updateInner, emitOutside } = useLooseModel(\n props,\n emit,\n instance\n );\n const { mergedSource, paginationNode, selectAllNode, onChangeWithCache } =\n usePagination(props, emit, instance, updateInner);\n const wrapWithTip = useDisabledTip(props);\n\n // 属性隔离:先全量 forward,再 delete 自有 prop\n const forwarded = useForwardProps(props);\n const elForwarded = useOmitForwardProps(forwarded, SELF_PROP_KEYS);\n\n // ---- 审查能力 ----\n const auditMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.auditState) return 'controlled';\n if (typeof props.audit === 'object' && props.audit !== null)\n return 'auto';\n return 'off';\n });\n\n const autoAudit = useAuditInternal({\n enabled: () => auditMode.value === 'auto',\n config: () =>\n typeof props.audit === 'object'\n ? (props.audit as AuditFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const internalAuditState = computed<AuditState | null>(() => {\n if (auditMode.value === 'controlled') return props.auditState!;\n if (auditMode.value === 'auto') return autoAudit.state.value;\n return null;\n });\n\n // ---- 埋点能力 ----\n const trackMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.trackState) return 'controlled';\n if (typeof props.track === 'object' && props.track !== null)\n return 'auto';\n return 'off';\n });\n\n const autoTrack = useTrackInternal({\n enabled: () => trackMode.value === 'auto',\n config: () =>\n typeof props.track === 'object'\n ? (props.track as TrackFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const userOnVisibleChange = (attrs as any).onVisibleChange;\n const handleAuditVisibleChange = (visible: boolean) => {\n if (typeof userOnVisibleChange === 'function')\n userOnVisibleChange(visible);\n if (\n !visible &&\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n const cur = innerValue.value;\n emit('audit-trigger', cur, { source: 'visible-change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (!visible && props.track !== undefined && props.track !== false) {\n emit('track-event', 'visible-change', {\n value: innerValue.value,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n };\n\n return () => {\n // 文本模式:完全跳过 ElSelect 渲染,仅展示当前选中项的 label。\n // 优先级最高,覆盖 useVirtual / 分页 / 全选 / 禁用提示。\n if (props.textMode) {\n const text = computeDisplayText(props, instance);\n return h('span', { class: 'x-select__text' }, [text]);\n }\n\n const slots = useCompatSlots(instance);\n const listenerProps = useCompatListeners(instance);\n\n // v-model 双端分流(参见 XInput/index.tsx 既定范式)\n const modelBinding = isVue2\n ? {\n value: innerValue.value,\n onInput: (v: any) => emitOutside(updateInner(v))\n }\n : {\n modelValue: innerValue.value,\n 'onUpdate:modelValue': (v: any) => emitOutside(updateInner(v))\n };\n\n // 合并顺序(不可变更):透传 props < attrs < listeners < modelBinding < 自有覆盖\n const { onVisibleChange: _omitVc, ...restAttrs } = attrs as any;\n const compProps: Record<string, any> = {\n ...elForwarded.value,\n ...restAttrs,\n ...listenerProps,\n ...modelBinding,\n onChange: (val: any) => {\n onChangeWithCache(val);\n if (\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n emit('audit-trigger', val, { source: 'change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (props.track !== undefined && props.track !== false) {\n emit('track-event', 'change', {\n value: val,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n },\n onVisibleChange: handleAuditVisibleChange\n };\n\n // 子节点策略:\n // useVirtual + ElSelectV2:通过 options prop 传扁平数组,不走 slot\n // 否则 optionSource 非空:数据驱动 slot.default\n // 否则:透传默认 slot\n const isV2 = props.useVirtual && ElSelectV2 && Comp === ElSelectV2;\n\n const slotNodes: Record<string, any> = {};\n\n if (isV2) {\n // ElSelectV2 需要扁平 { value, label, disabled } 数组,不支持 group 嵌套\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const flatten = (arr: any[]): any[] => {\n const out: any[] = [];\n for (const item of arr || []) {\n if (item && Array.isArray(item.options)) {\n out.push(\n ...item.options.map((sub: any) => ({\n value: sub[valueKey],\n label: sub[labelKey],\n disabled: !!sub.disabled\n }))\n );\n } else if (item) {\n out.push({\n value: item[valueKey],\n label: item[labelKey],\n disabled: !!item.disabled\n });\n }\n }\n return out;\n };\n compProps.options = flatten(mergedSource.value);\n // ElSelectV2 仍可能用到其他 slot(如 empty),透传\n Object.keys(slots).forEach(name => {\n if (name !== 'default') {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n }\n });\n } else if (props.optionSource && props.optionSource.length) {\n slotNodes.default = () => renderOptionTree(mergedSource.value, props);\n if (slots.default && (globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] optionSource 与默认 slot 同时存在,已忽略 slot'\n );\n }\n } else {\n Object.keys(slots).forEach(name => {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n });\n }\n\n // 全选 checkbox:multiple && showSelectAll && !useVirtual && !isShowPagination\n if (selectAllNode) {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n selectAllNode(),\n original ? original(s) : null\n ];\n }\n\n // 分页节点:Vue3/element-plus 用 footer slot;Vue2/element-ui 注入 default 末尾\n if (paginationNode) {\n if (!isVue2) {\n slotNodes.footer = () => paginationNode();\n } else {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n original ? original(s) : null,\n paginationNode()\n ];\n }\n }\n\n const node = h(Comp, compProps, slotNodes);\n const mainVNode = wrapWithTip(node);\n if (internalAuditState.value) {\n return h('div', { class: 'x-select-wrapper' }, [\n mainVNode,\n h(AuditFeedback, { state: internalAuditState.value })\n ]);\n }\n return mainVNode;\n };\n }\n});\n"],"names":["selectProps","modelValue","type","String","Number","Boolean","Object","Array","default","loose","multipleString","valueSeparator","disabledTip","disabledTipPlacement","useVirtual","optionSource","optionValueKey","optionLabelKey","customLabel","Function","returnObject","isShowPagination","paginationOption","pageSize","currentPage","pagerCount","total","isCached","isRadioEchoLabel","radioSelectValLabel","selectAllTxt","showSelectAll","textMode","audit","auditState","track","trackState","permission","selectEmits","SELF_PROP_KEYS","XSelect","defineComponent","name","inheritAttrs","props","emits","setup","attrs","emit","instance","getCurrentInstance","ElSelect","getUIComponent","ElSelectV2","Comp","isArray","length","_b","process","_a","env","NODE_ENV","_d","_c","innerValue","updateInner","emitOutside","useLooseModel","mergedSource","paginationNode","selectAllNode","onChangeWithCache","usePagination","wrapWithTip","useDisabledTip","forwarded","useForwardProps","elForwarded","useOmitForwardProps","auditMode","computed","autoAudit","useAuditInternal","enabled","value","config","field","comp","internalAuditState","state","trackMode","autoTrack","useTrackInternal","userOnVisibleChange","onVisibleChange","handleAuditVisibleChange","visible","cur","source","run","text","vm","proxy","raw","$attrs","sep","valueKey","labelKey","src","multiple","map","o","filter","join","values","split","s","trim","warnOnce","v","flat","it","options","push","matched","find","computeDisplayText","h","class","slots","useCompatSlots","listenerProps","useCompatListeners","modelBinding","onInput","_omitVc","restAttrs","__objRest","compProps","__spreadValues","onChange","val","isV2","slotNodes","flatten","arr","out","item","sub","label","disabled","keys","forEach","scope","renderSlot","renderOptionTree","globalThis","original","node","mainVNode","AuditFeedback"],"mappings":"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"}
1
+ {"version":3,"file":"index73.cjs","sources":["../../src/components/XSelect/index.tsx"],"sourcesContent":["import type { PropType } from 'vue-demi';\nimport type {\n AuditFieldConfig,\n AuditState,\n TrackFieldConfig,\n TrackState,\n PermissionFieldConfig\n} from '../../hooks/capability/types';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n isVue2\n} from 'vue-demi';\nimport { getUIComponent } from '../../adapters/ui-provider';\nimport { h } from '../../compat/h';\nimport {\n renderSlot,\n useCompatListeners,\n useCompatSlots\n} from '../../compat/slots';\nimport { useForwardProps, useOmitForwardProps } from '../../hooks';\nimport { useAuditInternal } from '../../hooks/capability/useAuditInternal';\n\nimport { useTrackInternal } from '../../hooks/capability/useTrackInternal';\nimport { useDisabledTip } from '../../hooks/useDisabledTip';\nimport { useLooseModel } from '../../hooks/useLooseModel';\nimport { warnOnce } from '../../utils/warnOnce';\nimport AuditFeedback from '../AuditFeedback/index';\nimport { renderOptionTree } from './render-options';\nimport { usePagination } from './usePagination';\nimport './style.scss';\n\n// ============ Props 声明 ============\nexport const selectProps = {\n // v-model:必须声明,否则 Vue3 下 modelValue 进入 attrs 而非 props,\n // 导致 useLooseModel 的 readExternal() 读取 props.modelValue 为 undefined,\n // innerValue 始终为 undefined,选中值后无法回显。\n // 参考 XInput/index.tsx 既定范式。\n modelValue: {\n type: [String, Number, Boolean, Object, Array] as PropType<any>,\n default: undefined\n },\n loose: { type: Boolean, default: false },\n multipleString: { type: Boolean, default: false },\n valueSeparator: { type: String, default: ',' },\n disabledTip: { type: String, default: '' },\n disabledTipPlacement: { type: String, default: 'top' },\n useVirtual: { type: Boolean, default: false },\n optionSource: { type: Array as PropType<any[]>, default: () => [] },\n optionValueKey: { type: String, default: 'value' },\n optionLabelKey: { type: String, default: 'label' },\n customLabel: {\n type: [Function, String] as PropType<\n ((option: Record<string, any>, index: number) => any) | string\n >,\n default: ''\n },\n returnObject: { type: Boolean, default: false },\n isShowPagination: { type: Boolean, default: false },\n paginationOption: {\n type: Object as PropType<{\n pageSize?: number;\n currentPage?: number;\n pagerCount?: number;\n total?: number;\n }>,\n default: () => ({ pageSize: 6, currentPage: 1, pagerCount: 5, total: 0 })\n },\n isCached: { type: Boolean, default: true },\n isRadioEchoLabel: { type: Boolean, default: true },\n radioSelectValLabel: { type: String, default: '' },\n selectAllTxt: { type: String, default: '' },\n showSelectAll: { type: Boolean, default: true },\n // 文本模式:true 时跳过 ElSelect 渲染,以 <span> 展示当前选中项 label,用于只读回显\n textMode: { type: Boolean, default: false },\n // ---- 审查能力 ----\n audit: {\n type: [Boolean, Object] as PropType<boolean | AuditFieldConfig | undefined>,\n default: undefined\n },\n auditState: {\n type: Object as PropType<AuditState | undefined>,\n default: undefined\n },\n // ---- 埋点能力 ----\n track: {\n type: [Boolean, Object] as PropType<boolean | TrackFieldConfig | undefined>,\n default: undefined\n },\n trackState: {\n type: Object as PropType<TrackState | undefined>,\n default: undefined\n },\n // ---- 权限能力 ----\n /** 权限配置:控制 disabled/hidden/readonly 效果 */\n permission: {\n type: [Boolean, Object] as PropType<\n boolean | PermissionFieldConfig | undefined\n >,\n default: undefined\n }\n} as const;\n\nexport const selectEmits = [\n 'update:modelValue',\n 'input',\n 'change',\n 'select-all',\n 'pagination-change',\n 'audit-trigger',\n 'track-event',\n 'permission-check'\n] as const;\n\n// SELF_PROP_KEYS 仅驼峰(Vue 模板编译已转驼峰;useOmitForwardProps 按字符串 delete)\nconst SELF_PROP_KEYS = [\n 'modelValue',\n 'loose',\n 'multipleString',\n 'valueSeparator',\n 'disabledTip',\n 'disabledTipPlacement',\n 'useVirtual',\n 'optionSource',\n 'optionValueKey',\n 'optionLabelKey',\n 'customLabel',\n 'returnObject',\n 'isShowPagination',\n 'paginationOption',\n 'isCached',\n 'isRadioEchoLabel',\n 'radioSelectValLabel',\n 'selectAllTxt',\n 'showSelectAll',\n 'textMode',\n 'audit',\n 'auditState',\n 'track',\n 'trackState',\n 'permission'\n] as const;\n\n/**\n * 计算 textMode 下的展示文本。\n * 优先级:returnObject > multipleString(string) > multiple(array) > 单值。\n * optionSource 为空时降级为 String(原始值),并 dev warn 一次。\n */\nfunction computeDisplayText(props: any, instance: any): string {\n // 双端读外部值(与 useLooseModel.readExternal 思路一致)\n const vm = instance?.proxy || instance;\n const raw = isVue2\n ? (vm?.$attrs?.value ?? (vm as any)?.value)\n : props.modelValue;\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw) && raw.length === 0) return '';\n\n const sep = props.valueSeparator || ',';\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const src: any[] = Array.isArray(props.optionSource)\n ? props.optionSource\n : [];\n\n // returnObject 分支:直接读对象上的 label\n if (props.returnObject) {\n if (props.multiple && Array.isArray(raw)) {\n return raw\n .map(o => (o && o[labelKey] != null ? String(o[labelKey]) : ''))\n .filter(Boolean)\n .join(sep);\n }\n return raw && typeof raw === 'object' ? String(raw[labelKey] ?? '') : '';\n }\n\n // 拆分为值数组\n let values: any[];\n if (props.multiple && props.multipleString && typeof raw === 'string') {\n values = raw\n .split(sep)\n .map((s: string) => s.trim())\n .filter((s: string) => s !== '');\n } else if (Array.isArray(raw)) {\n values = raw;\n } else {\n values = [raw];\n }\n\n // optionSource 为空(slot 模式)→ 降级为原始值 + dev warn 一次\n if (src.length === 0) {\n warnOnce(\n 'XSelect:textMode-noSource',\n '[XSelect] textMode=true 但 optionSource 为空,无法查找 label,已降级为原始值展示。推荐配合 optionSource 使用。'\n );\n return values.map(v => String(v ?? '')).join(sep);\n }\n\n // 扁平化 optionSource(展开 group 子项),与 render-options.tsx 的 group 识别一致\n const flat: any[] = [];\n for (const it of src) {\n if (it && Array.isArray(it.options)) flat.push(...it.options);\n else if (it) flat.push(it);\n }\n\n // 每个 value 查 label(loose=true 时宽松比较)\n const lookup = (v: any): string => {\n const matched = flat.find(o =>\n props.loose ? String(o?.[valueKey]) === String(v) : o?.[valueKey] === v\n );\n return matched && matched[labelKey] != null\n ? String(matched[labelKey])\n : String(v ?? '');\n };\n\n return values.map(lookup).join(sep);\n}\n\nexport default defineComponent({\n name: 'XSelect',\n inheritAttrs: false,\n props: selectProps,\n emits: [...selectEmits],\n setup(props, { attrs, emit }) {\n const instance = getCurrentInstance()!;\n const ElSelect = getUIComponent('Select');\n const ElSelectV2 = getUIComponent('SelectV2'); // Vue2 下 undefined\n\n // 组件选择:useVirtual 且存在 ElSelectV2 → SelectV2;否则回退 Select\n const Comp = (() => {\n if (!props.useVirtual) return ElSelect;\n if (ElSelectV2) {\n // ElSelectV2 要求 options 必填,若 optionSource 为空则降级\n if (\n !Array.isArray(props.optionSource) ||\n props.optionSource.length === 0\n ) {\n // 注意:不可用 import process from 'node:process'(webpack 4 运行时无法解析 node: 协议,得到 undefined)\n // 用 (globalThis as any).process?.env?.NODE_ENV 保证浏览器运行时安全(同 XButton 范式)\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual=true 但 optionSource 为空,已降级为 ElSelect'\n );\n }\n return ElSelect;\n }\n return ElSelectV2;\n }\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual 在 Vue2/element-ui 下降级为 ElSelect'\n );\n }\n return ElSelect;\n })();\n\n // —— 三大 hooks ——\n const { innerValue, updateInner, emitOutside } = useLooseModel(\n props,\n emit,\n instance\n );\n const { mergedSource, paginationNode, selectAllNode, onChangeWithCache } =\n usePagination(props, emit, instance, updateInner);\n const wrapWithTip = useDisabledTip(props);\n\n // 属性隔离:先全量 forward,再 delete 自有 prop\n const forwarded = useForwardProps(props);\n const elForwarded = useOmitForwardProps(forwarded, SELF_PROP_KEYS);\n\n // ---- 审查能力 ----\n const auditMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.auditState) return 'controlled';\n if (typeof props.audit === 'object' && props.audit !== null)\n return 'auto';\n return 'off';\n });\n\n const autoAudit = useAuditInternal({\n enabled: () => auditMode.value === 'auto',\n config: () =>\n typeof props.audit === 'object'\n ? (props.audit as AuditFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const internalAuditState = computed<AuditState | null>(() => {\n if (auditMode.value === 'controlled') return props.auditState!;\n if (auditMode.value === 'auto') return autoAudit.state.value;\n return null;\n });\n\n // ---- 埋点能力 ----\n const trackMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.trackState) return 'controlled';\n if (typeof props.track === 'object' && props.track !== null)\n return 'auto';\n return 'off';\n });\n\n const autoTrack = useTrackInternal({\n enabled: () => trackMode.value === 'auto',\n config: () =>\n typeof props.track === 'object'\n ? (props.track as TrackFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const userOnVisibleChange = (attrs as any).onVisibleChange;\n const handleAuditVisibleChange = (visible: boolean) => {\n if (typeof userOnVisibleChange === 'function')\n userOnVisibleChange(visible);\n if (\n !visible &&\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n const cur = innerValue.value;\n emit('audit-trigger', cur, { source: 'visible-change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (!visible && props.track !== undefined && props.track !== false) {\n emit('track-event', 'visible-change', {\n value: innerValue.value,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n };\n\n return () => {\n // 文本模式:完全跳过 ElSelect 渲染,仅展示当前选中项的 label。\n // 优先级最高,覆盖 useVirtual / 分页 / 全选 / 禁用提示。\n if (props.textMode) {\n const text = computeDisplayText(props, instance);\n return h('span', { class: 'x-select__text' }, [text]);\n }\n\n const slots = useCompatSlots(instance);\n const listenerProps = useCompatListeners(instance);\n\n // v-model 双端分流(参见 XInput/index.tsx 既定范式)\n const modelBinding = isVue2\n ? {\n value: innerValue.value,\n onInput: (v: any) => emitOutside(updateInner(v))\n }\n : {\n modelValue: innerValue.value,\n 'onUpdate:modelValue': (v: any) => emitOutside(updateInner(v))\n };\n\n // 合并顺序(不可变更):透传 props < attrs < listeners < modelBinding < 自有覆盖\n const { onVisibleChange: _omitVc, ...restAttrs } = attrs as any;\n const compProps: Record<string, any> = {\n ...elForwarded.value,\n ...restAttrs,\n ...listenerProps,\n ...modelBinding,\n onChange: (val: any) => {\n onChangeWithCache(val);\n if (\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n emit('audit-trigger', val, { source: 'change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (props.track !== undefined && props.track !== false) {\n emit('track-event', 'change', {\n value: val,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n },\n onVisibleChange: handleAuditVisibleChange\n };\n\n // 子节点策略:\n // useVirtual + ElSelectV2:通过 options prop 传扁平数组,不走 slot\n // 否则 optionSource 非空:数据驱动 slot.default\n // 否则:透传默认 slot\n const isV2 = props.useVirtual && ElSelectV2 && Comp === ElSelectV2;\n\n const slotNodes: Record<string, any> = {};\n\n if (isV2) {\n // ElSelectV2 需要扁平 { value, label, disabled } 数组,不支持 group 嵌套\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const flatten = (arr: any[]): any[] => {\n const out: any[] = [];\n for (const item of arr || []) {\n if (item && Array.isArray(item.options)) {\n out.push(\n ...item.options.map((sub: any) => ({\n value: sub[valueKey],\n label: sub[labelKey],\n disabled: !!sub.disabled\n }))\n );\n } else if (item) {\n out.push({\n value: item[valueKey],\n label: item[labelKey],\n disabled: !!item.disabled\n });\n }\n }\n return out;\n };\n compProps.options = flatten(mergedSource.value);\n // ElSelectV2 仍可能用到其他 slot(如 empty),透传\n Object.keys(slots).forEach(name => {\n if (name !== 'default') {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n }\n });\n } else if (props.optionSource && props.optionSource.length) {\n slotNodes.default = () => renderOptionTree(mergedSource.value, props);\n if (\n slots.default &&\n (globalThis as any).process?.env?.NODE_ENV !== 'production'\n ) {\n console.warn(\n '[XSelect] optionSource 与默认 slot 同时存在,已忽略 slot'\n );\n }\n } else {\n Object.keys(slots).forEach(name => {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n });\n }\n\n // 全选 checkbox:multiple && showSelectAll && !useVirtual && !isShowPagination\n if (selectAllNode) {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n selectAllNode(),\n original ? original(s) : null\n ];\n }\n\n // 分页节点:Vue3/element-plus 用 footer slot;Vue2/element-ui 注入 default 末尾\n if (paginationNode) {\n if (!isVue2) {\n slotNodes.footer = () => paginationNode();\n } else {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n original ? original(s) : null,\n paginationNode()\n ];\n }\n }\n\n const node = h(Comp, compProps, slotNodes);\n const mainVNode = wrapWithTip(node);\n if (internalAuditState.value) {\n return h('div', { class: 'x-select-wrapper' }, [\n mainVNode,\n h(AuditFeedback, { state: internalAuditState.value })\n ]);\n }\n return mainVNode;\n };\n }\n});\n"],"names":["selectProps","modelValue","type","String","Number","Boolean","Object","Array","default","loose","multipleString","valueSeparator","disabledTip","disabledTipPlacement","useVirtual","optionSource","optionValueKey","optionLabelKey","customLabel","Function","returnObject","isShowPagination","paginationOption","pageSize","currentPage","pagerCount","total","isCached","isRadioEchoLabel","radioSelectValLabel","selectAllTxt","showSelectAll","textMode","audit","auditState","track","trackState","permission","selectEmits","SELF_PROP_KEYS","XSelect","defineComponent","name","inheritAttrs","props","emits","setup","attrs","emit","instance","getCurrentInstance","ElSelect","getUIComponent","ElSelectV2","Comp","isArray","length","_b","process","_a","env","NODE_ENV","_d","_c","innerValue","updateInner","emitOutside","useLooseModel","mergedSource","paginationNode","selectAllNode","onChangeWithCache","usePagination","wrapWithTip","useDisabledTip","forwarded","useForwardProps","elForwarded","useOmitForwardProps","auditMode","computed","autoAudit","useAuditInternal","enabled","value","config","field","comp","internalAuditState","state","trackMode","autoTrack","useTrackInternal","userOnVisibleChange","onVisibleChange","handleAuditVisibleChange","visible","cur","source","run","text","vm","proxy","raw","$attrs","sep","valueKey","labelKey","src","multiple","map","o","filter","join","values","split","s","trim","warnOnce","v","flat","it","options","push","matched","find","computeDisplayText","h","class","slots","useCompatSlots","listenerProps","useCompatListeners","modelBinding","onInput","_omitVc","restAttrs","__objRest","compProps","__spreadValues","onChange","val","isV2","slotNodes","flatten","arr","out","item","sub","label","disabled","keys","forEach","scope","renderSlot","renderOptionTree","globalThis","original","node","mainVNode","AuditFeedback"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index73.mjs","sources":["../../src/components/XSelect/index.tsx"],"sourcesContent":["import type { PropType } from 'vue-demi';\nimport type {\n AuditFieldConfig,\n AuditState,\n TrackFieldConfig,\n TrackState,\n PermissionFieldConfig\n} from '../../hooks/capability/types';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n isVue2\n} from 'vue-demi';\nimport { getUIComponent } from '../../adapters/ui-provider';\nimport { h } from '../../compat/h';\nimport {\n renderSlot,\n useCompatListeners,\n useCompatSlots\n} from '../../compat/slots';\nimport { useForwardProps, useOmitForwardProps } from '../../hooks';\nimport { useAuditInternal } from '../../hooks/capability/useAuditInternal';\n\nimport { useTrackInternal } from '../../hooks/capability/useTrackInternal';\nimport { useDisabledTip } from '../../hooks/useDisabledTip';\nimport { useLooseModel } from '../../hooks/useLooseModel';\nimport { warnOnce } from '../../utils/warnOnce';\nimport AuditFeedback from '../AuditFeedback/index';\nimport { renderOptionTree } from './render-options';\nimport { usePagination } from './usePagination';\nimport './style.scss';\n\n// ============ Props 声明 ============\nexport const selectProps = {\n // v-model:必须声明,否则 Vue3 下 modelValue 进入 attrs 而非 props,\n // 导致 useLooseModel 的 readExternal() 读取 props.modelValue 为 undefined,\n // innerValue 始终为 undefined,选中值后无法回显。\n // 参考 XInput/index.tsx 既定范式。\n modelValue: {\n type: [String, Number, Boolean, Object, Array] as PropType<any>,\n default: undefined\n },\n loose: { type: Boolean, default: false },\n multipleString: { type: Boolean, default: false },\n valueSeparator: { type: String, default: ',' },\n disabledTip: { type: String, default: '' },\n disabledTipPlacement: { type: String, default: 'top' },\n useVirtual: { type: Boolean, default: false },\n optionSource: { type: Array as PropType<any[]>, default: () => [] },\n optionValueKey: { type: String, default: 'value' },\n optionLabelKey: { type: String, default: 'label' },\n customLabel: {\n type: [Function, String] as PropType<\n ((option: Record<string, any>, index: number) => any) | string\n >,\n default: ''\n },\n returnObject: { type: Boolean, default: false },\n isShowPagination: { type: Boolean, default: false },\n paginationOption: {\n type: Object as PropType<{\n pageSize?: number;\n currentPage?: number;\n pagerCount?: number;\n total?: number;\n }>,\n default: () => ({ pageSize: 6, currentPage: 1, pagerCount: 5, total: 0 })\n },\n isCached: { type: Boolean, default: true },\n isRadioEchoLabel: { type: Boolean, default: true },\n radioSelectValLabel: { type: String, default: '' },\n selectAllTxt: { type: String, default: '' },\n showSelectAll: { type: Boolean, default: true },\n // 文本模式:true 时跳过 ElSelect 渲染,以 <span> 展示当前选中项 label,用于只读回显\n textMode: { type: Boolean, default: false },\n // ---- 审查能力 ----\n audit: {\n type: [Boolean, Object] as PropType<boolean | AuditFieldConfig | undefined>,\n default: undefined\n },\n auditState: {\n type: Object as PropType<AuditState | undefined>,\n default: undefined\n },\n // ---- 埋点能力 ----\n track: {\n type: [Boolean, Object] as PropType<boolean | TrackFieldConfig | undefined>,\n default: undefined\n },\n trackState: {\n type: Object as PropType<TrackState | undefined>,\n default: undefined\n },\n // ---- 权限能力 ----\n /** 权限配置:控制 disabled/hidden/readonly 效果 */\n permission: {\n type: [Boolean, Object] as PropType<\n boolean | PermissionFieldConfig | undefined\n >,\n default: undefined\n }\n} as const;\n\nexport const selectEmits = [\n 'update:modelValue',\n 'input',\n 'change',\n 'select-all',\n 'pagination-change',\n 'audit-trigger',\n 'track-event',\n 'permission-check'\n] as const;\n\n// SELF_PROP_KEYS 仅驼峰(Vue 模板编译已转驼峰;useOmitForwardProps 按字符串 delete)\nconst SELF_PROP_KEYS = [\n 'modelValue',\n 'loose',\n 'multipleString',\n 'valueSeparator',\n 'disabledTip',\n 'disabledTipPlacement',\n 'useVirtual',\n 'optionSource',\n 'optionValueKey',\n 'optionLabelKey',\n 'customLabel',\n 'returnObject',\n 'isShowPagination',\n 'paginationOption',\n 'isCached',\n 'isRadioEchoLabel',\n 'radioSelectValLabel',\n 'selectAllTxt',\n 'showSelectAll',\n 'textMode',\n 'audit',\n 'auditState',\n 'track',\n 'trackState',\n 'permission'\n] as const;\n\n/**\n * 计算 textMode 下的展示文本。\n * 优先级:returnObject > multipleString(string) > multiple(array) > 单值。\n * optionSource 为空时降级为 String(原始值),并 dev warn 一次。\n */\nfunction computeDisplayText(props: any, instance: any): string {\n // 双端读外部值(与 useLooseModel.readExternal 思路一致)\n const vm = instance?.proxy || instance;\n const raw = isVue2\n ? (vm?.$attrs?.value ?? (vm as any)?.value)\n : props.modelValue;\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw) && raw.length === 0) return '';\n\n const sep = props.valueSeparator || ',';\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const src: any[] = Array.isArray(props.optionSource)\n ? props.optionSource\n : [];\n\n // returnObject 分支:直接读对象上的 label\n if (props.returnObject) {\n if (props.multiple && Array.isArray(raw)) {\n return raw\n .map(o => (o && o[labelKey] != null ? String(o[labelKey]) : ''))\n .filter(Boolean)\n .join(sep);\n }\n return raw && typeof raw === 'object' ? String(raw[labelKey] ?? '') : '';\n }\n\n // 拆分为值数组\n let values: any[];\n if (props.multiple && props.multipleString && typeof raw === 'string') {\n values = raw\n .split(sep)\n .map((s: string) => s.trim())\n .filter((s: string) => s !== '');\n } else if (Array.isArray(raw)) {\n values = raw;\n } else {\n values = [raw];\n }\n\n // optionSource 为空(slot 模式)→ 降级为原始值 + dev warn 一次\n if (src.length === 0) {\n warnOnce(\n 'XSelect:textMode-noSource',\n '[XSelect] textMode=true 但 optionSource 为空,无法查找 label,已降级为原始值展示。推荐配合 optionSource 使用。'\n );\n return values.map(v => String(v ?? '')).join(sep);\n }\n\n // 扁平化 optionSource(展开 group 子项),与 render-options.tsx 的 group 识别一致\n const flat: any[] = [];\n for (const it of src) {\n if (it && Array.isArray(it.options)) flat.push(...it.options);\n else if (it) flat.push(it);\n }\n\n // 每个 value 查 label(loose=true 时宽松比较)\n const lookup = (v: any): string => {\n const matched = flat.find(o =>\n props.loose ? String(o?.[valueKey]) === String(v) : o?.[valueKey] === v\n );\n return matched && matched[labelKey] != null\n ? String(matched[labelKey])\n : String(v ?? '');\n };\n\n return values.map(lookup).join(sep);\n}\n\nexport default defineComponent({\n name: 'XSelect',\n inheritAttrs: false,\n props: selectProps,\n emits: [...selectEmits],\n setup(props, { attrs, emit }) {\n const instance = getCurrentInstance()!;\n const ElSelect = getUIComponent('Select');\n const ElSelectV2 = getUIComponent('SelectV2'); // Vue2 下 undefined\n\n // 组件选择:useVirtual 且存在 ElSelectV2 → SelectV2;否则回退 Select\n const Comp = (() => {\n if (!props.useVirtual) return ElSelect;\n if (ElSelectV2) {\n // ElSelectV2 要求 options 必填,若 optionSource 为空则降级\n if (\n !Array.isArray(props.optionSource) ||\n props.optionSource.length === 0\n ) {\n // 注意:不可用 import process from 'node:process'(webpack 4 运行时无法解析 node: 协议,得到 undefined)\n // 用 (globalThis as any).process?.env?.NODE_ENV 保证浏览器运行时安全(同 XButton 范式)\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual=true 但 optionSource 为空,已降级为 ElSelect'\n );\n }\n return ElSelect;\n }\n return ElSelectV2;\n }\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual 在 Vue2/element-ui 下降级为 ElSelect'\n );\n }\n return ElSelect;\n })();\n\n // —— 三大 hooks ——\n const { innerValue, updateInner, emitOutside } = useLooseModel(\n props,\n emit,\n instance\n );\n const { mergedSource, paginationNode, selectAllNode, onChangeWithCache } =\n usePagination(props, emit, instance, updateInner);\n const wrapWithTip = useDisabledTip(props);\n\n // 属性隔离:先全量 forward,再 delete 自有 prop\n const forwarded = useForwardProps(props);\n const elForwarded = useOmitForwardProps(forwarded, SELF_PROP_KEYS);\n\n // ---- 审查能力 ----\n const auditMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.auditState) return 'controlled';\n if (typeof props.audit === 'object' && props.audit !== null)\n return 'auto';\n return 'off';\n });\n\n const autoAudit = useAuditInternal({\n enabled: () => auditMode.value === 'auto',\n config: () =>\n typeof props.audit === 'object'\n ? (props.audit as AuditFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const internalAuditState = computed<AuditState | null>(() => {\n if (auditMode.value === 'controlled') return props.auditState!;\n if (auditMode.value === 'auto') return autoAudit.state.value;\n return null;\n });\n\n // ---- 埋点能力 ----\n const trackMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.trackState) return 'controlled';\n if (typeof props.track === 'object' && props.track !== null)\n return 'auto';\n return 'off';\n });\n\n const autoTrack = useTrackInternal({\n enabled: () => trackMode.value === 'auto',\n config: () =>\n typeof props.track === 'object'\n ? (props.track as TrackFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const userOnVisibleChange = (attrs as any).onVisibleChange;\n const handleAuditVisibleChange = (visible: boolean) => {\n if (typeof userOnVisibleChange === 'function')\n userOnVisibleChange(visible);\n if (\n !visible &&\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n const cur = innerValue.value;\n emit('audit-trigger', cur, { source: 'visible-change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (!visible && props.track !== undefined && props.track !== false) {\n emit('track-event', 'visible-change', {\n value: innerValue.value,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n };\n\n return () => {\n // 文本模式:完全跳过 ElSelect 渲染,仅展示当前选中项的 label。\n // 优先级最高,覆盖 useVirtual / 分页 / 全选 / 禁用提示。\n if (props.textMode) {\n const text = computeDisplayText(props, instance);\n return h('span', { class: 'x-select__text' }, [text]);\n }\n\n const slots = useCompatSlots(instance);\n const listenerProps = useCompatListeners(instance);\n\n // v-model 双端分流(参见 XInput/index.tsx 既定范式)\n const modelBinding = isVue2\n ? {\n value: innerValue.value,\n onInput: (v: any) => emitOutside(updateInner(v))\n }\n : {\n modelValue: innerValue.value,\n 'onUpdate:modelValue': (v: any) => emitOutside(updateInner(v))\n };\n\n // 合并顺序(不可变更):透传 props < attrs < listeners < modelBinding < 自有覆盖\n const { onVisibleChange: _omitVc, ...restAttrs } = attrs as any;\n const compProps: Record<string, any> = {\n ...elForwarded.value,\n ...restAttrs,\n ...listenerProps,\n ...modelBinding,\n onChange: (val: any) => {\n onChangeWithCache(val);\n if (\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n emit('audit-trigger', val, { source: 'change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (props.track !== undefined && props.track !== false) {\n emit('track-event', 'change', {\n value: val,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n },\n onVisibleChange: handleAuditVisibleChange\n };\n\n // 子节点策略:\n // useVirtual + ElSelectV2:通过 options prop 传扁平数组,不走 slot\n // 否则 optionSource 非空:数据驱动 slot.default\n // 否则:透传默认 slot\n const isV2 = props.useVirtual && ElSelectV2 && Comp === ElSelectV2;\n\n const slotNodes: Record<string, any> = {};\n\n if (isV2) {\n // ElSelectV2 需要扁平 { value, label, disabled } 数组,不支持 group 嵌套\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const flatten = (arr: any[]): any[] => {\n const out: any[] = [];\n for (const item of arr || []) {\n if (item && Array.isArray(item.options)) {\n out.push(\n ...item.options.map((sub: any) => ({\n value: sub[valueKey],\n label: sub[labelKey],\n disabled: !!sub.disabled\n }))\n );\n } else if (item) {\n out.push({\n value: item[valueKey],\n label: item[labelKey],\n disabled: !!item.disabled\n });\n }\n }\n return out;\n };\n compProps.options = flatten(mergedSource.value);\n // ElSelectV2 仍可能用到其他 slot(如 empty),透传\n Object.keys(slots).forEach(name => {\n if (name !== 'default') {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n }\n });\n } else if (props.optionSource && props.optionSource.length) {\n slotNodes.default = () => renderOptionTree(mergedSource.value, props);\n if (slots.default && (globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] optionSource 与默认 slot 同时存在,已忽略 slot'\n );\n }\n } else {\n Object.keys(slots).forEach(name => {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n });\n }\n\n // 全选 checkbox:multiple && showSelectAll && !useVirtual && !isShowPagination\n if (selectAllNode) {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n selectAllNode(),\n original ? original(s) : null\n ];\n }\n\n // 分页节点:Vue3/element-plus 用 footer slot;Vue2/element-ui 注入 default 末尾\n if (paginationNode) {\n if (!isVue2) {\n slotNodes.footer = () => paginationNode();\n } else {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n original ? original(s) : null,\n paginationNode()\n ];\n }\n }\n\n const node = h(Comp, compProps, slotNodes);\n const mainVNode = wrapWithTip(node);\n if (internalAuditState.value) {\n return h('div', { class: 'x-select-wrapper' }, [\n mainVNode,\n h(AuditFeedback, { state: internalAuditState.value })\n ]);\n }\n return mainVNode;\n };\n }\n});\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index73.mjs","sources":["../../src/components/XSelect/index.tsx"],"sourcesContent":["import type { PropType } from 'vue-demi';\nimport type {\n AuditFieldConfig,\n AuditState,\n TrackFieldConfig,\n TrackState,\n PermissionFieldConfig\n} from '../../hooks/capability/types';\nimport {\n computed,\n defineComponent,\n getCurrentInstance,\n isVue2\n} from 'vue-demi';\nimport { getUIComponent } from '../../adapters/ui-provider';\nimport { h } from '../../compat/h';\nimport {\n renderSlot,\n useCompatListeners,\n useCompatSlots\n} from '../../compat/slots';\nimport { useForwardProps, useOmitForwardProps } from '../../hooks';\nimport { useAuditInternal } from '../../hooks/capability/useAuditInternal';\n\nimport { useTrackInternal } from '../../hooks/capability/useTrackInternal';\nimport { useDisabledTip } from '../../hooks/useDisabledTip';\nimport { useLooseModel } from '../../hooks/useLooseModel';\nimport { warnOnce } from '../../utils/warnOnce';\nimport AuditFeedback from '../AuditFeedback/index';\nimport { renderOptionTree } from './render-options';\nimport { usePagination } from './usePagination';\nimport './style.scss';\n\n// ============ Props 声明 ============\nexport const selectProps = {\n // v-model:必须声明,否则 Vue3 下 modelValue 进入 attrs 而非 props,\n // 导致 useLooseModel 的 readExternal() 读取 props.modelValue 为 undefined,\n // innerValue 始终为 undefined,选中值后无法回显。\n // 参考 XInput/index.tsx 既定范式。\n modelValue: {\n type: [String, Number, Boolean, Object, Array] as PropType<any>,\n default: undefined\n },\n loose: { type: Boolean, default: false },\n multipleString: { type: Boolean, default: false },\n valueSeparator: { type: String, default: ',' },\n disabledTip: { type: String, default: '' },\n disabledTipPlacement: { type: String, default: 'top' },\n useVirtual: { type: Boolean, default: false },\n optionSource: { type: Array as PropType<any[]>, default: () => [] },\n optionValueKey: { type: String, default: 'value' },\n optionLabelKey: { type: String, default: 'label' },\n customLabel: {\n type: [Function, String] as PropType<\n ((option: Record<string, any>, index: number) => any) | string\n >,\n default: ''\n },\n returnObject: { type: Boolean, default: false },\n isShowPagination: { type: Boolean, default: false },\n paginationOption: {\n type: Object as PropType<{\n pageSize?: number;\n currentPage?: number;\n pagerCount?: number;\n total?: number;\n }>,\n default: () => ({ pageSize: 6, currentPage: 1, pagerCount: 5, total: 0 })\n },\n isCached: { type: Boolean, default: true },\n isRadioEchoLabel: { type: Boolean, default: true },\n radioSelectValLabel: { type: String, default: '' },\n selectAllTxt: { type: String, default: '' },\n showSelectAll: { type: Boolean, default: true },\n // 文本模式:true 时跳过 ElSelect 渲染,以 <span> 展示当前选中项 label,用于只读回显\n textMode: { type: Boolean, default: false },\n // ---- 审查能力 ----\n audit: {\n type: [Boolean, Object] as PropType<boolean | AuditFieldConfig | undefined>,\n default: undefined\n },\n auditState: {\n type: Object as PropType<AuditState | undefined>,\n default: undefined\n },\n // ---- 埋点能力 ----\n track: {\n type: [Boolean, Object] as PropType<boolean | TrackFieldConfig | undefined>,\n default: undefined\n },\n trackState: {\n type: Object as PropType<TrackState | undefined>,\n default: undefined\n },\n // ---- 权限能力 ----\n /** 权限配置:控制 disabled/hidden/readonly 效果 */\n permission: {\n type: [Boolean, Object] as PropType<\n boolean | PermissionFieldConfig | undefined\n >,\n default: undefined\n }\n} as const;\n\nexport const selectEmits = [\n 'update:modelValue',\n 'input',\n 'change',\n 'select-all',\n 'pagination-change',\n 'audit-trigger',\n 'track-event',\n 'permission-check'\n] as const;\n\n// SELF_PROP_KEYS 仅驼峰(Vue 模板编译已转驼峰;useOmitForwardProps 按字符串 delete)\nconst SELF_PROP_KEYS = [\n 'modelValue',\n 'loose',\n 'multipleString',\n 'valueSeparator',\n 'disabledTip',\n 'disabledTipPlacement',\n 'useVirtual',\n 'optionSource',\n 'optionValueKey',\n 'optionLabelKey',\n 'customLabel',\n 'returnObject',\n 'isShowPagination',\n 'paginationOption',\n 'isCached',\n 'isRadioEchoLabel',\n 'radioSelectValLabel',\n 'selectAllTxt',\n 'showSelectAll',\n 'textMode',\n 'audit',\n 'auditState',\n 'track',\n 'trackState',\n 'permission'\n] as const;\n\n/**\n * 计算 textMode 下的展示文本。\n * 优先级:returnObject > multipleString(string) > multiple(array) > 单值。\n * optionSource 为空时降级为 String(原始值),并 dev warn 一次。\n */\nfunction computeDisplayText(props: any, instance: any): string {\n // 双端读外部值(与 useLooseModel.readExternal 思路一致)\n const vm = instance?.proxy || instance;\n const raw = isVue2\n ? (vm?.$attrs?.value ?? (vm as any)?.value)\n : props.modelValue;\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw) && raw.length === 0) return '';\n\n const sep = props.valueSeparator || ',';\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const src: any[] = Array.isArray(props.optionSource)\n ? props.optionSource\n : [];\n\n // returnObject 分支:直接读对象上的 label\n if (props.returnObject) {\n if (props.multiple && Array.isArray(raw)) {\n return raw\n .map(o => (o && o[labelKey] != null ? String(o[labelKey]) : ''))\n .filter(Boolean)\n .join(sep);\n }\n return raw && typeof raw === 'object' ? String(raw[labelKey] ?? '') : '';\n }\n\n // 拆分为值数组\n let values: any[];\n if (props.multiple && props.multipleString && typeof raw === 'string') {\n values = raw\n .split(sep)\n .map((s: string) => s.trim())\n .filter((s: string) => s !== '');\n } else if (Array.isArray(raw)) {\n values = raw;\n } else {\n values = [raw];\n }\n\n // optionSource 为空(slot 模式)→ 降级为原始值 + dev warn 一次\n if (src.length === 0) {\n warnOnce(\n 'XSelect:textMode-noSource',\n '[XSelect] textMode=true 但 optionSource 为空,无法查找 label,已降级为原始值展示。推荐配合 optionSource 使用。'\n );\n return values.map(v => String(v ?? '')).join(sep);\n }\n\n // 扁平化 optionSource(展开 group 子项),与 render-options.tsx 的 group 识别一致\n const flat: any[] = [];\n for (const it of src) {\n if (it && Array.isArray(it.options)) flat.push(...it.options);\n else if (it) flat.push(it);\n }\n\n // 每个 value 查 label(loose=true 时宽松比较)\n const lookup = (v: any): string => {\n const matched = flat.find(o =>\n props.loose ? String(o?.[valueKey]) === String(v) : o?.[valueKey] === v\n );\n return matched && matched[labelKey] != null\n ? String(matched[labelKey])\n : String(v ?? '');\n };\n\n return values.map(lookup).join(sep);\n}\n\nexport default defineComponent({\n name: 'XSelect',\n inheritAttrs: false,\n props: selectProps,\n emits: [...selectEmits],\n setup(props, { attrs, emit }) {\n const instance = getCurrentInstance()!;\n const ElSelect = getUIComponent('Select');\n const ElSelectV2 = getUIComponent('SelectV2'); // Vue2 下 undefined\n\n // 组件选择:useVirtual 且存在 ElSelectV2 → SelectV2;否则回退 Select\n const Comp = (() => {\n if (!props.useVirtual) return ElSelect;\n if (ElSelectV2) {\n // ElSelectV2 要求 options 必填,若 optionSource 为空则降级\n if (\n !Array.isArray(props.optionSource) ||\n props.optionSource.length === 0\n ) {\n // 注意:不可用 import process from 'node:process'(webpack 4 运行时无法解析 node: 协议,得到 undefined)\n // 用 (globalThis as any).process?.env?.NODE_ENV 保证浏览器运行时安全(同 XButton 范式)\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual=true 但 optionSource 为空,已降级为 ElSelect'\n );\n }\n return ElSelect;\n }\n return ElSelectV2;\n }\n if ((globalThis as any).process?.env?.NODE_ENV !== 'production') {\n console.warn(\n '[XSelect] useVirtual 在 Vue2/element-ui 下降级为 ElSelect'\n );\n }\n return ElSelect;\n })();\n\n // —— 三大 hooks ——\n const { innerValue, updateInner, emitOutside } = useLooseModel(\n props,\n emit,\n instance\n );\n const { mergedSource, paginationNode, selectAllNode, onChangeWithCache } =\n usePagination(props, emit, instance, updateInner);\n const wrapWithTip = useDisabledTip(props);\n\n // 属性隔离:先全量 forward,再 delete 自有 prop\n const forwarded = useForwardProps(props);\n const elForwarded = useOmitForwardProps(forwarded, SELF_PROP_KEYS);\n\n // ---- 审查能力 ----\n const auditMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.auditState) return 'controlled';\n if (typeof props.audit === 'object' && props.audit !== null)\n return 'auto';\n return 'off';\n });\n\n const autoAudit = useAuditInternal({\n enabled: () => auditMode.value === 'auto',\n config: () =>\n typeof props.audit === 'object'\n ? (props.audit as AuditFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const internalAuditState = computed<AuditState | null>(() => {\n if (auditMode.value === 'controlled') return props.auditState!;\n if (auditMode.value === 'auto') return autoAudit.state.value;\n return null;\n });\n\n // ---- 埋点能力 ----\n const trackMode = computed<'controlled' | 'auto' | 'off'>(() => {\n if (props.trackState) return 'controlled';\n if (typeof props.track === 'object' && props.track !== null)\n return 'auto';\n return 'off';\n });\n\n const autoTrack = useTrackInternal({\n enabled: () => trackMode.value === 'auto',\n config: () =>\n typeof props.track === 'object'\n ? (props.track as TrackFieldConfig)\n : null,\n value: () => innerValue.value,\n field: () => (attrs as any).name ?? 'unknown',\n comp: 'x-select'\n });\n\n const userOnVisibleChange = (attrs as any).onVisibleChange;\n const handleAuditVisibleChange = (visible: boolean) => {\n if (typeof userOnVisibleChange === 'function')\n userOnVisibleChange(visible);\n if (\n !visible &&\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n const cur = innerValue.value;\n emit('audit-trigger', cur, { source: 'visible-change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (!visible && props.track !== undefined && props.track !== false) {\n emit('track-event', 'visible-change', {\n value: innerValue.value,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n };\n\n return () => {\n // 文本模式:完全跳过 ElSelect 渲染,仅展示当前选中项的 label。\n // 优先级最高,覆盖 useVirtual / 分页 / 全选 / 禁用提示。\n if (props.textMode) {\n const text = computeDisplayText(props, instance);\n return h('span', { class: 'x-select__text' }, [text]);\n }\n\n const slots = useCompatSlots(instance);\n const listenerProps = useCompatListeners(instance);\n\n // v-model 双端分流(参见 XInput/index.tsx 既定范式)\n const modelBinding = isVue2\n ? {\n value: innerValue.value,\n onInput: (v: any) => emitOutside(updateInner(v))\n }\n : {\n modelValue: innerValue.value,\n 'onUpdate:modelValue': (v: any) => emitOutside(updateInner(v))\n };\n\n // 合并顺序(不可变更):透传 props < attrs < listeners < modelBinding < 自有覆盖\n const { onVisibleChange: _omitVc, ...restAttrs } = attrs as any;\n const compProps: Record<string, any> = {\n ...elForwarded.value,\n ...restAttrs,\n ...listenerProps,\n ...modelBinding,\n onChange: (val: any) => {\n onChangeWithCache(val);\n if (\n !props.textMode &&\n props.audit !== undefined &&\n props.audit !== false\n ) {\n emit('audit-trigger', val, { source: 'change' as const });\n if (auditMode.value === 'auto') autoAudit.run();\n }\n // 埋点触发\n if (props.track !== undefined && props.track !== false) {\n emit('track-event', 'change', {\n value: val,\n field: (attrs as any).name ?? 'unknown'\n });\n if (trackMode.value === 'auto') autoTrack.run();\n }\n },\n onVisibleChange: handleAuditVisibleChange\n };\n\n // 子节点策略:\n // useVirtual + ElSelectV2:通过 options prop 传扁平数组,不走 slot\n // 否则 optionSource 非空:数据驱动 slot.default\n // 否则:透传默认 slot\n const isV2 = props.useVirtual && ElSelectV2 && Comp === ElSelectV2;\n\n const slotNodes: Record<string, any> = {};\n\n if (isV2) {\n // ElSelectV2 需要扁平 { value, label, disabled } 数组,不支持 group 嵌套\n const valueKey = props.optionValueKey || 'value';\n const labelKey = props.optionLabelKey || 'label';\n const flatten = (arr: any[]): any[] => {\n const out: any[] = [];\n for (const item of arr || []) {\n if (item && Array.isArray(item.options)) {\n out.push(\n ...item.options.map((sub: any) => ({\n value: sub[valueKey],\n label: sub[labelKey],\n disabled: !!sub.disabled\n }))\n );\n } else if (item) {\n out.push({\n value: item[valueKey],\n label: item[labelKey],\n disabled: !!item.disabled\n });\n }\n }\n return out;\n };\n compProps.options = flatten(mergedSource.value);\n // ElSelectV2 仍可能用到其他 slot(如 empty),透传\n Object.keys(slots).forEach(name => {\n if (name !== 'default') {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n }\n });\n } else if (props.optionSource && props.optionSource.length) {\n slotNodes.default = () => renderOptionTree(mergedSource.value, props);\n if (\n slots.default &&\n (globalThis as any).process?.env?.NODE_ENV !== 'production'\n ) {\n console.warn(\n '[XSelect] optionSource 与默认 slot 同时存在,已忽略 slot'\n );\n }\n } else {\n Object.keys(slots).forEach(name => {\n slotNodes[name] = (scope: any) => renderSlot(slots, name, scope);\n });\n }\n\n // 全选 checkbox:multiple && showSelectAll && !useVirtual && !isShowPagination\n if (selectAllNode) {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n selectAllNode(),\n original ? original(s) : null\n ];\n }\n\n // 分页节点:Vue3/element-plus 用 footer slot;Vue2/element-ui 注入 default 末尾\n if (paginationNode) {\n if (!isVue2) {\n slotNodes.footer = () => paginationNode();\n } else {\n const original = slotNodes.default;\n slotNodes.default = (s: any) => [\n original ? original(s) : null,\n paginationNode()\n ];\n }\n }\n\n const node = h(Comp, compProps, slotNodes);\n const mainVNode = wrapWithTip(node);\n if (internalAuditState.value) {\n return h('div', { class: 'x-select-wrapper' }, [\n mainVNode,\n h(AuditFeedback, { state: internalAuditState.value })\n ]);\n }\n return mainVNode;\n };\n }\n});\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BO,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,YAAY;AAAA,IACV,MAAM,CAAC,QAAQ,QAAQ,SAAS,QAAQ,KAAK;AAAA,IAC7C,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,EACjC,gBAAgB,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,EAC1C,gBAAgB,EAAE,MAAM,QAAQ,SAAS,IAAA;AAAA,EACzC,aAAa,EAAE,MAAM,QAAQ,SAAS,GAAA;AAAA,EACtC,sBAAsB,EAAE,MAAM,QAAQ,SAAS,MAAA;AAAA,EAC/C,YAAY,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,EACtC,cAAc,EAAE,MAAM,OAA0B,SAAS,MAAM,CAAA,EAAC;AAAA,EAChE,gBAAgB,EAAE,MAAM,QAAQ,SAAS,QAAA;AAAA,EACzC,gBAAgB,EAAE,MAAM,QAAQ,SAAS,QAAA;AAAA,EACzC,aAAa;AAAA,IACX,MAAM,CAAC,UAAU,MAAM;AAAA,IAGvB,SAAS;AAAA,EAAA;AAAA,EAEX,cAAc,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,EACxC,kBAAkB,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA,EAC5C,kBAAkB;AAAA,IAChB,MAAM;AAAA,IAMN,SAAS,OAAO,EAAE,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,OAAO,EAAA;AAAA,EAAE;AAAA,EAEzE,UAAU,EAAE,MAAM,SAAS,SAAS,KAAA;AAAA,EACpC,kBAAkB,EAAE,MAAM,SAAS,SAAS,KAAA;AAAA,EAC5C,qBAAqB,EAAE,MAAM,QAAQ,SAAS,GAAA;AAAA,EAC9C,cAAc,EAAE,MAAM,QAAQ,SAAS,GAAA;AAAA,EACvC,eAAe,EAAE,MAAM,SAAS,SAAS,KAAA;AAAA;AAAA,EAEzC,UAAU,EAAE,MAAM,SAAS,SAAS,MAAA;AAAA;AAAA,EAEpC,OAAO;AAAA,IACL,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,SAAS;AAAA,EAAA;AAAA,EAEX,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA,EAGX,OAAO;AAAA,IACL,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,SAAS;AAAA,EAAA;AAAA,EAEX,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA,EAIX,YAAY;AAAA,IACV,MAAM,CAAC,SAAS,MAAM;AAAA,IAGtB,SAAS;AAAA,EAAA;AAEb;AAEO,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOA,SAAS,mBAAmB,OAAY,UAAuB;;AAE7D,QAAM,MAAK,qCAAU,UAAS;AAC9B,QAAM,OACD,oCAAI,WAAJ,mBAAY,UAAZ,YAAsB,yBAAY;AAEvC,MAAI,OAAO,QAAQ,QAAQ,GAAI,QAAO;AACtC,MAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,EAAG,QAAO;AAEnD,QAAM,MAAM,MAAM,kBAAkB;AACpC,QAAM,WAAW,MAAM,kBAAkB;AACzC,QAAM,WAAW,MAAM,kBAAkB;AACzC,QAAM,MAAa,MAAM,QAAQ,MAAM,YAAY,IAC/C,MAAM,eACN,CAAA;AAGJ,MAAI,MAAM,cAAc;AACtB,QAAI,MAAM,YAAY,MAAM,QAAQ,GAAG,GAAG;AACxC,aAAO,IACJ,IAAI,CAAA,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAO,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAG,EAC9D,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACb;AACA,WAAO,OAAO,OAAO,QAAQ,WAAW,QAAO,SAAI,QAAQ,MAAZ,YAAiB,EAAE,IAAI;AAAA,EACxE;AAGA,MAAI;AACJ,MAAI,MAAM,YAAY,MAAM,kBAAkB,OAAO,QAAQ,UAAU;AACrE,aAAS,IACN,MAAM,GAAG,EACT,IAAI,CAAC,MAAc,EAAE,KAAA,CAAM,EAC3B,OAAO,CAAC,MAAc,MAAM,EAAE;AAAA,EACnC,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,aAAS;AAAA,EACX,OAAO;AACL,aAAS,CAAC,GAAG;AAAA,EACf;AAGA,MAAI,IAAI,WAAW,GAAG;AACpB;AAAA,MACE;AAAA,MACA;AAAA,IAAA;AAEF,WAAO,OAAO,IAAI,CAAA,MAAK,OAAO,gBAAK,EAAE,CAAC,EAAE,KAAK,GAAG;AAAA,EAClD;AAGA,QAAM,OAAc,CAAA;AACpB,aAAW,MAAM,KAAK;AACpB,QAAI,MAAM,MAAM,QAAQ,GAAG,OAAO,EAAG,MAAK,KAAK,GAAG,GAAG,OAAO;AAAA,aACnD,GAAI,MAAK,KAAK,EAAE;AAAA,EAC3B;AAGA,QAAM,SAAS,CAAC,MAAmB;AACjC,UAAM,UAAU,KAAK;AAAA,MAAK,CAAA,MACxB,MAAM,QAAQ,OAAO,uBAAI,SAAS,MAAM,OAAO,CAAC,KAAI,uBAAI,eAAc;AAAA,IAAA;AAExE,WAAO,WAAW,QAAQ,QAAQ,KAAK,OACnC,OAAO,QAAQ,QAAQ,CAAC,IACxB,OAAO,gBAAK,EAAE;AAAA,EACpB;AAEA,SAAO,OAAO,IAAI,MAAM,EAAE,KAAK,GAAG;AACpC;AAEA,MAAA,UAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,cAAc;AAAA,EACd,OAAO;AAAA,EACP,OAAO,CAAC,GAAG,WAAW;AAAA,EACtB,MAAM,OAAO,EAAE,OAAO,QAAQ;AAC5B,UAAM,WAAW,mBAAA;AACjB,UAAM,WAAW,eAAe,QAAQ;AACxC,UAAM,aAAa,eAAe,UAAU;AAG5C,UAAM,QAAQ,MAAM;;AAClB,UAAI,CAAC,MAAM,WAAY,QAAO;AAC9B,UAAI,YAAY;AAEd,YACE,CAAC,MAAM,QAAQ,MAAM,YAAY,KACjC,MAAM,aAAa,WAAW,GAC9B;AAGA,gBAAK,sBAAmB,YAAnB,mBAA4B,QAA5B,mBAAiC,cAAa,cAAc;AAC/D,oBAAQ;AAAA,cACN;AAAA,YAAA;AAAA,UAEJ;AACA,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AACA,YAAK,sBAAmB,YAAnB,mBAA4B,QAA5B,mBAAiC,cAAa,cAAc;AAC/D,gBAAQ;AAAA,UACN;AAAA,QAAA;AAAA,MAEJ;AACA,aAAO;AAAA,IACT,GAAA;AAGA,UAAM,EAAE,YAAY,aAAa,YAAA,IAAgB;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,UAAM,EAAE,cAAc,gBAAgB,eAAe,kBAAA,IACnD,cAAc,OAAO,MAAM,UAAU,WAAW;AAClD,UAAM,cAAc,eAAe,KAAK;AAGxC,UAAM,YAAY,gBAAgB,KAAK;AACvC,UAAM,cAAc,oBAAoB,WAAW,cAAc;AAGjE,UAAM,YAAY,SAAwC,MAAM;AAC9D,UAAI,MAAM,WAAY,QAAO;AAC7B,UAAI,OAAO,MAAM,UAAU,YAAY,MAAM,UAAU;AACrD,eAAO;AACT,aAAO;AAAA,IACT,CAAC;AAED,UAAM,YAAY,iBAAiB;AAAA,MACjC,SAAS,MAAM,UAAU,UAAU;AAAA,MACnC,QAAQ,MACN,OAAO,MAAM,UAAU,WAClB,MAAM,QACP;AAAA,MACN,OAAO,MAAM,WAAW;AAAA,MACxB,OAAO,MAAA;;AAAO,2BAAc,SAAd,YAAsB;AAAA;AAAA,MACpC,MAAM;AAAA,IAAA,CACP;AAED,UAAM,qBAAqB,SAA4B,MAAM;AAC3D,UAAI,UAAU,UAAU,aAAc,QAAO,MAAM;AACnD,UAAI,UAAU,UAAU,OAAQ,QAAO,UAAU,MAAM;AACvD,aAAO;AAAA,IACT,CAAC;AAGD,UAAM,YAAY,SAAwC,MAAM;AAC9D,UAAI,MAAM,WAAY,QAAO;AAC7B,UAAI,OAAO,MAAM,UAAU,YAAY,MAAM,UAAU;AACrD,eAAO;AACT,aAAO;AAAA,IACT,CAAC;AAED,UAAM,YAAY,iBAAiB;AAAA,MACjC,SAAS,MAAM,UAAU,UAAU;AAAA,MACnC,QAAQ,MACN,OAAO,MAAM,UAAU,WAClB,MAAM,QACP;AAAA,MACN,OAAO,MAAM,WAAW;AAAA,MACxB,OAAO,MAAA;;AAAO,2BAAc,SAAd,YAAsB;AAAA;AAAA,MACpC,MAAM;AAAA,IAAA,CACP;AAED,UAAM,sBAAuB,MAAc;AAC3C,UAAM,2BAA2B,CAAC,YAAqB;;AACrD,UAAI,OAAO,wBAAwB;AACjC,4BAAoB,OAAO;AAC7B,UACE,CAAC,WACD,CAAC,MAAM,YACP,MAAM,UAAU,UAChB,MAAM,UAAU,OAChB;AACA,cAAM,MAAM,WAAW;AACvB,aAAK,iBAAiB,KAAK,EAAE,QAAQ,kBAA2B;AAChE,YAAI,UAAU,UAAU,OAAQ,WAAU,IAAA;AAAA,MAC5C;AAEA,UAAI,CAAC,WAAW,MAAM,UAAU,UAAa,MAAM,UAAU,OAAO;AAClE,aAAK,eAAe,kBAAkB;AAAA,UACpC,OAAO,WAAW;AAAA,UAClB,QAAQ,WAAc,SAAd,YAAsB;AAAA,QAAA,CAC/B;AACD,YAAI,UAAU,UAAU,OAAQ,WAAU,IAAA;AAAA,MAC5C;AAAA,IACF;AAEA,WAAO,MAAM;;AAGX,UAAI,MAAM,UAAU;AAClB,cAAM,OAAO,mBAAmB,OAAO,QAAQ;AAC/C,eAAO,EAAE,QAAQ,EAAE,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAAA,MACtD;AAEA,YAAM,QAAQ,eAAe,QAAQ;AACrC,YAAM,gBAAgB,mBAAmB,QAAQ;AAGjD,YAAM,eACF;AAAA,QACE,OAAO,WAAW;AAAA,QAClB,SAAS,CAAC,MAAW,YAAY,YAAY,CAAC,CAAC;AAAA,MAAA;AAQrD,YAAmD,YAA3C,mBAAiB,YAA0B,IAAd,sBAAc,IAAd,CAA7B;AACR,YAAM,YAAiC,8EAClC,YAAY,QACZ,YACA,gBACA,eAJkC;AAAA,QAKrC,UAAU,CAAC,QAAa;;AACtB,4BAAkB,GAAG;AACrB,cACE,CAAC,MAAM,YACP,MAAM,UAAU,UAChB,MAAM,UAAU,OAChB;AACA,iBAAK,iBAAiB,KAAK,EAAE,QAAQ,UAAmB;AACxD,gBAAI,UAAU,UAAU,OAAQ,WAAU,IAAA;AAAA,UAC5C;AAEA,cAAI,MAAM,UAAU,UAAa,MAAM,UAAU,OAAO;AACtD,iBAAK,eAAe,UAAU;AAAA,cAC5B,OAAO;AAAA,cACP,QAAQA,MAAA,MAAc,SAAd,OAAAA,MAAsB;AAAA,YAAA,CAC/B;AACD,gBAAI,UAAU,UAAU,OAAQ,WAAU,IAAA;AAAA,UAC5C;AAAA,QACF;AAAA,QACA,iBAAiB;AAAA,MAAA;AAOnB,YAAM,OAAO,MAAM,cAAc,cAAc,SAAS;AAExD,YAAM,YAAiC,CAAA;AAEvC,UAAI,MAAM;AAER,cAAM,WAAW,MAAM,kBAAkB;AACzC,cAAM,WAAW,MAAM,kBAAkB;AACzC,cAAM,UAAU,CAAC,QAAsB;AACrC,gBAAM,MAAa,CAAA;AACnB,qBAAW,QAAQ,OAAO,IAAI;AAC5B,gBAAI,QAAQ,MAAM,QAAQ,KAAK,OAAO,GAAG;AACvC,kBAAI;AAAA,gBACF,GAAG,KAAK,QAAQ,IAAI,CAAC,SAAc;AAAA,kBACjC,OAAO,IAAI,QAAQ;AAAA,kBACnB,OAAO,IAAI,QAAQ;AAAA,kBACnB,UAAU,CAAC,CAAC,IAAI;AAAA,gBAAA,EAChB;AAAA,cAAA;AAAA,YAEN,WAAW,MAAM;AACf,kBAAI,KAAK;AAAA,gBACP,OAAO,KAAK,QAAQ;AAAA,gBACpB,OAAO,KAAK,QAAQ;AAAA,gBACpB,UAAU,CAAC,CAAC,KAAK;AAAA,cAAA,CAClB;AAAA,YACH;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,kBAAU,UAAU,QAAQ,aAAa,KAAK;AAE9C,eAAO,KAAK,KAAK,EAAE,QAAQ,CAAA,SAAQ;AACjC,cAAI,SAAS,WAAW;AACtB,sBAAU,IAAI,IAAI,CAAC,UAAe,WAAW,OAAO,MAAM,KAAK;AAAA,UACjE;AAAA,QACF,CAAC;AAAA,MACH,WAAW,MAAM,gBAAgB,MAAM,aAAa,QAAQ;AAC1D,kBAAU,UAAU,MAAM,iBAAiB,aAAa,OAAO,KAAK;AACpE,YACE,MAAM,aACL,sBAAmB,YAAnB,mBAA4B,QAA5B,mBAAiC,cAAa,cAC/C;AACA,kBAAQ;AAAA,YACN;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF,OAAO;AACL,eAAO,KAAK,KAAK,EAAE,QAAQ,CAAA,SAAQ;AACjC,oBAAU,IAAI,IAAI,CAAC,UAAe,WAAW,OAAO,MAAM,KAAK;AAAA,QACjE,CAAC;AAAA,MACH;AAGA,UAAI,eAAe;AACjB,cAAM,WAAW,UAAU;AAC3B,kBAAU,UAAU,CAAC,MAAW;AAAA,UAC9B,cAAA;AAAA,UACA,WAAW,SAAS,CAAC,IAAI;AAAA,QAAA;AAAA,MAE7B;AAGA,UAAI,gBAAgB;AAGX;AACL,gBAAM,WAAW,UAAU;AAC3B,oBAAU,UAAU,CAAC,MAAW;AAAA,YAC9B,WAAW,SAAS,CAAC,IAAI;AAAA,YACzB,eAAA;AAAA,UAAe;AAAA,QAEnB;AAAA,MACF;AAEA,YAAM,OAAO,EAAE,MAAM,WAAW,SAAS;AACzC,YAAM,YAAY,YAAY,IAAI;AAClC,UAAI,mBAAmB,OAAO;AAC5B,eAAO,EAAE,OAAO,EAAE,OAAO,sBAAsB;AAAA,UAC7C;AAAA,UACA,EAAE,eAAe,EAAE,OAAO,mBAAmB,OAAO;AAAA,QAAA,CACrD;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index2.cjs"),t=require("vue-demi"),r=require("./index239.cjs");function n(e){return(r,n)=>u(r,n,t.unref(e))}function u(e,t,r){return function(e,t,r){const n=t.split(".").reduce((e,t)=>null!=e?e[t]:void 0,e);return void 0!==n?n:r}(r,e,e).replace(/\{(\w+)\}/g,(e,r)=>`${t?.[r]??`{${r}}`}`)}function o(e){return{lang:t.computed(()=>t.unref(e).name),locale:t.isRef(e)?e:t.ref(e),t:n(e)}}exports.buildLocaleContext=o,exports.buildTranslator=n,exports.translate=u,exports.useLocale=function(n){const u=e.getLocaleContextKey(),c=n||(u?t.inject(u,t.ref()):t.ref());return o(t.computed(()=>c?.value?.plus?c.value:r.default))};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index2.cjs"),t=require("vue-demi"),r=require("./index238.cjs");function n(e){return(r,n)=>u(r,n,t.unref(e))}function u(e,t,r){return function(e,t,r){const n=t.split(".").reduce((e,t)=>null!=e?e[t]:void 0,e);return void 0!==n?n:r}(r,e,e).replace(/\{(\w+)\}/g,(e,r)=>`${t?.[r]??`{${r}}`}`)}function o(e){return{lang:t.computed(()=>t.unref(e).name),locale:t.isRef(e)?e:t.ref(e),t:n(e)}}exports.buildLocaleContext=o,exports.buildTranslator=n,exports.translate=u,exports.useLocale=function(n){const u=e.getLocaleContextKey(),c=n||(u?t.inject(u,t.ref()):t.ref());return o(t.computed(()=>c?.value?.plus?c.value:r.default))};
2
2
  //# sourceMappingURL=index123.cjs.map
@@ -1,6 +1,6 @@
1
1
  import { getLocaleContextKey } from "./index2.mjs";
2
2
  import { ref, computed, unref, isRef, inject } from "vue-demi";
3
- import plusZhCn from "./index239.mjs";
3
+ import plusZhCn from "./index238.mjs";
4
4
  function getByPath(obj, path, defaultValue) {
5
5
  const result = path.split(".").reduce(
6
6
  (current, key) => current != null ? current[key] : void 0,
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue-demi"),l=require("./index147.cjs"),r=require("./index234.cjs");let t=null,u=!1,a=!1;async function c(){if(u)return t;if(a)return null;try{const e=await Promise.resolve().then(()=>require("./index238.cjs")),r=e.RecycleScroller||e.default?.RecycleScroller;return r?(t={RecycleScroller:r},u=!0,t):(a=!0,l.warnOnce("XTable:virtualScroll:noExport","[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用"),null)}catch{return a=!0,l.warnOnce("XTable:virtualScroll:notInstalled","[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller"),null}}exports.loadVirtualScroller=c,exports.useVirtualScroll=function(t,u,a,o){const n=e.shallowRef(null),i=e.ref(!1),s=e.computed(()=>t.value&&!!n.value),d=e.computed(()=>a.value||r.DEFAULT_VIRTUAL_ITEM_HEIGHT),v=e.computed(()=>u.value||r.DEFAULT_VIRTUAL_SHOW_SIZE);return{shouldVirtualize:s,RecycleScroller:n,loadFailed:i,itemSize:d,bufferSize:v,ensureLoaded:async()=>{if(!t.value)return;if(n.value||i.value)return;const e=await c();e?n.value=e.RecycleScroller:i.value=!0},checkCompat:()=>{if(!t.value)return;const e=o()||{};(e["span-method"]||e.spanMethod)&&l.warnOnce("XTable:virtualScroll:spanMethod","[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略"),(e["tree-props"]||e.treeProps)&&l.warnOnce("XTable:virtualScroll:treeProps","[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据")}}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue-demi"),r=require("./index147.cjs"),l=require("./index234.cjs");async function a(){return r.warnOnce("XTable:virtualScroll:disabled","[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"),null}exports.loadVirtualScroller=a,exports.useVirtualScroll=function(t,u,o,n){const c=e.shallowRef(null),i=e.ref(!1),s=e.computed(()=>t.value&&!!c.value),d=e.computed(()=>o.value||l.DEFAULT_VIRTUAL_ITEM_HEIGHT),p=e.computed(()=>u.value||l.DEFAULT_VIRTUAL_SHOW_SIZE);return{shouldVirtualize:s,RecycleScroller:c,loadFailed:i,itemSize:d,bufferSize:p,ensureLoaded:async()=>{if(!t.value)return;if(c.value||i.value)return;const e=await a();e?c.value=e.RecycleScroller:i.value=!0},checkCompat:()=>{if(!t.value)return;const e=n()||{};(e["span-method"]||e.spanMethod)&&r.warnOnce("XTable:virtualScroll:spanMethod","[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略"),(e["tree-props"]||e.treeProps)&&r.warnOnce("XTable:virtualScroll:treeProps","[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据")}}};
2
2
  //# sourceMappingURL=index212.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index212.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(optional peer)\n//\n// 设计目标:\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 模块级缓存:避免每次启用虚拟滚动都触发 import()\nlet _scrollerCache: { RecycleScroller: Component } | null = null;\nlet _scrollerLoaded = false;\nlet _scrollerFailed = false;\n\n/**\n * 运行时动态加载 vue-virtual-scroller。\n * 失败一次后不再重试,避免反复触发网络请求或抛错。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(vue-virtual-scroller v1.x/v2.x 都导出此命名)\n * - 失败:null(用户未安装该 peer)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n if (_scrollerLoaded) {\n return _scrollerCache;\n }\n if (_scrollerFailed) {\n return null;\n }\n try {\n // @vite-ignore 注释避免 Vite 静态分析时抛 unresolved 错误(peerDep 未必装)\n const mod: any = await import(/* @vite-ignore */ 'vue-virtual-scroller');\n const RecycleScroller = mod.RecycleScroller || mod.default?.RecycleScroller;\n if (!RecycleScroller) {\n _scrollerFailed = true;\n warnOnce(\n 'XTable:virtualScroll:noExport',\n '[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用'\n );\n return null;\n }\n _scrollerCache = { RecycleScroller };\n _scrollerLoaded = true;\n return _scrollerCache;\n } catch {\n _scrollerFailed = true;\n warnOnce(\n 'XTable:virtualScroll:notInstalled',\n '[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller'\n );\n return null;\n }\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存\nexport function _resetVirtualScrollerCache(): void {\n _scrollerCache = null;\n _scrollerLoaded = false;\n _scrollerFailed = false;\n}\n"],"names":["_scrollerCache","_scrollerLoaded","_scrollerFailed","async","loadVirtualScroller","mod","Promise","resolve","then","require","RecycleScroller","default","warnOnce","useVirtual","virtualShowSize","virtualItemHeight","attrsRef","shallowRef","loadFailed","ref","shouldVirtualize","computed","value","itemSize","DEFAULT_VIRTUAL_ITEM_HEIGHT","bufferSize","DEFAULT_VIRTUAL_SHOW_SIZE","ensureLoaded","checkCompat","a","spanMethod","treeProps"],"mappings":"oKA4BA,IAAIA,EAAwD,KACxDC,GAAkB,EAClBC,GAAkB,EAUtBC,eAAsBC,IAGpB,GAAIH,EACF,OAAOD,EAET,GAAIE,EACF,OAAO,KAET,IAEE,MAAMG,QAAiBC,QAAAC,UAAAC,KAAA,IAAAC,QAA0B,mBAC3CC,EAAkBL,EAAIK,iBAAmBL,EAAIM,SAASD,gBAC5D,OAAKA,GAQLV,EAAiB,CAAEU,mBACnBT,GAAkB,EACXD,IATLE,GAAkB,EAClBU,EAAAA,SACE,gCACA,iEAEK,KAKX,CAAA,MAME,OALAV,GAAkB,EAClBU,EAAAA,SACE,oCACA,yFAEK,IACT,CACF,wDA0BO,SACLC,EACAC,EACAC,EACAC,GAIA,MAAMN,EAAkBO,EAAAA,WAAW,MAC7BC,EAAaC,EAAAA,KAAI,GAEjBC,EAAmBC,EAAAA,SACvB,IAAMR,EAAWS,SAAWZ,EAAgBY,OAyCxCC,EAAWF,EAAAA,SACf,IAAMN,EAAkBO,OAASE,EAAAA,6BAE7BC,EAAaJ,EAAAA,SACjB,IAAMP,EAAgBQ,OAASI,EAAAA,2BAGjC,MAAO,CACLN,mBACAV,kBACAQ,aACAK,WACAE,aACAE,aA5BmBxB,UACnB,IAAKU,EAAWS,MACd,OAEF,GAAIZ,EAAgBY,OAASJ,EAAWI,MACtC,OAEF,MAAMjB,QAAYD,IACdC,EACFK,EAAgBY,MAAQjB,EAAIK,gBAE5BQ,EAAWI,OAAQ,GAkBrBM,YAnDkB,KAClB,IAAKf,EAAWS,MACd,OAEF,MAAMO,EAAIb,KAAc,CAAA,GACpBa,EAAE,gBAAkBA,EAAEC,aACxBlB,EAAAA,SACE,kCACA,+CAGAiB,EAAE,eAAiBA,EAAEE,YACvBnB,EAAAA,SACE,iCACA,4CAuCR"}
1
+ {"version":3,"file":"index212.cjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":["async","loadVirtualScroller","warnOnce","useVirtual","virtualShowSize","virtualItemHeight","attrsRef","RecycleScroller","shallowRef","loadFailed","ref","shouldVirtualize","computed","value","itemSize","DEFAULT_VIRTUAL_ITEM_HEIGHT","bufferSize","DEFAULT_VIRTUAL_SHOW_SIZE","ensureLoaded","mod","checkCompat","a","spanMethod","treeProps"],"mappings":"oKA0CAA,eAAsBC,IAOpB,OAJAC,EAAAA,SACE,gCACA,uCAEK,IACT,wDA0BO,SACLC,EACAC,EACAC,EACAC,GAIA,MAAMC,EAAkBC,EAAAA,WAAW,MAC7BC,EAAaC,EAAAA,KAAI,GAEjBC,EAAmBC,EAAAA,SACvB,IAAMT,EAAWU,SAAWN,EAAgBM,OAyCxCC,EAAWF,EAAAA,SACf,IAAMP,EAAkBQ,OAASE,EAAAA,6BAE7BC,EAAaJ,EAAAA,SACjB,IAAMR,EAAgBS,OAASI,EAAAA,2BAGjC,MAAO,CACLN,mBACAJ,kBACAE,aACAK,WACAE,aACAE,aA5BmBlB,UACnB,IAAKG,EAAWU,MACd,OAEF,GAAIN,EAAgBM,OAASJ,EAAWI,MACtC,OAEF,MAAMM,QAAYlB,IACdkB,EACFZ,EAAgBM,MAAQM,EAAIZ,gBAE5BE,EAAWI,OAAQ,GAkBrBO,YAnDkB,KAClB,IAAKjB,EAAWU,MACd,OAEF,MAAMQ,EAAIf,KAAc,CAAA,GACpBe,EAAE,gBAAkBA,EAAEC,aACxBpB,EAAAA,SACE,kCACA,+CAGAmB,EAAE,eAAiBA,EAAEE,YACvBrB,EAAAA,SACE,iCACA,4CAuCR"}
@@ -1,41 +1,12 @@
1
1
  import { shallowRef, ref, computed } from "vue-demi";
2
2
  import { warnOnce } from "./index147.mjs";
3
3
  import { DEFAULT_VIRTUAL_ITEM_HEIGHT, DEFAULT_VIRTUAL_SHOW_SIZE } from "./index234.mjs";
4
- let _scrollerCache = null;
5
- let _scrollerLoaded = false;
6
- let _scrollerFailed = false;
7
4
  async function loadVirtualScroller() {
8
- if (_scrollerLoaded) {
9
- return _scrollerCache;
10
- }
11
- if (_scrollerFailed) {
12
- return null;
13
- }
14
- try {
15
- const mod = await import(
16
- /* @vite-ignore */
17
- "./index238.mjs"
18
- );
19
- const RecycleScroller = mod.RecycleScroller || mod.default?.RecycleScroller;
20
- if (!RecycleScroller) {
21
- _scrollerFailed = true;
22
- warnOnce(
23
- "XTable:virtualScroll:noExport",
24
- "[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用"
25
- );
26
- return null;
27
- }
28
- _scrollerCache = { RecycleScroller };
29
- _scrollerLoaded = true;
30
- return _scrollerCache;
31
- } catch {
32
- _scrollerFailed = true;
33
- warnOnce(
34
- "XTable:virtualScroll:notInstalled",
35
- "[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller"
36
- );
37
- return null;
38
- }
5
+ warnOnce(
6
+ "XTable:virtualScroll:disabled",
7
+ "[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略"
8
+ );
9
+ return null;
39
10
  }
40
11
  function useVirtualScroll(useVirtual, virtualShowSize, virtualItemHeight, attrsRef) {
41
12
  const RecycleScroller = shallowRef(null);
@@ -1 +1 @@
1
- {"version":3,"file":"index212.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(optional peer)\n//\n// 设计目标:\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 模块级缓存:避免每次启用虚拟滚动都触发 import()\nlet _scrollerCache: { RecycleScroller: Component } | null = null;\nlet _scrollerLoaded = false;\nlet _scrollerFailed = false;\n\n/**\n * 运行时动态加载 vue-virtual-scroller。\n * 失败一次后不再重试,避免反复触发网络请求或抛错。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(vue-virtual-scroller v1.x/v2.x 都导出此命名)\n * - 失败:null(用户未安装该 peer)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n if (_scrollerLoaded) {\n return _scrollerCache;\n }\n if (_scrollerFailed) {\n return null;\n }\n try {\n // @vite-ignore 注释避免 Vite 静态分析时抛 unresolved 错误(peerDep 未必装)\n const mod: any = await import(/* @vite-ignore */ 'vue-virtual-scroller');\n const RecycleScroller = mod.RecycleScroller || mod.default?.RecycleScroller;\n if (!RecycleScroller) {\n _scrollerFailed = true;\n warnOnce(\n 'XTable:virtualScroll:noExport',\n '[XTable] vue-virtual-scroller 已加载但未导出 RecycleScroller,虚拟滚动已禁用'\n );\n return null;\n }\n _scrollerCache = { RecycleScroller };\n _scrollerLoaded = true;\n return _scrollerCache;\n } catch {\n _scrollerFailed = true;\n warnOnce(\n 'XTable:virtualScroll:notInstalled',\n '[XTable] useVirtual=true 需要安装 vue-virtual-scroller,请运行: pnpm add vue-virtual-scroller'\n );\n return null;\n }\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存\nexport function _resetVirtualScrollerCache(): void {\n _scrollerCache = null;\n _scrollerLoaded = false;\n _scrollerFailed = false;\n}\n"],"names":[],"mappings":";;;AA4BA,IAAI,iBAAwD;AAC5D,IAAI,kBAAkB;AACtB,IAAI,kBAAkB;AAUtB,eAAsB,sBAEZ;AACR,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AACA,MAAI;AAEF,UAAM,MAAW,MAAM;AAAA;AAAA,MAA0B;AAAA,IAAA;AACjD,UAAM,kBAAkB,IAAI,mBAAmB,IAAI,SAAS;AAC5D,QAAI,CAAC,iBAAiB;AACpB,wBAAkB;AAClB;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAEF,aAAO;AAAA,IACT;AACA,qBAAiB,EAAE,gBAAA;AACnB,sBAAkB;AAClB,WAAO;AAAA,EACT,QAAQ;AACN,sBAAkB;AAClB;AAAA,MACE;AAAA,MACA;AAAA,IAAA;AAEF,WAAO;AAAA,EACT;AACF;AA0BO,SAAS,iBACd,YACA,iBACA,mBACA,UACwB;AAGxB,QAAM,kBAAkB,WAAW,IAAI;AACvC,QAAM,aAAa,IAAI,KAAK;AAE5B,QAAM,mBAAmB;AAAA,IACvB,MAAM,WAAW,SAAS,CAAC,CAAC,gBAAgB;AAAA,EAAA;AAI9C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,UAAM,IAAI,SAAA,KAAc,CAAA;AACxB,QAAI,EAAE,aAAa,KAAK,EAAE,YAAY;AACpC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,QAAI,EAAE,YAAY,KAAK,EAAE,WAAW;AAClC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAGF;AAGA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,QAAI,gBAAgB,SAAS,WAAW,OAAO;AAC7C;AAAA,IACF;AACA,UAAM,MAAM,MAAM,oBAAA;AAClB,QAAI,KAAK;AACP,sBAAgB,QAAQ,IAAI;AAAA,IAC9B,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,WAAW;AAAA,IACf,MAAM,kBAAkB,SAAS;AAAA,EAAA;AAEnC,QAAM,aAAa;AAAA,IACjB,MAAM,gBAAgB,SAAS;AAAA,EAAA;AAGjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"index212.mjs","sources":["../../src/components/XTable/useVirtualScroll.ts"],"sourcesContent":["// packages/core/src/components/XTable/useVirtualScroll.ts\n//\n// useVirtualScroll —— 虚拟滚动接入 vue-virtual-scroller(当前已禁用)\n//\n// 当前状态:虚拟滚动能力暂未开放,loadVirtualScroller() 直接返回 null。\n// 原因:CJS 构建产物中 import('vue-virtual-scroller') 会被 Rollup 转为 require(),\n// 导致宿主项目在未安装该包时编译失败。待能力正式开放时恢复动态加载逻辑。\n//\n// 设计目标(恢复后):\n// - 用户安装 vue-virtual-scroller 时,useVirtual=true 启用大数据量虚拟滚动\n// - 用户未安装时,给出友好 warn 并回退到普通 ElTable 渲染(不崩溃)\n// - 检测到不兼容场景(fixed columns / span-method / tree-props)时 dev warn\n//\n// 与 ElTable 的协作:\n// - ElTable 自身不暴露虚拟滚动 API(TableV2 是独立组件,且 Vue2 端不可用)\n// - 本 hook 在 useVirtual=true 时旁路 ElTable,改用 RecycleScroller 渲染行\n// - 表头仍由 ElTable 渲染(仅渲染表头部分,不渲染 tbody),保持样式一致\n//\n// 性能要点:\n// - vue-virtual-scroller 的 RecycleScroller 自带 itemSize + buffer 优化\n// - 避免在循环内创建闭包(render 函数引用稳定)\n\nimport type { Component, ComputedRef, Ref } from 'vue-demi';\nimport { computed, ref, shallowRef } from 'vue-demi';\nimport { warnOnce } from '../../utils/warnOnce';\nimport {\n DEFAULT_VIRTUAL_ITEM_HEIGHT,\n DEFAULT_VIRTUAL_SHOW_SIZE\n} from './src/constants';\n// vue-virtual-scroller 类型桩在 ./vue-virtual-scroller.types.d.ts 中声明(optional peer)\n\n// 虚拟滚动能力暂未开放:loadVirtualScroller 直接返回 null,不执行任何动态 import。\n// 原因:CJS 构建产物中 import() 会被 Rollup 转为 require(),导致宿主项目\n// 在未安装 vue-virtual-scroller 时编译失败。待虚拟滚动能力正式开放时恢复。\n\n/**\n * 运行时动态加载 vue-virtual-scroller(当前已禁用,直接返回 null)。\n *\n * 返回值:\n * - 成功:{ RecycleScroller }(当前始终为 null)\n * - 失败:null(虚拟滚动能力暂未开放)\n */\nexport async function loadVirtualScroller(): Promise<{\n RecycleScroller: Component;\n} | null> {\n warnOnce(\n 'XTable:virtualScroll:disabled',\n '[XTable] 虚拟滚动能力暂未开放,useVirtual 将被忽略'\n );\n return null;\n}\n\n/**\n * useVirtualScroll —— 虚拟滚动状态与异步加载控制。\n *\n * @param useVirtual - 是否启用虚拟滚动(响应式)\n * @param virtualShowSize - 可视区域渲染行数(响应式,默认 30)\n * @param virtualItemHeight - 预估行高 px(响应式,默认 50)\n * @param attrsRef - 用户透传给 ElTable 的 attrs(用于检测不兼容场景)\n *\n * 返回:\n * - shouldVirtualize:最终是否启用虚拟模式(useVirtual + 加载成功)\n * - RecycleScroller:vue-virtual-scroller 组件(响应式,加载完成后填充)\n * - itemSize:合并后的行高\n * - bufferSize:合并后的可视区行数\n */\nexport interface UseVirtualScrollReturn {\n shouldVirtualize: ComputedRef<boolean>;\n RecycleScroller: Ref<Component | null>;\n loadFailed: Ref<boolean>;\n itemSize: ComputedRef<number>;\n bufferSize: ComputedRef<number>;\n ensureLoaded: () => Promise<void>;\n checkCompat: () => void;\n}\n\nexport function useVirtualScroll(\n useVirtual: Ref<boolean>,\n virtualShowSize: Ref<number>,\n virtualItemHeight: Ref<number>,\n attrsRef: () => Record<string, any>\n): UseVirtualScrollReturn {\n // 使用 shallowRef 存储组件定义,避免 Vue3 将组件对象深度 reactive 化\n // 导致 \"Component that was made a reactive object\" 警告\n const RecycleScroller = shallowRef(null) as Ref<Component | null>;\n const loadFailed = ref(false);\n\n const shouldVirtualize = computed(\n () => useVirtual.value && !!RecycleScroller.value\n );\n\n // 不兼容场景检测(dev only)—— 仅在 useVirtual=true 时触发\n const checkCompat = () => {\n if (!useVirtual.value) {\n return;\n }\n const a = attrsRef() || {};\n if (a['span-method'] || a.spanMethod) {\n warnOnce(\n 'XTable:virtualScroll:spanMethod',\n '[XTable] 虚拟滚动模式下 span-method 不可用,合并行/列将被忽略'\n );\n }\n if (a['tree-props'] || a.treeProps) {\n warnOnce(\n 'XTable:virtualScroll:treeProps',\n '[XTable] 虚拟滚动模式下 tree-props 不可用,请使用平铺数据'\n );\n }\n // 检测固定列:通过判断列配置中是否含 fixed(由主组件在调用时传入)\n // 此处仅检测 attrs 上的 default-sort 等无关属性即可,固定列在 columns 渲染处再 warn\n };\n\n // 启动加载(异步,不阻塞渲染)\n const ensureLoaded = async () => {\n if (!useVirtual.value) {\n return;\n }\n if (RecycleScroller.value || loadFailed.value) {\n return;\n }\n const mod = await loadVirtualScroller();\n if (mod) {\n RecycleScroller.value = mod.RecycleScroller as Component;\n } else {\n loadFailed.value = true;\n }\n };\n\n const itemSize = computed(\n () => virtualItemHeight.value || DEFAULT_VIRTUAL_ITEM_HEIGHT\n );\n const bufferSize = computed(\n () => virtualShowSize.value || DEFAULT_VIRTUAL_SHOW_SIZE\n );\n\n return {\n shouldVirtualize,\n RecycleScroller,\n loadFailed,\n itemSize,\n bufferSize,\n ensureLoaded,\n checkCompat\n };\n}\n\n// @internal 测试用:重置模块级缓存(虚拟滚动已禁用,此函数当前为空操作)\nexport function _resetVirtualScrollerCache(): void {\n // no-op: 虚拟滚动禁用期间无需重置任何缓存\n}\n"],"names":[],"mappings":";;;AA0CA,eAAsB,sBAEZ;AACR;AAAA,IACE;AAAA,IACA;AAAA,EAAA;AAEF,SAAO;AACT;AA0BO,SAAS,iBACd,YACA,iBACA,mBACA,UACwB;AAGxB,QAAM,kBAAkB,WAAW,IAAI;AACvC,QAAM,aAAa,IAAI,KAAK;AAE5B,QAAM,mBAAmB;AAAA,IACvB,MAAM,WAAW,SAAS,CAAC,CAAC,gBAAgB;AAAA,EAAA;AAI9C,QAAM,cAAc,MAAM;AACxB,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,UAAM,IAAI,SAAA,KAAc,CAAA;AACxB,QAAI,EAAE,aAAa,KAAK,EAAE,YAAY;AACpC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,QAAI,EAAE,YAAY,KAAK,EAAE,WAAW;AAClC;AAAA,QACE;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EAGF;AAGA,QAAM,eAAe,YAAY;AAC/B,QAAI,CAAC,WAAW,OAAO;AACrB;AAAA,IACF;AACA,QAAI,gBAAgB,SAAS,WAAW,OAAO;AAC7C;AAAA,IACF;AACA,UAAM,MAAM,MAAM,oBAAA;AAClB,QAAI,KAAK;AACP,sBAAgB,QAAQ,IAAI;AAAA,IAC9B,OAAO;AACL,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AAEA,QAAM,WAAW;AAAA,IACf,MAAM,kBAAkB,SAAS;AAAA,EAAA;AAEnC,QAAM,aAAa;AAAA,IACjB,MAAM,gBAAgB,SAAS;AAAA,EAAA;AAGjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index256.cjs");var r=require("./index240.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index245.cjs");var r=require("./index239.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
2
2
  //# sourceMappingURL=index231.cjs.map
@@ -1,5 +1,5 @@
1
- import { getDefaultExportFromCjs } from "./index256.mjs";
2
- import { __require as requireDayjs_min } from "./index240.mjs";
1
+ import { getDefaultExportFromCjs } from "./index245.mjs";
2
+ import { __require as requireDayjs_min } from "./index239.mjs";
3
3
  var dayjs_minExports = requireDayjs_min();
4
4
  const dayjs = /* @__PURE__ */ getDefaultExportFromCjs(dayjs_minExports);
5
5
  export {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index256.cjs");var r=require("./index242.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index245.cjs");var r=require("./index241.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
2
2
  //# sourceMappingURL=index232.cjs.map
@@ -1,5 +1,5 @@
1
- import { getDefaultExportFromCjs } from "./index256.mjs";
2
- import { __require as requireAdvancedFormat } from "./index242.mjs";
1
+ import { getDefaultExportFromCjs } from "./index245.mjs";
2
+ import { __require as requireAdvancedFormat } from "./index241.mjs";
3
3
  var advancedFormatExports = requireAdvancedFormat();
4
4
  const advancedFormat = /* @__PURE__ */ getDefaultExportFromCjs(advancedFormatExports);
5
5
  export {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index256.cjs");var r=require("./index244.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index245.cjs");var r=require("./index243.cjs").__require();const t=e.getDefaultExportFromCjs(r);exports.default=t;
2
2
  //# sourceMappingURL=index233.cjs.map
@@ -1,5 +1,5 @@
1
- import { getDefaultExportFromCjs } from "./index256.mjs";
2
- import { __require as requireWeekOfYear } from "./index244.mjs";
1
+ import { getDefaultExportFromCjs } from "./index245.mjs";
2
+ import { __require as requireWeekOfYear } from "./index243.mjs";
3
3
  var weekOfYearExports = requireWeekOfYear();
4
4
  const weekOfYear = /* @__PURE__ */ getDefaultExportFromCjs(weekOfYearExports);
5
5
  export {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./index246.cjs"),r=require("./index247.cjs"),o=require("./index248.cjs"),c=require("./index249.cjs"),n=require("./index250.cjs"),l=require("./index251.cjs"),s=require("./index252.cjs"),t=require("./index253.cjs"),i=require("./index254.cjs"),u=require("./index255.cjs");const m={version:"3.0.4",install(l,s){const t={installComponents:!0,componentsPrefix:"",...s};for(const e in t)typeof t[e]<"u"&&(n.c[e]=t[e]);t.installComponents&&function(n,l){n.component(`${l}recycle-scroller`,o._),n.component(`${l}RecycleScroller`,o._),n.component(`${l}dynamic-scroller`,e._),n.component(`${l}DynamicScroller`,e._),n.component(`${l}dynamic-scroller-item`,r._),n.component(`${l}DynamicScrollerItem`,r._),n.component(`${l}window-scroller`,c._),n.component(`${l}WindowScroller`,c._)}(l,t.componentsPrefix)}};exports.DynamicScroller=e._,exports.DynamicScrollerItem=r._,exports.RecycleScroller=o._,exports.WindowScroller=c._,exports.useRecycleScroller=n.u,exports.useDynamicScroller=l.useDynamicScroller,exports.useDynamicScrollerItem=s.useDynamicScrollerItem,exports.useIdState=t.useIdState,exports.useTableColumnWidths=i.useTableColumnWidths,exports.useWindowScroller=u.useWindowScroller,exports.default=m;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});exports.default={name:"zh-cn",plus:{datepicker:{date:"请选择日期",dates:"请选择日期",week:"请选择周",month:"请选择月份",months:"请选择月份",year:"请选择年份",years:"请选择年份",startDatePlaceholder:"请选择开始日期",endDatePlaceholder:"请选择结束日期",datetime:"请选择日期时间",startMonthPlaceholder:"请选择开始月份",endMonthPlaceholder:"请选择结束月份",startTimePlaceholder:"请选择开始时间",endTimePlaceholder:"请选择结束时间",shortcutsDate:{today:"今天",yesterday:"昨天",lastWeek:"一周前"},shortcutsDaterange:{pastWeek:"最近一周",pastMonth:"最近一个月",pastThreeMonths:"最近三个月"},shortcutsMonthrange:{thisMonth:"本月",thisYear:"今年至今",pastSixMonths:"最近六个月"},shortcutsDatetime:{today:"今天",yesterday:"昨天",lastWeek:"一周前"},shortcutsDatetimerange:{pastWeek:"最近一周",pastMonth:"最近一个月",pastThreeMonths:"最近三个月"}},form:{pleaseEnter:"请输入",pleaseSelect:"请选择"},input:{placeholder:"请输入",appendTitle:"元",validatePhone:"请输入正确的手机号码",validateIdCard:"请输入正确的身份证号码",validateInteger:"请输入正确的整数",format:"请输入正确的",amount:"金额",numbers:"数字",digitUppercase:"请输入正确的金额格式",validateError:"请输入正确的格式",escaped:{0:"角",1:"分",2:"零",3:"壹",4:"贰",5:"叁",6:"肆",7:"伍",8:"陆",9:"柒",10:"捌",11:"玖",12:"元",13:"万",14:"亿",15:"兆",16:"拾",17:"佰",18:"仟",19:"欠",20:"整"}},moduleForm:{save:"保存",back:"返回"},search:{searchText:"查询",resetText:"重置",expand:"展开",retract:"收起",pleaseEnter:"请输入",pleaseSelect:"请选择",popoverAttrs:{showTxt:"更多",title:"所有条件",allTxt:"全选",reverseTxt:"反选",clearTxt:"清空"}},select:{selectAllTxt:"全选"},selectIcon:{placeholder:"请选择图标",dialogTitle:"请选择图标",searchPlaceholder:"搜索图标",emptyDescription:"未搜索到您要找的图标"},copy:{copySuccess:"复制成功",copyFail:"复制失败",invalidCopyContent:"无效的复制内容"},selectTable:{searchBtnTxt:"关闭下拉框",radioTxt:"单选",loadingTxt:"加载中..."},stepWizard:{lastBtnTitle:"完成"},table:{columnBind:{btnTxt:"列设置",title:"列设置"},fistColumn:{label:"序号",radio:"单选"},operator:{label:"操作",more:"更多",sum:"当页合计",total:"合计",allSum:"全部合计"},singleEdit:{tipText:"单击可编辑"},pleaseEnter:"请输入",pleaseSelect:"请选择",loadingTxt:"加载中...",saveBtnTxt:"保存",dragTxt:"拖动",density:"密度",default:"默认",loose:"宽松",compact:"紧凑"}}};
2
2
  //# sourceMappingURL=index238.cjs.map