@yoka-ui/ui 1.0.10-test → 1.1.0

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 (385) hide show
  1. package/@Docs-yoka/exports.generated.md +68 -62
  2. package/README.md +40 -189
  3. package/dist/es/assets/image/skills.zip +0 -0
  4. package/dist/es/business/AiChat/index.d.ts +3 -3
  5. package/dist/es/business/AiChat/index.js +331 -119
  6. package/dist/es/business/AiChat/index.js.map +3 -3
  7. package/dist/es/business/AiChat/intentRecognizer.js.map +1 -1
  8. package/dist/es/business/AiChat/navigationManager.js +6 -6
  9. package/dist/es/business/AiChat/navigationManager.js.map +2 -2
  10. package/dist/es/business/AiChat/sse.d.ts +15 -0
  11. package/dist/es/business/AiChat/sse.js +118 -7
  12. package/dist/es/business/AiChat/sse.js.map +2 -2
  13. package/dist/es/business/AiChat/type.d.ts +22 -23
  14. package/dist/es/business/AiChat/useAiChat.js +105 -75
  15. package/dist/es/business/AiChat/useAiChat.js.map +3 -3
  16. package/dist/es/business/AiChat/useTaskWorkflow.d.ts +1 -2
  17. package/dist/es/business/AiChat/useTaskWorkflow.js +2 -36
  18. package/dist/es/business/AiChat/useTaskWorkflow.js.map +2 -2
  19. package/dist/es/business/DrawerPageInfo/index.js.map +1 -1
  20. package/dist/es/business/Editor/index.d.ts +1 -1
  21. package/dist/es/business/Editor/index.js.map +2 -2
  22. package/dist/es/business/Empty/index.js +1 -1
  23. package/dist/es/business/Empty/index.js.map +1 -1
  24. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js +2 -2
  25. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  26. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js +3 -3
  27. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  28. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js +2 -2
  29. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  30. package/dist/es/business/ModCommonFilter/index.d.ts +1 -1
  31. package/dist/es/business/ModCommonFilter/index.js.map +2 -2
  32. package/dist/es/business/YkCharts/Area.d.ts +18 -0
  33. package/dist/es/business/YkCharts/Area.js +336 -0
  34. package/dist/es/business/YkCharts/Area.js.map +7 -0
  35. package/dist/es/business/YkCharts/Bar.d.ts +21 -0
  36. package/dist/es/business/YkCharts/Bar.js +316 -0
  37. package/dist/es/business/YkCharts/Bar.js.map +7 -0
  38. package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
  39. package/dist/es/business/YkCharts/BarProperty.js +357 -0
  40. package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
  41. package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
  42. package/dist/es/business/YkCharts/BarTotal.js +292 -0
  43. package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
  44. package/dist/es/business/YkCharts/Line.d.ts +21 -0
  45. package/dist/es/business/YkCharts/Line.js +342 -0
  46. package/dist/es/business/YkCharts/Line.js.map +7 -0
  47. package/dist/es/business/YkCharts/Pie.d.ts +19 -0
  48. package/dist/es/business/YkCharts/Pie.js +107 -0
  49. package/dist/es/business/YkCharts/Pie.js.map +7 -0
  50. package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
  51. package/dist/es/business/YkCharts/PieProperty.js +180 -0
  52. package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
  53. package/dist/es/business/YkCharts/Pies.d.ts +26 -0
  54. package/dist/es/business/YkCharts/Pies.js +352 -0
  55. package/dist/es/business/YkCharts/Pies.js.map +7 -0
  56. package/dist/es/business/YkCharts/constants.d.ts +1 -0
  57. package/dist/es/business/YkCharts/constants.js +47 -0
  58. package/dist/es/business/YkCharts/constants.js.map +7 -0
  59. package/dist/es/business/YkCharts/hooks.d.ts +4 -0
  60. package/dist/es/business/YkCharts/hooks.js +37 -0
  61. package/dist/es/business/YkCharts/hooks.js.map +7 -0
  62. package/dist/es/business/YkCharts/index.d.ts +9 -0
  63. package/dist/es/business/YkCharts/index.js +20 -0
  64. package/dist/es/business/YkCharts/index.js.map +7 -0
  65. package/dist/es/business/YkCharts/index.module.less +164 -0
  66. package/dist/es/business/YkCharts/tooltip.less +92 -0
  67. package/dist/es/business/YkCharts/transformData.js +16 -0
  68. package/dist/es/business/YkCharts/transformData.js.map +7 -0
  69. package/dist/es/business/YkCharts/typing.d.ts +74 -0
  70. package/dist/es/business/YkCharts/typing.js +1 -0
  71. package/dist/es/business/YkCharts/typing.js.map +7 -0
  72. package/dist/es/business/YkCharts/utils.d.ts +4 -0
  73. package/dist/es/business/YkCharts/utils.js +109 -0
  74. package/dist/es/business/YkCharts/utils.js.map +7 -0
  75. package/dist/es/business/YkCharts/variables.less +13 -0
  76. package/dist/es/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  77. package/dist/es/business/YkLoginModule/SmsLoginForm.js +178 -0
  78. package/dist/es/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  79. package/dist/es/business/YkLoginModule/index.d.ts +48 -0
  80. package/dist/es/business/YkLoginModule/index.js +198 -0
  81. package/dist/es/business/YkLoginModule/index.js.map +7 -0
  82. package/dist/es/business/YkLoginModule/styles.module.less +169 -0
  83. package/dist/es/business/YkPorjectSelect/index.d.ts +1 -1
  84. package/dist/es/business/YkPorjectSelect/index.js +2 -2
  85. package/dist/es/business/YkPorjectSelect/index.js.map +2 -2
  86. package/dist/es/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  87. package/dist/es/business/YkSqlEdit/index.d.ts +20 -0
  88. package/dist/es/business/YkSqlEdit/index.js +180 -0
  89. package/dist/es/business/YkSqlEdit/index.js.map +7 -0
  90. package/dist/es/business/YkSqlEdit/sql-language.d.ts +11 -0
  91. package/dist/es/business/YkSqlEdit/sql-language.js +1460 -0
  92. package/dist/es/business/YkSqlEdit/sql-language.js.map +7 -0
  93. package/dist/es/components/DebounceInput/index.js.map +2 -2
  94. package/dist/es/components/MultipleSelect/index.d.ts +14 -0
  95. package/dist/es/components/MultipleSelect/index.js +1 -1
  96. package/dist/es/components/MultipleSelect/index.js.map +2 -2
  97. package/dist/es/components/RefreshButton/index.js.map +2 -2
  98. package/dist/es/components/SearchWithHistory/index.js +1 -1
  99. package/dist/es/components/SearchWithHistory/index.js.map +2 -2
  100. package/dist/es/components/TextWithToolTip/index.d.ts +1 -1
  101. package/dist/es/components/TextWithToolTip/index.js.map +2 -2
  102. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  103. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  104. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  105. package/dist/es/components/TreeTransfer/index.d.ts +1 -24
  106. package/dist/es/components/TreeTransfer/index.js +8 -8
  107. package/dist/es/components/TreeTransfer/index.js.map +2 -2
  108. package/dist/es/components/TreeTransfer/utils/index.d.ts +1 -1
  109. package/dist/es/components/TreeTransfer/utils/index.js.map +2 -2
  110. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  111. package/dist/es/components/YKMarkdown/index.js +236 -0
  112. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  113. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  114. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +194 -0
  115. package/dist/es/components/YkDateRangePicker/index.d.ts +9 -1
  116. package/dist/es/components/YkDateRangePicker/index.js +127 -61
  117. package/dist/es/components/YkDateRangePicker/index.js.map +2 -2
  118. package/dist/es/components/YkDateRangePicker/index.module.less +33 -9
  119. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  120. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  121. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  122. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  123. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +23 -3
  124. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +2 -2
  125. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  126. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  127. package/dist/es/components/YkRangeDateWithVS/index.d.ts +2 -2
  128. package/dist/es/components/YkRangeDateWithVS/index.js.map +2 -2
  129. package/dist/es/components/YkRangeDateWithVS/index.module.less +22 -4
  130. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +1 -1
  131. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +2 -2
  132. package/dist/es/creative/ArcCheckbox/index.d.ts +12 -0
  133. package/dist/es/creative/ArcCheckbox/index.js +49 -0
  134. package/dist/es/creative/ArcCheckbox/index.js.map +7 -0
  135. package/dist/es/creative/ArcCheckbox/index.module.less +102 -0
  136. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +1 -1
  137. package/dist/es/creative/ButtonWithProgress/index.d.ts +1 -1
  138. package/dist/es/creative/ButtonWithProgress/index.js.map +2 -2
  139. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +24 -0
  140. package/dist/es/creative/GlassSegmentedRadio/index.js +75 -0
  141. package/dist/es/creative/GlassSegmentedRadio/index.js.map +7 -0
  142. package/dist/es/creative/GlassSegmentedRadio/index.module.less +241 -0
  143. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  144. package/dist/es/creative/SkillsWriter/index.js +191 -0
  145. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  146. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  147. package/dist/es/index.d.ts +32 -24
  148. package/dist/es/index.js +90 -80
  149. package/dist/es/index.js.map +2 -2
  150. package/dist/es/index.less +44 -0
  151. package/dist/es/layout/FlexGrid/index.d.ts +1 -1
  152. package/dist/es/layout/FlexGrid/index.js.map +2 -2
  153. package/dist/es/layout/YkContainer/index.js.map +1 -1
  154. package/dist/es/layout/YkDrawer/index.d.ts +1 -1
  155. package/dist/es/layout/YkDrawer/index.js.map +2 -2
  156. package/dist/es/ui/LabelSelect/demo.js +1 -1
  157. package/dist/es/ui/LabelSelect/demo.js.map +2 -2
  158. package/dist/es/ui/LabelSelect/index.d.ts +1 -1
  159. package/dist/es/ui/LabelSelect/index.js +1 -1
  160. package/dist/es/ui/LabelSelect/index.js.map +2 -2
  161. package/dist/es/ui/LogicOperator/index.d.ts +1 -1
  162. package/dist/es/ui/LogicOperator/index.js.map +2 -2
  163. package/dist/es/ui/YkButton/index.d.ts +1 -1
  164. package/dist/es/ui/YkButton/index.js.map +2 -2
  165. package/dist/es/ui/YkCard/index.d.ts +1 -1
  166. package/dist/es/ui/YkCard/index.js +1 -1
  167. package/dist/es/ui/YkCard/index.js.map +2 -2
  168. package/dist/es/ui/YkCheckbox/index.d.ts +1 -1
  169. package/dist/es/ui/YkCheckbox/index.js.map +2 -2
  170. package/dist/es/ui/YkDescriptions/index.d.ts +1 -1
  171. package/dist/es/ui/YkDescriptions/index.js.map +2 -2
  172. package/dist/es/ui/YkPagination/index.d.ts +1 -1
  173. package/dist/es/ui/YkPagination/index.js.map +2 -2
  174. package/dist/es/ui/YkRadio/index.d.ts +1 -1
  175. package/dist/es/ui/YkRadio/index.js.map +2 -2
  176. package/dist/es/ui/YkSegmented/index.d.ts +1 -1
  177. package/dist/es/ui/YkSegmented/index.js.map +2 -2
  178. package/dist/es/ui/YkSelect/index.d.ts +1 -1
  179. package/dist/es/ui/YkSelect/index.js.map +2 -2
  180. package/dist/es/ui/YkSpin/index.d.ts +1 -1
  181. package/dist/es/ui/YkSpin/index.js.map +2 -2
  182. package/dist/es/ui/YkStatistic/index.d.ts +1 -1
  183. package/dist/es/ui/YkStatistic/index.js.map +2 -2
  184. package/dist/es/ui/YkSwitch/index.d.ts +1 -1
  185. package/dist/es/ui/YkSwitch/index.js.map +2 -2
  186. package/dist/es/ui/YkTabs/index.d.ts +1 -1
  187. package/dist/es/ui/YkTabs/index.js.map +2 -2
  188. package/dist/es/ui/YkTooltip/index.d.ts +1 -1
  189. package/dist/es/ui/YkTooltip/index.js.map +2 -2
  190. package/dist/es/utils/styleUtils.js.map +2 -2
  191. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  192. package/dist/es/utils/ykStorybookDoc.js +24 -2
  193. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  194. package/dist/lib/assets/image/skills.zip +0 -0
  195. package/dist/lib/business/AiChat/index.d.ts +3 -3
  196. package/dist/lib/business/AiChat/index.js +320 -111
  197. package/dist/lib/business/AiChat/index.js.map +3 -3
  198. package/dist/lib/business/AiChat/intentRecognizer.js.map +1 -1
  199. package/dist/lib/business/AiChat/navigationManager.js +6 -6
  200. package/dist/lib/business/AiChat/navigationManager.js.map +2 -2
  201. package/dist/lib/business/AiChat/sse.d.ts +15 -0
  202. package/dist/lib/business/AiChat/sse.js +117 -7
  203. package/dist/lib/business/AiChat/sse.js.map +2 -2
  204. package/dist/lib/business/AiChat/type.d.ts +22 -23
  205. package/dist/lib/business/AiChat/type.js.map +1 -1
  206. package/dist/lib/business/AiChat/useAiChat.js +104 -74
  207. package/dist/lib/business/AiChat/useAiChat.js.map +3 -3
  208. package/dist/lib/business/AiChat/useTaskWorkflow.d.ts +1 -2
  209. package/dist/lib/business/AiChat/useTaskWorkflow.js +0 -34
  210. package/dist/lib/business/AiChat/useTaskWorkflow.js.map +2 -2
  211. package/dist/lib/business/DrawerPageInfo/index.js.map +1 -1
  212. package/dist/lib/business/Editor/index.d.ts +1 -1
  213. package/dist/lib/business/Editor/index.js.map +2 -2
  214. package/dist/lib/business/Empty/index.js +1 -1
  215. package/dist/lib/business/Empty/index.js.map +1 -1
  216. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +3 -3
  217. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  218. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +4 -4
  219. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  220. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +3 -3
  221. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  222. package/dist/lib/business/ModCommonFilter/index.d.ts +1 -1
  223. package/dist/lib/business/ModCommonFilter/index.js.map +2 -2
  224. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  225. package/dist/lib/business/YkCharts/Area.js +346 -0
  226. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  227. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  228. package/dist/lib/business/YkCharts/Bar.js +323 -0
  229. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  230. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  231. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  232. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  233. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  234. package/dist/lib/business/YkCharts/BarTotal.js +298 -0
  235. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  236. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  237. package/dist/lib/business/YkCharts/Line.js +349 -0
  238. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  239. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  240. package/dist/lib/business/YkCharts/Pie.js +117 -0
  241. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  242. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  243. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  244. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  245. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  246. package/dist/lib/business/YkCharts/Pies.js +341 -0
  247. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  248. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  249. package/dist/lib/business/YkCharts/constants.js +71 -0
  250. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  251. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  252. package/dist/lib/business/YkCharts/hooks.js +62 -0
  253. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  254. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  255. package/dist/lib/business/YkCharts/index.js +61 -0
  256. package/dist/lib/business/YkCharts/index.js.map +7 -0
  257. package/dist/lib/business/YkCharts/index.module.less +164 -0
  258. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  259. package/dist/lib/business/YkCharts/transformData.js +40 -0
  260. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  261. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  262. package/dist/lib/business/YkCharts/typing.js +18 -0
  263. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  264. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  265. package/dist/lib/business/YkCharts/utils.js +143 -0
  266. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  267. package/dist/lib/business/YkCharts/variables.less +13 -0
  268. package/dist/lib/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  269. package/dist/lib/business/YkLoginModule/SmsLoginForm.js +171 -0
  270. package/dist/lib/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  271. package/dist/lib/business/YkLoginModule/index.d.ts +48 -0
  272. package/dist/lib/business/YkLoginModule/index.js +206 -0
  273. package/dist/lib/business/YkLoginModule/index.js.map +7 -0
  274. package/dist/lib/business/YkLoginModule/styles.module.less +169 -0
  275. package/dist/lib/business/YkPorjectSelect/index.d.ts +1 -1
  276. package/dist/lib/business/YkPorjectSelect/index.js +3 -3
  277. package/dist/lib/business/YkPorjectSelect/index.js.map +2 -2
  278. package/dist/lib/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  279. package/dist/lib/business/YkSqlEdit/index.d.ts +20 -0
  280. package/dist/lib/business/YkSqlEdit/index.js +202 -0
  281. package/dist/lib/business/YkSqlEdit/index.js.map +7 -0
  282. package/dist/lib/business/YkSqlEdit/sql-language.d.ts +11 -0
  283. package/dist/lib/business/YkSqlEdit/sql-language.js +1493 -0
  284. package/dist/lib/business/YkSqlEdit/sql-language.js.map +7 -0
  285. package/dist/lib/components/DebounceInput/index.js.map +2 -2
  286. package/dist/lib/components/MultipleSelect/index.d.ts +14 -0
  287. package/dist/lib/components/MultipleSelect/index.js +1 -1
  288. package/dist/lib/components/MultipleSelect/index.js.map +2 -2
  289. package/dist/lib/components/RefreshButton/index.js.map +2 -2
  290. package/dist/lib/components/SearchWithHistory/index.js +1 -1
  291. package/dist/lib/components/SearchWithHistory/index.js.map +2 -2
  292. package/dist/lib/components/TextWithToolTip/index.d.ts +1 -1
  293. package/dist/lib/components/TextWithToolTip/index.js.map +2 -2
  294. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  295. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  296. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  297. package/dist/lib/components/TreeTransfer/index.d.ts +1 -24
  298. package/dist/lib/components/TreeTransfer/index.js +3 -3
  299. package/dist/lib/components/TreeTransfer/index.js.map +2 -2
  300. package/dist/lib/components/TreeTransfer/utils/index.d.ts +1 -1
  301. package/dist/lib/components/TreeTransfer/utils/index.js.map +2 -2
  302. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  303. package/dist/lib/components/YKMarkdown/index.js +188 -0
  304. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  305. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  306. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +194 -0
  307. package/dist/lib/components/YkDateRangePicker/index.d.ts +9 -1
  308. package/dist/lib/components/YkDateRangePicker/index.js +127 -61
  309. package/dist/lib/components/YkDateRangePicker/index.js.map +2 -2
  310. package/dist/lib/components/YkDateRangePicker/index.module.less +33 -9
  311. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  312. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  313. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  314. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  315. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +22 -2
  316. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +2 -2
  317. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  318. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  319. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +2 -2
  320. package/dist/lib/components/YkRangeDateWithVS/index.js.map +2 -2
  321. package/dist/lib/components/YkRangeDateWithVS/index.module.less +22 -4
  322. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +1 -1
  323. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +2 -2
  324. package/dist/lib/creative/ArcCheckbox/index.d.ts +12 -0
  325. package/dist/lib/creative/ArcCheckbox/index.js +50 -0
  326. package/dist/lib/creative/ArcCheckbox/index.js.map +7 -0
  327. package/dist/lib/creative/ArcCheckbox/index.module.less +102 -0
  328. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +1 -1
  329. package/dist/lib/creative/ButtonWithProgress/index.d.ts +1 -1
  330. package/dist/lib/creative/ButtonWithProgress/index.js.map +2 -2
  331. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +24 -0
  332. package/dist/lib/creative/GlassSegmentedRadio/index.js +78 -0
  333. package/dist/lib/creative/GlassSegmentedRadio/index.js.map +7 -0
  334. package/dist/lib/creative/GlassSegmentedRadio/index.module.less +241 -0
  335. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  336. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  337. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  338. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  339. package/dist/lib/index.d.ts +32 -24
  340. package/dist/lib/index.js +39 -24
  341. package/dist/lib/index.js.map +2 -2
  342. package/dist/lib/index.less +44 -0
  343. package/dist/lib/layout/FlexGrid/index.d.ts +1 -1
  344. package/dist/lib/layout/FlexGrid/index.js.map +2 -2
  345. package/dist/lib/layout/YkContainer/index.js.map +1 -1
  346. package/dist/lib/layout/YkDrawer/index.d.ts +1 -1
  347. package/dist/lib/layout/YkDrawer/index.js.map +2 -2
  348. package/dist/lib/ui/LabelSelect/demo.js +1 -1
  349. package/dist/lib/ui/LabelSelect/demo.js.map +2 -2
  350. package/dist/lib/ui/LabelSelect/index.d.ts +1 -1
  351. package/dist/lib/ui/LabelSelect/index.js +1 -1
  352. package/dist/lib/ui/LabelSelect/index.js.map +2 -2
  353. package/dist/lib/ui/LogicOperator/index.d.ts +1 -1
  354. package/dist/lib/ui/LogicOperator/index.js.map +2 -2
  355. package/dist/lib/ui/YkButton/index.d.ts +1 -1
  356. package/dist/lib/ui/YkButton/index.js.map +2 -2
  357. package/dist/lib/ui/YkCard/index.d.ts +1 -1
  358. package/dist/lib/ui/YkCard/index.js.map +2 -2
  359. package/dist/lib/ui/YkCheckbox/index.d.ts +1 -1
  360. package/dist/lib/ui/YkCheckbox/index.js.map +2 -2
  361. package/dist/lib/ui/YkDescriptions/index.d.ts +1 -1
  362. package/dist/lib/ui/YkDescriptions/index.js.map +2 -2
  363. package/dist/lib/ui/YkPagination/index.d.ts +1 -1
  364. package/dist/lib/ui/YkPagination/index.js.map +2 -2
  365. package/dist/lib/ui/YkRadio/index.d.ts +1 -1
  366. package/dist/lib/ui/YkRadio/index.js.map +2 -2
  367. package/dist/lib/ui/YkSegmented/index.d.ts +1 -1
  368. package/dist/lib/ui/YkSegmented/index.js.map +2 -2
  369. package/dist/lib/ui/YkSelect/index.d.ts +1 -1
  370. package/dist/lib/ui/YkSelect/index.js.map +2 -2
  371. package/dist/lib/ui/YkSpin/index.d.ts +1 -1
  372. package/dist/lib/ui/YkSpin/index.js.map +2 -2
  373. package/dist/lib/ui/YkStatistic/index.d.ts +1 -1
  374. package/dist/lib/ui/YkStatistic/index.js.map +2 -2
  375. package/dist/lib/ui/YkSwitch/index.d.ts +1 -1
  376. package/dist/lib/ui/YkSwitch/index.js.map +2 -2
  377. package/dist/lib/ui/YkTabs/index.d.ts +1 -1
  378. package/dist/lib/ui/YkTabs/index.js.map +2 -2
  379. package/dist/lib/ui/YkTooltip/index.d.ts +1 -1
  380. package/dist/lib/ui/YkTooltip/index.js.map +2 -2
  381. package/dist/lib/utils/styleUtils.js.map +2 -2
  382. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  383. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  384. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  385. package/package.json +152 -144
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/business/YkSqlEdit/sql-language.ts"],
4
+ "sourcesContent": ["export type SqlDialectType = 'starrocks' | 'impala' | 'hive' | string;\n\n// 默认 sql 关键词\nexport const defaultKeywords = [\n 'false',\n 'true',\n 'UNKNOWN',\n 'NULL',\n 'DAY',\n 'HOUR',\n 'MINUTE',\n 'MONTH',\n 'SECOND',\n 'YEAR',\n 'MICROSECOND',\n 'WEEK',\n 'ADD',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'AND',\n 'ANY',\n 'ARE',\n 'AS',\n 'ASC',\n 'AUTHORIZATION',\n 'AT',\n 'BETWEEN',\n 'BOTH',\n 'BY',\n 'CASCADE',\n 'CASCADED',\n 'CASE',\n 'CAST',\n 'COLLATE',\n 'COLUMN',\n 'COMMIT',\n 'CONDITION',\n 'CONNECT',\n 'CONSTRAINT',\n 'CORRESPONDING',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_DEFAULT_TRANSFORM_GROUP',\n 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DEALLOCATE',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DEREF',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISCONNECT',\n 'DISTINCT',\n 'DROP',\n 'DYNAMIC',\n 'EACH',\n 'ELSE',\n 'END',\n 'END-EXEC',\n 'EQUALS',\n 'ESCAPE',\n 'EXCEPT',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXTERNAL',\n 'FETCH',\n 'FIRST',\n 'FOR',\n 'FOREIGN',\n 'FROM',\n 'FREE',\n 'FULL',\n 'FUNCTION',\n 'GET',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'HAVING',\n 'HOLD',\n 'IF',\n 'IN',\n 'INDICATOR',\n 'INNER',\n 'INOUT',\n 'INSERT',\n 'INTERSECT',\n 'INTO',\n 'IS',\n 'JOIN',\n 'KEY',\n 'LAST',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LOCAL',\n 'LOCALTIMESTAMP',\n 'MAP',\n 'MATCH',\n 'METHOD',\n 'MODIFIES',\n 'NATURAL',\n 'NO',\n 'NONE',\n 'NOT',\n 'OF',\n 'ON',\n 'ONLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVERLAPS',\n 'PREPARE',\n 'PRIMARY',\n 'PROCEDURE',\n 'READS',\n 'RECURSIVE',\n 'REF',\n 'REFERENCES',\n 'REFERENCING',\n 'RELEASE',\n 'RESTRICT',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'ROLE',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCROLL',\n 'SEARCH',\n 'SET',\n 'SELECT',\n 'SIMILAR',\n 'SOME',\n 'SPECIFICTYPE',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STATIC',\n 'SYSTEM_USER',\n 'TABLE',\n 'THEN',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TO',\n 'TRAILING',\n 'TRANSLATION',\n 'TREAT',\n 'TRIGGER',\n 'UNION',\n 'UNIQUE',\n 'UNNEST',\n 'UPDATE',\n 'USING',\n 'VALUES',\n 'VIEW',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n 'ASENSITIVE',\n 'CHANGE',\n 'COLUMNS',\n 'COMMENT',\n 'CONTAINS',\n 'CONVERT',\n 'DATABASE',\n 'DATABASES',\n 'ESCAPED',\n 'EVERY',\n 'EXPLAIN',\n 'EXTENDED',\n 'FIELDS',\n 'HASH',\n 'IGNORE',\n 'INSENSITIVE',\n 'LINES',\n 'LOAD',\n 'OFFSET',\n 'ONE',\n 'PARTITION',\n 'PARTITIONS',\n 'PURGE',\n 'RANGE',\n 'RECOVER',\n 'REGEXP',\n 'RENAME',\n 'REPEATABLE',\n 'REPLACE',\n 'RLIKE',\n 'SCHEMAS',\n 'SENSITIVE',\n 'SHOW',\n 'STRAIGHT_JOIN',\n 'TABLES',\n 'TERMINATED',\n 'TRUNCATE',\n 'USE',\n 'ARRAY',\n 'BINARY',\n 'BOOLEAN',\n 'CHAR',\n 'CHARACTER',\n 'CLOB',\n 'DATE',\n 'DECIMAL',\n 'DOUBLE',\n 'FLOAT',\n 'INT',\n 'INTEGER',\n 'INTERVAL',\n 'LARGE',\n 'NATIONAL',\n 'NCHAR',\n 'NCLOB',\n 'NUMERIC',\n 'TIMESTAMP',\n 'VARCHAR',\n 'VARYING',\n 'BLOB',\n 'TINYINT',\n 'BIGINT',\n 'VARBINARY',\n 'DATETIME',\n 'GROUPS',\n 'OVER',\n 'UNBOUNDED',\n 'PRECEDING',\n 'FOLLOWING',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'FORMAT',\n 'OCTET_LENGTH',\n 'POSITION',\n 'DIV',\n];\n\n// 默认 sql 函数\nexport const defaultFunctions = [\n 'COUNT',\n 'CURRENT_TIMESTAMP',\n 'REPEAT',\n 'SPACE',\n 'USER',\n 'GROUP_CONCAT',\n 'AVG',\n 'COALESCE',\n 'MAX',\n 'MIN',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUM',\n 'PRECISION',\n 'DENSE_RANK',\n 'RANK',\n 'ROW_NUMBER',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n 'LAG',\n 'LEAD',\n 'IFNULL',\n 'CONCAT',\n 'SUBSTRING',\n 'LENGTH',\n 'TRIM',\n 'UPPER',\n 'LOWER',\n 'NOW',\n 'DAYOFWEEK',\n 'DAYOFMONTH',\n 'DAYOFYEAR',\n 'WEEKOFYEAR',\n 'DATE_ADD',\n 'DATE_SUB',\n 'DATEDIFF',\n 'EXTRACT',\n 'FROM_UNIXTIME',\n 'UNIX_TIMESTAMP',\n 'VAR_POP',\n 'VAR_SAMP',\n 'VARIANCE',\n 'ABS',\n 'ACOS',\n 'ASIN',\n 'ATAN',\n 'CEIL',\n 'CEILING',\n 'COS',\n 'DEGREES',\n 'EXP',\n 'FLOOR',\n 'LN',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'PI',\n 'POW',\n 'POWER',\n 'RADIANS',\n 'RAND',\n 'ROUND',\n 'SIGN',\n 'SIN',\n 'SQRT',\n 'TAN',\n 'ASCII',\n 'BIN',\n 'CHAR_LENGTH',\n 'CHARACTER_LENGTH',\n 'CONCAT_WS',\n 'FIND_IN_SET',\n 'HEX',\n 'INSTR',\n 'LCASE',\n 'LOCATE',\n 'LPAD',\n 'LTRIM',\n 'REVERSE',\n 'RPAD',\n 'RTRIM',\n 'UCASE',\n 'NULLIF',\n 'VERSION',\n];\n\n// starrocks 关键词\nexport const srKeywords = [\n 'ADD',\n 'AGGREGATE',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARE',\n 'ARRAY_APPEND',\n 'ARRAY_PREPEND',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'AT',\n 'AUTHORIZATION',\n 'BEGIN',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n 'BLOB',\n 'BOOLEAN',\n 'BOTH',\n 'BROKER',\n 'BY',\n 'CARDINALITY',\n 'CASCADE',\n 'CASCADED',\n 'CASE',\n 'CATALOG',\n 'CHANGE',\n 'CHAR',\n 'CHARACTER',\n 'CLOB',\n 'COLLATE',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'CONDITION',\n 'CONNECT',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONVERT',\n 'CORRESPONDING',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CUME_DIST',\n 'CURRENT',\n 'CURRENT_DEFAULT_TRANSFORM_GROUP',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DATABASE',\n 'DATABASES',\n 'DATETIME',\n 'DEALLOCATE',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DEREF',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISCONNECT',\n 'DISTINCT',\n 'DISTRIBUTED',\n 'DIV',\n 'DOUBLE',\n 'DROP',\n 'DUPLICATE',\n 'DYNAMIC',\n 'EACH',\n 'ELEMENT_AT',\n 'ELSE',\n 'END',\n 'END-EXEC',\n 'EQUALS',\n 'ESCAPE',\n 'ESCAPED',\n 'EVERY',\n 'EXCEPT',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'EXTENDED',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FIELDS',\n 'FIRST',\n 'FLOAT',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FREE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GET',\n 'GLOBAL',\n 'GRANT',\n 'GROUP',\n 'GROUPING',\n 'GROUPING_ID',\n 'GROUPS',\n 'HASH',\n 'HAVING',\n 'HOLD',\n 'IGNORE',\n 'IN',\n 'INDEX',\n 'INDICATOR',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'IS',\n 'JOIN',\n 'JSON_ARRAYAGG',\n 'JSON_OBJECTAGG',\n 'KEY',\n 'LARGE',\n 'LAST',\n 'LATERAL',\n 'LEADING',\n 'LEFT',\n 'LESS THAN',\n 'LIKE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCAL',\n 'MATCH',\n 'MATERIALIZED',\n 'MATERIALIZED VIEW',\n 'MERGE',\n 'METHOD',\n 'MODIFIES',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NCLOB',\n 'NO',\n 'NONE',\n 'NOT',\n 'NTH_VALUE',\n 'NTILE',\n 'NULL',\n 'NUMERIC',\n 'OF',\n 'OFFSET',\n 'ON',\n 'ONE',\n 'ONLY',\n 'OR',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAPS',\n 'PARTITION',\n 'PARTITIONS',\n 'PAUSE',\n 'PERCENT_RANK',\n 'PIPE',\n 'PRECEDING',\n 'PREPARE',\n 'PRIMARY',\n 'PROCEDURE',\n 'PROFILE',\n 'PROPERTIES',\n 'PURGE',\n 'RANDOM',\n 'RANGE',\n 'READS',\n 'RECOVER',\n 'RECURSIVE',\n 'REF',\n 'REFERENCES',\n 'REFERENCING',\n 'REGEXP',\n 'RELEASE',\n 'RENAME',\n 'REPEATABLE',\n 'REPLACE',\n 'RESOURCE',\n 'RESTRICT',\n 'RESUME',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROLE',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROUTINE',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCHEMAS',\n 'SCROLL',\n 'SEARCH',\n 'SELECT',\n 'SENSITIVE',\n 'SET',\n 'SHOW',\n 'SIMILAR',\n 'SOME',\n 'SPECIFICTYPE',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STAGE',\n 'STATIC',\n 'STORAGE',\n 'STRAIGHT_JOIN',\n 'STREAM',\n 'SYNC',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLES',\n 'TABLET',\n 'TASK',\n 'TERMINATED',\n 'THEN',\n 'TIMESTAMP',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TINYINT',\n 'TO',\n 'TRAILING',\n 'TRANSLATION',\n 'TREAT',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'TTL',\n 'UNBOUNDED',\n 'UNION',\n 'UNION ALL',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UPDATE',\n 'UPSERT',\n 'USE',\n 'USING',\n 'VALUES',\n 'VARBINARY',\n 'VARCHAR',\n 'VARYING',\n 'VIEW',\n 'WAREHOUSE',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WITH',\n 'WITHOUT',\n 'ARRAY',\n 'CAST',\n 'CURRENT_DATE',\n 'DATE',\n 'DAY',\n 'HOUR',\n 'IF',\n 'LOCALTIMESTAMP',\n 'MAP',\n 'MICROSECOND',\n 'MINUTE',\n 'MONTH',\n 'OCTET_LENGTH',\n 'POSITION',\n 'SECOND',\n 'WEEK',\n 'YEAR',\n];\n\n// starrocks 函数\nexport const srFunctions = [\n 'ASCII',\n 'BIN',\n 'CHARACTER_LENGTH',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DENSE_RANK',\n 'FIRST_VALUE',\n 'GROUP_CONCAT',\n 'HEX',\n 'LAG',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'PRECISION',\n 'RANK',\n 'ROW_NUMBER',\n 'SPACE',\n 'UCASE',\n 'USER',\n 'VERSION',\n 'WEEKOFYEAR',\n 'ABS',\n 'ACOS',\n 'ADDDATE',\n 'ANY_VALUE',\n 'APPROX_COUNT_DISTINCT',\n 'ARRAY_CONTAINS',\n 'ARRAY_DISTINCT',\n 'ARRAY_FILTER',\n 'ARRAY_LENGTH',\n 'ARRAY_MAP',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_REMOVE',\n 'ARRAY_SLICE',\n 'ARRAY_SORT',\n 'ARRAY_SORTBY',\n 'ARRAY_SUM',\n 'ASIN',\n 'ATAN',\n 'ATAN2',\n 'AVG',\n 'BITMAP_AND',\n 'BITMAP_COUNT',\n 'BITMAP_FROM_ARRAY',\n 'BITMAP_HASH',\n 'BITMAP_INTERSECT',\n 'BITMAP_OR',\n 'BITMAP_UNION',\n 'BITMAP_UNION_COUNT',\n 'BITMAP_XOR',\n 'CBRT',\n 'CEIL',\n 'CEILING',\n 'CHAR_LENGTH',\n 'COALESCE',\n 'CONCAT',\n 'CONCAT_WS',\n 'CORR',\n 'COS',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CURRENT_TIMESTAMP',\n 'DATEDIFF',\n 'DATE_ADD',\n 'DATE_DIFF',\n 'DATE_FORMAT',\n 'DATE_SUB',\n 'DATE_TRUNC',\n 'DEGREES',\n 'E',\n 'EXP',\n 'EXTRACT',\n 'FILTER',\n 'FIND_IN_SET',\n 'FLOOR',\n 'FORMAT_STRING',\n 'FROM_UNIXTIME',\n 'GREATEST',\n 'HLL_CARDINALITY',\n 'HLL_HASH',\n 'HLL_RAW_AGG',\n 'HLL_UNION_AGG',\n 'IFF',\n 'IFNULL',\n 'INITCAP',\n 'INSTR',\n 'JSON_ARRAY',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_OBJECT',\n 'JSON_PARSE',\n 'JSON_QUERY',\n 'JSON_TYPE',\n 'JSON_VALUE',\n 'LEAST',\n 'LENGTH',\n 'LN',\n 'LOCALTIME',\n 'LOCATE',\n 'LOG',\n 'LOG10',\n 'LOG2',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAKE_DATE',\n 'MAKE_TIMESTAMP',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'MAX',\n 'MILLISECOND',\n 'MIN',\n 'MOD',\n 'NDV',\n 'NOW',\n 'NULLIF',\n 'NVL',\n 'NVL2',\n 'PARSE_JSON',\n 'PERCENTILE_APPROX',\n 'PI',\n 'POW',\n 'POWER',\n 'QUARTER',\n 'RADIANS',\n 'RAND',\n 'REDUCE',\n 'REGEXP_EXTRACT',\n 'REGEXP_LIKE',\n 'REGEXP_REPLACE',\n 'REPEAT',\n 'REVERSE',\n 'ROUND',\n 'RPAD',\n 'RTRIM',\n 'SIGN',\n 'SIN',\n 'SPLIT',\n 'SPLIT_PART',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'STR_TO_DATE',\n 'SUBDATE',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'TAN',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TIME_SLICE',\n 'TO_BITMAP',\n 'TO_DATE',\n 'TRANSFORM',\n 'TRANSLATE',\n 'TRIM',\n 'TRUNC',\n 'TRY_CAST',\n 'UNIX_TIMESTAMP',\n 'UPPER',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n 'WEEK_ISO',\n 'WIDTH_BUCKET',\n];\n\n// impala 关键词\nexport const impalaKeywords = [\n 'ADD',\n 'ADDDATE',\n 'ALL',\n 'ALLOCATE',\n 'ALTER',\n 'ANALYZE',\n 'AND',\n 'ANY',\n 'ARE',\n 'ARRAY',\n 'ARRAY_APPEND',\n 'ARRAY_CONTAINS',\n 'ARRAY_DISTINCT',\n 'ARRAY_MAX',\n 'ARRAY_MIN',\n 'ARRAY_POSITION',\n 'ARRAY_PREPEND',\n 'ARRAY_REMOVE',\n 'ARRAY_SLICE',\n 'ARRAY_SORT',\n 'ARRAY_SORTBY',\n 'ARRAY_SUM',\n 'AS',\n 'ASC',\n 'ASENSITIVE',\n 'AT',\n 'ATAN2',\n 'AUTHORIZATION',\n 'AVRO',\n 'BEGIN',\n 'BETWEEN',\n 'BIGINT',\n 'BINARY',\n 'BLOB',\n 'BOOLEAN',\n 'BOTH',\n 'BY',\n 'CARDINALITY',\n 'CASCADE',\n 'CASCADED',\n 'CASE',\n 'CBRT',\n 'CHANGE',\n 'CHAR',\n 'CHARACTER',\n 'CLOB',\n 'COLLATE',\n 'COLUMN',\n 'COLUMNS',\n 'COMMENT',\n 'COMMIT',\n 'COMPUTE',\n 'CONDITION',\n 'CONNECT',\n 'CONSTRAINT',\n 'CONTAINS',\n 'CONVERT',\n 'CORRESPONDING',\n 'CREATE',\n 'CROSS',\n 'CUBE',\n 'CUME_DIST',\n 'CURRENT',\n 'CURRENT_DATE',\n 'CURRENT_DEFAULT_TRANSFORM_GROUP',\n 'CURRENT_PATH',\n 'CURRENT_ROLE',\n 'CURRENT_TIME',\n 'CURRENT_TRANSFORM_GROUP_FOR_TYPE',\n 'CURSOR',\n 'CYCLE',\n 'DATA',\n 'DATABASE',\n 'DATABASES',\n 'DATE',\n 'DATETIME',\n 'DATE_DIFF',\n 'DATE_FORMAT',\n 'DATE_TRUNC',\n 'DEALLOCATE',\n 'DECIMAL',\n 'DECLARE',\n 'DEFAULT',\n 'DELETE',\n 'DELIMITED',\n 'DEREF',\n 'DESC',\n 'DESCRIBE',\n 'DETERMINISTIC',\n 'DISCONNECT',\n 'DISTINCT',\n 'DIV',\n 'DOUBLE',\n 'DROP',\n 'DYNAMIC',\n 'E',\n 'EACH',\n 'ELEMENT_AT',\n 'ELSE',\n 'END',\n 'END-EXEC',\n 'EQUALS',\n 'ESCAPE',\n 'ESCAPED',\n 'EVERY',\n 'EXCEPT',\n 'EXEC',\n 'EXECUTE',\n 'EXISTS',\n 'EXPLAIN',\n 'EXTENDED',\n 'EXTERNAL',\n 'FALSE',\n 'FETCH',\n 'FIELDS',\n 'FILTER',\n 'FIRST',\n 'FLOAT',\n 'FOLLOWING',\n 'FOR',\n 'FOREIGN',\n 'FORMAT',\n 'FORMAT_STRING',\n 'FREE',\n 'FROM',\n 'FULL',\n 'FUNCTION',\n 'GET',\n 'GLOBAL',\n 'GRANT',\n 'GREATEST',\n 'GROUP',\n 'GROUPING',\n 'GROUPING_ID',\n 'GROUPS',\n 'HASH',\n 'HAVING',\n 'HOLD',\n 'IFF',\n 'IGNORE',\n 'IN',\n 'INDICATOR',\n 'INITCAP',\n 'INNER',\n 'INOUT',\n 'INSENSITIVE',\n 'INSERT',\n 'INT',\n 'INTEGER',\n 'INTERSECT',\n 'INTERVAL',\n 'INTO',\n 'INVALIDATE',\n 'IS',\n 'JOIN',\n 'JSON_ARRAY',\n 'JSON_ARRAYAGG',\n 'JSON_EXISTS',\n 'JSON_EXTRACT',\n 'JSON_EXTRACT_SCALAR',\n 'JSON_KEYS',\n 'JSON_LENGTH',\n 'JSON_OBJECT',\n 'JSON_OBJECTAGG',\n 'JSON_PARSE',\n 'JSON_QUERY',\n 'JSON_TYPE',\n 'JSON_VALUE',\n 'KEY',\n 'LARGE',\n 'LAST',\n 'LATERAL',\n 'LEADING',\n 'LEAST',\n 'LEFT',\n 'LIKE',\n 'LIMIT',\n 'LINES',\n 'LOAD',\n 'LOCAL',\n 'LOCALTIME',\n 'LOCALTIMESTAMP',\n 'LOCATION',\n 'MAKE_DATE',\n 'MAKE_TIMESTAMP',\n 'MATCH',\n 'MATERIALIZED',\n 'MATERIALIZED VIEW',\n 'MERGE',\n 'METADATA',\n 'METHOD',\n 'MICROSECOND',\n 'MILLISECOND',\n 'MODIFIES',\n 'NATIONAL',\n 'NATURAL',\n 'NCHAR',\n 'NCLOB',\n 'NO',\n 'NONE',\n 'NOT',\n 'NTH_VALUE',\n 'NTILE',\n 'NULL',\n 'NULLS',\n 'NUMERIC',\n 'NVL',\n 'NVL2',\n 'OCTET_LENGTH',\n 'OF',\n 'OFFSET',\n 'ON',\n 'ONE',\n 'ONLY',\n 'OR',\n 'ORC',\n 'ORDER',\n 'OUT',\n 'OUTER',\n 'OVER',\n 'OVERLAPS',\n 'OVERWRITE',\n 'PARQUET',\n 'PARSE_JSON',\n 'PARTITION',\n 'PARTITIONED',\n 'PARTITIONS',\n 'PERCENT_RANK',\n 'POSITION',\n 'PRECEDING',\n 'PREPARE',\n 'PRIMARY',\n 'PROCEDURE',\n 'PURGE',\n 'QUARTER',\n 'RANDOM',\n 'RANGE',\n 'READS',\n 'RECOVER',\n 'RECURSIVE',\n 'REDUCE',\n 'REF',\n 'REFERENCES',\n 'REFERENCING',\n 'REFRESH',\n 'REGEXP',\n 'REGEXP_LIKE',\n 'RELEASE',\n 'RENAME',\n 'REPEATABLE',\n 'REPLACE',\n 'RESTRICT',\n 'RETURNS',\n 'REVOKE',\n 'RIGHT',\n 'RLIKE',\n 'ROLE',\n 'ROLLBACK',\n 'ROLLUP',\n 'ROW',\n 'ROWS',\n 'SAVEPOINT',\n 'SCHEMA',\n 'SCHEMAS',\n 'SCROLL',\n 'SEARCH',\n 'SELECT',\n 'SENSITIVE',\n 'SEQUENCEFILE',\n 'SET',\n 'SHOW',\n 'SIMILAR',\n 'SOME',\n 'SPECIFICTYPE',\n 'SPLIT',\n 'SPLIT_PART',\n 'SQLEXCEPTION',\n 'SQLSTATE',\n 'SQLWARNING',\n 'STATIC',\n 'STATS',\n 'STORED',\n 'STRAIGHT_JOIN',\n 'STR_TO_DATE',\n 'SUBDATE',\n 'SYSTEM_USER',\n 'TABLE',\n 'TABLES',\n 'TBLPROPERTIES',\n 'TERMINATED',\n 'TEXTFILE',\n 'THEN',\n 'TIMESTAMP',\n 'TIMESTAMPADD',\n 'TIMESTAMPDIFF',\n 'TIMEZONE_HOUR',\n 'TIMEZONE_MINUTE',\n 'TIME_SLICE',\n 'TINYINT',\n 'TO',\n 'TRAILING',\n 'TRANSFORM',\n 'TRANSLATE',\n 'TRANSLATION',\n 'TREAT',\n 'TRIGGER',\n 'TRUE',\n 'TRUNCATE',\n 'TRY_CAST',\n 'UNBOUNDED',\n 'UNION',\n 'UNION ALL',\n 'UNIQUE',\n 'UNKNOWN',\n 'UNNEST',\n 'UPDATE',\n 'UPSERT',\n 'USE',\n 'USING',\n 'VALUES',\n 'VARBINARY',\n 'VARCHAR',\n 'VARYING',\n 'VIEW',\n 'WEEK',\n 'WEEK_ISO',\n 'WHEN',\n 'WHENEVER',\n 'WHERE',\n 'WIDTH_BUCKET',\n 'WITH',\n 'WITHOUT',\n 'CAST',\n 'DAY',\n 'HOUR',\n 'IF',\n 'MAP',\n 'MINUTE',\n 'MONTH',\n 'SECOND',\n 'YEAR',\n];\n\n// impala 函数\nexport const impalaFunctions = [\n 'ACOS',\n 'ASCII',\n 'ASIN',\n 'ATAN',\n 'BIN',\n 'CHARACTER_LENGTH',\n 'CHAR_LENGTH',\n 'COS',\n 'DAYOFMONTH',\n 'DAYOFWEEK',\n 'DAYOFYEAR',\n 'DEGREES',\n 'DENSE_RANK',\n 'EXTRACT',\n 'FIND_IN_SET',\n 'FIRST_VALUE',\n 'GROUP_CONCAT',\n 'HEX',\n 'IFNULL',\n 'INSTR',\n 'LAG',\n 'LAST_VALUE',\n 'LCASE',\n 'LEAD',\n 'LOCATE',\n 'LOG',\n 'LOG2',\n 'PRECISION',\n 'RADIANS',\n 'RANK',\n 'REPEAT',\n 'REVERSE',\n 'ROW_NUMBER',\n 'SIGN',\n 'SIN',\n 'SPACE',\n 'TAN',\n 'UCASE',\n 'USER',\n 'VERSION',\n 'WEEKOFYEAR',\n 'ABS',\n 'ANY_VALUE',\n 'AVG',\n 'BASE64DECODE',\n 'BASE64ENCODE',\n 'BITAND',\n 'BITNOT',\n 'BITOR',\n 'BITXOR',\n 'CEIL',\n 'CEILING',\n 'COALESCE',\n 'CONCAT',\n 'CONCAT_WS',\n 'CORR',\n 'COUNT',\n 'COVAR_POP',\n 'COVAR_SAMP',\n 'CURRENT_TIMESTAMP',\n 'DATEDIFF',\n 'DATE_ADD',\n 'DATE_SUB',\n 'EXP',\n 'FLOOR',\n 'FROM_UNIXTIME',\n 'HISTOGRAM',\n 'LENGTH',\n 'LN',\n 'LOG10',\n 'LOWER',\n 'LPAD',\n 'LTRIM',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'MAX',\n 'MICROSECONDS_ADD',\n 'MICROSECONDS_SUB',\n 'MILLIS_ADD',\n 'MILLIS_SUB',\n 'MIN',\n 'MOD',\n 'NOW',\n 'NULLIF',\n 'PARSE_URL',\n 'PERCENTILE',\n 'PERCENTILE_APPROX',\n 'PI',\n 'POW',\n 'POWER',\n 'RAND',\n 'REGEXP_EXTRACT',\n 'REGEXP_REPLACE',\n 'ROTATELEFT',\n 'ROTATERIGHT',\n 'ROUND',\n 'RPAD',\n 'RTRIM',\n 'SQRT',\n 'STDDEV',\n 'STDDEV_POP',\n 'STDDEV_SAMP',\n 'SUBSTR',\n 'SUBSTRING',\n 'SUM',\n 'TO_DATE',\n 'TRIM',\n 'TRUNC',\n 'UNIX_TIMESTAMP',\n 'UPPER',\n 'VARIANCE',\n 'VAR_POP',\n 'VAR_SAMP',\n];\n\n// hive 关键词\nexport const hiveKeywords = [\n 'CREATE',\n 'ALTER',\n 'DROP',\n 'TRUNCATE',\n 'RENAME',\n 'COMMENT',\n 'PARTITION',\n 'PARTITIONED',\n 'BUCKET',\n 'BUCKETED',\n 'SORTED',\n 'INSERT',\n 'UPDATE',\n 'DELETE',\n 'MERGE',\n 'LOAD',\n 'SELECT',\n 'FROM',\n 'WHERE',\n 'GROUP BY',\n 'HAVING',\n 'ORDER BY',\n 'SORT BY',\n 'DISTRIBUTE BY',\n 'CLUSTER BY',\n 'AND',\n 'OR',\n 'NOT',\n 'IN',\n 'NOT IN',\n 'BETWEEN',\n 'LIKE',\n 'RLIKE',\n 'REGEXP',\n 'IS NULL',\n 'IS NOT NULL',\n 'JOIN',\n 'INNER JOIN',\n 'LEFT JOIN',\n 'RIGHT JOIN',\n 'FULL JOIN',\n 'CROSS JOIN',\n 'ON',\n 'USING',\n 'UNION',\n 'UNION ALL',\n 'INTERSECT',\n 'EXCEPT',\n 'OVER',\n 'PARTITION BY',\n 'ORDER BY',\n 'ROWS',\n 'RANGE',\n 'PRECEDING',\n 'FOLLOWING',\n 'CURRENT ROW',\n 'UNBOUNDED',\n 'COMMIT',\n 'ROLLBACK',\n 'SAVEPOINT',\n 'GRANT',\n 'REVOKE',\n 'AUTHORIZATION',\n 'USER',\n 'ROLE',\n 'AS',\n 'ALL',\n 'DISTINCT',\n 'LIMIT',\n 'OFFSET',\n 'CASE',\n 'WHEN',\n 'THEN',\n 'ELSE',\n 'END',\n 'IF',\n 'FOR',\n 'INTO',\n 'VALUES',\n 'TABLE',\n 'VIEW',\n 'DATABASE',\n 'SCHEMA',\n];\n\n// hive 函数\nexport const hiveFunctions = [\n // 字符串函数\n 'CONCAT',\n 'CONCAT_WS',\n 'SUBSTR',\n 'LENGTH',\n 'CHAR_LENGTH',\n 'LOWER',\n 'UPPER',\n 'TRIM',\n 'LTRIM',\n 'RTRIM',\n 'REGEXP_REPLACE',\n 'REGEXP_EXTRACT',\n 'SPLIT',\n // 日期与时间函数\n 'CURRENT_DATE',\n 'CURRENT_TIMESTAMP',\n 'DATE_FORMAT',\n 'DATEDIFF',\n 'DATE_ADD',\n 'DATE_SUB',\n 'TO_DATE',\n 'YEAR',\n 'MONTH',\n 'DAY',\n 'HOUR',\n 'MINUTE',\n 'SECOND',\n 'FROM_UNIXTIME',\n 'UNIX_TIMESTAMP',\n // 聚合函数\n 'COUNT',\n 'SUM',\n 'AVG',\n 'MAX',\n 'MIN',\n 'COLLECT_LIST',\n 'COLLECT_SET',\n // 窗口函数\n 'ROW_NUMBER',\n 'RANK',\n 'DENSE_RANK',\n 'SUM',\n 'AVG',\n 'MAX',\n 'MIN',\n 'LAG',\n 'LEAD',\n 'FIRST_VALUE',\n 'LAST_VALUE',\n // 数学函数\n 'ABS',\n 'CEIL',\n 'FLOOR',\n 'ROUND',\n 'SQRT',\n 'POW',\n 'RAND',\n // 条件与判断函数\n 'IF',\n 'CASE',\n 'COALESCE',\n 'NVL',\n // 数组与Map函数\n 'ARRAY_CONTAINS',\n 'SIZE',\n 'ARRAY_SORT',\n 'MAP_KEYS',\n 'MAP_VALUES',\n 'ELEMENT_AT',\n];\n\nexport const sqlKeywords = (type: SqlDialectType) => {\n switch (type) {\n case 'starrocks':\n return srKeywords;\n case 'impala':\n return impalaKeywords;\n case 'hive':\n return hiveKeywords;\n default:\n return defaultKeywords;\n }\n};\n\nexport const sqlFunctions = (type: SqlDialectType) => {\n switch (type) {\n case 'starrocks':\n return srFunctions;\n case 'impala':\n return impalaFunctions;\n case 'hive':\n return hiveFunctions;\n default:\n return defaultFunctions;\n }\n};\n"],
5
+ "mappings": ";AAGO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,gBAAgB;AAAA;AAAA,EAE3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,cAAc,CAAC,SAAyB;AACnD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,IAAM,eAAe,CAAC,SAAyB;AACpD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/DebounceInput/index.tsx"],
4
- "sourcesContent": ["/**\n * 组件名称:DebouncedInput\n * 组件描述:一个用于搜索的输入框组件,支持防抖\n * 组件使用场景:在需要搜索的场景中使用,如筛选、排序等\n * 组件参数说明:\n * - noDebounced: 是否不使用防抖\n * - currentValue: 当前值\n * - placeholder: 输入框提示文字\n * - onChange: 值改变时的回调\n * - delay: 防抖时间\n * - inputClass: 输入框样式类名\n * - allowClear: 是否允许清空\n * - style: 组件样式\n */\nimport { useDebounceFn } from 'ahooks';\nimport { Input } from 'antd';\nimport classNames from 'classnames';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styles from './index.module.less';\ntype PropsType = {\n noDebounced?: boolean;\n currentValue: string | undefined;\n placeholder?: string;\n onChange: (value: string) => void;\n delay?: number;\n inputClass?: any;\n allowClear?: boolean;\n style?: React.CSSProperties;\n noPrefixIcon?: boolean;\n disabled?: boolean;\n icon?: React.ReactNode;\n};\nconst DebouncedInput: React.FC<PropsType> = ({\n noDebounced = false,\n currentValue = '',\n placeholder = '搜索',\n onChange = (value: string) => {},\n delay = 150,\n inputClass,\n allowClear = true,\n style = {},\n noPrefixIcon = false,\n disabled = false,\n icon,\n}) => {\n const [value, setValue] = useState(currentValue);\n const lock = useRef(false);\n const changeFlag = useRef(false);\n useEffect(() => {\n if (changeFlag.current) {\n changeFlag.current = false;\n return;\n }\n setValue(currentValue);\n }, [currentValue]);\n\n const { run } = useDebounceFn(\n () => {\n onChange(value);\n },\n { wait: delay },\n );\n function handleChange(e: any) {\n const type = e.type;\n if (type === 'compositionstart') {\n lock.current = true;\n return;\n }\n const value = e.target.value;\n setValue(value);\n if (e.type === 'compositionend') {\n lock.current = false;\n }\n if (!lock.current) {\n changeFlag.current = true;\n if (noDebounced) {\n onChange(value);\n } else {\n run();\n }\n }\n }\n return (\n <Input\n allowClear={allowClear}\n style={style}\n className={classNames(styles.search, inputClass)}\n placeholder={placeholder}\n prefix={\n !noPrefixIcon &&\n (icon || <i className='iconfont icon-sousuo' style={{ fontSize: 14, lineHeight: '28px', color: '#999' }} />)\n }\n value={value}\n onChange={handleChange}\n onCompositionStart={handleChange}\n onCompositionEnd={handleChange}\n disabled={disabled}\n />\n );\n};\n\nexport default DebouncedInput;\n"],
5
- "mappings": ";AAcA,SAAS,qBAAqB;AAC9B,SAAS,aAAa;AACtB,OAAO,gBAAgB;AACvB,OAAO,SAAS,WAAW,QAAQ,gBAAgB;AACnD,OAAO,YAAY;AAcnB,IAAM,iBAAsC,CAAC;AAAA,EAC3C,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW,CAAC,UAAkB;AAAA,EAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AAAA,EACA,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,aAAa,OAAO,KAAK;AAC/B,YAAU,MAAM;AACd,QAAI,WAAW,SAAS;AACtB,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,aAAS,YAAY;AAAA,EACvB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,EAAE,IAAI,IAAI;AAAA,IACd,MAAM;AACJ,eAAS,KAAK;AAAA,IAChB;AAAA,IACA,EAAE,MAAM,MAAM;AAAA,EAChB;AACA,WAAS,aAAa,GAAQ;AAC5B,UAAM,OAAO,EAAE;AACf,QAAI,SAAS,oBAAoB;AAC/B,WAAK,UAAU;AACf;AAAA,IACF;AACA,UAAMA,SAAQ,EAAE,OAAO;AACvB,aAASA,MAAK;AACd,QAAI,EAAE,SAAS,kBAAkB;AAC/B,WAAK,UAAU;AAAA,IACjB;AACA,QAAI,CAAC,KAAK,SAAS;AACjB,iBAAW,UAAU;AACrB,UAAI,aAAa;AACf,iBAASA,MAAK;AAAA,MAChB,OAAO;AACL,YAAI;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,MAC/C;AAAA,MACA,QACE,CAAC,iBACA,QAAQ,oCAAC,OAAE,WAAU,wBAAuB,OAAO,EAAE,UAAU,IAAI,YAAY,QAAQ,OAAO,OAAO,GAAG;AAAA,MAE3G;AAAA,MACA,UAAU;AAAA,MACV,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,wBAAQ;",
4
+ "sourcesContent": ["/**\n * 组件名称:DebouncedInput\n * 组件描述:一个用于搜索的输入框组件,支持防抖\n * 组件使用场景:在需要搜索的场景中使用,如筛选、排序等\n * 组件参数说明:\n * - noDebounced: 是否不使用防抖\n * - currentValue: 当前值\n * - placeholder: 输入框提示文字\n * - onChange: 值改变时的回调\n * - delay: 防抖时间\n * - inputClass: 输入框样式类名\n * - allowClear: 是否允许清空\n * - style: 组件样式\n */\nimport { useDebounceFn } from 'ahooks';\nimport { Input } from 'antd';\nimport classNames from 'classnames';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styles from './index.module.less';\n\ntype PropsType = {\n noDebounced?: boolean;\n currentValue: string | undefined;\n placeholder?: string;\n onChange: (value: string) => void;\n delay?: number;\n inputClass?: any;\n allowClear?: boolean;\n style?: React.CSSProperties;\n noPrefixIcon?: boolean;\n disabled?: boolean;\n icon?: React.ReactNode;\n};\nconst DebouncedInput: React.FC<PropsType> = ({\n noDebounced = false,\n currentValue = '',\n placeholder = '搜索',\n onChange = (value: string) => {},\n delay = 150,\n inputClass,\n allowClear = true,\n style = {},\n noPrefixIcon = false,\n disabled = false,\n icon,\n}) => {\n const [value, setValue] = useState(currentValue);\n const lock = useRef(false);\n const changeFlag = useRef(false);\n useEffect(() => {\n if (changeFlag.current) {\n changeFlag.current = false;\n return;\n }\n setValue(currentValue);\n }, [currentValue]);\n\n const { run } = useDebounceFn(\n () => {\n onChange(value);\n },\n { wait: delay },\n );\n function handleChange(e: any) {\n const type = e.type;\n if (type === 'compositionstart') {\n lock.current = true;\n return;\n }\n const value = e.target.value;\n setValue(value);\n if (e.type === 'compositionend') {\n lock.current = false;\n }\n if (!lock.current) {\n changeFlag.current = true;\n if (noDebounced) {\n onChange(value);\n } else {\n run();\n }\n }\n }\n return (\n <Input\n allowClear={allowClear}\n style={style}\n className={classNames(styles.search, inputClass)}\n placeholder={placeholder}\n prefix={\n !noPrefixIcon &&\n (icon || <i className='iconfont icon-sousuo' style={{ fontSize: 14, lineHeight: '28px', color: '#999' }} />)\n }\n value={value}\n onChange={handleChange}\n onCompositionStart={handleChange}\n onCompositionEnd={handleChange}\n disabled={disabled}\n />\n );\n};\n\nexport default DebouncedInput;\n"],
5
+ "mappings": ";AAcA,SAAS,qBAAqB;AAC9B,SAAS,aAAa;AACtB,OAAO,gBAAgB;AACvB,OAAO,SAAS,WAAW,QAAQ,gBAAgB;AACnD,OAAO,YAAY;AAenB,IAAM,iBAAsC,CAAC;AAAA,EAC3C,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW,CAAC,UAAkB;AAAA,EAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AAAA,EACA,aAAa;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,eAAe;AAAA,EACf,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,OAAO,OAAO,KAAK;AACzB,QAAM,aAAa,OAAO,KAAK;AAC/B,YAAU,MAAM;AACd,QAAI,WAAW,SAAS;AACtB,iBAAW,UAAU;AACrB;AAAA,IACF;AACA,aAAS,YAAY;AAAA,EACvB,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,EAAE,IAAI,IAAI;AAAA,IACd,MAAM;AACJ,eAAS,KAAK;AAAA,IAChB;AAAA,IACA,EAAE,MAAM,MAAM;AAAA,EAChB;AACA,WAAS,aAAa,GAAQ;AAC5B,UAAM,OAAO,EAAE;AACf,QAAI,SAAS,oBAAoB;AAC/B,WAAK,UAAU;AACf;AAAA,IACF;AACA,UAAMA,SAAQ,EAAE,OAAO;AACvB,aAASA,MAAK;AACd,QAAI,EAAE,SAAS,kBAAkB;AAC/B,WAAK,UAAU;AAAA,IACjB;AACA,QAAI,CAAC,KAAK,SAAS;AACjB,iBAAW,UAAU;AACrB,UAAI,aAAa;AACf,iBAASA,MAAK;AAAA,MAChB,OAAO;AACL,YAAI;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,WAAW,OAAO,QAAQ,UAAU;AAAA,MAC/C;AAAA,MACA,QACE,CAAC,iBACA,QAAQ,oCAAC,OAAE,WAAU,wBAAuB,OAAO,EAAE,UAAU,IAAI,YAAY,QAAQ,OAAO,OAAO,GAAG;AAAA,MAE3G;AAAA,MACA,UAAU;AAAA,MACV,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,wBAAQ;",
6
6
  "names": ["value"]
