@yoka-ui/ui 1.0.10-test → 1.1.1

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 (390) hide show
  1. package/@Docs-yoka/exports.generated.md +68 -62
  2. package/LICENSE +21 -0
  3. package/README.md +40 -189
  4. package/dist/es/assets/image/skills.zip +0 -0
  5. package/dist/es/business/AiChat/aichat-logo.svg +1 -0
  6. package/dist/es/business/AiChat/index.d.ts +3 -3
  7. package/dist/es/business/AiChat/index.js +322 -137
  8. package/dist/es/business/AiChat/index.js.map +3 -3
  9. package/dist/es/business/AiChat/index.module.less +24 -0
  10. package/dist/es/business/AiChat/intentRecognizer.js.map +1 -1
  11. package/dist/es/business/AiChat/navigationManager.js +6 -6
  12. package/dist/es/business/AiChat/navigationManager.js.map +2 -2
  13. package/dist/es/business/AiChat/sse.d.ts +15 -0
  14. package/dist/es/business/AiChat/sse.js +118 -7
  15. package/dist/es/business/AiChat/sse.js.map +2 -2
  16. package/dist/es/business/AiChat/type.d.ts +22 -23
  17. package/dist/es/business/AiChat/useAiChat.js +105 -75
  18. package/dist/es/business/AiChat/useAiChat.js.map +3 -3
  19. package/dist/es/business/AiChat/useTaskWorkflow.d.ts +1 -2
  20. package/dist/es/business/AiChat/useTaskWorkflow.js +2 -36
  21. package/dist/es/business/AiChat/useTaskWorkflow.js.map +2 -2
  22. package/dist/es/business/DrawerPageInfo/index.js.map +1 -1
  23. package/dist/es/business/Editor/index.d.ts +1 -1
  24. package/dist/es/business/Editor/index.js.map +2 -2
  25. package/dist/es/business/Empty/index.js +1 -1
  26. package/dist/es/business/Empty/index.js.map +1 -1
  27. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js +2 -2
  28. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  29. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js +3 -3
  30. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  31. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js +2 -2
  32. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  33. package/dist/es/business/ModCommonFilter/index.d.ts +1 -1
  34. package/dist/es/business/ModCommonFilter/index.js.map +2 -2
  35. package/dist/es/business/YkCharts/Area.d.ts +18 -0
  36. package/dist/es/business/YkCharts/Area.js +336 -0
  37. package/dist/es/business/YkCharts/Area.js.map +7 -0
  38. package/dist/es/business/YkCharts/Bar.d.ts +21 -0
  39. package/dist/es/business/YkCharts/Bar.js +316 -0
  40. package/dist/es/business/YkCharts/Bar.js.map +7 -0
  41. package/dist/es/business/YkCharts/BarProperty.d.ts +21 -0
  42. package/dist/es/business/YkCharts/BarProperty.js +357 -0
  43. package/dist/es/business/YkCharts/BarProperty.js.map +7 -0
  44. package/dist/es/business/YkCharts/BarTotal.d.ts +21 -0
  45. package/dist/es/business/YkCharts/BarTotal.js +292 -0
  46. package/dist/es/business/YkCharts/BarTotal.js.map +7 -0
  47. package/dist/es/business/YkCharts/Line.d.ts +21 -0
  48. package/dist/es/business/YkCharts/Line.js +342 -0
  49. package/dist/es/business/YkCharts/Line.js.map +7 -0
  50. package/dist/es/business/YkCharts/Pie.d.ts +19 -0
  51. package/dist/es/business/YkCharts/Pie.js +107 -0
  52. package/dist/es/business/YkCharts/Pie.js.map +7 -0
  53. package/dist/es/business/YkCharts/PieProperty.d.ts +18 -0
  54. package/dist/es/business/YkCharts/PieProperty.js +180 -0
  55. package/dist/es/business/YkCharts/PieProperty.js.map +7 -0
  56. package/dist/es/business/YkCharts/Pies.d.ts +26 -0
  57. package/dist/es/business/YkCharts/Pies.js +352 -0
  58. package/dist/es/business/YkCharts/Pies.js.map +7 -0
  59. package/dist/es/business/YkCharts/constants.d.ts +1 -0
  60. package/dist/es/business/YkCharts/constants.js +47 -0
  61. package/dist/es/business/YkCharts/constants.js.map +7 -0
  62. package/dist/es/business/YkCharts/hooks.d.ts +4 -0
  63. package/dist/es/business/YkCharts/hooks.js +37 -0
  64. package/dist/es/business/YkCharts/hooks.js.map +7 -0
  65. package/dist/es/business/YkCharts/index.d.ts +9 -0
  66. package/dist/es/business/YkCharts/index.js +20 -0
  67. package/dist/es/business/YkCharts/index.js.map +7 -0
  68. package/dist/es/business/YkCharts/index.module.less +164 -0
  69. package/dist/es/business/YkCharts/tooltip.less +92 -0
  70. package/dist/es/business/YkCharts/transformData.js +16 -0
  71. package/dist/es/business/YkCharts/transformData.js.map +7 -0
  72. package/dist/es/business/YkCharts/typing.d.ts +74 -0
  73. package/dist/es/business/YkCharts/typing.js +1 -0
  74. package/dist/es/business/YkCharts/typing.js.map +7 -0
  75. package/dist/es/business/YkCharts/utils.d.ts +4 -0
  76. package/dist/es/business/YkCharts/utils.js +109 -0
  77. package/dist/es/business/YkCharts/utils.js.map +7 -0
  78. package/dist/es/business/YkCharts/variables.less +13 -0
  79. package/dist/es/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  80. package/dist/es/business/YkLoginModule/SmsLoginForm.js +178 -0
  81. package/dist/es/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  82. package/dist/es/business/YkLoginModule/index.d.ts +48 -0
  83. package/dist/es/business/YkLoginModule/index.js +198 -0
  84. package/dist/es/business/YkLoginModule/index.js.map +7 -0
  85. package/dist/es/business/YkLoginModule/styles.module.less +169 -0
  86. package/dist/es/business/YkPorjectSelect/index.d.ts +1 -1
  87. package/dist/es/business/YkPorjectSelect/index.js +2 -2
  88. package/dist/es/business/YkPorjectSelect/index.js.map +2 -2
  89. package/dist/es/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  90. package/dist/es/business/YkSqlEdit/index.d.ts +20 -0
  91. package/dist/es/business/YkSqlEdit/index.js +180 -0
  92. package/dist/es/business/YkSqlEdit/index.js.map +7 -0
  93. package/dist/es/business/YkSqlEdit/sql-language.d.ts +11 -0
  94. package/dist/es/business/YkSqlEdit/sql-language.js +1460 -0
  95. package/dist/es/business/YkSqlEdit/sql-language.js.map +7 -0
  96. package/dist/es/components/DebounceInput/index.js.map +2 -2
  97. package/dist/es/components/MultipleSelect/index.d.ts +14 -0
  98. package/dist/es/components/MultipleSelect/index.js +1 -1
  99. package/dist/es/components/MultipleSelect/index.js.map +2 -2
  100. package/dist/es/components/RefreshButton/index.js.map +2 -2
  101. package/dist/es/components/SearchWithHistory/index.js +1 -1
  102. package/dist/es/components/SearchWithHistory/index.js.map +2 -2
  103. package/dist/es/components/TextWithToolTip/index.d.ts +1 -1
  104. package/dist/es/components/TextWithToolTip/index.js.map +2 -2
  105. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  106. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  107. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  108. package/dist/es/components/TreeTransfer/index.d.ts +1 -24
  109. package/dist/es/components/TreeTransfer/index.js +8 -8
  110. package/dist/es/components/TreeTransfer/index.js.map +2 -2
  111. package/dist/es/components/TreeTransfer/utils/index.d.ts +1 -1
  112. package/dist/es/components/TreeTransfer/utils/index.js.map +2 -2
  113. package/dist/es/components/YKMarkdown/index.d.ts +11 -0
  114. package/dist/es/components/YKMarkdown/index.js +236 -0
  115. package/dist/es/components/YKMarkdown/index.js.map +7 -0
  116. package/dist/es/components/YKMarkdown/index.module.less +83 -0
  117. package/dist/es/components/YkDateRangePicker/YkDateRangePicker.mdx +194 -0
  118. package/dist/es/components/YkDateRangePicker/index.d.ts +9 -1
  119. package/dist/es/components/YkDateRangePicker/index.js +127 -61
  120. package/dist/es/components/YkDateRangePicker/index.js.map +2 -2
  121. package/dist/es/components/YkDateRangePicker/index.module.less +33 -9
  122. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  123. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  124. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  125. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  126. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +23 -3
  127. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +2 -2
  128. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  129. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  130. package/dist/es/components/YkRangeDateWithVS/index.d.ts +2 -2
  131. package/dist/es/components/YkRangeDateWithVS/index.js.map +2 -2
  132. package/dist/es/components/YkRangeDateWithVS/index.module.less +22 -4
  133. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +1 -1
  134. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +2 -2
  135. package/dist/es/creative/ArcCheckbox/index.d.ts +12 -0
  136. package/dist/es/creative/ArcCheckbox/index.js +49 -0
  137. package/dist/es/creative/ArcCheckbox/index.js.map +7 -0
  138. package/dist/es/creative/ArcCheckbox/index.module.less +102 -0
  139. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +1 -1
  140. package/dist/es/creative/ButtonWithProgress/index.d.ts +1 -1
  141. package/dist/es/creative/ButtonWithProgress/index.js.map +2 -2
  142. package/dist/es/creative/GlassSegmentedRadio/index.d.ts +24 -0
  143. package/dist/es/creative/GlassSegmentedRadio/index.js +75 -0
  144. package/dist/es/creative/GlassSegmentedRadio/index.js.map +7 -0
  145. package/dist/es/creative/GlassSegmentedRadio/index.module.less +241 -0
  146. package/dist/es/creative/SkillsWriter/index.d.ts +3 -0
  147. package/dist/es/creative/SkillsWriter/index.js +191 -0
  148. package/dist/es/creative/SkillsWriter/index.js.map +7 -0
  149. package/dist/es/creative/SkillsWriter/index.module.less +21 -0
  150. package/dist/es/index.d.ts +32 -24
  151. package/dist/es/index.js +90 -80
  152. package/dist/es/index.js.map +2 -2
  153. package/dist/es/index.less +45 -0
  154. package/dist/es/layout/FlexGrid/index.d.ts +1 -1
  155. package/dist/es/layout/FlexGrid/index.js.map +2 -2
  156. package/dist/es/layout/YkContainer/index.js.map +1 -1
  157. package/dist/es/layout/YkDrawer/index.d.ts +1 -1
  158. package/dist/es/layout/YkDrawer/index.js.map +2 -2
  159. package/dist/es/ui/LabelSelect/demo.js +1 -1
  160. package/dist/es/ui/LabelSelect/demo.js.map +2 -2
  161. package/dist/es/ui/LabelSelect/index.d.ts +1 -1
  162. package/dist/es/ui/LabelSelect/index.js +1 -1
  163. package/dist/es/ui/LabelSelect/index.js.map +2 -2
  164. package/dist/es/ui/LogicOperator/index.d.ts +1 -1
  165. package/dist/es/ui/LogicOperator/index.js.map +2 -2
  166. package/dist/es/ui/YkButton/index.d.ts +1 -1
  167. package/dist/es/ui/YkButton/index.js.map +2 -2
  168. package/dist/es/ui/YkCard/index.d.ts +1 -1
  169. package/dist/es/ui/YkCard/index.js +1 -1
  170. package/dist/es/ui/YkCard/index.js.map +2 -2
  171. package/dist/es/ui/YkCheckbox/index.d.ts +1 -1
  172. package/dist/es/ui/YkCheckbox/index.js.map +2 -2
  173. package/dist/es/ui/YkDescriptions/index.d.ts +1 -1
  174. package/dist/es/ui/YkDescriptions/index.js.map +2 -2
  175. package/dist/es/ui/YkPagination/index.d.ts +1 -1
  176. package/dist/es/ui/YkPagination/index.js.map +2 -2
  177. package/dist/es/ui/YkRadio/index.d.ts +1 -1
  178. package/dist/es/ui/YkRadio/index.js.map +2 -2
  179. package/dist/es/ui/YkSegmented/index.d.ts +1 -1
  180. package/dist/es/ui/YkSegmented/index.js.map +2 -2
  181. package/dist/es/ui/YkSelect/index.d.ts +1 -1
  182. package/dist/es/ui/YkSelect/index.js.map +2 -2
  183. package/dist/es/ui/YkSpin/index.d.ts +1 -1
  184. package/dist/es/ui/YkSpin/index.js.map +2 -2
  185. package/dist/es/ui/YkStatistic/index.d.ts +1 -1
  186. package/dist/es/ui/YkStatistic/index.js.map +2 -2
  187. package/dist/es/ui/YkSwitch/index.d.ts +1 -1
  188. package/dist/es/ui/YkSwitch/index.js.map +2 -2
  189. package/dist/es/ui/YkTabs/index.d.ts +1 -1
  190. package/dist/es/ui/YkTabs/index.js.map +2 -2
  191. package/dist/es/ui/YkTooltip/index.d.ts +1 -1
  192. package/dist/es/ui/YkTooltip/index.js.map +2 -2
  193. package/dist/es/utils/styleUtils.js.map +2 -2
  194. package/dist/es/utils/ykStorybookDoc.d.ts +15 -0
  195. package/dist/es/utils/ykStorybookDoc.js +24 -2
  196. package/dist/es/utils/ykStorybookDoc.js.map +2 -2
  197. package/dist/lib/assets/image/skills.zip +0 -0
  198. package/dist/lib/business/AiChat/aichat-logo.svg +1 -0
  199. package/dist/lib/business/AiChat/index.d.ts +3 -3
  200. package/dist/lib/business/AiChat/index.js +311 -129
  201. package/dist/lib/business/AiChat/index.js.map +3 -3
  202. package/dist/lib/business/AiChat/index.module.less +24 -0
  203. package/dist/lib/business/AiChat/intentRecognizer.js.map +1 -1
  204. package/dist/lib/business/AiChat/navigationManager.js +6 -6
  205. package/dist/lib/business/AiChat/navigationManager.js.map +2 -2
  206. package/dist/lib/business/AiChat/sse.d.ts +15 -0
  207. package/dist/lib/business/AiChat/sse.js +117 -7
  208. package/dist/lib/business/AiChat/sse.js.map +2 -2
  209. package/dist/lib/business/AiChat/type.d.ts +22 -23
  210. package/dist/lib/business/AiChat/type.js.map +1 -1
  211. package/dist/lib/business/AiChat/useAiChat.js +104 -74
  212. package/dist/lib/business/AiChat/useAiChat.js.map +3 -3
  213. package/dist/lib/business/AiChat/useTaskWorkflow.d.ts +1 -2
  214. package/dist/lib/business/AiChat/useTaskWorkflow.js +0 -34
  215. package/dist/lib/business/AiChat/useTaskWorkflow.js.map +2 -2
  216. package/dist/lib/business/DrawerPageInfo/index.js.map +1 -1
  217. package/dist/lib/business/Editor/index.d.ts +1 -1
  218. package/dist/lib/business/Editor/index.js.map +2 -2
  219. package/dist/lib/business/Empty/index.js +1 -1
  220. package/dist/lib/business/Empty/index.js.map +1 -1
  221. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +3 -3
  222. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +2 -2
  223. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +4 -4
  224. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +2 -2
  225. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +3 -3
  226. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +2 -2
  227. package/dist/lib/business/ModCommonFilter/index.d.ts +1 -1
  228. package/dist/lib/business/ModCommonFilter/index.js.map +2 -2
  229. package/dist/lib/business/YkCharts/Area.d.ts +18 -0
  230. package/dist/lib/business/YkCharts/Area.js +346 -0
  231. package/dist/lib/business/YkCharts/Area.js.map +7 -0
  232. package/dist/lib/business/YkCharts/Bar.d.ts +21 -0
  233. package/dist/lib/business/YkCharts/Bar.js +323 -0
  234. package/dist/lib/business/YkCharts/Bar.js.map +7 -0
  235. package/dist/lib/business/YkCharts/BarProperty.d.ts +21 -0
  236. package/dist/lib/business/YkCharts/BarProperty.js +370 -0
  237. package/dist/lib/business/YkCharts/BarProperty.js.map +7 -0
  238. package/dist/lib/business/YkCharts/BarTotal.d.ts +21 -0
  239. package/dist/lib/business/YkCharts/BarTotal.js +298 -0
  240. package/dist/lib/business/YkCharts/BarTotal.js.map +7 -0
  241. package/dist/lib/business/YkCharts/Line.d.ts +21 -0
  242. package/dist/lib/business/YkCharts/Line.js +349 -0
  243. package/dist/lib/business/YkCharts/Line.js.map +7 -0
  244. package/dist/lib/business/YkCharts/Pie.d.ts +19 -0
  245. package/dist/lib/business/YkCharts/Pie.js +117 -0
  246. package/dist/lib/business/YkCharts/Pie.js.map +7 -0
  247. package/dist/lib/business/YkCharts/PieProperty.d.ts +18 -0
  248. package/dist/lib/business/YkCharts/PieProperty.js +193 -0
  249. package/dist/lib/business/YkCharts/PieProperty.js.map +7 -0
  250. package/dist/lib/business/YkCharts/Pies.d.ts +26 -0
  251. package/dist/lib/business/YkCharts/Pies.js +341 -0
  252. package/dist/lib/business/YkCharts/Pies.js.map +7 -0
  253. package/dist/lib/business/YkCharts/constants.d.ts +1 -0
  254. package/dist/lib/business/YkCharts/constants.js +71 -0
  255. package/dist/lib/business/YkCharts/constants.js.map +7 -0
  256. package/dist/lib/business/YkCharts/hooks.d.ts +4 -0
  257. package/dist/lib/business/YkCharts/hooks.js +62 -0
  258. package/dist/lib/business/YkCharts/hooks.js.map +7 -0
  259. package/dist/lib/business/YkCharts/index.d.ts +9 -0
  260. package/dist/lib/business/YkCharts/index.js +61 -0
  261. package/dist/lib/business/YkCharts/index.js.map +7 -0
  262. package/dist/lib/business/YkCharts/index.module.less +164 -0
  263. package/dist/lib/business/YkCharts/tooltip.less +92 -0
  264. package/dist/lib/business/YkCharts/transformData.js +40 -0
  265. package/dist/lib/business/YkCharts/transformData.js.map +7 -0
  266. package/dist/lib/business/YkCharts/typing.d.ts +74 -0
  267. package/dist/lib/business/YkCharts/typing.js +18 -0
  268. package/dist/lib/business/YkCharts/typing.js.map +7 -0
  269. package/dist/lib/business/YkCharts/utils.d.ts +4 -0
  270. package/dist/lib/business/YkCharts/utils.js +143 -0
  271. package/dist/lib/business/YkCharts/utils.js.map +7 -0
  272. package/dist/lib/business/YkCharts/variables.less +13 -0
  273. package/dist/lib/business/YkLoginModule/SmsLoginForm.d.ts +25 -0
  274. package/dist/lib/business/YkLoginModule/SmsLoginForm.js +171 -0
  275. package/dist/lib/business/YkLoginModule/SmsLoginForm.js.map +7 -0
  276. package/dist/lib/business/YkLoginModule/index.d.ts +48 -0
  277. package/dist/lib/business/YkLoginModule/index.js +206 -0
  278. package/dist/lib/business/YkLoginModule/index.js.map +7 -0
  279. package/dist/lib/business/YkLoginModule/styles.module.less +169 -0
  280. package/dist/lib/business/YkPorjectSelect/index.d.ts +1 -1
  281. package/dist/lib/business/YkPorjectSelect/index.js +3 -3
  282. package/dist/lib/business/YkPorjectSelect/index.js.map +2 -2
  283. package/dist/lib/business/YkSqlEdit/code-mirror-custom.module.less +154 -0
  284. package/dist/lib/business/YkSqlEdit/index.d.ts +20 -0
  285. package/dist/lib/business/YkSqlEdit/index.js +202 -0
  286. package/dist/lib/business/YkSqlEdit/index.js.map +7 -0
  287. package/dist/lib/business/YkSqlEdit/sql-language.d.ts +11 -0
  288. package/dist/lib/business/YkSqlEdit/sql-language.js +1493 -0
  289. package/dist/lib/business/YkSqlEdit/sql-language.js.map +7 -0
  290. package/dist/lib/components/DebounceInput/index.js.map +2 -2
  291. package/dist/lib/components/MultipleSelect/index.d.ts +14 -0
  292. package/dist/lib/components/MultipleSelect/index.js +1 -1
  293. package/dist/lib/components/MultipleSelect/index.js.map +2 -2
  294. package/dist/lib/components/RefreshButton/index.js.map +2 -2
  295. package/dist/lib/components/SearchWithHistory/index.js +1 -1
  296. package/dist/lib/components/SearchWithHistory/index.js.map +2 -2
  297. package/dist/lib/components/TextWithToolTip/index.d.ts +1 -1
  298. package/dist/lib/components/TextWithToolTip/index.js.map +2 -2
  299. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +1 -24
  300. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +2 -2
  301. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +2 -2
  302. package/dist/lib/components/TreeTransfer/index.d.ts +1 -24
  303. package/dist/lib/components/TreeTransfer/index.js +3 -3
  304. package/dist/lib/components/TreeTransfer/index.js.map +2 -2
  305. package/dist/lib/components/TreeTransfer/utils/index.d.ts +1 -1
  306. package/dist/lib/components/TreeTransfer/utils/index.js.map +2 -2
  307. package/dist/lib/components/YKMarkdown/index.d.ts +11 -0
  308. package/dist/lib/components/YKMarkdown/index.js +188 -0
  309. package/dist/lib/components/YKMarkdown/index.js.map +7 -0
  310. package/dist/lib/components/YKMarkdown/index.module.less +83 -0
  311. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +194 -0
  312. package/dist/lib/components/YkDateRangePicker/index.d.ts +9 -1
  313. package/dist/lib/components/YkDateRangePicker/index.js +127 -61
  314. package/dist/lib/components/YkDateRangePicker/index.js.map +2 -2
  315. package/dist/lib/components/YkDateRangePicker/index.module.less +33 -9
  316. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +1 -1
  317. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +3 -2
  318. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +2 -2
  319. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +1 -1
  320. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +22 -2
  321. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +2 -2
  322. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +1 -1
  323. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +2 -2
  324. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +2 -2
  325. package/dist/lib/components/YkRangeDateWithVS/index.js.map +2 -2
  326. package/dist/lib/components/YkRangeDateWithVS/index.module.less +22 -4
  327. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +1 -1
  328. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +2 -2
  329. package/dist/lib/creative/ArcCheckbox/index.d.ts +12 -0
  330. package/dist/lib/creative/ArcCheckbox/index.js +50 -0
  331. package/dist/lib/creative/ArcCheckbox/index.js.map +7 -0
  332. package/dist/lib/creative/ArcCheckbox/index.module.less +102 -0
  333. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +1 -1
  334. package/dist/lib/creative/ButtonWithProgress/index.d.ts +1 -1
  335. package/dist/lib/creative/ButtonWithProgress/index.js.map +2 -2
  336. package/dist/lib/creative/GlassSegmentedRadio/index.d.ts +24 -0
  337. package/dist/lib/creative/GlassSegmentedRadio/index.js +78 -0
  338. package/dist/lib/creative/GlassSegmentedRadio/index.js.map +7 -0
  339. package/dist/lib/creative/GlassSegmentedRadio/index.module.less +241 -0
  340. package/dist/lib/creative/SkillsWriter/index.d.ts +3 -0
  341. package/dist/lib/creative/SkillsWriter/index.js +200 -0
  342. package/dist/lib/creative/SkillsWriter/index.js.map +7 -0
  343. package/dist/lib/creative/SkillsWriter/index.module.less +21 -0
  344. package/dist/lib/index.d.ts +32 -24
  345. package/dist/lib/index.js +39 -24
  346. package/dist/lib/index.js.map +2 -2
  347. package/dist/lib/index.less +45 -0
  348. package/dist/lib/layout/FlexGrid/index.d.ts +1 -1
  349. package/dist/lib/layout/FlexGrid/index.js.map +2 -2
  350. package/dist/lib/layout/YkContainer/index.js.map +1 -1
  351. package/dist/lib/layout/YkDrawer/index.d.ts +1 -1
  352. package/dist/lib/layout/YkDrawer/index.js.map +2 -2
  353. package/dist/lib/ui/LabelSelect/demo.js +1 -1
  354. package/dist/lib/ui/LabelSelect/demo.js.map +2 -2
  355. package/dist/lib/ui/LabelSelect/index.d.ts +1 -1
  356. package/dist/lib/ui/LabelSelect/index.js +1 -1
  357. package/dist/lib/ui/LabelSelect/index.js.map +2 -2
  358. package/dist/lib/ui/LogicOperator/index.d.ts +1 -1
  359. package/dist/lib/ui/LogicOperator/index.js.map +2 -2
  360. package/dist/lib/ui/YkButton/index.d.ts +1 -1
  361. package/dist/lib/ui/YkButton/index.js.map +2 -2
  362. package/dist/lib/ui/YkCard/index.d.ts +1 -1
  363. package/dist/lib/ui/YkCard/index.js.map +2 -2
  364. package/dist/lib/ui/YkCheckbox/index.d.ts +1 -1
  365. package/dist/lib/ui/YkCheckbox/index.js.map +2 -2
  366. package/dist/lib/ui/YkDescriptions/index.d.ts +1 -1
  367. package/dist/lib/ui/YkDescriptions/index.js.map +2 -2
  368. package/dist/lib/ui/YkPagination/index.d.ts +1 -1
  369. package/dist/lib/ui/YkPagination/index.js.map +2 -2
  370. package/dist/lib/ui/YkRadio/index.d.ts +1 -1
  371. package/dist/lib/ui/YkRadio/index.js.map +2 -2
  372. package/dist/lib/ui/YkSegmented/index.d.ts +1 -1
  373. package/dist/lib/ui/YkSegmented/index.js.map +2 -2
  374. package/dist/lib/ui/YkSelect/index.d.ts +1 -1
  375. package/dist/lib/ui/YkSelect/index.js.map +2 -2
  376. package/dist/lib/ui/YkSpin/index.d.ts +1 -1
  377. package/dist/lib/ui/YkSpin/index.js.map +2 -2
  378. package/dist/lib/ui/YkStatistic/index.d.ts +1 -1
  379. package/dist/lib/ui/YkStatistic/index.js.map +2 -2
  380. package/dist/lib/ui/YkSwitch/index.d.ts +1 -1
  381. package/dist/lib/ui/YkSwitch/index.js.map +2 -2
  382. package/dist/lib/ui/YkTabs/index.d.ts +1 -1
  383. package/dist/lib/ui/YkTabs/index.js.map +2 -2
  384. package/dist/lib/ui/YkTooltip/index.d.ts +1 -1
  385. package/dist/lib/ui/YkTooltip/index.js.map +2 -2
  386. package/dist/lib/utils/styleUtils.js.map +2 -2
  387. package/dist/lib/utils/ykStorybookDoc.d.ts +15 -0
  388. package/dist/lib/utils/ykStorybookDoc.js +23 -1
  389. package/dist/lib/utils/ykStorybookDoc.js.map +2 -2
  390. package/package.json +151 -144
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/business/Empty/index.tsx"],
4
- "sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align='center' justify='center'>\n <Empty\n image={image || EmptyImg}\n styles={{\n image: {\n height: 60,\n width: 150,\n display: 'inline-block',\n ...imageStyle,\n },\n }}\n description={\n description == null || description === '' ? (\n <span style={descriptionStyle}>暂无数据</span>\n ) : typeof description === 'string' ? (\n <span style={descriptionStyle}>{description}</span>\n ) : (\n description\n )\n }\n />\n </Flex>\n );\n },\n);\n\nForwardedEmptyPlaceholder.displayName = 'EmptyPlaceholder';\n\nexport default ForwardedEmptyPlaceholder;\n"],
4
+ "sourcesContent": ["import { Empty, Flex } from 'antd';\nimport type { ForwardedRef } from 'react';\nimport React from 'react';\nimport EmptyImg from './empty.png';\n\n/**\n * 空状态占位组件的 Props(ref 由 forwardRef 注入,无需在 props 中声明)\n */\ntype EmptyProps = {\n /** 空状态插图,不传则使用默认 empty.png */\n image?: React.ReactNode | string;\n /** 描述文案或自定义节点,默认「暂无数据」 */\n description?: string | React.ReactNode;\n /** 图片容器样式,会与默认宽高合并 */\n imageStyle?: React.CSSProperties;\n /** 根节点 Flex 的样式 */\n style?: React.CSSProperties;\n};\n\n/** 描述文字统一样式 */\nconst descriptionStyle: React.CSSProperties = {\n color: '#999',\n fontSize: 14,\n height: 20,\n lineHeight: '20px',\n};\n\n/**\n * 空状态占位:居中展示默认图 + 描述,支持自定义图片与文案,支持 ref 透传。\n */\nconst ForwardedEmptyPlaceholder = React.forwardRef(\n ({ image, description, imageStyle = {}, style = {} }: EmptyProps, ref: ForwardedRef<HTMLDivElement>) => {\n return (\n <Flex ref={ref} style={{ padding: '80px 0', ...style }} align='center' justify='center'>\n <Empty\n image={image || EmptyImg}\n styles={{\n image: {\n height: 60,\n width: 150,\n display: 'inline-block',\n ...imageStyle,\n },\n }}\n description={\n description == null || description === '' ? (\n <span style={descriptionStyle}>暂无数据</span>\n ) : typeof description === 'string' ? (\n <span style={descriptionStyle}>{description}</span>\n ) : (\n description\n )\n }\n />\n </Flex>\n );\n },\n);\n\nForwardedEmptyPlaceholder.displayName = 'Empty';\n\nexport default ForwardedEmptyPlaceholder;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,OAAO,YAAY;AAE5B,OAAO,WAAW;AAClB,OAAO,cAAc;AAiBrB,IAAM,mBAAwC;AAAA,EAC5C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd;AAKA,IAAM,4BAA4B,MAAM;AAAA,EACtC,CAAC,EAAE,OAAO,aAAa,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,GAAe,QAAsC;AACtG,WACE,oCAAC,QAAK,KAAU,OAAO,iBAAE,SAAS,YAAa,QAAS,OAAM,UAAS,SAAQ,YAC7E;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,SAAS;AAAA,QAChB,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,aACN;AAAA,QAEP;AAAA,QACA,aACE,eAAe,QAAQ,gBAAgB,KACrC,oCAAC,UAAK,OAAO,oBAAkB,MAAI,IACjC,OAAO,gBAAgB,WACzB,oCAAC,UAAK,OAAO,oBAAmB,WAAY,IAE5C;AAAA;AAAA,IAGN,CACF;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAExC,IAAO,gBAAQ;",
6
6
  "names": []
7
7
  }
