@cldemo/ui-kit 1.0.9 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/COMPONENT_CATALOG.md +2 -2
  2. package/buildLibs/all/index.cjs +2 -5
  3. package/buildLibs/all/index.css +1 -0
  4. package/buildLibs/all/index.js +82 -6
  5. package/buildLibs/mobile/index.cjs +2 -5
  6. package/buildLibs/mobile/index.css +1 -0
  7. package/buildLibs/mobile/index.js +50 -6
  8. package/buildLibs/utils/Element/ClBadge.d.ts +3 -0
  9. package/buildLibs/utils/Element/ClBreadcrumb.d.ts +3 -0
  10. package/buildLibs/utils/Element/ClButton.d.ts +3 -0
  11. package/buildLibs/utils/Element/ClCallout.d.ts +3 -0
  12. package/buildLibs/utils/Element/ClCard.d.ts +3 -0
  13. package/buildLibs/utils/Element/ClCardColor.d.ts +3 -0
  14. package/buildLibs/utils/Element/ClCheckbox.d.ts +3 -0
  15. package/buildLibs/utils/Element/ClCheckboxOne.cjs +2 -0
  16. package/buildLibs/utils/Element/ClCheckboxOne.cjs.map +1 -0
  17. package/buildLibs/utils/Element/ClCheckboxOne.d.ts +3 -0
  18. package/buildLibs/utils/Element/ClCheckboxOne.js +5 -0
  19. package/buildLibs/utils/Element/ClCheckboxOne.js.map +1 -0
  20. package/buildLibs/utils/Element/ClClipboard.d.ts +3 -0
  21. package/buildLibs/utils/Element/ClCollapse.d.ts +3 -0
  22. package/buildLibs/utils/Element/ClCountDown.d.ts +3 -0
  23. package/buildLibs/utils/Element/ClCountUp.d.ts +3 -0
  24. package/buildLibs/utils/Element/ClCropper.d.ts +3 -0
  25. package/buildLibs/utils/Element/ClDarg.d.ts +3 -0
  26. package/buildLibs/utils/Element/ClDivider.d.ts +3 -0
  27. package/buildLibs/utils/Element/ClEllipsis.d.ts +3 -0
  28. package/buildLibs/utils/Element/ClEmpty.d.ts +3 -0
  29. package/buildLibs/utils/Element/ClForm.d.ts +3 -0
  30. package/buildLibs/utils/Element/ClFormGroup.d.ts +3 -0
  31. package/buildLibs/utils/Element/ClFormValidate.cjs +2 -0
  32. package/buildLibs/utils/Element/ClFormValidate.cjs.map +1 -0
  33. package/buildLibs/utils/Element/ClFormValidate.d.ts +3 -0
  34. package/buildLibs/utils/Element/ClFormValidate.js +5 -0
  35. package/buildLibs/utils/Element/ClFormValidate.js.map +1 -0
  36. package/buildLibs/utils/Element/ClIconFont.d.ts +3 -0
  37. package/buildLibs/utils/Element/ClImage.cjs +1 -1
  38. package/buildLibs/utils/Element/ClImage.d.ts +3 -0
  39. package/buildLibs/utils/Element/ClImage.js +1 -1
  40. package/buildLibs/utils/Element/ClInput.d.ts +3 -0
  41. package/buildLibs/utils/Element/ClInputCaptcha.d.ts +3 -0
  42. package/buildLibs/utils/Element/ClInputNumber.d.ts +3 -0
  43. package/buildLibs/utils/Element/ClInputNumberStepper.d.ts +3 -0
  44. package/buildLibs/utils/Element/ClInputPassword.d.ts +3 -0
  45. package/buildLibs/utils/Element/ClInputSearch.d.ts +3 -0
  46. package/buildLibs/utils/Element/ClInputTextarea.d.ts +3 -0
  47. package/buildLibs/utils/Element/ClLink.d.ts +3 -0
  48. package/buildLibs/utils/Element/ClLoad.d.ts +3 -0
  49. package/buildLibs/utils/Element/ClLoadFullCenter.cjs +2 -0
  50. package/buildLibs/utils/Element/ClLoadFullCenter.cjs.map +1 -0
  51. package/buildLibs/utils/Element/ClLoadFullCenter.css +1 -0
  52. package/buildLibs/utils/Element/ClLoadFullCenter.d.ts +3 -0
  53. package/buildLibs/utils/Element/ClLoadFullCenter.js +45 -0
  54. package/buildLibs/utils/Element/ClLoadFullCenter.js.map +1 -0
  55. package/buildLibs/utils/Element/ClLoadIng.cjs +2 -0
  56. package/buildLibs/utils/Element/ClLoadIng.cjs.map +1 -0
  57. package/buildLibs/utils/Element/ClLoadIng.d.ts +3 -0
  58. package/buildLibs/utils/Element/ClLoadIng.js +5 -0
  59. package/buildLibs/utils/Element/ClLoadIng.js.map +1 -0
  60. package/buildLibs/utils/Element/ClLoadScreen.d.ts +3 -0
  61. package/buildLibs/utils/Element/ClLoadWarp.cjs +2 -0
  62. package/buildLibs/utils/Element/ClLoadWarp.cjs.map +1 -0
  63. package/buildLibs/utils/Element/ClLoadWarp.css +1 -0
  64. package/buildLibs/utils/Element/ClLoadWarp.d.ts +3 -0
  65. package/buildLibs/utils/Element/ClLoadWarp.js +53 -0
  66. package/buildLibs/utils/Element/ClLoadWarp.js.map +1 -0
  67. package/buildLibs/utils/Element/ClModal.d.ts +3 -0
  68. package/buildLibs/utils/Element/ClOverlay.d.ts +3 -0
  69. package/buildLibs/utils/Element/ClProgress.d.ts +3 -0
  70. package/buildLibs/utils/Element/ClRadio.d.ts +3 -0
  71. package/buildLibs/utils/Element/ClRadioOne.cjs +2 -0
  72. package/buildLibs/utils/Element/ClRadioOne.cjs.map +1 -0
  73. package/buildLibs/utils/Element/ClRadioOne.d.ts +3 -0
  74. package/buildLibs/utils/Element/ClRadioOne.js +5 -0
  75. package/buildLibs/utils/Element/ClRadioOne.js.map +1 -0
  76. package/buildLibs/utils/Element/ClSlider.d.ts +3 -0
  77. package/buildLibs/utils/Element/ClSwitchery.d.ts +3 -0
  78. package/buildLibs/utils/Element/ClTags.d.ts +3 -0
  79. package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs +2 -0
  80. package/buildLibs/utils/Element/ClTransitionSlideupdown.cjs.map +1 -0
  81. package/buildLibs/utils/Element/ClTransitionSlideupdown.d.ts +3 -0
  82. package/buildLibs/utils/Element/ClTransitionSlideupdown.js +5 -0
  83. package/buildLibs/utils/Element/ClTransitionSlideupdown.js.map +1 -0
  84. package/buildLibs/utils/Element/ClWaterfall.d.ts +3 -0
  85. package/buildLibs/utils/Element/ClWaterfallImage.cjs +2 -0
  86. package/buildLibs/utils/Element/ClWaterfallImage.cjs.map +1 -0
  87. package/buildLibs/utils/Element/ClWaterfallImage.css +1 -0
  88. package/buildLibs/utils/Element/ClWaterfallImage.d.ts +3 -0
  89. package/buildLibs/utils/Element/ClWaterfallImage.js +48 -0
  90. package/buildLibs/utils/Element/ClWaterfallImage.js.map +1 -0
  91. package/buildLibs/utils/Mobile/ClActionBar.d.ts +3 -0
  92. package/buildLibs/utils/Mobile/ClActionSheet.d.ts +3 -0
  93. package/buildLibs/utils/Mobile/ClAreaM.d.ts +3 -0
  94. package/buildLibs/utils/Mobile/ClBackTop.d.ts +3 -0
  95. package/buildLibs/utils/Mobile/ClBanner.cjs +1 -1
  96. package/buildLibs/utils/Mobile/ClBanner.d.ts +3 -0
  97. package/buildLibs/utils/Mobile/ClBanner.js +1 -1
  98. package/buildLibs/utils/Mobile/ClCalendarM.d.ts +3 -0
  99. package/buildLibs/utils/Mobile/ClCell.d.ts +3 -0
  100. package/buildLibs/utils/Mobile/ClCellSwipe.d.ts +3 -0
  101. package/buildLibs/utils/Mobile/ClCodeLegendM.d.ts +3 -0
  102. package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs +1 -1
  103. package/buildLibs/utils/Mobile/ClDropdownMenuM.cjs.map +1 -1
  104. package/buildLibs/utils/Mobile/ClDropdownMenuM.d.ts +3 -0
  105. package/buildLibs/utils/Mobile/ClDropdownMenuM.js +13 -12
  106. package/buildLibs/utils/Mobile/ClDropdownMenuM.js.map +1 -1
  107. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs +2 -0
  108. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.cjs.map +1 -0
  109. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.d.ts +3 -0
  110. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js +160 -0
  111. package/buildLibs/utils/Mobile/ClDropdownMenuMItem.js.map +1 -0
  112. package/buildLibs/utils/Mobile/ClFloatingBubble.d.ts +3 -0
  113. package/buildLibs/utils/Mobile/ClFloatingPanel.d.ts +3 -0
  114. package/buildLibs/utils/Mobile/ClGrid.d.ts +3 -0
  115. package/buildLibs/utils/Mobile/ClHighlightM.d.ts +3 -0
  116. package/buildLibs/utils/Mobile/ClIndexBar.d.ts +3 -0
  117. package/buildLibs/utils/Mobile/ClInputOtp.d.ts +3 -0
  118. package/buildLibs/utils/Mobile/ClNavBar.d.ts +3 -0
  119. package/buildLibs/utils/Mobile/ClNoticeBar.d.ts +3 -0
  120. package/buildLibs/utils/Mobile/ClNotifyM.d.ts +3 -0
  121. package/buildLibs/utils/Mobile/ClNumberKeyboard.d.ts +3 -0
  122. package/buildLibs/utils/Mobile/ClPicker.cjs +1 -1
  123. package/buildLibs/utils/Mobile/ClPicker.d.ts +3 -0
  124. package/buildLibs/utils/Mobile/ClPicker.js +1 -1
  125. package/buildLibs/utils/Mobile/ClPickerCascader.d.ts +3 -0
  126. package/buildLibs/utils/Mobile/ClPickerDate.cjs +1 -1
  127. package/buildLibs/utils/Mobile/ClPickerDate.d.ts +3 -0
  128. package/buildLibs/utils/Mobile/ClPickerDate.js +1 -1
  129. package/buildLibs/utils/Mobile/ClPickerTime.cjs +1 -1
  130. package/buildLibs/utils/Mobile/ClPickerTime.d.ts +3 -0
  131. package/buildLibs/utils/Mobile/ClPickerTime.js +1 -1
  132. package/buildLibs/utils/Mobile/ClPopup.d.ts +3 -0
  133. package/buildLibs/utils/Mobile/ClPullToRefresh.cjs +1 -1
  134. package/buildLibs/utils/Mobile/ClPullToRefresh.d.ts +3 -0
  135. package/buildLibs/utils/Mobile/ClPullToRefresh.js +1 -1
  136. package/buildLibs/utils/Mobile/ClRate.d.ts +3 -0
  137. package/buildLibs/utils/Mobile/ClScrollCard.cjs +1 -1
  138. package/buildLibs/utils/Mobile/ClScrollCard.d.ts +3 -0
  139. package/buildLibs/utils/Mobile/ClScrollCard.js +1 -1
  140. package/buildLibs/utils/Mobile/ClShareSheet.d.ts +3 -0
  141. package/buildLibs/utils/Mobile/ClSidebar.d.ts +3 -0
  142. package/buildLibs/utils/Mobile/ClSidebarSelect.d.ts +3 -0
  143. package/buildLibs/utils/Mobile/ClSignature.d.ts +3 -0
  144. package/buildLibs/utils/Mobile/ClSteps.d.ts +3 -0
  145. package/buildLibs/utils/Mobile/ClSwipe.d.ts +3 -0
  146. package/buildLibs/utils/Mobile/ClTabM.d.ts +3 -0
  147. package/buildLibs/utils/Mobile/ClTabbar.d.ts +3 -0
  148. package/buildLibs/utils/Mobile/ClToast.d.ts +3 -0
  149. package/buildLibs/utils/Mobile/ClWatermark.d.ts +3 -0
  150. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js} +1 -1
  151. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BPgunUb2.js.map → Index.vue_vue_type_script_setup_true_lang-6KT1IHDu.js.map} +1 -1
  152. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js +71 -0
  153. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yZtW91.js.map +1 -0
  154. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js} +1 -1
  155. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-gtDsWrhd.js.map → Index.vue_vue_type_script_setup_true_lang-BDPkmgGP.js.map} +1 -1
  156. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js} +1 -1
  157. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D_IwyxiV.js.map → Index.vue_vue_type_script_setup_true_lang-Bnjm8vi-.js.map} +1 -1
  158. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js} +1 -1
  159. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Cpb9rd-y.js.map → Index.vue_vue_type_script_setup_true_lang-Bs8FGIQa.js.map} +1 -1
  160. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js} +1 -1
  161. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-hm75HKxP.js.map → Index.vue_vue_type_script_setup_true_lang-C7FRB7fV.js.map} +1 -1
  162. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js} +1 -1
  163. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Xe4BacqD.js.map → Index.vue_vue_type_script_setup_true_lang-CFzimlB_.js.map} +1 -1
  164. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js} +1 -1
  165. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bp39ENoP.js.map → Index.vue_vue_type_script_setup_true_lang-CGeXNRtY.js.map} +1 -1
  166. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js} +1 -1
  167. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-4NloX3Qk.js.map → Index.vue_vue_type_script_setup_true_lang-CSV9UWJx.js.map} +1 -1
  168. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js} +1 -1
  169. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CRJ3-pTH.js.map → Index.vue_vue_type_script_setup_true_lang-ChE1tZwr.js.map} +1 -1
  170. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js +2 -0
  171. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CjgtxJ6a.js.map +1 -0
  172. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js} +1 -1
  173. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-N1GhNa1r.js.map → Index.vue_vue_type_script_setup_true_lang-CpuYxzDD.js.map} +1 -1
  174. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js +2 -0
  175. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CumTbPny.js.map +1 -0
  176. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js} +2 -2
  177. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-NdqbsOrG.js.map → Index.vue_vue_type_script_setup_true_lang-CvF_iIQS.js.map} +1 -1
  178. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js +266 -0
  179. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CxVAWr6w.js.map +1 -0
  180. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js} +1 -1
  181. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DgMvq-RQ.js.map → Index.vue_vue_type_script_setup_true_lang-DFKjhT_C.js.map} +1 -1
  182. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js} +2 -2
  183. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-D22m4oiN.js.map → Index.vue_vue_type_script_setup_true_lang-DdWmaT86.js.map} +1 -1
  184. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js} +1 -1
  185. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BtoovAWs.js.map → Index.vue_vue_type_script_setup_true_lang-DxHfO8TH.js.map} +1 -1
  186. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js} +2 -2
  187. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-CW63TdvW.js.map → Index.vue_vue_type_script_setup_true_lang-HwprdMv4.js.map} +1 -1
  188. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js} +1 -1
  189. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BLp0owhs.js.map → Index.vue_vue_type_script_setup_true_lang-IGgTDykL.js.map} +1 -1
  190. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js} +1 -1
  191. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BKr3_J68.js.map → Index.vue_vue_type_script_setup_true_lang-Lwl-M8kR.js.map} +1 -1
  192. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js} +1 -1
  193. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Dxb_K2w0.js.map → Index.vue_vue_type_script_setup_true_lang-gsnpWNek.js.map} +1 -1
  194. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js} +1 -1
  195. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-EGKo8cIw.js.map → Index.vue_vue_type_script_setup_true_lang-huUkL0wY.js.map} +1 -1
  196. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js} +1 -1
  197. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BFSRH9yz.js.map → Index.vue_vue_type_script_setup_true_lang-in1ZSapu.js.map} +1 -1
  198. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js} +2 -2
  199. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C8HQVerr.js.map → Index.vue_vue_type_script_setup_true_lang-r6RBdV4y.js.map} +1 -1
  200. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js} +1 -1
  201. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-DvzXfKhj.js.map → Index.vue_vue_type_script_setup_true_lang-tTHdssVu.js.map} +1 -1
  202. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js} +1 -1
  203. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-BxxIDGfR.js.map → Index.vue_vue_type_script_setup_true_lang-tjRv0vNR.js.map} +1 -1
  204. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js} +1 -1
  205. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-Bk2WD0GS.js.map → Index.vue_vue_type_script_setup_true_lang-yahz6Ej5.js.map} +1 -1
  206. package/buildLibs/utils/Shared/Index24.css +1 -1
  207. package/buildLibs/utils/Shared/Index25.css +1 -1
  208. package/buildLibs/utils/Shared/Index26.css +1 -1
  209. package/buildLibs/utils/Shared/Index27.css +1 -1
  210. package/buildLibs/utils/Shared/Index28.css +1 -1
  211. package/buildLibs/utils/Shared/Index29.css +1 -1
  212. package/buildLibs/utils/Shared/Index30.css +1 -1
  213. package/buildLibs/utils/Shared/Index31.css +1 -1
  214. package/buildLibs/utils/Shared/Index32.css +1 -1
  215. package/buildLibs/utils/Shared/Index33.css +1 -1
  216. package/buildLibs/utils/Shared/Index34.css +1 -1
  217. package/buildLibs/utils/Shared/Index35.css +1 -1
  218. package/buildLibs/utils/Shared/Index36.css +1 -1
  219. package/buildLibs/utils/Shared/Index37.css +1 -0
  220. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js +2 -0
  221. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-CR1t8XZl.js.map +1 -0
  222. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js +148 -0
  223. package/buildLibs/utils/Shared/One.vue_vue_type_script_setup_true_lang-oBeFlRzi.js.map +1 -0
  224. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js +406 -0
  225. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-Bquk40ES.js.map +1 -0
  226. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js +2 -0
  227. package/buildLibs/utils/Shared/Validate.vue_vue_type_script_setup_true_lang-CAmKX5pn.js.map +1 -0
  228. package/buildLibs/utils/Shared/{Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js → use-CKNkvmW4.js} +78 -141
  229. package/buildLibs/utils/Shared/use-CKNkvmW4.js.map +1 -0
  230. package/buildLibs/utils/Shared/use-D0Yu2Dbn.js +2 -0
  231. package/buildLibs/utils/Shared/use-D0Yu2Dbn.js.map +1 -0
  232. package/buildLibs/utils/Web/ClAnchorNav.d.ts +3 -0
  233. package/buildLibs/utils/Web/ClCalendar.d.ts +3 -0
  234. package/buildLibs/utils/Web/ClCodeLegend.d.ts +3 -0
  235. package/buildLibs/utils/Web/ClColorpicker.d.ts +3 -0
  236. package/buildLibs/utils/Web/ClCropperPreview.cjs +1 -1
  237. package/buildLibs/utils/Web/ClCropperPreview.d.ts +3 -0
  238. package/buildLibs/utils/Web/ClCropperPreview.js +2 -2
  239. package/buildLibs/utils/Web/ClDatetime.cjs +1 -1
  240. package/buildLibs/utils/Web/ClDatetime.d.ts +3 -0
  241. package/buildLibs/utils/Web/ClDatetime.js +1 -1
  242. package/buildLibs/utils/Web/ClDropdownMenu.d.ts +3 -0
  243. package/buildLibs/utils/Web/ClDropdownMenuItem.cjs +2 -0
  244. package/buildLibs/utils/Web/ClDropdownMenuItem.cjs.map +1 -0
  245. package/buildLibs/utils/Web/ClDropdownMenuItem.css +1 -0
  246. package/buildLibs/utils/Web/ClDropdownMenuItem.d.ts +3 -0
  247. package/buildLibs/utils/Web/ClDropdownMenuItem.js +72 -0
  248. package/buildLibs/utils/Web/ClDropdownMenuItem.js.map +1 -0
  249. package/buildLibs/utils/Web/ClDropdownPopup.d.ts +3 -0
  250. package/buildLibs/utils/Web/ClEcharts.cjs +1 -1
  251. package/buildLibs/utils/Web/ClEcharts.d.ts +3 -0
  252. package/buildLibs/utils/Web/ClEcharts.js +1 -1
  253. package/buildLibs/utils/Web/ClEchartsLineAxisTag.cjs +1 -1
  254. package/buildLibs/utils/Web/ClEchartsLineAxisTag.d.ts +3 -0
  255. package/buildLibs/utils/Web/ClEchartsLineAxisTag.js +1 -1
  256. package/buildLibs/utils/Web/ClFileUpload.cjs +1 -1
  257. package/buildLibs/utils/Web/ClFileUpload.d.ts +3 -0
  258. package/buildLibs/utils/Web/ClFileUpload.js +1 -1
  259. package/buildLibs/utils/Web/ClFramePhone.d.ts +3 -0
  260. package/buildLibs/utils/Web/ClInputTag.cjs +1 -1
  261. package/buildLibs/utils/Web/ClInputTag.d.ts +3 -0
  262. package/buildLibs/utils/Web/ClInputTag.js +1 -1
  263. package/buildLibs/utils/Web/ClPaginate.cjs +1 -1
  264. package/buildLibs/utils/Web/ClPaginate.d.ts +3 -0
  265. package/buildLibs/utils/Web/ClPaginate.js +1 -1
  266. package/buildLibs/utils/Web/ClPortlet.d.ts +3 -0
  267. package/buildLibs/utils/Web/ClPreviewExample.cjs +1 -1
  268. package/buildLibs/utils/Web/ClPreviewExample.d.ts +3 -0
  269. package/buildLibs/utils/Web/ClPreviewExample.js +1 -1
  270. package/buildLibs/utils/Web/ClScrollXFence.cjs +1 -1
  271. package/buildLibs/utils/Web/ClScrollXFence.d.ts +3 -0
  272. package/buildLibs/utils/Web/ClScrollXFence.js +1 -1
  273. package/buildLibs/utils/Web/ClSelect.cjs +1 -1
  274. package/buildLibs/utils/Web/ClSelect.d.ts +3 -0
  275. package/buildLibs/utils/Web/ClSelect.js +1 -1
  276. package/buildLibs/utils/Web/ClSelectCascade.cjs +1 -1
  277. package/buildLibs/utils/Web/ClSelectCascade.d.ts +3 -0
  278. package/buildLibs/utils/Web/ClSelectCascade.js +1 -1
  279. package/buildLibs/utils/Web/ClSelectTag.cjs +1 -1
  280. package/buildLibs/utils/Web/ClSelectTag.d.ts +3 -0
  281. package/buildLibs/utils/Web/ClSelectTag.js +1 -1
  282. package/buildLibs/utils/Web/ClSelectTree.cjs +1 -1
  283. package/buildLibs/utils/Web/ClSelectTree.d.ts +3 -0
  284. package/buildLibs/utils/Web/ClSelectTree.js +1 -1
  285. package/buildLibs/utils/Web/ClSelectmove.d.ts +3 -0
  286. package/buildLibs/utils/Web/ClSidemenu.d.ts +3 -0
  287. package/buildLibs/utils/Web/ClTable.cjs +1 -1
  288. package/buildLibs/utils/Web/ClTable.cjs.map +1 -1
  289. package/buildLibs/utils/Web/ClTable.d.ts +3 -0
  290. package/buildLibs/utils/Web/ClTable.js +1081 -1218
  291. package/buildLibs/utils/Web/ClTable.js.map +1 -1
  292. package/buildLibs/utils/Web/ClTableEdit.d.ts +3 -0
  293. package/buildLibs/utils/Web/ClTableSimple.d.ts +3 -0
  294. package/buildLibs/utils/Web/ClTabs.cjs +1 -1
  295. package/buildLibs/utils/Web/ClTabs.d.ts +3 -0
  296. package/buildLibs/utils/Web/ClTabs.js +1 -1
  297. package/buildLibs/utils/Web/ClTree.cjs +1 -1
  298. package/buildLibs/utils/Web/ClTree.d.ts +3 -0
  299. package/buildLibs/utils/Web/ClTree.js +1 -1
  300. package/buildLibs/utils/Web/ClWeekhour.d.ts +3 -0
  301. package/buildLibs/utils/Web/ClXeditable.cjs +1 -1
  302. package/buildLibs/utils/Web/ClXeditable.cjs.map +1 -1
  303. package/buildLibs/utils/Web/ClXeditable.d.ts +3 -0
  304. package/buildLibs/utils/Web/ClXeditable.js +33 -32
  305. package/buildLibs/utils/Web/ClXeditable.js.map +1 -1
  306. package/buildLibs/web/index.cjs +2 -5
  307. package/buildLibs/web/index.css +1 -0
  308. package/buildLibs/web/index.js +76 -6
  309. package/docs/components/Element/Input.md +1 -1
  310. package/docs/components/Element/InputNumber.md +1 -1
  311. package/package.json +21 -8
  312. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js +0 -663
  313. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-B-yxIx8F.js.map +0 -1
  314. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-C9mOHVoE.js.map +0 -1
  315. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js +0 -2
  316. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-CcOk4kyd.js.map +0 -1
  317. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js +0 -2
  318. package/buildLibs/utils/Shared/Index.vue_vue_type_script_setup_true_lang-DtZgYjSl.js.map +0 -1
  319. package/buildLibs/utils/Shared/Video-BV0YLYT2.js +0 -114
  320. package/buildLibs/utils/Shared/Video-BV0YLYT2.js.map +0 -1
  321. package/buildLibs/utils/Shared/Video-c3jHJSxl.js +0 -2
  322. package/buildLibs/utils/Shared/Video-c3jHJSxl.js.map +0 -1
  323. package/buildLibs/utils/Shared/Video.css +0 -1
  324. package/buildLibs/utils/Web/ClDropdownMenuM.css +0 -1
  325. package/buildLibs/utils/Web/ClPreview.cjs +0 -2
  326. package/buildLibs/utils/Web/ClPreview.cjs.map +0 -1
  327. package/buildLibs/utils/Web/ClPreview.css +0 -1
  328. package/buildLibs/utils/Web/ClPreview.js +0 -353
  329. package/buildLibs/utils/Web/ClPreview.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ClTable.cjs","sources":["../../../src/libs/Web/Table/TipIcon.ts","../../../src/libs/Web/Table/Th.vue","../../../src/libs/Web/Table/Td.vue","../../../src/libs/Web/Table/Head.vue","../../../src/libs/Element/Radio/One.vue","../../../src/libs/Web/Table/TdChecked.vue","../../../src/libs/Web/Table/Body.vue","../../../src/libs/Web/Table/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\n\nexport interface TipIconInfo {\n name: string;\n className: string;\n}\n\n// 解析 tipIcon 配置为图标渲染信息:\n// clIcon- 前缀 → 内置图标通道(前缀后非纯图标名回退默认);clicon 大小写错误回退默认;\n// 裸内置图标名自动补前缀走内置通道;其余按第三方自定义类名处理\nexport const getTipIconInfo = (tipIcon: string | undefined): TipIconInfo => {\n if (CommonBase.isNonEmptyString(tipIcon)) {\n if (tipIcon.indexOf('clIcon-') === 0) {\n // clIcon- 前缀:去前缀走内置图标通道,前缀后非纯图标名(含空格等)回退默认\n const name = tipIcon.substring('clIcon-'.length);\n if (CommonBase.isNonEmptyString(name) && /^[a-zA-Z0-9-]+$/.test(name)) {\n return { name, className: '' };\n }\n return { name: 'question-circle', className: '' };\n }\n if (/^clicon/i.test(tipIcon)) {\n // clIcon- 前缀写错(漏 -、大写):回退默认图标\n return { name: 'question-circle', className: '' };\n }\n if (/^[a-zA-Z0-9-]+$/.test(tipIcon)) {\n // 裸内置图标名(未加 clIcon- 前缀):自动补前缀走内置通道\n return { name: tipIcon, className: '' };\n }\n // 第三方自定义类名(如 fa fa-star)\n return { name: '', className: tipIcon };\n }\n return { name: 'question-circle', className: '' };\n};\n","<template>\n <th\n v-if=\"CommonBase.isBoolean(thInfo?.visible) ? thInfo.visible : true\"\n :class=\"clsTh\"\n :style=\"styTh\"\n scope=\"col\"\n :aria-sort=\"optAriaSort\"\n >\n <span\n class=\"th-title\"\n @click=\"onClickOrderBy\"\n >\n <slot />\n </span>\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(thInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"th-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: thInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n <i\n v-if=\"optSortType !== ''\"\n class=\"tr-sort-icon\"\n aria-hidden=\"true\"\n @click=\"onClickOrderBy\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTh',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n thIndex: {\n type: Number,\n default: 0, // desc: 表头单元格索引\n },\n thInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 表头配置信息\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickOrderBy: (_thInfo: ColumnsInfo, _thIndex: number, _sortType: string) => true, // desc: 点击排序事件\n});\n\n// slots: default 表头内容\n\nconst optTipIcon = computed(() => getTipIconInfo(props.thInfo?.tipIcon));\n\n// thInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象;\n// 非对象 truthy 输入(字符串/数字)同样归一为 {}——原始类型取 .sort/.width 等属性语义异常(空表头误判可排序);\n// 数组是 isObject=true 但语义上非列配置,保持透传不归一(.sort 命中原生数组方法不崩溃,仅属性访问 undefined)\nconst optThInfo = computed(() =>\n CommonBase.isObject(props.thInfo) && !CommonBase.isEmpty(props.thInfo)\n ? (props.thInfo as ColumnsInfo)\n : ({} as ColumnsInfo),\n);\n\n// 当前列可排序判定(isOrder 且该列 sort 未显式禁用;空 sort 视为 true 默认可排)。\n// 不受 disabled 影响:disabled 仍保留排序图标与激活态展示,仅拦截交互(见 optSortInteractive)\nconst optSortable = computed(() => {\n if (!props.isOrder) {\n return false;\n }\n // columns 含 null/空对象项(配置错误输入)时前置返回 false:空表头不渲染排序交互,\n // 与 Index._analysisColumns/_initOrderData 跳过 null 列的口径对齐(否则点击空表头激活别的列)\n // 守卫用归一后的 optThInfo(非对象 truthy 归一为 {} 后同样拦截,与判定谓词一致)\n if (CommonBase.isEmpty(optThInfo.value)) {\n return false;\n }\n return CommonBase.isEmpty(optThInfo.value.sort) ? true : optThInfo.value.sort === true;\n});\n\n// 当前列是否允许排序交互:具备排序能力且组件未禁用(disabled 时拦截点击)\nconst optSortInteractive = computed(() => optSortable.value && !props.disabled);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.thInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\n// 当前列排序状态:'asc' | 'desc'(激活排序)| 'none'(可排未激活)| ''(不可排)\nconst optSortType = computed(() => {\n if (!optSortable.value) {\n return '';\n }\n const orderSort = CommonBase.isEmpty(props.orderSort) ? [] : props.orderSort;\n if (orderSort.length > 0 && orderSort[0] === props.thIndex) {\n // length===1(仅索引未选方向)→ 默认 desc 激活;length===2 但方向非法 / length>2 畸形元组 → 不静默激活,返回 'none'\n return orderSort.length === 2\n ? orderSort[1] === 'asc' || orderSort[1] === 'desc'\n ? orderSort[1]\n : 'none'\n : orderSort.length === 1\n ? 'desc'\n : 'none';\n }\n return 'none';\n});\n\nconst optAriaSort = computed(() => {\n if (optSortType.value === 'asc') {\n return 'ascending';\n }\n if (optSortType.value === 'desc') {\n return 'descending';\n }\n if (optSortType.value === 'none') {\n return 'none';\n }\n return undefined;\n});\n\nconst clsTh = computed(() => {\n const cls: Record<string, boolean> = {};\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n cls[`${props.widthClassPrefix}${thInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${thInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['th-hidden'] =\n (props.fixedLeftIndex > -1 && props.thIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.thIndex < props.fixedRightIndex);\n }\n if (optSortable.value) {\n cls['th-sort'] = true;\n cls['sort-none'] = true;\n cls['th-sort-near'] = thInfo.sortNear === true;\n // 激活列判定已收敛至 optSortType(asc/desc 当且仅当 orderSort[0] === thIndex),激活时覆盖 sort-none\n const activeSort = optSortType.value;\n if (activeSort === 'asc' || activeSort === 'desc') {\n cls[`sort-${activeSort}`] = true;\n cls['sort-none'] = false;\n }\n }\n if (CommonBase.isNonEmptyString(thInfo.tipMsg)) {\n cls['th-tip'] = true;\n cls['th-tip-sideAlign'] = thInfo.tipSideAlign === true;\n }\n if (props.disabled) {\n cls['th-disabled'] = true;\n }\n if (CommonBase.isNonEmptyString(thInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], thInfo.textAlign)) {\n cls[`text-${thInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.className));\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.classTh));\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTh = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n sty.width = CommonBase.isFinite(Number(thInfo.width))\n ? `${Number(thInfo.width)}px`\n : `${thInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(thInfo.widthMin))\n ? `${Number(thInfo.widthMin)}px`\n : `${thInfo.widthMin}`;\n }\n return sty;\n});\n\nconst _emitClickOrderBy = (thInfo: ColumnsInfo, sortType: string) => {\n emit('onClickOrderBy', thInfo, props.thIndex, sortType);\n};\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n\nconst onClickOrderBy = () => {\n // disabled 时拦截排序(optSortInteractive=false),但保留排序图标展示\n if (optSortInteractive.value) {\n // 未激活('none')默认 desc,已激活翻转(orderSort 解析已收敛至 optSortType)\n const newSortType = optSortType.value === 'desc' ? 'asc' : 'desc';\n _emitClickOrderBy(optThInfo.value, newSortType);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"CommonBase.isBoolean(tdInfo?.visible) ? tdInfo.visible : true\"\n :class=\"clsTd\"\n :style=\"styTd\"\n >\n <slot />\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(tdInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"td-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: tdInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTd',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n tdIndex: {\n type: Number,\n default: 0, // desc: 单元格索引\n },\n tdInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 单元格配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n useType: {\n type: String,\n default: 'td', // desc: 使用类型 | enum: td, total\n validator: (value: string) => ['td', 'total'].indexOf(value) > -1,\n },\n});\n\n// slots: default 默认单元格内容\n\n// 提示图标:与 Th 侧同构,抽取至 TipIcon.ts 统一维护\nconst optTipIcon = computed(() => getTipIconInfo(props.tdInfo?.tipIcon));\n\n// tdInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象\nconst optTdInfo = computed(() =>\n CommonBase.isEmpty(props.tdInfo) ? ({} as ColumnsInfo) : props.tdInfo,\n);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.tdInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\nconst clsTd = computed(() => {\n const cls: Record<string, boolean> = {};\n const tdInfo = optTdInfo.value;\n\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n cls[`${props.widthClassPrefix}${tdInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${tdInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['td-hidden'] =\n (props.fixedLeftIndex > -1 && props.tdIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.tdIndex < props.fixedRightIndex);\n }\n if (props.isOrder) {\n const sort = CommonBase.isEmpty(tdInfo.sort) ? true : tdInfo.sort === true;\n if (sort) {\n cls['td-sort'] = true;\n cls['td-sort-near'] = tdInfo.sortNear === true;\n }\n }\n if (CommonBase.isNonEmptyString(tdInfo.tipMsg)) {\n cls['td-tip'] = true;\n cls['td-tip-sideAlign'] = tdInfo.tipSideAlign === true;\n }\n if (CommonBase.isNonEmptyString(tdInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], tdInfo.textAlign)) {\n cls[`text-${tdInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.className));\n if (props.useType === 'td') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTd));\n } else if (props.useType === 'total') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTotal));\n }\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTd = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const tdInfo = optTdInfo.value;\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n sty.width = CommonBase.isFinite(Number(tdInfo.width))\n ? `${Number(tdInfo.width)}px`\n : `${tdInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(tdInfo.widthMin))\n ? `${Number(tdInfo.widthMin)}px`\n : `${tdInfo.widthMin}`;\n }\n return sty;\n});\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n</script>\n","<template>\n <table\n :class=\"clsParent\"\n :style=\"styTable\"\n :aria-hidden=\"!CommonBase.isEmpty(fixedType)\"\n ref=\"refElTable\"\n >\n <thead>\n <tr>\n <th\n v-if=\"isShowRadio || isShowCheckbox\"\n :class=\"{ 'th-rc': true, 'th-hidden': fixedRightIndex > -1 }\"\n scope=\"col\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox && isShowCheckboxAll\"\n :forId=\"\n CommonBase.isNonEmptyString(keyIndex) ? `${keyIndex}_${fixedType}_cb_all` : undefined\n \"\n :value=\"checkboxAllValue\"\n :disabled=\"disabled\"\n @onChange=\"onSelectAll\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n <template\n v-for=\"(thInfo, thIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_head_th_${thIndex}`\"\n >\n <cl-table-th\n :thInfo=\"thInfo\"\n :thIndex=\"thIndex\"\n :isOrder=\"isOrder\"\n :disabled=\"disabled\"\n :orderSort=\"orderSort\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickOrderBy=\"onClickOrderBy\"\n >\n <template v-slot>\n <slot\n :name=\"`th_${thInfo?.data ?? ''}`\"\n :data=\"thInfo\"\n >\n <span>{{ optFunGetThValue(thInfo) }}</span>\n </slot>\n </template>\n </cl-table-th>\n </template>\n </tr>\n </thead>\n <tbody v-if=\"isShowTotal\">\n <tr\n :class=\"{\n 'tr-total': true,\n 'tr-hover': hoverIndex === NO_HOVER_TOTAL_INDEX,\n }\"\n @mouseenter=\"onHoverInTotal\"\n @mouseleave=\"onHoverOutTotal\"\n >\n <td v-if=\"isShowRadio || isShowCheckbox\" />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_total_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n useType=\"total\"\n >\n <template v-slot>\n <slot\n :name=\"`total_${tdInfo?.data ?? ''}`\"\n :data=\"totalInfo\"\n >{{ optFunGetTotalValue(totalInfo, tdInfo) }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </tbody>\n <template v-else></template>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClTableTh from './Th.vue';\nimport ClTableTd from './Td.vue';\nimport type { ColumnsInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableHead' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isShowTotal: {\n type: Boolean,\n default: false, // desc: 是否显示总计行\n },\n totalInfo: {\n type: Object as () => Record<string, any>,\n default: () => ({}), // desc: 总计数据信息\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引(99999999 = 总计行悬停哨兵,与 NO_HOVER_TOTAL_INDEX 契约一致)\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n checkboxAllValue: {\n type: Boolean,\n default: false, // desc: 全选状态\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right\n validator: (value: string) => ['', 'left', 'right'].indexOf(value) > -1,\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickAll: () => true, // desc: 点击全选事件\n onClickOrderBy: (_info: ColumnsInfo, _inx: number, _sortType: string) => true, // desc: 点击排序事件\n onHoverIn: (_index: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: th_{data} 列头自定义内容 | total_{data} 总计行单元格自定义内容\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n// 总计行悬停哨兵索引,与 Index 侧 hoverIndex 的隐式契约值(99999999 永不等于数据行索引)\nconst NO_HOVER_TOTAL_INDEX = 99999999;\n\nconst clsParent = computed(() => {\n const cls = {\n 'table-default': true,\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (CommonBase.isEmpty(props.fixedType)) {\n // fixedType isEmpty 判空:null/空串归非固定分支(外部传 null 时原 .length 写法崩溃)\n if (\n props.isUseScrollX &&\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式(对齐 Body 侧 styTable 口径)\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst optFunGetThValue = (info: ColumnsInfo | null) => {\n if (!info) {\n return '';\n }\n return CommonBase.isUndefined(info.title)\n ? CommonBase.isUndefined(info.data)\n ? ''\n : info.data\n : info.title;\n};\n\nconst optFunGetTdValue = (value: any, opt: ColumnsInfo | null) => {\n if (CommonBase.isUndefined(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// totalInfo 显式传 null 时守卫(type: Object 的 prop 校验放行 null,模板内直接取字段会崩溃;isUndefined 已覆盖 null)\nconst optFunGetTotalValue = (info: Record<string, any> | null, opt: ColumnsInfo | null) => {\n if (!info || !opt) {\n return '';\n }\n return optFunGetTdValue(info[opt.data], opt);\n};\n\n// isShowTotal 翻转 false 时总计行被 v-if 直接从 DOM 移除,浏览器对移除悬停中元素不保证补发 mouseleave\n// → watch 兜底主动重置悬停态。hoverIndex === NO_HOVER_TOTAL_INDEX 前置:仅总计行悬停哨兵残留时才补发,\n// 数据行悬停中翻转(如父组件单独清空 totalData)不连带清除行高亮(Index 侧 onHoverOutTr 无条件重置\n// hoverTrIndex/hoverTrElasticIndex 两字段且幂等,重复触发无害)\nwatch(\n () => props.isShowTotal,\n nv => {\n if (!nv && props.hoverIndex === NO_HOVER_TOTAL_INDEX) {\n emit('onHoverOut');\n }\n },\n);\n\nconst onSelectAll = () => {\n emit('onClickAll');\n};\n\nconst onClickOrderBy = (info: ColumnsInfo, inx: number, sortType: string) => {\n emit('onClickOrderBy', info, inx, sortType);\n};\n\nconst onHoverInTotal = () => {\n emit('onHoverIn', NO_HOVER_TOTAL_INDEX);\n};\n\nconst onHoverOutTotal = () => {\n emit('onHoverOut');\n};\n\nconst getOffsetHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.offsetHeight;\n};\n\n// 读取全选/单选列宽度(主表头场景契约;固定副本的 rc 列含 th-hidden 时返回隐藏列布局宽度而非 0)\nconst getRcWidth = () => {\n let w = 0;\n if (props.isShowRadio || props.isShowCheckbox) {\n if (refElTable.value) {\n const elRc = refElTable.value.querySelector('.th-rc');\n if (elRc) {\n w = elRc.clientWidth;\n }\n }\n }\n return w;\n};\n\nconst getPaddingLr = () => {\n let totalPadding = 0;\n if (!refElTable.value) {\n return totalPadding;\n }\n const elThs = refElTable.value.querySelectorAll('th:not(.th-rc)');\n for (let ti = 0; ti < elThs.length; ti++) {\n const thStyle = CommonElement.getStyle(elThs[ti]);\n const plRaw = parseFloat(thStyle.paddingLeft);\n const prRaw = parseFloat(thStyle.paddingRight);\n const pl = CommonBase.isFinite(plRaw) ? plRaw : 0;\n const pr = CommonBase.isFinite(prRaw) ? prRaw : 0;\n totalPadding += pl + pr;\n }\n return totalPadding;\n};\n\nconst getElTh = () => {\n return refElTable.value ? refElTable.value.querySelectorAll('th') : [];\n};\n\nconst getTotalHeight = () => {\n let h = 0;\n if (props.isShowTotal) {\n if (refElTable.value) {\n const elTotal = refElTable.value.querySelector('.tr-total');\n if (elTotal) {\n h = elTotal.clientHeight;\n }\n }\n }\n return h;\n};\n\nexport interface ClTableHeadExpose {\n getOffsetHeight: () => number;\n getRcWidth: () => number;\n getPaddingLr: () => number;\n getElTh: () => NodeListOf<HTMLTableHeaderCellElement> | [];\n getTotalHeight: () => number;\n}\n\ndefineExpose({\n getOffsetHeight,\n getRcWidth,\n getPaddingLr,\n getElTh,\n getTotalHeight,\n});\n</script>\n","<template>\n <div\n :class=\"clsParent\"\n :id=\"elId\"\n >\n <span>\n <span>\n <input\n type=\"radio\"\n :id=\"optForId\"\n :name=\"name\"\n :checked=\"value\"\n :disabled=\"disabled\"\n @click=\"onClick\"\n />\n <label :for=\"optForId\">\n <span\n v-if=\"icon && icon.length > 0\"\n v-cltooltip=\"{ html: label, className: 'tooltip-modal' }\"\n >\n <cl-icon-font :name=\"icon\"></cl-icon-font>\n </span>\n <template v-else> {{ label }}</template>\n </label>\n </span>\n <template v-if=\"tipMsg && tipMsg.length > 0\">\n <template v-if=\"tipMode === 'tooltip'\">\n <cl-icon-font\n :name=\"CommonBase.isNonEmptyString(props.tipIcon) ? undefined : 'question-circle'\"\n :className=\"CommonBase.isNonEmptyString(props.tipIcon) ? props.tipIcon : undefined\"\n class=\"radio-icon-tip\"\n v-cltooltip=\"{ html: tipMsg, className: 'tooltip-modal' }\"\n ></cl-icon-font>\n </template>\n <template v-else>\n <cl-icon-font\n :name=\"CommonBase.isNonEmptyString(props.tipIcon) ? undefined : 'question-circle'\"\n :className=\"CommonBase.isNonEmptyString(props.tipIcon) ? props.tipIcon : undefined\"\n class=\"radio-icon-tip\"\n @click.stop=\"onTipClick\"\n ></cl-icon-font>\n </template>\n </template>\n <template v-else></template>\n </span>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport './Index.css';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\n\n// defineOptions\ndefineOptions({\n name: 'ClRadioOne',\n directives: {\n cltooltip: tooltipDirectives,\n },\n});\n\n// props\nconst props = defineProps({\n id: {\n type: String,\n default: '', // desc: 组件实例唯一标识,用于多实例场景 DOM id 隔离\n },\n name: {\n type: String,\n default: '', // desc: 单选框 name 属性\n },\n value: {\n type: Boolean,\n default: false, // desc: 当前选中状态\n },\n className: {\n type: String,\n default: '', // desc: 自定义CSS类名\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n forId: {\n type: String,\n default: '', // desc: input 元素的 id 属性,为空时自动生成\n },\n label: {\n type: String,\n default: '', // desc: 单选项标签文本\n },\n icon: {\n type: String,\n default: '', // desc: 内置图标名称(如 edit),设置后以图标替代文本标签\n },\n tipMsg: {\n type: String,\n default: '', // desc: 提示信息文本\n },\n tipIcon: {\n type: String,\n default: '', // desc: 提示图标类名,为空时使用默认问号图标\n },\n tipMode: {\n type: String,\n default: 'tooltip', // desc: tipMsg 交互方式 | enum: tooltip, clickCallback\n validator: (value: string) => ['tooltip', 'clickCallback'].includes(value),\n },\n});\n\n// emit\nconst emit = defineEmits({\n 'update:value': (_value: boolean) => true, // desc: 选中状态变更时触发\n onChange: (_value: boolean) => true, // desc: 选中状态变更时触发\n onTipClick: () => true, // desc: tipMode 为 clickCallback 时,点击提示图标触发\n});\n\n// 常量 / 变量定义\nconst elId = props.id; // || `rdOne-${CommonBase.getRandom(8)}`\nconst optForId = computed(() =>\n CommonBase.isEmpty(props.forId)\n ? `rd_${props.name || ''}_${CommonBase.getRandom(8)}`\n : props.forId,\n);\n\n// computed\nconst clsParent = computed(() => {\n const cls: Record<string, boolean> = {\n 'panel-radioone': true,\n radio: true,\n 'radio-default': true,\n 'radio-inline': true,\n };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// 内部调用方法\nconst _emitChange = (value: boolean) => {\n emit('update:value', value);\n emit('onChange', value);\n};\n\n// 事件方法\nconst onTipClick = () => {\n emit('onTipClick');\n};\n\nconst onClick = (event: MouseEvent) => {\n const target = event.currentTarget as HTMLInputElement | null;\n if (target && target.checked) {\n _emitChange(true);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"isShowRadio || isShowCheckbox\"\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox\"\n :forId=\"optForIdCb\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <cl-radio-one\n v-else-if=\"isShowRadio\"\n :forId=\"optForIdRd\"\n :name=\"optForIdRd\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClRadioOne from '../../Element/Radio/One.vue';\nimport type { ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableTdChecked' });\n\n// 选中态依赖原生 click 冒泡到 tr.onClickTr 的 .th-rc 类名事件委托(Index 侧 _setSelectRc),勿在此添加 stopPropagation\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n value: {\n type: Boolean,\n default: false, // desc: 选中状态\n },\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选\n },\n keyIndex: String, // desc: 唯一键前缀\n info: {\n type: Object as PropType<ListInfo>,\n default: () => ({}), // desc: 数据项信息\n },\n});\n\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst optForIdCb = computed(() => _getForId('cb'));\n\nconst optForIdRd = computed(() => _getForId('rd'));\n\n// 严格 true 才选中:无论外部传 'false' 字符串(Vue 会 cast 为 false)还是其他非 true 值,严格判定均可防误选\nconst optIsChecked = computed(() => props.value === true);\n\nconst optIsDisabled = computed(\n () =>\n props.disabled === true ||\n (CommonBase.isBoolean(props.info?.isDisabled) && props.info.isDisabled),\n);\n\nconst clsParent = computed(() => {\n const cls = { 'th-rc': true };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// forId/name 行级唯一值(含行号,_cb/_rd 后缀区分):原生互斥仅在同 name 组内生效,跨行单选互斥由 Index 状态层 _setSelectRc 保证(单选模式单值覆盖);forId 保持唯一供 label for 关联\nconst _getForId = (suffix: 'cb' | 'rd') =>\n CommonBase.isNonEmptyString(props.keyIndex) ? `${props.keyIndex}_${suffix}` : undefined;\n</script>\n","<template>\n <table\n :class=\"clsTable\"\n :style=\"styTable\"\n ref=\"refElTable\"\n >\n <tbody>\n <template v-if=\"!CommonBase.isEmpty(list)\">\n <template\n v-for=\"(trInfo, trIndex) in list\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n >\n <tr\n :class=\"{\n odd: isStriped && trIndex % 2 === 0,\n 'tr-customInterval-odd':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 0,\n 'tr-customInterval-even':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 1,\n 'tr-disabled': CommonBase.isBoolean(trInfo?.isDisabled) && trInfo.isDisabled,\n 'tr-selected': optIsTrSelected(trInfo),\n 'tr-hover': hoverIndex === trIndex,\n }\"\n @click=\"onClickTr($event, trInfo, trIndex)\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <cl-table-td-checked\n v-if=\"isShowRadio || isShowCheckbox\"\n :keyIndex=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n :isShowRadio=\"isShowRadio\"\n :isShowCheckbox=\"isShowCheckbox\"\n :value=\"optIsTrSelected(trInfo)\"\n :info=\"trInfo\"\n :disabled=\"disabled\"\n />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_${tdInfo?.data ?? ''}`\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n >{{\n optFunGetTdValue(trInfo && tdInfo ? trInfo[tdInfo.data] : undefined, tdInfo)\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n <template\n v-if=\"\n isElastic &&\n !CommonBase.isEmpty(trInfo?.id) &&\n optElasticOpenSet.has(trInfo.id.toString())\n \"\n >\n <template v-if=\"elasticType === 'default'\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n :class=\"{\n 'td-elastic-load': optIsElasticLoading(trInfo),\n }\"\n >\n <div\n v-if=\"optIsElasticLoading(trInfo)\"\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n <div\n v-else\n :class=\"[\n `elastic-container`,\n {\n 'elastic-container-absolute': optElasticAbsoluteIds.has(\n trInfo.id.toString(),\n ),\n },\n ]\"\n :data-elastic-id=\"trInfo.id\"\n >\n <slot\n name=\"tr_elastic_children\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n />\n </div>\n </td>\n </tr>\n </template>\n <template v-else-if=\"elasticType === 'sameDataStructure'\">\n <template v-if=\"optIsElasticLoading(trInfo)\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-elastic-load\"\n >\n <div\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n </td>\n </tr>\n </template>\n <template v-else>\n <template\n v-for=\"(trElasticInfo, trElasticInx) in optGetElasticDataList(\n trInfo.id.toString(),\n )\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}`\"\n >\n <tr\n :class=\"{\n // 预留外部覆盖钩子(无内置 CSS 规则):斑马纹由 odd、悬停由 tr-hover 承载\n 'tr-elastic-sameDataStructure': true,\n odd: isStriped && trElasticInx % 2 === 0,\n 'tr-disabled':\n CommonBase.isBoolean(trElasticInfo?.isDisabled) && trElasticInfo.isDisabled,\n 'tr-hover': hoverElasticIndex === trElasticInx && hoverIndex === trIndex,\n }\"\n @mouseenter=\"onHoverInTr(trIndex, trElasticInx)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <template\n v-for=\"(tdElasticInfo, tdElasticIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}_td_${tdElasticIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdElasticIndex\"\n :tdInfo=\"tdElasticInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_elastic_${tdElasticInfo?.data ?? ''}`\"\n :data=\"trElasticInfo\"\n :trIndex=\"trIndex\"\n :trElasticInx=\"trElasticInx\"\n >{{\n optFunGetTdValue(\n trElasticInfo && tdElasticInfo\n ? trElasticInfo[tdElasticInfo.data]\n : undefined,\n tdElasticInfo,\n )\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </template>\n </template>\n </template>\n <template v-else></template>\n </template><template v-else></template>\n </template>\n </template>\n <template v-else></template>\n <tr\n v-if=\"CommonBase.isEmpty(list) && !isRunLoading && !CommonBase.isNonEmptyString(fixedType)\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-empty\"\n >\n <div\n class=\"panel-table-empty\"\n role=\"status\"\n >\n {{ CommonBase.isNonEmptyString(emptyText) ? emptyText : optPageLanguage.noResultsText }}\n </div>\n </td>\n </tr>\n <template v-else></template>\n </tbody>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTableTd from './Td.vue';\nimport ClTableTdChecked from './TdChecked.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport useLanguage from '../../Use/language';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableBody' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 数据列表\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n selectValue: {\n type: Array,\n default: () => [], // desc: 选中值列表\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引\n },\n hoverElasticIndex: {\n type: Number,\n default: -1, // desc: 悬停展开行索引\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n colspanCount: {\n type: Number,\n default: 1, // desc: 跨列数\n },\n isRunLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n elasticOpen: {\n type: Array,\n default: () => [], // desc: 展开的行 id 列表\n },\n elasticLoading: {\n type: Array,\n default: () => [], // desc: 展开加载中的行 id 列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object as PropType<Record<string, ListInfo[]>>,\n default: () => ({}), // desc: 展开数据(key 为行 id,值为行列表)\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right (可自定义)\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n});\n\nconst emit = defineEmits({\n onClickTr: (_e: MouseEvent | KeyboardEvent, _info: ListInfo | null, _inx: number) => true, // desc: 点击行事件\n onHoverIn: (_inx: number, _elasticInx: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: td_{data}(动态,按列 data 命名)| td_elastic_{data}(动态)| tr_elastic_children\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n\n// 展开行 absolute 定位状态集:setElasticHeight 标记的 id 走模板响应式 :class,\n// 避免直接改 elElastic.className 被 Vue patch 覆盖丢失(fixed 模式滚动后 absolute 定位失效)\nconst optElasticAbsoluteIds = ref<Set<string | number>>(new Set());\n\n// 选中/加载中 id 判定的 O(1) 查找集(selectValue/elasticLoading 为 id 字符串数组,模板多处分号重复 indexOf)\n// 外部显式传 null 时兜底空数组(Array prop 校验放行 null,.map 会崩溃)\n// 元素级过滤:null/undefined 元素经 String 转成 'null' 字符串,会与真实 'null' 字符串 id 歧义(isUndefined 含 null 判定,保留空串/0)\nconst optSelectedSet = computed(\n () =>\n new Set(\n (Array.isArray(props.selectValue) ? props.selectValue : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticLoadingSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticLoading) ? props.elasticLoading : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticOpenSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticOpen) ? props.elasticOpen : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\n\n// colspan 兜底:NaN/负数/0/非数字归一为 1(Math.max 对 NaN 返回 NaN,:colspan 输出无效值靠浏览器兜底不直观,显式归一)\nconst optColspanCount = computed(() => {\n const n = Number(props.colspanCount);\n return CommonBase.isFinite(n) && n >= 1 ? Math.floor(n) : 1;\n});\n\nconst clsTable = computed(() => {\n const cls = {\n 'table-default': true,\n 'table-empty': CommonBase.isEmpty(props.list),\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (!CommonBase.isNonEmptyString(props.fixedType)) {\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式,浏览器静默忽略非法值会致预期列宽失效\n if (\n props.isUseScrollX &&\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n emit('onClickTr', e, info, inx);\n};\n\n// elasticInx = -1 哨兵值:主数据行悬停不携带展开行索引(展开行悬停才传行内索引)\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n emit('onHoverIn', inx, elasticInx);\n};\n\nconst onHoverOutTr = () => {\n emit('onHoverOut');\n};\n\nconst optFunGetTdValue = (value: unknown, opt: ColumnsInfo) => {\n if (CommonBase.isEmpty(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// 展开数据按行 id 取列表(Record 契约:缺失 key 返回空数组)\nconst optGetElasticDataList = (id: string) => {\n const elasticData = (props.elasticData || {}) as Record<string, ListInfo[]>;\n return Object.prototype.hasOwnProperty.call(elasticData, id) ? elasticData[id] : [];\n};\n\n// 选中/加载中判定模板方法:与 class 判定共用,一处调整全局生效\n// 行对象判空前置:list 含 null 项时 info.id 解引用在判空工具求值前即崩溃,须先判 info 再取 id\nconst optIsTrSelected = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optSelectedSet.value.has(info.id.toString());\nconst optIsElasticLoading = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optElasticLoadingSet.value.has(info.id.toString());\n\nconst getWidth = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientWidth;\n};\n\nconst getHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientHeight;\n};\n\nconst setElasticWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (!parentEl) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const w = parentEl.clientWidth;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.width = `${w}px`;\n }\n};\n\nconst setElasticHeight = (id: string) => {\n if (!refElTable.value) {\n return;\n }\n const elElastic = refElTable.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null;\n if (elElastic) {\n const parentEl = elElastic.parentNode as HTMLElement | null;\n if (parentEl) {\n elElastic.style.height = '';\n parentEl.style.height = '';\n const h = `${elElastic.clientHeight}px`;\n elElastic.style.height = h;\n parentEl.style.height = h;\n }\n const cur = optElasticAbsoluteIds.value;\n if (!cur.has(id)) {\n optElasticAbsoluteIds.value = new Set(cur).add(id);\n }\n }\n};\n\n// 展开行收起时清理 absolute 标记:Set 只增不减会在同 id 重开时残留 elastic-container-absolute 类\n// (fixed 模式 + 非加载路径无 setElasticHeight 重算 → td 高度归 0 展开内容塌陷)\nconst removeElasticAbsolute = (id: string) => {\n if (optElasticAbsoluteIds.value.has(id)) {\n const next = new Set(optElasticAbsoluteIds.value);\n next.delete(id);\n optElasticAbsoluteIds.value = next;\n }\n};\n\n// 数据替换/切页强制全关时清空全部标记(旧行 id 作废,absolute 状态一并失效)\nconst clearElasticAbsolute = () => {\n if (optElasticAbsoluteIds.value.size > 0) {\n optElasticAbsoluteIds.value = new Set();\n }\n};\n\nconst setElasticLoadLeft = (scrollLeft: number) => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.left = `${safeLeft}px`;\n }\n};\n\nconst setEmptyWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null;\n if (el) {\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (parentEl) {\n const w = parentEl.clientWidth;\n el.style.width = `${w}px`;\n }\n }\n};\n\nconst setEmptyLeft = (scrollLeft: number) => {\n const el = refElTable.value\n ? (refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null)\n : null;\n if (el) {\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n el.style.left = `${safeLeft}px`;\n }\n};\n\nexport interface ClTableBodyExpose {\n getWidth: () => number;\n getHeight: () => number;\n setElasticWidth: () => void;\n setElasticHeight: (id: string) => void;\n removeElasticAbsolute: (id: string) => void;\n clearElasticAbsolute: () => void;\n setElasticLoadLeft: (scrollLeft: number) => void;\n setEmptyWidth: () => void;\n setEmptyLeft: (scrollLeft: number) => void;\n}\n\ndefineExpose({\n getWidth,\n getHeight,\n setElasticWidth,\n setElasticHeight,\n removeElasticAbsolute,\n clearElasticAbsolute,\n setElasticLoadLeft,\n setEmptyWidth,\n setEmptyLeft,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"table-wrapper\">\n <template v-if=\"isHead\">\n <div\n :class=\"clsHeadWrapper\"\n :style=\"{ width: optFixedHead.width }\"\n ref=\"refElHeadWrapper\"\n >\n <div\n :class=\"clsHeadContainer\"\n ref=\"refElHeadContainer\"\n >\n <div\n class=\"table-head-main\"\n ref=\"refElHeadMain\"\n >\n <cl-table-head\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElHeadTable\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-head\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-left-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-left-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-head\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-right-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-right-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optScrollYIsShow\"\n class=\"table-scroll-occupy-container\"\n >\n <div />\n <div\n v-if=\"optIsShowTotal\"\n class=\"table-scroll-occupy-total\"\n :style=\"{ height: optBase.totalHeight }\"\n />\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n :class=\"{ 'table-scroll-occupy-corner': optScrollX.isShow }\"\n />\n <template v-else></template>\n </div>\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n v-show=\"optScrollX.isShow\"\n class=\"table-fixed-column-scrollX\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n cornerType=\"right-top\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElHeadFixedScrollX\"\n />\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedHead.isShow && optBase.isRunLoading\"\n class=\"table-fixed-head-load\"\n />\n <template v-else></template>\n </div>\n <div\n v-if=\"optFixedHead.isShow\"\n :style=\"{ height: optFixedHead.height, width: optFixedHead.width }\"\n />\n <template v-else></template>\n </template>\n <template v-else></template>\n <div\n :class=\"clsBodyWrapper\"\n ref=\"refElBodyWrapper\"\n >\n <div\n class=\"table-body-container\"\n :style=\"styBodyContainer\"\n ref=\"refElBodyContainer\"\n >\n <div\n :class=\"{ 'table-body-main': true, 'table-body-empty': optNewList.length === 0 }\"\n :style=\"styBodyMain\"\n ref=\"refElBodyMain\"\n >\n <cl-table-body\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElBodyTable\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-left-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-left-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-right-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-right-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n </div>\n <template v-if=\"isScrollX && optNewList.length > 0 && optScrollX.isShow\">\n <div\n v-if=\"isScrollXBottom\"\n class=\"table-fixed-column-scrollX\"\n :style=\"{ bottom: optScrollYIsUse ? '-1px' : '1px' }\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n :isShowCover=\"false\"\n cornerType=\"right-bottom\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElBodyFixedScrollX\"\n />\n </div>\n <div\n v-else\n class=\"table-fixed-column-scrollX\"\n >\n <div :style=\"{ height: `${SCROLLBAR_HEIGHT}px` }\" />\n </div>\n </template>\n <template v-else></template>\n </div>\n <div\n v-if=\"isPaginate && optNewList.length > 0\"\n class=\"table-footer-wrapper\"\n >\n <div />\n <cl-paginate\n :currentPage=\"optPageInfo.pages\"\n :limitValue=\"optPageInfo.limit\"\n :limitData=\"paginateLimitData\"\n :isShowLimit=\"isPaginateLimit\"\n :totalCount=\"optTotalCount\"\n :disabled=\"disabled || optBase.isRunLoading\"\n @onChange=\"onChangePaginate\"\n />\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optBase.isRunLoading\"\n class=\"table-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"table-load-wrapper\">\n <div\n class=\"table-load-head\"\n :style=\"styLoadHead\"\n />\n <div :class=\"{ 'table-load-body': true, 'table-load-bg-gray': isLoading }\">\n <cl-load-ing :isLoadIng=\"isLoading\" size=\"xxl\" :theme=\"loadTheme\" :color=\"loadColor || undefined\" />\n </div>\n </div>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n watch,\n computed,\n ref,\n reactive,\n toRaw,\n useSlots,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { Resize as ResizeEvent } from '../../Common/Element/Event/index';\nimport ClTableHead from './Head.vue';\nimport ClTableBody from './Body.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport ClPaginate from '../Paginate/Index.vue';\nimport type { PaginateLimitItem } from '../Paginate/Index.vue';\nimport ClScrollXFence from '../ScrollxFence/Index.vue';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\nimport './index.css';\n\n// 数据请求参数契约(onGetData/onChangeParams 载荷与 getParamInfo 返回值共用;空配置时字段缺失)\nexport interface TableEmitParam {\n pages?: number;\n limit?: number;\n offset?: number;\n orderIndex?: number;\n orderBy?: string;\n orderColumns?: string;\n}\n\n// 选中变化扩展信息(onChangeChecked 第三参)\nexport interface TableChangeCheckedExt {\n checkedIds: string[];\n unCheckedIds: string[];\n}\n\n// 内部状态容器:显式类型约束,字段名变更/类型漂移由编译器发现(原整体 any 静默放行)\ninterface TablePageData {\n dataJson: Record<string, any>;\n changeNewPaginate: { pages: number; limit: number };\n changeNewSort: { orderIndex: number | undefined; orderBy: string | undefined };\n sortLocalData: any[];\n scrollBody: { left: number };\n scrollHead: { left: number };\n resizeEvent: ResizeEvent | null;\n // setTimeout 返回类型按环境为 number(DOM)或 Timeout(Node),用 ReturnType 兼容两者\n timerBody: ReturnType<typeof setTimeout> | null;\n // keep-alive 取消未决请求标记:onDeactivated 清 timerBody 时置位,onActivated 补发数据\n pendingCanceled: boolean;\n}\n\ndefineOptions({ name: 'ClTable' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息;含 null 项(非法输入)时降级渲染空单元格,仅运行时兜底\n },\n list: {\n type: Array,\n default: () => [], // desc: 数据列表\n },\n totalLength: Number, // desc: 数据总条数\n totalData: {\n type: Object,\n default: () => ({}), // desc: 总计数据\n },\n isServer: {\n type: Boolean,\n default: true, // desc: 是否为服务端模式\n },\n isParamTriggerServer: {\n type: Boolean,\n default: false, // desc: 本地数据是否触发服务端参数事件\n },\n isLoading: {\n type: Boolean,\n default: true, // desc: 加载中状态\n },\n loadTheme: {\n type: String,\n default: 'circleBubble', // desc: 加载动画主题,透传至 cl-load-ing | enum: rotaryLine, circleNotch, circleBubble, ballColor4, dotTyping, dotWave, dotBounce, dotPulse, dotOrbit, dotFlow, dotSlide, dotSlider, dotFold, dotSquare, barEqualizer, barWave, barPulse, barStretch, barMeter, barBounce, barRamp, ringRotate, ringDot, ringPulse, ringClip, ringFan, circleSpinner, dotRipple, dotRipple3, ringCross, squareTrace, squareTrace2, crossMove, snakePath, squareMirror, dotPulse5, diamondShuttle, barStream, newtonCradle, dotSpin, orbitSwap, typingBounce, ringGlow\n },\n loadColor: {\n type: String,\n default: '#1088f0', // desc: 加载动画颜色,透传至 cl-load-ing\n },\n isShowInitLoadIng: {\n type: Boolean,\n default: true, // desc: 是否显示初始加载动画(仅本地模式生效,服务端模式强制显示加载遮罩防误操作)\n },\n isPaginate: {\n type: Boolean,\n default: true, // desc: 是否启用分页\n },\n pageOffset: {\n type: Number,\n default: 0, // desc: 分页偏移量\n },\n isPaginateLimit: {\n type: Boolean,\n default: true, // desc: 是否启用每页条数选择\n },\n paginateLimit: {\n type: Number,\n default: 10, // desc: 每页条数\n },\n paginateLimitData: { type: Array as () => PaginateLimitItem[], default: () => [] }, // desc: 每页条数可选列表\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array,\n default: () => [], // desc: 排序配置\n },\n selectValue: {\n type: [String, Number],\n default: '', // desc: 选中值\n },\n checkedRowType: {\n type: String,\n default: 'none', // desc: 选中行类型 | enum: none, radio, checkbox\n validator: (value: string) => ['none', 'radio', 'checkbox'].indexOf(value) > -1,\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n isScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isScrollXBottom: {\n type: Boolean,\n default: false, // desc: 是否启用底部横向滚动\n },\n isFixedHead: {\n type: Boolean,\n default: false, // desc: 是否固定表头\n },\n scrollY: {\n type: Number,\n default: -1, // desc: 纵向滚动高度\n },\n fixedColumnLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedColumnRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n isClickRowLinkage: {\n type: Boolean,\n default: false, // desc: 点击行是否联动选中\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n isElasticLoad: {\n type: Boolean,\n default: true, // desc: 是否启用展开加载动画\n },\n rowClickKeyInvalid: {\n type: String,\n default: '.tr-click-invalid', // desc: 无效点击区域选择器\n },\n rowClickKeyElastic: {\n type: String,\n default: '.tr-click-elastic', // desc: 展开点击区域选择器\n },\n elasticIconCls: {\n type: Array,\n default: () => [], // desc: 展开图标类名列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object,\n default: () => ({}), // desc: 展开数据\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n isHead: {\n type: Boolean,\n default: true, // desc: 是否显示表头\n },\n});\n\nconst emit = defineEmits({\n onGetData: (_param: TableEmitParam) => true, // desc: 获取数据事件\n onClickRow: (_info: ListInfo, _inx: number, _isRc?: boolean) => true, // desc: 点击行事件(isRc: 点击是否落在 th-rc 单元格)\n onClickElastic: (_id: string, _info: ListInfo, _trIndex: number, _isOpen: boolean, _el: any) =>\n true, // desc: 点击展开事件\n onChangeChecked: (_ids: string, _list: ListInfo[], _ext: TableChangeCheckedExt) => true, // desc: 选中变化事件\n onChangeParams: (_param: TableEmitParam) => true, // desc: 参数变化事件\n});\n\n// slots: th_{data} | td_{data} | total_{data} | td_elastic_{data}(动态,按 data 前缀转发)| tr_elastic_children(展开行内容,isElastic 时追加)\n\nconst slots = useSlots();\n\nconst _initOrderData = (orderSort: any[]): [number, string] | [] => {\n let data: [number, string] | [] = [];\n if (props.isOrder) {\n // orderSort 显式传 null 时 Array prop 校验放行(default 不生效),归一为空数组避免 .length 崩溃\n const orderSortInfo: any[] = CommonBase.isEmpty(orderSort) ? [] : orderSort;\n let initFirstSort: [number, string] = [0, 'desc'];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n for (let i = 0; i < columns.length; i += 1) {\n const columnInfo: any = columns[i];\n // columns 含 null 项(配置错误输入)时跳过,崩溃降级为忽略该列\n if (CommonBase.isEmpty(columnInfo)) {\n continue;\n }\n const sort =\n columnInfo.sort === undefined || columnInfo.sort === null ? true : columnInfo.sort === true;\n const visible = CommonBase.isBoolean(columnInfo.visible) ? columnInfo.visible : true;\n if (sort && visible) {\n initFirstSort = [i, 'desc'];\n break;\n }\n }\n if (orderSortInfo.length === 0) {\n data = initFirstSort;\n } else {\n const columnOrderInfo: any = columns[orderSortInfo[0]];\n if (!CommonBase.isEmpty(columnOrderInfo)) {\n const sort =\n columnOrderInfo.sort === undefined || columnOrderInfo.sort === null\n ? true\n : columnOrderInfo.sort === true;\n const visible = CommonBase.isBoolean(columnOrderInfo.visible)\n ? columnOrderInfo.visible\n : true;\n const orderIndex = Array.isArray(orderSortInfo) ? orderSortInfo[0] : undefined;\n const orderBy =\n Array.isArray(orderSortInfo) && (orderSortInfo[1] === 'asc' || orderSortInfo[1] === 'desc')\n ? orderSortInfo[1]\n : undefined;\n data =\n sort && visible && !CommonBase.isUndefined(orderIndex)\n ? ([orderIndex, orderBy ?? 'desc'] as [number, string])\n : initFirstSort;\n } else {\n data = initFirstSort;\n }\n }\n }\n return data;\n};\n\nconst _initPaginatePages = () => {\n let pages = 1;\n if (props.paginateLimit > 0 && props.pageOffset >= 0) {\n pages = Math.floor(props.pageOffset / props.paginateLimit) + 1;\n }\n return pages;\n};\n\nconst _initOrderSort = _initOrderData(props.orderSort);\n\nconst _pageData: TablePageData = {\n dataJson: CommonBase.getJsonByList(props.list),\n changeNewPaginate: {\n pages: _initPaginatePages(),\n limit: props.paginateLimit,\n },\n changeNewSort: {\n // isOrder=false 时 _initOrderSort 为空数组,字段实际为 undefined(类型层如实表达,原 as 断言掩盖)\n orderIndex: _initOrderSort[0],\n orderBy: _initOrderSort[1],\n },\n sortLocalData: [],\n scrollBody: {\n left: 0,\n },\n scrollHead: {\n left: 0,\n },\n resizeEvent: null,\n timerBody: null,\n pendingCanceled: false,\n};\n\nconst _pageObject: { observerBodyScrollY: MutationObserver | null } = {\n observerBodyScrollY: null,\n};\nconst SCROLLBAR_HEIGHT = 15;\nconst FIXED_HEAD_THRESHOLD = 30; // 固定表头吸附判定阈值\nconst SELECT_SCROLL_THRESHOLD = 180; // 选中行滚动定位判定阈值\nconst SELECT_SCROLL_OFFSET = 50; // 选中行滚动定位偏移\nconst LOCAL_LOAD_DELAY = 300; // 本地模式数据加载防抖时长\nconst _keyIndex = `table-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst refElHeadWrapper = ref<HTMLDivElement | null>(null);\nconst refElHeadContainer = ref<HTMLDivElement | null>(null);\nconst refElHeadMain = ref<HTMLDivElement | null>(null);\nconst refElHeadTable = ref<InstanceType<typeof ClTableHead> | null>(null);\nconst refElHeadFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst refElBodyWrapper = ref<HTMLDivElement | null>(null);\nconst refElBodyContainer = ref<HTMLDivElement | null>(null);\nconst refElBodyMain = ref<HTMLDivElement | null>(null);\nconst refElBodyTable = ref<InstanceType<typeof ClTableBody> | null>(null);\nconst refElBodyFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst optBase = reactive({\n isRunLoading: false,\n isCheckedRadio: props.checkedRowType === 'radio',\n isCheckedCheckbox: props.checkedRowType === 'checkbox',\n colspanCount: 0,\n hoverTrIndex: -1,\n hoverTrElasticIndex: -1,\n totalHeight: '0',\n});\n\nconst optNewList = ref<ListInfo[]>([]);\nconst optPageInfo = reactive({\n pages: _pageData.changeNewPaginate.pages,\n limit: _pageData.changeNewPaginate.limit,\n});\nconst optOrderSort = ref<[number, string] | []>(_initOrderSort);\nconst optAllValue = ref<boolean>(false);\n\n// 取 selectValue 的 id 数组:String|Number 混合类型 + 显式传 undefined 时守卫,防止 .toString() 崩溃\nconst _getSelectValueIds = () => {\n const selectValue = props.selectValue;\n if (CommonBase.isNonEmptyString(selectValue)) {\n return CommonBase.split(selectValue);\n }\n if (CommonBase.isNumber(selectValue)) {\n return CommonBase.split(selectValue.toString());\n }\n return [];\n};\nconst optCurrentPageSelectIds = ref<string[]>(_getSelectValueIds());\n\nconst optElastic = reactive({\n open: [] as string[],\n loading: [] as string[],\n});\n\nconst optScrollX = reactive({\n isShow: false,\n minWidth: 'auto',\n posType: 'left',\n});\n\nconst optScrollYIsShow = ref<boolean>(false);\n\nconst optFixedColumn = reactive({\n totalWidth: '0',\n centerWidth: '0',\n leftColumnLength: 0,\n leftWidth: '0',\n rightColumnLength: 0,\n rightWidth: '0',\n});\n\nconst optFixedHead = reactive({\n isShow: false,\n width: 'auto',\n height: 'auto',\n});\n\nconst optLoadInfo = reactive({\n headHeight: 0,\n});\n\nlet _rafIdScrollX: number | null = null;\nlet _rafIdWinScroll: number | null = null;\nlet _scrollLeftCache = 0;\n\n// 动态插槽转发键集合:实时取自 slots 代理(父组件运行期增删插槽时响应式更新;原 setup 快照不感知增删,动态插槽静默不渲染)\nconst optSlotsKeyTh = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('th_') === 0);\n});\nconst optSlotsKeyTd = computed(() => {\n const names = Object.keys(slots).filter(\n (n: string) => n.indexOf('td_') === 0 && n.indexOf('td_elastic_') !== 0,\n );\n if (props.isElastic) {\n names.push('tr_elastic_children');\n }\n return names;\n});\nconst optSlotsKeyTotal = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('total_') === 0);\n});\nconst optSlotsKeyTdElastic = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('td_elastic_') === 0);\n});\n\nconst optIsShowCheckboxAll = computed(() => {\n return props.isShowCheckboxAll && optNewList.value.length > 0;\n});\n\nconst optIsShowTotal = computed(() => {\n return !CommonBase.isEmpty(props.totalData) && optNewList.value.length > 0;\n});\n\nconst optTotalCount = computed(() => {\n if (props.isServer) {\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : 0;\n }\n // 本地模式:未显式传 totalLength 时自动取 list 长度兜底,避免分页总数显示 0\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : props.list?.length || 0;\n});\n\nconst optScrollXIsUse = computed(() => {\n return props.isScrollX || props.isScrollXBottom;\n});\n\nconst optScrollYIsUse = computed(() => {\n return props.scrollY > 0;\n});\n\n// isHead=false 时无表头测量基准(headWrapper 不渲染,elTds 恒空),固定列宽度恒 0 渲染空白竖条,禁用固定列\nconst optFixedLeftIsUse = computed(() => {\n return props.isHead && props.fixedColumnLeftIndex > -1 && optScrollXIsUse.value;\n});\n\nconst optFixedRightIsUse = computed(() => {\n return (\n props.isHead &&\n props.fixedColumnRightIndex > -1 &&\n optScrollXIsUse.value &&\n props.fixedColumnRightIndex > props.fixedColumnLeftIndex + 1\n );\n});\n\nconst clsParent = computed(() => {\n const cls: any = {\n 'panel-table': true,\n 'table-disabled': props.disabled,\n };\n if (optBase.isRunLoading) {\n cls['table-loading'] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['table-mob'] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsHeadWrapper = computed(() => {\n const cls: any = {\n 'table-head-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scroll-occupy-y': optScrollYIsShow.value,\n };\n if (optFixedHead.isShow) {\n cls['table-fixed-head'] = true;\n }\n return cls;\n});\n\nconst clsHeadContainer = computed(() => {\n const cls: any = {\n 'table-head-container': true,\n };\n if (props.isScrollX) {\n cls['table-scrollX'] = true;\n }\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst clsBodyWrapper = computed(() => {\n const cls: any = {\n 'table-body-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scrollX': props.isScrollX,\n 'table-scrollX-bottom': optScrollX.isShow,\n };\n cls['table-scroll-borderT0'] = optScrollX.isShow && props.isScrollX;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst styBodyContainer = computed(() => {\n const sty: any = {};\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (optScrollYIsUse.value) {\n const maxH = optScrollX.isShow\n ? Math.max(0, props.scrollY - SCROLLBAR_HEIGHT)\n : props.scrollY;\n sty.maxHeight = `${maxH}px`;\n }\n }\n return sty;\n});\n\nconst styBodyMain = computed(() => {\n const sty: any = {};\n if (!(optFixedLeftIsUse.value || optFixedRightIsUse.value)) {\n if (optScrollYIsUse.value) {\n sty.maxHeight = `${props.scrollY}px`;\n }\n }\n return sty;\n});\n\nconst styLoadHead = computed(() => {\n const sty: any = {};\n if (optBase.isRunLoading) {\n sty.height = `${optLoadInfo.headHeight}px`;\n }\n return sty;\n});\n\nconst _emitGetData = (param: any) => {\n emit('onGetData', param);\n};\n\nconst _emitClickElastic = (id: string, info: any, trIndex: number, isOpen: boolean, el: any) => {\n emit('onClickElastic', id, info, trIndex, isOpen, el);\n};\n\n// isRc 第三参向后兼容:true 表示点击落在 .th-rc 单元格(直接操作复选框/单选框),false 表示行联动选中\nconst _emitClickRow = (info: any, inx: number, isRc = false) => {\n emit('onClickRow', info, inx, isRc);\n};\n\nconst _emitChangeChecked = (ids: string, list: any[], ext: any) => {\n emit('onChangeChecked', ids, list, ext);\n};\n\nconst _emitChangeParams = () => {\n const param = _getPaginateSort();\n emit('onChangeParams', param);\n};\n\nconst _runLoadStart = () => {\n nextTick(() => {\n if (refElHeadMain.value) {\n const elThead = refElHeadMain.value.querySelector('thead');\n if (elThead) {\n optLoadInfo.headHeight = elThead.offsetHeight;\n }\n }\n });\n optBase.isRunLoading = true;\n};\n\nconst _runLoadStop = () => {\n optBase.isRunLoading = false;\n};\n\nconst _analysisColumns = () => {\n let colspanCount = 0;\n let minWidth = 0;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n colspanCount = 1;\n if (refElHeadTable.value) {\n minWidth = refElHeadTable.value.getRcWidth();\n }\n }\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any) => {\n // 计数口径对齐渲染链:columns 含 null 项(配置错误输入)时 Body/Head 仍渲染空单元格占一列,\n // 此处同样 +1,避免展开行/空数据行 colspan 少覆盖一列(null 项无 width,宽度贡献为 0)\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n colspanCount += 1;\n if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.width)) {\n minWidth += Number(info.width) || 0;\n } else if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.widthMin)) {\n minWidth += Number(info.widthMin) || 0;\n }\n }\n });\n const totalPadding = refElHeadTable.value ? refElHeadTable.value.getPaddingLr() : 0;\n minWidth += totalPadding;\n\n optBase.colspanCount = colspanCount;\n if (optScrollXIsUse.value) {\n optScrollX.minWidth = minWidth > 0 ? `${minWidth}px` : 'auto';\n }\n};\n\nconst _analysisFixedColumns = () => {\n return new Promise<void>((resolve, reject) => {\n nextTick(() => {\n try {\n // 卸载竞态兜底:已排队的 nextTick 无法取消,ref 被置 null 时直接 resolve\n if (!refElBodyTable.value) {\n resolve();\n return;\n }\n const totalWidth = refElBodyTable.value.getWidth();\n optFixedColumn.totalWidth = `${totalWidth}px`;\n\n let centerWidth = totalWidth;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n const leftColumn: any = [];\n const rightColumn: any = [];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any, i: number) => {\n // 口径对齐渲染链:null 项同样计入固定列(渲染链对 null 项渲染空 th/td 占位),\n // 保证 leftColumn.length 与 elTds(真实 DOM 全量 th)索引对齐,固定列宽度测量不错位\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n if (optFixedLeftIsUse.value) {\n if (i <= props.fixedColumnLeftIndex) {\n leftColumn.push(info);\n }\n }\n if (optFixedRightIsUse.value) {\n if (i >= props.fixedColumnRightIndex) {\n rightColumn.push(info);\n }\n }\n }\n });\n\n const isRc = optBase.isCheckedRadio || optBase.isCheckedCheckbox;\n const elTds = refElHeadTable.value ? refElHeadTable.value.getElTh() : [];\n const totalLen = elTds.length;\n\n let leftColspanCount = leftColumn.length;\n const rightColspanCount = rightColumn.length;\n let leftIndexMax = leftColspanCount - 1;\n const rightIndexMin = totalLen - rightColspanCount;\n if (isRc) {\n leftColspanCount += 1;\n leftIndexMax += 1;\n }\n let leftWidth = 0;\n let rightWidth = 0;\n for (let fi = 0; fi < totalLen; fi++) {\n const elTd = elTds[fi];\n if (!elTd) {\n continue;\n }\n const tempW = elTd.clientWidth;\n if (fi <= leftIndexMax) {\n leftWidth += tempW;\n }\n if (fi >= rightIndexMin) {\n rightWidth += tempW;\n }\n }\n\n if (optFixedLeftIsUse.value) {\n optFixedColumn.leftColumnLength = leftColumn.length;\n optFixedColumn.leftWidth = `${leftWidth}px`;\n centerWidth -= leftWidth;\n }\n if (optFixedRightIsUse.value) {\n optFixedColumn.rightColumnLength = rightColumn.length;\n optFixedColumn.rightWidth = `${rightWidth}px`;\n centerWidth -= rightWidth;\n }\n }\n centerWidth = Math.max(0, centerWidth);\n optFixedColumn.centerWidth = `${centerWidth}px`;\n nextTick(() => {\n resolve();\n });\n } catch (err) {\n reject(err);\n }\n });\n });\n};\n\nconst _setElasticWidth = () => {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticWidth();\n }\n });\n};\n\nconst _setElasticHeight = (id: string) => {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticHeight(id);\n }\n }\n};\n\nconst _runElasticLoadStart = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n if (arr.indexOf(id) === -1) {\n arr.push(id);\n optElastic.loading = arr;\n }\n }\n};\n\nconst _runElasticLoadStop = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n const inx = arr.indexOf(id);\n if (inx > -1) {\n arr.splice(inx, 1);\n optElastic.loading = arr;\n nextTick(() => {\n _setElasticHeight(id);\n });\n }\n }\n};\n\nconst _setSelectElasticIds = (info: any, trIndex: number, elElastic?: any, isEmit?: boolean) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中/展开链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n const arr = CommonBase.getArrClone(optElastic.open);\n const inx = arr.indexOf(id);\n const isOpen = inx === -1;\n if (isOpen) {\n arr.push(id);\n _runElasticLoadStart(id);\n } else {\n arr.splice(inx, 1);\n _runElasticLoadStop(id);\n // 收起时同步清理 Body 侧 absolute 标记:Set 只增不减会在同 id 重开时残留 absolute 类导致塌陷\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.removeElasticAbsolute(id);\n }\n }\n _initElasticOneClass(elElastic, isOpen);\n const isEmitUse = CommonBase.isBoolean(isEmit) ? isEmit : true;\n optElastic.open = arr;\n if (isEmitUse) {\n _emitClickElastic(id, info, trIndex, isOpen, elElastic);\n }\n _setElasticWidth();\n};\n\nconst _initElasticAllData = () => {\n const newList: any[] = [];\n // 外部显式传 null 时 prop default 不生效,先判空兜底(null.length 会崩溃且阻断数据更新链)\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n const list: any[] = optNewList.value;\n const arrOpenId: any[] = optElastic.open;\n list.forEach((info: any) => {\n // null 行守卫:list 可含 null 项(渲染层已承认),getJsonClone(null) 返回 null 后解引用崩溃\n if (!info) {\n newList.push(info);\n return;\n }\n const newInfo = CommonBase.getJsonClone(info);\n if (!CommonBase.isEmpty(newInfo.id)) {\n const id = newInfo.id.toString();\n newInfo._elasticIconCls =\n arrOpenId.indexOf(id) > -1 ? elasticIconCls[1] : elasticIconCls[0];\n }\n newList.push(newInfo);\n });\n }\n if (newList.length > 0) {\n optNewList.value = newList;\n }\n};\n\nconst _initElasticOneClass = (elElastic?: any, isOpen = false) => {\n if (elElastic) {\n const addCls = [];\n const removeCls = ['elastic-expand', 'elastic-retract'];\n isOpen ? addCls.push('elastic-expand') : addCls.push('elastic-retract');\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n removeCls.push(elasticIconCls[0]);\n removeCls.push(elasticIconCls[1]);\n isOpen ? addCls.push(elasticIconCls[1]) : addCls.push(elasticIconCls[0]);\n }\n let newCls = CommonElement.getRemoveClass(elElastic.className, removeCls.join(' '));\n newCls = CommonElement.getAddClass(newCls, addCls);\n elElastic.className = newCls;\n }\n};\n\nconst _getCurrentPageAllUse = () => {\n const allIds: string[] = [];\n optNewList.value.forEach((info: any) => {\n // null 行守卫:getListClone 原样保留 null 行(渲染层已防崩溃),全选 id 收集同样跳过 null 行\n if (CommonBase.isEmpty(info)) {\n return;\n }\n const b = CommonBase.isBoolean(info.isDisabled) ? info.isDisabled : false;\n if (!b && !CommonBase.isEmpty(info.id)) {\n allIds.push(info.id.toString());\n }\n });\n return allIds;\n};\n\nconst _getCurrentSelectUse = (selectIds: any = null) => {\n // isUndefined 不挡 null(签名默认 null):null 视为未传参;空数组是合法输入(表示清空)不可用 isEmpty 拦截\n const sIds =\n CommonBase.isUndefined(selectIds) || selectIds === null\n ? optCurrentPageSelectIds.value\n : (selectIds as string[]);\n const useIds: string[] = [];\n if (!Array.isArray(sIds)) {\n return [];\n }\n if (sIds.length > 0) {\n const allIds = _getCurrentPageAllUse();\n sIds.forEach((sId: string) => {\n if (CommonBase.isExistValue(allIds, sId)) {\n useIds.push(sId);\n }\n });\n }\n // 单选模式收敛为首个有效 id:radio 语义下多值无意义,selectValue 传入多 id 时丢弃首个之外的\n if (optBase.isCheckedRadio && useIds.length > 1) {\n return [useIds[0]];\n }\n return useIds;\n};\n\nconst _setCheckboxAll = () => {\n if (optBase.isCheckedCheckbox) {\n const allIds = _getCurrentPageAllUse();\n const checkedIds: string[] = _getCurrentSelectUse();\n optAllValue.value = checkedIds.length > 0 && checkedIds.length === allIds.length;\n }\n};\n\nconst _getSelectDataItem = () => {\n const list: any[] = [];\n const checkedIds: string[] = _getCurrentSelectUse();\n const unCheckedIds: string[] = [];\n const allIds = _getCurrentPageAllUse();\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(checkedIds, aId)) {\n unCheckedIds.push(aId);\n }\n });\n\n if (optBase.isCheckedCheckbox) {\n checkedIds.forEach((id: any) => {\n const data = _pageData.dataJson[id.toString()];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n });\n } else if (optBase.isCheckedRadio) {\n if (checkedIds.length > 0) {\n const data = _pageData.dataJson[checkedIds[0]];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n }\n }\n return { checkedIds, unCheckedIds, checkedData: list };\n};\n\nconst _emitChangeCheckedBefore = () => {\n const selectDataItem = _getSelectDataItem();\n _emitChangeChecked(selectDataItem.checkedIds.join(','), selectDataItem.checkedData, {\n checkedIds: selectDataItem.checkedIds,\n unCheckedIds: selectDataItem.unCheckedIds,\n });\n};\n\nconst _setSelectRc = (info: any) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const newId = info.id.toString();\n const oldSelectValue = optCurrentPageSelectIds.value;\n let newSelectValue: string[] = [];\n if (optBase.isCheckedCheckbox) {\n const isExist = CommonBase.isExistValue(oldSelectValue, newId);\n oldSelectValue.forEach((id: string) => {\n if (id !== newId) {\n newSelectValue.push(id);\n }\n });\n if (!isExist) {\n newSelectValue.push(newId);\n }\n optCurrentPageSelectIds.value = newSelectValue;\n _setCheckboxAll();\n _emitChangeCheckedBefore();\n } else {\n if (!(oldSelectValue.length > 0 && oldSelectValue[0] === newId)) {\n newSelectValue = [newId];\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n }\n }\n};\n\nconst _calculationScrollX = () => {\n if (optScrollXIsUse.value && refElBodyMain.value && refElBodyTable.value) {\n const pW = refElBodyMain.value.clientWidth;\n const tW = refElBodyTable.value.getWidth();\n optScrollX.isShow = tW > pW;\n }\n};\n\nconst _calculationScrollY = () => {\n if (optScrollYIsUse.value && refElBodyTable.value) {\n const bodyHeight = refElBodyTable.value.getHeight();\n let isY = bodyHeight > props.scrollY;\n if (!isY) {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyContainer.value) {\n isY = bodyHeight > refElBodyContainer.value.clientHeight;\n }\n } else {\n if (refElBodyMain.value && refElBodyMain.value.offsetHeight >= props.scrollY) {\n isY = bodyHeight > refElBodyMain.value.clientHeight;\n }\n }\n }\n if (isY && optIsShowTotal.value) {\n if (refElHeadTable.value) {\n const h = refElHeadTable.value.getTotalHeight() - (CommonBase.osType().isMobile ? 2 : 0);\n optBase.totalHeight = `${h}px`;\n }\n }\n optScrollYIsShow.value = isY;\n }\n};\n\nconst _calculationScrollFixedColumn = () => {\n if (\n (optFixedLeftIsUse.value || optFixedRightIsUse.value) &&\n refElBodyMain.value &&\n refElBodyTable.value\n ) {\n let scrollLeft = refElBodyMain.value.scrollLeft;\n const pWidth = refElBodyMain.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n let posType = 'left';\n if (scrollLeft > 0) {\n const tempSum = pWidth + scrollLeft;\n if (tempSum >= cWidth) {\n posType = 'right';\n } else {\n posType = 'center';\n }\n }\n optScrollX.posType = posType;\n }\n};\n\nconst _calculationScrollRelation = () => {\n if (!refElBodyWrapper.value || !refElBodyTable.value) {\n return;\n }\n let scrollLeft = refElHeadMain.value ? refElHeadMain.value.scrollLeft : 0;\n const pWidth = refElBodyWrapper.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n if (pWidth + scrollLeft > cWidth) {\n scrollLeft = 0;\n }\n if (optElastic.loading.length > 0) {\n refElBodyTable.value.setElasticLoadLeft(scrollLeft);\n }\n if (optNewList.value.length === 0) {\n refElBodyTable.value.setEmptyLeft(scrollLeft);\n }\n};\n\n// rAF 节流:滚动事件高频触发,同步 head/固定列与两轮布局计算合并到下一帧执行一次。\n// 每次调用先更新 cache(最后触发源胜),回调不再依赖首个事件对象——同帧多滚动源(head 滚动条 + body 惯性)时不会用旧源值覆盖回跳\nconst _onScrollX = (e: Event) => {\n _scrollLeftCache = (e.target as HTMLElement).scrollLeft;\n if (_rafIdScrollX !== null) {\n return;\n }\n _rafIdScrollX = requestAnimationFrame(() => {\n _rafIdScrollX = null;\n const scrollLeft = _scrollLeftCache;\n\n if (refElHeadMain.value) {\n refElHeadMain.value.scrollLeft = scrollLeft;\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.scrollLeft = scrollLeft;\n }\n\n if (refElHeadFixedScrollX.value) {\n refElHeadFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n if (refElBodyFixedScrollX.value) {\n refElBodyFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n\n _calculationScrollFixedColumn();\n _calculationScrollRelation();\n });\n};\n\n// head 滚动监听(与 body 侧 _onScrollBody 对称的变化过滤 + clamp 回跳防护):\n// head 滚动范围随滚动条占位(occupy 类)切换,程序赋值被浏览器 clamp 到上限时下一帧派发 scroll 事件,\n// 不加过滤时该 clamp 值覆盖 cache 把 body 拉回 head 上限(用户无法把 body 滚过 head 的滚动范围)\nconst _onScrollHead = (e: Event) => {\n const el = e.target as HTMLElement;\n const left = el.scrollLeft;\n const maxLeft = el.scrollWidth - el.clientWidth;\n if (maxLeft - left < 1 && refElBodyMain.value && refElBodyMain.value.scrollLeft > left) {\n return;\n }\n if (left !== _pageData.scrollHead.left) {\n _onScrollX(e);\n }\n _pageData.scrollHead.left = left;\n};\n\nconst _onScrollBody = (e: Event) => {\n const left = (e.target as HTMLElement).scrollLeft;\n if (left !== _pageData.scrollBody.left) {\n _onScrollX(e);\n }\n _pageData.scrollBody.left = left;\n};\n\nconst _calculationFixedHeadInfo = () => {\n if (props.isFixedHead && refElHeadWrapper.value && !optBase.isRunLoading) {\n let isShowFixed = false;\n let width = 'auto';\n let height = 'auto';\n const pos =\n refElHeadWrapper.value && refElHeadWrapper.value.parentNode\n ? CommonElement.getPositionView(refElHeadWrapper.value.parentNode)\n : null;\n if (pos && pos.top < 0 && refElBodyWrapper.value && refElHeadContainer.value && refElHeadTable.value) {\n const bodyH = refElBodyWrapper.value.clientHeight;\n if (pos.top > (bodyH - FIXED_HEAD_THRESHOLD) * -1) {\n isShowFixed = true;\n const w = refElBodyWrapper.value.offsetWidth;\n const h =\n optScrollX.isShow && props.isScrollX\n ? refElHeadContainer.value.offsetHeight\n : refElHeadTable.value.getOffsetHeight();\n width = `${w}px`;\n height = `${h}px`;\n }\n }\n optFixedHead.isShow = isShowFixed;\n optFixedHead.width = width;\n optFixedHead.height = height;\n }\n};\n\nconst _setEmptyWidth = () => {\n if (optNewList.value.length === 0) {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setEmptyWidth();\n }\n });\n }\n};\n\nconst _getPaginateSort = (): TableEmitParam => {\n const param: TableEmitParam = {};\n if (props.isPaginate) {\n const { pages, limit } = _pageData.changeNewPaginate;\n param.pages = pages;\n param.limit = limit;\n // isPaginate 开启时 pages/limit 必有初值(1/limit),as 收窄消除 undefined 分支\n param.offset = ((param.pages as number) - 1) * (param.limit as number);\n }\n if (props.isOrder) {\n const { orderIndex, orderBy } = _pageData.changeNewSort;\n param.orderIndex = orderIndex;\n param.orderBy = orderBy;\n const orderColumn = (props.columns as any[])[orderIndex as number];\n if (!CommonBase.isUndefined(orderColumn)) {\n param.orderColumns = orderColumn.data;\n }\n }\n return param;\n};\n\nconst _initScrollSelect = () => {\n if (props.scrollY > 0) {\n nextTick(() => {\n if (!refElBodyMain.value) {\n return;\n }\n const elSelected = refElBodyMain.value.querySelectorAll('.tr-selected');\n refElBodyMain.value.scrollTop =\n elSelected && elSelected.length > 0\n ? (elSelected[0] as HTMLElement).offsetTop > SELECT_SCROLL_THRESHOLD\n ? (elSelected[0] as HTMLElement).offsetTop - SELECT_SCROLL_OFFSET\n : 0\n : 0;\n });\n }\n};\n\nconst _setNewDataAfter = (opt: any = {}) => {\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n _initScrollSelect();\n }\n\n if (props.isElastic) {\n const isElasticCloseAll = CommonBase.isBoolean(opt.isElasticCloseAll)\n ? opt.isElasticCloseAll\n : true;\n if (isElasticCloseAll) {\n optElastic.open = [];\n // 全关时清空 Body 侧 absolute 标记(旧行 id 作废,残留标记在 id 复用场景会命中)\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.clearElasticAbsolute();\n }\n }\n optElastic.loading = [];\n _initElasticAllData();\n }\n // 数据替换后重置悬停高亮:hover 跟随行索引,新数据同索引行会残留旧高亮\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n nextTick(() => {\n if (props.isPaginate) {\n optPageInfo.pages = _pageData.changeNewPaginate.pages;\n optPageInfo.limit = _pageData.changeNewPaginate.limit;\n }\n if (props.isOrder) {\n optOrderSort.value = _initOrderData([\n _pageData.changeNewSort.orderIndex,\n _pageData.changeNewSort.orderBy,\n ]);\n }\n _runLoadStop();\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setEmptyWidth();\n _calculationFixedHeadInfo();\n });\n });\n};\n\nconst _getNewDataByLocal = (param: any, isInitSort: boolean) => {\n const list = CommonBase.isEmpty(props.list) ? [] : props.list;\n let newSortData: any[] = [];\n if (isInitSort) {\n if (props.isOrder) {\n const jsonData: any = {};\n const sortKey: any[] = [];\n let sortFormat = 'string';\n if (!CommonBase.isUndefined(param.orderIndex)) {\n const orderColumns = param.orderColumns;\n const columnsInfo = (props.columns as any[])[param.orderIndex];\n if (!CommonBase.isUndefined(columnsInfo)) {\n if (CommonBase.isEmpty(columnsInfo.sortType)) {\n switch (columnsInfo.format) {\n case 'int':\n case 'float2':\n case 'float3':\n sortFormat = 'number';\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n sortFormat = 'date';\n break;\n default:\n sortFormat = 'string';\n }\n } else {\n sortFormat = columnsInfo.sortType;\n }\n }\n list.forEach((info: any) => {\n if (!info) {\n return;\n }\n let temp = info[orderColumns];\n temp = CommonBase.isUndefined(temp) || temp === null ? '' : temp;\n const tempStr = temp.toString();\n if (!CommonBase.isExistJsonKey(jsonData, tempStr)) {\n jsonData[tempStr] = [];\n sortKey.push(temp);\n }\n jsonData[tempStr].push(CommonBase.getJsonClone(info));\n });\n }\n if (sortKey.length > 0) {\n const newSortKey: any[] =\n param.orderBy === 'desc'\n ? CommonBase.getArrDesc(sortKey, sortFormat)\n : CommonBase.getArrAsc(sortKey, sortFormat);\n newSortKey.forEach((k: any) => {\n newSortData.push(...jsonData[k.toString()]);\n });\n }\n } else {\n newSortData = CommonBase.getListClone(props.list);\n }\n _pageData.sortLocalData = newSortData;\n } else {\n newSortData = _pageData.sortLocalData;\n }\n if (props.isPaginate) {\n const newData = [];\n const len = newSortData.length;\n const s = param.offset;\n let e = param.offset + param.limit;\n e = len < e ? len : e;\n if (len) {\n if (len >= s && len > 0) {\n for (let i = s; i < e; i += 1) {\n newData.push(CommonBase.getJsonClone(newSortData[i]));\n }\n }\n }\n return newData;\n } else {\n return newSortData;\n }\n};\n\nconst _getNewDataBefore = (opt: any = {}) => {\n const param = _getPaginateSort();\n optCurrentPageSelectIds.value = [];\n optAllValue.value = false;\n _runLoadStart();\n if (props.isServer) {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n _emitGetData(param);\n }, LOCAL_LOAD_DELAY);\n } else {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n const isInitSortData = CommonBase.isBoolean(opt.isChangePage) ? !opt.isChangePage : true;\n optNewList.value = _getNewDataByLocal(param, isInitSortData);\n _setNewDataAfter();\n }, LOCAL_LOAD_DELAY);\n }\n};\n\nconst _listenerTableScrollX = () => {\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.addEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.addEventListener('scroll', _onScrollBody);\n }\n }\n};\n\nconst _listenerTableScrollY = () => {\n if (optScrollYIsUse.value) {\n const win: any = window;\n const MutationObserver: any =\n win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver;\n if (!MutationObserver) {\n return;\n }\n _pageObject.observerBodyScrollY = new MutationObserver(() => {\n _calculationScrollY();\n });\n const observer = _pageObject.observerBodyScrollY;\n if (refElBodyTable.value && refElBodyTable.value.$el && observer) {\n observer.observe(refElBodyTable.value.$el, {\n childList: true,\n subtree: true,\n });\n }\n }\n};\n\nconst _onWinResize = () => {\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setElasticWidth();\n _setEmptyWidth();\n _calculationScrollRelation();\n nextTick(() => {\n _calculationFixedHeadInfo();\n });\n};\n\nconst _onWinScroll = () => {\n if (_rafIdWinScroll !== null) {\n return;\n }\n _rafIdWinScroll = requestAnimationFrame(() => {\n _rafIdWinScroll = null;\n _calculationFixedHeadInfo();\n });\n};\n\nconst _initMain = () => {\n _analysisColumns();\n nextTick(() => {\n if (props.isServer) {\n _getNewDataBefore();\n } else {\n if (!CommonBase.isEmpty(props.list)) {\n _getNewDataBefore();\n if (!props.isShowInitLoadIng) {\n optBase.isRunLoading = false;\n }\n } else {\n if (props.isShowInitLoadIng) {\n _runLoadStart();\n } else {\n nextTick(() => {\n _setEmptyWidth();\n });\n }\n }\n }\n });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n _listenerTableScrollX();\n _listenerTableScrollY();\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true, // 拖拽窗口高频触发 resize,DelayFun 默认 200ms 节流(isDelay 默认即 true,显式标注语义)\n callback: () => {\n _onWinResize();\n },\n });\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n });\n});\n\nonActivated(() => {\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n // 与 scroll 同源处理:deactivated 时已销毁,激活后重建 resize 监听,防止缓存期间持续执行布局计算\n if (!_pageData.resizeEvent) {\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true,\n callback: () => {\n _onWinResize();\n },\n });\n }\n // 缓存期间窗口尺寸变化已丢失监听,激活后立即补一次布局重算(固定列宽/滚动量判定停留在缓存前状态,否则持续错误到下次 resize)\n _onWinResize();\n // deactivated 时取消了未决加载请求 → 激活后补发数据(keep-alive 切走切回场景,数据不停滞)\n if (_pageData.pendingCanceled) {\n _pageData.pendingCanceled = false;\n _getNewDataBefore();\n }\n});\n\nonDeactivated(() => {\n window.removeEventListener('scroll', _onWinScroll);\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n // 取消未决加载后同步复位 loading:否则 isRunLoading 残留 true,\n // 遮罩常驻 + onChangePaginate/refresh/onClickOrderBy 的守卫把交互全部吞掉(keep-alive 缓存期)\n optBase.isRunLoading = false;\n // 标记未决请求被取消:onActivated 时补发数据(否则 keep-alive 切回后数据停留旧状态,\n // 与 onBeforeUnmount→onMounted 经 _initMain 重拉的路径不对称——Index R4 回归发现)\n _pageData.pendingCanceled = true;\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n _pageData.resizeEvent = null;\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n});\n\nonBeforeUnmount(() => {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n if (_pageObject.observerBodyScrollY) {\n _pageObject.observerBodyScrollY.disconnect();\n _pageObject.observerBodyScrollY.takeRecords();\n _pageObject.observerBodyScrollY = null;\n }\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.removeEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.removeEventListener('scroll', _onScrollBody);\n }\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n window.removeEventListener('scroll', _onWinScroll);\n});\n\nwatch(\n () => props.list,\n (newValue: any[], oldValue: any[]) => {\n // 外部传 null 兜底空数组(Array prop 校验放行 null,getJsonByList/遍历会崩溃)\n const safeList: any[] = CommonBase.isEmpty(newValue) ? [] : newValue;\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n _pageData.dataJson = CommonBase.getJsonByList(safeList);\n\n if (props.isServer) {\n // 克隆后赋值:与本地模式一致,防止子组件原地修改行对象污染外部传入的 props.list\n optNewList.value = CommonBase.getListClone(safeList) as ListInfo[];\n } else {\n if (props.isParamTriggerServer) {\n optNewList.value = CommonBase.getListClone(safeList, true);\n } else {\n _pageData.changeNewPaginate.pages = 1;\n const paramLocal = _getPaginateSort();\n optNewList.value = _getNewDataByLocal(paramLocal, true) as ListInfo[];\n }\n }\n const opt: any = {};\n if (props.isElastic) {\n // 原地 mutation 时 newValue 与 oldValue 为同一批对象引用,逐项比较 id 恒相等;\n // 改为 id 集合 diff:以「内容是否变化」判断是否为数据更新(引用变化时 isUpd 为 true,不走关闭逻辑)\n let isUpd = false;\n if (oldValue) {\n if (safeList.length === oldValue.length) {\n // list 中含 null 行时 null.id 会中断回调,用可选链兜底(null 行无 id 可比较,不视为更新)\n const oldIdSet = new Set(oldValue.map((item: any) => item?.id));\n isUpd = safeList.some((info: any) => info && !oldIdSet.has(info.id));\n } else {\n // 长度变化(新增/删除行)也视为数据更新,被删行的展开 id 不再残留\n isUpd = true;\n }\n }\n if (!isUpd) {\n opt.isElasticCloseAll = false;\n }\n }\n _setNewDataAfter(opt);\n },\n { deep: true },\n);\n\nwatch(\n () => props.columns,\n () => {\n nextTick(() => {\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n });\n });\n },\n { deep: true },\n);\n\nwatch(\n () => props.selectValue,\n () => {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n },\n);\n\nwatch(\n () => props.orderSort,\n (newValue: unknown[], _oldValue: unknown[]) => {\n if (newValue && newValue.length >= 2) {\n if (\n !(\n newValue[0] === _pageData.changeNewSort.orderIndex &&\n newValue[1] === _pageData.changeNewSort.orderBy\n )\n ) {\n const newOrderSort = _initOrderData(props.orderSort);\n // 与 onClickOrderBy 一致:排序变更从第 1 页开始,避免停留在旧页码切片\n _pageData.changeNewPaginate.pages = 1;\n // 页码 UI 立即同步:服务端模式下 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移\n optPageInfo.pages = 1;\n _pageData.changeNewSort = {\n orderIndex: newOrderSort[0],\n orderBy: newOrderSort[1],\n };\n optOrderSort.value = newOrderSort;\n // 非 isParamTriggerServer 模式:外部改 props 排序需本地重算数据(与 onClickOrderBy 分支一致)\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n }\n },\n { deep: true },\n);\n\nwatch(\n [() => props.pageOffset, () => props.paginateLimit],\n ([_newOffset, newLimit], [_oldOffset, _oldLimit]) => {\n const pages = _initPaginatePages();\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = newLimit;\n optPageInfo.pages = pages;\n optPageInfo.limit = newLimit;\n // 外部改 props 分页需本地重算数据(与 onChangePaginate 分支一致);isParamTriggerServer 由外部拉数,不重算\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n },\n);\n\nconst onSelectAll = () => {\n // 组件禁用时全选一并拦截:表头 checkbox 已随 disabled 置灰,此处为逻辑层兜底,防任何路径绕过 UI 触发全选\n if (props.disabled) {\n return;\n }\n const newAllValue = !optAllValue.value;\n let newSelectValue: string[] = [];\n if (newAllValue) {\n const allIds = _getCurrentPageAllUse();\n const sIds = optCurrentPageSelectIds.value;\n const temp: string[] = [];\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(sIds, aId)) {\n temp.push(aId);\n }\n });\n newSelectValue = sIds.concat(temp);\n }\n optAllValue.value = newAllValue;\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n};\n\nconst onClickOrderBy = (_info: any, inx: number, sortType: string) => {\n // 组件禁用时排序一并拦截:表头排序图标已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发排序\n if (props.disabled) {\n return;\n }\n if (!optBase.isRunLoading) {\n _pageData.changeNewPaginate.pages = 1;\n // 与 watch orderSort 一致:页码 UI 立即同步(服务端模式 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移)\n optPageInfo.pages = 1;\n _pageData.changeNewSort.orderIndex = inx;\n _pageData.changeNewSort.orderBy = sortType;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n};\n\n// info 允许 null:Body emit 声明 ListInfo | null(list 含 null 行时点击行携带 null),isEmpty 守卫已拦截\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n // null 行守卫:list 含 null 项时 info.isDisabled 解引用崩溃(null 行无行为,直接返回);!info 同时提供 TS 收窄\n if (!info || CommonBase.isEmpty(info)) {\n return;\n }\n // 禁用行统一拦截:行禁用或组件禁用时,选中、弹性展开、onClickRow 事件全部不触发\n if ((CommonBase.isBoolean(info.isDisabled) && info.isDisabled) || props.disabled) {\n return;\n }\n // 空串语义 = 不启用拦截:getParent 空串分支返回 parentNode 会误拦截全部点击,先守卫\n const elInvalid = CommonBase.isNonEmptyString(props.rowClickKeyInvalid)\n ? CommonElement.getParent(e.target, props.rowClickKeyInvalid, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elInvalid)) {\n if (props.isElastic) {\n const elElastic = CommonBase.isNonEmptyString(props.rowClickKeyElastic)\n ? CommonElement.getParent(e.target, props.rowClickKeyElastic, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elElastic)) {\n if (props.isClickRowLinkage) {\n _setSelectElasticIds(info, inx);\n }\n } else {\n _setSelectElasticIds(info, inx, elElastic);\n return;\n }\n }\n let isRc = false;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n let elRc = CommonElement.getParent(e.target, '.th-rc', e.currentTarget, false);\n if (elRc === e.currentTarget) {\n elRc = null;\n }\n if (CommonBase.isUndefined(elRc)) {\n if (props.isClickRowLinkage) {\n _setSelectRc(info);\n }\n } else {\n isRc = true;\n _setSelectRc(info);\n }\n }\n _emitClickRow(info, inx, isRc);\n }\n};\n\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n optBase.hoverTrIndex = inx;\n optBase.hoverTrElasticIndex = elasticInx;\n};\n\nconst onHoverOutTr = () => {\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n};\n\nconst onChangePaginate = (pages: number, limit: number) => {\n // 组件禁用时分页一并拦截:分页条已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发翻页\n if (props.disabled) {\n return;\n }\n if (optBase.isRunLoading) {\n return;\n }\n if (props.isPaginate) {\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = limit;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n }\n};\n\nconst onFixedScrollX = (e: Event) => {\n _onScrollX(e);\n};\n\nconst getParamInfo = () => {\n return _getPaginateSort();\n};\n\nconst refresh = (isInit = true) => {\n if (optBase.isRunLoading) {\n return;\n }\n if (isInit) {\n _pageData.changeNewPaginate.pages = 1;\n }\n _getNewDataBefore();\n};\n\nconst getData = (): ListInfo[] => {\n // 浅拷贝契约:行对象一层克隆,嵌套对象与内部状态共享引用(外部拿到后不会改到内部状态,但嵌套引用仍共享)\n const list = toRaw(optNewList.value);\n return CommonBase.getListClone(list) as ListInfo[];\n};\n\nconst getSelectData = () => {\n const selectDataItem = _getSelectDataItem();\n const checkedIds = selectDataItem?.checkedIds || [];\n return { ids: checkedIds.join(','), list: selectDataItem?.checkedData || [] };\n};\n\nconst loadStart = () => {\n _runLoadStart();\n};\n\nconst loadStop = () => {\n _runLoadStop();\n};\n\n// 与 closeElastic 一致:外部可能传数字 id(ListInfo.id 为 string | number),入口归一为字符串防 indexOf 失配\nconst loadElasticStart = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStart(id.toString());\n};\n\nconst loadElasticStop = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStop(id.toString());\n};\n\n// 幂等关闭:未展开的行直接返回,避免调用方按「关闭」语义误触「展开 + 触发加载」\nconst closeElastic = (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => {\n // null 行守卫:运行时兜底(list 含 null 项场景调用方可能传入空 info),info.id 解引用前先判空\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (optElastic.open.indexOf(id) === -1) {\n return;\n }\n // elElastic 缺省时按 data-elastic-id 定位(Body 模板挂载点),供关闭后弹性容器类名/高度复位\n const el =\n elElastic ||\n (refElBodyMain.value\n ? (refElBodyMain.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null)\n : null);\n _setSelectElasticIds(info, trIndex, el, false);\n};\n\nconst refreshResize = () => {\n _onWinResize();\n};\n\nexport interface ClTableExpose {\n getParamInfo: () => TableEmitParam;\n refresh: (isInit?: boolean) => void;\n getData: () => ListInfo[];\n getSelectData: () => { ids: string; list: ListInfo[] };\n loadStart: () => void;\n loadStop: () => void;\n loadElasticStart: (id: string | number) => void;\n loadElasticStop: (id: string | number) => void;\n closeElastic: (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => void;\n refreshResize: () => void;\n}\n\ndefineExpose({\n getParamInfo,\n refresh,\n getData,\n getSelectData,\n loadStart,\n loadStop,\n loadElasticStart,\n loadElasticStop,\n closeElastic,\n refreshResize,\n});\n</script>\n"],"names":["getTipIconInfo","tipIcon","CommonBase","name","props","__props","emit","__emit","optTipIcon","computed","optThInfo","optSortable","optSortInteractive","optTipMsgText","tipMsg","text","optSortType","orderSort","optAriaSort","clsTh","cls","thInfo","_isWidthValid","activeSort","clsFinal","CommonElement","styTh","sty","_emitClickOrderBy","sortType","w","onClickOrderBy","newSortType","_unref","_createElementBlock","_createElementVNode","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_Fragment","optTdInfo","clsTd","tdInfo","styTd","NO_HOVER_TOTAL_INDEX","refElTable","ref","clsParent","styTable","optFunGetThValue","info","optFunGetTdValue","value","opt","optFunGetTotalValue","watch","nv","onSelectAll","inx","onHoverInTotal","onHoverOutTotal","__expose","elRc","totalPadding","elThs","ti","thStyle","plRaw","prRaw","pl","pr","h","elTotal","ClCheckboxOne","_openBlock","_renderList","thIndex","ClTableTh","_toDisplayString","_hoisted_2","_normalizeClass","_hoisted_3","tdIndex","ClTableTd","elId","optForId","_emitChange","onTipClick","onClick","event","target","_hoisted_4","_createVNode","optForIdCb","_getForId","optForIdRd","optIsChecked","optIsDisabled","suffix","ClRadioOne","optPageLanguage","getPageLanguage","useLanguage","optElasticAbsoluteIds","optSelectedSet","v","optElasticLoadingSet","optElasticOpenSet","optColspanCount","n","clsTable","onClickTr","e","onHoverInTr","elasticInx","onHoverOutTr","optGetElasticDataList","id","elasticData","optIsTrSelected","optIsElasticLoading","parentEl","el","li","elElastic","cur","next","scrollLeft","safeLeft","trInfo","trIndex","$event","ClTableTdChecked","_createTextVNode","_hoisted_5","ClLoad","_hoisted_9","_hoisted_10","trElasticInfo","trElasticInx","tdElasticInfo","tdElasticIndex","_hoisted_12","_hoisted_14","SCROLLBAR_HEIGHT","FIXED_HEAD_THRESHOLD","SELECT_SCROLL_THRESHOLD","SELECT_SCROLL_OFFSET","LOCAL_LOAD_DELAY","slots","useSlots","_initOrderData","data","orderSortInfo","initFirstSort","columns","i","columnInfo","sort","visible","columnOrderInfo","orderIndex","orderBy","_initPaginatePages","pages","_initOrderSort","_pageData","_pageObject","_keyIndex","refElHeadWrapper","refElHeadContainer","refElHeadMain","refElHeadTable","refElHeadFixedScrollX","refElBodyWrapper","refElBodyContainer","refElBodyMain","refElBodyTable","refElBodyFixedScrollX","optBase","reactive","optNewList","optPageInfo","optOrderSort","optAllValue","_getSelectValueIds","selectValue","optCurrentPageSelectIds","optElastic","optScrollX","optScrollYIsShow","optFixedColumn","optFixedHead","optLoadInfo","_rafIdScrollX","_rafIdWinScroll","_scrollLeftCache","optSlotsKeyTh","optSlotsKeyTd","names","optSlotsKeyTotal","optSlotsKeyTdElastic","optIsShowCheckboxAll","optIsShowTotal","optTotalCount","optScrollXIsUse","optScrollYIsUse","optFixedLeftIsUse","optFixedRightIsUse","clsHeadWrapper","clsHeadContainer","clsBodyWrapper","styBodyContainer","maxH","styBodyMain","styLoadHead","_emitGetData","param","_emitClickElastic","isOpen","_emitClickRow","isRc","_emitChangeChecked","ids","list","ext","_emitChangeParams","_getPaginateSort","_runLoadStart","nextTick","elThead","_runLoadStop","_analysisColumns","colspanCount","minWidth","_analysisFixedColumns","resolve","reject","totalWidth","centerWidth","leftColumn","rightColumn","elTds","totalLen","leftColspanCount","rightColspanCount","leftIndexMax","rightIndexMin","leftWidth","rightWidth","fi","elTd","tempW","err","_setElasticWidth","_setElasticHeight","_runElasticLoadStart","arr","_runElasticLoadStop","_setSelectElasticIds","isEmit","_initElasticOneClass","isEmitUse","_initElasticAllData","newList","elasticIconCls","arrOpenId","newInfo","addCls","removeCls","newCls","_getCurrentPageAllUse","allIds","_getCurrentSelectUse","selectIds","sIds","useIds","sId","_setCheckboxAll","checkedIds","_getSelectDataItem","unCheckedIds","aId","_emitChangeCheckedBefore","selectDataItem","_setSelectRc","newId","oldSelectValue","newSelectValue","isExist","_calculationScrollX","pW","tW","_calculationScrollY","bodyHeight","isY","_calculationScrollFixedColumn","pWidth","cWidth","posType","_calculationScrollRelation","_onScrollX","_onScrollHead","left","_onScrollBody","_calculationFixedHeadInfo","isShowFixed","width","height","pos","bodyH","_setEmptyWidth","limit","orderColumn","_initScrollSelect","elSelected","_setNewDataAfter","arrSelectIds","_getNewDataByLocal","isInitSort","newSortData","jsonData","sortKey","sortFormat","orderColumns","columnsInfo","temp","tempStr","k","newData","len","s","_getNewDataBefore","isInitSortData","_listenerTableScrollX","_listenerTableScrollY","win","MutationObserver","observer","_onWinResize","_onWinScroll","_initMain","onMounted","ResizeEvent","onActivated","onDeactivated","onBeforeUnmount","newValue","oldValue","safeList","paramLocal","isUpd","oldIdSet","item","_oldValue","newOrderSort","_newOffset","newLimit","_oldOffset","_oldLimit","newAllValue","_info","elInvalid","onChangePaginate","onFixedScrollX","isInit","toRaw","_normalizeStyle","ClTableHead","skTh","_withCtx","slotProps","skTotal","_withDirectives","_hoisted_6","ClScrollXFence","_vShow","_hoisted_7","ClTableBody","skTd","skTdElastic","_hoisted_8","_hoisted_11","ClPaginate","_hoisted_13","ClLoadIng"],"mappings":"ovBAUaA,GAAkBC,GAA6C,CAC1E,GAAIC,EAAAA,WAAW,iBAAiBD,CAAO,EAAG,CACxC,GAAIA,EAAQ,QAAQ,SAAS,IAAM,EAAG,CAEpC,MAAME,EAAOF,EAAQ,UAAU,CAAgB,EAC/C,OAAIC,EAAAA,WAAW,iBAAiBC,CAAI,GAAK,kBAAkB,KAAKA,CAAI,EAC3D,CAAE,KAAAA,EAAM,UAAW,EAAA,EAErB,CAAE,KAAM,kBAAmB,UAAW,EAAA,CAC/C,CACA,MAAI,WAAW,KAAKF,CAAO,EAElB,CAAE,KAAM,kBAAmB,UAAW,EAAA,EAE3C,kBAAkB,KAAKA,CAAO,EAEzB,CAAE,KAAMA,EAAS,UAAW,EAAA,EAG9B,CAAE,KAAM,GAAI,UAAWA,CAAA,CAChC,CACA,MAAO,CAAE,KAAM,kBAAmB,UAAW,EAAA,CAC/C,+lBCiBA,MAAMG,EAAQC,EA+CRC,EAAOC,EAMPC,EAAaC,EAAAA,SAAS,IAAMT,GAAeI,EAAM,QAAQ,OAAO,CAAC,EAKjEM,EAAYD,EAAAA,SAAS,IACzBP,aAAW,SAASE,EAAM,MAAM,GAAK,CAACF,aAAW,QAAQE,EAAM,MAAM,EAChEA,EAAM,OACN,CAAA,CAAC,EAKFO,EAAcF,EAAAA,SAAS,IACvB,CAACL,EAAM,SAMPF,aAAW,QAAQQ,EAAU,KAAK,EAC7B,GAEFR,aAAW,QAAQQ,EAAU,MAAM,IAAI,EAAI,GAAOA,EAAU,MAAM,OAAS,EACnF,EAGKE,EAAqBH,EAAAA,SAAS,IAAME,EAAY,OAAS,CAACP,EAAM,QAAQ,EAGxES,EAAgBJ,EAAAA,SAAS,IAAM,CACnC,MAAMK,EAASV,EAAM,QAAQ,OAC7B,GAAI,CAACF,EAAAA,WAAW,iBAAiBY,CAAM,EACrC,OAGF,MAAMC,EAAOb,EAAAA,WAAW,eAAeY,CAAM,EAC7C,OAAOZ,EAAAA,WAAW,iBAAiBa,CAAI,EAAIA,EAAO,MACpD,CAAC,EAGKC,EAAcP,EAAAA,SAAS,IAAM,CACjC,GAAI,CAACE,EAAY,MACf,MAAO,GAET,MAAMM,EAAYf,EAAAA,WAAW,QAAQE,EAAM,SAAS,EAAI,CAAA,EAAKA,EAAM,UACnE,OAAIa,EAAU,OAAS,GAAKA,EAAU,CAAC,IAAMb,EAAM,QAE1Ca,EAAU,SAAW,EACxBA,EAAU,CAAC,IAAM,OAASA,EAAU,CAAC,IAAM,OACzCA,EAAU,CAAC,EACX,OACFA,EAAU,SAAW,EACnB,OACA,OAED,MACT,CAAC,EAEKC,EAAcT,EAAAA,SAAS,IAAM,CACjC,GAAIO,EAAY,QAAU,MACxB,MAAO,YAET,GAAIA,EAAY,QAAU,OACxB,MAAO,aAET,GAAIA,EAAY,QAAU,OACxB,MAAO,MAGX,CAAC,EAEKG,EAAQV,EAAAA,SAAS,IAAM,CAC3B,MAAMW,EAA+B,CAAA,EAC/BC,EAASX,EAAU,MAgBzB,GAfI,CAACR,EAAAA,WAAW,QAAQmB,EAAO,KAAK,GAAKC,EAAcD,EAAO,KAAK,IACjED,EAAI,GAAGhB,EAAM,gBAAgB,GAAGiB,EAAO,KAAK,EAAE,EAAI,IAGlD,CAACnB,EAAAA,WAAW,QAAQmB,EAAO,QAAQ,GACnCC,EAAcD,EAAO,QAAQ,GAC7BjB,EAAM,eAENgB,EAAI,GAAGhB,EAAM,mBAAmB,GAAGiB,EAAO,QAAQ,EAAE,EAAI,KAEtDjB,EAAM,eAAiB,IAAMA,EAAM,gBAAkB,MACvDgB,EAAI,WAAW,EACZhB,EAAM,eAAiB,IAAMA,EAAM,QAAUA,EAAM,gBACnDA,EAAM,gBAAkB,IAAMA,EAAM,QAAUA,EAAM,iBAErDO,EAAY,MAAO,CACrBS,EAAI,SAAS,EAAI,GACjBA,EAAI,WAAW,EAAI,GACnBA,EAAI,cAAc,EAAIC,EAAO,WAAa,GAE1C,MAAME,EAAaP,EAAY,OAC3BO,IAAe,OAASA,IAAe,UACzCH,EAAI,QAAQG,CAAU,EAAE,EAAI,GAC5BH,EAAI,WAAW,EAAI,GAEvB,CACIlB,aAAW,iBAAiBmB,EAAO,MAAM,IAC3CD,EAAI,QAAQ,EAAI,GAChBA,EAAI,kBAAkB,EAAIC,EAAO,eAAiB,IAEhDjB,EAAM,WACRgB,EAAI,aAAa,EAAI,IAEnBlB,aAAW,iBAAiBmB,EAAO,SAAS,GAC1CnB,EAAAA,WAAW,aAAa,CAAC,OAAQ,SAAU,OAAO,EAAGmB,EAAO,SAAS,IACvED,EAAI,QAAQC,EAAO,SAAS,EAAE,EAAI,IAGtC,IAAIG,EAAoCJ,EACxC,OAAAI,EAAWtB,EAAAA,WAAW,aAAasB,EAAUC,EAAAA,cAAc,iBAAiBJ,EAAO,SAAS,CAAC,EAC7FG,EAAWtB,EAAAA,WAAW,aAAasB,EAAUC,EAAAA,cAAc,iBAAiBJ,EAAO,OAAO,CAAC,EACpFG,CACT,CAAC,EAGKE,EAAQjB,EAAAA,SAAS,IAAM,CAC3B,MAAMkB,EAA8B,CAAA,EACpC,GAAI,CAACvB,EAAM,cACT,OAAOuB,EAET,MAAMN,EAASX,EAAU,MACzB,MAAI,CAACR,EAAAA,WAAW,QAAQmB,EAAO,KAAK,GAAKC,EAAcD,EAAO,KAAK,IACjEM,EAAI,MAAQzB,aAAW,SAAS,OAAOmB,EAAO,KAAK,CAAC,EAChD,GAAG,OAAOA,EAAO,KAAK,CAAC,KACvB,GAAGA,EAAO,KAAK,IAGnB,CAACnB,EAAAA,WAAW,QAAQmB,EAAO,QAAQ,GACnCC,EAAcD,EAAO,QAAQ,GAC7BjB,EAAM,eAENuB,EAAI,SAAWzB,aAAW,SAAS,OAAOmB,EAAO,QAAQ,CAAC,EACtD,GAAG,OAAOA,EAAO,QAAQ,CAAC,KAC1B,GAAGA,EAAO,QAAQ,IAEjBM,CACT,CAAC,EAEKC,EAAoB,CAACP,EAAqBQ,IAAqB,CACnEvB,EAAK,iBAAkBe,EAAQjB,EAAM,QAASyB,CAAQ,CACxD,EAGMP,EAAiBQ,GACd5B,aAAW,SAAS4B,CAAC,GAAM5B,EAAAA,WAAW,UAAU4B,CAAC,IAAM,UAAY5B,aAAW,SAAS4B,CAAC,EAG3FC,EAAiB,IAAM,CAE3B,GAAInB,EAAmB,MAAO,CAE5B,MAAMoB,EAAchB,EAAY,QAAU,OAAS,MAAQ,OAC3DY,EAAkBlB,EAAU,MAAOsB,CAAW,CAChD,CACF,8DAnQUC,CAAAA,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,UAAUG,EAAA,QAAQ,OAAO,GAAIA,EAAA,OAAO,uBADvD6B,EAAAA,mBA8BK,KAAA,OA5BF,uBAAOf,EAAA,KAAK,EACZ,uBAAOO,EAAA,KAAK,EACb,MAAM,MACL,YAAWR,EAAA,KAAA,GAEZiB,EAAAA,mBAKO,OAAA,CAJL,MAAM,WACL,QAAOJ,CAAA,GAERK,aAAQC,EAAA,OAAA,SAAA,CAAA,GAGFJ,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBG,EAAA,QAAQ,MAAM,kCADlDiC,EAAAA,YAQEC,GAAAA,UAAA,OANC,KAAM/B,EAAA,MAAW,KACjB,UAAWA,EAAA,MAAW,UACvB,MAAM,cACN,KAAK,MACJ,aAAYK,EAAA,KAAA,8CACQ,CAAA2B,EAAA,CAAA,KAAAnC,EAAA,OAAO,OAAM,UAAA,eAAA,CAAA,CAAA,kBAEpC6B,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpBzB,EAAA,QAAW,kBADnBkB,EAAAA,mBAKE,IAAA,OAHA,MAAM,eACN,cAAY,OACX,QAAOH,CAAA,mBAEVG,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,yBAE9BP,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,2iBCG9B,MAAMrC,EAAQC,EA+CRG,EAAaC,EAAAA,SAAS,IAAMT,GAAeI,EAAM,QAAQ,OAAO,CAAC,EAGjEsC,EAAYjC,EAAAA,SAAS,IACzBP,EAAAA,WAAW,QAAQE,EAAM,MAAM,EAAK,CAAA,EAAqBA,EAAM,MAAA,EAI3DS,EAAgBJ,EAAAA,SAAS,IAAM,CACnC,MAAMK,EAASV,EAAM,QAAQ,OAC7B,GAAI,CAACF,EAAAA,WAAW,iBAAiBY,CAAM,EACrC,OAGF,MAAMC,EAAOb,EAAAA,WAAW,eAAeY,CAAM,EAC7C,OAAOZ,EAAAA,WAAW,iBAAiBa,CAAI,EAAIA,EAAO,MACpD,CAAC,EAEK4B,EAAQlC,EAAAA,SAAS,IAAM,CAC3B,MAAMW,EAA+B,CAAA,EAC/BwB,EAASF,EAAU,MAErB,CAACxC,EAAAA,WAAW,QAAQ0C,EAAO,KAAK,GAAKtB,EAAcsB,EAAO,KAAK,IACjExB,EAAI,GAAGhB,EAAM,gBAAgB,GAAGwC,EAAO,KAAK,EAAE,EAAI,IAGlD,CAAC1C,EAAAA,WAAW,QAAQ0C,EAAO,QAAQ,GACnCtB,EAAcsB,EAAO,QAAQ,GAC7BxC,EAAM,eAENgB,EAAI,GAAGhB,EAAM,mBAAmB,GAAGwC,EAAO,QAAQ,EAAE,EAAI,KAEtDxC,EAAM,eAAiB,IAAMA,EAAM,gBAAkB,MACvDgB,EAAI,WAAW,EACZhB,EAAM,eAAiB,IAAMA,EAAM,QAAUA,EAAM,gBACnDA,EAAM,gBAAkB,IAAMA,EAAM,QAAUA,EAAM,iBAErDA,EAAM,UACKF,aAAW,QAAQ0C,EAAO,IAAI,GAAWA,EAAO,OAAS,MAEpExB,EAAI,SAAS,EAAI,GACjBA,EAAI,cAAc,EAAIwB,EAAO,WAAa,IAG1C1C,aAAW,iBAAiB0C,EAAO,MAAM,IAC3CxB,EAAI,QAAQ,EAAI,GAChBA,EAAI,kBAAkB,EAAIwB,EAAO,eAAiB,IAEhD1C,aAAW,iBAAiB0C,EAAO,SAAS,GAC1C1C,EAAAA,WAAW,aAAa,CAAC,OAAQ,SAAU,OAAO,EAAG0C,EAAO,SAAS,IACvExB,EAAI,QAAQwB,EAAO,SAAS,EAAE,EAAI,IAGtC,IAAIpB,EAAoCJ,EACxC,OAAAI,EAAWtB,EAAAA,WAAW,aAAasB,EAAUC,EAAAA,cAAc,iBAAiBmB,EAAO,SAAS,CAAC,EACzFxC,EAAM,UAAY,KACpBoB,EAAWtB,EAAAA,WAAW,aAAasB,EAAUC,EAAAA,cAAc,iBAAiBmB,EAAO,OAAO,CAAC,EAClFxC,EAAM,UAAY,UAC3BoB,EAAWtB,EAAAA,WAAW,aAAasB,EAAUC,EAAAA,cAAc,iBAAiBmB,EAAO,UAAU,CAAC,GAEzFpB,CACT,CAAC,EAGKqB,EAAQpC,EAAAA,SAAS,IAAM,CAC3B,MAAMkB,EAA8B,CAAA,EACpC,GAAI,CAACvB,EAAM,cACT,OAAOuB,EAET,MAAMiB,EAASF,EAAU,MACzB,MAAI,CAACxC,EAAAA,WAAW,QAAQ0C,EAAO,KAAK,GAAKtB,EAAcsB,EAAO,KAAK,IACjEjB,EAAI,MAAQzB,aAAW,SAAS,OAAO0C,EAAO,KAAK,CAAC,EAChD,GAAG,OAAOA,EAAO,KAAK,CAAC,KACvB,GAAGA,EAAO,KAAK,IAGnB,CAAC1C,EAAAA,WAAW,QAAQ0C,EAAO,QAAQ,GACnCtB,EAAcsB,EAAO,QAAQ,GAC7BxC,EAAM,eAENuB,EAAI,SAAWzB,aAAW,SAAS,OAAO0C,EAAO,QAAQ,CAAC,EACtD,GAAG,OAAOA,EAAO,QAAQ,CAAC,KAC1B,GAAGA,EAAO,QAAQ,IAEjBjB,CACT,CAAC,EAGKL,EAAiBQ,GACd5B,aAAW,SAAS4B,CAAC,GAAM5B,EAAAA,WAAW,UAAU4B,CAAC,IAAM,UAAY5B,aAAW,SAAS4B,CAAC,8DAzKvFG,CAAAA,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,UAAUG,EAAA,QAAQ,OAAO,GAAIA,EAAA,OAAO,uBADvD6B,EAAAA,mBAgBK,KAAA,OAdF,uBAAOS,EAAA,KAAK,EACZ,uBAAOE,EAAA,KAAK,CAAA,GAEbT,aAAQC,EAAA,OAAA,SAAA,EAEAJ,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBG,EAAA,QAAQ,MAAM,kCADlDiC,EAAAA,YAQEC,GAAAA,UAAA,OANC,KAAM/B,EAAA,MAAW,KACjB,UAAWA,EAAA,MAAW,UACvB,MAAM,cACN,KAAK,MACJ,aAAYK,EAAA,KAAA,8CACQ,CAAA2B,EAAA,CAAA,KAAAnC,EAAA,OAAO,OAAM,UAAA,eAAA,CAAA,CAAA,kBAEpC6B,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,qBAE9BP,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,gDC4LxBK,GAAuB,kjCAjG7B,MAAM1C,EAAQC,EAuFRC,EAAOC,EAQPwC,EAAaC,EAAAA,IAA6B,IAAI,EAI9CC,EAAYxC,EAAAA,SAAS,KACb,CACV,gBAAiB,EAAA,EAGpB,EAEKyC,EAAWzC,EAAAA,SAAS,IAAM,CAC9B,MAAMkB,EAA8B,CAAA,EACpC,OAAIzB,aAAW,QAAQE,EAAM,SAAS,EAGlCA,EAAM,cAENF,EAAAA,WAAW,iBAAiBE,EAAM,QAAQ,GAC1CA,EAAM,WAAa,SAEnBuB,EAAI,SAAWvB,EAAM,UAGnBF,EAAAA,WAAW,iBAAiBE,EAAM,KAAK,GAAKA,EAAM,QAAU,SAC9DuB,EAAI,MAAQvB,EAAM,OAGfuB,CACT,CAAC,EAEKwB,EAAoBC,GACnBA,EAGElD,EAAAA,WAAW,YAAYkD,EAAK,KAAK,EACpClD,EAAAA,WAAW,YAAYkD,EAAK,IAAI,EAC9B,GACAA,EAAK,KACPA,EAAK,MANA,GASLC,EAAmB,CAACC,EAAYC,IAChCrD,EAAAA,WAAW,YAAYoD,CAAK,GAAK,CAACC,EAC7B,GAELrD,aAAW,QAAQqD,EAAI,MAAM,EACxBD,EAEFpD,EAAAA,WAAW,iBAAiBoD,EAAOC,EAAI,QAAU,GAAIA,EAAI,SAAS,EAIrEC,EAAsB,CAACJ,EAAkCG,IACzD,CAACH,GAAQ,CAACG,EACL,GAEFF,EAAiBD,EAAKG,EAAI,IAAI,EAAGA,CAAG,EAO7CE,EAAAA,MACE,IAAMrD,EAAM,YACZsD,GAAM,CACA,CAACA,GAAMtD,EAAM,aAAe0C,IAC9BxC,EAAK,YAAY,CAErB,CAAA,EAGF,MAAMqD,EAAc,IAAM,CACxBrD,EAAK,YAAY,CACnB,EAEMyB,EAAiB,CAACqB,EAAmBQ,EAAa/B,IAAqB,CAC3EvB,EAAK,iBAAkB8C,EAAMQ,EAAK/B,CAAQ,CAC5C,EAEMgC,EAAiB,IAAM,CAC3BvD,EAAK,YAAawC,EAAoB,CACxC,EAEMgB,EAAkB,IAAM,CAC5BxD,EAAK,YAAY,CACnB,EAiEA,OAAAyD,EAAa,CACX,gBAhEsB,IACjBhB,EAAW,MAGTA,EAAW,MAAM,aAFf,EA+DT,WAzDiB,IAAM,CACvB,IAAIjB,EAAI,EACR,IAAI1B,EAAM,aAAeA,EAAM,iBACzB2C,EAAW,MAAO,CACpB,MAAMiB,EAAOjB,EAAW,MAAM,cAAc,QAAQ,EAChDiB,IACFlC,EAAIkC,EAAK,YAEb,CAEF,OAAOlC,CACT,EA+CE,aA7CmB,IAAM,CACzB,IAAImC,EAAe,EACnB,GAAI,CAAClB,EAAW,MACd,OAAOkB,EAET,MAAMC,EAAQnB,EAAW,MAAM,iBAAiB,gBAAgB,EAChE,QAASoB,EAAK,EAAGA,EAAKD,EAAM,OAAQC,IAAM,CACxC,MAAMC,EAAU3C,EAAAA,cAAc,SAASyC,EAAMC,CAAE,CAAC,EAC1CE,EAAQ,WAAWD,EAAQ,WAAW,EACtCE,EAAQ,WAAWF,EAAQ,YAAY,EACvCG,EAAKrE,EAAAA,WAAW,SAASmE,CAAK,EAAIA,EAAQ,EAC1CG,EAAKtE,EAAAA,WAAW,SAASoE,CAAK,EAAIA,EAAQ,EAChDL,GAAgBM,EAAKC,CACvB,CACA,OAAOP,CACT,EA+BE,QA7Bc,IACPlB,EAAW,MAAQA,EAAW,MAAM,iBAAiB,IAAI,EAAI,CAAA,EA6BpE,eA1BqB,IAAM,CAC3B,IAAI0B,EAAI,EACR,GAAIrE,EAAM,aACJ2C,EAAW,MAAO,CACpB,MAAM2B,EAAU3B,EAAW,MAAM,cAAc,WAAW,EACtD2B,IACFD,EAAIC,EAAQ,aAEhB,CAEF,OAAOD,CACT,CAeE,CACD,wBAzWCvC,EAAAA,mBA8FQ,QAAA,CA7FL,uBAAOe,EAAA,KAAS,EAChB,uBAAOC,EAAA,KAAQ,EACf,cAAW,CAAGjB,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,QAAQG,EAAA,SAAS,UACvC,aAAJ,IAAI0C,CAAA,GAEJZ,EAAAA,mBAgDQ,QAAA,KAAA,CA/CNA,EAAAA,mBA8CK,KAAA,KAAA,CA5CK9B,EAAA,aAAeA,EAAA,8BADvB6B,EAAAA,mBAeK,KAAA,OAbF,+CAAqC7B,EAAA,gBAAe,GAAA,EACrD,MAAM,KAAA,GAGEA,EAAA,gBAAkBA,EAAA,iCAD1BiC,EAAAA,YAQEqC,aAAA,OANC,MAAsB1C,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBG,EAAA,QAAQ,KAAOA,EAAA,QAAQ,IAAIA,EAAA,SAAS,UAAY,OAGlG,MAAOA,EAAA,iBACP,SAAUA,EAAA,SACV,WAAUsD,CAAA,uDAEbzB,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,qBAE9BP,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,IAC5BmC,EAAAA,UAAA,EAAA,EAAA1C,EAAAA,mBA2BWO,WAAA,KAAAoC,EAAAA,WA1BmBxE,EAAA,QAAO,CAA3BgB,EAAQyD,mBAGhBxC,EAAAA,YAsBcyC,GAAA,QAxBL1E,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAYyE,CAAO,GAG9C,OAAAzD,EACA,QAAAyD,EACA,QAASzE,EAAA,QACT,SAAUA,EAAA,SACV,UAAWA,EAAA,UACX,aAAcA,EAAA,aACd,eAAgBA,EAAA,eAChB,gBAAiBA,EAAA,gBACjB,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,iBAAgB0B,CAAA,qBAGf,IAKO,CALPK,EAAAA,WAKOC,EAAA,OAAA,MAJQhB,GAAQ,YACpB,KAAMA,CAAA,EAFT,IAKO,CADLc,EAAAA,mBAA2C,OAAA,KAAA6C,EAAAA,gBAAlC7B,EAAiB9B,CAAM,CAAA,EAAA,CAAA,CAAA,6LAO/BhB,EAAA,2BAAb6B,EAAAA,mBAqCQ,QAAA+C,GAAA,CApCN9C,EAAAA,mBAmCK,KAAA,CAlCF,MAAK+C,EAAAA,eAAA,eAAsD,WAAA7E,EAAA,aAAeyC,EAAA,GAI1E,aAAYe,EACZ,aAAYC,CAAA,GAEHzD,EAAA,aAAeA,EAAA,8BAAzB6B,EAAAA,mBAA2C,KAAAiD,EAAA,kBAC3CjD,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,IAC5BmC,EAAAA,UAAA,EAAA,EAAA1C,EAAAA,mBAwBWO,WAAA,KAAAoC,EAAAA,WAvBmBxE,EAAA,QAAO,CAA3BuC,EAAQwC,mBAGhB9C,EAAAA,YAmBc+C,GAAA,QArBLhF,EAAA,QAAQ,IAAIA,EAAA,SAAS,kBAAkB+E,CAAO,GAGpD,QAAS/E,EAAA,QACT,QAAA+E,EACA,OAAAxC,EACA,aAAcvC,EAAA,aACd,eAAgBA,EAAA,eAChB,gBAAiBA,EAAA,gBACjB,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACtB,QAAQ,OAAA,qBAGN,IAIC,CAJD+B,EAAAA,WAICC,EAAA,OAAA,SAHiBO,GAAQ,YACvB,KAAMvC,EAAA,SAAA,EAFT,IAIC,qCADKmD,EAAoBnD,EAAA,UAAWuC,CAAM,CAAA,EAAA,CAAA,CAAA,yLAOrDV,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,sqBC7BhC,MAAMrC,EAAQC,EAiDRC,EAAOC,EAOP+E,EAAOlF,EAAM,GACbmF,EAAW9E,EAAAA,SAAS,IACxBP,EAAAA,WAAW,QAAQE,EAAM,KAAK,EAC1B,MAAMA,EAAM,MAAQ,EAAE,IAAIF,aAAW,UAAU,CAAC,CAAC,GACjDE,EAAM,KAAA,EAIN6C,EAAYxC,EAAAA,SAAS,IAAM,CAC/B,MAAMW,EAA+B,CACnC,iBAAkB,GAClB,MAAO,GACP,gBAAiB,GACjB,eAAgB,EAAA,EAElB,OAAOlB,EAAAA,WAAW,aAAakB,EAAKK,EAAAA,cAAc,iBAAiBrB,EAAM,SAAS,CAAC,CACrF,CAAC,EAGKoF,EAAelC,GAAmB,CACtChD,EAAK,eAAgBgD,CAAK,EAC1BhD,EAAK,WAAYgD,CAAK,CACxB,EAGMmC,EAAa,IAAM,CACvBnF,EAAK,YAAY,CACnB,EAEMoF,EAAWC,GAAsB,CACrC,MAAMC,EAASD,EAAM,cACjBC,GAAUA,EAAO,SACnBJ,EAAY,EAAI,CAEpB,6EA1JEtD,EAAAA,mBA4CM,MAAA,CA3CH,uBAAOe,EAAA,KAAS,EAChB,GAAIhB,EAAAA,MAAAqD,CAAA,CAAA,GAELnD,EAAAA,mBAuCO,OAAA,KAAA,CAtCLA,EAAAA,mBAkBO,OAAA,KAAA,CAjBLA,EAAAA,mBAOE,QAAA,CANA,KAAK,QACJ,GAAIoD,EAAA,MACJ,KAAMlF,EAAA,KACN,QAASA,EAAA,MACT,SAAUA,EAAA,SACV,QAAAqF,CAAA,aAEHvD,EAAAA,mBAQQ,QAAA,CARA,IAAKoD,EAAA,OAAQ,CAEXlF,EAAA,MAAQA,EAAA,KAAK,OAAM,kCAD3B6B,qBAKO,OAAA2D,GAAA,CADLC,cAA0CvD,GAAAA,UAAA,CAA3B,KAAMlC,EAAA,IAAA,EAAI,KAAA,EAAA,CAAA,MAAA,CAAA,CAAA,cAFJA,EAAA,MAAK,UAAA,gBAAA,CAAA,kBAI5B6B,EAAAA,mBAAwCO,EAAAA,SAAA,CAAA,IAAA,GAAA,qCAAnBpC,EAAA,KAAK,EAAA,CAAA,CAAA,gBAGdA,EAAA,QAAUA,EAAA,OAAO,OAAM,iBAAvC6B,EAAAA,mBAiBWO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAhBOpC,EAAA,UAAO,0CACrBiC,EAAAA,YAKgBC,aAAA,OAJb,KAAMN,EAAAA,oBAAW,iBAAiB7B,EAAM,OAAO,EAAI,OAAS,kBAC5D,UAAW6B,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBE,EAAM,OAAO,EAAIA,EAAM,QAAU,OACzE,MAAM,gBAAA,0CACeC,EAAA,OAAM,UAAA,gBAAA,CAAA,kBAI7BiC,EAAAA,YAKgBC,aAAA,OAJb,KAAMN,EAAAA,oBAAW,iBAAiB7B,EAAM,OAAO,EAAI,OAAS,kBAC5D,UAAW6B,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBE,EAAM,OAAO,EAAIA,EAAM,QAAU,OACzE,MAAM,iBACL,wBAAYqF,EAAU,CAAA,MAAA,CAAA,CAAA,qDAI7BvD,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,4UCRlC,MAAMrC,EAAQC,EA0BRiF,EAAOlF,EAAM,GAEb2F,EAAatF,EAAAA,SAAS,IAAMuF,EAAU,IAAI,CAAC,EAE3CC,EAAaxF,EAAAA,SAAS,IAAMuF,EAAU,IAAI,CAAC,EAG3CE,EAAezF,EAAAA,SAAS,IAAML,EAAM,QAAU,EAAI,EAElD+F,EAAgB1F,EAAAA,SACpB,IACEL,EAAM,WAAa,IAClBF,aAAW,UAAUE,EAAM,MAAM,UAAU,GAAKA,EAAM,KAAK,UAAA,EAG1D6C,EAAYxC,EAAAA,SAAS,IAAM,CAC/B,MAAMW,EAAM,CAAE,QAAS,EAAA,EACvB,OAAOlB,EAAAA,WAAW,aAAakB,EAAKK,EAAAA,cAAc,iBAAiBrB,EAAM,SAAS,CAAC,CACrF,CAAC,EAGK4F,EAAaI,GACjBlG,EAAAA,WAAW,iBAAiBE,EAAM,QAAQ,EAAI,GAAGA,EAAM,QAAQ,IAAIgG,CAAM,GAAK,oBAjFtE/F,EAAA,aAAeA,EAAA,8BADvB6B,EAAAA,mBAmBK,KAAA,OAjBF,GAAID,EAAAA,MAAAqD,CAAA,EACJ,uBAAOrC,EAAA,KAAS,CAAA,GAGT5C,EAAA,8BADRiC,EAAAA,YAKEqC,GAAAA,UAAA,OAHC,MAAOoB,EAAA,MACP,MAAOG,EAAA,MACP,SAAUC,EAAA,KAAA,wCAGA9F,EAAA,2BADbiC,EAAAA,YAME+D,GAAA,OAJC,MAAOJ,EAAA,MACP,KAAMA,EAAA,MACN,MAAOC,EAAA,MACP,SAAUC,EAAA,KAAA,8DAEbjE,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,yBAE9BP,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,0sDCuN9B,MAAMrC,EAAQC,EAkHRC,EAAOC,EAOP,CAAE,gBAAA+F,EAAiB,gBAAAC,CAAA,EAAoBC,eAAA,EAC7CD,EAAgB,QAAQ,EAExB,MAAMxD,EAAaC,EAAAA,IAA6B,IAAI,EAI9CyD,EAAwBzD,EAAAA,IAA0B,IAAI,GAAK,EAK3D0D,EAAiBjG,EAAAA,SACrB,IACE,IAAI,KACD,MAAM,QAAQL,EAAM,WAAW,EAAIA,EAAM,YAAc,CAAA,GACrD,UAAY,CAACF,EAAAA,WAAW,YAAYyG,CAAC,CAAC,EACtC,IAAIA,GAAK,OAAOA,CAAC,CAAC,CAAA,CACvB,EAEEC,EAAuBnG,EAAAA,SAC3B,IACE,IAAI,KACD,MAAM,QAAQL,EAAM,cAAc,EAAIA,EAAM,eAAiB,CAAA,GAC3D,UAAY,CAACF,EAAAA,WAAW,YAAYyG,CAAC,CAAC,EACtC,IAAIA,GAAK,OAAOA,CAAC,CAAC,CAAA,CACvB,EAEEE,EAAoBpG,EAAAA,SACxB,IACE,IAAI,KACD,MAAM,QAAQL,EAAM,WAAW,EAAIA,EAAM,YAAc,CAAA,GACrD,UAAY,CAACF,EAAAA,WAAW,YAAYyG,CAAC,CAAC,EACtC,IAAIA,GAAK,OAAOA,CAAC,CAAC,CAAA,CACvB,EAIEG,EAAkBrG,EAAAA,SAAS,IAAM,CACrC,MAAMsG,EAAI,OAAO3G,EAAM,YAAY,EACnC,OAAOF,EAAAA,WAAW,SAAS6G,CAAC,GAAKA,GAAK,EAAI,KAAK,MAAMA,CAAC,EAAI,CAC5D,CAAC,EAEKC,EAAWvG,EAAAA,SAAS,KACZ,CACV,gBAAiB,GACjB,cAAeP,EAAAA,WAAW,QAAQE,EAAM,IAAI,CAAA,EAG/C,EAEK8C,EAAWzC,EAAAA,SAAS,IAAM,CAC9B,MAAMkB,EAA8B,CAAA,EACpC,OAAKzB,EAAAA,WAAW,iBAAiBE,EAAM,SAAS,EAU1CF,EAAAA,WAAW,iBAAiBE,EAAM,KAAK,GAAKA,EAAM,QAAU,SAC9DuB,EAAI,MAAQvB,EAAM,OARlBA,EAAM,cACNF,EAAAA,WAAW,iBAAiBE,EAAM,QAAQ,GAC1CA,EAAM,WAAa,SAEnBuB,EAAI,SAAWvB,EAAM,UAOlBuB,CACT,CAAC,EAEKsF,EAAY,CAACC,EAA+B9D,EAAuBQ,IAAgB,CACvFtD,EAAK,YAAa4G,EAAG9D,EAAMQ,CAAG,CAChC,EAGMuD,EAAc,CAACvD,EAAawD,EAAa,KAAO,CACpD9G,EAAK,YAAasD,EAAKwD,CAAU,CACnC,EAEMC,EAAe,IAAM,CACzB/G,EAAK,YAAY,CACnB,EAEM+C,EAAmB,CAACC,EAAgBC,IACpCrD,EAAAA,WAAW,QAAQoD,CAAK,GAAK,CAACC,EACzB,GAELrD,aAAW,QAAQqD,EAAI,MAAM,EACxBD,EAEFpD,EAAAA,WAAW,iBAAiBoD,EAAOC,EAAI,QAAU,GAAIA,EAAI,SAAS,EAIrE+D,EAAyBC,GAAe,CAC5C,MAAMC,EAAepH,EAAM,aAAe,CAAA,EAC1C,OAAO,OAAO,UAAU,eAAe,KAAKoH,EAAaD,CAAE,EAAIC,EAAYD,CAAE,EAAI,CAAA,CACnF,EAIME,EAAmBrE,GACvB,CAAClD,EAAAA,WAAW,QAAQkD,CAAI,GACxB,CAAClD,aAAW,QAAQkD,EAAK,EAAE,GAC3BsD,EAAe,MAAM,IAAItD,EAAK,GAAG,UAAU,EACvCsE,EAAuBtE,GAC3B,CAAClD,EAAAA,WAAW,QAAQkD,CAAI,GACxB,CAAClD,aAAW,QAAQkD,EAAK,EAAE,GAC3BwD,EAAqB,MAAM,IAAIxD,EAAK,GAAG,UAAU,EAsHnD,OAAAW,EAAa,CACX,SArHe,IACVhB,EAAW,MAGTA,EAAW,MAAM,YAFf,EAoHT,UA/GgB,IACXA,EAAW,MAGTA,EAAW,MAAM,aAFf,EA8GT,gBAzGsB,IAAM,CAC5B,GAAI,CAACA,EAAW,MACd,OAEF,MAAM4E,EAAW5E,EAAW,MAAM,WAClC,GAAI,CAAC4E,EACH,OAEF,MAAMC,EAAK7E,EAAW,MAAM,iBAAiB,qBAAqB,EAC5DjB,EAAI6F,EAAS,YACnB,QAASE,EAAK,EAAGA,EAAKD,EAAG,OAAQC,IAC9BD,EAAGC,CAAE,EAAkB,MAAM,MAAQ,GAAG/F,CAAC,IAE9C,EA6FE,iBA3FwByF,GAAe,CACvC,GAAI,CAACxE,EAAW,MACd,OAEF,MAAM+E,EAAY/E,EAAW,MAAM,cACjC,qBAAqB,IAAI,OAAOwE,CAAE,CAAC,IAAA,EAErC,GAAIO,EAAW,CACb,MAAMH,EAAWG,EAAU,WAC3B,GAAIH,EAAU,CACZG,EAAU,MAAM,OAAS,GACzBH,EAAS,MAAM,OAAS,GACxB,MAAMlD,EAAI,GAAGqD,EAAU,YAAY,KACnCA,EAAU,MAAM,OAASrD,EACzBkD,EAAS,MAAM,OAASlD,CAC1B,CACA,MAAMsD,EAAMtB,EAAsB,MAC7BsB,EAAI,IAAIR,CAAE,IACbd,EAAsB,MAAQ,IAAI,IAAIsB,CAAG,EAAE,IAAIR,CAAE,EAErD,CACF,EAuEE,sBAnE6BA,GAAe,CAC5C,GAAId,EAAsB,MAAM,IAAIc,CAAE,EAAG,CACvC,MAAMS,EAAO,IAAI,IAAIvB,EAAsB,KAAK,EAChDuB,EAAK,OAAOT,CAAE,EACdd,EAAsB,MAAQuB,CAChC,CACF,EA8DE,qBA3D2B,IAAM,CAC7BvB,EAAsB,MAAM,KAAO,IACrCA,EAAsB,UAAY,IAEtC,EAwDE,mBAtD0BwB,GAAuB,CACjD,GAAI,CAAClF,EAAW,MACd,OAEF,MAAM6E,EAAK7E,EAAW,MAAM,iBAAiB,qBAAqB,EAC5DmF,EAAWhI,aAAW,SAAS+H,CAAU,EAAI,KAAK,IAAI,EAAGA,CAAU,EAAI,EAC7E,QAASJ,EAAK,EAAGA,EAAKD,EAAG,OAAQC,IAC9BD,EAAGC,CAAE,EAAkB,MAAM,KAAO,GAAGK,CAAQ,IAEpD,EA8CE,cA5CoB,IAAM,CAC1B,GAAI,CAACnF,EAAW,MACd,OAEF,MAAM6E,EAAK7E,EAAW,MAAM,cAAc,oBAAoB,EAC9D,GAAI6E,EAAI,CACN,MAAMD,EAAW5E,EAAW,MAAM,WAClC,GAAI4E,EAAU,CACZ,MAAM7F,EAAI6F,EAAS,YACnBC,EAAG,MAAM,MAAQ,GAAG9F,CAAC,IACvB,CACF,CACF,EAiCE,aA/BoBmG,GAAuB,CAC3C,MAAML,EAAK7E,EAAW,MACjBA,EAAW,MAAM,cAAc,oBAAoB,EACpD,KACJ,GAAI6E,EAAI,CACN,MAAMM,EAAWhI,aAAW,SAAS+H,CAAU,EAAI,KAAK,IAAI,EAAGA,CAAU,EAAI,EAC7EL,EAAG,MAAM,KAAO,GAAGM,CAAQ,IAC7B,CACF,CAuBE,CACD,wBAhlBChG,EAAAA,mBA6NQ,QAAA,CA5NL,uBAAO8E,EAAA,KAAQ,EACf,uBAAO9D,EAAA,KAAQ,UACZ,aAAJ,IAAIH,CAAA,GAEJZ,EAAAA,mBAuNQ,QAAA,KAAA,CAtNWF,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,QAAQG,EAAA,IAAI,iBAqMxC6B,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,IApM1BmC,YAAA,EAAA,EAAA1C,EAAAA,mBAkMWO,EAAAA,SAAA,CAAA,IAAA,GAAAoC,EAAAA,WAjMmBxE,EAAA,KAAI,CAAxB8H,EAAQC,2DACP/H,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAY+H,CAAO,EAAA,GAEjDjG,EAAAA,mBAoDK,KAAA,CAnDF,MAAK+C,EAAAA,eAAA,CAAuB,IAAA7E,EAAA,WAAa+H,EAAO,IAAA,0BAAmE/H,EAAA,WAAaA,gBAAa,GAAQ,KAAK,MAAM+H,EAAU/H,EAAA,aAAa,EAAA,IAAA,2BAAqEA,EAAA,WAAaA,gBAAa,GAAQ,KAAK,MAAM+H,EAAU/H,EAAA,aAAa,EAAA,IAAA,gBAA0C4B,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,UAAUiI,GAAQ,UAAU,GAAKA,EAAO,WAAyC,cAAAV,EAAgBU,CAAM,EAA6B,WAAA9H,EAAA,aAAe+H,CAAA,GAUxgB,WAAOnB,EAAUoB,EAAQF,EAAQC,CAAO,EACxC,aAAUC,GAAElB,EAAYiB,CAAO,EAC/B,aAAYf,CAAA,GAGLhH,EAAA,aAAeA,EAAA,8BADvBiC,EAAAA,YAQEgG,GAAA,OANC,SAAQ,GAAKjI,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAY+H,CAAO,GACrD,YAAa/H,EAAA,YACb,eAAgBA,EAAA,eAChB,MAAOoH,EAAgBU,CAAM,EAC7B,KAAMA,EACN,SAAU9H,EAAA,QAAA,gGAEb6B,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,IAC5BmC,EAAAA,UAAA,EAAA,EAAA1C,EAAAA,mBA0BWO,WAAA,KAAAoC,EAAAA,WAzBmBxE,EAAA,QAAO,CAA3BuC,EAAQwC,mBAGhB9C,EAAAA,YAqBc+C,GAAA,CAvBL,IAAA,GAAAhF,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAY+H,CAAO,OAAOhD,CAAO,GAG5D,QAAS/E,EAAA,QACT,QAAA+E,EACA,OAAAxC,EACA,aAAcvC,EAAA,aACd,eAAgBA,EAAA,eAChB,gBAAiBA,EAAA,gBACjB,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,mBAAA,qBAGpB,IAOC,CAPD+B,aAOCC,EAAA,OAAA,MANcO,GAAQ,MAAI,EAAA,GAAA,CACxB,KAAMuF,EACN,QAAAC,CAAA,EAHH,IAOC,CAFGG,EAAAA,gBAAAvD,EAAAA,gBAAA3B,EAAiB8E,GAAUvF,EAASuF,EAAOvF,EAAO,IAAI,EAAI,OAAWA,CAAM,CAAA,EAAA,CAAA,CAAA,0KAQhEvC,EAAA,WAA4B,CAAA4B,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,QAAQiI,GAAQ,EAAE,GAAmBtB,EAAA,MAAkB,IAAIsB,EAAO,GAAG,SAAA,CAAQ,iBAD3IjG,EAAAA,mBAwIWO,WAAA,CAAA,IAAA,GAAA,CAjIOpC,EAAA,cAAW,yBACzB6B,EAAAA,mBA2CK,KAAA,OA1CF,MAAKgD,EAAAA,eAAA,CAAA,aAAA,GAAA,WAAoC7E,EAAA,aAAe+H,EAAO,EAC/D,aAAUC,GAAElB,EAAYiB,CAAO,EAC/B,aAAYf,CAAA,GAEblF,EAAAA,mBAqCK,KAAA,CApCF,QAAS2E,EAAA,MACT,MAAK5B,EAAAA,eAAA,CAA2C,kBAAAwC,EAAoBS,CAAM,CAAA,KAKnET,EAAoBS,CAAM,GADlCvD,EAAAA,YAAA1C,EAAAA,mBAYM,MAZN2D,GAYM,CANJ1D,EAAAA,mBAKM,MALNqG,GAKM,CAJJ1C,EAAAA,YAGE2C,GAAAA,UAAA,CAFA,MAAM,eACN,KAAK,OAAA,uBAIXvG,EAAAA,mBAiBM,MAAA,OAfH,MAAKgD,EAAAA,eAAA,sBAA6H,6BAAAuB,EAAA,MAAsB,IAA+B0B,EAAO,GAAG,SAAA,CAAQ,KAQzM,kBAAiBA,EAAO,EAAA,GAEzB/F,aAIEC,EAAA,OAAA,sBAAA,CAFC,KAAM8F,EACN,QAAAC,CAAA,6BAMU/H,EAAA,cAAW,mCAAhC6B,EAAAA,mBAiFWO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAhFOiF,EAAoBS,CAAM,iBACxCjG,EAAAA,mBAsBK,KAAA,OArBF,MAAKgD,EAAAA,eAAA,CAAA,aAAA,GAAA,WAAoC7E,EAAA,aAAe+H,EAAO,EAC/D,aAAUC,GAAElB,EAAYiB,CAAO,EAC/B,aAAYf,CAAA,GAEblF,EAAAA,mBAgBK,KAAA,CAfF,QAAS2E,EAAA,MACV,MAAM,iBAAA,GAEN3E,EAAAA,mBAWM,MAXNuG,GAWM,CANJvG,EAAAA,mBAKM,MALNwG,GAKM,CAJJ7C,EAAAA,YAGE2C,GAAAA,UAAA,CAFA,MAAM,eACN,KAAK,OAAA,wBAQf7D,EAAAA,UAAA,EAAA,EAAA1C,qBAoDWO,EAAAA,8BAnD+B6E,EAA2Ca,EAAO,GAAG,SAAA,CAAQ,EAA7F,CAAAS,EAAeC,mBAKvB3G,EAAAA,mBA6CK,KAAA,CA/CI,IAAA,GAAA7B,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAY+H,CAAO,YAAYS,CAAY,GAGtE,MAAK3D,EAAAA,eAAA,mCAAkK,IAAA7E,EAAA,WAAawI,EAAY,IAAA,gBAAyE5G,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,UAAU0I,GAAe,UAAU,GAAKA,EAAc,WAA8C,WAAAvI,EAAA,oBAAsBwI,GAAgBxI,EAAA,aAAe+H,CAAA,GAQ7a,aAAUC,GAAElB,EAAYiB,EAASS,CAAY,EAC7C,aAAYxB,CAAA,IAEbzC,EAAAA,UAAA,EAAA,EAAA1C,EAAAA,mBAgCWO,WAAA,KAAAoC,EAAAA,WA/BiCxE,EAAA,QAAO,CAAzCyI,EAAeC,oBAGvBzG,EAAAA,YA2Bc+C,GAAA,CA7BL,IAAA,GAAAhF,EAAA,QAAQ,IAAIA,EAAA,SAAS,YAAY+H,CAAO,YAAYS,CAAY,OAAOE,EAAc,GAG3F,QAAS1I,EAAA,QACT,QAAS0I,GACT,OAAQD,EACR,aAAczI,EAAA,aACd,eAAgBA,EAAA,eAChB,gBAAiBA,EAAA,gBACjB,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,mBAAA,qBAGpB,IAaC,CAbD+B,aAaCC,EAAA,OAAA,cAZsByG,GAAe,MAAI,EAAA,GAAA,CACvC,KAAMF,EACN,QAAAR,EACA,aAAAS,CAAA,EAJH,IAaC,qCAPGxF,EAAkDuF,GAAiBE,EAAkDF,EAAcE,EAAc,IAAI,EAAsC,OAA2CA,CAAA,4MAexP5G,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,sBACnBP,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,cAKnCR,QAAA/B,EAAAA,UAAA,EAAW,QAAQG,EAAA,IAAI,GAAA,CAAMA,EAAA,cAAY,CAAK4B,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBG,EAAA,SAAS,iBAD3F6B,EAAAA,mBAcK,KAAA8G,GAAA,CAXH7G,EAAAA,mBAUK,KAAA,CATF,QAAS2E,EAAA,MACV,MAAM,UAAA,GAEN3E,EAAAA,mBAKM,MALN8G,GAKMjE,EAAAA,gBADD/C,EAAAA,MAAA/B,EAAAA,UAAA,EAAW,iBAAiBG,EAAA,SAAS,EAAIA,EAAA,UAAY4B,EAAAA,MAAAqE,CAAA,EAAgB,aAAa,EAAA,CAAA,CAAA,0BAI3FpE,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,6hBC4lB5ByG,GAAmB,GACnBC,GAAuB,GACvBC,GAA0B,IAC1BC,GAAuB,GACvBC,GAAmB,qgEA7QzB,MAAMlJ,EAAQC,EAsKRC,EAAOC,EAWPgJ,EAAQC,EAAAA,SAAA,EAERC,EAAkBxI,GAA4C,CAClE,IAAIyI,EAA8B,CAAA,EAClC,GAAItJ,EAAM,QAAS,CAEjB,MAAMuJ,EAAuBzJ,EAAAA,WAAW,QAAQe,CAAS,EAAI,CAAA,EAAKA,EAClE,IAAI2I,EAAkC,CAAC,EAAG,MAAM,EAChD,MAAMC,EAAU3J,EAAAA,WAAW,QAAQE,EAAM,OAAO,EAAI,CAAA,EAAKA,EAAM,QAC/D,QAAS0J,EAAI,EAAGA,EAAID,EAAQ,OAAQC,GAAK,EAAG,CAC1C,MAAMC,EAAkBF,EAAQC,CAAC,EAEjC,GAAI5J,EAAAA,WAAW,QAAQ6J,CAAU,EAC/B,SAEF,MAAMC,EACJD,EAAW,OAAS,QAAaA,EAAW,OAAS,KAAO,GAAOA,EAAW,OAAS,GACnFE,EAAU/J,EAAAA,WAAW,UAAU6J,EAAW,OAAO,EAAIA,EAAW,QAAU,GAChF,GAAIC,GAAQC,EAAS,CACnBL,EAAgB,CAACE,EAAG,MAAM,EAC1B,KACF,CACF,CACA,GAAIH,EAAc,SAAW,EAC3BD,EAAOE,MACF,CACL,MAAMM,EAAuBL,EAAQF,EAAc,CAAC,CAAC,EACrD,GAAKzJ,EAAAA,WAAW,QAAQgK,CAAe,EAkBrCR,EAAOE,MAlBiC,CACxC,MAAMI,EACJE,EAAgB,OAAS,QAAaA,EAAgB,OAAS,KAC3D,GACAA,EAAgB,OAAS,GACzBD,EAAU/J,EAAAA,WAAW,UAAUgK,EAAgB,OAAO,EACxDA,EAAgB,QAChB,GACEC,EAAa,MAAM,QAAQR,CAAa,EAAIA,EAAc,CAAC,EAAI,OAC/DS,GACJ,MAAM,QAAQT,CAAa,IAAMA,EAAc,CAAC,IAAM,OAASA,EAAc,CAAC,IAAM,QAChFA,EAAc,CAAC,EACf,OACND,EACEM,GAAQC,GAAW,CAAC/J,EAAAA,WAAW,YAAYiK,CAAU,EAChD,CAACA,EAAYC,IAAW,MAAM,EAC/BR,CACR,CAGF,CACF,CACA,OAAOF,CACT,EAEMW,EAAqB,IAAM,CAC/B,IAAIC,EAAQ,EACZ,OAAIlK,EAAM,cAAgB,GAAKA,EAAM,YAAc,IACjDkK,EAAQ,KAAK,MAAMlK,EAAM,WAAaA,EAAM,aAAa,EAAI,GAExDkK,CACT,EAEMC,EAAiBd,EAAerJ,EAAM,SAAS,EAE/CoK,EAA2B,CAC/B,SAAUtK,EAAAA,WAAW,cAAcE,EAAM,IAAI,EAC7C,kBAAmB,CACjB,MAAOiK,EAAA,EACP,MAAOjK,EAAM,aAAA,EAEf,cAAe,CAEb,WAAYmK,EAAe,CAAC,EAC5B,QAASA,EAAe,CAAC,CAAA,EAE3B,cAAe,CAAA,EACf,WAAY,CACV,KAAM,CAAA,EAER,WAAY,CACV,KAAM,CAAA,EAER,YAAa,KACb,UAAW,KACX,gBAAiB,EAAA,EAGbE,EAAgE,CACpE,oBAAqB,IAAA,EAOjBC,EAAY,SAASxK,EAAAA,WAAW,UAAU,CAAC,CAAC,GAC5CoF,EAAOlF,EAAM,GAEbuK,EAAmB3H,EAAAA,IAA2B,IAAI,EAClD4H,EAAqB5H,EAAAA,IAA2B,IAAI,EACpD6H,EAAgB7H,EAAAA,IAA2B,IAAI,EAC/C8H,EAAiB9H,EAAAA,IAA6C,IAAI,EAClE+H,EAAwB/H,EAAAA,IAAgD,IAAI,EAE5EgI,EAAmBhI,EAAAA,IAA2B,IAAI,EAClDiI,EAAqBjI,EAAAA,IAA2B,IAAI,EACpDkI,EAAgBlI,EAAAA,IAA2B,IAAI,EAC/CmI,EAAiBnI,EAAAA,IAA6C,IAAI,EAClEoI,EAAwBpI,EAAAA,IAAgD,IAAI,EAE5EqI,EAAUC,EAAAA,SAAS,CACvB,aAAc,GACd,eAAgBlL,EAAM,iBAAmB,QACzC,kBAAmBA,EAAM,iBAAmB,WAC5C,aAAc,EACd,aAAc,GACd,oBAAqB,GACrB,YAAa,GAAA,CACd,EAEKmL,EAAavI,EAAAA,IAAgB,EAAE,EAC/BwI,EAAcF,EAAAA,SAAS,CAC3B,MAAOd,EAAU,kBAAkB,MACnC,MAAOA,EAAU,kBAAkB,KAAA,CACpC,EACKiB,EAAezI,EAAAA,IAA2BuH,CAAc,EACxDmB,EAAc1I,EAAAA,IAAa,EAAK,EAGhC2I,GAAqB,IAAM,CAC/B,MAAMC,EAAcxL,EAAM,YAC1B,OAAIF,EAAAA,WAAW,iBAAiB0L,CAAW,EAClC1L,EAAAA,WAAW,MAAM0L,CAAW,EAEjC1L,EAAAA,WAAW,SAAS0L,CAAW,EAC1B1L,aAAW,MAAM0L,EAAY,SAAA,CAAU,EAEzC,CAAA,CACT,EACMC,EAA0B7I,MAAc2I,IAAoB,EAE5DG,EAAaR,EAAAA,SAAS,CAC1B,KAAM,CAAA,EACN,QAAS,CAAA,CAAC,CACX,EAEKS,EAAaT,EAAAA,SAAS,CAC1B,OAAQ,GACR,SAAU,OACV,QAAS,MAAA,CACV,EAEKU,EAAmBhJ,EAAAA,IAAa,EAAK,EAErCiJ,EAAiBX,EAAAA,SAAS,CAC9B,WAAY,IACZ,YAAa,IACb,iBAAkB,EAClB,UAAW,IACX,kBAAmB,EACnB,WAAY,GAAA,CACb,EAEKY,EAAeZ,EAAAA,SAAS,CAC5B,OAAQ,GACR,MAAO,OACP,OAAQ,MAAA,CACT,EAEKa,EAAcb,EAAAA,SAAS,CAC3B,WAAY,CAAA,CACb,EAED,IAAIc,EAA+B,KAC/BC,EAAiC,KACjCC,GAAmB,EAGvB,MAAMC,GAAgB9L,EAAAA,SAAS,IACtB,OAAO,KAAK8I,CAAK,EAAE,OAAQxC,GAAcA,EAAE,QAAQ,KAAK,IAAM,CAAC,CACvE,EACKyF,GAAgB/L,EAAAA,SAAS,IAAM,CACnC,MAAMgM,EAAQ,OAAO,KAAKlD,CAAK,EAAE,OAC9BxC,GAAcA,EAAE,QAAQ,KAAK,IAAM,GAAKA,EAAE,QAAQ,aAAa,IAAM,CAAA,EAExE,OAAI3G,EAAM,WACRqM,EAAM,KAAK,qBAAqB,EAE3BA,CACT,CAAC,EACKC,GAAmBjM,EAAAA,SAAS,IACzB,OAAO,KAAK8I,CAAK,EAAE,OAAQxC,GAAcA,EAAE,QAAQ,QAAQ,IAAM,CAAC,CAC1E,EACK4F,GAAuBlM,EAAAA,SAAS,IAC7B,OAAO,KAAK8I,CAAK,EAAE,OAAQxC,GAAcA,EAAE,QAAQ,aAAa,IAAM,CAAC,CAC/E,EAEK6F,GAAuBnM,EAAAA,SAAS,IAC7BL,EAAM,mBAAqBmL,EAAW,MAAM,OAAS,CAC7D,EAEKsB,GAAiBpM,EAAAA,SAAS,IACvB,CAACP,EAAAA,WAAW,QAAQE,EAAM,SAAS,GAAKmL,EAAW,MAAM,OAAS,CAC1E,EAEKuB,GAAgBrM,EAAAA,SAAS,IACzBL,EAAM,SACDF,EAAAA,WAAW,SAASE,EAAM,WAAW,EAAIA,EAAM,YAAc,EAG/DF,aAAW,SAASE,EAAM,WAAW,EAAIA,EAAM,YAAcA,EAAM,MAAM,QAAU,CAC3F,EAEK2M,EAAkBtM,EAAAA,SAAS,IACxBL,EAAM,WAAaA,EAAM,eACjC,EAEK4M,GAAkBvM,EAAAA,SAAS,IACxBL,EAAM,QAAU,CACxB,EAGK6M,EAAoBxM,EAAAA,SAAS,IAC1BL,EAAM,QAAUA,EAAM,qBAAuB,IAAM2M,EAAgB,KAC3E,EAEKG,EAAqBzM,EAAAA,SAAS,IAEhCL,EAAM,QACNA,EAAM,sBAAwB,IAC9B2M,EAAgB,OAChB3M,EAAM,sBAAwBA,EAAM,qBAAuB,CAE9D,EAEK6C,GAAYxC,EAAAA,SAAS,IAAM,CAC/B,MAAMW,EAAW,CACf,cAAe,GACf,iBAAkBhB,EAAM,QAAA,EAE1B,OAAIiL,EAAQ,eACVjK,EAAI,eAAe,EAAI,IAErBlB,EAAAA,WAAW,OAAA,EAAS,WACtBkB,EAAI,WAAW,EAAI,IAEdlB,EAAAA,WAAW,aAAakB,EAAKK,EAAAA,cAAc,iBAAiBrB,EAAM,SAAS,CAAC,CACrF,CAAC,EAEK+M,GAAiB1M,EAAAA,SAAS,IAAM,CACpC,MAAMW,EAAW,CACf,qBAAsB,GACtB,gBAAiB4L,GAAgB,MACjC,wBAAyBhB,EAAiB,KAAA,EAE5C,OAAIE,EAAa,SACf9K,EAAI,kBAAkB,EAAI,IAErBA,CACT,CAAC,EAEKgM,GAAmB3M,EAAAA,SAAS,IAAM,CACtC,MAAMW,EAAW,CACf,uBAAwB,EAAA,EAE1B,OAAIhB,EAAM,YACRgB,EAAI,eAAe,EAAI,KAErB6L,EAAkB,OAASC,EAAmB,SAChD9L,EAAI,oBAAoB,EAAI,GACxB2K,EAAW,OACb3K,EAAI,iBAAiB2K,EAAW,OAAO,EAAE,EAAI,GAE7C3K,EAAI,oBAAoB,EAAI,IAGzBA,CACT,CAAC,EAEKiM,GAAiB5M,EAAAA,SAAS,IAAM,CACpC,MAAMW,EAAW,CACf,qBAAsB,GACtB,gBAAiB4L,GAAgB,MACjC,gBAAiB5M,EAAM,UACvB,uBAAwB2L,EAAW,MAAA,EAErC,OAAA3K,EAAI,uBAAuB,EAAI2K,EAAW,QAAU3L,EAAM,WACtD6M,EAAkB,OAASC,EAAmB,SAChD9L,EAAI,oBAAoB,EAAI,GACxB2K,EAAW,OACb3K,EAAI,iBAAiB2K,EAAW,OAAO,EAAE,EAAI,GAE7C3K,EAAI,oBAAoB,EAAI,IAGzBA,CACT,CAAC,EAEKkM,GAAmB7M,EAAAA,SAAS,IAAM,CACtC,MAAMkB,EAAW,CAAA,EACjB,IAAIsL,EAAkB,OAASC,EAAmB,QAC5CF,GAAgB,MAAO,CACzB,MAAMO,EAAOxB,EAAW,OACpB,KAAK,IAAI,EAAG3L,EAAM,QAAU8I,EAAgB,EAC5C9I,EAAM,QACVuB,EAAI,UAAY,GAAG4L,CAAI,IACzB,CAEF,OAAO5L,CACT,CAAC,EAEK6L,GAAc/M,EAAAA,SAAS,IAAM,CACjC,MAAMkB,EAAW,CAAA,EACjB,OAAMsL,EAAkB,OAASC,EAAmB,OAC9CF,GAAgB,QAClBrL,EAAI,UAAY,GAAGvB,EAAM,OAAO,MAG7BuB,CACT,CAAC,EAEK8L,GAAchN,EAAAA,SAAS,IAAM,CACjC,MAAMkB,EAAW,CAAA,EACjB,OAAI0J,EAAQ,eACV1J,EAAI,OAAS,GAAGwK,EAAY,UAAU,MAEjCxK,CACT,CAAC,EAEK+L,GAAgBC,GAAe,CACnCrN,EAAK,YAAaqN,CAAK,CACzB,EAEMC,GAAoB,CAACrG,EAAYnE,EAAWgF,EAAiByF,EAAiBjG,IAAY,CAC9FtH,EAAK,iBAAkBiH,EAAInE,EAAMgF,EAASyF,EAAQjG,CAAE,CACtD,EAGMkG,GAAgB,CAAC1K,EAAWQ,EAAamK,EAAO,KAAU,CAC9DzN,EAAK,aAAc8C,EAAMQ,EAAKmK,CAAI,CACpC,EAEMC,GAAqB,CAACC,EAAaC,EAAaC,IAAa,CACjE7N,EAAK,kBAAmB2N,EAAKC,EAAMC,CAAG,CACxC,EAEMC,GAAoB,IAAM,CAC9B,MAAMT,EAAQU,GAAA,EACd/N,EAAK,iBAAkBqN,CAAK,CAC9B,EAEMW,GAAgB,IAAM,CAC1BC,EAAAA,SAAS,IAAM,CACb,GAAI1D,EAAc,MAAO,CACvB,MAAM2D,EAAU3D,EAAc,MAAM,cAAc,OAAO,EACrD2D,IACFrC,EAAY,WAAaqC,EAAQ,aAErC,CACF,CAAC,EACDnD,EAAQ,aAAe,EACzB,EAEMoD,GAAe,IAAM,CACzBpD,EAAQ,aAAe,EACzB,EAEMqD,GAAmB,IAAM,CAC7B,IAAIC,EAAe,EACfC,EAAW,GACXvD,EAAQ,gBAAkBA,EAAQ,qBACpCsD,EAAe,EACX7D,EAAe,QACjB8D,EAAW9D,EAAe,MAAM,WAAA,KAGpB5K,EAAAA,WAAW,QAAQE,EAAM,OAAO,EAAI,CAAA,EAAKA,EAAM,SACvD,QAASgD,GAAc,EAGdlD,EAAAA,WAAW,UAAUkD,GAAM,OAAO,EAAIA,EAAK,QAAU,MAElEuL,GAAgB,EACZ,CAACzO,EAAAA,WAAW,QAAQkD,CAAI,GAAK,CAAClD,EAAAA,WAAW,QAAQkD,EAAK,KAAK,EAC7DwL,GAAY,OAAOxL,EAAK,KAAK,GAAK,EACzB,CAAClD,aAAW,QAAQkD,CAAI,GAAK,CAAClD,EAAAA,WAAW,QAAQkD,EAAK,QAAQ,IACvEwL,GAAY,OAAOxL,EAAK,QAAQ,GAAK,GAG3C,CAAC,EACD,MAAMa,EAAe6G,EAAe,MAAQA,EAAe,MAAM,eAAiB,EAClF8D,GAAY3K,EAEZoH,EAAQ,aAAesD,EACnB5B,EAAgB,QAClBhB,EAAW,SAAW6C,EAAW,EAAI,GAAGA,CAAQ,KAAO,OAE3D,EAEMC,GAAwB,IACrB,IAAI,QAAc,CAACC,EAASC,IAAW,CAC5CR,EAAAA,SAAS,IAAM,CACb,GAAI,CAEF,GAAI,CAACpD,EAAe,MAAO,CACzB2D,EAAA,EACA,MACF,CACA,MAAME,EAAa7D,EAAe,MAAM,SAAA,EACxCc,EAAe,WAAa,GAAG+C,CAAU,KAEzC,IAAIC,EAAcD,EAClB,GAAI/B,EAAkB,OAASC,EAAmB,MAAO,CACvD,MAAMgC,EAAkB,CAAA,EAClBC,EAAmB,CAAA,GACTjP,EAAAA,WAAW,QAAQE,EAAM,OAAO,EAAI,CAAA,EAAKA,EAAM,SACvD,QAAQ,CAACgD,EAAW0G,KAAc,EAGzB5J,EAAAA,WAAW,UAAUkD,GAAM,OAAO,EAAIA,EAAK,QAAU,MAE9D6J,EAAkB,OAChBnD,IAAK1J,EAAM,sBACb8O,EAAW,KAAK9L,CAAI,EAGpB8J,EAAmB,OACjBpD,IAAK1J,EAAM,uBACb+O,EAAY,KAAK/L,CAAI,EAI7B,CAAC,EAED,MAAM2K,EAAO1C,EAAQ,gBAAkBA,EAAQ,kBACzC+D,EAAQtE,EAAe,MAAQA,EAAe,MAAM,QAAA,EAAY,CAAA,EAChEuE,GAAWD,EAAM,OAEvB,IAAIE,EAAmBJ,EAAW,OAClC,MAAMK,GAAoBJ,EAAY,OACtC,IAAIK,GAAeF,EAAmB,EACtC,MAAMG,GAAgBJ,GAAWE,GAC7BxB,IACFuB,GAAoB,EACpBE,IAAgB,GAElB,IAAIE,GAAY,EACZC,GAAa,EACjB,QAASC,EAAK,EAAGA,EAAKP,GAAUO,IAAM,CACpC,MAAMC,GAAOT,EAAMQ,CAAE,EACrB,GAAI,CAACC,GACH,SAEF,MAAMC,GAAQD,GAAK,YACfD,GAAMJ,KACRE,IAAaI,IAEXF,GAAMH,KACRE,IAAcG,GAElB,CAEI7C,EAAkB,QACpBhB,EAAe,iBAAmBiD,EAAW,OAC7CjD,EAAe,UAAY,GAAGyD,EAAS,KACvCT,GAAeS,IAEbxC,EAAmB,QACrBjB,EAAe,kBAAoBkD,EAAY,OAC/ClD,EAAe,WAAa,GAAG0D,EAAU,KACzCV,GAAeU,GAEnB,CACAV,EAAc,KAAK,IAAI,EAAGA,CAAW,EACrChD,EAAe,YAAc,GAAGgD,CAAW,KAC3CV,EAAAA,SAAS,IAAM,CACbO,EAAA,CACF,CAAC,CACH,OAASiB,EAAK,CACZhB,EAAOgB,CAAG,CACZ,CACF,CAAC,CACH,CAAC,EAGGC,GAAmB,IAAM,CAC7BzB,EAAAA,SAAS,IAAM,CACTpD,EAAe,OACjBA,EAAe,MAAM,gBAAA,CAEzB,CAAC,CACH,EAEM8E,GAAqB1I,GAAe,EACpC0F,EAAkB,OAASC,EAAmB,QAC5C/B,EAAe,OACjBA,EAAe,MAAM,iBAAiB5D,CAAE,CAG9C,EAEM2I,GAAwB3I,GAAe,CAC3C,GAAInH,EAAM,cAAe,CACvB,MAAM+P,EAAMjQ,EAAAA,WAAW,YAAY4L,EAAW,OAAO,EACjDqE,EAAI,QAAQ5I,CAAE,IAAM,KACtB4I,EAAI,KAAK5I,CAAE,EACXuE,EAAW,QAAUqE,EAEzB,CACF,EAEMC,GAAuB7I,GAAe,CAC1C,GAAInH,EAAM,cAAe,CACvB,MAAM+P,EAAMjQ,EAAAA,WAAW,YAAY4L,EAAW,OAAO,EAC/ClI,EAAMuM,EAAI,QAAQ5I,CAAE,EACtB3D,EAAM,KACRuM,EAAI,OAAOvM,EAAK,CAAC,EACjBkI,EAAW,QAAUqE,EACrB5B,EAAAA,SAAS,IAAM,CACb0B,GAAkB1I,CAAE,CACtB,CAAC,EAEL,CACF,EAEM8I,GAAuB,CAACjN,EAAWgF,EAAiBN,EAAiBwI,IAAqB,CAE9F,GAAIpQ,EAAAA,WAAW,QAAQkD,CAAI,GAAKlD,EAAAA,WAAW,QAAQkD,EAAK,EAAE,EACxD,OAEF,MAAMmE,EAAKnE,EAAK,GAAG,SAAA,EACb+M,EAAMjQ,EAAAA,WAAW,YAAY4L,EAAW,IAAI,EAC5ClI,EAAMuM,EAAI,QAAQ5I,CAAE,EACpBsG,EAASjK,IAAQ,GACnBiK,GACFsC,EAAI,KAAK5I,CAAE,EACX2I,GAAqB3I,CAAE,IAEvB4I,EAAI,OAAOvM,EAAK,CAAC,EACjBwM,GAAoB7I,CAAE,GAEjB0F,EAAkB,OAASC,EAAmB,QAAU/B,EAAe,OAC1EA,EAAe,MAAM,sBAAsB5D,CAAE,GAGjDgJ,GAAqBzI,EAAW+F,CAAM,EACtC,MAAM2C,EAAYtQ,EAAAA,WAAW,UAAUoQ,CAAM,EAAIA,EAAS,GAC1DxE,EAAW,KAAOqE,EACdK,GACF5C,GAAkBrG,EAAInE,EAAMgF,EAASyF,EAAQ/F,CAAS,EAExDkI,GAAA,CACF,EAEMS,GAAsB,IAAM,CAChC,MAAMC,EAAiB,CAAA,EAEjBC,EAAwBzQ,EAAAA,WAAW,QAAQE,EAAM,cAAc,EACjE,CAAA,EACCA,EAAM,eACX,GAAIuQ,EAAe,SAAW,EAAG,CAC/B,MAAMzC,EAAc3C,EAAW,MACzBqF,EAAmB9E,EAAW,KACpCoC,EAAK,QAAS9K,GAAc,CAE1B,GAAI,CAACA,EAAM,CACTsN,EAAQ,KAAKtN,CAAI,EACjB,MACF,CACA,MAAMyN,EAAU3Q,EAAAA,WAAW,aAAakD,CAAI,EAC5C,GAAI,CAAClD,EAAAA,WAAW,QAAQ2Q,EAAQ,EAAE,EAAG,CACnC,MAAMtJ,EAAKsJ,EAAQ,GAAG,SAAA,EACtBA,EAAQ,gBACND,EAAU,QAAQrJ,CAAE,EAAI,GAAKoJ,EAAe,CAAC,EAAIA,EAAe,CAAC,CACrE,CACAD,EAAQ,KAAKG,CAAO,CACtB,CAAC,CACH,CACIH,EAAQ,OAAS,IACnBnF,EAAW,MAAQmF,EAEvB,EAEMH,GAAuB,CAACzI,EAAiB+F,EAAS,KAAU,CAChE,GAAI/F,EAAW,CACb,MAAMgJ,EAAS,CAAA,EACTC,EAAY,CAAC,iBAAkB,iBAAiB,EACtDlD,EAASiD,EAAO,KAAK,gBAAgB,EAAIA,EAAO,KAAK,iBAAiB,EACtE,MAAMH,EAAwBzQ,EAAAA,WAAW,QAAQE,EAAM,cAAc,EACjE,CAAA,EACCA,EAAM,eACPuQ,EAAe,SAAW,IAC5BI,EAAU,KAAKJ,EAAe,CAAC,CAAC,EAChCI,EAAU,KAAKJ,EAAe,CAAC,CAAC,EAChC9C,EAASiD,EAAO,KAAKH,EAAe,CAAC,CAAC,EAAIG,EAAO,KAAKH,EAAe,CAAC,CAAC,GAEzE,IAAIK,EAASvP,EAAAA,cAAc,eAAeqG,EAAU,UAAWiJ,EAAU,KAAK,GAAG,CAAC,EAClFC,EAASvP,EAAAA,cAAc,YAAYuP,EAAQF,CAAM,EACjDhJ,EAAU,UAAYkJ,CACxB,CACF,EAEMC,GAAwB,IAAM,CAClC,MAAMC,EAAmB,CAAA,EACzB,OAAA3F,EAAW,MAAM,QAASnI,GAAc,CAEtC,GAAIlD,EAAAA,WAAW,QAAQkD,CAAI,EACzB,OAGE,EADMlD,EAAAA,WAAW,UAAUkD,EAAK,UAAU,EAAIA,EAAK,WAAa,KAC1D,CAAClD,EAAAA,WAAW,QAAQkD,EAAK,EAAE,GACnC8N,EAAO,KAAK9N,EAAK,GAAG,SAAA,CAAU,CAElC,CAAC,EACM8N,CACT,EAEMC,GAAuB,CAACC,EAAiB,OAAS,CAEtD,MAAMC,EACJnR,aAAW,YAAYkR,CAAS,GAAKA,IAAc,KAC/CvF,EAAwB,MACvBuF,EACDE,EAAmB,CAAA,EACzB,GAAI,CAAC,MAAM,QAAQD,CAAI,EACrB,MAAO,CAAA,EAET,GAAIA,EAAK,OAAS,EAAG,CACnB,MAAMH,EAASD,GAAA,EACfI,EAAK,QAASE,GAAgB,CACxBrR,aAAW,aAAagR,EAAQK,CAAG,GACrCD,EAAO,KAAKC,CAAG,CAEnB,CAAC,CACH,CAEA,OAAIlG,EAAQ,gBAAkBiG,EAAO,OAAS,EACrC,CAACA,EAAO,CAAC,CAAC,EAEZA,CACT,EAEME,GAAkB,IAAM,CAC5B,GAAInG,EAAQ,kBAAmB,CAC7B,MAAM6F,EAASD,GAAA,EACTQ,EAAuBN,GAAA,EAC7BzF,EAAY,MAAQ+F,EAAW,OAAS,GAAKA,EAAW,SAAWP,EAAO,MAC5E,CACF,EAEMQ,GAAqB,IAAM,CAC/B,MAAMxD,EAAc,CAAA,EACduD,EAAuBN,GAAA,EACvBQ,EAAyB,CAAA,EAQ/B,GAPeV,GAAA,EACR,QAASW,GAAgB,CACzB1R,EAAAA,WAAW,aAAauR,EAAYG,CAAG,GAC1CD,EAAa,KAAKC,CAAG,CAEzB,CAAC,EAEGvG,EAAQ,kBACVoG,EAAW,QAASlK,GAAY,CAC9B,MAAMmC,EAAOc,EAAU,SAASjD,EAAG,UAAU,EACxCrH,EAAAA,WAAW,YAAYwJ,CAAI,GAC9BwE,EAAK,KAAKxE,CAAI,CAElB,CAAC,UACQ2B,EAAQ,gBACboG,EAAW,OAAS,EAAG,CACzB,MAAM/H,EAAOc,EAAU,SAASiH,EAAW,CAAC,CAAC,EACxCvR,EAAAA,WAAW,YAAYwJ,CAAI,GAC9BwE,EAAK,KAAKxE,CAAI,CAElB,CAEF,MAAO,CAAE,WAAA+H,EAAY,aAAAE,EAAc,YAAazD,CAAA,CAClD,EAEM2D,GAA2B,IAAM,CACrC,MAAMC,EAAiBJ,GAAA,EACvB1D,GAAmB8D,EAAe,WAAW,KAAK,GAAG,EAAGA,EAAe,YAAa,CAClF,WAAYA,EAAe,WAC3B,aAAcA,EAAe,YAAA,CAC9B,CACH,EAEMC,GAAgB3O,GAAc,CAElC,GAAIlD,EAAAA,WAAW,QAAQkD,CAAI,GAAKlD,EAAAA,WAAW,QAAQkD,EAAK,EAAE,EACxD,OAEF,MAAM4O,EAAQ5O,EAAK,GAAG,SAAA,EAChB6O,EAAiBpG,EAAwB,MAC/C,IAAIqG,EAA2B,CAAA,EAC/B,GAAI7G,EAAQ,kBAAmB,CAC7B,MAAM8G,EAAUjS,EAAAA,WAAW,aAAa+R,EAAgBD,CAAK,EAC7DC,EAAe,QAAS1K,GAAe,CACjCA,IAAOyK,GACTE,EAAe,KAAK3K,CAAE,CAE1B,CAAC,EACI4K,GACHD,EAAe,KAAKF,CAAK,EAE3BnG,EAAwB,MAAQqG,EAChCV,GAAA,EACAK,GAAA,CACF,MACQI,EAAe,OAAS,GAAKA,EAAe,CAAC,IAAMD,IACvDE,EAAiB,CAACF,CAAK,EACvBnG,EAAwB,MAAQqG,EAChCL,GAAA,EAGN,EAEMO,GAAsB,IAAM,CAChC,GAAIrF,EAAgB,OAAS7B,EAAc,OAASC,EAAe,MAAO,CACxE,MAAMkH,EAAKnH,EAAc,MAAM,YACzBoH,EAAKnH,EAAe,MAAM,SAAA,EAChCY,EAAW,OAASuG,EAAKD,CAC3B,CACF,EAEME,GAAsB,IAAM,CAChC,GAAIvF,GAAgB,OAAS7B,EAAe,MAAO,CACjD,MAAMqH,EAAarH,EAAe,MAAM,UAAA,EACxC,IAAIsH,EAAMD,EAAapS,EAAM,QAY7B,GAXKqS,IACCxF,EAAkB,OAASC,EAAmB,MAC5CjC,EAAmB,QACrBwH,EAAMD,EAAavH,EAAmB,MAAM,cAG1CC,EAAc,OAASA,EAAc,MAAM,cAAgB9K,EAAM,UACnEqS,EAAMD,EAAatH,EAAc,MAAM,eAIzCuH,GAAO5F,GAAe,OACpB/B,EAAe,MAAO,CACxB,MAAMrG,EAAIqG,EAAe,MAAM,eAAA,GAAoB5K,aAAW,SAAS,SAAW,EAAI,GACtFmL,EAAQ,YAAc,GAAG5G,CAAC,IAC5B,CAEFuH,EAAiB,MAAQyG,CAC3B,CACF,EAEMC,GAAgC,IAAM,CAC1C,IACGzF,EAAkB,OAASC,EAAmB,QAC/ChC,EAAc,OACdC,EAAe,MACf,CACA,IAAIlD,EAAaiD,EAAc,MAAM,WACrC,MAAMyH,EAASzH,EAAc,MAAM,YAC7B0H,EAASzH,EAAe,MAAM,SAAA,EAEpC,IAAI0H,EAAU,OACV5K,EAAa,IACC0K,EAAS1K,GACV2K,EACbC,EAAU,QAEVA,EAAU,UAGd9G,EAAW,QAAU8G,CACvB,CACF,EAEMC,GAA6B,IAAM,CACvC,GAAI,CAAC9H,EAAiB,OAAS,CAACG,EAAe,MAC7C,OAEF,IAAIlD,EAAa4C,EAAc,MAAQA,EAAc,MAAM,WAAa,EACxE,MAAM8H,EAAS3H,EAAiB,MAAM,YAChC4H,EAASzH,EAAe,MAAM,SAAA,EAEhCwH,EAAS1K,EAAa2K,IACxB3K,EAAa,GAEX6D,EAAW,QAAQ,OAAS,GAC9BX,EAAe,MAAM,mBAAmBlD,CAAU,EAEhDsD,EAAW,MAAM,SAAW,GAC9BJ,EAAe,MAAM,aAAalD,CAAU,CAEhD,EAIM8K,GAAc7L,GAAa,CAC/BoF,GAAoBpF,EAAE,OAAuB,WACzCkF,IAAkB,OAGtBA,EAAgB,sBAAsB,IAAM,CAC1CA,EAAgB,KAChB,MAAMnE,EAAaqE,GAEfzB,EAAc,QAChBA,EAAc,MAAM,WAAa5C,GAE/BiD,EAAc,QAChBA,EAAc,MAAM,WAAajD,GAG/B8C,EAAsB,OACxBA,EAAsB,MAAM,cAAc9C,CAAU,EAElDmD,EAAsB,OACxBA,EAAsB,MAAM,cAAcnD,CAAU,EAGtDyK,GAAA,EACAI,GAAA,CACF,CAAC,EACH,EAKME,GAAiB9L,GAAa,CAClC,MAAMU,EAAKV,EAAE,OACP+L,EAAOrL,EAAG,WACAA,EAAG,YAAcA,EAAG,YACtBqL,EAAO,GAAK/H,EAAc,OAASA,EAAc,MAAM,WAAa+H,IAG9EA,IAASzI,EAAU,WAAW,MAChCuI,GAAW7L,CAAC,EAEdsD,EAAU,WAAW,KAAOyI,EAC9B,EAEMC,GAAiBhM,GAAa,CAClC,MAAM+L,EAAQ/L,EAAE,OAAuB,WACnC+L,IAASzI,EAAU,WAAW,MAChCuI,GAAW7L,CAAC,EAEdsD,EAAU,WAAW,KAAOyI,CAC9B,EAEME,GAA4B,IAAM,CACtC,GAAI/S,EAAM,aAAeuK,EAAiB,OAAS,CAACU,EAAQ,aAAc,CACxE,IAAI+H,EAAc,GACdC,EAAQ,OACRC,EAAS,OACb,MAAMC,EACJ5I,EAAiB,OAASA,EAAiB,MAAM,WAC7ClJ,EAAAA,cAAc,gBAAgBkJ,EAAiB,MAAM,UAAU,EAC/D,KACN,GAAI4I,GAAOA,EAAI,IAAM,GAAKvI,EAAiB,OAASJ,EAAmB,OAASE,EAAe,MAAO,CACpG,MAAM0I,EAAQxI,EAAiB,MAAM,aACrC,GAAIuI,EAAI,KAAOC,EAAQrK,IAAwB,GAAI,CACjDiK,EAAc,GACd,MAAMtR,EAAIkJ,EAAiB,MAAM,YAC3BvG,EACJsH,EAAW,QAAU3L,EAAM,UACvBwK,EAAmB,MAAM,aACzBE,EAAe,MAAM,gBAAA,EAC3BuI,EAAQ,GAAGvR,CAAC,KACZwR,EAAS,GAAG7O,CAAC,IACf,CACF,CACAyH,EAAa,OAASkH,EACtBlH,EAAa,MAAQmH,EACrBnH,EAAa,OAASoH,CACxB,CACF,EAEMG,GAAiB,IAAM,CACvBlI,EAAW,MAAM,SAAW,GAC9BgD,EAAAA,SAAS,IAAM,CACTpD,EAAe,OACjBA,EAAe,MAAM,cAAA,CAEzB,CAAC,CAEL,EAEMkD,GAAmB,IAAsB,CAC7C,MAAMV,EAAwB,CAAA,EAC9B,GAAIvN,EAAM,WAAY,CACpB,KAAM,CAAE,MAAAkK,EAAO,MAAAoJ,CAAA,EAAUlJ,EAAU,kBACnCmD,EAAM,MAAQrD,EACdqD,EAAM,MAAQ+F,EAEd/F,EAAM,QAAWA,EAAM,MAAmB,GAAMA,EAAM,KACxD,CACA,GAAIvN,EAAM,QAAS,CACjB,KAAM,CAAE,WAAA+J,EAAY,QAAAC,CAAA,EAAYI,EAAU,cAC1CmD,EAAM,WAAaxD,EACnBwD,EAAM,QAAUvD,EAChB,MAAMuJ,EAAevT,EAAM,QAAkB+J,CAAoB,EAC5DjK,EAAAA,WAAW,YAAYyT,CAAW,IACrChG,EAAM,aAAegG,EAAY,KAErC,CACA,OAAOhG,CACT,EAEMiG,GAAoB,IAAM,CAC1BxT,EAAM,QAAU,GAClBmO,EAAAA,SAAS,IAAM,CACb,GAAI,CAACrD,EAAc,MACjB,OAEF,MAAM2I,EAAa3I,EAAc,MAAM,iBAAiB,cAAc,EACtEA,EAAc,MAAM,UAClB2I,GAAcA,EAAW,OAAS,GAC7BA,EAAW,CAAC,EAAkB,UAAYzK,GACxCyK,EAAW,CAAC,EAAkB,UAAYxK,GAE7C,CACR,CAAC,CAEL,EAEMyK,GAAmB,CAACvQ,EAAW,KAAO,CAC1C,GAAI8H,EAAQ,gBAAkBA,EAAQ,kBAAmB,CACvD,MAAM0I,EAAepI,GAAA,EACrBE,EAAwB,MAAQsF,GAAqB4C,CAAY,EACjEvC,GAAA,EACAoC,GAAA,CACF,CAEIxT,EAAM,aACkBF,CAAAA,EAAAA,WAAW,UAAUqD,EAAI,iBAAiB,GAChEA,EAAI,qBAGNuI,EAAW,KAAO,CAAA,GAEbmB,EAAkB,OAASC,EAAmB,QAAU/B,EAAe,OAC1EA,EAAe,MAAM,qBAAA,GAGzBW,EAAW,QAAU,CAAA,EACrB2E,GAAA,GAGFpF,EAAQ,aAAe,GACvBA,EAAQ,oBAAsB,GAC9BkD,EAAAA,SAAS,IAAM,CACTnO,EAAM,aACRoL,EAAY,MAAQhB,EAAU,kBAAkB,MAChDgB,EAAY,MAAQhB,EAAU,kBAAkB,OAE9CpK,EAAM,UACRqL,EAAa,MAAQhC,EAAe,CAClCe,EAAU,cAAc,WACxBA,EAAU,cAAc,OAAA,CACzB,GAEHiE,GAAA,EACAC,GAAA,EACAH,EAAAA,SAAS,IAAM,CACbgE,GAAA,EACAH,GAAA,EACAvD,GAAA,EACG,KAAK,IAAM,CACV6D,GAAA,CACF,CAAC,EACA,MAAO3C,GAAa,CAAE,QAAQ,KAAK,YAAaA,CAAG,CAAG,CAAC,EAC1D0D,GAAA,EACAN,GAAA,CACF,CAAC,CACH,CAAC,CACH,EAEMa,GAAqB,CAACrG,EAAYsG,IAAwB,CAC9D,MAAM/F,EAAOhO,EAAAA,WAAW,QAAQE,EAAM,IAAI,EAAI,CAAA,EAAKA,EAAM,KACzD,IAAI8T,EAAqB,CAAA,EACzB,GAAID,EAAY,CACd,GAAI7T,EAAM,QAAS,CACjB,MAAM+T,EAAgB,CAAA,EAChBC,EAAiB,CAAA,EACvB,IAAIC,EAAa,SACjB,GAAI,CAACnU,EAAAA,WAAW,YAAYyN,EAAM,UAAU,EAAG,CAC7C,MAAM2G,EAAe3G,EAAM,aACrB4G,EAAenU,EAAM,QAAkBuN,EAAM,UAAU,EAC7D,GAAI,CAACzN,EAAAA,WAAW,YAAYqU,CAAW,EACrC,GAAIrU,aAAW,QAAQqU,EAAY,QAAQ,EACzC,OAAQA,EAAY,OAAA,CAClB,IAAK,MACL,IAAK,SACL,IAAK,SACHF,EAAa,SACb,MACF,IAAK,OACL,IAAK,WACL,IAAK,OACHA,EAAa,OACb,MACF,QACEA,EAAa,QAAA,MAGjBA,EAAaE,EAAY,SAG7BrG,EAAK,QAAS9K,IAAc,CAC1B,GAAI,CAACA,GACH,OAEF,IAAIoR,EAAOpR,GAAKkR,CAAY,EAC5BE,EAAOtU,EAAAA,WAAW,YAAYsU,CAAI,GAAKA,IAAS,KAAO,GAAKA,EAC5D,MAAMC,GAAUD,EAAK,SAAA,EAChBtU,EAAAA,WAAW,eAAeiU,EAAUM,EAAO,IAC9CN,EAASM,EAAO,EAAI,CAAA,EACpBL,EAAQ,KAAKI,CAAI,GAEnBL,EAASM,EAAO,EAAE,KAAKvU,EAAAA,WAAW,aAAakD,EAAI,CAAC,CACtD,CAAC,CACH,CACIgR,EAAQ,OAAS,IAEjBzG,EAAM,UAAY,OACdzN,EAAAA,WAAW,WAAWkU,EAASC,CAAU,EACzCnU,EAAAA,WAAW,UAAUkU,EAASC,CAAU,GACnC,QAASK,GAAW,CAC7BR,EAAY,KAAK,GAAGC,EAASO,EAAE,SAAA,CAAU,CAAC,CAC5C,CAAC,CAEL,MACER,EAAchU,EAAAA,WAAW,aAAaE,EAAM,IAAI,EAElDoK,EAAU,cAAgB0J,CAC5B,MACEA,EAAc1J,EAAU,cAE1B,GAAIpK,EAAM,WAAY,CACpB,MAAMuU,EAAU,CAAA,EACVC,EAAMV,EAAY,OAClBW,EAAIlH,EAAM,OAChB,IAAIzG,EAAIyG,EAAM,OAASA,EAAM,MAE7B,GADAzG,EAAI0N,EAAM1N,EAAI0N,EAAM1N,EAChB0N,GACEA,GAAOC,GAAKD,EAAM,EACpB,QAAS9K,EAAI+K,EAAG/K,EAAI5C,EAAG4C,GAAK,EAC1B6K,EAAQ,KAAKzU,EAAAA,WAAW,aAAagU,EAAYpK,CAAC,CAAC,CAAC,EAI1D,OAAO6K,CACT,KACE,QAAOT,CAEX,EAEMY,GAAoB,CAACvR,EAAW,KAAO,CAC3C,MAAMoK,EAAQU,GAAA,EACdxC,EAAwB,MAAQ,CAAA,EAChCH,EAAY,MAAQ,GACpB4C,GAAA,EACIlO,EAAM,UACJoK,EAAU,WACZ,aAAaA,EAAU,SAAS,EAElCA,EAAU,UAAY,WAAW,IAAM,CACrCA,EAAU,UAAY,KACtBkD,GAAaC,CAAK,CACpB,EAAGrE,EAAgB,IAEfkB,EAAU,WACZ,aAAaA,EAAU,SAAS,EAElCA,EAAU,UAAY,WAAW,IAAM,CACrCA,EAAU,UAAY,KACtB,MAAMuK,EAAiB7U,EAAAA,WAAW,UAAUqD,EAAI,YAAY,EAAI,CAACA,EAAI,aAAe,GACpFgI,EAAW,MAAQyI,GAAmBrG,EAAOoH,CAAc,EAC3DjB,GAAA,CACF,EAAGxK,EAAgB,EAEvB,EAEM0L,GAAwB,IAAM,CAC9BjI,EAAgB,QACdlC,EAAc,OAChBA,EAAc,MAAM,iBAAiB,SAAUmI,EAAa,EAE1D9H,EAAc,OAChBA,EAAc,MAAM,iBAAiB,SAAUgI,EAAa,EAGlE,EAEM+B,GAAwB,IAAM,CAClC,GAAIjI,GAAgB,MAAO,CACzB,MAAMkI,EAAW,OACXC,EACJD,EAAI,kBAAoBA,EAAI,wBAA0BA,EAAI,oBAC5D,GAAI,CAACC,EACH,OAEF1K,EAAY,oBAAsB,IAAI0K,EAAiB,IAAM,CAC3D5C,GAAA,CACF,CAAC,EACD,MAAM6C,EAAW3K,EAAY,oBACzBU,EAAe,OAASA,EAAe,MAAM,KAAOiK,GACtDA,EAAS,QAAQjK,EAAe,MAAM,IAAK,CACzC,UAAW,GACX,QAAS,EAAA,CACV,CAEL,CACF,EAEMkK,GAAe,IAAM,CACzBjD,GAAA,EACAvD,GAAA,EACG,KAAK,IAAM,CACV6D,GAAA,CACF,CAAC,EACA,MAAO3C,GAAa,CAAE,QAAQ,KAAK,YAAaA,CAAG,CAAG,CAAC,EAC1DC,GAAA,EACAyD,GAAA,EACAX,GAAA,EACAvE,EAAAA,SAAS,IAAM,CACb4E,GAAA,CACF,CAAC,CACH,EAEMmC,GAAe,IAAM,CACrBjJ,IAAoB,OAGxBA,EAAkB,sBAAsB,IAAM,CAC5CA,EAAkB,KAClB8G,GAAA,CACF,CAAC,EACH,EAEMoC,GAAY,IAAM,CACtB7G,GAAA,EACAH,EAAAA,SAAS,IAAM,CACTnO,EAAM,SACR0U,GAAA,EAEK5U,EAAAA,WAAW,QAAQE,EAAM,IAAI,EAM5BA,EAAM,kBACRkO,GAAA,EAEAC,EAAAA,SAAS,IAAM,CACbkF,GAAA,CACF,CAAC,GAVHqB,GAAA,EACK1U,EAAM,oBACTiL,EAAQ,aAAe,IAY/B,CAAC,CACH,EAEAmK,EAAAA,UAAU,IAAM,CACdjH,EAAAA,SAAS,IAAM,CACbgH,GAAA,EACAP,GAAA,EACAC,GAAA,EACAzK,EAAU,YAAc,IAAIiL,UAAY,CACtC,QAAS,GACT,SAAU,IAAM,CACdJ,GAAA,CACF,CAAA,CACD,EACGjV,EAAM,aACR,OAAO,iBAAiB,SAAUkV,EAAY,CAElD,CAAC,CACH,CAAC,EAEDI,EAAAA,YAAY,IAAM,CACZtV,EAAM,aACR,OAAO,iBAAiB,SAAUkV,EAAY,EAG3C9K,EAAU,cACbA,EAAU,YAAc,IAAIiL,UAAY,CACtC,QAAS,GACT,SAAU,IAAM,CACdJ,GAAA,CACF,CAAA,CACD,GAGHA,GAAA,EAEI7K,EAAU,kBACZA,EAAU,gBAAkB,GAC5BsK,GAAA,EAEJ,CAAC,EAEDa,EAAAA,cAAc,IAAM,CAClB,OAAO,oBAAoB,SAAUL,EAAY,EAC7C9K,EAAU,YACZ,aAAaA,EAAU,SAAS,EAChCA,EAAU,UAAY,KAGtBa,EAAQ,aAAe,GAGvBb,EAAU,gBAAkB,IAE1BA,EAAU,cACZA,EAAU,YAAY,QAAA,EACtBA,EAAU,YAAc,MAEtB4B,IAAkB,OACpB,qBAAqBA,CAAa,EAClCA,EAAgB,MAEdC,IAAoB,OACtB,qBAAqBA,CAAe,EACpCA,EAAkB,KAEtB,CAAC,EAEDuJ,EAAAA,gBAAgB,IAAM,CAChBpL,EAAU,YACZ,aAAaA,EAAU,SAAS,EAChCA,EAAU,UAAY,MAEpBC,EAAY,sBACdA,EAAY,oBAAoB,WAAA,EAChCA,EAAY,oBAAoB,YAAA,EAChCA,EAAY,oBAAsB,MAEhCsC,EAAgB,QACdlC,EAAc,OAChBA,EAAc,MAAM,oBAAoB,SAAUmI,EAAa,EAE7D9H,EAAc,OAChBA,EAAc,MAAM,oBAAoB,SAAUgI,EAAa,GAG/D1I,EAAU,aACZA,EAAU,YAAY,QAAA,EAEpB4B,IAAkB,OACpB,qBAAqBA,CAAa,EAClCA,EAAgB,MAEdC,IAAoB,OACtB,qBAAqBA,CAAe,EACpCA,EAAkB,MAEpB,OAAO,oBAAoB,SAAUiJ,EAAY,CACnD,CAAC,EAED7R,EAAAA,MACE,IAAMrD,EAAM,KACZ,CAACyV,EAAiBC,IAAoB,CAEpC,MAAMC,EAAkB7V,EAAAA,WAAW,QAAQ2V,CAAQ,EAAI,CAAA,EAAKA,EAO5D,GANIrL,EAAU,YACZ,aAAaA,EAAU,SAAS,EAChCA,EAAU,UAAY,MAExBA,EAAU,SAAWtK,aAAW,cAAc6V,CAAQ,EAElD3V,EAAM,SAERmL,EAAW,MAAQrL,aAAW,aAAa6V,CAAQ,UAE/C3V,EAAM,qBACRmL,EAAW,MAAQrL,EAAAA,WAAW,aAAa6V,EAAU,EAAI,MACpD,CACLvL,EAAU,kBAAkB,MAAQ,EACpC,MAAMwL,EAAa3H,GAAA,EACnB9C,EAAW,MAAQyI,GAAmBgC,EAAY,EAAI,CACxD,CAEF,MAAMzS,EAAW,CAAA,EACjB,GAAInD,EAAM,UAAW,CAGnB,IAAI6V,EAAQ,GACZ,GAAIH,EACF,GAAIC,EAAS,SAAWD,EAAS,OAAQ,CAEvC,MAAMI,EAAW,IAAI,IAAIJ,EAAS,IAAKK,GAAcA,GAAM,EAAE,CAAC,EAC9DF,EAAQF,EAAS,KAAM3S,GAAcA,GAAQ,CAAC8S,EAAS,IAAI9S,EAAK,EAAE,CAAC,CACrE,MAEE6S,EAAQ,GAGPA,IACH1S,EAAI,kBAAoB,GAE5B,CACAuQ,GAAiBvQ,CAAG,CACtB,EACA,CAAE,KAAM,EAAA,CAAK,EAGfE,EAAAA,MACE,IAAMrD,EAAM,QACZ,IAAM,CACJmO,EAAAA,SAAS,IAAM,CACbG,GAAA,EACAH,EAAAA,SAAS,IAAM,CACbgE,GAAA,EACAH,GAAA,EACAvD,GAAA,EACG,KAAK,IAAM,CACV6D,GAAA,CACF,CAAC,EACA,MAAO3C,GAAa,CAAE,QAAQ,KAAK,YAAaA,CAAG,CAAG,CAAC,CAC5D,CAAC,CACH,CAAC,CACH,EACA,CAAE,KAAM,EAAA,CAAK,EAGftM,EAAAA,MACE,IAAMrD,EAAM,YACZ,IAAM,CACJ,MAAM2T,EAAepI,GAAA,EACrBE,EAAwB,MAAQsF,GAAqB4C,CAAY,EACjEvC,GAAA,CACF,CAAA,EAGF/N,EAAAA,MACE,IAAMrD,EAAM,UACZ,CAACyV,EAAqBO,IAAyB,CAC7C,GAAIP,GAAYA,EAAS,QAAU,GAE/B,EACEA,EAAS,CAAC,IAAMrL,EAAU,cAAc,YACxCqL,EAAS,CAAC,IAAMrL,EAAU,cAAc,SAE1C,CACA,MAAM6L,EAAe5M,EAAerJ,EAAM,SAAS,EAEnDoK,EAAU,kBAAkB,MAAQ,EAEpCgB,EAAY,MAAQ,EACpBhB,EAAU,cAAgB,CACxB,WAAY6L,EAAa,CAAC,EAC1B,QAASA,EAAa,CAAC,CAAA,EAEzB5K,EAAa,MAAQ4K,EAEjB,CAACjW,EAAM,UAAYA,EAAM,qBAC3BgO,GAAA,EAEA0G,GAAkB,CAAE,aAAc,GAAO,CAE7C,CAEJ,EACA,CAAE,KAAM,EAAA,CAAK,EAGfrR,EAAAA,MACE,CAAC,IAAMrD,EAAM,WAAY,IAAMA,EAAM,aAAa,EAClD,CAAC,CAACkW,EAAYC,CAAQ,EAAG,CAACC,EAAYC,CAAS,IAAM,CACnD,MAAMnM,EAAQD,EAAA,EACdG,EAAU,kBAAkB,MAAQF,EACpCE,EAAU,kBAAkB,MAAQ+L,EACpC/K,EAAY,MAAQlB,EACpBkB,EAAY,MAAQ+K,EAEhB,CAACnW,EAAM,UAAYA,EAAM,qBAC3BgO,GAAA,EAEA0G,GAAkB,CAAE,aAAc,GAAM,CAE5C,CAAA,EAGF,MAAMnR,GAAc,IAAM,CAExB,GAAIvD,EAAM,SACR,OAEF,MAAMsW,EAAc,CAAChL,EAAY,MACjC,IAAIwG,EAA2B,CAAA,EAC/B,GAAIwE,EAAa,CACf,MAAMxF,EAASD,GAAA,EACTI,EAAOxF,EAAwB,MAC/B2I,EAAiB,CAAA,EACvBtD,EAAO,QAASU,GAAgB,CACzB1R,EAAAA,WAAW,aAAamR,EAAMO,CAAG,GACpC4C,EAAK,KAAK5C,CAAG,CAEjB,CAAC,EACDM,EAAiBb,EAAK,OAAOmD,CAAI,CACnC,CACA9I,EAAY,MAAQgL,EACpB7K,EAAwB,MAAQqG,EAChCL,GAAA,CACF,EAEM9P,GAAiB,CAAC4U,EAAY/S,EAAa/B,IAAqB,CAEhEzB,EAAM,UAGLiL,EAAQ,eACXb,EAAU,kBAAkB,MAAQ,EAEpCgB,EAAY,MAAQ,EACpBhB,EAAU,cAAc,WAAa5G,EACrC4G,EAAU,cAAc,QAAU3I,EAC9B,CAACzB,EAAM,UAAYA,EAAM,qBAC3BgO,GAAA,EAEA0G,GAAkB,CAAE,aAAc,GAAO,EAG/C,EAGM7N,GAAY,CAACC,EAA+B9D,EAAuBQ,IAAgB,CAMvF,GAJI,CAACR,GAAQlD,EAAAA,WAAW,QAAQkD,CAAI,GAI/BlD,EAAAA,WAAW,UAAUkD,EAAK,UAAU,GAAKA,EAAK,YAAehD,EAAM,SACtE,OAGF,MAAMwW,EAAY1W,EAAAA,WAAW,iBAAiBE,EAAM,kBAAkB,EAClEqB,gBAAc,UAAUyF,EAAE,OAAQ9G,EAAM,mBAAoB8G,EAAE,cAAe,EAAK,EAClF,OACJ,GAAIhH,EAAAA,WAAW,YAAY0W,CAAS,EAAG,CACrC,GAAIxW,EAAM,UAAW,CACnB,MAAM0H,EAAY5H,EAAAA,WAAW,iBAAiBE,EAAM,kBAAkB,EAClEqB,gBAAc,UAAUyF,EAAE,OAAQ9G,EAAM,mBAAoB8G,EAAE,cAAe,EAAK,EAClF,OACJ,GAAIhH,EAAAA,WAAW,YAAY4H,CAAS,EAC9B1H,EAAM,mBACRiQ,GAAqBjN,EAAMQ,CAAG,MAE3B,CACLyM,GAAqBjN,EAAMQ,EAAKkE,CAAS,EACzC,MACF,CACF,CACA,IAAIiG,EAAO,GACX,GAAI1C,EAAQ,gBAAkBA,EAAQ,kBAAmB,CACvD,IAAIrH,EAAOvC,gBAAc,UAAUyF,EAAE,OAAQ,SAAUA,EAAE,cAAe,EAAK,EACzElD,IAASkD,EAAE,gBACblD,EAAO,MAEL9D,EAAAA,WAAW,YAAY8D,CAAI,EACzB5D,EAAM,mBACR2R,GAAa3O,CAAI,GAGnB2K,EAAO,GACPgE,GAAa3O,CAAI,EAErB,CACA0K,GAAc1K,EAAMQ,EAAKmK,CAAI,CAC/B,CACF,EAEM5G,GAAc,CAACvD,EAAawD,EAAa,KAAO,CACpDiE,EAAQ,aAAezH,EACvByH,EAAQ,oBAAsBjE,CAChC,EAEMC,GAAe,IAAM,CACzBgE,EAAQ,aAAe,GACvBA,EAAQ,oBAAsB,EAChC,EAEMwL,GAAmB,CAACvM,EAAeoJ,IAAkB,CAErDtT,EAAM,UAGNiL,EAAQ,cAGRjL,EAAM,aACRoK,EAAU,kBAAkB,MAAQF,EACpCE,EAAU,kBAAkB,MAAQkJ,EAChC,CAACtT,EAAM,UAAYA,EAAM,qBAC3BgO,GAAA,EAEA0G,GAAkB,CAAE,aAAc,GAAM,EAG9C,EAEMgC,GAAkB5P,GAAa,CACnC6L,GAAW7L,CAAC,CACd,EAyFA,OAAAnD,EAAa,CACX,aAxFmB,IACZsK,GAAA,EAwFP,QArFc,CAAC0I,EAAS,KAAS,CAC7B1L,EAAQ,eAGR0L,IACFvM,EAAU,kBAAkB,MAAQ,GAEtCsK,GAAA,EACF,EA8EE,QA5Ec,IAAkB,CAEhC,MAAM5G,EAAO8I,EAAAA,MAAMzL,EAAW,KAAK,EACnC,OAAOrL,EAAAA,WAAW,aAAagO,CAAI,CACrC,EAyEE,cAvEoB,IAAM,CAC1B,MAAM4D,EAAiBJ,GAAA,EAEvB,MAAO,CAAE,KADUI,GAAgB,YAAc,CAAA,GACxB,KAAK,GAAG,EAAG,KAAMA,GAAgB,aAAe,EAAC,CAC5E,EAoEE,UAlEgB,IAAM,CACtBxD,GAAA,CACF,EAiEE,SA/De,IAAM,CACrBG,GAAA,CACF,EA8DE,iBA3DwBlH,GAAwB,CAC5CrH,EAAAA,WAAW,YAAYqH,CAAE,GAAKA,IAAO,MAGzC2I,GAAqB3I,EAAG,UAAU,CACpC,EAuDE,gBArDuBA,GAAwB,CAC3CrH,EAAAA,WAAW,YAAYqH,CAAE,GAAKA,IAAO,MAGzC6I,GAAoB7I,EAAG,UAAU,CACnC,EAiDE,aA9CmB,CAACnE,EAAgBgF,EAAiBN,IAAmC,CAExF,GAAI5H,EAAAA,WAAW,QAAQkD,CAAI,GAAKlD,EAAAA,WAAW,QAAQkD,EAAK,EAAE,EACxD,OAEF,MAAMmE,EAAKnE,EAAK,GAAG,SAAA,EACnB,GAAI0I,EAAW,KAAK,QAAQvE,CAAE,IAAM,GAClC,OAGF,MAAMK,EACJE,IACCoD,EAAc,MACVA,EAAc,MAAM,cACnB,qBAAqB,IAAI,OAAO3D,CAAE,CAAC,IAAA,EAErC,MACN8I,GAAqBjN,EAAMgF,EAASR,EAAI,EAAK,CAC/C,EA6BE,cA3BoB,IAAM,CAC1ByN,GAAA,CACF,CAyBE,CACD,wBA/xECnT,EAAAA,mBAgfM,MAAA,CA/eH,GAAID,EAAAA,MAAAqD,CAAA,EACJ,uBAAOrC,GAAA,KAAS,CAAA,GAEjBd,EAAAA,mBA0dM,MA1dN8C,GA0dM,CAzdY5E,EAAA,sBAAhB6B,EAAAA,mBA8NWO,EAAAA,SAAA,CAAA,IAAA,GAAA,CA7NTN,EAAAA,mBAuNM,MAAA,CAtNH,uBAAOgL,GAAA,KAAc,EACrB,MAAK8J,EAAAA,eAAA,CAAA,MAAW/K,EAAa,MAAK,UAC/B,mBAAJ,IAAIvB,CAAA,GAEJxI,EAAAA,mBAwKM,MAAA,CAvKH,uBAAOiL,GAAA,KAAgB,UACpB,qBAAJ,IAAIxC,CAAA,GAEJzI,EAAAA,mBAiDM,MAAA,CAhDJ,MAAM,0BACF,gBAAJ,IAAI0I,CAAA,GAEJ/E,EAAAA,YA4CgBoR,GAAA,CA3Cb,SAAUnL,EAAW,SACrB,QAAS1L,EAAA,QACT,QAASA,EAAA,QACT,UAAWoL,EAAA,MACX,YAAaoB,GAAA,MACb,UAAWxM,EAAA,UACX,SAAUqK,EACV,WAAYW,EAAQ,aACpB,aAAc0B,EAAA,MACd,YAAa1B,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,kBAAmBuB,GAAA,MACnB,SAAUvM,EAAA,SACV,iBAAkBqL,EAAA,MAClB,cAAerL,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,aAAYsD,GACZ,iBAAgB5B,GAChB,YAAWoF,GACX,aAAYE,WACT,iBAAJ,IAAIyD,CAAA,uBAGajG,EAAAA,WAAA0H,GAAA,MAAR4K,UAEAA,EAEP,GAAAC,EAAAA,QAFeC,GAAS,CAExBjV,aAGEC,SAFO8U,EAAI,CACV,KAAME,EAAU,IAAA,QAIDxS,EAAAA,WAAA6H,GAAA,MAAX4K,UAEAA,EAEP,GAAAF,EAAAA,QAFkBC,GAAS,CAE3BjV,aAGEC,SAFOiV,EAAO,CACb,KAAMD,EAAU,IAAA,mQAMjBpK,EAAA,OAAqBhB,EAAe,iBAAgB,GAD5DrH,EAAAA,YAAA1C,EAAAA,mBAuDM,MAvDNiD,GAuDM,CAnDJhD,EAAAA,mBAkDM,MAAA,CAjDJ,MAAM,oCACL,MAAK8U,EAAAA,eAAA,CAAA,MAAWhL,EAAe,UAAS,CAAA,GAEzCnG,EAAAA,YA6CgBoR,GAAA,CA5Cd,UAAU,OACT,eAAgB7W,EAAA,qBAChB,MAAO4L,EAAe,WACtB,QAAS5L,EAAA,QACT,QAASA,EAAA,QACT,UAAWoL,EAAA,MACX,YAAaoB,GAAA,MACb,UAAWxM,EAAA,UACX,SAAUqK,EACV,WAAYW,EAAQ,aACpB,aAAc0B,EAAA,MACd,YAAa1B,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,kBAAmBuB,GAAA,MACnB,SAAUvM,EAAA,SACV,iBAAkBqL,EAAA,MAClB,cAAerL,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,aAAYsD,GACZ,iBAAgB5B,GAChB,YAAWoF,GACX,aAAYE,EAAA,uBAGIxC,EAAAA,WAAA0H,GAAA,MAAR4K,UAEAA,EAEP,GAAAC,EAAAA,QAFeC,GAAS,CAExBjV,aAGEC,SAFO8U,EAAI,CACV,KAAME,EAAU,IAAA,QAIDxS,EAAAA,WAAA6H,GAAA,MAAX4K,UAEAA,EAEP,GAAAF,EAAAA,QAFkBC,GAAS,CAE3BjV,aAGEC,SAFOiV,EAAO,CACb,KAAMD,EAAU,IAAA,iSAM3BnV,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpByK,EAAA,OAAsBjB,EAAe,kBAAiB,GAD9DrH,EAAAA,YAAA1C,EAAAA,mBAuDM,MAvDN2D,GAuDM,CAnDJ1D,EAAAA,mBAkDM,MAAA,CAjDJ,MAAM,qCACL,MAAK8U,EAAAA,eAAA,CAAA,MAAWhL,EAAe,WAAU,CAAA,GAE1CnG,EAAAA,YA6CgBoR,GAAA,CA5Cd,UAAU,QACT,gBAAiB7W,EAAA,sBACjB,MAAO4L,EAAe,WACtB,QAAS5L,EAAA,QACT,QAASA,EAAA,QACT,UAAWoL,EAAA,MACX,SAAUf,EACV,WAAYW,EAAQ,aACpB,YAAawB,GAAA,MACb,UAAWxM,EAAA,UACX,aAAc0M,EAAA,MACd,YAAa1B,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,kBAAmBuB,GAAA,MACnB,SAAUvM,EAAA,SACV,iBAAkBqL,EAAA,MAClB,cAAerL,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,aAAYsD,GACZ,iBAAgB5B,GAChB,YAAWoF,GACX,aAAYE,EAAA,uBAGIxC,EAAAA,WAAA0H,GAAA,MAAR4K,UAEAA,EAEP,GAAAC,EAAAA,QAFeC,GAAS,CAExBjV,aAGEC,SAFO8U,EAAI,CACV,KAAME,EAAU,IAAA,QAIDxS,EAAAA,WAAA6H,GAAA,MAAX4K,UAEAA,EAEP,GAAAF,EAAAA,QAFkBC,GAAS,CAE3BjV,aAGEC,SAFOiV,EAAO,CACb,KAAMD,EAAU,IAAA,kSAM3BnV,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,KAGtBuJ,EAAA,OADRpH,EAAAA,UAAA,EAAA1C,EAAAA,mBAgBM,MAhBNsG,GAgBM,aAZJrG,qBAAO,MAAA,KAAA,KAAA,EAAA,GAEC0K,GAAA,qBADR3K,EAAAA,mBAIE,MAAA,OAFA,MAAM,4BACL,MAAK+U,EAAAA,eAAA,CAAA,OAAY5L,EAAQ,YAAW,CAAA,0BAEvCnJ,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,GAEpBpC,EAAA,yBADR6B,EAAAA,mBAGE,MAAA,OADC,MAAKgD,EAAAA,eAAA,CAAA,6BAAkC6G,EAAW,OAAM,CAAA,0BAE3D7J,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,mBAE9BP,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpBpC,EAAA,UADRkX,kBAAA3S,EAAAA,YAAA1C,EAAAA,mBAgBM,MAhBNsV,GAgBM,CAXJ1R,EAAAA,YAUE2R,GAAAA,UAAA,CATC,WAAYxK,EAAA,MACZ,YAAaC,EAAA,MACb,UAAWjB,EAAe,UAC1B,YAAaA,EAAe,YAC5B,WAAYA,EAAe,WAC3B,aAAcD,EAAA,MACf,WAAW,YACV,YAAW8K,WACR,wBAAJ,IAAI/L,CAAA,qGAZE,CAAA2M,EAAAA,MAAA3L,EAAW,MAAM,CAAA,kBAe3B7J,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpByJ,EAAa,QAAUb,EAAQ,cADvCzG,EAAAA,YAAA1C,EAAAA,mBAGE,MAHFyV,EAGE,kBACFzV,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,KAGtByJ,EAAa,sBADrBhK,EAAAA,mBAGE,MAAA,OADC,+BAAiBgK,EAAa,OAAM,MAASA,EAAa,KAAA,CAAK,CAAA,0BAElEhK,EAAAA,mBAA4BO,WAAA,CAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,sBAE9BP,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,GAC5BN,EAAAA,mBAwOM,MAAA,CAvOH,uBAAOkL,GAAA,KAAc,UAClB,mBAAJ,IAAIrC,CAAA,GAEJ7I,EAAAA,mBAwMM,MAAA,CAvMJ,MAAM,uBACL,uBAAOmL,GAAA,KAAgB,UACpB,qBAAJ,IAAIrC,CAAA,GAEJ9I,EAAAA,mBA4DM,MAAA,CA3DH,MAAK+C,EAAAA,eAAA,CAAA,kBAAA,GAAA,mBAAiDqG,EAAA,MAAW,SAAM,EAAA,EACvE,uBAAOiC,GAAA,KAAW,UACf,gBAAJ,IAAItC,CAAA,GAEJpF,EAAAA,YAsDgB8R,GAAA,CArDb,SAAU7L,EAAW,SACrB,QAAS1L,EAAA,QACT,KAAMkL,EAAA,MACN,SAAUlL,EAAA,SACV,QAASA,EAAA,QACT,YAAawL,EAAA,MACb,SAAUnB,EACV,WAAYW,EAAQ,aACpB,kBAAmBA,EAAQ,oBAC3B,aAAc0B,EAAA,MACd,aAAc1B,EAAQ,aACtB,aAAcA,EAAQ,aACtB,YAAaA,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,UAAWhL,EAAA,UACX,YAAayL,EAAW,KACxB,eAAgBA,EAAW,QAC3B,YAAazL,EAAA,YACb,YAAaA,EAAA,YACb,cAAeA,EAAA,cACf,UAAWA,EAAA,UACX,UAAWA,EAAA,UACX,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,YAAW4G,GACX,YAAWE,GACX,aAAYE,WACT,iBAAJ,IAAI8D,CAAA,uBAGatG,EAAAA,WAAA2H,GAAA,MAARqL,UAEAA,EAEP,GAAAT,EAAAA,QAFeC,GAAS,CAExBjV,aAIEC,SAHOwV,EAAI,CACV,KAAMR,EAAU,KAChB,QAASA,EAAU,OAAA,QAIAxS,EAAAA,WAAA8H,GAAA,MAAfmL,UAEAA,EAEP,GAAAV,EAAAA,QAFsBC,GAAS,CAE/BjV,aAKEC,SAJOyV,EAAW,CACjB,KAAMT,EAAU,KAChB,QAASA,EAAU,QACnB,aAAcA,EAAU,YAAA,0WAMzBpK,EAAA,OAAqBhB,EAAe,iBAAgB,GAD5DrH,EAAAA,YAAA1C,EAAAA,mBAiEM,MAjEN6V,GAiEM,CA7DJ5V,EAAAA,mBA4DM,MAAA,CA3DJ,MAAM,oCACL,MAAK8U,EAAAA,eAAA,CAAA,MAAWhL,EAAe,UAAS,CAAA,GAEzCnG,EAAAA,YAuDgB8R,GAAA,CAtDb,MAAO3L,EAAe,WACvB,UAAU,OACT,eAAgB5L,EAAA,qBAChB,QAASA,EAAA,QACT,KAAMkL,EAAA,MACN,SAAUlL,EAAA,SACV,QAASA,EAAA,QACT,YAAawL,EAAA,MACb,SAAUnB,EACV,WAAYW,EAAQ,aACpB,kBAAmBA,EAAQ,oBAC3B,aAAc0B,EAAA,MACd,aAAc1B,EAAQ,aACtB,aAAcA,EAAQ,aACtB,YAAaA,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,UAAWhL,EAAA,UACX,YAAayL,EAAW,KACxB,eAAgBA,EAAW,QAC3B,YAAazL,EAAA,YACb,YAAaA,EAAA,YACb,cAAeA,EAAA,cACf,UAAWA,EAAA,UACX,UAAWA,EAAA,UACX,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,YAAW4G,GACX,YAAWE,GACX,aAAYE,EAAA,uBAGIxC,EAAAA,WAAA2H,GAAA,MAARqL,UAEAA,EAEP,GAAAT,EAAAA,QAFeC,GAAS,CAExBjV,aAIEC,SAHOwV,EAAI,CACV,KAAMR,EAAU,KAChB,QAASA,EAAU,OAAA,QAIAxS,EAAAA,WAAA8H,GAAA,MAAfmL,UAEAA,EAEP,GAAAV,EAAAA,QAFsBC,GAAS,CAE/BjV,aAKEC,SAJOyV,EAAW,CACjB,KAAMT,EAAU,KAChB,QAASA,EAAU,QACnB,aAAcA,EAAU,YAAA,0YAMnCnV,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,GAAA,EAAA,GAEpByK,EAAA,OAAsBjB,EAAe,kBAAiB,GAD9DrH,EAAAA,YAAA1C,EAAAA,mBAiEM,MAjENwG,GAiEM,CA7DJvG,EAAAA,mBA4DM,MAAA,CA3DJ,MAAM,qCACL,MAAK8U,EAAAA,eAAA,CAAA,MAAWhL,EAAe,WAAU,CAAA,GAE1CnG,EAAAA,YAuDgB8R,GAAA,CAtDb,MAAO3L,EAAe,WACvB,UAAU,QACT,gBAAiB5L,EAAA,sBACjB,QAASA,EAAA,QACT,KAAMkL,EAAA,MACN,SAAUlL,EAAA,SACV,QAASA,EAAA,QACT,YAAawL,EAAA,MACb,SAAUnB,EACV,WAAYW,EAAQ,aACpB,kBAAmBA,EAAQ,oBAC3B,aAAc0B,EAAA,MACd,aAAc1B,EAAQ,aACtB,aAAcA,EAAQ,aACtB,YAAaA,EAAQ,eACrB,eAAgBA,EAAQ,kBACxB,UAAWhL,EAAA,UACX,YAAayL,EAAW,KACxB,eAAgBA,EAAW,QAC3B,YAAazL,EAAA,YACb,YAAaA,EAAA,YACb,cAAeA,EAAA,cACf,UAAWA,EAAA,UACX,UAAWA,EAAA,UACX,cAAeA,EAAA,cACf,iBAAkBA,EAAA,iBAClB,oBAAqBA,EAAA,oBACrB,YAAW4G,GACX,YAAWE,GACX,aAAYE,EAAA,uBAGIxC,EAAAA,WAAA2H,GAAA,MAARqL,UAEAA,EAEP,GAAAT,EAAAA,QAFeC,GAAS,CAExBjV,aAIEC,SAHOwV,EAAI,CACV,KAAMR,EAAU,KAChB,QAASA,EAAU,OAAA,QAIAxS,EAAAA,WAAA8H,GAAA,MAAfmL,UAEAA,EAEP,GAAAV,EAAAA,QAFsBC,GAAS,CAE/BjV,aAKEC,SAJOyV,EAAW,CACjB,KAAMT,EAAU,KAChB,QAASA,EAAU,QACnB,aAAcA,EAAU,YAAA,2YAMnCnV,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,KAEdpC,EAAA,WAAakL,EAAA,MAAW,OAAM,GAAQQ,EAAW,sBAAjE7J,EAAAA,mBAyBWO,EAAAA,SAAA,CAAA,IAAA,GAAA,CAvBDpC,EAAA,+BADR6B,EAAAA,mBAiBM,MAAA,OAfJ,MAAM,6BACL,+BAAiB8K,GAAA,MAAe,OAAA,MAAA,CAAA,GAEjClH,EAAAA,YAWE2R,GAAAA,UAAA,CAVC,WAAYxK,EAAA,MACZ,YAAaC,EAAA,MACb,UAAWjB,EAAe,UAC1B,YAAaA,EAAe,YAC5B,WAAYA,EAAe,WAC3B,aAAcD,EAAA,MACd,YAAa,GACd,WAAW,eACV,YAAW8K,WACR,wBAAJ,IAAI1L,CAAA,mGAGRxG,EAAAA,YAAA1C,EAAAA,mBAKM,MALNyG,GAKM,CADJxG,EAAAA,mBAAoD,MAAA,CAA9C,kCAAoB+G,EAAgB,KAAA,CAAA,kCAG9ChH,qBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,KAGtBpC,EAAA,YAAckL,EAAA,MAAW,OAAM,GADvC3G,EAAAA,YAAA1C,EAAAA,mBAcM,MAdN8V,GAcM,aAVJ7V,qBAAO,MAAA,KAAA,KAAA,EAAA,GACP2D,EAAAA,YAQEmS,GAAAA,UAAA,CAPC,YAAazM,EAAY,MACzB,WAAYA,EAAY,MACxB,UAAWnL,EAAA,kBACX,YAAaA,EAAA,gBACb,WAAYyM,GAAA,MACZ,SAAUzM,EAAA,UAAYgL,EAAQ,aAC9B,WAAUwL,EAAA,2GAGf3U,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA,GAGtB4I,EAAQ,cADhBzG,EAAAA,UAAA,EAAA1C,EAAAA,mBAeM,MAfN8G,GAeM,CATJ7G,EAAAA,mBAQM,MARN+V,GAQM,CAPJ/V,EAAAA,mBAGE,MAAA,CAFA,MAAM,kBACL,uBAAOsL,GAAA,KAAW,CAAA,UAErBtL,EAAAA,mBAEM,MAAA,CAFA,kEAAwD9B,EAAA,UAAS,CAAA,GACrEyF,EAAAA,YAAoGqS,GAAAA,UAAA,CAAtF,UAAW9X,EAAA,UAAW,KAAK,MAAO,MAAOA,EAAA,UAAY,MAAOA,EAAA,WAAa,MAAA,gEAI7F6B,EAAAA,mBAA4BO,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"ClTable.cjs","sources":["../../../src/libs/Web/Table/TipIcon.ts","../../../src/libs/Web/Table/Th.vue","../../../src/libs/Web/Table/Td.vue","../../../src/libs/Web/Table/Head.vue","../../../src/libs/Web/Table/TdChecked.vue","../../../src/libs/Web/Table/Body.vue","../../../src/libs/Web/Table/Index.vue"],"sourcesContent":["import CommonBase from '../../Common/base';\n\nexport interface TipIconInfo {\n name: string;\n className: string;\n}\n\n// 解析 tipIcon 配置为图标渲染信息:\n// clIcon- 前缀 → 内置图标通道(前缀后非纯图标名回退默认);clicon 大小写错误回退默认;\n// 裸内置图标名自动补前缀走内置通道;其余按第三方自定义类名处理\nexport const getTipIconInfo = (tipIcon: string | undefined): TipIconInfo => {\n if (CommonBase.isNonEmptyString(tipIcon)) {\n if (tipIcon.indexOf('clIcon-') === 0) {\n // clIcon- 前缀:去前缀走内置图标通道,前缀后非纯图标名(含空格等)回退默认\n const name = tipIcon.substring('clIcon-'.length);\n if (CommonBase.isNonEmptyString(name) && /^[a-zA-Z0-9-]+$/.test(name)) {\n return { name, className: '' };\n }\n return { name: 'question-circle', className: '' };\n }\n if (/^clicon/i.test(tipIcon)) {\n // clIcon- 前缀写错(漏 -、大写):回退默认图标\n return { name: 'question-circle', className: '' };\n }\n if (/^[a-zA-Z0-9-]+$/.test(tipIcon)) {\n // 裸内置图标名(未加 clIcon- 前缀):自动补前缀走内置通道\n return { name: tipIcon, className: '' };\n }\n // 第三方自定义类名(如 fa fa-star)\n return { name: '', className: tipIcon };\n }\n return { name: 'question-circle', className: '' };\n};\n","<template>\n <th\n v-if=\"CommonBase.isBoolean(thInfo?.visible) ? thInfo.visible : true\"\n :class=\"clsTh\"\n :style=\"styTh\"\n scope=\"col\"\n :aria-sort=\"optAriaSort\"\n >\n <span\n class=\"th-title\"\n @click=\"onClickOrderBy\"\n >\n <slot />\n </span>\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(thInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"th-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: thInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n <i\n v-if=\"optSortType !== ''\"\n class=\"tr-sort-icon\"\n aria-hidden=\"true\"\n @click=\"onClickOrderBy\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTh',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n thIndex: {\n type: Number,\n default: 0, // desc: 表头单元格索引\n },\n thInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 表头配置信息\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickOrderBy: (_thInfo: ColumnsInfo, _thIndex: number, _sortType: string) => true, // desc: 点击排序事件\n});\n\n// slots: default 表头内容\n\nconst optTipIcon = computed(() => getTipIconInfo(props.thInfo?.tipIcon));\n\n// thInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象;\n// 非对象 truthy 输入(字符串/数字)同样归一为 {}——原始类型取 .sort/.width 等属性语义异常(空表头误判可排序);\n// 数组是 isObject=true 但语义上非列配置,保持透传不归一(.sort 命中原生数组方法不崩溃,仅属性访问 undefined)\nconst optThInfo = computed(() =>\n CommonBase.isObject(props.thInfo) && !CommonBase.isEmpty(props.thInfo)\n ? (props.thInfo as ColumnsInfo)\n : ({} as ColumnsInfo),\n);\n\n// 当前列可排序判定(isOrder 且该列 sort 未显式禁用;空 sort 视为 true 默认可排)。\n// 不受 disabled 影响:disabled 仍保留排序图标与激活态展示,仅拦截交互(见 optSortInteractive)\nconst optSortable = computed(() => {\n if (!props.isOrder) {\n return false;\n }\n // columns 含 null/空对象项(配置错误输入)时前置返回 false:空表头不渲染排序交互,\n // 与 Index._analysisColumns/_initOrderData 跳过 null 列的口径对齐(否则点击空表头激活别的列)\n // 守卫用归一后的 optThInfo(非对象 truthy 归一为 {} 后同样拦截,与判定谓词一致)\n if (CommonBase.isEmpty(optThInfo.value)) {\n return false;\n }\n return CommonBase.isEmpty(optThInfo.value.sort) ? true : optThInfo.value.sort === true;\n});\n\n// 当前列是否允许排序交互:具备排序能力且组件未禁用(disabled 时拦截点击)\nconst optSortInteractive = computed(() => optSortable.value && !props.disabled);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.thInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\n// 当前列排序状态:'asc' | 'desc'(激活排序)| 'none'(可排未激活)| ''(不可排)\nconst optSortType = computed(() => {\n if (!optSortable.value) {\n return '';\n }\n const orderSort = CommonBase.isEmpty(props.orderSort) ? [] : props.orderSort;\n if (orderSort.length > 0 && orderSort[0] === props.thIndex) {\n // length===1(仅索引未选方向)→ 默认 desc 激活;length===2 但方向非法 / length>2 畸形元组 → 不静默激活,返回 'none'\n return orderSort.length === 2\n ? orderSort[1] === 'asc' || orderSort[1] === 'desc'\n ? orderSort[1]\n : 'none'\n : orderSort.length === 1\n ? 'desc'\n : 'none';\n }\n return 'none';\n});\n\nconst optAriaSort = computed(() => {\n if (optSortType.value === 'asc') {\n return 'ascending';\n }\n if (optSortType.value === 'desc') {\n return 'descending';\n }\n if (optSortType.value === 'none') {\n return 'none';\n }\n return undefined;\n});\n\nconst clsTh = computed(() => {\n const cls: Record<string, boolean> = {};\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n cls[`${props.widthClassPrefix}${thInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${thInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['th-hidden'] =\n (props.fixedLeftIndex > -1 && props.thIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.thIndex < props.fixedRightIndex);\n }\n if (optSortable.value) {\n cls['th-sort'] = true;\n cls['sort-none'] = true;\n cls['th-sort-near'] = thInfo.sortNear === true;\n // 激活列判定已收敛至 optSortType(asc/desc 当且仅当 orderSort[0] === thIndex),激活时覆盖 sort-none\n const activeSort = optSortType.value;\n if (activeSort === 'asc' || activeSort === 'desc') {\n cls[`sort-${activeSort}`] = true;\n cls['sort-none'] = false;\n }\n }\n if (CommonBase.isNonEmptyString(thInfo.tipMsg)) {\n cls['th-tip'] = true;\n cls['th-tip-sideAlign'] = thInfo.tipSideAlign === true;\n }\n if (props.disabled) {\n cls['th-disabled'] = true;\n }\n if (CommonBase.isNonEmptyString(thInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], thInfo.textAlign)) {\n cls[`text-${thInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.className));\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(thInfo.classTh));\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTh = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const thInfo = optThInfo.value;\n if (!CommonBase.isEmpty(thInfo.width) && _isWidthValid(thInfo.width)) {\n sty.width = CommonBase.isFinite(Number(thInfo.width))\n ? `${Number(thInfo.width)}px`\n : `${thInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(thInfo.widthMin) &&\n _isWidthValid(thInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(thInfo.widthMin))\n ? `${Number(thInfo.widthMin)}px`\n : `${thInfo.widthMin}`;\n }\n return sty;\n});\n\nconst _emitClickOrderBy = (thInfo: ColumnsInfo, sortType: string) => {\n emit('onClickOrderBy', thInfo, props.thIndex, sortType);\n};\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n\nconst onClickOrderBy = () => {\n // disabled 时拦截排序(optSortInteractive=false),但保留排序图标展示\n if (optSortInteractive.value) {\n // 未激活('none')默认 desc,已激活翻转(orderSort 解析已收敛至 optSortType)\n const newSortType = optSortType.value === 'desc' ? 'asc' : 'desc';\n _emitClickOrderBy(optThInfo.value, newSortType);\n }\n};\n</script>\n","<template>\n <td\n v-if=\"CommonBase.isBoolean(tdInfo?.visible) ? tdInfo.visible : true\"\n :class=\"clsTd\"\n :style=\"styTd\"\n >\n <slot />\n <cl-icon-font\n v-if=\"CommonBase.isNonEmptyString(tdInfo?.tipMsg)\"\n :name=\"optTipIcon.name\"\n :className=\"optTipIcon.className\"\n class=\"td-tip-icon\"\n role=\"img\"\n :aria-label=\"optTipMsgText\"\n v-cltooltip=\"{ html: tdInfo.tipMsg, className: 'tooltip-modal' }\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClIconFont from '../../Element/IconFont/Index.vue';\nimport { tooltipDirectives } from '../../Web/Tooltip';\nimport type { ColumnsInfo } from './InterfaceItem';\nimport { getTipIconInfo } from './TipIcon';\n\ndefineOptions({\n name: 'ClTableTd',\n directives: { cltooltip: tooltipDirectives },\n});\n\nconst props = defineProps({\n tdIndex: {\n type: Number,\n default: 0, // desc: 单元格索引\n },\n tdInfo: {\n type: Object as PropType<ColumnsInfo>,\n default: () => ({}), // desc: 单元格配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n useType: {\n type: String,\n default: 'td', // desc: 使用类型 | enum: td, total\n validator: (value: string) => ['td', 'total'].indexOf(value) > -1,\n },\n});\n\n// slots: default 默认单元格内容\n\n// 提示图标:与 Th 侧同构,抽取至 TipIcon.ts 统一维护\nconst optTipIcon = computed(() => getTipIconInfo(props.tdInfo?.tipIcon));\n\n// tdInfo 空值兜底:运行时 columns 可能含 null 项(Index 分析函数跳过但渲染链透传),null/undefined/{} 统一为空对象\nconst optTdInfo = computed(() =>\n CommonBase.isEmpty(props.tdInfo) ? ({} as ColumnsInfo) : props.tdInfo,\n);\n\n// tipMsg 可能含 HTML(v-cltooltip 的 html 选项),aria-label 需纯文本版本(配合 role=\"img\" 读屏才能读出)\nconst optTipMsgText = computed(() => {\n const tipMsg = props.tdInfo?.tipMsg;\n if (!CommonBase.isNonEmptyString(tipMsg)) {\n return undefined;\n }\n // removeHTMLTags 对纯标签串(如 <i></i>)返回空串,空串不渲染 aria-label(role=\"img\" 读屏无名称)\n const text = CommonBase.removeHTMLTags(tipMsg);\n return CommonBase.isNonEmptyString(text) ? text : undefined;\n});\n\nconst clsTd = computed(() => {\n const cls: Record<string, boolean> = {};\n const tdInfo = optTdInfo.value;\n\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n cls[`${props.widthClassPrefix}${tdInfo.width}`] = true;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n cls[`${props.widthMinClassPrefix}${tdInfo.widthMin}`] = true;\n }\n if (props.fixedLeftIndex > -1 || props.fixedRightIndex > -1) {\n cls['td-hidden'] =\n (props.fixedLeftIndex > -1 && props.tdIndex > props.fixedLeftIndex) ||\n (props.fixedRightIndex > -1 && props.tdIndex < props.fixedRightIndex);\n }\n if (props.isOrder) {\n const sort = CommonBase.isEmpty(tdInfo.sort) ? true : tdInfo.sort === true;\n if (sort) {\n cls['td-sort'] = true;\n cls['td-sort-near'] = tdInfo.sortNear === true;\n }\n }\n if (CommonBase.isNonEmptyString(tdInfo.tipMsg)) {\n cls['td-tip'] = true;\n cls['td-tip-sideAlign'] = tdInfo.tipSideAlign === true;\n }\n if (CommonBase.isNonEmptyString(tdInfo.textAlign)) {\n if (CommonBase.isExistValue(['left', 'center', 'right'], tdInfo.textAlign)) {\n cls[`text-${tdInfo.textAlign}`] = true;\n }\n }\n let clsFinal: Record<string, boolean> = cls;\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.className));\n if (props.useType === 'td') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTd));\n } else if (props.useType === 'total') {\n clsFinal = CommonBase.getJsonMerge(clsFinal, CommonElement.getClassNameJson(tdInfo.classTotal));\n }\n return clsFinal;\n});\n\n// 列宽内联兜底(isInlineWidth=true 时):列宽类依赖外部原子 CSS 白名单,数值不在白名单时静默失效,内联直出保证生效;false 时纯类控制,外部 CSS 可直接覆盖预览\nconst styTd = computed(() => {\n const sty: Record<string, string> = {};\n if (!props.isInlineWidth) {\n return sty;\n }\n const tdInfo = optTdInfo.value;\n if (!CommonBase.isEmpty(tdInfo.width) && _isWidthValid(tdInfo.width)) {\n sty.width = CommonBase.isFinite(Number(tdInfo.width))\n ? `${Number(tdInfo.width)}px`\n : `${tdInfo.width}`;\n }\n if (\n !CommonBase.isEmpty(tdInfo.widthMin) &&\n _isWidthValid(tdInfo.widthMin) &&\n props.isUseScrollX\n ) {\n sty.minWidth = CommonBase.isFinite(Number(tdInfo.widthMin))\n ? `${Number(tdInfo.widthMin)}px`\n : `${tdInfo.widthMin}`;\n }\n return sty;\n});\n\n// 列宽合法形态收窄:字符串(含 '50%' 等非数值 CSS 值)或有限数值——getTypeof 先挡 Symbol/对象/布尔(Number 转换抛 TypeError 或误收窄),isFinite 挡 NaN/Infinity\nconst _isWidthValid = (w: unknown): w is string | number => {\n return CommonBase.isString(w) || (CommonBase.getTypeof(w) === 'number' && CommonBase.isFinite(w));\n};\n</script>\n","<template>\n <table\n :class=\"clsParent\"\n :style=\"styTable\"\n :aria-hidden=\"!CommonBase.isEmpty(fixedType)\"\n ref=\"refElTable\"\n >\n <thead>\n <tr>\n <th\n v-if=\"isShowRadio || isShowCheckbox\"\n :class=\"{ 'th-rc': true, 'th-hidden': fixedRightIndex > -1 }\"\n scope=\"col\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox && isShowCheckboxAll\"\n :forId=\"\n CommonBase.isNonEmptyString(keyIndex) ? `${keyIndex}_${fixedType}_cb_all` : undefined\n \"\n :value=\"checkboxAllValue\"\n :disabled=\"disabled\"\n @onChange=\"onSelectAll\"\n />\n <template v-else></template>\n </th>\n <template v-else></template>\n <template\n v-for=\"(thInfo, thIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_head_th_${thIndex}`\"\n >\n <cl-table-th\n :thInfo=\"thInfo\"\n :thIndex=\"thIndex\"\n :isOrder=\"isOrder\"\n :disabled=\"disabled\"\n :orderSort=\"orderSort\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickOrderBy=\"onClickOrderBy\"\n >\n <template v-slot>\n <slot\n :name=\"`th_${thInfo?.data ?? ''}`\"\n :data=\"thInfo\"\n >\n <span>{{ optFunGetThValue(thInfo) }}</span>\n </slot>\n </template>\n </cl-table-th>\n </template>\n </tr>\n </thead>\n <tbody v-if=\"isShowTotal\">\n <tr\n :class=\"{\n 'tr-total': true,\n 'tr-hover': hoverIndex === NO_HOVER_TOTAL_INDEX,\n }\"\n @mouseenter=\"onHoverInTotal\"\n @mouseleave=\"onHoverOutTotal\"\n >\n <td v-if=\"isShowRadio || isShowCheckbox\" />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_total_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n useType=\"total\"\n >\n <template v-slot>\n <slot\n :name=\"`total_${tdInfo?.data ?? ''}`\"\n :data=\"totalInfo\"\n >{{ optFunGetTotalValue(totalInfo, tdInfo) }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </tbody>\n <template v-else></template>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClTableTh from './Th.vue';\nimport ClTableTd from './Td.vue';\nimport type { ColumnsInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableHead' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array as unknown as PropType<[number, string] | []>,\n default: () => [], // desc: 排序配置([列索引, 排序方式])\n },\n isShowTotal: {\n type: Boolean,\n default: false, // desc: 是否显示总计行\n },\n totalInfo: {\n type: Object as () => Record<string, any>,\n default: () => ({}), // desc: 总计数据信息\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引(99999999 = 总计行悬停哨兵,与 NO_HOVER_TOTAL_INDEX 契约一致)\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n checkboxAllValue: {\n type: Boolean,\n default: false, // desc: 全选状态\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right\n validator: (value: string) => ['', 'left', 'right'].indexOf(value) > -1,\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n validator: (value: number) => value >= -1, // 校验值不小于 -1\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n});\n\nconst emit = defineEmits({\n onClickAll: () => true, // desc: 点击全选事件\n onClickOrderBy: (_info: ColumnsInfo, _inx: number, _sortType: string) => true, // desc: 点击排序事件\n onHoverIn: (_index: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: th_{data} 列头自定义内容 | total_{data} 总计行单元格自定义内容\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n// 总计行悬停哨兵索引,与 Index 侧 hoverIndex 的隐式契约值(99999999 永不等于数据行索引)\nconst NO_HOVER_TOTAL_INDEX = 99999999;\n\nconst clsParent = computed(() => {\n const cls = {\n 'table-default': true,\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (CommonBase.isEmpty(props.fixedType)) {\n // fixedType isEmpty 判空:null/空串归非固定分支(外部传 null 时原 .length 写法崩溃)\n if (\n props.isUseScrollX &&\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式(对齐 Body 侧 styTable 口径)\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst optFunGetThValue = (info: ColumnsInfo | null) => {\n if (!info) {\n return '';\n }\n return CommonBase.isUndefined(info.title)\n ? CommonBase.isUndefined(info.data)\n ? ''\n : info.data\n : info.title;\n};\n\nconst optFunGetTdValue = (value: any, opt: ColumnsInfo | null) => {\n if (CommonBase.isUndefined(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// totalInfo 显式传 null 时守卫(type: Object 的 prop 校验放行 null,模板内直接取字段会崩溃;isUndefined 已覆盖 null)\nconst optFunGetTotalValue = (info: Record<string, any> | null, opt: ColumnsInfo | null) => {\n if (!info || !opt) {\n return '';\n }\n return optFunGetTdValue(info[opt.data], opt);\n};\n\n// isShowTotal 翻转 false 时总计行被 v-if 直接从 DOM 移除,浏览器对移除悬停中元素不保证补发 mouseleave\n// → watch 兜底主动重置悬停态。hoverIndex === NO_HOVER_TOTAL_INDEX 前置:仅总计行悬停哨兵残留时才补发,\n// 数据行悬停中翻转(如父组件单独清空 totalData)不连带清除行高亮(Index 侧 onHoverOutTr 无条件重置\n// hoverTrIndex/hoverTrElasticIndex 两字段且幂等,重复触发无害)\nwatch(\n () => props.isShowTotal,\n nv => {\n if (!nv && props.hoverIndex === NO_HOVER_TOTAL_INDEX) {\n emit('onHoverOut');\n }\n },\n);\n\nconst onSelectAll = () => {\n emit('onClickAll');\n};\n\nconst onClickOrderBy = (info: ColumnsInfo, inx: number, sortType: string) => {\n emit('onClickOrderBy', info, inx, sortType);\n};\n\nconst onHoverInTotal = () => {\n emit('onHoverIn', NO_HOVER_TOTAL_INDEX);\n};\n\nconst onHoverOutTotal = () => {\n emit('onHoverOut');\n};\n\nconst getOffsetHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.offsetHeight;\n};\n\n// 读取全选/单选列宽度(主表头场景契约;固定副本的 rc 列含 th-hidden 时返回隐藏列布局宽度而非 0)\nconst getRcWidth = () => {\n let w = 0;\n if (props.isShowRadio || props.isShowCheckbox) {\n if (refElTable.value) {\n const elRc = refElTable.value.querySelector('.th-rc');\n if (elRc) {\n w = elRc.clientWidth;\n }\n }\n }\n return w;\n};\n\nconst getPaddingLr = () => {\n let totalPadding = 0;\n if (!refElTable.value) {\n return totalPadding;\n }\n const elThs = refElTable.value.querySelectorAll('th:not(.th-rc)');\n for (let ti = 0; ti < elThs.length; ti++) {\n const thStyle = CommonElement.getStyle(elThs[ti]);\n const plRaw = parseFloat(thStyle.paddingLeft);\n const prRaw = parseFloat(thStyle.paddingRight);\n const pl = CommonBase.isFinite(plRaw) ? plRaw : 0;\n const pr = CommonBase.isFinite(prRaw) ? prRaw : 0;\n totalPadding += pl + pr;\n }\n return totalPadding;\n};\n\nconst getElTh = () => {\n return refElTable.value ? refElTable.value.querySelectorAll('th') : [];\n};\n\nconst getTotalHeight = () => {\n let h = 0;\n if (props.isShowTotal) {\n if (refElTable.value) {\n const elTotal = refElTable.value.querySelector('.tr-total');\n if (elTotal) {\n h = elTotal.clientHeight;\n }\n }\n }\n return h;\n};\n\nexport interface ClTableHeadExpose {\n getOffsetHeight: () => number;\n getRcWidth: () => number;\n getPaddingLr: () => number;\n getElTh: () => NodeListOf<HTMLTableHeaderCellElement> | [];\n getTotalHeight: () => number;\n}\n\ndefineExpose({\n getOffsetHeight,\n getRcWidth,\n getPaddingLr,\n getElTh,\n getTotalHeight,\n});\n</script>\n","<template>\n <td\n v-if=\"isShowRadio || isShowCheckbox\"\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <cl-checkbox-one\n v-if=\"isShowCheckbox\"\n :forId=\"optForIdCb\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <cl-radio-one\n v-else-if=\"isShowRadio\"\n :forId=\"optForIdRd\"\n :name=\"optForIdRd\"\n :value=\"optIsChecked\"\n :disabled=\"optIsDisabled\"\n />\n <template v-else></template>\n </td>\n <template v-else></template>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport ClCheckboxOne from '../../Element/CheckBox/One.vue';\nimport ClRadioOne from '../../Element/Radio/One.vue';\nimport type { ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableTdChecked' });\n\n// 选中态依赖原生 click 冒泡到 tr.onClickTr 的 .th-rc 类名事件委托(Index 侧 _setSelectRc),勿在此添加 stopPropagation\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n value: {\n type: Boolean,\n default: false, // desc: 选中状态\n },\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选\n },\n keyIndex: String, // desc: 唯一键前缀\n info: {\n type: Object as PropType<ListInfo>,\n default: () => ({}), // desc: 数据项信息\n },\n});\n\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst optForIdCb = computed(() => _getForId('cb'));\n\nconst optForIdRd = computed(() => _getForId('rd'));\n\n// 严格 true 才选中:无论外部传 'false' 字符串(Vue 会 cast 为 false)还是其他非 true 值,严格判定均可防误选\nconst optIsChecked = computed(() => props.value === true);\n\nconst optIsDisabled = computed(\n () =>\n props.disabled === true ||\n (CommonBase.isBoolean(props.info?.isDisabled) && props.info.isDisabled),\n);\n\nconst clsParent = computed(() => {\n const cls = { 'th-rc': true };\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\n// forId/name 行级唯一值(含行号,_cb/_rd 后缀区分):原生互斥仅在同 name 组内生效,跨行单选互斥由 Index 状态层 _setSelectRc 保证(单选模式单值覆盖);forId 保持唯一供 label for 关联\nconst _getForId = (suffix: 'cb' | 'rd') =>\n CommonBase.isNonEmptyString(props.keyIndex) ? `${props.keyIndex}_${suffix}` : undefined;\n</script>\n","<template>\n <table\n :class=\"clsTable\"\n :style=\"styTable\"\n ref=\"refElTable\"\n >\n <tbody>\n <template v-if=\"!CommonBase.isEmpty(list)\">\n <template\n v-for=\"(trInfo, trIndex) in list\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n >\n <tr\n :class=\"{\n odd: isStriped && trIndex % 2 === 0,\n 'tr-customInterval-odd':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 0,\n 'tr-customInterval-even':\n isStriped && trIntervalNum > 0 && Math.floor(trIndex / trIntervalNum) % 2 === 1,\n 'tr-disabled': CommonBase.isBoolean(trInfo?.isDisabled) && trInfo.isDisabled,\n 'tr-selected': optIsTrSelected(trInfo),\n 'tr-hover': hoverIndex === trIndex,\n }\"\n @click=\"onClickTr($event, trInfo, trIndex)\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <cl-table-td-checked\n v-if=\"isShowRadio || isShowCheckbox\"\n :keyIndex=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}`\"\n :isShowRadio=\"isShowRadio\"\n :isShowCheckbox=\"isShowCheckbox\"\n :value=\"optIsTrSelected(trInfo)\"\n :info=\"trInfo\"\n :disabled=\"disabled\"\n />\n <template v-else></template>\n <template\n v-for=\"(tdInfo, tdIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_td_${tdIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdIndex\"\n :tdInfo=\"tdInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_${tdInfo?.data ?? ''}`\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n >{{\n optFunGetTdValue(trInfo && tdInfo ? trInfo[tdInfo.data] : undefined, tdInfo)\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n <template\n v-if=\"\n isElastic &&\n !CommonBase.isEmpty(trInfo?.id) &&\n optElasticOpenSet.has(trInfo.id.toString())\n \"\n >\n <template v-if=\"elasticType === 'default'\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n :class=\"{\n 'td-elastic-load': optIsElasticLoading(trInfo),\n }\"\n >\n <div\n v-if=\"optIsElasticLoading(trInfo)\"\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n <div\n v-else\n :class=\"[\n `elastic-container`,\n {\n 'elastic-container-absolute': optElasticAbsoluteIds.has(\n trInfo.id.toString(),\n ),\n },\n ]\"\n :data-elastic-id=\"trInfo.id\"\n >\n <slot\n name=\"tr_elastic_children\"\n :data=\"trInfo\"\n :trIndex=\"trIndex\"\n />\n </div>\n </td>\n </tr>\n </template>\n <template v-else-if=\"elasticType === 'sameDataStructure'\">\n <template v-if=\"optIsElasticLoading(trInfo)\">\n <tr\n :class=\"{ 'tr-elastic': true, 'tr-hover': hoverIndex === trIndex }\"\n @mouseenter=\"onHoverInTr(trIndex)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-elastic-load\"\n >\n <div\n class=\"panel-elastic-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"elastic-load-container\">\n <cl-load\n theme=\"circleBubble\"\n size=\"large\"\n />\n </div>\n </div>\n </td>\n </tr>\n </template>\n <template v-else>\n <template\n v-for=\"(trElasticInfo, trElasticInx) in optGetElasticDataList(\n trInfo.id.toString(),\n )\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}`\"\n >\n <tr\n :class=\"{\n // 预留外部覆盖钩子(无内置 CSS 规则):斑马纹由 odd、悬停由 tr-hover 承载\n 'tr-elastic-sameDataStructure': true,\n odd: isStriped && trElasticInx % 2 === 0,\n 'tr-disabled':\n CommonBase.isBoolean(trElasticInfo?.isDisabled) && trElasticInfo.isDisabled,\n 'tr-hover': hoverElasticIndex === trElasticInx && hoverIndex === trIndex,\n }\"\n @mouseenter=\"onHoverInTr(trIndex, trElasticInx)\"\n @mouseleave=\"onHoverOutTr\"\n >\n <template\n v-for=\"(tdElasticInfo, tdElasticIndex) in columns\"\n :key=\"`${keyIndex}_${fixedType}_body_tr_${trIndex}_elastic_${trElasticInx}_td_${tdElasticIndex}`\"\n >\n <cl-table-td\n :isOrder=\"isOrder\"\n :tdIndex=\"tdElasticIndex\"\n :tdInfo=\"tdElasticInfo\"\n :isUseScrollX=\"isUseScrollX\"\n :fixedLeftIndex=\"fixedLeftIndex\"\n :fixedRightIndex=\"fixedRightIndex\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n >\n <template v-slot>\n <slot\n :name=\"`td_elastic_${tdElasticInfo?.data ?? ''}`\"\n :data=\"trElasticInfo\"\n :trIndex=\"trIndex\"\n :trElasticInx=\"trElasticInx\"\n >{{\n optFunGetTdValue(\n trElasticInfo && tdElasticInfo\n ? trElasticInfo[tdElasticInfo.data]\n : undefined,\n tdElasticInfo,\n )\n }}</slot\n >\n </template>\n </cl-table-td>\n </template>\n </tr>\n </template>\n </template>\n </template>\n <template v-else></template>\n </template><template v-else></template>\n </template>\n </template>\n <template v-else></template>\n <tr\n v-if=\"CommonBase.isEmpty(list) && !isRunLoading && !CommonBase.isNonEmptyString(fixedType)\"\n >\n <td\n :colspan=\"optColspanCount\"\n class=\"td-empty\"\n >\n <div\n class=\"panel-table-empty\"\n role=\"status\"\n >\n {{ CommonBase.isNonEmptyString(emptyText) ? emptyText : optPageLanguage.noResultsText }}\n </div>\n </td>\n </tr>\n <template v-else></template>\n </tbody>\n </table>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, type PropType } from 'vue';\nimport CommonBase from '../../Common/base';\nimport ClTableTd from './Td.vue';\nimport ClTableTdChecked from './TdChecked.vue';\nimport ClLoad from '../../Element/Load/Index.vue';\nimport useLanguage from '../../Use/language';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\n\ndefineOptions({ name: 'ClTableBody' });\n\nconst props = defineProps({\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息\n },\n list: {\n type: Array as () => ListInfo[],\n default: () => [], // desc: 数据列表\n },\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n selectValue: {\n type: Array,\n default: () => [], // desc: 选中值列表\n },\n keyIndex: String, // desc: 唯一键前缀\n width: {\n type: String,\n default: 'none', // desc: 宽度\n },\n minWidth: {\n type: String,\n default: 'none', // desc: 最小宽度\n },\n hoverIndex: {\n type: Number,\n default: -1, // desc: 悬停行索引\n },\n hoverElasticIndex: {\n type: Number,\n default: -1, // desc: 悬停展开行索引\n },\n isUseScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n colspanCount: {\n type: Number,\n default: 1, // desc: 跨列数\n },\n isRunLoading: {\n type: Boolean,\n default: false, // desc: 是否加载中\n },\n isShowRadio: {\n type: Boolean,\n default: false, // desc: 是否显示单选列\n },\n isShowCheckbox: {\n type: Boolean,\n default: false, // desc: 是否显示多选列\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n elasticOpen: {\n type: Array,\n default: () => [], // desc: 展开的行 id 列表\n },\n elasticLoading: {\n type: Array,\n default: () => [], // desc: 展开加载中的行 id 列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object as PropType<Record<string, ListInfo[]>>,\n default: () => ({}), // desc: 展开数据(key 为行 id,值为行列表)\n },\n fixedType: {\n type: String,\n default: '', // desc: 固定类型 | enum: left, right (可自定义)\n },\n fixedLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n});\n\nconst emit = defineEmits({\n onClickTr: (_e: MouseEvent | KeyboardEvent, _info: ListInfo | null, _inx: number) => true, // desc: 点击行事件\n onHoverIn: (_inx: number, _elasticInx: number) => true, // desc: 悬停进入事件\n onHoverOut: () => true, // desc: 悬停离开事件\n});\n// slots: td_{data}(动态,按列 data 命名)| td_elastic_{data}(动态)| tr_elastic_children\n\nconst { optPageLanguage, getPageLanguage } = useLanguage();\ngetPageLanguage('common');\n\nconst refElTable = ref<HTMLTableElement | null>(null);\n\n// 展开行 absolute 定位状态集:setElasticHeight 标记的 id 走模板响应式 :class,\n// 避免直接改 elElastic.className 被 Vue patch 覆盖丢失(fixed 模式滚动后 absolute 定位失效)\nconst optElasticAbsoluteIds = ref<Set<string | number>>(new Set());\n\n// 选中/加载中 id 判定的 O(1) 查找集(selectValue/elasticLoading 为 id 字符串数组,模板多处分号重复 indexOf)\n// 外部显式传 null 时兜底空数组(Array prop 校验放行 null,.map 会崩溃)\n// 元素级过滤:null/undefined 元素经 String 转成 'null' 字符串,会与真实 'null' 字符串 id 歧义(isUndefined 含 null 判定,保留空串/0)\nconst optSelectedSet = computed(\n () =>\n new Set(\n (Array.isArray(props.selectValue) ? props.selectValue : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticLoadingSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticLoading) ? props.elasticLoading : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\nconst optElasticOpenSet = computed(\n () =>\n new Set(\n (Array.isArray(props.elasticOpen) ? props.elasticOpen : [])\n .filter(v => !CommonBase.isUndefined(v))\n .map(v => String(v)),\n ),\n);\n\n// colspan 兜底:NaN/负数/0/非数字归一为 1(Math.max 对 NaN 返回 NaN,:colspan 输出无效值靠浏览器兜底不直观,显式归一)\nconst optColspanCount = computed(() => {\n const n = Number(props.colspanCount);\n return CommonBase.isFinite(n) && n >= 1 ? Math.floor(n) : 1;\n});\n\nconst clsTable = computed(() => {\n const cls = {\n 'table-default': true,\n 'table-empty': CommonBase.isEmpty(props.list),\n };\n return cls;\n});\n\nconst styTable = computed(() => {\n const sty: Record<string, string> = {};\n if (!CommonBase.isNonEmptyString(props.fixedType)) {\n // 宽度值判空 + 哨兵过滤:空串/非字符串(运行时绕过 String 校验)不输出内联样式,浏览器静默忽略非法值会致预期列宽失效\n if (\n props.isUseScrollX &&\n CommonBase.isNonEmptyString(props.minWidth) &&\n props.minWidth !== 'none'\n ) {\n sty.minWidth = props.minWidth;\n }\n } else {\n if (CommonBase.isNonEmptyString(props.width) && props.width !== 'none') {\n sty.width = props.width;\n }\n }\n return sty;\n});\n\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n emit('onClickTr', e, info, inx);\n};\n\n// elasticInx = -1 哨兵值:主数据行悬停不携带展开行索引(展开行悬停才传行内索引)\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n emit('onHoverIn', inx, elasticInx);\n};\n\nconst onHoverOutTr = () => {\n emit('onHoverOut');\n};\n\nconst optFunGetTdValue = (value: unknown, opt: ColumnsInfo) => {\n if (CommonBase.isEmpty(value) || !opt) {\n return '';\n }\n if (CommonBase.isEmpty(opt.format)) {\n return value;\n }\n return CommonBase.getValueByFormat(value, opt.format ?? '', opt.formatExt);\n};\n\n// 展开数据按行 id 取列表(Record 契约:缺失 key 返回空数组)\nconst optGetElasticDataList = (id: string) => {\n const elasticData = (props.elasticData || {}) as Record<string, ListInfo[]>;\n return Object.prototype.hasOwnProperty.call(elasticData, id) ? elasticData[id] : [];\n};\n\n// 选中/加载中判定模板方法:与 class 判定共用,一处调整全局生效\n// 行对象判空前置:list 含 null 项时 info.id 解引用在判空工具求值前即崩溃,须先判 info 再取 id\nconst optIsTrSelected = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optSelectedSet.value.has(info.id.toString());\nconst optIsElasticLoading = (info: ListInfo) =>\n !CommonBase.isEmpty(info) &&\n !CommonBase.isEmpty(info.id) &&\n optElasticLoadingSet.value.has(info.id.toString());\n\nconst getWidth = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientWidth;\n};\n\nconst getHeight = () => {\n if (!refElTable.value) {\n return 0;\n }\n return refElTable.value.clientHeight;\n};\n\nconst setElasticWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (!parentEl) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const w = parentEl.clientWidth;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.width = `${w}px`;\n }\n};\n\nconst setElasticHeight = (id: string) => {\n if (!refElTable.value) {\n return;\n }\n const elElastic = refElTable.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null;\n if (elElastic) {\n const parentEl = elElastic.parentNode as HTMLElement | null;\n if (parentEl) {\n elElastic.style.height = '';\n parentEl.style.height = '';\n const h = `${elElastic.clientHeight}px`;\n elElastic.style.height = h;\n parentEl.style.height = h;\n }\n const cur = optElasticAbsoluteIds.value;\n if (!cur.has(id)) {\n optElasticAbsoluteIds.value = new Set(cur).add(id);\n }\n }\n};\n\n// 展开行收起时清理 absolute 标记:Set 只增不减会在同 id 重开时残留 elastic-container-absolute 类\n// (fixed 模式 + 非加载路径无 setElasticHeight 重算 → td 高度归 0 展开内容塌陷)\nconst removeElasticAbsolute = (id: string) => {\n if (optElasticAbsoluteIds.value.has(id)) {\n const next = new Set(optElasticAbsoluteIds.value);\n next.delete(id);\n optElasticAbsoluteIds.value = next;\n }\n};\n\n// 数据替换/切页强制全关时清空全部标记(旧行 id 作废,absolute 状态一并失效)\nconst clearElasticAbsolute = () => {\n if (optElasticAbsoluteIds.value.size > 0) {\n optElasticAbsoluteIds.value = new Set();\n }\n};\n\nconst setElasticLoadLeft = (scrollLeft: number) => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelectorAll('.panel-elastic-load');\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n for (let li = 0; li < el.length; li++) {\n (el[li] as HTMLElement).style.left = `${safeLeft}px`;\n }\n};\n\nconst setEmptyWidth = () => {\n if (!refElTable.value) {\n return;\n }\n const el = refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null;\n if (el) {\n const parentEl = refElTable.value.parentNode as HTMLElement | null;\n if (parentEl) {\n const w = parentEl.clientWidth;\n el.style.width = `${w}px`;\n }\n }\n};\n\nconst setEmptyLeft = (scrollLeft: number) => {\n const el = refElTable.value\n ? (refElTable.value.querySelector('.panel-table-empty') as HTMLElement | null)\n : null;\n if (el) {\n const safeLeft = CommonBase.isFinite(scrollLeft) ? Math.max(0, scrollLeft) : 0;\n el.style.left = `${safeLeft}px`;\n }\n};\n\nexport interface ClTableBodyExpose {\n getWidth: () => number;\n getHeight: () => number;\n setElasticWidth: () => void;\n setElasticHeight: (id: string) => void;\n removeElasticAbsolute: (id: string) => void;\n clearElasticAbsolute: () => void;\n setElasticLoadLeft: (scrollLeft: number) => void;\n setEmptyWidth: () => void;\n setEmptyLeft: (scrollLeft: number) => void;\n}\n\ndefineExpose({\n getWidth,\n getHeight,\n setElasticWidth,\n setElasticHeight,\n removeElasticAbsolute,\n clearElasticAbsolute,\n setElasticLoadLeft,\n setEmptyWidth,\n setEmptyLeft,\n});\n</script>\n","<template>\n <div\n :id=\"elId\"\n :class=\"clsParent\"\n >\n <div class=\"table-wrapper\">\n <template v-if=\"isHead\">\n <div\n :class=\"clsHeadWrapper\"\n :style=\"{ width: optFixedHead.width }\"\n ref=\"refElHeadWrapper\"\n >\n <div\n :class=\"clsHeadContainer\"\n ref=\"refElHeadContainer\"\n >\n <div\n class=\"table-head-main\"\n ref=\"refElHeadMain\"\n >\n <cl-table-head\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElHeadTable\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-head\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-left-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-left-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-head\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :width=\"optFixedColumn.totalWidth\"\n :columns=\"columns\"\n :isOrder=\"isOrder\"\n :orderSort=\"optOrderSort\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :isShowTotal=\"optIsShowTotal\"\n :totalInfo=\"totalData\"\n :isUseScrollX=\"optScrollXIsUse\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isShowCheckboxAll=\"optIsShowCheckboxAll\"\n :disabled=\"disabled\"\n :checkboxAllValue=\"optAllValue\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickAll=\"onSelectAll\"\n @onClickOrderBy=\"onClickOrderBy\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTh in optSlotsKeyTh\"\n :key=\"`${_keyIndex}-slots-right-th-${skTh}`\"\n v-slot:[skTh]=\"slotProps\"\n >\n <slot\n :name=\"skTh\"\n :data=\"slotProps.data\"\n />\n </template>\n <template\n v-for=\"skTotal in optSlotsKeyTotal\"\n :key=\"`${_keyIndex}-slots-right-total-${skTotal}`\"\n v-slot:[skTotal]=\"slotProps\"\n >\n <slot\n :name=\"skTotal\"\n :data=\"slotProps.data\"\n />\n </template>\n </cl-table-head>\n </div>\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optScrollYIsShow\"\n class=\"table-scroll-occupy-container\"\n >\n <div />\n <div\n v-if=\"optIsShowTotal\"\n class=\"table-scroll-occupy-total\"\n :style=\"{ height: optBase.totalHeight }\"\n />\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n :class=\"{ 'table-scroll-occupy-corner': optScrollX.isShow }\"\n />\n <template v-else></template>\n </div>\n <template v-else></template>\n <div\n v-if=\"isScrollX\"\n v-show=\"optScrollX.isShow\"\n class=\"table-fixed-column-scrollX\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n cornerType=\"right-top\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElHeadFixedScrollX\"\n />\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedHead.isShow && optBase.isRunLoading\"\n class=\"table-fixed-head-load\"\n />\n <template v-else></template>\n </div>\n <div\n v-if=\"optFixedHead.isShow\"\n :style=\"{ height: optFixedHead.height, width: optFixedHead.width }\"\n />\n <template v-else></template>\n </template>\n <template v-else></template>\n <div\n :class=\"clsBodyWrapper\"\n ref=\"refElBodyWrapper\"\n >\n <div\n class=\"table-body-container\"\n :style=\"styBodyContainer\"\n ref=\"refElBodyContainer\"\n >\n <div\n :class=\"{ 'table-body-main': true, 'table-body-empty': optNewList.length === 0 }\"\n :style=\"styBodyMain\"\n ref=\"refElBodyMain\"\n >\n <cl-table-body\n :minWidth=\"optScrollX.minWidth\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n ref=\"refElBodyTable\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n <div\n v-if=\"optFixedLeftIsUse && optFixedColumn.leftColumnLength > 0\"\n class=\"table-fixed-column-left\"\n >\n <div\n class=\"table-fixed-column-left-container\"\n :style=\"{ width: optFixedColumn.leftWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"left\"\n :fixedLeftIndex=\"fixedColumnLeftIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-left-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-left-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n <div\n v-if=\"optFixedRightIsUse && optFixedColumn.rightColumnLength > 0\"\n class=\"table-fixed-column-right\"\n >\n <div\n class=\"table-fixed-column-right-container\"\n :style=\"{ width: optFixedColumn.rightWidth }\"\n >\n <cl-table-body\n :width=\"optFixedColumn.totalWidth\"\n fixedType=\"right\"\n :fixedRightIndex=\"fixedColumnRightIndex\"\n :columns=\"columns\"\n :list=\"optNewList\"\n :disabled=\"disabled\"\n :isOrder=\"isOrder\"\n :selectValue=\"optCurrentPageSelectIds\"\n :keyIndex=\"_keyIndex\"\n :hoverIndex=\"optBase.hoverTrIndex\"\n :hoverElasticIndex=\"optBase.hoverTrElasticIndex\"\n :isUseScrollX=\"optScrollXIsUse\"\n :colspanCount=\"optBase.colspanCount\"\n :isRunLoading=\"optBase.isRunLoading\"\n :isShowRadio=\"optBase.isCheckedRadio\"\n :isShowCheckbox=\"optBase.isCheckedCheckbox\"\n :isElastic=\"isElastic\"\n :elasticOpen=\"optElastic.open\"\n :elasticLoading=\"optElastic.loading\"\n :elasticType=\"elasticType\"\n :elasticData=\"elasticData\"\n :trIntervalNum=\"trIntervalNum\"\n :isStriped=\"isStriped\"\n :emptyText=\"emptyText\"\n :isInlineWidth=\"isInlineWidth\"\n :widthClassPrefix=\"widthClassPrefix\"\n :widthMinClassPrefix=\"widthMinClassPrefix\"\n @onClickTr=\"onClickTr\"\n @onHoverIn=\"onHoverInTr\"\n @onHoverOut=\"onHoverOutTr\"\n >\n <template\n v-for=\"skTd in optSlotsKeyTd\"\n :key=\"`${_keyIndex}-slots-right-td-${skTd}`\"\n v-slot:[skTd]=\"slotProps\"\n >\n <slot\n :name=\"skTd\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n />\n </template>\n <template\n v-for=\"skTdElastic in optSlotsKeyTdElastic\"\n :key=\"`${_keyIndex}-slots-right-td-${skTdElastic}`\"\n v-slot:[skTdElastic]=\"slotProps\"\n >\n <slot\n :name=\"skTdElastic\"\n :data=\"slotProps.data\"\n :trIndex=\"slotProps.trIndex\"\n :trElasticInx=\"slotProps.trElasticInx\"\n />\n </template>\n </cl-table-body>\n </div>\n </div>\n <template v-else></template>\n </div>\n <template v-if=\"isScrollX && optNewList.length > 0 && optScrollX.isShow\">\n <div\n v-if=\"isScrollXBottom\"\n class=\"table-fixed-column-scrollX\"\n :style=\"{ bottom: optScrollYIsUse ? '-1px' : '1px' }\"\n >\n <cl-scroll-x-fence\n :isShowLeft=\"optFixedLeftIsUse\"\n :isShowRight=\"optFixedRightIsUse\"\n :leftWidth=\"optFixedColumn.leftWidth\"\n :centerWidth=\"optFixedColumn.centerWidth\"\n :rightWidth=\"optFixedColumn.rightWidth\"\n :isShowCorner=\"optScrollYIsShow\"\n :isShowCover=\"false\"\n cornerType=\"right-bottom\"\n @onScrollX=\"onFixedScrollX\"\n ref=\"refElBodyFixedScrollX\"\n />\n </div>\n <div\n v-else\n class=\"table-fixed-column-scrollX\"\n >\n <div :style=\"{ height: `${SCROLLBAR_HEIGHT}px` }\" />\n </div>\n </template>\n <template v-else></template>\n </div>\n <div\n v-if=\"isPaginate && optNewList.length > 0\"\n class=\"table-footer-wrapper\"\n >\n <div />\n <cl-paginate\n :currentPage=\"optPageInfo.pages\"\n :limitValue=\"optPageInfo.limit\"\n :limitData=\"paginateLimitData\"\n :isShowLimit=\"isPaginateLimit\"\n :totalCount=\"optTotalCount\"\n :disabled=\"disabled || optBase.isRunLoading\"\n @onChange=\"onChangePaginate\"\n />\n </div>\n <template v-else></template>\n </div>\n <div\n v-if=\"optBase.isRunLoading\"\n class=\"table-load\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div class=\"table-load-wrapper\">\n <div\n class=\"table-load-head\"\n :style=\"styLoadHead\"\n />\n <div :class=\"{ 'table-load-body': true, 'table-load-bg-gray': isLoading }\">\n <cl-load-ing :isLoadIng=\"isLoading\" size=\"xxl\" :theme=\"loadTheme\" :color=\"loadColor || undefined\" />\n </div>\n </div>\n </div>\n <template v-else></template>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n onMounted,\n onBeforeUnmount,\n onActivated,\n onDeactivated,\n nextTick,\n watch,\n computed,\n ref,\n reactive,\n toRaw,\n useSlots,\n} from 'vue';\nimport CommonBase from '../../Common/base';\nimport CommonElement from '../../Common/Element/index';\nimport { Resize as ResizeEvent } from '../../Common/Element/Event/index';\nimport ClTableHead from './Head.vue';\nimport ClTableBody from './Body.vue';\nimport ClLoadIng from '../../Element/Load/Ing.vue';\nimport ClPaginate from '../Paginate/Index.vue';\nimport type { PaginateLimitItem } from '../Paginate/Index.vue';\nimport ClScrollXFence from '../ScrollxFence/Index.vue';\nimport type { ColumnsInfo, ListInfo } from './InterfaceItem';\nimport './index.css';\n\n// 数据请求参数契约(onGetData/onChangeParams 载荷与 getParamInfo 返回值共用;空配置时字段缺失)\nexport interface TableEmitParam {\n pages?: number;\n limit?: number;\n offset?: number;\n orderIndex?: number;\n orderBy?: string;\n orderColumns?: string;\n}\n\n// 选中变化扩展信息(onChangeChecked 第三参)\nexport interface TableChangeCheckedExt {\n checkedIds: string[];\n unCheckedIds: string[];\n}\n\n// 内部状态容器:显式类型约束,字段名变更/类型漂移由编译器发现(原整体 any 静默放行)\ninterface TablePageData {\n dataJson: Record<string, any>;\n changeNewPaginate: { pages: number; limit: number };\n changeNewSort: { orderIndex: number | undefined; orderBy: string | undefined };\n sortLocalData: any[];\n scrollBody: { left: number };\n scrollHead: { left: number };\n resizeEvent: ResizeEvent | null;\n // setTimeout 返回类型按环境为 number(DOM)或 Timeout(Node),用 ReturnType 兼容两者\n timerBody: ReturnType<typeof setTimeout> | null;\n // keep-alive 取消未决请求标记:onDeactivated 清 timerBody 时置位,onActivated 补发数据\n pendingCanceled: boolean;\n}\n\ndefineOptions({ name: 'ClTable' });\n\nconst props = defineProps({\n id: String, // desc: 组件唯一标识\n className: String, // desc: 自定义CSS类名\n disabled: {\n type: Boolean,\n default: false, // desc: 是否禁用\n },\n columns: {\n type: Array as () => ColumnsInfo[],\n default: () => [], // desc: 列配置信息;含 null 项(非法输入)时降级渲染空单元格,仅运行时兜底\n },\n list: {\n type: Array,\n default: () => [], // desc: 数据列表\n },\n totalLength: Number, // desc: 数据总条数\n totalData: {\n type: Object,\n default: () => ({}), // desc: 总计数据\n },\n isServer: {\n type: Boolean,\n default: true, // desc: 是否为服务端模式\n },\n isParamTriggerServer: {\n type: Boolean,\n default: false, // desc: 本地数据是否触发服务端参数事件\n },\n isLoading: {\n type: Boolean,\n default: true, // desc: 加载中状态\n },\n loadTheme: {\n type: String,\n default: 'circleBubble', // desc: 加载动画主题,透传至 cl-load-ing | enum: rotaryLine, circleNotch, circleBubble, ballColor4, dotTyping, dotWave, dotBounce, dotPulse, dotOrbit, dotFlow, dotSlide, dotSlider, dotFold, dotSquare, barEqualizer, barWave, barPulse, barStretch, barMeter, barBounce, barRamp, ringRotate, ringDot, ringPulse, ringClip, ringFan, circleSpinner, dotRipple, dotRipple3, ringCross, squareTrace, squareTrace2, crossMove, snakePath, squareMirror, dotPulse5, diamondShuttle, barStream, newtonCradle, dotSpin, orbitSwap, typingBounce, ringGlow\n },\n loadColor: {\n type: String,\n default: '#1088f0', // desc: 加载动画颜色,透传至 cl-load-ing\n },\n isShowInitLoadIng: {\n type: Boolean,\n default: true, // desc: 是否显示初始加载动画(仅本地模式生效,服务端模式强制显示加载遮罩防误操作)\n },\n isPaginate: {\n type: Boolean,\n default: true, // desc: 是否启用分页\n },\n pageOffset: {\n type: Number,\n default: 0, // desc: 分页偏移量\n },\n isPaginateLimit: {\n type: Boolean,\n default: true, // desc: 是否启用每页条数选择\n },\n paginateLimit: {\n type: Number,\n default: 10, // desc: 每页条数\n },\n paginateLimitData: { type: Array as () => PaginateLimitItem[], default: () => [] }, // desc: 每页条数可选列表\n isOrder: {\n type: Boolean,\n default: false, // desc: 是否启用排序\n },\n orderSort: {\n type: Array,\n default: () => [], // desc: 排序配置\n },\n selectValue: {\n type: [String, Number],\n default: '', // desc: 选中值\n },\n checkedRowType: {\n type: String,\n default: 'none', // desc: 选中行类型 | enum: none, radio, checkbox\n validator: (value: string) => ['none', 'radio', 'checkbox'].indexOf(value) > -1,\n },\n isShowCheckboxAll: {\n type: Boolean,\n default: true, // desc: 是否显示全选\n },\n isScrollX: {\n type: Boolean,\n default: false, // desc: 是否启用横向滚动\n },\n isScrollXBottom: {\n type: Boolean,\n default: false, // desc: 是否启用底部横向滚动\n },\n isFixedHead: {\n type: Boolean,\n default: false, // desc: 是否固定表头\n },\n scrollY: {\n type: Number,\n default: -1, // desc: 纵向滚动高度\n },\n fixedColumnLeftIndex: {\n type: Number,\n default: -1, // desc: 左固定列索引\n },\n fixedColumnRightIndex: {\n type: Number,\n default: -1, // desc: 右固定列索引\n },\n isInlineWidth: {\n type: Boolean,\n default: false, // desc: 是否启用内联列宽兜底(false 时纯类控制,外部 CSS 可覆盖预览)\n },\n widthClassPrefix: {\n type: String,\n default: 'w-', // desc: 列宽类前缀\n },\n widthMinClassPrefix: {\n type: String,\n default: 'w-min-', // desc: 最小宽列类前缀\n },\n isClickRowLinkage: {\n type: Boolean,\n default: false, // desc: 点击行是否联动选中\n },\n isElastic: {\n type: Boolean,\n default: false, // desc: 是否启用展开行\n },\n isElasticLoad: {\n type: Boolean,\n default: true, // desc: 是否启用展开加载动画\n },\n rowClickKeyInvalid: {\n type: String,\n default: '.tr-click-invalid', // desc: 无效点击区域选择器\n },\n rowClickKeyElastic: {\n type: String,\n default: '.tr-click-elastic', // desc: 展开点击区域选择器\n },\n elasticIconCls: {\n type: Array,\n default: () => [], // desc: 展开图标类名列表\n },\n elasticType: {\n type: String,\n default: 'default', // desc: 展开类型 | enum: default, sameDataStructure\n validator: (value: string) => ['default', 'sameDataStructure'].indexOf(value) > -1,\n },\n elasticData: {\n type: Object,\n default: () => ({}), // desc: 展开数据\n },\n trIntervalNum: {\n type: Number,\n default: -1, // desc: 斑马纹间隔数\n },\n isStriped: {\n type: Boolean,\n default: false, // desc: 是否开启间隔色\n },\n emptyText: String, // desc: 空数据文案\n isHead: {\n type: Boolean,\n default: true, // desc: 是否显示表头\n },\n});\n\nconst emit = defineEmits({\n onGetData: (_param: TableEmitParam) => true, // desc: 获取数据事件\n onClickRow: (_info: ListInfo, _inx: number, _isRc?: boolean) => true, // desc: 点击行事件(isRc: 点击是否落在 th-rc 单元格)\n onClickElastic: (_id: string, _info: ListInfo, _trIndex: number, _isOpen: boolean, _el: any) =>\n true, // desc: 点击展开事件\n onChangeChecked: (_ids: string, _list: ListInfo[], _ext: TableChangeCheckedExt) => true, // desc: 选中变化事件\n onChangeParams: (_param: TableEmitParam) => true, // desc: 参数变化事件\n});\n\n// slots: th_{data} | td_{data} | total_{data} | td_elastic_{data}(动态,按 data 前缀转发)| tr_elastic_children(展开行内容,isElastic 时追加)\n\nconst slots = useSlots();\n\nconst _initOrderData = (orderSort: any[]): [number, string] | [] => {\n let data: [number, string] | [] = [];\n if (props.isOrder) {\n // orderSort 显式传 null 时 Array prop 校验放行(default 不生效),归一为空数组避免 .length 崩溃\n const orderSortInfo: any[] = CommonBase.isEmpty(orderSort) ? [] : orderSort;\n let initFirstSort: [number, string] = [0, 'desc'];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n for (let i = 0; i < columns.length; i += 1) {\n const columnInfo: any = columns[i];\n // columns 含 null 项(配置错误输入)时跳过,崩溃降级为忽略该列\n if (CommonBase.isEmpty(columnInfo)) {\n continue;\n }\n const sort =\n columnInfo.sort === undefined || columnInfo.sort === null ? true : columnInfo.sort === true;\n const visible = CommonBase.isBoolean(columnInfo.visible) ? columnInfo.visible : true;\n if (sort && visible) {\n initFirstSort = [i, 'desc'];\n break;\n }\n }\n if (orderSortInfo.length === 0) {\n data = initFirstSort;\n } else {\n const columnOrderInfo: any = columns[orderSortInfo[0]];\n if (!CommonBase.isEmpty(columnOrderInfo)) {\n const sort =\n columnOrderInfo.sort === undefined || columnOrderInfo.sort === null\n ? true\n : columnOrderInfo.sort === true;\n const visible = CommonBase.isBoolean(columnOrderInfo.visible)\n ? columnOrderInfo.visible\n : true;\n const orderIndex = Array.isArray(orderSortInfo) ? orderSortInfo[0] : undefined;\n const orderBy =\n Array.isArray(orderSortInfo) && (orderSortInfo[1] === 'asc' || orderSortInfo[1] === 'desc')\n ? orderSortInfo[1]\n : undefined;\n data =\n sort && visible && !CommonBase.isUndefined(orderIndex)\n ? ([orderIndex, orderBy ?? 'desc'] as [number, string])\n : initFirstSort;\n } else {\n data = initFirstSort;\n }\n }\n }\n return data;\n};\n\nconst _initPaginatePages = () => {\n let pages = 1;\n if (props.paginateLimit > 0 && props.pageOffset >= 0) {\n pages = Math.floor(props.pageOffset / props.paginateLimit) + 1;\n }\n return pages;\n};\n\nconst _initOrderSort = _initOrderData(props.orderSort);\n\nconst _pageData: TablePageData = {\n dataJson: CommonBase.getJsonByList(props.list),\n changeNewPaginate: {\n pages: _initPaginatePages(),\n limit: props.paginateLimit,\n },\n changeNewSort: {\n // isOrder=false 时 _initOrderSort 为空数组,字段实际为 undefined(类型层如实表达,原 as 断言掩盖)\n orderIndex: _initOrderSort[0],\n orderBy: _initOrderSort[1],\n },\n sortLocalData: [],\n scrollBody: {\n left: 0,\n },\n scrollHead: {\n left: 0,\n },\n resizeEvent: null,\n timerBody: null,\n pendingCanceled: false,\n};\n\nconst _pageObject: { observerBodyScrollY: MutationObserver | null } = {\n observerBodyScrollY: null,\n};\nconst SCROLLBAR_HEIGHT = 15;\nconst FIXED_HEAD_THRESHOLD = 30; // 固定表头吸附判定阈值\nconst SELECT_SCROLL_THRESHOLD = 180; // 选中行滚动定位判定阈值\nconst SELECT_SCROLL_OFFSET = 50; // 选中行滚动定位偏移\nconst LOCAL_LOAD_DELAY = 300; // 本地模式数据加载防抖时长\nconst _keyIndex = `table-${CommonBase.getRandom(5)}`;\nconst elId = props.id; // || `_elId_table-${CommonBase.getRandom(5)}`\n\nconst refElHeadWrapper = ref<HTMLDivElement | null>(null);\nconst refElHeadContainer = ref<HTMLDivElement | null>(null);\nconst refElHeadMain = ref<HTMLDivElement | null>(null);\nconst refElHeadTable = ref<InstanceType<typeof ClTableHead> | null>(null);\nconst refElHeadFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst refElBodyWrapper = ref<HTMLDivElement | null>(null);\nconst refElBodyContainer = ref<HTMLDivElement | null>(null);\nconst refElBodyMain = ref<HTMLDivElement | null>(null);\nconst refElBodyTable = ref<InstanceType<typeof ClTableBody> | null>(null);\nconst refElBodyFixedScrollX = ref<InstanceType<typeof ClScrollXFence> | null>(null);\n\nconst optBase = reactive({\n isRunLoading: false,\n isCheckedRadio: props.checkedRowType === 'radio',\n isCheckedCheckbox: props.checkedRowType === 'checkbox',\n colspanCount: 0,\n hoverTrIndex: -1,\n hoverTrElasticIndex: -1,\n totalHeight: '0',\n});\n\nconst optNewList = ref<ListInfo[]>([]);\nconst optPageInfo = reactive({\n pages: _pageData.changeNewPaginate.pages,\n limit: _pageData.changeNewPaginate.limit,\n});\nconst optOrderSort = ref<[number, string] | []>(_initOrderSort);\nconst optAllValue = ref<boolean>(false);\n\n// 取 selectValue 的 id 数组:String|Number 混合类型 + 显式传 undefined 时守卫,防止 .toString() 崩溃\nconst _getSelectValueIds = () => {\n const selectValue = props.selectValue;\n if (CommonBase.isNonEmptyString(selectValue)) {\n return CommonBase.split(selectValue);\n }\n if (CommonBase.isNumber(selectValue)) {\n return CommonBase.split(selectValue.toString());\n }\n return [];\n};\nconst optCurrentPageSelectIds = ref<string[]>(_getSelectValueIds());\n\nconst optElastic = reactive({\n open: [] as string[],\n loading: [] as string[],\n});\n\nconst optScrollX = reactive({\n isShow: false,\n minWidth: 'auto',\n posType: 'left',\n});\n\nconst optScrollYIsShow = ref<boolean>(false);\n\nconst optFixedColumn = reactive({\n totalWidth: '0',\n centerWidth: '0',\n leftColumnLength: 0,\n leftWidth: '0',\n rightColumnLength: 0,\n rightWidth: '0',\n});\n\nconst optFixedHead = reactive({\n isShow: false,\n width: 'auto',\n height: 'auto',\n});\n\nconst optLoadInfo = reactive({\n headHeight: 0,\n});\n\nlet _rafIdScrollX: number | null = null;\nlet _rafIdWinScroll: number | null = null;\nlet _scrollLeftCache = 0;\n\n// 动态插槽转发键集合:实时取自 slots 代理(父组件运行期增删插槽时响应式更新;原 setup 快照不感知增删,动态插槽静默不渲染)\nconst optSlotsKeyTh = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('th_') === 0);\n});\nconst optSlotsKeyTd = computed(() => {\n const names = Object.keys(slots).filter(\n (n: string) => n.indexOf('td_') === 0 && n.indexOf('td_elastic_') !== 0,\n );\n if (props.isElastic) {\n names.push('tr_elastic_children');\n }\n return names;\n});\nconst optSlotsKeyTotal = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('total_') === 0);\n});\nconst optSlotsKeyTdElastic = computed(() => {\n return Object.keys(slots).filter((n: string) => n.indexOf('td_elastic_') === 0);\n});\n\nconst optIsShowCheckboxAll = computed(() => {\n return props.isShowCheckboxAll && optNewList.value.length > 0;\n});\n\nconst optIsShowTotal = computed(() => {\n return !CommonBase.isEmpty(props.totalData) && optNewList.value.length > 0;\n});\n\nconst optTotalCount = computed(() => {\n if (props.isServer) {\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : 0;\n }\n // 本地模式:未显式传 totalLength 时自动取 list 长度兜底,避免分页总数显示 0\n return CommonBase.isFinite(props.totalLength) ? props.totalLength : props.list?.length || 0;\n});\n\nconst optScrollXIsUse = computed(() => {\n return props.isScrollX || props.isScrollXBottom;\n});\n\nconst optScrollYIsUse = computed(() => {\n return props.scrollY > 0;\n});\n\n// isHead=false 时无表头测量基准(headWrapper 不渲染,elTds 恒空),固定列宽度恒 0 渲染空白竖条,禁用固定列\nconst optFixedLeftIsUse = computed(() => {\n return props.isHead && props.fixedColumnLeftIndex > -1 && optScrollXIsUse.value;\n});\n\nconst optFixedRightIsUse = computed(() => {\n return (\n props.isHead &&\n props.fixedColumnRightIndex > -1 &&\n optScrollXIsUse.value &&\n props.fixedColumnRightIndex > props.fixedColumnLeftIndex + 1\n );\n});\n\nconst clsParent = computed(() => {\n const cls: any = {\n 'panel-table': true,\n 'table-disabled': props.disabled,\n };\n if (optBase.isRunLoading) {\n cls['table-loading'] = true;\n }\n if (CommonBase.osType().isMobile) {\n cls['table-mob'] = true;\n }\n return CommonBase.getJsonMerge(cls, CommonElement.getClassNameJson(props.className));\n});\n\nconst clsHeadWrapper = computed(() => {\n const cls: any = {\n 'table-head-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scroll-occupy-y': optScrollYIsShow.value,\n };\n if (optFixedHead.isShow) {\n cls['table-fixed-head'] = true;\n }\n return cls;\n});\n\nconst clsHeadContainer = computed(() => {\n const cls: any = {\n 'table-head-container': true,\n };\n if (props.isScrollX) {\n cls['table-scrollX'] = true;\n }\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst clsBodyWrapper = computed(() => {\n const cls: any = {\n 'table-body-wrapper': true,\n 'table-scrollY': optScrollYIsUse.value,\n 'table-scrollX': props.isScrollX,\n 'table-scrollX-bottom': optScrollX.isShow,\n };\n cls['table-scroll-borderT0'] = optScrollX.isShow && props.isScrollX;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n cls['table-fixed-column'] = true;\n if (optScrollX.isShow) {\n cls[`table-scrollX-${optScrollX.posType}`] = true;\n } else {\n cls['table-scrollX-none'] = true;\n }\n }\n return cls;\n});\n\nconst styBodyContainer = computed(() => {\n const sty: any = {};\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (optScrollYIsUse.value) {\n const maxH = optScrollX.isShow\n ? Math.max(0, props.scrollY - SCROLLBAR_HEIGHT)\n : props.scrollY;\n sty.maxHeight = `${maxH}px`;\n }\n }\n return sty;\n});\n\nconst styBodyMain = computed(() => {\n const sty: any = {};\n if (!(optFixedLeftIsUse.value || optFixedRightIsUse.value)) {\n if (optScrollYIsUse.value) {\n sty.maxHeight = `${props.scrollY}px`;\n }\n }\n return sty;\n});\n\nconst styLoadHead = computed(() => {\n const sty: any = {};\n if (optBase.isRunLoading) {\n sty.height = `${optLoadInfo.headHeight}px`;\n }\n return sty;\n});\n\nconst _emitGetData = (param: any) => {\n emit('onGetData', param);\n};\n\nconst _emitClickElastic = (id: string, info: any, trIndex: number, isOpen: boolean, el: any) => {\n emit('onClickElastic', id, info, trIndex, isOpen, el);\n};\n\n// isRc 第三参向后兼容:true 表示点击落在 .th-rc 单元格(直接操作复选框/单选框),false 表示行联动选中\nconst _emitClickRow = (info: any, inx: number, isRc = false) => {\n emit('onClickRow', info, inx, isRc);\n};\n\nconst _emitChangeChecked = (ids: string, list: any[], ext: any) => {\n emit('onChangeChecked', ids, list, ext);\n};\n\nconst _emitChangeParams = () => {\n const param = _getPaginateSort();\n emit('onChangeParams', param);\n};\n\nconst _runLoadStart = () => {\n nextTick(() => {\n if (refElHeadMain.value) {\n const elThead = refElHeadMain.value.querySelector('thead');\n if (elThead) {\n optLoadInfo.headHeight = elThead.offsetHeight;\n }\n }\n });\n optBase.isRunLoading = true;\n};\n\nconst _runLoadStop = () => {\n optBase.isRunLoading = false;\n};\n\nconst _analysisColumns = () => {\n let colspanCount = 0;\n let minWidth = 0;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n colspanCount = 1;\n if (refElHeadTable.value) {\n minWidth = refElHeadTable.value.getRcWidth();\n }\n }\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any) => {\n // 计数口径对齐渲染链:columns 含 null 项(配置错误输入)时 Body/Head 仍渲染空单元格占一列,\n // 此处同样 +1,避免展开行/空数据行 colspan 少覆盖一列(null 项无 width,宽度贡献为 0)\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n colspanCount += 1;\n if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.width)) {\n minWidth += Number(info.width) || 0;\n } else if (!CommonBase.isEmpty(info) && !CommonBase.isEmpty(info.widthMin)) {\n minWidth += Number(info.widthMin) || 0;\n }\n }\n });\n const totalPadding = refElHeadTable.value ? refElHeadTable.value.getPaddingLr() : 0;\n minWidth += totalPadding;\n\n optBase.colspanCount = colspanCount;\n if (optScrollXIsUse.value) {\n optScrollX.minWidth = minWidth > 0 ? `${minWidth}px` : 'auto';\n }\n};\n\nconst _analysisFixedColumns = () => {\n return new Promise<void>((resolve, reject) => {\n nextTick(() => {\n try {\n // 卸载竞态兜底:已排队的 nextTick 无法取消,ref 被置 null 时直接 resolve\n if (!refElBodyTable.value) {\n resolve();\n return;\n }\n const totalWidth = refElBodyTable.value.getWidth();\n optFixedColumn.totalWidth = `${totalWidth}px`;\n\n let centerWidth = totalWidth;\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n const leftColumn: any = [];\n const rightColumn: any = [];\n const columns = CommonBase.isEmpty(props.columns) ? [] : props.columns;\n columns.forEach((info: any, i: number) => {\n // 口径对齐渲染链:null 项同样计入固定列(渲染链对 null 项渲染空 th/td 占位),\n // 保证 leftColumn.length 与 elTds(真实 DOM 全量 th)索引对齐,固定列宽度测量不错位\n const isShow = CommonBase.isBoolean(info?.visible) ? info.visible : true;\n if (isShow) {\n if (optFixedLeftIsUse.value) {\n if (i <= props.fixedColumnLeftIndex) {\n leftColumn.push(info);\n }\n }\n if (optFixedRightIsUse.value) {\n if (i >= props.fixedColumnRightIndex) {\n rightColumn.push(info);\n }\n }\n }\n });\n\n const isRc = optBase.isCheckedRadio || optBase.isCheckedCheckbox;\n const elTds = refElHeadTable.value ? refElHeadTable.value.getElTh() : [];\n const totalLen = elTds.length;\n\n let leftColspanCount = leftColumn.length;\n const rightColspanCount = rightColumn.length;\n let leftIndexMax = leftColspanCount - 1;\n const rightIndexMin = totalLen - rightColspanCount;\n if (isRc) {\n leftColspanCount += 1;\n leftIndexMax += 1;\n }\n let leftWidth = 0;\n let rightWidth = 0;\n for (let fi = 0; fi < totalLen; fi++) {\n const elTd = elTds[fi];\n if (!elTd) {\n continue;\n }\n const tempW = elTd.clientWidth;\n if (fi <= leftIndexMax) {\n leftWidth += tempW;\n }\n if (fi >= rightIndexMin) {\n rightWidth += tempW;\n }\n }\n\n if (optFixedLeftIsUse.value) {\n optFixedColumn.leftColumnLength = leftColumn.length;\n optFixedColumn.leftWidth = `${leftWidth}px`;\n centerWidth -= leftWidth;\n }\n if (optFixedRightIsUse.value) {\n optFixedColumn.rightColumnLength = rightColumn.length;\n optFixedColumn.rightWidth = `${rightWidth}px`;\n centerWidth -= rightWidth;\n }\n }\n centerWidth = Math.max(0, centerWidth);\n optFixedColumn.centerWidth = `${centerWidth}px`;\n nextTick(() => {\n resolve();\n });\n } catch (err) {\n reject(err);\n }\n });\n });\n};\n\nconst _setElasticWidth = () => {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticWidth();\n }\n });\n};\n\nconst _setElasticHeight = (id: string) => {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyTable.value) {\n refElBodyTable.value.setElasticHeight(id);\n }\n }\n};\n\nconst _runElasticLoadStart = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n if (arr.indexOf(id) === -1) {\n arr.push(id);\n optElastic.loading = arr;\n }\n }\n};\n\nconst _runElasticLoadStop = (id: string) => {\n if (props.isElasticLoad) {\n const arr = CommonBase.getArrClone(optElastic.loading);\n const inx = arr.indexOf(id);\n if (inx > -1) {\n arr.splice(inx, 1);\n optElastic.loading = arr;\n nextTick(() => {\n _setElasticHeight(id);\n });\n }\n }\n};\n\nconst _setSelectElasticIds = (info: any, trIndex: number, elElastic?: any, isEmit?: boolean) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中/展开链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n const arr = CommonBase.getArrClone(optElastic.open);\n const inx = arr.indexOf(id);\n const isOpen = inx === -1;\n if (isOpen) {\n arr.push(id);\n _runElasticLoadStart(id);\n } else {\n arr.splice(inx, 1);\n _runElasticLoadStop(id);\n // 收起时同步清理 Body 侧 absolute 标记:Set 只增不减会在同 id 重开时残留 absolute 类导致塌陷\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.removeElasticAbsolute(id);\n }\n }\n _initElasticOneClass(elElastic, isOpen);\n const isEmitUse = CommonBase.isBoolean(isEmit) ? isEmit : true;\n optElastic.open = arr;\n if (isEmitUse) {\n _emitClickElastic(id, info, trIndex, isOpen, elElastic);\n }\n _setElasticWidth();\n};\n\nconst _initElasticAllData = () => {\n const newList: any[] = [];\n // 外部显式传 null 时 prop default 不生效,先判空兜底(null.length 会崩溃且阻断数据更新链)\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n const list: any[] = optNewList.value;\n const arrOpenId: any[] = optElastic.open;\n list.forEach((info: any) => {\n // null 行守卫:list 可含 null 项(渲染层已承认),getJsonClone(null) 返回 null 后解引用崩溃\n if (!info) {\n newList.push(info);\n return;\n }\n const newInfo = CommonBase.getJsonClone(info);\n if (!CommonBase.isEmpty(newInfo.id)) {\n const id = newInfo.id.toString();\n newInfo._elasticIconCls =\n arrOpenId.indexOf(id) > -1 ? elasticIconCls[1] : elasticIconCls[0];\n }\n newList.push(newInfo);\n });\n }\n if (newList.length > 0) {\n optNewList.value = newList;\n }\n};\n\nconst _initElasticOneClass = (elElastic?: any, isOpen = false) => {\n if (elElastic) {\n const addCls = [];\n const removeCls = ['elastic-expand', 'elastic-retract'];\n isOpen ? addCls.push('elastic-expand') : addCls.push('elastic-retract');\n const elasticIconCls: any[] = CommonBase.isEmpty(props.elasticIconCls)\n ? []\n : (props.elasticIconCls as any[]);\n if (elasticIconCls.length === 2) {\n removeCls.push(elasticIconCls[0]);\n removeCls.push(elasticIconCls[1]);\n isOpen ? addCls.push(elasticIconCls[1]) : addCls.push(elasticIconCls[0]);\n }\n let newCls = CommonElement.getRemoveClass(elElastic.className, removeCls.join(' '));\n newCls = CommonElement.getAddClass(newCls, addCls);\n elElastic.className = newCls;\n }\n};\n\nconst _getCurrentPageAllUse = () => {\n const allIds: string[] = [];\n optNewList.value.forEach((info: any) => {\n // null 行守卫:getListClone 原样保留 null 行(渲染层已防崩溃),全选 id 收集同样跳过 null 行\n if (CommonBase.isEmpty(info)) {\n return;\n }\n const b = CommonBase.isBoolean(info.isDisabled) ? info.isDisabled : false;\n if (!b && !CommonBase.isEmpty(info.id)) {\n allIds.push(info.id.toString());\n }\n });\n return allIds;\n};\n\nconst _getCurrentSelectUse = (selectIds: any = null) => {\n // isUndefined 不挡 null(签名默认 null):null 视为未传参;空数组是合法输入(表示清空)不可用 isEmpty 拦截\n const sIds =\n CommonBase.isUndefined(selectIds) || selectIds === null\n ? optCurrentPageSelectIds.value\n : (selectIds as string[]);\n const useIds: string[] = [];\n if (!Array.isArray(sIds)) {\n return [];\n }\n if (sIds.length > 0) {\n const allIds = _getCurrentPageAllUse();\n sIds.forEach((sId: string) => {\n if (CommonBase.isExistValue(allIds, sId)) {\n useIds.push(sId);\n }\n });\n }\n // 单选模式收敛为首个有效 id:radio 语义下多值无意义,selectValue 传入多 id 时丢弃首个之外的\n if (optBase.isCheckedRadio && useIds.length > 1) {\n return [useIds[0]];\n }\n return useIds;\n};\n\nconst _setCheckboxAll = () => {\n if (optBase.isCheckedCheckbox) {\n const allIds = _getCurrentPageAllUse();\n const checkedIds: string[] = _getCurrentSelectUse();\n optAllValue.value = checkedIds.length > 0 && checkedIds.length === allIds.length;\n }\n};\n\nconst _getSelectDataItem = () => {\n const list: any[] = [];\n const checkedIds: string[] = _getCurrentSelectUse();\n const unCheckedIds: string[] = [];\n const allIds = _getCurrentPageAllUse();\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(checkedIds, aId)) {\n unCheckedIds.push(aId);\n }\n });\n\n if (optBase.isCheckedCheckbox) {\n checkedIds.forEach((id: any) => {\n const data = _pageData.dataJson[id.toString()];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n });\n } else if (optBase.isCheckedRadio) {\n if (checkedIds.length > 0) {\n const data = _pageData.dataJson[checkedIds[0]];\n if (!CommonBase.isUndefined(data)) {\n list.push(data);\n }\n }\n }\n return { checkedIds, unCheckedIds, checkedData: list };\n};\n\nconst _emitChangeCheckedBefore = () => {\n const selectDataItem = _getSelectDataItem();\n _emitChangeChecked(selectDataItem.checkedIds.join(','), selectDataItem.checkedData, {\n checkedIds: selectDataItem.checkedIds,\n unCheckedIds: selectDataItem.unCheckedIds,\n });\n};\n\nconst _setSelectRc = (info: any) => {\n // null 行守卫:list 含 null 行时 info 为 null,info.id 解引用崩溃(渲染层已防,选中链同样拦截)\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const newId = info.id.toString();\n const oldSelectValue = optCurrentPageSelectIds.value;\n let newSelectValue: string[] = [];\n if (optBase.isCheckedCheckbox) {\n const isExist = CommonBase.isExistValue(oldSelectValue, newId);\n oldSelectValue.forEach((id: string) => {\n if (id !== newId) {\n newSelectValue.push(id);\n }\n });\n if (!isExist) {\n newSelectValue.push(newId);\n }\n optCurrentPageSelectIds.value = newSelectValue;\n _setCheckboxAll();\n _emitChangeCheckedBefore();\n } else {\n if (!(oldSelectValue.length > 0 && oldSelectValue[0] === newId)) {\n newSelectValue = [newId];\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n }\n }\n};\n\nconst _calculationScrollX = () => {\n if (optScrollXIsUse.value && refElBodyMain.value && refElBodyTable.value) {\n const pW = refElBodyMain.value.clientWidth;\n const tW = refElBodyTable.value.getWidth();\n optScrollX.isShow = tW > pW;\n }\n};\n\nconst _calculationScrollY = () => {\n if (optScrollYIsUse.value && refElBodyTable.value) {\n const bodyHeight = refElBodyTable.value.getHeight();\n let isY = bodyHeight > props.scrollY;\n if (!isY) {\n if (optFixedLeftIsUse.value || optFixedRightIsUse.value) {\n if (refElBodyContainer.value) {\n isY = bodyHeight > refElBodyContainer.value.clientHeight;\n }\n } else {\n if (refElBodyMain.value && refElBodyMain.value.offsetHeight >= props.scrollY) {\n isY = bodyHeight > refElBodyMain.value.clientHeight;\n }\n }\n }\n if (isY && optIsShowTotal.value) {\n if (refElHeadTable.value) {\n const h = refElHeadTable.value.getTotalHeight() - (CommonBase.osType().isMobile ? 2 : 0);\n optBase.totalHeight = `${h}px`;\n }\n }\n optScrollYIsShow.value = isY;\n }\n};\n\nconst _calculationScrollFixedColumn = () => {\n if (\n (optFixedLeftIsUse.value || optFixedRightIsUse.value) &&\n refElBodyMain.value &&\n refElBodyTable.value\n ) {\n let scrollLeft = refElBodyMain.value.scrollLeft;\n const pWidth = refElBodyMain.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n let posType = 'left';\n if (scrollLeft > 0) {\n const tempSum = pWidth + scrollLeft;\n if (tempSum >= cWidth) {\n posType = 'right';\n } else {\n posType = 'center';\n }\n }\n optScrollX.posType = posType;\n }\n};\n\nconst _calculationScrollRelation = () => {\n if (!refElBodyWrapper.value || !refElBodyTable.value) {\n return;\n }\n let scrollLeft = refElHeadMain.value ? refElHeadMain.value.scrollLeft : 0;\n const pWidth = refElBodyWrapper.value.clientWidth;\n const cWidth = refElBodyTable.value.getWidth();\n\n if (pWidth + scrollLeft > cWidth) {\n scrollLeft = 0;\n }\n if (optElastic.loading.length > 0) {\n refElBodyTable.value.setElasticLoadLeft(scrollLeft);\n }\n if (optNewList.value.length === 0) {\n refElBodyTable.value.setEmptyLeft(scrollLeft);\n }\n};\n\n// rAF 节流:滚动事件高频触发,同步 head/固定列与两轮布局计算合并到下一帧执行一次。\n// 每次调用先更新 cache(最后触发源胜),回调不再依赖首个事件对象——同帧多滚动源(head 滚动条 + body 惯性)时不会用旧源值覆盖回跳\nconst _onScrollX = (e: Event) => {\n _scrollLeftCache = (e.target as HTMLElement).scrollLeft;\n if (_rafIdScrollX !== null) {\n return;\n }\n _rafIdScrollX = requestAnimationFrame(() => {\n _rafIdScrollX = null;\n const scrollLeft = _scrollLeftCache;\n\n if (refElHeadMain.value) {\n refElHeadMain.value.scrollLeft = scrollLeft;\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.scrollLeft = scrollLeft;\n }\n\n if (refElHeadFixedScrollX.value) {\n refElHeadFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n if (refElBodyFixedScrollX.value) {\n refElBodyFixedScrollX.value.setScrollLeft(scrollLeft);\n }\n\n _calculationScrollFixedColumn();\n _calculationScrollRelation();\n });\n};\n\n// head 滚动监听(与 body 侧 _onScrollBody 对称的变化过滤 + clamp 回跳防护):\n// head 滚动范围随滚动条占位(occupy 类)切换,程序赋值被浏览器 clamp 到上限时下一帧派发 scroll 事件,\n// 不加过滤时该 clamp 值覆盖 cache 把 body 拉回 head 上限(用户无法把 body 滚过 head 的滚动范围)\nconst _onScrollHead = (e: Event) => {\n const el = e.target as HTMLElement;\n const left = el.scrollLeft;\n const maxLeft = el.scrollWidth - el.clientWidth;\n if (maxLeft - left < 1 && refElBodyMain.value && refElBodyMain.value.scrollLeft > left) {\n return;\n }\n if (left !== _pageData.scrollHead.left) {\n _onScrollX(e);\n }\n _pageData.scrollHead.left = left;\n};\n\nconst _onScrollBody = (e: Event) => {\n const left = (e.target as HTMLElement).scrollLeft;\n if (left !== _pageData.scrollBody.left) {\n _onScrollX(e);\n }\n _pageData.scrollBody.left = left;\n};\n\nconst _calculationFixedHeadInfo = () => {\n if (props.isFixedHead && refElHeadWrapper.value && !optBase.isRunLoading) {\n let isShowFixed = false;\n let width = 'auto';\n let height = 'auto';\n const pos =\n refElHeadWrapper.value && refElHeadWrapper.value.parentNode\n ? CommonElement.getPositionView(refElHeadWrapper.value.parentNode)\n : null;\n if (pos && pos.top < 0 && refElBodyWrapper.value && refElHeadContainer.value && refElHeadTable.value) {\n const bodyH = refElBodyWrapper.value.clientHeight;\n if (pos.top > (bodyH - FIXED_HEAD_THRESHOLD) * -1) {\n isShowFixed = true;\n const w = refElBodyWrapper.value.offsetWidth;\n const h =\n optScrollX.isShow && props.isScrollX\n ? refElHeadContainer.value.offsetHeight\n : refElHeadTable.value.getOffsetHeight();\n width = `${w}px`;\n height = `${h}px`;\n }\n }\n optFixedHead.isShow = isShowFixed;\n optFixedHead.width = width;\n optFixedHead.height = height;\n }\n};\n\nconst _setEmptyWidth = () => {\n if (optNewList.value.length === 0) {\n nextTick(() => {\n if (refElBodyTable.value) {\n refElBodyTable.value.setEmptyWidth();\n }\n });\n }\n};\n\nconst _getPaginateSort = (): TableEmitParam => {\n const param: TableEmitParam = {};\n if (props.isPaginate) {\n const { pages, limit } = _pageData.changeNewPaginate;\n param.pages = pages;\n param.limit = limit;\n // isPaginate 开启时 pages/limit 必有初值(1/limit),as 收窄消除 undefined 分支\n param.offset = ((param.pages as number) - 1) * (param.limit as number);\n }\n if (props.isOrder) {\n const { orderIndex, orderBy } = _pageData.changeNewSort;\n param.orderIndex = orderIndex;\n param.orderBy = orderBy;\n const orderColumn = (props.columns as any[])[orderIndex as number];\n if (!CommonBase.isUndefined(orderColumn)) {\n param.orderColumns = orderColumn.data;\n }\n }\n return param;\n};\n\nconst _initScrollSelect = () => {\n if (props.scrollY > 0) {\n nextTick(() => {\n if (!refElBodyMain.value) {\n return;\n }\n const elSelected = refElBodyMain.value.querySelectorAll('.tr-selected');\n refElBodyMain.value.scrollTop =\n elSelected && elSelected.length > 0\n ? (elSelected[0] as HTMLElement).offsetTop > SELECT_SCROLL_THRESHOLD\n ? (elSelected[0] as HTMLElement).offsetTop - SELECT_SCROLL_OFFSET\n : 0\n : 0;\n });\n }\n};\n\nconst _setNewDataAfter = (opt: any = {}) => {\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n _initScrollSelect();\n }\n\n if (props.isElastic) {\n const isElasticCloseAll = CommonBase.isBoolean(opt.isElasticCloseAll)\n ? opt.isElasticCloseAll\n : true;\n if (isElasticCloseAll) {\n optElastic.open = [];\n // 全关时清空 Body 侧 absolute 标记(旧行 id 作废,残留标记在 id 复用场景会命中)\n if ((optFixedLeftIsUse.value || optFixedRightIsUse.value) && refElBodyTable.value) {\n refElBodyTable.value.clearElasticAbsolute();\n }\n }\n optElastic.loading = [];\n _initElasticAllData();\n }\n // 数据替换后重置悬停高亮:hover 跟随行索引,新数据同索引行会残留旧高亮\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n nextTick(() => {\n if (props.isPaginate) {\n optPageInfo.pages = _pageData.changeNewPaginate.pages;\n optPageInfo.limit = _pageData.changeNewPaginate.limit;\n }\n if (props.isOrder) {\n optOrderSort.value = _initOrderData([\n _pageData.changeNewSort.orderIndex,\n _pageData.changeNewSort.orderBy,\n ]);\n }\n _runLoadStop();\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setEmptyWidth();\n _calculationFixedHeadInfo();\n });\n });\n};\n\nconst _getNewDataByLocal = (param: any, isInitSort: boolean) => {\n const list = CommonBase.isEmpty(props.list) ? [] : props.list;\n let newSortData: any[] = [];\n if (isInitSort) {\n if (props.isOrder) {\n const jsonData: any = {};\n const sortKey: any[] = [];\n let sortFormat = 'string';\n if (!CommonBase.isUndefined(param.orderIndex)) {\n const orderColumns = param.orderColumns;\n const columnsInfo = (props.columns as any[])[param.orderIndex];\n if (!CommonBase.isUndefined(columnsInfo)) {\n if (CommonBase.isEmpty(columnsInfo.sortType)) {\n switch (columnsInfo.format) {\n case 'int':\n case 'float2':\n case 'float3':\n sortFormat = 'number';\n break;\n case 'date':\n case 'dateTime':\n case 'time':\n sortFormat = 'date';\n break;\n default:\n sortFormat = 'string';\n }\n } else {\n sortFormat = columnsInfo.sortType;\n }\n }\n list.forEach((info: any) => {\n if (!info) {\n return;\n }\n let temp = info[orderColumns];\n temp = CommonBase.isUndefined(temp) || temp === null ? '' : temp;\n const tempStr = temp.toString();\n if (!CommonBase.isExistJsonKey(jsonData, tempStr)) {\n jsonData[tempStr] = [];\n sortKey.push(temp);\n }\n jsonData[tempStr].push(CommonBase.getJsonClone(info));\n });\n }\n if (sortKey.length > 0) {\n const newSortKey: any[] =\n param.orderBy === 'desc'\n ? CommonBase.getArrDesc(sortKey, sortFormat)\n : CommonBase.getArrAsc(sortKey, sortFormat);\n newSortKey.forEach((k: any) => {\n newSortData.push(...jsonData[k.toString()]);\n });\n }\n } else {\n newSortData = CommonBase.getListClone(props.list);\n }\n _pageData.sortLocalData = newSortData;\n } else {\n newSortData = _pageData.sortLocalData;\n }\n if (props.isPaginate) {\n const newData = [];\n const len = newSortData.length;\n const s = param.offset;\n let e = param.offset + param.limit;\n e = len < e ? len : e;\n if (len) {\n if (len >= s && len > 0) {\n for (let i = s; i < e; i += 1) {\n newData.push(CommonBase.getJsonClone(newSortData[i]));\n }\n }\n }\n return newData;\n } else {\n return newSortData;\n }\n};\n\nconst _getNewDataBefore = (opt: any = {}) => {\n const param = _getPaginateSort();\n optCurrentPageSelectIds.value = [];\n optAllValue.value = false;\n _runLoadStart();\n if (props.isServer) {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n _emitGetData(param);\n }, LOCAL_LOAD_DELAY);\n } else {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n }\n _pageData.timerBody = setTimeout(() => {\n _pageData.timerBody = null;\n const isInitSortData = CommonBase.isBoolean(opt.isChangePage) ? !opt.isChangePage : true;\n optNewList.value = _getNewDataByLocal(param, isInitSortData);\n _setNewDataAfter();\n }, LOCAL_LOAD_DELAY);\n }\n};\n\nconst _listenerTableScrollX = () => {\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.addEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.addEventListener('scroll', _onScrollBody);\n }\n }\n};\n\nconst _listenerTableScrollY = () => {\n if (optScrollYIsUse.value) {\n const win: any = window;\n const MutationObserver: any =\n win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver;\n if (!MutationObserver) {\n return;\n }\n _pageObject.observerBodyScrollY = new MutationObserver(() => {\n _calculationScrollY();\n });\n const observer = _pageObject.observerBodyScrollY;\n if (refElBodyTable.value && refElBodyTable.value.$el && observer) {\n observer.observe(refElBodyTable.value.$el, {\n childList: true,\n subtree: true,\n });\n }\n }\n};\n\nconst _onWinResize = () => {\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n _setElasticWidth();\n _setEmptyWidth();\n _calculationScrollRelation();\n nextTick(() => {\n _calculationFixedHeadInfo();\n });\n};\n\nconst _onWinScroll = () => {\n if (_rafIdWinScroll !== null) {\n return;\n }\n _rafIdWinScroll = requestAnimationFrame(() => {\n _rafIdWinScroll = null;\n _calculationFixedHeadInfo();\n });\n};\n\nconst _initMain = () => {\n _analysisColumns();\n nextTick(() => {\n if (props.isServer) {\n _getNewDataBefore();\n } else {\n if (!CommonBase.isEmpty(props.list)) {\n _getNewDataBefore();\n if (!props.isShowInitLoadIng) {\n optBase.isRunLoading = false;\n }\n } else {\n if (props.isShowInitLoadIng) {\n _runLoadStart();\n } else {\n nextTick(() => {\n _setEmptyWidth();\n });\n }\n }\n }\n });\n};\n\nonMounted(() => {\n nextTick(() => {\n _initMain();\n _listenerTableScrollX();\n _listenerTableScrollY();\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true, // 拖拽窗口高频触发 resize,DelayFun 默认 200ms 节流(isDelay 默认即 true,显式标注语义)\n callback: () => {\n _onWinResize();\n },\n });\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n });\n});\n\nonActivated(() => {\n if (props.isFixedHead) {\n window.addEventListener('scroll', _onWinScroll);\n }\n // 与 scroll 同源处理:deactivated 时已销毁,激活后重建 resize 监听,防止缓存期间持续执行布局计算\n if (!_pageData.resizeEvent) {\n _pageData.resizeEvent = new ResizeEvent({\n isDelay: true,\n callback: () => {\n _onWinResize();\n },\n });\n }\n // 缓存期间窗口尺寸变化已丢失监听,激活后立即补一次布局重算(固定列宽/滚动量判定停留在缓存前状态,否则持续错误到下次 resize)\n _onWinResize();\n // deactivated 时取消了未决加载请求 → 激活后补发数据(keep-alive 切走切回场景,数据不停滞)\n if (_pageData.pendingCanceled) {\n _pageData.pendingCanceled = false;\n _getNewDataBefore();\n }\n});\n\nonDeactivated(() => {\n window.removeEventListener('scroll', _onWinScroll);\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n // 取消未决加载后同步复位 loading:否则 isRunLoading 残留 true,\n // 遮罩常驻 + onChangePaginate/refresh/onClickOrderBy 的守卫把交互全部吞掉(keep-alive 缓存期)\n optBase.isRunLoading = false;\n // 标记未决请求被取消:onActivated 时补发数据(否则 keep-alive 切回后数据停留旧状态,\n // 与 onBeforeUnmount→onMounted 经 _initMain 重拉的路径不对称——Index R4 回归发现)\n _pageData.pendingCanceled = true;\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n _pageData.resizeEvent = null;\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n});\n\nonBeforeUnmount(() => {\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n if (_pageObject.observerBodyScrollY) {\n _pageObject.observerBodyScrollY.disconnect();\n _pageObject.observerBodyScrollY.takeRecords();\n _pageObject.observerBodyScrollY = null;\n }\n if (optScrollXIsUse.value) {\n if (refElHeadMain.value) {\n refElHeadMain.value.removeEventListener('scroll', _onScrollHead);\n }\n if (refElBodyMain.value) {\n refElBodyMain.value.removeEventListener('scroll', _onScrollBody);\n }\n }\n if (_pageData.resizeEvent) {\n _pageData.resizeEvent.destroy();\n }\n if (_rafIdScrollX !== null) {\n cancelAnimationFrame(_rafIdScrollX);\n _rafIdScrollX = null;\n }\n if (_rafIdWinScroll !== null) {\n cancelAnimationFrame(_rafIdWinScroll);\n _rafIdWinScroll = null;\n }\n window.removeEventListener('scroll', _onWinScroll);\n});\n\nwatch(\n () => props.list,\n (newValue: any[], oldValue: any[]) => {\n // 外部传 null 兜底空数组(Array prop 校验放行 null,getJsonByList/遍历会崩溃)\n const safeList: any[] = CommonBase.isEmpty(newValue) ? [] : newValue;\n if (_pageData.timerBody) {\n clearTimeout(_pageData.timerBody);\n _pageData.timerBody = null;\n }\n _pageData.dataJson = CommonBase.getJsonByList(safeList);\n\n if (props.isServer) {\n // 克隆后赋值:与本地模式一致,防止子组件原地修改行对象污染外部传入的 props.list\n optNewList.value = CommonBase.getListClone(safeList) as ListInfo[];\n } else {\n if (props.isParamTriggerServer) {\n optNewList.value = CommonBase.getListClone(safeList, true);\n } else {\n _pageData.changeNewPaginate.pages = 1;\n const paramLocal = _getPaginateSort();\n optNewList.value = _getNewDataByLocal(paramLocal, true) as ListInfo[];\n }\n }\n const opt: any = {};\n if (props.isElastic) {\n // 原地 mutation 时 newValue 与 oldValue 为同一批对象引用,逐项比较 id 恒相等;\n // 改为 id 集合 diff:以「内容是否变化」判断是否为数据更新(引用变化时 isUpd 为 true,不走关闭逻辑)\n let isUpd = false;\n if (oldValue) {\n if (safeList.length === oldValue.length) {\n // list 中含 null 行时 null.id 会中断回调,用可选链兜底(null 行无 id 可比较,不视为更新)\n const oldIdSet = new Set(oldValue.map((item: any) => item?.id));\n isUpd = safeList.some((info: any) => info && !oldIdSet.has(info.id));\n } else {\n // 长度变化(新增/删除行)也视为数据更新,被删行的展开 id 不再残留\n isUpd = true;\n }\n }\n if (!isUpd) {\n opt.isElasticCloseAll = false;\n }\n }\n _setNewDataAfter(opt);\n },\n { deep: true },\n);\n\nwatch(\n () => props.columns,\n () => {\n nextTick(() => {\n _analysisColumns();\n nextTick(() => {\n _calculationScrollY();\n _calculationScrollX();\n _analysisFixedColumns()\n .then(() => {\n _calculationScrollFixedColumn();\n })\n .catch((err: any) => { console.warn('表格固定列分析失败', err); });\n });\n });\n },\n { deep: true },\n);\n\nwatch(\n () => props.selectValue,\n () => {\n const arrSelectIds = _getSelectValueIds();\n optCurrentPageSelectIds.value = _getCurrentSelectUse(arrSelectIds);\n _setCheckboxAll();\n },\n);\n\nwatch(\n () => props.orderSort,\n (newValue: unknown[], _oldValue: unknown[]) => {\n if (newValue && newValue.length >= 2) {\n if (\n !(\n newValue[0] === _pageData.changeNewSort.orderIndex &&\n newValue[1] === _pageData.changeNewSort.orderBy\n )\n ) {\n const newOrderSort = _initOrderData(props.orderSort);\n // 与 onClickOrderBy 一致:排序变更从第 1 页开始,避免停留在旧页码切片\n _pageData.changeNewPaginate.pages = 1;\n // 页码 UI 立即同步:服务端模式下 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移\n optPageInfo.pages = 1;\n _pageData.changeNewSort = {\n orderIndex: newOrderSort[0],\n orderBy: newOrderSort[1],\n };\n optOrderSort.value = newOrderSort;\n // 非 isParamTriggerServer 模式:外部改 props 排序需本地重算数据(与 onClickOrderBy 分支一致)\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n }\n },\n { deep: true },\n);\n\nwatch(\n [() => props.pageOffset, () => props.paginateLimit],\n ([_newOffset, newLimit], [_oldOffset, _oldLimit]) => {\n const pages = _initPaginatePages();\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = newLimit;\n optPageInfo.pages = pages;\n optPageInfo.limit = newLimit;\n // 外部改 props 分页需本地重算数据(与 onChangePaginate 分支一致);isParamTriggerServer 由外部拉数,不重算\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n },\n);\n\nconst onSelectAll = () => {\n // 组件禁用时全选一并拦截:表头 checkbox 已随 disabled 置灰,此处为逻辑层兜底,防任何路径绕过 UI 触发全选\n if (props.disabled) {\n return;\n }\n const newAllValue = !optAllValue.value;\n let newSelectValue: string[] = [];\n if (newAllValue) {\n const allIds = _getCurrentPageAllUse();\n const sIds = optCurrentPageSelectIds.value;\n const temp: string[] = [];\n allIds.forEach((aId: string) => {\n if (!CommonBase.isExistValue(sIds, aId)) {\n temp.push(aId);\n }\n });\n newSelectValue = sIds.concat(temp);\n }\n optAllValue.value = newAllValue;\n optCurrentPageSelectIds.value = newSelectValue;\n _emitChangeCheckedBefore();\n};\n\nconst onClickOrderBy = (_info: any, inx: number, sortType: string) => {\n // 组件禁用时排序一并拦截:表头排序图标已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发排序\n if (props.disabled) {\n return;\n }\n if (!optBase.isRunLoading) {\n _pageData.changeNewPaginate.pages = 1;\n // 与 watch orderSort 一致:页码 UI 立即同步(服务端模式 emit 后不经 _setNewDataAfter,父组件不刷新 list 时页码漂移)\n optPageInfo.pages = 1;\n _pageData.changeNewSort.orderIndex = inx;\n _pageData.changeNewSort.orderBy = sortType;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: false });\n }\n }\n};\n\n// info 允许 null:Body emit 声明 ListInfo | null(list 含 null 行时点击行携带 null),isEmpty 守卫已拦截\nconst onClickTr = (e: MouseEvent | KeyboardEvent, info: ListInfo | null, inx: number) => {\n // null 行守卫:list 含 null 项时 info.isDisabled 解引用崩溃(null 行无行为,直接返回);!info 同时提供 TS 收窄\n if (!info || CommonBase.isEmpty(info)) {\n return;\n }\n // 禁用行统一拦截:行禁用或组件禁用时,选中、弹性展开、onClickRow 事件全部不触发\n if ((CommonBase.isBoolean(info.isDisabled) && info.isDisabled) || props.disabled) {\n return;\n }\n // 空串语义 = 不启用拦截:getParent 空串分支返回 parentNode 会误拦截全部点击,先守卫\n const elInvalid = CommonBase.isNonEmptyString(props.rowClickKeyInvalid)\n ? CommonElement.getParent(e.target, props.rowClickKeyInvalid, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elInvalid)) {\n if (props.isElastic) {\n const elElastic = CommonBase.isNonEmptyString(props.rowClickKeyElastic)\n ? CommonElement.getParent(e.target, props.rowClickKeyElastic, e.currentTarget, false)\n : undefined;\n if (CommonBase.isUndefined(elElastic)) {\n if (props.isClickRowLinkage) {\n _setSelectElasticIds(info, inx);\n }\n } else {\n _setSelectElasticIds(info, inx, elElastic);\n return;\n }\n }\n let isRc = false;\n if (optBase.isCheckedRadio || optBase.isCheckedCheckbox) {\n let elRc = CommonElement.getParent(e.target, '.th-rc', e.currentTarget, false);\n if (elRc === e.currentTarget) {\n elRc = null;\n }\n if (CommonBase.isUndefined(elRc)) {\n if (props.isClickRowLinkage) {\n _setSelectRc(info);\n }\n } else {\n isRc = true;\n _setSelectRc(info);\n }\n }\n _emitClickRow(info, inx, isRc);\n }\n};\n\nconst onHoverInTr = (inx: number, elasticInx = -1) => {\n optBase.hoverTrIndex = inx;\n optBase.hoverTrElasticIndex = elasticInx;\n};\n\nconst onHoverOutTr = () => {\n optBase.hoverTrIndex = -1;\n optBase.hoverTrElasticIndex = -1;\n};\n\nconst onChangePaginate = (pages: number, limit: number) => {\n // 组件禁用时分页一并拦截:分页条已随 disabled 置灰,此处为逻辑层兜底,防路径绕过 UI 触发翻页\n if (props.disabled) {\n return;\n }\n if (optBase.isRunLoading) {\n return;\n }\n if (props.isPaginate) {\n _pageData.changeNewPaginate.pages = pages;\n _pageData.changeNewPaginate.limit = limit;\n if (!props.isServer && props.isParamTriggerServer) {\n _emitChangeParams();\n } else {\n _getNewDataBefore({ isChangePage: true });\n }\n }\n};\n\nconst onFixedScrollX = (e: Event) => {\n _onScrollX(e);\n};\n\nconst getParamInfo = () => {\n return _getPaginateSort();\n};\n\nconst refresh = (isInit = true) => {\n if (optBase.isRunLoading) {\n return;\n }\n if (isInit) {\n _pageData.changeNewPaginate.pages = 1;\n }\n _getNewDataBefore();\n};\n\nconst getData = (): ListInfo[] => {\n // 浅拷贝契约:行对象一层克隆,嵌套对象与内部状态共享引用(外部拿到后不会改到内部状态,但嵌套引用仍共享)\n const list = toRaw(optNewList.value);\n return CommonBase.getListClone(list) as ListInfo[];\n};\n\nconst getSelectData = () => {\n const selectDataItem = _getSelectDataItem();\n const checkedIds = selectDataItem?.checkedIds || [];\n return { ids: checkedIds.join(','), list: selectDataItem?.checkedData || [] };\n};\n\nconst loadStart = () => {\n _runLoadStart();\n};\n\nconst loadStop = () => {\n _runLoadStop();\n};\n\n// 与 closeElastic 一致:外部可能传数字 id(ListInfo.id 为 string | number),入口归一为字符串防 indexOf 失配\nconst loadElasticStart = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStart(id.toString());\n};\n\nconst loadElasticStop = (id: string | number) => {\n if (CommonBase.isUndefined(id) || id === null) {\n return;\n }\n _runElasticLoadStop(id.toString());\n};\n\n// 幂等关闭:未展开的行直接返回,避免调用方按「关闭」语义误触「展开 + 触发加载」\nconst closeElastic = (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => {\n // null 行守卫:运行时兜底(list 含 null 项场景调用方可能传入空 info),info.id 解引用前先判空\n if (CommonBase.isEmpty(info) || CommonBase.isEmpty(info.id)) {\n return;\n }\n const id = info.id.toString();\n if (optElastic.open.indexOf(id) === -1) {\n return;\n }\n // elElastic 缺省时按 data-elastic-id 定位(Body 模板挂载点),供关闭后弹性容器类名/高度复位\n const el =\n elElastic ||\n (refElBodyMain.value\n ? (refElBodyMain.value.querySelector(\n `[data-elastic-id=\"${CSS.escape(id)}\"]`,\n ) as HTMLElement | null)\n : null);\n _setSelectElasticIds(info, trIndex, el, false);\n};\n\nconst refreshResize = () => {\n _onWinResize();\n};\n\nexport interface ClTableExpose {\n getParamInfo: () => TableEmitParam;\n refresh: (isInit?: boolean) => void;\n getData: () => ListInfo[];\n getSelectData: () => { ids: string; list: ListInfo[] };\n loadStart: () => void;\n loadStop: () => void;\n loadElasticStart: (id: string | number) => void;\n loadElasticStop: (id: string | number) => void;\n closeElastic: (info: ListInfo, trIndex: number, elElastic?: HTMLElement | null) => void;\n refreshResize: () => void;\n}\n\ndefineExpose({\n getParamInfo,\n refresh,\n getData,\n getSelectData,\n loadStart,\n loadStop,\n loadElasticStart,\n loadElasticStop,\n closeElastic,\n refreshResize,\n});\n</script>\n"],"names":["getTipIconInfo","tipIcon","CommonBase","name","props","__props","emit","__emit","optTipIcon","computed","optThInfo","optSortable","optSortInteractive","optTipMsgText","tipMsg","text","optSortType","orderSort","optAriaSort","clsTh","cls","thInfo","_isWidthValid","activeSort","clsFinal","CommonElement","styTh","sty","_emitClickOrderBy","sortType","w","onClickOrderBy","newSortType","_unref","_createElementBlock","_createElementVNode","_renderSlot","_ctx","_createBlock","ClIconFont","_directive_cltooltip","_Fragment","optTdInfo","clsTd","tdInfo","styTd","NO_HOVER_TOTAL_INDEX","refElTable","ref","clsParent","styTable","optFunGetThValue","info","optFunGetTdValue","value","opt","optFunGetTotalValue","watch","nv","onSelectAll","inx","onHoverInTotal","onHoverOutTotal","__expose","elRc","totalPadding","elThs","ti","thStyle","plRaw","prRaw","pl","pr","h","elTotal","ClCheckboxOne","_openBlock","_renderList","thIndex","ClTableTh","_toDisplayString","_hoisted_2","_normalizeClass","_hoisted_3","tdIndex","ClTableTd","elId","optForIdCb","_getForId","optForIdRd","optIsChecked","optIsDisabled","suffix","ClRadioOne","optPageLanguage","getPageLanguage","useLanguage","optElasticAbsoluteIds","optSelectedSet","v","optElasticLoadingSet","optElasticOpenSet","optColspanCount","n","clsTable","onClickTr","e","onHoverInTr","elasticInx","onHoverOutTr","optGetElasticDataList","id","elasticData","optIsTrSelected","optIsElasticLoading","parentEl","el","li","elElastic","cur","next","scrollLeft","safeLeft","trInfo","trIndex","$event","ClTableTdChecked","_createTextVNode","_hoisted_4","_hoisted_5","_createVNode","ClLoad","_hoisted_9","_hoisted_10","trElasticInfo","trElasticInx","tdElasticInfo","tdElasticIndex","_hoisted_12","_hoisted_14","SCROLLBAR_HEIGHT","FIXED_HEAD_THRESHOLD","SELECT_SCROLL_THRESHOLD","SELECT_SCROLL_OFFSET","LOCAL_LOAD_DELAY","slots","useSlots","_initOrderData","data","orderSortInfo","initFirstSort","columns","i","columnInfo","sort","visible","columnOrderInfo","orderIndex","orderBy","_initPaginatePages","pages","_initOrderSort","_pageData","_pageObject","_keyIndex","refElHeadWrapper","refElHeadContainer","refElHeadMain","refElHeadTable","refElHeadFixedScrollX","refElBodyWrapper","refElBodyContainer","refElBodyMain","refElBodyTable","refElBodyFixedScrollX","optBase","reactive","optNewList","optPageInfo","optOrderSort","optAllValue","_getSelectValueIds","selectValue","optCurrentPageSelectIds","optElastic","optScrollX","optScrollYIsShow","optFixedColumn","optFixedHead","optLoadInfo","_rafIdScrollX","_rafIdWinScroll","_scrollLeftCache","optSlotsKeyTh","optSlotsKeyTd","names","optSlotsKeyTotal","optSlotsKeyTdElastic","optIsShowCheckboxAll","optIsShowTotal","optTotalCount","optScrollXIsUse","optScrollYIsUse","optFixedLeftIsUse","optFixedRightIsUse","clsHeadWrapper","clsHeadContainer","clsBodyWrapper","styBodyContainer","maxH","styBodyMain","styLoadHead","_emitGetData","param","_emitClickElastic","isOpen","_emitClickRow","isRc","_emitChangeChecked","ids","list","ext","_emitChangeParams","_getPaginateSort","_runLoadStart","nextTick","elThead","_runLoadStop","_analysisColumns","colspanCount","minWidth","_analysisFixedColumns","resolve","reject","totalWidth","centerWidth","leftColumn","rightColumn","elTds","totalLen","leftColspanCount","rightColspanCount","leftIndexMax","rightIndexMin","leftWidth","rightWidth","fi","elTd","tempW","err","_setElasticWidth","_setElasticHeight","_runElasticLoadStart","arr","_runElasticLoadStop","_setSelectElasticIds","isEmit","_initElasticOneClass","isEmitUse","_initElasticAllData","newList","elasticIconCls","arrOpenId","newInfo","addCls","removeCls","newCls","_getCurrentPageAllUse","allIds","_getCurrentSelectUse","selectIds","sIds","useIds","sId","_setCheckboxAll","checkedIds","_getSelectDataItem","unCheckedIds","aId","_emitChangeCheckedBefore","selectDataItem","_setSelectRc","newId","oldSelectValue","newSelectValue","isExist","_calculationScrollX","pW","tW","_calculationScrollY","bodyHeight","isY","_calculationScrollFixedColumn","pWidth","cWidth","posType","_calculationScrollRelation","_onScrollX","_onScrollHead","left","_onScrollBody","_calculationFixedHeadInfo","isShowFixed","width","height","pos","bodyH","_setEmptyWidth","limit","orderColumn","_initScrollSelect","elSelected","_setNewDataAfter","arrSelectIds","_getNewDataByLocal","isInitSort","newSortData","jsonData","sortKey","sortFormat","orderColumns","columnsInfo","temp","tempStr","k","newData","len","s","_getNewDataBefore","isInitSortData","_listenerTableScrollX","_listenerTableScrollY","win","MutationObserver","observer","_onWinResize","_onWinScroll","_initMain","onMounted","ResizeEvent","onActivated","onDeactivated","onBeforeUnmount","newValue","oldValue","safeList","paramLocal","isUpd","oldIdSet","item","_oldValue","newOrderSort","_newOffset","newLimit","_oldOffset","_oldLimit","newAllValue","_info","elInvalid","onChangePaginate","onFixedScrollX","isInit","toRaw","_normalizeStyle","ClTableHead","skTh","_withCtx","slotProps","skTotal","_withDirectives","_hoisted_6","ClScrollXFence","_vShow","_hoisted_7","ClTableBody","skTd","skTdElastic","_hoisted_8","_hoisted_11","ClPaginate","_hoisted_13","ClLoadIng"],"mappings":"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"}