7
7
  }
@@ -1,3 +1,17 @@
1
+ /**
2
+ * 组件名称:MultipleSelect
3
+ * 组件描述:一个用于多选的组件,支持搜索和选择
4
+ * 组件使用场景:在需要选择多个值的场景中使用,如筛选、排序等
5
+ * 组件参数说明:
6
+ * - name: 组件名称
7
+ * - value: 选中的值
8
+ * - onChange: 值改变时的回调
9
+ * - options: 选项列表
10
+ * - style: 组件样式
11
+ * - popoverStyle: 弹窗样式
12
+ * - icon: 组件图标
13
+ * - autoConfirm: 是否自动确认,默认为true。如果为false,则显示确定和取消按钮,点击确定后触发onChange
14
+ */
1
15
  import type { FC } from 'react';
2
16
  import React from 'react';
3
17
  type PageTypes = {
@@ -1,9 +1,9 @@
1
1
  // src/components/MultipleSelect/index.tsx
2
- import TextWithTooltip from "../TextWithToolTip";
3
2
  import { Button, Checkbox, ConfigProvider, Flex, message, Popover, Tooltip } from "antd";
4
3
  import classNames from "classnames";
5
4
  import React, { useEffect, useMemo, useRef, useState } from "react";
6
5
  import { AutoSizer, List } from "react-virtualized";
6
+ import TextWithTooltip from "../TextWithToolTip";
7
7
  import DebounceInput from "../DebounceInput";
8
8
  import styles from "./index.module.less";
9
9
  var MultipleSelect = ({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/MultipleSelect/index.tsx"],
4
- "sourcesContent": ["/**\n * 组件名称:MultipleSelect\n * 组件描述:一个用于多选的组件,支持搜索和选择\n * 组件使用场景:在需要选择多个值的场景中使用,如筛选、排序等\n * 组件参数说明:\n * - name: 组件名称\n * - value: 选中的值\n * - onChange: 值改变时的回调\n * - options: 选项列表\n * - style: 组件样式\n * - popoverStyle: 弹窗样式\n * - icon: 组件图标\n * - autoConfirm: 是否自动确认,默认为true。如果为false,则显示确定和取消按钮,点击确定后触发onChange\n */\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport { Button, Checkbox, ConfigProvider, Flex, message, Popover, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AutoSizer, List } from 'react-virtualized';\nimport DebounceInput from '../DebounceInput';\nimport styles from './index.module.less';\n\ntype PageTypes = {\n name?: string;\n value: (string | number)[];\n onChange: (value: (string | number)[]) => void;\n options: { label: string; value: string | number; isSelectAll?: boolean }[];\n style?: React.CSSProperties;\n popoverStyle?: React.CSSProperties;\n icon?: React.ReactNode;\n noXiala?: boolean;\n minCount?: number;\n disabledItems?: (string | number)[] | undefined; // 禁用选项\n disabledMessages?: string; // 禁用提示\n noAllSelect?: boolean; // 是否不显示全选选项\n autoConfirm?: boolean; // 是否自动确认,默认为true,如果为false则显示确定和取消按钮\n};\n\nconst MultipleSelect: FC<PageTypes> = ({\n name,\n value = [],\n onChange,\n options = [],\n style,\n popoverStyle,\n icon,\n noXiala = false,\n minCount = 0,\n disabledItems,\n disabledMessages,\n noAllSelect = false,\n autoConfirm = true,\n}) => {\n const [searchKey, setSearchKey] = useState('');\n const [open, setOpen] = useState(false);\n const [tempValue, setTempValue] = useState<(string | number)[]>([]); // 临时存储选中的值\n const listRef = useRef(null);\n\n useEffect(() => {\n setTimeout(() => {\n setSearchKey('');\n }, 200);\n }, [open]);\n\n // 当弹窗打开时,初始化临时值\n useEffect(() => {\n if (open) {\n setTempValue(value);\n }\n }, [open, value]);\n\n const handlePopOpen = (visible: boolean) => {\n setOpen(visible);\n };\n\n const itemClick = (v: string | number, checked: boolean) => {\n const currentValue = autoConfirm ? value : tempValue;\n\n if (checked && currentValue.filter((f) => f !== v).length < minCount) {\n message.warning(`至少选择${minCount}个`);\n return;\n }\n\n const newValue = checked ? currentValue?.filter((f) => f !== v) : [...currentValue, v];\n\n if (autoConfirm) {\n // 自动确认模式,直接触发onChange\n onChange(newValue);\n } else {\n // 非自动确认模式,更新临时值\n setTempValue(newValue);\n }\n };\n\n const filterOptions = useMemo(() => {\n const key = searchKey.trim().toUpperCase();\n const filtered = options.filter((m) => {\n if (key) {\n return m.label.toUpperCase().includes(key);\n }\n return true;\n });\n // 添加全选选项到列表开头\n return noAllSelect ? filtered : [{ label: '全选', value: '__selectAll__', isSelectAll: true }, ...filtered];\n }, [searchKey, options]);\n\n const rowRenderer = ({ index, key, style }: { index: number; key: string; style: React.CSSProperties }) => {\n const m = filterOptions[index];\n const currentValue = autoConfirm ? value : tempValue;\n\n // 处理全选选项\n if (m.isSelectAll) {\n return (\n <div key={key} style={style} className={styles.checkAll}>\n <ConfigProvider\n theme={{\n token: {\n controlInteractiveSize: 14,\n },\n }}\n >\n <Checkbox\n checked={currentValue.length === options.length}\n indeterminate={currentValue.length > 0 && currentValue.length < options.length}\n onChange={(e) => {\n const newValue = e.target.checked ? options.map((m) => m.value) : [];\n if (autoConfirm) {\n onChange(newValue);\n } else {\n setTempValue(newValue);\n }\n }}\n >\n 全选\n </Checkbox>\n </ConfigProvider>\n </div>\n );\n }\n\n // 处理普通选项\n return (\n <Tooltip\n title={disabledItems?.includes(m.value) ? disabledMessages || '该选项不能改变状态' : ''}\n color='#fff'\n styles={{ body: { color: '#333', fontSize: 12 } }}\n key={key}\n style={style}\n >\n <div\n style={style}\n className={classNames(styles.optionItem, currentValue?.includes(m.value) ? styles.active : null)}\n // 可以保留整行点击\n onClick={() => {\n if (disabledItems?.includes(m.value)) {\n return;\n }\n itemClick(m.value, currentValue?.includes(m.value));\n }}\n >\n <ConfigProvider\n theme={{\n token: {\n controlInteractiveSize: 14,\n },\n }}\n >\n <Checkbox\n disabled={disabledItems?.includes(m.value)}\n checked={currentValue?.includes(m.value)}\n onChange={() => {\n itemClick(m.value, currentValue?.includes(m.value));\n }}\n // 阻止点击Checkbox时冒泡到整行\n onClick={(e) => e.stopPropagation()}\n style={{ marginRight: 8 }}\n />\n </ConfigProvider>\n <TextWithTooltip\n text={m.label}\n style={{ color: disabledItems?.includes(m.value) ? '#999' : '#333' }}\n width='100%'\n maxWidth='100%'\n className={styles.label}\n highlight={searchKey}\n />\n </div>\n </Tooltip>\n );\n };\n\n const PopoverContent = (\n <div className={styles.popoverContent} style={popoverStyle}>\n <DebounceInput\n allowClear={true}\n inputClass={styles.searchInput}\n placeholder='搜索'\n currentValue={searchKey}\n onChange={(value) => {\n setSearchKey(value);\n }}\n ></DebounceInput>\n <div className={styles.popoverContentList}>\n {filterOptions.length === 0 ? (\n <div className={styles.emptyItem}>当前搜索条件无数据</div>\n ) : (\n <AutoSizer\n style={{\n background: '#fff',\n width: '100%',\n // maxHeight: 400,\n minHeight: 35,\n height: 'auto',\n }}\n >\n {({ width }: { width: number }) => {\n let height = 35;\n if (filterOptions.length <= 10) {\n height = 35 * filterOptions.length || 35;\n } else {\n height = 35 * 10;\n }\n return (\n <List\n ref={listRef}\n overscanRowCount={5}\n width={width}\n height={height}\n rowCount={filterOptions.length}\n rowHeight={35}\n rowRenderer={rowRenderer}\n />\n );\n }}\n </AutoSizer>\n )}\n </div>\n {!autoConfirm && (\n <div className={styles.popoverFooter}>\n <Button\n size='small'\n type='primary'\n onClick={() => {\n onChange(tempValue);\n setOpen(false);\n }}\n >\n 确定\n </Button>\n <Button\n size='small'\n // className={styles.cancelButton}\n onClick={() => {\n setTempValue(value);\n setOpen(false);\n }}\n >\n 取消\n </Button>\n </div>\n )}\n </div>\n );\n\n return (\n <Popover\n open={open}\n onOpenChange={handlePopOpen}\n fresh={true}\n title={false}\n arrow={false}\n content={PopoverContent}\n trigger='click'\n placement='bottomLeft'\n styles={{ body: { borderRadius: 2, padding: 0 } }}\n >\n <Button\n className={styles.button}\n style={style}\n icon={\n noXiala ? null : <i className='iconfont icon-xiala1' style={open ? { transform: 'rotate(180deg)' } : {}} />\n }\n iconPosition='end'\n onClick={() => {\n setOpen(!open);\n }}\n >\n <Flex justify='space-between' style={{ flex: 1, overflow: 'hidden' }}>\n {icon && icon}\n {name && <span className={styles.nameText}>{name}:</span>}\n <span className={styles.valueText} style={{ flex: 1 }}>\n {value?.length === 1 && options?.length === 1\n ? options?.find((m) => m.value === value?.[0])?.label\n : (value?.length || 0) + '/' + options?.length}\n </span>\n </Flex>\n </Button>\n </Popover>\n );\n};\n\nexport default MultipleSelect;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * 组件名称:MultipleSelect\n * 组件描述:一个用于多选的组件,支持搜索和选择\n * 组件使用场景:在需要选择多个值的场景中使用,如筛选、排序等\n * 组件参数说明:\n * - name: 组件名称\n * - value: 选中的值\n * - onChange: 值改变时的回调\n * - options: 选项列表\n * - style: 组件样式\n * - popoverStyle: 弹窗样式\n * - icon: 组件图标\n * - autoConfirm: 是否自动确认,默认为true。如果为false,则显示确定和取消按钮,点击确定后触发onChange\n */\n\nimport { Button, Checkbox, ConfigProvider, Flex, message, Popover, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport type { FC } from 'react';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AutoSizer, List } from 'react-virtualized';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport DebounceInput from '../DebounceInput';\nimport styles from './index.module.less';\n\ntype PageTypes = {\n name?: string;\n value: (string | number)[];\n onChange: (value: (string | number)[]) => void;\n options: { label: string; value: string | number; isSelectAll?: boolean }[];\n style?: React.CSSProperties;\n popoverStyle?: React.CSSProperties;\n icon?: React.ReactNode;\n noXiala?: boolean;\n minCount?: number;\n disabledItems?: (string | number)[] | undefined; // 禁用选项\n disabledMessages?: string; // 禁用提示\n noAllSelect?: boolean; // 是否不显示全选选项\n autoConfirm?: boolean; // 是否自动确认,默认为true,如果为false则显示确定和取消按钮\n};\n\nconst MultipleSelect: FC<PageTypes> = ({\n name,\n value = [],\n onChange,\n options = [],\n style,\n popoverStyle,\n icon,\n noXiala = false,\n minCount = 0,\n disabledItems,\n disabledMessages,\n noAllSelect = false,\n autoConfirm = true,\n}) => {\n const [searchKey, setSearchKey] = useState('');\n const [open, setOpen] = useState(false);\n const [tempValue, setTempValue] = useState<(string | number)[]>([]); // 临时存储选中的值\n const listRef = useRef(null);\n\n useEffect(() => {\n setTimeout(() => {\n setSearchKey('');\n }, 200);\n }, [open]);\n\n // 当弹窗打开时,初始化临时值\n useEffect(() => {\n if (open) {\n setTempValue(value);\n }\n }, [open, value]);\n\n const handlePopOpen = (visible: boolean) => {\n setOpen(visible);\n };\n\n const itemClick = (v: string | number, checked: boolean) => {\n const currentValue = autoConfirm ? value : tempValue;\n\n if (checked && currentValue.filter((f) => f !== v).length < minCount) {\n message.warning(`至少选择${minCount}个`);\n return;\n }\n\n const newValue = checked ? currentValue?.filter((f) => f !== v) : [...currentValue, v];\n\n if (autoConfirm) {\n // 自动确认模式,直接触发onChange\n onChange(newValue);\n } else {\n // 非自动确认模式,更新临时值\n setTempValue(newValue);\n }\n };\n\n const filterOptions = useMemo(() => {\n const key = searchKey.trim().toUpperCase();\n const filtered = options.filter((m) => {\n if (key) {\n return m.label.toUpperCase().includes(key);\n }\n return true;\n });\n // 添加全选选项到列表开头\n return noAllSelect ? filtered : [{ label: '全选', value: '__selectAll__', isSelectAll: true }, ...filtered];\n }, [searchKey, options]);\n\n const rowRenderer = ({ index, key, style }: { index: number; key: string; style: React.CSSProperties }) => {\n const m = filterOptions[index];\n const currentValue = autoConfirm ? value : tempValue;\n\n // 处理全选选项\n if (m.isSelectAll) {\n return (\n <div key={key} style={style} className={styles.checkAll}>\n <ConfigProvider\n theme={{\n token: {\n controlInteractiveSize: 14,\n },\n }}\n >\n <Checkbox\n checked={currentValue.length === options.length}\n indeterminate={currentValue.length > 0 && currentValue.length < options.length}\n onChange={(e) => {\n const newValue = e.target.checked ? options.map((m) => m.value) : [];\n if (autoConfirm) {\n onChange(newValue);\n } else {\n setTempValue(newValue);\n }\n }}\n >\n 全选\n </Checkbox>\n </ConfigProvider>\n </div>\n );\n }\n\n // 处理普通选项\n return (\n <Tooltip\n title={disabledItems?.includes(m.value) ? disabledMessages || '该选项不能改变状态' : ''}\n color='#fff'\n styles={{ body: { color: '#333', fontSize: 12 } }}\n key={key}\n style={style}\n >\n <div\n style={style}\n className={classNames(styles.optionItem, currentValue?.includes(m.value) ? styles.active : null)}\n // 可以保留整行点击\n onClick={() => {\n if (disabledItems?.includes(m.value)) {\n return;\n }\n itemClick(m.value, currentValue?.includes(m.value));\n }}\n >\n <ConfigProvider\n theme={{\n token: {\n controlInteractiveSize: 14,\n },\n }}\n >\n <Checkbox\n disabled={disabledItems?.includes(m.value)}\n checked={currentValue?.includes(m.value)}\n onChange={() => {\n itemClick(m.value, currentValue?.includes(m.value));\n }}\n // 阻止点击Checkbox时冒泡到整行\n onClick={(e) => e.stopPropagation()}\n style={{ marginRight: 8 }}\n />\n </ConfigProvider>\n <TextWithTooltip\n text={m.label}\n style={{ color: disabledItems?.includes(m.value) ? '#999' : '#333' }}\n width='100%'\n maxWidth='100%'\n className={styles.label}\n highlight={searchKey}\n />\n </div>\n </Tooltip>\n );\n };\n\n const PopoverContent = (\n <div className={styles.popoverContent} style={popoverStyle}>\n <DebounceInput\n allowClear={true}\n inputClass={styles.searchInput}\n placeholder='搜索'\n currentValue={searchKey}\n onChange={(value) => {\n setSearchKey(value);\n }}\n ></DebounceInput>\n <div className={styles.popoverContentList}>\n {filterOptions.length === 0 ? (\n <div className={styles.emptyItem}>当前搜索条件无数据</div>\n ) : (\n <AutoSizer\n style={{\n background: '#fff',\n width: '100%',\n // maxHeight: 400,\n minHeight: 35,\n height: 'auto',\n }}\n >\n {({ width }: { width: number }) => {\n let height = 35;\n if (filterOptions.length <= 10) {\n height = 35 * filterOptions.length || 35;\n } else {\n height = 35 * 10;\n }\n return (\n <List\n ref={listRef}\n overscanRowCount={5}\n width={width}\n height={height}\n rowCount={filterOptions.length}\n rowHeight={35}\n rowRenderer={rowRenderer}\n />\n );\n }}\n </AutoSizer>\n )}\n </div>\n {!autoConfirm && (\n <div className={styles.popoverFooter}>\n <Button\n size='small'\n type='primary'\n onClick={() => {\n onChange(tempValue);\n setOpen(false);\n }}\n >\n 确定\n </Button>\n <Button\n size='small'\n // className={styles.cancelButton}\n onClick={() => {\n setTempValue(value);\n setOpen(false);\n }}\n >\n 取消\n </Button>\n </div>\n )}\n </div>\n );\n\n return (\n <Popover\n open={open}\n onOpenChange={handlePopOpen}\n fresh={true}\n title={false}\n arrow={false}\n content={PopoverContent}\n trigger='click'\n placement='bottomLeft'\n styles={{ body: { borderRadius: 2, padding: 0 } }}\n >\n <Button\n className={styles.button}\n style={style}\n icon={\n noXiala ? null : <i className='iconfont icon-xiala1' style={open ? { transform: 'rotate(180deg)' } : {}} />\n }\n iconPosition='end'\n onClick={() => {\n setOpen(!open);\n }}\n >\n <Flex justify='space-between' style={{ flex: 1, overflow: 'hidden' }}>\n {icon && icon}\n {name && <span className={styles.nameText}>{name}:</span>}\n <span className={styles.valueText} style={{ flex: 1 }}>\n {value?.length === 1 && options?.length === 1\n ? options?.find((m) => m.value === value?.[0])?.label\n : (value?.length || 0) + '/' + options?.length}\n </span>\n </Flex>\n </Button>\n </Popover>\n );\n};\n\nexport default MultipleSelect;\n"],
5
+ "mappings": ";AAeA,SAAS,QAAQ,UAAU,gBAAgB,MAAM,SAAS,SAAS,eAAe;AAClF,OAAO,gBAAgB;AAEvB,OAAO,SAAS,WAAW,SAAS,QAAQ,gBAAgB;AAC5D,SAAS,WAAW,YAAY;AAChC,OAAO,qBAAqB;AAC5B,OAAO,mBAAmB;AAC1B,OAAO,YAAY;AAkBnB,IAAM,iBAAgC,CAAC;AAAA,EACrC;AAAA,EACA,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,UAAU,CAAC;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAChB,MAAM;AAtDN;AAuDE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAC7C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,WAAW,YAAY,IAAI,SAA8B,CAAC,CAAC;AAClE,QAAM,UAAU,OAAO,IAAI;AAE3B,YAAU,MAAM;AACd,eAAW,MAAM;AACf,mBAAa,EAAE;AAAA,IACjB,GAAG,GAAG;AAAA,EACR,GAAG,CAAC,IAAI,CAAC;AAGT,YAAU,MAAM;AACd,QAAI,MAAM;AACR,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,CAAC;AAEhB,QAAM,gBAAgB,CAAC,YAAqB;AAC1C,YAAQ,OAAO;AAAA,EACjB;AAEA,QAAM,YAAY,CAAC,GAAoB,YAAqB;AAC1D,UAAM,eAAe,cAAc,QAAQ;AAE3C,QAAI,WAAW,aAAa,OAAO,CAAC,MAAM,MAAM,CAAC,EAAE,SAAS,UAAU;AACpE,cAAQ,QAAQ,OAAO,WAAW;AAClC;AAAA,IACF;AAEA,UAAM,WAAW,UAAU,6CAAc,OAAO,CAAC,MAAM,MAAM,KAAK,CAAC,GAAG,cAAc,CAAC;AAErF,QAAI,aAAa;AAEf,eAAS,QAAQ;AAAA,IACnB,OAAO;AAEL,mBAAa,QAAQ;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,gBAAgB,QAAQ,MAAM;AAClC,UAAM,MAAM,UAAU,KAAK,EAAE,YAAY;AACzC,UAAM,WAAW,QAAQ,OAAO,CAAC,MAAM;AACrC,UAAI,KAAK;AACP,eAAO,EAAE,MAAM,YAAY,EAAE,SAAS,GAAG;AAAA,MAC3C;AACA,aAAO;AAAA,IACT,CAAC;AAED,WAAO,cAAc,WAAW,CAAC,EAAE,OAAO,MAAM,OAAO,iBAAiB,aAAa,KAAK,GAAG,GAAG,QAAQ;AAAA,EAC1G,GAAG,CAAC,WAAW,OAAO,CAAC;AAEvB,QAAM,cAAc,CAAC,EAAE,OAAO,KAAK,OAAAA,OAAM,MAAkE;AACzG,UAAM,IAAI,cAAc,KAAK;AAC7B,UAAM,eAAe,cAAc,QAAQ;AAG3C,QAAI,EAAE,aAAa;AACjB,aACE,oCAAC,SAAI,KAAU,OAAOA,QAAO,WAAW,OAAO,YAC7C;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,cACL,wBAAwB;AAAA,YAC1B;AAAA,UACF;AAAA;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS,aAAa,WAAW,QAAQ;AAAA,YACzC,eAAe,aAAa,SAAS,KAAK,aAAa,SAAS,QAAQ;AAAA,YACxE,UAAU,CAAC,MAAM;AACf,oBAAM,WAAW,EAAE,OAAO,UAAU,QAAQ,IAAI,CAACC,OAAMA,GAAE,KAAK,IAAI,CAAC;AACnE,kBAAI,aAAa;AACf,yBAAS,QAAQ;AAAA,cACnB,OAAO;AACL,6BAAa,QAAQ;AAAA,cACvB;AAAA,YACF;AAAA;AAAA,UACD;AAAA,QAED;AAAA,MACF,CACF;AAAA,IAEJ;AAGA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,QAAO,+CAAe,SAAS,EAAE,UAAS,oBAAoB,cAAc;AAAA,QAC5E,OAAM;AAAA,QACN,QAAQ,EAAE,MAAM,EAAE,OAAO,QAAQ,UAAU,GAAG,EAAE;AAAA,QAChD;AAAA,QACA,OAAOD;AAAA;AAAA,MAEP;AAAA,QAAC;AAAA;AAAA,UACC,OAAOA;AAAA,UACP,WAAW,WAAW,OAAO,aAAY,6CAAc,SAAS,EAAE,UAAS,OAAO,SAAS,IAAI;AAAA,UAE/F,SAAS,MAAM;AACb,gBAAI,+CAAe,SAAS,EAAE,QAAQ;AACpC;AAAA,YACF;AACA,sBAAU,EAAE,OAAO,6CAAc,SAAS,EAAE,MAAM;AAAA,UACpD;AAAA;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO;AAAA,gBACL,wBAAwB;AAAA,cAC1B;AAAA,YACF;AAAA;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,+CAAe,SAAS,EAAE;AAAA,cACpC,SAAS,6CAAc,SAAS,EAAE;AAAA,cAClC,UAAU,MAAM;AACd,0BAAU,EAAE,OAAO,6CAAc,SAAS,EAAE,MAAM;AAAA,cACpD;AAAA,cAEA,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,cAClC,OAAO,EAAE,aAAa,EAAE;AAAA;AAAA,UAC1B;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,EAAE;AAAA,YACR,OAAO,EAAE,QAAO,+CAAe,SAAS,EAAE,UAAS,SAAS,OAAO;AAAA,YACnE,OAAM;AAAA,YACN,UAAS;AAAA,YACT,WAAW,OAAO;AAAA,YAClB,WAAW;AAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EAEJ;AAEA,QAAM,iBACJ,oCAAC,SAAI,WAAW,OAAO,gBAAgB,OAAO,gBAC5C;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ,YAAY,OAAO;AAAA,MACnB,aAAY;AAAA,MACZ,cAAc;AAAA,MACd,UAAU,CAACE,WAAU;AACnB,qBAAaA,MAAK;AAAA,MACpB;AAAA;AAAA,EACD,GACD,oCAAC,SAAI,WAAW,OAAO,sBACpB,cAAc,WAAW,IACxB,oCAAC,SAAI,WAAW,OAAO,aAAW,WAAS,IAE3C;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA;AAAA,QAEP,WAAW;AAAA,QACX,QAAQ;AAAA,MACV;AAAA;AAAA,IAEC,CAAC,EAAE,MAAM,MAAyB;AACjC,UAAI,SAAS;AACb,UAAI,cAAc,UAAU,IAAI;AAC9B,iBAAS,KAAK,cAAc,UAAU;AAAA,MACxC,OAAO;AACL,iBAAS,KAAK;AAAA,MAChB;AACA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,kBAAkB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,UAAU,cAAc;AAAA,UACxB,WAAW;AAAA,UACX;AAAA;AAAA,MACF;AAAA,IAEJ;AAAA,EACF,CAEJ,GACC,CAAC,eACA,oCAAC,SAAI,WAAW,OAAO,iBACrB;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,SAAS,MAAM;AACb,iBAAS,SAAS;AAClB,gBAAQ,KAAK;AAAA,MACf;AAAA;AAAA,IACD;AAAA,EAED,GACA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MAEL,SAAS,MAAM;AACb,qBAAa,KAAK;AAClB,gBAAQ,KAAK;AAAA,MACf;AAAA;AAAA,IACD;AAAA,EAED,CACF,CAEJ;AAGF,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,cAAc;AAAA,MACd,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,EAAE;AAAA;AAAA,IAEhD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,OAAO;AAAA,QAClB;AAAA,QACA,MACE,UAAU,OAAO,oCAAC,OAAE,WAAU,wBAAuB,OAAO,OAAO,EAAE,WAAW,iBAAiB,IAAI,CAAC,GAAG;AAAA,QAE3G,cAAa;AAAA,QACb,SAAS,MAAM;AACb,kBAAQ,CAAC,IAAI;AAAA,QACf;AAAA;AAAA,MAEA,oCAAC,QAAK,SAAQ,iBAAgB,OAAO,EAAE,MAAM,GAAG,UAAU,SAAS,KAChE,QAAQ,MACR,QAAQ,oCAAC,UAAK,WAAW,OAAO,YAAW,MAAK,GAAC,GAClD,oCAAC,UAAK,WAAW,OAAO,WAAW,OAAO,EAAE,MAAM,EAAE,MACjD,+BAAO,YAAW,MAAK,mCAAS,YAAW,KACxC,wCAAS,KAAK,CAAC,MAAM,EAAE,WAAU,+BAAQ,SAAzC,mBAA8C,UAC7C,+BAAO,WAAU,KAAK,OAAM,mCAAS,OAC5C,CACF;AAAA,IACF;AAAA,EACF;AAEJ;AAEA,IAAO,yBAAQ;",
6
6
  "names": ["style", "m", "value"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/RefreshButton/index.tsx"],
4
- "sourcesContent": ["import { Button } from 'antd';\nimport React from 'react';\ntype Props = {\n handleRefresh: () => void;\n text?: string;\n style?: React.CSSProperties;\n};\n\nconst RefreshButton: React.FC<Props> = ({ handleRefresh, text = '刷新', style }) => {\n return (\n <Button\n style={style}\n onClick={() => {\n handleRefresh();\n }}\n icon={<i className='iconfont icon-refresh' style={{ color: '#3B86F9', fontSize: 14 }} />}\n >\n {text}\n </Button>\n );\n};\n\nexport default RefreshButton;\n"],
5
- "mappings": ";AAAA,SAAS,cAAc;AACvB,OAAO,WAAW;AAOlB,IAAM,gBAAiC,CAAC,EAAE,eAAe,OAAO,MAAM,MAAM,MAAM;AAChF,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS,MAAM;AACb,sBAAc;AAAA,MAChB;AAAA,MACA,MAAM,oCAAC,OAAE,WAAU,yBAAwB,OAAO,EAAE,OAAO,WAAW,UAAU,GAAG,GAAG;AAAA;AAAA,IAErF;AAAA,EACH;AAEJ;AAEA,IAAO,wBAAQ;",
4
+ "sourcesContent": ["import { Button } from 'antd';\nimport React from 'react';\n\ntype Props = {\n handleRefresh: () => void;\n text?: string;\n style?: React.CSSProperties;\n};\n\nconst RefreshButton: React.FC<Props> = ({ handleRefresh, text = '刷新', style }) => {\n return (\n <Button\n style={style}\n onClick={() => {\n handleRefresh();\n }}\n icon={<i className='iconfont icon-refresh' style={{ color: '#3B86F9', fontSize: 14 }} />}\n >\n {text}\n </Button>\n );\n};\n\nexport default RefreshButton;\n"],
5
+ "mappings": ";AAAA,SAAS,cAAc;AACvB,OAAO,WAAW;AAQlB,IAAM,gBAAiC,CAAC,EAAE,eAAe,OAAO,MAAM,MAAM,MAAM;AAChF,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS,MAAM;AACb,sBAAc;AAAA,MAChB;AAAA,MACA,MAAM,oCAAC,OAAE,WAAU,yBAAwB,OAAO,EAAE,OAAO,WAAW,UAAU,GAAG,GAAG;AAAA;AAAA,IAErF;AAAA,EACH;AAEJ;AAEA,IAAO,wBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,9 +1,9 @@
1
1
  // src/components/SearchWithHistory/index.tsx
2
- import TextWithTooltip from "../TextWithToolTip";
3
2
  import { ClockCircleOutlined, SearchOutlined } from "@ant-design/icons";
4
3
  import { useLocalStorageState } from "ahooks";
5
4
  import { ConfigProvider, Input, Popover } from "antd";
6
5
  import React, { useCallback, useEffect, useMemo, useState } from "react";
6
+ import TextWithTooltip from "../TextWithToolTip";
7
7
  import styles from "./index.module.less";
8
8
  var INPUT_THEME = {
9
9
  token: { colorText: "rgba(191, 199, 209, 1)" },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/SearchWithHistory/index.tsx"],
4
- "sourcesContent": ["import TextWithTooltip from '@/components/TextWithToolTip';\nimport { ClockCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport { useLocalStorageState } from 'ahooks';\nimport { ConfigProvider, Input, Popover } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport styles from './index.module.less';\n\ntype SearchWithHistoryProps = {\n /** localStorage 存储 key */\n localstorageKey: string;\n /** 可搜索的选项列表(含菜单路由、看板等) */\n list: { label: string; value: string; tag?: string }[];\n placeholder?: string;\n /** 选中项回调,value 为路由 path 或看板 id 等 */\n onClick: (value: string) => void;\n};\n\nconst INPUT_THEME = {\n token: { colorText: 'rgba(191, 199, 209, 1)' },\n components: {\n Input: {\n colorBgContainer: 'rgba(45, 56, 86, 1)',\n colorBorder: '#2D3856',\n borderRadius: 18,\n boxShadow: 'inset 0px -0.5px 0px 0px rgba(20, 31, 62, 0.5)',\n hoverBorderColor: 'rgba(0, 85, 255, 1)',\n paddingBlock: 6,\n },\n },\n};\n\n/**\n * 带历史记录的搜索弹层\n * - 无输入时展示最近搜索(localStorage 持久化)\n * - 有输入时展示匹配的菜单/看板列表\n */\nconst SearchWithHistory: React.FC<SearchWithHistoryProps> = ({\n localstorageKey = 'yk_search_history',\n list,\n placeholder = '搜索',\n onClick,\n}) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n const [historyList, setHistoryList] = useLocalStorageState<{ label: string; value: string; tag?: string }[]>(\n localstorageKey,\n { defaultValue: [] },\n );\n\n /** 选中项:执行回调并更新历史(同 value 则置顶) */\n const menuItemClick = useCallback(\n (item: { label: string; value: string; tag?: string }) => {\n onClick(item.value);\n setOpen(false);\n setHistoryList((prev = []) => [item, ...prev.filter((h) => h.value !== item.value)]);\n },\n [onClick, setHistoryList],\n );\n\n /** 清空历史 */\n const clearHistory = useCallback(() => {\n setOpen(false);\n setTimeout(() => setHistoryList([]), 100);\n }, [setHistoryList]);\n\n /** 匹配的选项列表(按 label 包含搜索词过滤) */\n const menuList = useMemo(() => list.filter((item) => item.label.includes(searchValue)), [list, searchValue]);\n\n /** 最近搜索列表 DOM */\n const historyContent = useMemo(\n () => (\n <div>\n <div className={styles.historyHeader}>\n <ClockCircleOutlined style={{ marginRight: 10, transform: 'translateY(-1px)' }} />\n <span>最近搜索</span>\n <i className='iconfont icon-lajitong' onClick={clearHistory} />\n </div>\n <div className={styles.historyList}>\n {historyList.map((item) => (\n <div className={styles.item} key={item.value} onClick={() => menuItemClick(item)}>\n <TextWithTooltip width={160} text={item.label} />\n {item.tag && <div className={styles.tag}>{item.tag}</div>}\n </div>\n ))}\n </div>\n </div>\n ),\n [historyList, clearHistory, menuItemClick],\n );\n\n /** 搜索结果列表 DOM */\n const listContent = useMemo(\n () => (\n <div>\n {menuList.map((item) => (\n <div key={item.value} className={styles.item} onClick={() => menuItemClick(item)}>\n <TextWithTooltip width={160} text={item.label} highlight={searchValue} />\n {item.tag && <div className={styles.tag}>{item.tag}</div>}\n </div>\n ))}\n </div>\n ),\n [menuList, searchValue, menuItemClick],\n );\n\n /**\n * 弹层内容:根据输入与历史决定\n * 1. 无历史 → null(不展示弹层)\n * 2. 有历史且无输入 → 最近搜索\n * 3. 有输入且无匹配 → 暂无搜索结果\n * 4. 有输入且匹配 → 菜单列表\n */\n const content = useMemo(() => {\n if (!searchValue) {\n if (historyList.length === 0) return null;\n return <div>{historyContent}</div>;\n }\n if (menuList.length === 0) return <div style={{ color: '#999' }}>暂无搜索结果</div>;\n return listContent;\n }, [searchValue, historyList, historyContent, menuList, listContent]);\n\n /** 内容为空时关闭弹层(如清空输入且无历史) */\n useEffect(() => {\n if (!content) setOpen(false);\n }, [content]);\n\n /** 有输入或有历史时显示弹层 */\n const shouldOpen = (value: string) => {\n if (value) return true;\n return historyList.length > 0;\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={(nextOpen) => {\n if (nextOpen && !content) return; // 无内容时不打开,避免空白弹层\n setOpen(nextOpen);\n }}\n className={styles.popover}\n styles={{ body: { borderRadius: 4, width: 250, paddingRight: 0 } }}\n fresh\n title={false}\n trigger='click'\n placement='bottomLeft'\n arrow={false}\n content={content}\n getPopupContainer={(triggerNode: HTMLElement) => triggerNode.parentNode as HTMLElement}\n autoAdjustOverflow={false}\n >\n <ConfigProvider theme={INPUT_THEME}>\n <Input\n className={styles.inputContainer}\n classNames={{ input: styles.input }}\n placeholder={placeholder}\n prefix={<SearchOutlined />}\n value={searchValue}\n onFocus={() => historyList.length > 0 && setOpen(true)}\n onChange={(e) => {\n const val = e.target.value;\n setSearchValue(val);\n setOpen(shouldOpen(val));\n }}\n />\n </ConfigProvider>\n </Popover>\n );\n};\n\nexport default SearchWithHistory;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { ClockCircleOutlined, SearchOutlined } from '@ant-design/icons';\nimport { useLocalStorageState } from 'ahooks';\nimport { ConfigProvider, Input, Popover } from 'antd';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport styles from './index.module.less';\n\ntype SearchWithHistoryProps = {\n /** localStorage 存储 key */\n localstorageKey: string;\n /** 可搜索的选项列表(含菜单路由、看板等) */\n list: { label: string; value: string; tag?: string }[];\n placeholder?: string;\n /** 选中项回调,value 为路由 path 或看板 id 等 */\n onClick: (value: string) => void;\n};\n\nconst INPUT_THEME = {\n token: { colorText: 'rgba(191, 199, 209, 1)' },\n components: {\n Input: {\n colorBgContainer: 'rgba(45, 56, 86, 1)',\n colorBorder: '#2D3856',\n borderRadius: 18,\n boxShadow: 'inset 0px -0.5px 0px 0px rgba(20, 31, 62, 0.5)',\n hoverBorderColor: 'rgba(0, 85, 255, 1)',\n paddingBlock: 6,\n },\n },\n};\n\n/**\n * 带历史记录的搜索弹层\n * - 无输入时展示最近搜索(localStorage 持久化)\n * - 有输入时展示匹配的菜单/看板列表\n */\nconst SearchWithHistory: React.FC<SearchWithHistoryProps> = ({\n localstorageKey = 'yk_search_history',\n list,\n placeholder = '搜索',\n onClick,\n}) => {\n const [open, setOpen] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n const [historyList, setHistoryList] = useLocalStorageState<{ label: string; value: string; tag?: string }[]>(\n localstorageKey,\n { defaultValue: [] },\n );\n\n /** 选中项:执行回调并更新历史(同 value 则置顶) */\n const menuItemClick = useCallback(\n (item: { label: string; value: string; tag?: string }) => {\n onClick(item.value);\n setOpen(false);\n setHistoryList((prev = []) => [item, ...prev.filter((h) => h.value !== item.value)]);\n },\n [onClick, setHistoryList],\n );\n\n /** 清空历史 */\n const clearHistory = useCallback(() => {\n setOpen(false);\n setTimeout(() => setHistoryList([]), 100);\n }, [setHistoryList]);\n\n /** 匹配的选项列表(按 label 包含搜索词过滤) */\n const menuList = useMemo(() => list.filter((item) => item.label.includes(searchValue)), [list, searchValue]);\n\n /** 最近搜索列表 DOM */\n const historyContent = useMemo(\n () => (\n <div>\n <div className={styles.historyHeader}>\n <ClockCircleOutlined style={{ marginRight: 10, transform: 'translateY(-1px)' }} />\n <span>最近搜索</span>\n <i className='iconfont icon-lajitong' onClick={clearHistory} />\n </div>\n <div className={styles.historyList}>\n {historyList.map((item) => (\n <div className={styles.item} key={item.value} onClick={() => menuItemClick(item)}>\n <TextWithTooltip width={160} text={item.label} />\n {item.tag && <div className={styles.tag}>{item.tag}</div>}\n </div>\n ))}\n </div>\n </div>\n ),\n [historyList, clearHistory, menuItemClick],\n );\n\n /** 搜索结果列表 DOM */\n const listContent = useMemo(\n () => (\n <div>\n {menuList.map((item) => (\n <div key={item.value} className={styles.item} onClick={() => menuItemClick(item)}>\n <TextWithTooltip width={160} text={item.label} highlight={searchValue} />\n {item.tag && <div className={styles.tag}>{item.tag}</div>}\n </div>\n ))}\n </div>\n ),\n [menuList, searchValue, menuItemClick],\n );\n\n /**\n * 弹层内容:根据输入与历史决定\n * 1. 无历史 → null(不展示弹层)\n * 2. 有历史且无输入 → 最近搜索\n * 3. 有输入且无匹配 → 暂无搜索结果\n * 4. 有输入且匹配 → 菜单列表\n */\n const content = useMemo(() => {\n if (!searchValue) {\n if (historyList.length === 0) return null;\n return <div>{historyContent}</div>;\n }\n if (menuList.length === 0) return <div style={{ color: '#999' }}>暂无搜索结果</div>;\n return listContent;\n }, [searchValue, historyList, historyContent, menuList, listContent]);\n\n /** 内容为空时关闭弹层(如清空输入且无历史) */\n useEffect(() => {\n if (!content) setOpen(false);\n }, [content]);\n\n /** 有输入或有历史时显示弹层 */\n const shouldOpen = (value: string) => {\n if (value) return true;\n return historyList.length > 0;\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={(nextOpen) => {\n if (nextOpen && !content) return; // 无内容时不打开,避免空白弹层\n setOpen(nextOpen);\n }}\n className={styles.popover}\n styles={{ body: { borderRadius: 4, width: 250, paddingRight: 0 } }}\n fresh\n title={false}\n trigger='click'\n placement='bottomLeft'\n arrow={false}\n content={content}\n getPopupContainer={(triggerNode: HTMLElement) => triggerNode.parentNode as HTMLElement}\n autoAdjustOverflow={false}\n >\n <ConfigProvider theme={INPUT_THEME}>\n <Input\n className={styles.inputContainer}\n classNames={{ input: styles.input }}\n placeholder={placeholder}\n prefix={<SearchOutlined />}\n value={searchValue}\n onFocus={() => historyList.length > 0 && setOpen(true)}\n onChange={(e) => {\n const val = e.target.value;\n setSearchValue(val);\n setOpen(shouldOpen(val));\n }}\n />\n </ConfigProvider>\n </Popover>\n );\n};\n\nexport default SearchWithHistory;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import { TooltipProps } from 'antd';
1
+ import { type TooltipProps } from 'antd';
2
2
  import React from 'react';
3
3
  type PropsType = {
4
4
  text: number | string | React.ReactNode;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/TextWithToolTip/index.tsx"],
4
- "sourcesContent": ["import { Tooltip, TooltipProps } from 'antd';\nimport React, { useRef, useState } from 'react';\n\ntype PropsType = {\n text: number | string | React.ReactNode;\n placement?: 'top' | 'left' | 'right' | 'bottom';\n zIndex?: number;\n color?: string;\n styles?: TooltipProps['styles'];\n width: number | string;\n maxWidth?: number | string;\n className?: string;\n style?: React.CSSProperties;\n highlight?: string; // 高亮的关键字\n arrow?: boolean;\n};\n\nconst TextWithTooltip: React.FC<PropsType> = ({\n text,\n placement = 'top',\n zIndex,\n width,\n maxWidth,\n className,\n style = {},\n color,\n styles,\n highlight = '',\n arrow = false,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n const textRef = useRef(null);\n\n const handleMouseEnter = () => {\n if (textRef.current) {\n const range = document.createRange();\n range.selectNodeContents(textRef.current);\n const rangeWidth = range.getBoundingClientRect().width;\n const actualWidth = (textRef.current as HTMLElement).getBoundingClientRect().width;\n setShowTooltip(rangeWidth > actualWidth);\n }\n };\n\n // 将text按照高亮关键字拆分成数组\n function splitString(str: string, delimiter: string) {\n const result = [];\n let match;\n const escapedDelimiter = delimiter.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedDelimiter})`, 'gi');\n let remaining = str; // 新建变量存储剩余字符串\n\n while ((match = regex.exec(remaining)) !== null) {\n const index = match.index;\n if (index !== 0) {\n result.push(remaining.slice(0, index));\n }\n result.push(match[1]);\n remaining = remaining.slice(index + match[1].length);\n regex.lastIndex = 0;\n }\n if (remaining.length > 0) {\n result.push(remaining);\n }\n return result;\n }\n\n // text是ReactNode时,不处理高亮\n const highlightedText = (text: number | string | React.ReactNode): React.ReactNode => {\n if (highlight && (typeof text === 'string' || typeof text === 'number')) {\n return splitString(text.toString(), highlight).map((part, index) => {\n if (part.toUpperCase() === highlight.toUpperCase()) {\n return (\n <span key={index} style={{ color: '#ffb401' }}>\n {part}\n </span>\n );\n } else {\n return <span key={index}>{part}</span>;\n }\n });\n } else {\n return text;\n }\n };\n\n // 处理宽度值,确保字符串数字能正确转换为带单位的 CSS 值\n const formatWidth = (value: number | string): number | string => {\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n // 如果是纯数字字符串,添加 px 单位\n return `${value}px`;\n }\n return value;\n };\n\n return (\n <Tooltip\n open={showTooltip}\n title={text}\n placement={placement}\n arrow={arrow}\n destroyOnHidden={true}\n color={color ? color : '#fff'}\n styles={styles ? styles : { body: { color: '#333', fontSize: 12 } }}\n {...(zIndex ? { zIndex } : {})}\n >\n <span\n ref={textRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={() => setShowTooltip(false)}\n className={className}\n style={{\n display: 'inline-block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n ...style,\n ...(maxWidth ? { maxWidth: formatWidth(maxWidth) } : { width: formatWidth(width) }),\n }}\n >\n {highlightedText(text)}\n </span>\n </Tooltip>\n );\n};\n\nexport default TextWithTooltip;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Tooltip, type TooltipProps } from 'antd';\nimport React, { useRef, useState } from 'react';\n\ntype PropsType = {\n text: number | string | React.ReactNode;\n placement?: 'top' | 'left' | 'right' | 'bottom';\n zIndex?: number;\n color?: string;\n styles?: TooltipProps['styles'];\n width: number | string;\n maxWidth?: number | string;\n className?: string;\n style?: React.CSSProperties;\n highlight?: string; // 高亮的关键字\n arrow?: boolean;\n};\n\nconst TextWithTooltip: React.FC<PropsType> = ({\n text,\n placement = 'top',\n zIndex,\n width,\n maxWidth,\n className,\n style = {},\n color,\n styles,\n highlight = '',\n arrow = false,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n const textRef = useRef(null);\n\n const handleMouseEnter = () => {\n if (textRef.current) {\n const range = document.createRange();\n range.selectNodeContents(textRef.current);\n const rangeWidth = range.getBoundingClientRect().width;\n const actualWidth = (textRef.current as HTMLElement).getBoundingClientRect().width;\n setShowTooltip(rangeWidth > actualWidth);\n }\n };\n\n // 将text按照高亮关键字拆分成数组\n function splitString(str: string, delimiter: string) {\n const result = [];\n let match;\n const escapedDelimiter = delimiter.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedDelimiter})`, 'gi');\n let remaining = str; // 新建变量存储剩余字符串\n\n while ((match = regex.exec(remaining)) !== null) {\n const index = match.index;\n if (index !== 0) {\n result.push(remaining.slice(0, index));\n }\n result.push(match[1]);\n remaining = remaining.slice(index + match[1].length);\n regex.lastIndex = 0;\n }\n if (remaining.length > 0) {\n result.push(remaining);\n }\n return result;\n }\n\n // text是ReactNode时,不处理高亮\n const highlightedText = (text: number | string | React.ReactNode): React.ReactNode => {\n if (highlight && (typeof text === 'string' || typeof text === 'number')) {\n return splitString(text.toString(), highlight).map((part, index) => {\n if (part.toUpperCase() === highlight.toUpperCase()) {\n return (\n <span key={index} style={{ color: '#ffb401' }}>\n {part}\n </span>\n );\n } else {\n return <span key={index}>{part}</span>;\n }\n });\n } else {\n return text;\n }\n };\n\n // 处理宽度值,确保字符串数字能正确转换为带单位的 CSS 值\n const formatWidth = (value: number | string): number | string => {\n if (typeof value === 'string' && /^\\d+$/.test(value)) {\n // 如果是纯数字字符串,添加 px 单位\n return `${value}px`;\n }\n return value;\n };\n\n return (\n <Tooltip\n open={showTooltip}\n title={text}\n placement={placement}\n arrow={arrow}\n destroyOnHidden={true}\n color={color ? color : '#fff'}\n styles={styles ? styles : { body: { color: '#333', fontSize: 12 } }}\n {...(zIndex ? { zIndex } : {})}\n >\n <span\n ref={textRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={() => setShowTooltip(false)}\n className={className}\n style={{\n display: 'inline-block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom',\n ...style,\n ...(maxWidth ? { maxWidth: formatWidth(maxWidth) } : { width: formatWidth(width) }),\n }}\n >\n {highlightedText(text)}\n </span>\n </Tooltip>\n );\n};\n\nexport default TextWithTooltip;\n"],
5
+ "mappings": "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",
6
6
  "names": ["text"]
7
7
  }
@@ -1,28 +1,5 @@
1
- /**
2
- * TreeTransferPanel
3
- *
4
- * 树形穿梭框单侧面板:搜索框 + 树形表格 + 分页器。
5
- *
6
- * @example
7
- * ```tsx
8
- * <TreeTransferPanel
9
- * dataSource={data}
10
- * selectedRowKeys={selectedKeys}
11
- * onRowSelect={handleRowSelect}
12
- * searchValue={searchValue}
13
- * setSearchValue={setSearchValue}
14
- * totalCount={totalCount}
15
- * title="待分配项"
16
- * showPagination={true}
17
- * currentPage={currentPage}
18
- * pageSize={20}
19
- * onPageChange={handlePageChange}
20
- * columns={customColumns}
21
- * />
22
- * ```
23
- */
24
1
  import React from 'react';
25
- import { TreeTransferPanelProps } from '../../types';
2
+ import { type TreeTransferPanelProps } from '../../types';
26
3
  import './index.less';
27
4
  declare const TreeTransferPanel: <T>({ dataSource, selectedRowKeys, onRowSelect, searchValue, setSearchValue, totalCount, title, showPagination, currentPage, pageSize, onPageChange, columns: customColumns, customRender, searchPlaceholder, }: TreeTransferPanelProps<T>) => React.JSX.Element;
28
5
  export default TreeTransferPanel;
@@ -1,7 +1,7 @@
1
1
  // src/components/TreeTransfer/components/TreeTransferPanel/index.tsx
2
- import React, { useMemo, useRef, useState, useEffect, useCallback } from "react";
3
- import { Table, Input, Empty, Pagination, Typography, Tooltip } from "antd";
4
2
  import { SearchOutlined } from "@ant-design/icons";
3
+ import { Empty, Input, Pagination, Table, Tooltip, Typography } from "antd";
4
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { DEFAULT_PAGE_SIZE } from "../../types";
6
6
  import "./index.less";
7
7
  var { Text } = Typography;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/TreeTransfer/components/TreeTransferPanel/index.tsx"],
4
- "sourcesContent": ["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/**\n * TreeTransferPanel\n *\n * 树形穿梭框单侧面板:搜索框 + 树形表格 + 分页器。\n *\n * @example\n * ```tsx\n * <TreeTransferPanel\n * dataSource={data}\n * selectedRowKeys={selectedKeys}\n * onRowSelect={handleRowSelect}\n * searchValue={searchValue}\n * setSearchValue={setSearchValue}\n * totalCount={totalCount}\n * title=\"待分配项\"\n * showPagination={true}\n * currentPage={currentPage}\n * pageSize={20}\n * onPageChange={handlePageChange}\n * columns={customColumns}\n * />\n * ```\n */\n\nimport React, { useMemo, useRef, useState, useEffect, useCallback } from 'react';\nimport { Table, Input, Empty, Pagination, Typography, Tooltip } from 'antd';\nimport type { ColumnsType } from 'antd/es/table';\nimport { SearchOutlined } from '@ant-design/icons';\nimport { TreeTransferPanelProps, TreeTransferRow, DEFAULT_PAGE_SIZE } from '../../types';\nimport './index.less';\n\nconst { Text } = Typography;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 固定元素高度常量(与 CSS 保持一致)\n// ─────────────────────────────────────────────────────────────────────────────\nconst HEADER_HEIGHT = 34; // .tree-transfer-panel-header padding + border\nconst SEARCH_HEIGHT = 44; // .tree-transfer-panel-search padding + input\nconst PAGINATION_HEIGHT = 36; // .tree-transfer-panel-pagination\nconst MARGIN = 8; // 底部预留间距\nconst EXTRA_PADDING = 60; // 最后一行防遮挡预留空间\nconst MIN_SCROLL_Y = 100; // 表格最小可见高度(px)\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TreeTransferPanel\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst TreeTransferPanel = <T,>({\n dataSource,\n selectedRowKeys,\n onRowSelect,\n searchValue,\n setSearchValue,\n totalCount,\n title,\n showPagination = false,\n currentPage = 1,\n pageSize = DEFAULT_PAGE_SIZE,\n onPageChange,\n columns: customColumns,\n customRender,\n searchPlaceholder,\n}: TreeTransferPanelProps<T>) => {\n const panelRef = useRef<HTMLDivElement>(null);\n\n // 表格滚动高度(undefined 表示尚未计算完成,Table 自适应)\n const [tableScrollY, setTableScrollY] = useState<number | undefined>(undefined);\n\n // ── 动态计算表格可滚动高度 ─────────────────────────────────────────────────\n //\n // 计算逻辑:面板总高 - 固定头部/搜索/分页区域高度 = 表格可用高度。\n //\n // 修复说明:\n // 1. 初始值改为 undefined,避免 Table 短暂以 scroll.y=0 渲染导致高度坍塌。\n // 2. MutationObserver 回调中原使用 setTimeout(fn, 150),每次 DOM 变化都会\n // 入队新定时器;树形展开时大量 mutation 会堆积数十个 timer。\n // 修复:改用 requestAnimationFrame,每次只在下一帧执行一次计算。\n // 3. 移除 `dataSource` 出 deps:dataSource 每次 render 都是新数组引用,\n // 导致 observer 被频繁拆卸/重建。表格内容的 DOM 变化已由 MutationObserver 捕获,\n // 无需在数据变化时重建整个 effect。\n //\n useEffect(() => {\n if (!panelRef.current) return undefined;\n\n let rafId: number;\n\n const calculateScrollHeight = () => {\n const panelHeight = panelRef.current?.clientHeight ?? 0;\n const paginationOffset = showPagination ? PAGINATION_HEIGHT : 0;\n const available = panelHeight - HEADER_HEIGHT - SEARCH_HEIGHT - paginationOffset - MARGIN - EXTRA_PADDING;\n setTableScrollY(Math.max(available, MIN_SCROLL_Y));\n };\n\n const scheduleCalc = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(calculateScrollHeight);\n };\n\n // 初次计算\n scheduleCalc();\n\n // 监听面板容器尺寸(窗口 resize、flex 布局变化等)\n const resizeObserver = new ResizeObserver(scheduleCalc);\n resizeObserver.observe(panelRef.current);\n\n // 监听表格 DOM 变化(树形行展开 / 收起会增删行节点)\n const mutationObserver = new MutationObserver(scheduleCalc);\n const tableBody = panelRef.current.querySelector('.ant-table-tbody');\n if (tableBody) {\n mutationObserver.observe(tableBody, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n return () => {\n cancelAnimationFrame(rafId);\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [showPagination]); // 只在 showPagination 变化时重建(影响固定高度计算)\n\n // ── 默认列配置 ─────────────────────────────────────────────────────────────\n // 第一列:父节点显示 ID,子节点合并到名称列(colSpan:0)\n // 第二列:名称列,子节点 colSpan:2 占满整行\n const defaultColumns: ColumnsType<TreeTransferRow<T>> = useMemo(\n () => [\n {\n title: 'ID',\n dataIndex: 'key',\n key: 'id',\n width: '35%',\n onCell: (record: TreeTransferRow<T>) => (record.isParent ? {} : { colSpan: 0 }),\n render: (_: unknown, record: TreeTransferRow<T>) => (record.isParent ? String(record.key) : ''),\n },\n {\n title: '名称',\n dataIndex: 'data',\n key: 'name',\n width: '65%',\n ellipsis: { showTitle: false },\n onCell: (record: TreeTransferRow<T>) => {\n if (!record.isParent) return { colSpan: 2 };\n return customRender?.onCell ? customRender.onCell(record) : {};\n },\n render: (_: unknown, record: TreeTransferRow<T>, index: number) => {\n if (customRender?.cellRender) return customRender.cellRender(_, record, index);\n const content = JSON.stringify(record.data);\n if (content.length > 20) {\n return (\n <Tooltip placement='topLeft' title={content}>\n {content}\n </Tooltip>\n );\n }\n return content;\n },\n },\n ],\n [customRender],\n );\n\n // 优先使用调用方传入的列配置\n const columns = customColumns ?? defaultColumns;\n\n // ── 行选择配置 ─────────────────────────────────────────────────────────────\n // checkStrictly:false — 选中父节点时自动全选子节点\n const rowSelection = useMemo(\n () => ({\n selectedRowKeys,\n onChange: (selectedKeys: React.Key[], selectedRows: TreeTransferRow<T>[]) => {\n onRowSelect(selectedRows, selectedKeys);\n },\n checkStrictly: false,\n columnWidth: 50,\n }),\n [selectedRowKeys, onRowSelect],\n );\n\n // ── 搜索框 onChange ────────────────────────────────────────────────────────\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setSearchValue(e.target.value),\n [setSearchValue],\n );\n\n // ── 渲染 ──────────────────────────────────────────────────────────────────\n\n return (\n <div ref={panelRef} className='tree-transfer-panel'>\n {/* 头部:标题和数量 */}\n <div className='tree-transfer-panel-header'>\n <Text>{title}</Text>\n <Text type='secondary'>({totalCount})</Text>\n </div>\n\n {/* 搜索框 */}\n <div className='tree-transfer-panel-search'>\n <Input\n placeholder={searchPlaceholder ?? '搜索'}\n prefix={<SearchOutlined />}\n value={searchValue}\n onChange={handleSearchChange}\n allowClear\n />\n </div>\n\n {/* 表格内容区域 */}\n <div className='tree-transfer-panel-content'>\n {dataSource.length > 0 ? (\n <Table\n rowKey='key'\n columns={columns}\n dataSource={dataSource}\n rowSelection={rowSelection}\n expandable={{\n childrenColumnName: 'children',\n defaultExpandAllRows: true,\n indentSize: 30,\n }}\n pagination={false}\n size='small'\n className='tree-transfer-table'\n // tableScrollY 未计算完成时不传 y,Table 自适应高度,避免初始高度坍塌\n scroll={tableScrollY !== undefined ? { y: tableScrollY } : undefined}\n />\n ) : (\n <Empty description='暂无数据' image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n\n {/* 分页器:数据超过 1 页才显示 */}\n {showPagination && onPageChange && totalCount > pageSize && (\n <div className='tree-transfer-panel-pagination'>\n <Pagination\n current={currentPage}\n pageSize={pageSize}\n total={totalCount}\n showSizeChanger={false}\n showQuickJumper={false}\n showTitle={false}\n onChange={onPageChange}\n size='small'\n simple\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default TreeTransferPanel;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/**\n * TreeTransferPanel\n *\n * 树形穿梭框单侧面板:搜索框 + 树形表格 + 分页器。\n *\n * @example\n * ```tsx\n * <TreeTransferPanel\n * dataSource={data}\n * selectedRowKeys={selectedKeys}\n * onRowSelect={handleRowSelect}\n * searchValue={searchValue}\n * setSearchValue={setSearchValue}\n * totalCount={totalCount}\n * title=\"待分配项\"\n * showPagination={true}\n * currentPage={currentPage}\n * pageSize={20}\n * onPageChange={handlePageChange}\n * columns={customColumns}\n * />\n * ```\n */\n\nimport { SearchOutlined } from '@ant-design/icons';\nimport { Empty, Input, Pagination, Table, Tooltip, Typography } from 'antd';\nimport type { ColumnsType } from 'antd/es/table';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { DEFAULT_PAGE_SIZE, type TreeTransferPanelProps, type TreeTransferRow } from '../../types';\nimport './index.less';\n\nconst { Text } = Typography;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// 固定元素高度常量(与 CSS 保持一致)\n// ─────────────────────────────────────────────────────────────────────────────\nconst HEADER_HEIGHT = 34; // .tree-transfer-panel-header padding + border\nconst SEARCH_HEIGHT = 44; // .tree-transfer-panel-search padding + input\nconst PAGINATION_HEIGHT = 36; // .tree-transfer-panel-pagination\nconst MARGIN = 8; // 底部预留间距\nconst EXTRA_PADDING = 60; // 最后一行防遮挡预留空间\nconst MIN_SCROLL_Y = 100; // 表格最小可见高度(px)\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TreeTransferPanel\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst TreeTransferPanel = <T,>({\n dataSource,\n selectedRowKeys,\n onRowSelect,\n searchValue,\n setSearchValue,\n totalCount,\n title,\n showPagination = false,\n currentPage = 1,\n pageSize = DEFAULT_PAGE_SIZE,\n onPageChange,\n columns: customColumns,\n customRender,\n searchPlaceholder,\n}: TreeTransferPanelProps<T>) => {\n const panelRef = useRef<HTMLDivElement>(null);\n\n // 表格滚动高度(undefined 表示尚未计算完成,Table 自适应)\n const [tableScrollY, setTableScrollY] = useState<number | undefined>(undefined);\n\n // ── 动态计算表格可滚动高度 ─────────────────────────────────────────────────\n //\n // 计算逻辑:面板总高 - 固定头部/搜索/分页区域高度 = 表格可用高度。\n //\n // 修复说明:\n // 1. 初始值改为 undefined,避免 Table 短暂以 scroll.y=0 渲染导致高度坍塌。\n // 2. MutationObserver 回调中原使用 setTimeout(fn, 150),每次 DOM 变化都会\n // 入队新定时器;树形展开时大量 mutation 会堆积数十个 timer。\n // 修复:改用 requestAnimationFrame,每次只在下一帧执行一次计算。\n // 3. 移除 `dataSource` 出 deps:dataSource 每次 render 都是新数组引用,\n // 导致 observer 被频繁拆卸/重建。表格内容的 DOM 变化已由 MutationObserver 捕获,\n // 无需在数据变化时重建整个 effect。\n //\n useEffect(() => {\n if (!panelRef.current) return undefined;\n\n let rafId: number;\n\n const calculateScrollHeight = () => {\n const panelHeight = panelRef.current?.clientHeight ?? 0;\n const paginationOffset = showPagination ? PAGINATION_HEIGHT : 0;\n const available = panelHeight - HEADER_HEIGHT - SEARCH_HEIGHT - paginationOffset - MARGIN - EXTRA_PADDING;\n setTableScrollY(Math.max(available, MIN_SCROLL_Y));\n };\n\n const scheduleCalc = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(calculateScrollHeight);\n };\n\n // 初次计算\n scheduleCalc();\n\n // 监听面板容器尺寸(窗口 resize、flex 布局变化等)\n const resizeObserver = new ResizeObserver(scheduleCalc);\n resizeObserver.observe(panelRef.current);\n\n // 监听表格 DOM 变化(树形行展开 / 收起会增删行节点)\n const mutationObserver = new MutationObserver(scheduleCalc);\n const tableBody = panelRef.current.querySelector('.ant-table-tbody');\n if (tableBody) {\n mutationObserver.observe(tableBody, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['class'],\n });\n }\n\n return () => {\n cancelAnimationFrame(rafId);\n resizeObserver.disconnect();\n mutationObserver.disconnect();\n };\n }, [showPagination]); // 只在 showPagination 变化时重建(影响固定高度计算)\n\n // ── 默认列配置 ─────────────────────────────────────────────────────────────\n // 第一列:父节点显示 ID,子节点合并到名称列(colSpan:0)\n // 第二列:名称列,子节点 colSpan:2 占满整行\n const defaultColumns: ColumnsType<TreeTransferRow<T>> = useMemo(\n () => [\n {\n title: 'ID',\n dataIndex: 'key',\n key: 'id',\n width: '35%',\n onCell: (record: TreeTransferRow<T>) => (record.isParent ? {} : { colSpan: 0 }),\n render: (_: unknown, record: TreeTransferRow<T>) => (record.isParent ? String(record.key) : ''),\n },\n {\n title: '名称',\n dataIndex: 'data',\n key: 'name',\n width: '65%',\n ellipsis: { showTitle: false },\n onCell: (record: TreeTransferRow<T>) => {\n if (!record.isParent) return { colSpan: 2 };\n return customRender?.onCell ? customRender.onCell(record) : {};\n },\n render: (_: unknown, record: TreeTransferRow<T>, index: number) => {\n if (customRender?.cellRender) return customRender.cellRender(_, record, index);\n const content = JSON.stringify(record.data);\n if (content.length > 20) {\n return (\n <Tooltip placement='topLeft' title={content}>\n {content}\n </Tooltip>\n );\n }\n return content;\n },\n },\n ],\n [customRender],\n );\n\n // 优先使用调用方传入的列配置\n const columns = customColumns ?? defaultColumns;\n\n // ── 行选择配置 ─────────────────────────────────────────────────────────────\n // checkStrictly:false — 选中父节点时自动全选子节点\n const rowSelection = useMemo(\n () => ({\n selectedRowKeys,\n onChange: (selectedKeys: React.Key[], selectedRows: TreeTransferRow<T>[]) => {\n onRowSelect(selectedRows, selectedKeys);\n },\n checkStrictly: false,\n columnWidth: 50,\n }),\n [selectedRowKeys, onRowSelect],\n );\n\n // ── 搜索框 onChange ────────────────────────────────────────────────────────\n const handleSearchChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => setSearchValue(e.target.value),\n [setSearchValue],\n );\n\n // ── 渲染 ──────────────────────────────────────────────────────────────────\n\n return (\n <div ref={panelRef} className='tree-transfer-panel'>\n {/* 头部:标题和数量 */}\n <div className='tree-transfer-panel-header'>\n <Text>{title}</Text>\n <Text type='secondary'>({totalCount})</Text>\n </div>\n\n {/* 搜索框 */}\n <div className='tree-transfer-panel-search'>\n <Input\n placeholder={searchPlaceholder ?? '搜索'}\n prefix={<SearchOutlined />}\n value={searchValue}\n onChange={handleSearchChange}\n allowClear\n />\n </div>\n\n {/* 表格内容区域 */}\n <div className='tree-transfer-panel-content'>\n {dataSource.length > 0 ? (\n <Table\n rowKey='key'\n columns={columns}\n dataSource={dataSource}\n rowSelection={rowSelection}\n expandable={{\n childrenColumnName: 'children',\n defaultExpandAllRows: true,\n indentSize: 30,\n }}\n pagination={false}\n size='small'\n className='tree-transfer-table'\n // tableScrollY 未计算完成时不传 y,Table 自适应高度,避免初始高度坍塌\n scroll={tableScrollY !== undefined ? { y: tableScrollY } : undefined}\n />\n ) : (\n <Empty description='暂无数据' image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n\n {/* 分页器:数据超过 1 页才显示 */}\n {showPagination && onPageChange && totalCount > pageSize && (\n <div className='tree-transfer-panel-pagination'>\n <Pagination\n current={currentPage}\n pageSize={pageSize}\n total={totalCount}\n showSizeChanger={false}\n showQuickJumper={false}\n showTitle={false}\n onChange={onPageChange}\n size='small'\n simple\n />\n </div>\n )}\n </div>\n );\n};\n\nexport default TreeTransferPanel;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,28 +1,5 @@
1
- /**
2
- * TreeTransfer
3
- *
4
- * 树形表格穿梭框组件。支持:
5
- * - 树形结构展示,父子联动选择(checkStrictly: false)
6
- * - 前端分页 + 防抖搜索
7
- * - 左右穿梭操作(含多级树正确迁移)
8
- * - 自定义列配置和渲染
9
- * - 完整的 TypeScript 泛型支持
10
- *
11
- * @template T - 行数据的自定义业务类型
12
- *
13
- * @example
14
- * ```tsx
15
- * <TreeTransfer
16
- * leftDataSource={leftData}
17
- * rightDataSource={rightData}
18
- * leftTitle="待分配"
19
- * rightTitle="已分配"
20
- * onChange={({ leftData, rightData }) => { ... }}
21
- * />
22
- * ```
23
- */
24
1
  import React from 'react';
25
- import { TreeTransferProps } from './types';
2
+ import { type TreeTransferProps } from './types';
26
3
  import './index.less';
27
4
  declare function TreeTransfer<T>({ leftDataSource, rightDataSource, loading, leftTitle, rightTitle, pageSize, columns, customRender, searchFields, searchPlaceholder, onChange, }: TreeTransferProps<T>): React.JSX.Element;
28
5
  export default TreeTransfer;
@@ -19,20 +19,20 @@ var __spreadValues = (a, b) => {
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
 
21
21
  // src/components/TreeTransfer/index.tsx
22
- import React, { useState, useMemo, useCallback, useEffect, useRef } from "react";
23
- import { Spin, Button, Space } from "antd";
24
- import { RightOutlined, LeftOutlined } from "@ant-design/icons";
22
+ import { LeftOutlined, RightOutlined } from "@ant-design/icons";
23
+ import { Button, Space, Spin } from "antd";
24
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
25
+ import TreeTransferPanel from "./components/TreeTransferPanel";
25
26
  import { DEFAULT_PAGE_SIZE } from "./types";
26
27
  import {
27
- sliceDataByPage,
28
+ addNodesToTree,
29
+ countParentNodes,
30
+ extractTopLevelSelectedNodes,
28
31
  filterData,
29
32
  getAllDescendantKeys,
30
33
  removeNodesFromTree,
31
- addNodesToTree,
32
- countParentNodes,
33
- extractTopLevelSelectedNodes
34
+ sliceDataByPage
34
35
  } from "./utils";
35
- import TreeTransferPanel from "./components/TreeTransferPanel";
36
36
  import "./index.less";
37
37
  function useDebounce(callback, delay) {
38
38
  const callbackRef = useRef(callback);