@@ -31,10 +31,10 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/business/ModCommonFilter/components/PopoverContent/Category.tsx
34
- import TextWithTooltip from "../../../../components/TextWithToolTip";
35
34
  import classNames from "classnames";
36
35
  import React, { useRef } from "react";
37
- import { Scrollbars } from "react-custom-scrollbars";
36
+ import { Scrollbars } from "react-custom-scrollbars-2";
37
+ import TextWithTooltip from "../../../../components/TextWithToolTip";
38
38
  import IconXiala from "../FilterButton/IconXiala";
39
39
  import styles from "./index.module.less";
40
40
  var Category = ({ category, categorySelected, setCategorySelected }) => {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/business/ModCommonFilter/components/PopoverContent/Category.tsx"],
4
- "sourcesContent": ["import TextWithTooltip from '@/components/TextWithToolTip';\nimport classNames from 'classnames';\nimport React, { useRef } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport type { CategoryItem } from '../../typing';\nimport IconXiala from '../FilterButton/IconXiala';\nimport styles from './index.module.less';\n\n/**\n * 分类组件的 Props\n */\ninterface PropsType {\n /** 分类项列表(code/name) */\n category?: CategoryItem[];\n /** 当前选中的分类 code */\n categorySelected: string;\n /** 设置选中的分类 */\n setCategorySelected: (categorySelected: string) => void;\n}\n\n/**\n * 筛选弹层左侧分类列表:垂直滚动,点击项切换分类并高亮当前项。\n */\nconst Category: React.FC<PropsType> = ({ category, categorySelected, setCategorySelected }) => {\n const scrollLeftRef = useRef<typeof Scrollbars>(null);\n\n return (\n <div className={styles.category}>\n <Scrollbars\n ref={scrollLeftRef}\n style={{ height: 365 }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n >\n {category?.map((item) => {\n return (\n <div\n onClick={() => {\n setCategorySelected(item.code);\n // setSelfKind(item.isSelf ? item.code : '');\n }}\n key={item.code}\n className={classNames(styles.categoryItem, {\n [styles.categoryItemActive]: categorySelected === item.code,\n })}\n >\n <TextWithTooltip text={item.name} width={100}></TextWithTooltip>\n <IconXiala size={16} className={styles.categoryItemIcon} />\n </div>\n );\n })}\n </Scrollbars>\n </div>\n );\n};\n\nexport default Category;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,qBAAqB;AAC5B,OAAO,gBAAgB;AACvB,OAAO,SAAS,cAAc;AAC9B,SAAS,kBAAkB;AAE3B,OAAO,eAAe;AACtB,OAAO,YAAY;AAiBnB,IAAM,WAAgC,CAAC,EAAE,UAAU,kBAAkB,oBAAoB,MAAM;AAC7F,QAAM,gBAAgB,OAA0B,IAAI;AAEpD,SACE,oCAAC,SAAI,WAAW,OAAO,YACrB;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO,EAAE,QAAQ,IAAI;AAAA,MACrB,qBAAqB,CAAC,OAAqB;AAArB,qBAAE,QA/BhC,IA+B8B,IAAY,kBAAZ,IAAY,CAAV;AACtB,mDAAC,wCAAQ,QAAR,EAAe,OAAO,iCAAK,QAAL,EAAY,YAAY,WAAW,cAAc,EAAE,KAAG;AAAA;AAAA;AAAA,IAG9E,qCAAU,IAAI,CAAC,SAAS;AACvB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM;AACb,gCAAoB,KAAK,IAAI;AAAA,UAE/B;AAAA,UACA,KAAK,KAAK;AAAA,UACV,WAAW,WAAW,OAAO,cAAc;AAAA,YACzC,CAAC,OAAO,kBAAkB,GAAG,qBAAqB,KAAK;AAAA,UACzD,CAAC;AAAA;AAAA,QAED,oCAAC,mBAAgB,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,QAC9C,oCAAC,aAAU,MAAM,IAAI,WAAW,OAAO,kBAAkB;AAAA,MAC3D;AAAA,IAEJ;AAAA,EACF,CACF;AAEJ;AAEA,IAAO,mBAAQ;",
4
+ "sourcesContent": ["import classNames from 'classnames';\nimport React, { useRef } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport type { CategoryItem } from '../../typing';\nimport IconXiala from '../FilterButton/IconXiala';\nimport styles from './index.module.less';\n\n/**\n * 分类组件的 Props\n */\ninterface PropsType {\n /** 分类项列表(code/name) */\n category?: CategoryItem[];\n /** 当前选中的分类 code */\n categorySelected: string;\n /** 设置选中的分类 */\n setCategorySelected: (categorySelected: string) => void;\n}\n\n/**\n * 筛选弹层左侧分类列表:垂直滚动,点击项切换分类并高亮当前项。\n */\nconst Category: React.FC<PropsType> = ({ category, categorySelected, setCategorySelected }) => {\n const scrollLeftRef = useRef<React.ComponentRef<typeof Scrollbars>>(null);\n\n return (\n <div className={styles.category}>\n <Scrollbars\n ref={scrollLeftRef}\n style={{ height: 365 }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n >\n {category?.map((item) => {\n return (\n <div\n onClick={() => {\n setCategorySelected(item.code);\n // setSelfKind(item.isSelf ? item.code : '');\n }}\n key={item.code}\n className={classNames(styles.categoryItem, {\n [styles.categoryItemActive]: categorySelected === item.code,\n })}\n >\n <TextWithTooltip text={item.name} width={100}></TextWithTooltip>\n <IconXiala size={16} className={styles.categoryItemIcon} />\n </div>\n );\n })}\n </Scrollbars>\n </div>\n );\n};\n\nexport default Category;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,gBAAgB;AACvB,OAAO,SAAS,cAAc;AAC9B,SAAS,kBAAkB;AAC3B,OAAO,qBAAqB;AAE5B,OAAO,eAAe;AACtB,OAAO,YAAY;AAiBnB,IAAM,WAAgC,CAAC,EAAE,UAAU,kBAAkB,oBAAoB,MAAM;AAC7F,QAAM,gBAAgB,OAA8C,IAAI;AAExE,SACE,oCAAC,SAAI,WAAW,OAAO,YACrB;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,OAAO,EAAE,QAAQ,IAAI;AAAA,MACrB,qBAAqB,CAAC,OAAqB;AAArB,qBAAE,QA/BhC,IA+B8B,IAAY,kBAAZ,IAAY,CAAV;AACtB,mDAAC,wCAAQ,QAAR,EAAe,OAAO,iCAAK,QAAL,EAAY,YAAY,WAAW,cAAc,EAAE,KAAG;AAAA;AAAA;AAAA,IAG9E,qCAAU,IAAI,CAAC,SAAS;AACvB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,MAAM;AACb,gCAAoB,KAAK,IAAI;AAAA,UAE/B;AAAA,UACA,KAAK,KAAK;AAAA,UACV,WAAW,WAAW,OAAO,cAAc;AAAA,YACzC,CAAC,OAAO,kBAAkB,GAAG,qBAAqB,KAAK;AAAA,UACzD,CAAC;AAAA;AAAA,QAED,oCAAC,mBAAgB,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,QAC9C,oCAAC,aAAU,MAAM,IAAI,WAAW,OAAO,kBAAkB;AAAA,MAC3D;AAAA,IAEJ;AAAA,EACF,CACF;AAEJ;AAEA,IAAO,mBAAQ;",
6
6
  "names": []
7
7
  }
@@ -31,12 +31,12 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/business/ModCommonFilter/components/PopoverContent/Content.tsx
34
- import DebouncedInput from "../../../../components/DebounceInput";
35
- import TextWithTooltip from "../../../../components/TextWithToolTip";
36
34
  import { Checkbox, Divider, Tabs } from "antd";
37
35
  import React, { useEffect, useMemo, useRef, useState } from "react";
38
- import { Scrollbars } from "react-custom-scrollbars";
36
+ import { Scrollbars } from "react-custom-scrollbars-2";
39
37
  import { Grid } from "react-virtualized";
38
+ import DebouncedInput from "../../../../components/DebounceInput";
39
+ import TextWithTooltip from "../../../../components/TextWithToolTip";
40
40
  import emptyImg from "../../assets/images/empty.png";
41
41
  import styles from "./index.module.less";
42
42
  var Content = ({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/business/ModCommonFilter/components/PopoverContent/Content.tsx"],
4
- "sourcesContent": ["import DebouncedInput from '@/components/DebounceInput';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport { Checkbox, Divider, Tabs } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport { Grid } from 'react-virtualized';\nimport emptyImg from '../../assets/images/empty.png';\nimport type { ListItem, TerminalItem } from '../../typing';\nimport styles from './index.module.less';\n\n/**\n * 可选列表内容区的 Props\n */\ninterface PropsType {\n /** 终端 Tab 数据(如 全部/PC/APP),无则不展示终端 Tab */\n terminal?: TerminalItem[];\n /** 当前分类下的可选列表 */\n list: ListItem[];\n /** 当前已选中的 code 列表 */\n selected: string[];\n /** 更新已选中列表 */\n setSelected: (selected: string[]) => void;\n /** 搜索框占位文案 */\n placeholder: string;\n /** 当前选中的分类 code,用于过滤 list */\n categorySelected: string;\n /** 网格列数 */\n columnCount?: number;\n /** 内容区宽度 */\n contentWidth?: number;\n /** 每行高度 */\n rowHeight?: number;\n /** 每格自定义渲染 */\n cellRender?: (item: ListItem) => React.ReactNode;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 通知父组件「用户是否有过勾选操作」 */\n setHasOperation: (hasOperation: boolean) => void;\n}\n\n/**\n * 筛选弹层中间区域:终端 Tab(可选)+ 搜索 + 全选 + 虚拟列表勾选。\n * 内部维护 modalChecked 与外部 selected 同步,并用 isInternalUpdate 区分内外更新避免循环。\n */\nconst Content: React.FC<PropsType> = ({\n terminal,\n list,\n selected,\n setSelected,\n placeholder,\n categorySelected,\n columnCount = 1,\n contentWidth = 510,\n rowHeight = 32,\n cellRender,\n showCode = false,\n setHasOperation,\n}) => {\n const [searchKey, setSearchKey] = useState<string>('');\n /** 当前选中的终端 Tab(code),空字符串表示「全部」 */\n const [terminalSelected, setTerminalSelected] = useState<string>('');\n /** 弹层内勾选状态(与 selected 同步,用于避免直接改 selected 导致父组件重渲染影响虚拟列表) */\n const [modalChecked, setModalChecked] = useState<string[]>(selected);\n\n /** 已选 code -> true 的 Map,用于 O(1) 判断是否选中 */\n const modalCheckMap = useMemo(() => {\n return new Map(modalChecked.map((item) => [item, true]));\n }, [modalChecked]);\n\n const scrollbarsRef = useRef(null);\n const gridRef = useRef(null);\n /** 标记本次 selected 变更是否由本组件内部更新引起,避免 useEffect 把外部重置误同步进 modalChecked */\n const isInternalUpdate = useRef(false);\n\n /** 外部 selected 变化时同步到 modalChecked;若为内部更新触发的 effect 则跳过避免覆盖 */\n useEffect(() => {\n if (isInternalUpdate.current) {\n isInternalUpdate.current = false;\n return;\n }\n setModalChecked(selected);\n }, [selected]);\n\n /** 根据搜索关键词、终端、分类过滤后的列表,供虚拟列表与全选使用 */\n const filterList = useMemo(() => {\n const key = searchKey.trim().toUpperCase();\n return list\n .filter((v) => v.name.toUpperCase().includes(key) || (showCode && v.code.toUpperCase().includes(key)))\n .filter((f) => terminalSelected === '' || f.terminal === terminalSelected)\n .filter((f) => categorySelected === '' || f.category === categorySelected);\n }, [list, searchKey, terminalSelected, categorySelected]);\n\n /** 全选勾选状态与半选状态(基于当前 filterList 与 modalChecked) */\n const { allChecked, isIndeterminate } = useMemo(() => {\n if (filterList.length === 0) {\n return { allChecked: false, isIndeterminate: false };\n }\n const checkedCount = filterList.filter((item) => modalCheckMap.get(item.code)).length;\n const allChecked = checkedCount === filterList.length;\n const isIndeterminate = checkedCount > 0 && checkedCount < filterList.length;\n return { allChecked, isIndeterminate };\n }, [filterList, modalChecked]);\n\n /** 终端选项列表,头部插入「全部」(code: '') */\n const useTerminal = useMemo(() => {\n const newTerminal: TerminalItem[] = terminal ? [...terminal] : [];\n newTerminal.unshift({\n code: '',\n name: '全部',\n });\n return newTerminal;\n }, [terminal]);\n\n /** 更新弹层内勾选状态并同步到父组件 selected,并标记有过操作 */\n function updateModalChecked(checked: string[]) {\n isInternalUpdate.current = true;\n setModalChecked(checked);\n setSelected(checked);\n setHasOperation(true);\n }\n\n /** 全选/取消全选:仅针对当前 filterList 中的项 */\n const handleAllChecked = (checked: boolean) => {\n const filterCodes = filterList.map((item) => item.code);\n if (checked) {\n // 全选:将过滤列表中的所有项添加到已选列表(去重)\n const newChecked = Array.from(new Set([...modalChecked, ...filterCodes]));\n updateModalChecked(newChecked);\n } else {\n // 取消全选:从已选列表中移除过滤列表中的所有项\n const newChecked = modalChecked.filter((code) => !filterCodes.includes(code));\n updateModalChecked(newChecked);\n }\n };\n\n /** 将 Scrollbars 的滚动事件转发给 Grid,保证虚拟列表滚动一致 */\n const handleScrollbarScroll = (event: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = event.target as HTMLElement;\n if (gridRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (gridRef.current as any).handleScrollEvent({ scrollTop, scrollLeft });\n }\n };\n\n /** 根据 code 判断该项是否已选中 */\n function isItemChecked(value: string) {\n return modalCheckMap.get(value);\n }\n\n /** 切换单项勾选状态 */\n function checkItem(value: string) {\n if (isItemChecked(value)) {\n updateModalChecked(modalChecked.filter((item) => item !== value));\n } else {\n updateModalChecked([...modalChecked, value]);\n }\n }\n\n return (\n <div className={styles.content}>\n <div className={styles.contentHeader}>\n {terminal && terminal.length > 0 && (\n <>\n <Tabs\n activeKey={terminalSelected}\n items={useTerminal.map((v) => ({\n key: v.code,\n label: v.name,\n }))}\n onChange={(value) => {\n setTerminalSelected(value);\n }}\n />\n <Divider type='vertical' style={{ margin: '0 0 0 20px' }} />\n </>\n )}\n <DebouncedInput\n allowClear={false}\n placeholder={placeholder}\n currentValue={searchKey}\n onChange={(value) => {\n setSearchKey(value);\n }}\n inputClass={styles.search}\n ></DebouncedInput>\n </div>\n <div className={styles.contentList}>\n <div className={styles.checkAll}>\n <Checkbox\n checked={allChecked}\n indeterminate={isIndeterminate}\n onChange={() => {\n handleAllChecked(!allChecked);\n }}\n >\n 全选\n </Checkbox>\n </div>\n <Scrollbars\n style={{ height: 285, width: contentWidth }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n ref={scrollbarsRef}\n onScroll={handleScrollbarScroll}\n >\n <div className={styles.contentListInner}>\n <Grid\n style={{ overflowX: 'visible', overflowY: 'visible' }}\n overscanRowCount={5}\n ref={gridRef}\n columnCount={columnCount}\n rowCount={Math.ceil(filterList.length / columnCount)}\n height={285}\n width={contentWidth - 40}\n columnWidth={(contentWidth - 40) / columnCount}\n rowHeight={rowHeight}\n cellRenderer={({\n columnIndex,\n key,\n rowIndex,\n style,\n }: {\n columnIndex: number;\n key: string;\n rowIndex: number;\n style: React.CSSProperties;\n }) => {\n const item = filterList[rowIndex * columnCount + columnIndex];\n if (!item) return;\n return (\n <div key={key} style={style}>\n <Checkbox\n checked={isItemChecked(item.code)}\n onChange={() => {\n checkItem(item.code);\n }}\n >\n {cellRender ? (\n cellRender(item)\n ) : (\n <TextWithTooltip\n text={item?.name + (showCode ? '(' + item?.code + ')' : '')}\n width={(contentWidth - 40 * columnCount) / columnCount}\n ></TextWithTooltip>\n )}\n </Checkbox>\n </div>\n );\n }}\n noContentRenderer={() => (\n <div className={styles.empty}>\n <img src={emptyImg} alt='' />\n <p>当前搜索条件无数据</p>\n </div>\n )}\n />\n </div>\n </Scrollbars>\n </div>\n </div>\n );\n};\n\nexport default Content;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Checkbox, Divider, Tabs } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { Grid } from 'react-virtualized';\nimport DebouncedInput from '@/components/DebounceInput';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport emptyImg from '../../assets/images/empty.png';\nimport type { ListItem, TerminalItem } from '../../typing';\nimport styles from './index.module.less';\n\n/**\n * 可选列表内容区的 Props\n */\ninterface PropsType {\n /** 终端 Tab 数据(如 全部/PC/APP),无则不展示终端 Tab */\n terminal?: TerminalItem[];\n /** 当前分类下的可选列表 */\n list: ListItem[];\n /** 当前已选中的 code 列表 */\n selected: string[];\n /** 更新已选中列表 */\n setSelected: (selected: string[]) => void;\n /** 搜索框占位文案 */\n placeholder: string;\n /** 当前选中的分类 code,用于过滤 list */\n categorySelected: string;\n /** 网格列数 */\n columnCount?: number;\n /** 内容区宽度 */\n contentWidth?: number;\n /** 每行高度 */\n rowHeight?: number;\n /** 每格自定义渲染 */\n cellRender?: (item: ListItem) => React.ReactNode;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 通知父组件「用户是否有过勾选操作」 */\n setHasOperation: (hasOperation: boolean) => void;\n}\n\n/**\n * 筛选弹层中间区域:终端 Tab(可选)+ 搜索 + 全选 + 虚拟列表勾选。\n * 内部维护 modalChecked 与外部 selected 同步,并用 isInternalUpdate 区分内外更新避免循环。\n */\nconst Content: React.FC<PropsType> = ({\n terminal,\n list,\n selected,\n setSelected,\n placeholder,\n categorySelected,\n columnCount = 1,\n contentWidth = 510,\n rowHeight = 32,\n cellRender,\n showCode = false,\n setHasOperation,\n}) => {\n const [searchKey, setSearchKey] = useState<string>('');\n /** 当前选中的终端 Tab(code),空字符串表示「全部」 */\n const [terminalSelected, setTerminalSelected] = useState<string>('');\n /** 弹层内勾选状态(与 selected 同步,用于避免直接改 selected 导致父组件重渲染影响虚拟列表) */\n const [modalChecked, setModalChecked] = useState<string[]>(selected);\n\n /** 已选 code -> true 的 Map,用于 O(1) 判断是否选中 */\n const modalCheckMap = useMemo(() => {\n return new Map(modalChecked.map((item) => [item, true]));\n }, [modalChecked]);\n\n const scrollbarsRef = useRef(null);\n const gridRef = useRef(null);\n /** 标记本次 selected 变更是否由本组件内部更新引起,避免 useEffect 把外部重置误同步进 modalChecked */\n const isInternalUpdate = useRef(false);\n\n /** 外部 selected 变化时同步到 modalChecked;若为内部更新触发的 effect 则跳过避免覆盖 */\n useEffect(() => {\n if (isInternalUpdate.current) {\n isInternalUpdate.current = false;\n return;\n }\n setModalChecked(selected);\n }, [selected]);\n\n /** 根据搜索关键词、终端、分类过滤后的列表,供虚拟列表与全选使用 */\n const filterList = useMemo(() => {\n const key = searchKey.trim().toUpperCase();\n return list\n .filter((v) => v.name.toUpperCase().includes(key) || (showCode && v.code.toUpperCase().includes(key)))\n .filter((f) => terminalSelected === '' || f.terminal === terminalSelected)\n .filter((f) => categorySelected === '' || f.category === categorySelected);\n }, [list, searchKey, terminalSelected, categorySelected]);\n\n /** 全选勾选状态与半选状态(基于当前 filterList 与 modalChecked) */\n const { allChecked, isIndeterminate } = useMemo(() => {\n if (filterList.length === 0) {\n return { allChecked: false, isIndeterminate: false };\n }\n const checkedCount = filterList.filter((item) => modalCheckMap.get(item.code)).length;\n const allChecked = checkedCount === filterList.length;\n const isIndeterminate = checkedCount > 0 && checkedCount < filterList.length;\n return { allChecked, isIndeterminate };\n }, [filterList, modalChecked]);\n\n /** 终端选项列表,头部插入「全部」(code: '') */\n const useTerminal = useMemo(() => {\n const newTerminal: TerminalItem[] = terminal ? [...terminal] : [];\n newTerminal.unshift({\n code: '',\n name: '全部',\n });\n return newTerminal;\n }, [terminal]);\n\n /** 更新弹层内勾选状态并同步到父组件 selected,并标记有过操作 */\n function updateModalChecked(checked: string[]) {\n isInternalUpdate.current = true;\n setModalChecked(checked);\n setSelected(checked);\n setHasOperation(true);\n }\n\n /** 全选/取消全选:仅针对当前 filterList 中的项 */\n const handleAllChecked = (checked: boolean) => {\n const filterCodes = filterList.map((item) => item.code);\n if (checked) {\n // 全选:将过滤列表中的所有项添加到已选列表(去重)\n const newChecked = Array.from(new Set([...modalChecked, ...filterCodes]));\n updateModalChecked(newChecked);\n } else {\n // 取消全选:从已选列表中移除过滤列表中的所有项\n const newChecked = modalChecked.filter((code) => !filterCodes.includes(code));\n updateModalChecked(newChecked);\n }\n };\n\n /** 将 Scrollbars 的滚动事件转发给 Grid,保证虚拟列表滚动一致 */\n const handleScrollbarScroll = (event: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = event.target as HTMLElement;\n if (gridRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (gridRef.current as any).handleScrollEvent({ scrollTop, scrollLeft });\n }\n };\n\n /** 根据 code 判断该项是否已选中 */\n function isItemChecked(value: string) {\n return modalCheckMap.get(value);\n }\n\n /** 切换单项勾选状态 */\n function checkItem(value: string) {\n if (isItemChecked(value)) {\n updateModalChecked(modalChecked.filter((item) => item !== value));\n } else {\n updateModalChecked([...modalChecked, value]);\n }\n }\n\n return (\n <div className={styles.content}>\n <div className={styles.contentHeader}>\n {terminal && terminal.length > 0 && (\n <>\n <Tabs\n activeKey={terminalSelected}\n items={useTerminal.map((v) => ({\n key: v.code,\n label: v.name,\n }))}\n onChange={(value) => {\n setTerminalSelected(value);\n }}\n />\n <Divider type='vertical' style={{ margin: '0 0 0 20px' }} />\n </>\n )}\n <DebouncedInput\n allowClear={false}\n placeholder={placeholder}\n currentValue={searchKey}\n onChange={(value) => {\n setSearchKey(value);\n }}\n inputClass={styles.search}\n ></DebouncedInput>\n </div>\n <div className={styles.contentList}>\n <div className={styles.checkAll}>\n <Checkbox\n checked={allChecked}\n indeterminate={isIndeterminate}\n onChange={() => {\n handleAllChecked(!allChecked);\n }}\n >\n 全选\n </Checkbox>\n </div>\n <Scrollbars\n style={{ height: 285, width: contentWidth }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n ref={scrollbarsRef}\n onScroll={handleScrollbarScroll}\n >\n <div className={styles.contentListInner}>\n <Grid\n style={{ overflowX: 'visible', overflowY: 'visible' }}\n overscanRowCount={5}\n ref={gridRef}\n columnCount={columnCount}\n rowCount={Math.ceil(filterList.length / columnCount)}\n height={285}\n width={contentWidth - 40}\n columnWidth={(contentWidth - 40) / columnCount}\n rowHeight={rowHeight}\n cellRenderer={({\n columnIndex,\n key,\n rowIndex,\n style,\n }: {\n columnIndex: number;\n key: string;\n rowIndex: number;\n style: React.CSSProperties;\n }) => {\n const item = filterList[rowIndex * columnCount + columnIndex];\n if (!item) return;\n return (\n <div key={key} style={style}>\n <Checkbox\n checked={isItemChecked(item.code)}\n onChange={() => {\n checkItem(item.code);\n }}\n >\n {cellRender ? (\n cellRender(item)\n ) : (\n <TextWithTooltip\n text={item?.name + (showCode ? '(' + item?.code + ')' : '')}\n width={(contentWidth - 40 * columnCount) / columnCount}\n ></TextWithTooltip>\n )}\n </Checkbox>\n </div>\n );\n }}\n noContentRenderer={() => (\n <div className={styles.empty}>\n <img src={emptyImg} alt='' />\n <p>当前搜索条件无数据</p>\n </div>\n )}\n />\n </div>\n </Scrollbars>\n </div>\n </div>\n );\n};\n\nexport default Content;\n"],
5
+ "mappings": "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",
6
6
  "names": ["allChecked", "isIndeterminate"]
7
7
  }
@@ -31,11 +31,11 @@ var __objRest = (source, exclude) => {
31
31
  };
32
32
 
33
33
  // src/business/ModCommonFilter/components/PopoverContent/Selected.tsx
34
- import TextWithTooltip from "../../../../components/TextWithToolTip";
35
34
  import classNames from "classnames";
36
35
  import React, { useRef } from "react";
37
- import { Scrollbars } from "react-custom-scrollbars";
36
+ import { Scrollbars } from "react-custom-scrollbars-2";
38
37
  import { AutoSizer, List } from "react-virtualized";
38
+ import TextWithTooltip from "../../../../components/TextWithToolTip";
39
39
  import styles from "./index.module.less";
40
40
  var Selected = ({
41
41
  list,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/business/ModCommonFilter/components/PopoverContent/Selected.tsx"],
4
- "sourcesContent": ["import TextWithTooltip from '@/components/TextWithToolTip';\nimport classNames from 'classnames';\nimport React, { useRef } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars';\nimport { AutoSizer, List } from 'react-virtualized';\nimport type { ListItem } from '../../typing';\nimport styles from './index.module.less';\n\n/**\n * 已选列表组件的 Props\n */\ninterface PropsType {\n /** 完整列表数据,用于根据 selected 中的 code 取 name 等信息 */\n list: ListItem[];\n /** 已选中的 code 数组(顺序即展示顺序) */\n selected: string[];\n /** 更新已选列表 */\n setSelected: (selected: string[]) => void;\n /** 内容宽度(当前未在 Selected 内使用,可做预留) */\n contentWidth?: number;\n /** 每行高度 */\n rowHeight?: number;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 已选列表中每行的自定义渲染 */\n checkedCellRender?: (item: ListItem) => React.ReactNode;\n}\n\n/**\n * 筛选弹层右侧已选列表:展示已选数量、清空、虚拟列表逐项展示并可删除。\n */\nconst Selected: React.FC<PropsType> = ({\n list,\n selected,\n setSelected,\n rowHeight = 32,\n showCode,\n checkedCellRender,\n}) => {\n const listScrollbarsRef = useRef<typeof Scrollbars>(null);\n const listRef = useRef(null);\n\n /** 将 Scrollbars 滚动同步到 List,保证虚拟列表与滚动条一致 */\n const handleListScrollbarScroll = (event: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = event.target as HTMLElement;\n if (listRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (listRef.current as any).Grid.handleScrollEvent({ scrollTop, scrollLeft });\n }\n };\n\n return (\n <div className={styles.selected}>\n <div className={styles.selectedHeader}>\n <span>已选{selected.length}个</span>\n <span className={styles.clear} onClick={() => setSelected([])}>\n 清空\n </span>\n </div>\n\n <Scrollbars\n style={{ height: 325 }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n ref={listScrollbarsRef}\n onScroll={handleListScrollbarScroll}\n >\n <div className={styles.selectedContent}>\n <AutoSizer disableHeight>\n {({ width }: { width: number }) => (\n <List\n ref={listRef}\n style={{ overflowX: 'visible', overflowY: 'visible' }}\n rowCount={selected.length}\n height={325}\n width={width}\n rowHeight={rowHeight}\n rowRenderer={({ index, key, style }: { index: number; key: string; style: React.CSSProperties }) => {\n const option = list.find((option) => option.code === selected[index]);\n return (\n <div className={styles.selectedItem} key={key} style={style}>\n {option && checkedCellRender ? (\n checkedCellRender(option)\n ) : (\n <TextWithTooltip\n text={option?.name + (showCode ? '(' + option?.code + ')' : '')}\n width='100%'\n ></TextWithTooltip>\n )}\n\n <i\n className={classNames('iconfont icon-lajitong', styles.close)}\n onClick={() => {\n setSelected(selected.filter((item) => item !== selected[index]));\n }}\n ></i>\n </div>\n );\n }}\n ></List>\n )}\n </AutoSizer>\n </div>\n </Scrollbars>\n </div>\n );\n};\n\nexport default Selected;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,qBAAqB;AAC5B,OAAO,gBAAgB;AACvB,OAAO,SAAS,cAAc;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,WAAW,YAAY;AAEhC,OAAO,YAAY;AAyBnB,IAAM,WAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,QAAM,oBAAoB,OAA0B,IAAI;AACxD,QAAM,UAAU,OAAO,IAAI;AAG3B,QAAM,4BAA4B,CAAC,UAAyC;AAC1E,UAAM,EAAE,WAAW,WAAW,IAAI,MAAM;AACxC,QAAI,QAAQ,SAAS;AAEnB,MAAC,QAAQ,QAAgB,KAAK,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,SACE,oCAAC,SAAI,WAAW,OAAO,YACrB,oCAAC,SAAI,WAAW,OAAO,kBACrB,oCAAC,cAAK,MAAG,SAAS,QAAO,GAAC,GAC1B,oCAAC,UAAK,WAAW,OAAO,OAAO,SAAS,MAAM,YAAY,CAAC,CAAC,KAAG,IAE/D,CACF,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,QAAQ,IAAI;AAAA,MACrB,qBAAqB,CAAC,OAAqB;AAArB,qBAAE,QA9DhC,IA8D8B,IAAY,kBAAZ,IAAY,CAAV;AACtB,mDAAC,wCAAQ,QAAR,EAAe,OAAO,iCAAK,QAAL,EAAY,YAAY,WAAW,cAAc,EAAE,KAAG;AAAA;AAAA,MAE/E,KAAK;AAAA,MACL,UAAU;AAAA;AAAA,IAEV,oCAAC,SAAI,WAAW,OAAO,mBACrB,oCAAC,aAAU,eAAa,QACrB,CAAC,EAAE,MAAM,MACR;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO,EAAE,WAAW,WAAW,WAAW,UAAU;AAAA,QACpD,UAAU,SAAS;AAAA,QACnB,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,aAAa,CAAC,EAAE,OAAO,KAAK,MAAM,MAAkE;AAClG,gBAAM,SAAS,KAAK,KAAK,CAACA,YAAWA,QAAO,SAAS,SAAS,KAAK,CAAC;AACpE,iBACE,oCAAC,SAAI,WAAW,OAAO,cAAc,KAAU,SAC5C,UAAU,oBACT,kBAAkB,MAAM,IAExB;AAAA,YAAC;AAAA;AAAA,cACC,OAAM,iCAAQ,SAAQ,WAAW,OAAM,iCAAQ,QAAO,MAAM;AAAA,cAC5D,OAAM;AAAA;AAAA,UACP,GAGH;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,WAAW,0BAA0B,OAAO,KAAK;AAAA,cAC5D,SAAS,MAAM;AACb,4BAAY,SAAS,OAAO,CAAC,SAAS,SAAS,SAAS,KAAK,CAAC,CAAC;AAAA,cACjE;AAAA;AAAA,UACD,CACH;AAAA,QAEJ;AAAA;AAAA,IACD,CAEL,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAO,mBAAQ;",
4
+ "sourcesContent": ["import classNames from 'classnames';\nimport React, { useRef } from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport { AutoSizer, List } from 'react-virtualized';\nimport TextWithTooltip from '@/components/TextWithToolTip';\nimport type { ListItem } from '../../typing';\nimport styles from './index.module.less';\n\n/**\n * 已选列表组件的 Props\n */\ninterface PropsType {\n /** 完整列表数据,用于根据 selected 中的 code 取 name 等信息 */\n list: ListItem[];\n /** 已选中的 code 数组(顺序即展示顺序) */\n selected: string[];\n /** 更新已选列表 */\n setSelected: (selected: string[]) => void;\n /** 内容宽度(当前未在 Selected 内使用,可做预留) */\n contentWidth?: number;\n /** 每行高度 */\n rowHeight?: number;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 已选列表中每行的自定义渲染 */\n checkedCellRender?: (item: ListItem) => React.ReactNode;\n}\n\n/**\n * 筛选弹层右侧已选列表:展示已选数量、清空、虚拟列表逐项展示并可删除。\n */\nconst Selected: React.FC<PropsType> = ({\n list,\n selected,\n setSelected,\n rowHeight = 32,\n showCode,\n checkedCellRender,\n}) => {\n const listScrollbarsRef = useRef<React.ComponentRef<typeof Scrollbars>>(null);\n const listRef = useRef(null);\n\n /** 将 Scrollbars 滚动同步到 List,保证虚拟列表与滚动条一致 */\n const handleListScrollbarScroll = (event: React.UIEvent<HTMLDivElement>) => {\n const { scrollTop, scrollLeft } = event.target as HTMLElement;\n if (listRef.current) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (listRef.current as any).Grid.handleScrollEvent({ scrollTop, scrollLeft });\n }\n };\n\n return (\n <div className={styles.selected}>\n <div className={styles.selectedHeader}>\n <span>已选{selected.length}个</span>\n <span className={styles.clear} onClick={() => setSelected([])}>\n 清空\n </span>\n </div>\n\n <Scrollbars\n style={{ height: 325 }}\n renderThumbVertical={({ style, ...props }) => (\n <div {...props} style={{ ...style, background: '#EFEFEF', borderRadius: 3 }} />\n )}\n ref={listScrollbarsRef}\n onScroll={handleListScrollbarScroll}\n >\n <div className={styles.selectedContent}>\n <AutoSizer disableHeight>\n {({ width }: { width: number }) => (\n <List\n ref={listRef}\n style={{ overflowX: 'visible', overflowY: 'visible' }}\n rowCount={selected.length}\n height={325}\n width={width}\n rowHeight={rowHeight}\n rowRenderer={({ index, key, style }: { index: number; key: string; style: React.CSSProperties }) => {\n const option = list.find((option) => option.code === selected[index]);\n return (\n <div className={styles.selectedItem} key={key} style={style}>\n {option && checkedCellRender ? (\n checkedCellRender(option)\n ) : (\n <TextWithTooltip\n text={option?.name + (showCode ? '(' + option?.code + ')' : '')}\n width='100%'\n ></TextWithTooltip>\n )}\n\n <i\n className={classNames('iconfont icon-lajitong', styles.close)}\n onClick={() => {\n setSelected(selected.filter((item) => item !== selected[index]));\n }}\n ></i>\n </div>\n );\n }}\n ></List>\n )}\n </AutoSizer>\n </div>\n </Scrollbars>\n </div>\n );\n};\n\nexport default Selected;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,gBAAgB;AACvB,OAAO,SAAS,cAAc;AAC9B,SAAS,kBAAkB;AAC3B,SAAS,WAAW,YAAY;AAChC,OAAO,qBAAqB;AAE5B,OAAO,YAAY;AAyBnB,IAAM,WAAgC,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AACF,MAAM;AACJ,QAAM,oBAAoB,OAA8C,IAAI;AAC5E,QAAM,UAAU,OAAO,IAAI;AAG3B,QAAM,4BAA4B,CAAC,UAAyC;AAC1E,UAAM,EAAE,WAAW,WAAW,IAAI,MAAM;AACxC,QAAI,QAAQ,SAAS;AAEnB,MAAC,QAAQ,QAAgB,KAAK,kBAAkB,EAAE,WAAW,WAAW,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,SACE,oCAAC,SAAI,WAAW,OAAO,YACrB,oCAAC,SAAI,WAAW,OAAO,kBACrB,oCAAC,cAAK,MAAG,SAAS,QAAO,GAAC,GAC1B,oCAAC,UAAK,WAAW,OAAO,OAAO,SAAS,MAAM,YAAY,CAAC,CAAC,KAAG,IAE/D,CACF,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,QAAQ,IAAI;AAAA,MACrB,qBAAqB,CAAC,OAAqB;AAArB,qBAAE,QA9DhC,IA8D8B,IAAY,kBAAZ,IAAY,CAAV;AACtB,mDAAC,wCAAQ,QAAR,EAAe,OAAO,iCAAK,QAAL,EAAY,YAAY,WAAW,cAAc,EAAE,KAAG;AAAA;AAAA,MAE/E,KAAK;AAAA,MACL,UAAU;AAAA;AAAA,IAEV,oCAAC,SAAI,WAAW,OAAO,mBACrB,oCAAC,aAAU,eAAa,QACrB,CAAC,EAAE,MAAM,MACR;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO,EAAE,WAAW,WAAW,WAAW,UAAU;AAAA,QACpD,UAAU,SAAS;AAAA,QACnB,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,aAAa,CAAC,EAAE,OAAO,KAAK,MAAM,MAAkE;AAClG,gBAAM,SAAS,KAAK,KAAK,CAACA,YAAWA,QAAO,SAAS,SAAS,KAAK,CAAC;AACpE,iBACE,oCAAC,SAAI,WAAW,OAAO,cAAc,KAAU,SAC5C,UAAU,oBACT,kBAAkB,MAAM,IAExB;AAAA,YAAC;AAAA;AAAA,cACC,OAAM,iCAAQ,SAAQ,WAAW,OAAM,iCAAQ,QAAO,MAAM;AAAA,cAC5D,OAAM;AAAA;AAAA,UACP,GAGH;AAAA,YAAC;AAAA;AAAA,cACC,WAAW,WAAW,0BAA0B,OAAO,KAAK;AAAA,cAC5D,SAAS,MAAM;AACb,4BAAY,SAAS,OAAO,CAAC,SAAS,SAAS,SAAS,KAAK,CAAC,CAAC;AAAA,cACjE;AAAA;AAAA,UACD,CACH;AAAA,QAEJ;AAAA;AAAA,IACD,CAEL,CACF;AAAA,EACF,CACF;AAEJ;AAEA,IAAO,mBAAQ;",
6
6
  "names": ["option"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import { PopoverProps } from 'antd';
1
+ import { type PopoverProps } from 'antd';
2
2
  import React from 'react';
3
3
  import type { CategoryItem, ListItem, TerminalItem } from './typing';
4
4
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/business/ModCommonFilter/index.tsx"],
4
- "sourcesContent": ["import { Popover, PopoverProps } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterButton from './components/FilterButton';\nimport PopoverContent from './components/PopoverContent';\nimport styles from './index.module.less';\nimport type { CategoryItem, ListItem, TerminalItem } from './typing';\n\n/**\n * 通用筛选器组件的 Props\n */\nexport interface ModCommonFilterProps {\n /** 当前选中的值(code 数组),受控 */\n value: string[];\n /** 选中项变化回调 */\n onChange: (value: string[]) => void;\n /** 可选列表数据 */\n list: ListItem[];\n /** 筛选维度名称,如「品类」「品牌」 */\n title: string;\n /** 按钮/标题前缀文案,如「筛选」 */\n prefixTitle?: string;\n /** 按钮左侧图标 */\n iconPrefix?: React.ReactNode;\n /** 分类列表,有则弹层左侧展示分类 Tab */\n category?: CategoryItem[];\n /** 终端列表,有则弹层内展示终端 Tab(如全部/PC/APP) */\n terminal?: TerminalItem[];\n /** 搜索框占位文案 */\n placeholder?: string;\n /** Popover 层级 */\n zIndex?: number;\n /** Popover 弹出方向 */\n placement?: PopoverProps['placement'];\n /** 透传给 antd Popover 的额外属性 */\n popoverProps?: PopoverProps;\n /** 可选列表列数(多列网格) */\n columnCount?: number;\n /** 内容区宽度 */\n contentWidth?: number;\n /** 列表行高 */\n rowHeight?: number;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 可选列表中每项的自定义渲染 */\n cellRender?: (item: ListItem) => React.ReactNode;\n /** 已选列表中每项的自定义渲染 */\n checkedCellRender?: (item: ListItem) => React.ReactNode;\n /** 弹层底部备注文案或节点 */\n remark?: string | React.ReactNode;\n /** 自定义触发区域,不传则使用默认 FilterButton */\n filterChildren?: React.ReactNode;\n}\n\n/**\n * 通用筛选器:点击按钮打开 Popover,内为分类 + 可选列表 + 已选列表,确认后回调 onChange。\n */\nconst ModCommonFilter: React.FC<ModCommonFilterProps> = ({\n value,\n onChange,\n list,\n title,\n prefixTitle,\n iconPrefix,\n category,\n terminal,\n placeholder = '搜索',\n zIndex = 100,\n placement = 'bottomRight',\n columnCount = 1,\n contentWidth,\n rowHeight,\n showCode = false,\n popoverProps = {},\n cellRender,\n checkedCellRender,\n remark,\n filterChildren,\n}) => {\n const [popOpen, setPopOpen] = useState(false);\n /** 弹层内当前选中的 code 列表,打开时与 value 同步 */\n const [selected, setSelected] = useState<string[]>([]);\n /** 当前选中的分类 code,空字符串表示「全部」 */\n const [categorySelected, setCategorySelected] = useState<string>('');\n\n /** 弹层打开时用外部 value 同步 selected,保证每次打开初始为当前已选 */\n useEffect(() => {\n if (popOpen) {\n setSelected(value || []);\n }\n }, [popOpen, value]);\n\n /** 分类选项列表,头部插入「全部{title}」 */\n const useCateGory = useMemo(() => {\n const newCategory: CategoryItem[] = category ? [...category] : [];\n newCategory.unshift({\n code: '',\n name: '全部' + title,\n });\n return newCategory;\n }, [category]);\n\n /** 确认:把当前选中回传并关闭弹层 */\n const handleVerify = () => {\n onChange(selected);\n setPopOpen(false);\n };\n\n /** 取消:恢复为打开前的 value 并关闭弹层 */\n const handleClear = () => {\n setSelected(value || []);\n setPopOpen(false);\n };\n\n return (\n <Popover\n className={styles.modCommonFilter}\n open={popOpen}\n onOpenChange={(open) => setPopOpen(open)}\n title={false}\n fresh={true}\n arrow={false}\n zIndex={zIndex}\n placement={placement}\n trigger='click'\n classNames={{\n body: styles.popoverBody,\n }}\n getPopupContainer={(triggerNode) => triggerNode.parentNode as HTMLElement}\n content={\n <PopoverContent\n popOpen={popOpen}\n selected={selected}\n setSelected={setSelected}\n category={useCateGory}\n terminal={terminal}\n list={list}\n placeholder={placeholder}\n title={title}\n categorySelected={categorySelected}\n setCategorySelected={setCategorySelected}\n columnCount={columnCount}\n showCode={showCode}\n contentWidth={contentWidth}\n rowHeight={rowHeight}\n cellRender={cellRender}\n checkedCellRender={checkedCellRender}\n handleVerify={handleVerify}\n handleClear={handleClear}\n remark={remark}\n />\n }\n {...popoverProps}\n >\n {filterChildren || (\n <FilterButton\n iconPrefix={iconPrefix}\n title={title}\n prefixTitle={prefixTitle}\n value={value}\n popOpen={popOpen}\n handlePopOpen={() => setPopOpen(!popOpen)}\n handleClear={() => onChange([])}\n />\n )}\n </Popover>\n );\n};\n\nexport default ModCommonFilter;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,eAA6B;AACtC,OAAO,SAAS,WAAW,SAAS,gBAAgB;AACpD,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,YAAY;AAoDnB,IAAM,kBAAkD,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAmB,CAAC,CAAC;AAErD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAiB,EAAE;AAGnE,YAAU,MAAM;AACd,QAAI,SAAS;AACX,kBAAY,SAAS,CAAC,CAAC;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,SAAS,KAAK,CAAC;AAGnB,QAAM,cAAc,QAAQ,MAAM;AAChC,UAAM,cAA8B,WAAW,CAAC,GAAG,QAAQ,IAAI,CAAC;AAChE,gBAAY,QAAQ;AAAA,MAClB,MAAM;AAAA,MACN,MAAM,OAAO;AAAA,IACf,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,eAAe,MAAM;AACzB,aAAS,QAAQ;AACjB,eAAW,KAAK;AAAA,EAClB;AAGA,QAAM,cAAc,MAAM;AACxB,gBAAY,SAAS,CAAC,CAAC;AACvB,eAAW,KAAK;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,cAAc,CAAC,SAAS,WAAW,IAAI;AAAA,MACvC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR,YAAY;AAAA,QACV,MAAM,OAAO;AAAA,MACf;AAAA,MACA,mBAAmB,CAAC,gBAAgB,YAAY;AAAA,MAChD,SACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,OAEE;AAAA,IAEH,kBACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,MAAM,WAAW,CAAC,OAAO;AAAA,QACxC,aAAa,MAAM,SAAS,CAAC,CAAC;AAAA;AAAA,IAChC;AAAA,EAEJ;AAEJ;AAEA,IAAO,0BAAQ;",
4
+ "sourcesContent": ["import { Popover, type PopoverProps } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterButton from './components/FilterButton';\nimport PopoverContent from './components/PopoverContent';\nimport styles from './index.module.less';\nimport type { CategoryItem, ListItem, TerminalItem } from './typing';\n\n/**\n * 通用筛选器组件的 Props\n */\nexport interface ModCommonFilterProps {\n /** 当前选中的值(code 数组),受控 */\n value: string[];\n /** 选中项变化回调 */\n onChange: (value: string[]) => void;\n /** 可选列表数据 */\n list: ListItem[];\n /** 筛选维度名称,如「品类」「品牌」 */\n title: string;\n /** 按钮/标题前缀文案,如「筛选」 */\n prefixTitle?: string;\n /** 按钮左侧图标 */\n iconPrefix?: React.ReactNode;\n /** 分类列表,有则弹层左侧展示分类 Tab */\n category?: CategoryItem[];\n /** 终端列表,有则弹层内展示终端 Tab(如全部/PC/APP) */\n terminal?: TerminalItem[];\n /** 搜索框占位文案 */\n placeholder?: string;\n /** Popover 层级 */\n zIndex?: number;\n /** Popover 弹出方向 */\n placement?: PopoverProps['placement'];\n /** 透传给 antd Popover 的额外属性 */\n popoverProps?: PopoverProps;\n /** 可选列表列数(多列网格) */\n columnCount?: number;\n /** 内容区宽度 */\n contentWidth?: number;\n /** 列表行高 */\n rowHeight?: number;\n /** 是否在名称后展示 code */\n showCode?: boolean;\n /** 可选列表中每项的自定义渲染 */\n cellRender?: (item: ListItem) => React.ReactNode;\n /** 已选列表中每项的自定义渲染 */\n checkedCellRender?: (item: ListItem) => React.ReactNode;\n /** 弹层底部备注文案或节点 */\n remark?: string | React.ReactNode;\n /** 自定义触发区域,不传则使用默认 FilterButton */\n filterChildren?: React.ReactNode;\n}\n\n/**\n * 通用筛选器:点击按钮打开 Popover,内为分类 + 可选列表 + 已选列表,确认后回调 onChange。\n */\nconst ModCommonFilter: React.FC<ModCommonFilterProps> = ({\n value,\n onChange,\n list,\n title,\n prefixTitle,\n iconPrefix,\n category,\n terminal,\n placeholder = '搜索',\n zIndex = 100,\n placement = 'bottomRight',\n columnCount = 1,\n contentWidth,\n rowHeight,\n showCode = false,\n popoverProps = {},\n cellRender,\n checkedCellRender,\n remark,\n filterChildren,\n}) => {\n const [popOpen, setPopOpen] = useState(false);\n /** 弹层内当前选中的 code 列表,打开时与 value 同步 */\n const [selected, setSelected] = useState<string[]>([]);\n /** 当前选中的分类 code,空字符串表示「全部」 */\n const [categorySelected, setCategorySelected] = useState<string>('');\n\n /** 弹层打开时用外部 value 同步 selected,保证每次打开初始为当前已选 */\n useEffect(() => {\n if (popOpen) {\n setSelected(value || []);\n }\n }, [popOpen, value]);\n\n /** 分类选项列表,头部插入「全部{title}」 */\n const useCateGory = useMemo(() => {\n const newCategory: CategoryItem[] = category ? [...category] : [];\n newCategory.unshift({\n code: '',\n name: '全部' + title,\n });\n return newCategory;\n }, [category]);\n\n /** 确认:把当前选中回传并关闭弹层 */\n const handleVerify = () => {\n onChange(selected);\n setPopOpen(false);\n };\n\n /** 取消:恢复为打开前的 value 并关闭弹层 */\n const handleClear = () => {\n setSelected(value || []);\n setPopOpen(false);\n };\n\n return (\n <Popover\n className={styles.modCommonFilter}\n open={popOpen}\n onOpenChange={(open) => setPopOpen(open)}\n title={false}\n fresh={true}\n arrow={false}\n zIndex={zIndex}\n placement={placement}\n trigger='click'\n classNames={{\n body: styles.popoverBody,\n }}\n getPopupContainer={(triggerNode) => triggerNode.parentNode as HTMLElement}\n content={\n <PopoverContent\n popOpen={popOpen}\n selected={selected}\n setSelected={setSelected}\n category={useCateGory}\n terminal={terminal}\n list={list}\n placeholder={placeholder}\n title={title}\n categorySelected={categorySelected}\n setCategorySelected={setCategorySelected}\n columnCount={columnCount}\n showCode={showCode}\n contentWidth={contentWidth}\n rowHeight={rowHeight}\n cellRender={cellRender}\n checkedCellRender={checkedCellRender}\n handleVerify={handleVerify}\n handleClear={handleClear}\n remark={remark}\n />\n }\n {...popoverProps}\n >\n {filterChildren || (\n <FilterButton\n iconPrefix={iconPrefix}\n title={title}\n prefixTitle={prefixTitle}\n value={value}\n popOpen={popOpen}\n handlePopOpen={() => setPopOpen(!popOpen)}\n handleClear={() => onChange([])}\n />\n )}\n </Popover>\n );\n};\n\nexport default ModCommonFilter;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA,SAAS,eAAkC;AAC3C,OAAO,SAAS,WAAW,SAAS,gBAAgB;AACpD,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,YAAY;AAoDnB,IAAM,kBAAkD,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAmB,CAAC,CAAC;AAErD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAiB,EAAE;AAGnE,YAAU,MAAM;AACd,QAAI,SAAS;AACX,kBAAY,SAAS,CAAC,CAAC;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,SAAS,KAAK,CAAC;AAGnB,QAAM,cAAc,QAAQ,MAAM;AAChC,UAAM,cAA8B,WAAW,CAAC,GAAG,QAAQ,IAAI,CAAC;AAChE,gBAAY,QAAQ;AAAA,MAClB,MAAM;AAAA,MACN,MAAM,OAAO;AAAA,IACf,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,eAAe,MAAM;AACzB,aAAS,QAAQ;AACjB,eAAW,KAAK;AAAA,EAClB;AAGA,QAAM,cAAc,MAAM;AACxB,gBAAY,SAAS,CAAC,CAAC;AACvB,eAAW,KAAK;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,OAAO;AAAA,MAClB,MAAM;AAAA,MACN,cAAc,CAAC,SAAS,WAAW,IAAI;AAAA,MACvC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA,SAAQ;AAAA,MACR,YAAY;AAAA,QACV,MAAM,OAAO;AAAA,MACf;AAAA,MACA,mBAAmB,CAAC,gBAAgB,YAAY;AAAA,MAChD,SACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,OAEE;AAAA,IAEH,kBACC;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,MAAM,WAAW,CAAC,OAAO;AAAA,QACxC,aAAa,MAAM,SAAS,CAAC,CAAC;AAAA;AAAA,IAChC;AAAA,EAEJ;AAEJ;AAEA,IAAO,0BAAQ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,18 @@
1
+ import { type FC } from 'react';
2
+ import type { ColumnConfig, GroupByItem, TableData } from './typing';
3
+ type RowItem = {
4
+ [key: string]: number | string;
5
+ };
6
+ type PageTypes = {
7
+ count?: number;
8
+ metric: string[];
9
+ groupBys: GroupByItem[];
10
+ tableData: TableData;
11
+ baseData: RowItem[];
12
+ columnConfigMap: {
13
+ [key: string]: ColumnConfig;
14
+ };
15
+ height?: number;
16
+ };
17
+ declare const Line: FC<PageTypes>;
18
+ export default Line;
@@ -0,0 +1,336 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/business/YkCharts/Area.tsx
22
+ import { Empty } from "antd";
23
+ import Decimal from "decimal.js";
24
+ import * as echarts from "echarts";
25
+ import React, { useEffect, useMemo, useRef } from "react";
26
+ import ReactDOMServer from "react-dom/server";
27
+ import { chartColors } from "./constants";
28
+ import { cartesianProduct, getIntervalLower } from "./hooks";
29
+ import styles from "./index.module.less";
30
+ import { formatNumber, formatValue } from "./utils";
31
+ var Line = ({
32
+ count,
33
+ // 指标显示数量
34
+ metric,
35
+ // 指标
36
+ groupBys,
37
+ // 维度
38
+ tableData,
39
+ // 表格数据
40
+ baseData,
41
+ // 基础数据
42
+ columnConfigMap,
43
+ // 列配置
44
+ height
45
+ }) => {
46
+ const { x = [], table_head = [], table_body = [], x_field, group_by } = tableData;
47
+ const chartContainerRef = useRef(null);
48
+ const chartInstanceRef = useRef(null);
49
+ const index = table_head.indexOf(x_field);
50
+ const isTotalData = x.length === 0 && index === -1;
51
+ const effectiveX = isTotalData ? ["合计"] : x;
52
+ const fullData = useMemo(() => {
53
+ if (!metric || metric.length === 0) {
54
+ return [];
55
+ }
56
+ if (group_by && group_by.length > 0) {
57
+ const validGroupBys = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0);
58
+ const validGroupByKeys = validGroupBys.map((g) => g.key);
59
+ const metrics = cartesianProduct(metric, groupBys);
60
+ const chartData = [];
61
+ metrics.forEach((f) => {
62
+ const groupBysText = groupBys.filter((g) => Array.isArray(g.selected) && g.selected.length > 0).map((g) => f[g.key]).filter((value) => value !== null && value !== "").join(",");
63
+ const mItem = effectiveX.map((m) => {
64
+ const obj = {};
65
+ obj[x_field] = m;
66
+ groupBys.forEach((g) => {
67
+ obj[g.key] = f[g.key];
68
+ });
69
+ const matchKeys = isTotalData ? validGroupByKeys : [x_field, ...validGroupByKeys];
70
+ const value = matchKeys.length > 0 ? baseData.filter((d) => matchKeys.every((key) => obj[key] === d[key])).reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0) : baseData.reduce((sum, d) => sum + (Number(d[f.category]) || 0), 0);
71
+ obj.value = value;
72
+ obj.name = `${f.category}${groupBysText ? "," + groupBysText : ""}`;
73
+ obj.metricName = f.category;
74
+ obj.format = columnConfigMap[f.category];
75
+ obj.x = m;
76
+ return obj;
77
+ });
78
+ chartData.push(...mItem);
79
+ });
80
+ return chartData;
81
+ } else {
82
+ const chartData = [];
83
+ metric.forEach((m) => {
84
+ effectiveX.forEach((item) => {
85
+ if (isTotalData) {
86
+ const value = baseData.reduce((sum, d) => sum + (Number(d[m]) || 0), 0);
87
+ chartData.push({
88
+ x: item,
89
+ name: m,
90
+ metricName: m,
91
+ format: columnConfigMap[m],
92
+ value
93
+ });
94
+ } else {
95
+ const row = table_body.find((d) => d[index] === item);
96
+ const obj = {
97
+ x: item,
98
+ name: m,
99
+ metricName: m,
100
+ format: columnConfigMap[m]
101
+ };
102
+ table_head.forEach((key, i) => {
103
+ obj[key] = row ? row[i] : 0;
104
+ });
105
+ obj.value = obj[m];
106
+ chartData.push(obj);
107
+ }
108
+ });
109
+ });
110
+ return chartData;
111
+ }
112
+ }, [
113
+ baseData,
114
+ metric,
115
+ groupBys,
116
+ effectiveX,
117
+ isTotalData,
118
+ index,
119
+ x_field,
120
+ table_head,
121
+ table_body,
122
+ columnConfigMap,
123
+ group_by,
124
+ x
125
+ ]);
126
+ const yAxisFormatter = useMemo(() => {
127
+ var _a;
128
+ if (metric.length === 1) {
129
+ return (_a = columnConfigMap[metric[0]]) == null ? void 0 : _a.format;
130
+ }
131
+ return null;
132
+ }, [metric, columnConfigMap]);
133
+ const series = useMemo(() => {
134
+ const first = effectiveX[0];
135
+ const firstData = fullData.filter((f) => f[x_field] === first);
136
+ firstData.sort((a, b) => b.value - a.value);
137
+ const sortedMetric = Array.from(new Set(firstData.map((item) => item.name)));
138
+ const countMetric = (firstData.length > 0 ? count ? sortedMetric.slice(0, count) : sortedMetric : metric).slice().sort((a, b) => {
139
+ const lowerA = getIntervalLower(String(a));
140
+ const lowerB = getIntervalLower(String(b));
141
+ if (!Number.isNaN(lowerA) && !Number.isNaN(lowerB))
142
+ return lowerA - lowerB;
143
+ return String(a).localeCompare(String(b));
144
+ });
145
+ return countMetric.map((interval) => ({
146
+ name: interval,
147
+ type: "line",
148
+ smooth: true,
149
+ stack: "Total",
150
+ areaStyle: {},
151
+ showSymbol: true,
152
+ symbol: "emptyCircle",
153
+ symbolSize: 0.8,
154
+ lineStyle: {
155
+ width: 1.5
156
+ },
157
+ emphasis: {
158
+ scale: 8
159
+ },
160
+ data: effectiveX.map((item) => {
161
+ const itemData = fullData.find((d) => d.name === interval && d.x === item);
162
+ return itemData ? itemData.value : 0;
163
+ })
164
+ }));
165
+ }, [fullData, metric, count, effectiveX, x_field]);
166
+ const grid = {
167
+ top: 10,
168
+ left: 0,
169
+ right: 10,
170
+ bottom: 40,
171
+ containLabel: true
172
+ };
173
+ const legend = {
174
+ bottom: 0,
175
+ type: "scroll",
176
+ itemWidth: 13,
177
+ itemStyle: {
178
+ opacity: 0
179
+ },
180
+ lineStyle: {
181
+ width: 2,
182
+ type: "solid"
183
+ }
184
+ };
185
+ const xAxis = {
186
+ type: "category",
187
+ data: effectiveX,
188
+ axisLine: {
189
+ lineStyle: {
190
+ color: "#EBEEF4"
191
+ }
192
+ },
193
+ axisLabel: {
194
+ color: "#9CA4B3",
195
+ fontSize: 12
196
+ },
197
+ axisTick: {
198
+ alignWithLabel: true
199
+ },
200
+ boundaryGap: true
201
+ };
202
+ const yAxis = {
203
+ type: "value",
204
+ splitNumber: 4,
205
+ // 设置Y轴坐标点数量
206
+ axisLine: {
207
+ show: true,
208
+ lineStyle: {
209
+ color: "#EBEEF4",
210
+ shadowOffsetY: -10,
211
+ shadowColor: "#EBEEF4"
212
+ }
213
+ },
214
+ axisLabel: {
215
+ color: "#999999",
216
+ fontSize: 12,
217
+ formatter: (value) => {
218
+ if (yAxisFormatter === "percent") {
219
+ return new Decimal(value).mul(100) + "%";
220
+ }
221
+ if (yAxisFormatter === "decimal") {
222
+ return formatValue(value, yAxisFormatter);
223
+ }
224
+ const [result, unit] = formatNumber(value, true);
225
+ return result + unit;
226
+ }
227
+ },
228
+ splitLine: {
229
+ lineStyle: {
230
+ type: [2, 3],
231
+ // 虚线
232
+ color: "#E7E7E7"
233
+ // 背景线颜色
234
+ }
235
+ },
236
+ axisTick: {
237
+ show: true
238
+ }
239
+ };
240
+ const tooltipFormatter = (params) => {
241
+ var _a, _b;
242
+ const title = (_b = (_a = params[0]) == null ? void 0 : _a.axisValue) != null ? _b : "";
243
+ const tooltipDom = /* @__PURE__ */ React.createElement("div", { className: styles.tooltip }, /* @__PURE__ */ React.createElement("div", { className: styles.title }, title), /* @__PURE__ */ React.createElement("div", { className: styles.content }, params.map((m) => {
244
+ var _a2;
245
+ const metricName = m.seriesName.split(",")[0];
246
+ const columnConfig = columnConfigMap[metricName];
247
+ const format = (_a2 = columnConfig == null ? void 0 : columnConfig.format) != null ? _a2 : "string";
248
+ const showValue = format === "currency" ? formatNumber(m.value, true) : formatValue(m.value, format);
249
+ const showValueText = showValue === "" || showValue[0] === "" ? "-" : showValue;
250
+ return /* @__PURE__ */ React.createElement("div", { className: styles.item, key: m.seriesName }, /* @__PURE__ */ React.createElement("div", { className: styles.point, style: { background: m.color } }), /* @__PURE__ */ React.createElement("div", { className: styles.category }, m.seriesName), /* @__PURE__ */ React.createElement("div", { className: styles.value }, showValueText));
251
+ })));
252
+ return ReactDOMServer.renderToStaticMarkup(tooltipDom);
253
+ };
254
+ const tooltip = {
255
+ trigger: "axis",
256
+ padding: 0,
257
+ confine: true,
258
+ enterable: true,
259
+ axisPointer: {
260
+ type: "line",
261
+ // 设置悬浮指针为线
262
+ lineStyle: {
263
+ color: "#EBEEF4",
264
+ // 设置线的颜色
265
+ type: "dashed"
266
+ // 设置虚线样式
267
+ }
268
+ },
269
+ formatter: tooltipFormatter
270
+ };
271
+ const chartOptions = useMemo(() => {
272
+ return {
273
+ color: chartColors,
274
+ grid,
275
+ legend: __spreadProps(__spreadValues({}, legend), {
276
+ itemWidth: 13,
277
+ itemStyle: {
278
+ opacity: 0
279
+ },
280
+ lineStyle: {
281
+ width: 2,
282
+ type: "solid"
283
+ }
284
+ }),
285
+ xAxis,
286
+ yAxis,
287
+ series,
288
+ tooltip
289
+ };
290
+ }, [series]);
291
+ useEffect(() => {
292
+ if (!chartContainerRef.current)
293
+ return;
294
+ let chart = chartInstanceRef.current;
295
+ if (!chart) {
296
+ chart = echarts.init(chartContainerRef.current);
297
+ chartInstanceRef.current = chart;
298
+ }
299
+ chart == null ? void 0 : chart.setOption(chartOptions, true);
300
+ return () => {
301
+ if (chartInstanceRef.current) {
302
+ chartInstanceRef.current.dispose();
303
+ chartInstanceRef.current = null;
304
+ }
305
+ };
306
+ }, [chartOptions]);
307
+ useEffect(() => {
308
+ const chartElement = chartContainerRef.current;
309
+ if (!chartElement)
310
+ return;
311
+ const resizeObserver = new ResizeObserver(() => {
312
+ const chart = chartInstanceRef.current;
313
+ if (chart) {
314
+ chart.resize();
315
+ }
316
+ });
317
+ resizeObserver.observe(chartElement);
318
+ return () => {
319
+ resizeObserver.unobserve(chartElement);
320
+ resizeObserver.disconnect();
321
+ };
322
+ }, [fullData]);
323
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, fullData.length > 0 ? /* @__PURE__ */ React.createElement(
324
+ "div",
325
+ {
326
+ ref: chartContainerRef,
327
+ className: styles.echarts,
328
+ style: { width: "100%", height: height || "100%", minHeight: 220 }
329
+ }
330
+ ) : /* @__PURE__ */ React.createElement(Empty, { className: styles.empty, description: "暂无数据", image: Empty.PRESENTED_IMAGE_SIMPLE }));
331
+ };
332
+ var Area_default = Line;
333
+ export {
334
+ Area_default as default
335
+ };
336
+ //# sourceMappingURL=Area.js.map