@yoka-ui/ui 1.0.10-test

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 (484) hide show
  1. package/@Docs-yoka/exports.generated.md +92 -0
  2. package/@Docs-yoka/llms.txt +23 -0
  3. package/README.md +291 -0
  4. package/dist/es/Themes/InputTheme/index.d.ts +6 -0
  5. package/dist/es/Themes/InputTheme/index.js +22 -0
  6. package/dist/es/Themes/InputTheme/index.js.map +7 -0
  7. package/dist/es/Themes/TableTheme/index.d.ts +7 -0
  8. package/dist/es/Themes/TableTheme/index.js +31 -0
  9. package/dist/es/Themes/TableTheme/index.js.map +7 -0
  10. package/dist/es/Themes/TableTheme/index.less +46 -0
  11. package/dist/es/assets/image/YKUI-logo.png +0 -0
  12. package/dist/es/assets/less/ant-reset.less +402 -0
  13. package/dist/es/assets/less/index.less +1 -0
  14. package/dist/es/assets/less/variables.less +16 -0
  15. package/dist/es/business/AiChat/MarkdownRender.d.ts +9 -0
  16. package/dist/es/business/AiChat/MarkdownRender.js +72 -0
  17. package/dist/es/business/AiChat/MarkdownRender.js.map +7 -0
  18. package/dist/es/business/AiChat/index.d.ts +16 -0
  19. package/dist/es/business/AiChat/index.js +521 -0
  20. package/dist/es/business/AiChat/index.js.map +7 -0
  21. package/dist/es/business/AiChat/intentRecognizer.d.ts +33 -0
  22. package/dist/es/business/AiChat/intentRecognizer.js +166 -0
  23. package/dist/es/business/AiChat/intentRecognizer.js.map +7 -0
  24. package/dist/es/business/AiChat/navigationManager.d.ts +94 -0
  25. package/dist/es/business/AiChat/navigationManager.js +208 -0
  26. package/dist/es/business/AiChat/navigationManager.js.map +7 -0
  27. package/dist/es/business/AiChat/sse.d.ts +1 -0
  28. package/dist/es/business/AiChat/sse.js +60 -0
  29. package/dist/es/business/AiChat/sse.js.map +7 -0
  30. package/dist/es/business/AiChat/type.d.ts +157 -0
  31. package/dist/es/business/AiChat/type.js +1 -0
  32. package/dist/es/business/AiChat/type.js.map +7 -0
  33. package/dist/es/business/AiChat/useAiChat.d.ts +2 -0
  34. package/dist/es/business/AiChat/useAiChat.js +238 -0
  35. package/dist/es/business/AiChat/useAiChat.js.map +7 -0
  36. package/dist/es/business/AiChat/useTaskWorkflow.d.ts +26 -0
  37. package/dist/es/business/AiChat/useTaskWorkflow.js +230 -0
  38. package/dist/es/business/AiChat/useTaskWorkflow.js.map +7 -0
  39. package/dist/es/business/DrawerPageInfo/index.d.ts +35 -0
  40. package/dist/es/business/DrawerPageInfo/index.js +133 -0
  41. package/dist/es/business/DrawerPageInfo/index.js.map +7 -0
  42. package/dist/es/business/DrawerPageInfo/index.module.less +87 -0
  43. package/dist/es/business/DrawerPageInfo/test.png +0 -0
  44. package/dist/es/business/Editor/index.d.ts +11 -0
  45. package/dist/es/business/Editor/index.js +86 -0
  46. package/dist/es/business/Editor/index.js.map +7 -0
  47. package/dist/es/business/Editor/index.less +31 -0
  48. package/dist/es/business/Empty/empty.png +0 -0
  49. package/dist/es/business/Empty/index.d.ts +19 -0
  50. package/dist/es/business/Empty/index.js +51 -0
  51. package/dist/es/business/Empty/index.js.map +7 -0
  52. package/dist/es/business/ModCommonFilter/assets/images/empty.png +0 -0
  53. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.d.ts +13 -0
  54. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.js +51 -0
  55. package/dist/es/business/ModCommonFilter/components/FilterButton/IconClose.js.map +7 -0
  56. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.d.ts +13 -0
  57. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.js +51 -0
  58. package/dist/es/business/ModCommonFilter/components/FilterButton/IconXiala.js.map +7 -0
  59. package/dist/es/business/ModCommonFilter/components/FilterButton/index.d.ts +25 -0
  60. package/dist/es/business/ModCommonFilter/components/FilterButton/index.js +30 -0
  61. package/dist/es/business/ModCommonFilter/components/FilterButton/index.js.map +7 -0
  62. package/dist/es/business/ModCommonFilter/components/FilterButton/index.module.less +97 -0
  63. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.d.ts +18 -0
  64. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js +74 -0
  65. package/dist/es/business/ModCommonFilter/components/PopoverContent/Category.js.map +7 -0
  66. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.d.ts +37 -0
  67. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js +216 -0
  68. package/dist/es/business/ModCommonFilter/components/PopoverContent/Content.js.map +7 -0
  69. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.d.ts +26 -0
  70. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js +102 -0
  71. package/dist/es/business/ModCommonFilter/components/PopoverContent/Selected.js.map +7 -0
  72. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.d.ts +51 -0
  73. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.js +71 -0
  74. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.js.map +7 -0
  75. package/dist/es/business/ModCommonFilter/components/PopoverContent/index.module.less +260 -0
  76. package/dist/es/business/ModCommonFilter/index.d.ts +53 -0
  77. package/dist/es/business/ModCommonFilter/index.js +129 -0
  78. package/dist/es/business/ModCommonFilter/index.js.map +7 -0
  79. package/dist/es/business/ModCommonFilter/index.module.less +7 -0
  80. package/dist/es/business/ModCommonFilter/typing.d.ts +20 -0
  81. package/dist/es/business/ModCommonFilter/typing.js +1 -0
  82. package/dist/es/business/ModCommonFilter/typing.js.map +7 -0
  83. package/dist/es/business/YkPorjectSelect/icon-product.png +0 -0
  84. package/dist/es/business/YkPorjectSelect/index.d.ts +51 -0
  85. package/dist/es/business/YkPorjectSelect/index.js +260 -0
  86. package/dist/es/business/YkPorjectSelect/index.js.map +7 -0
  87. package/dist/es/business/YkPorjectSelect/index.module.less +334 -0
  88. package/dist/es/business/YkPorjectSelect/product-close.png +0 -0
  89. package/dist/es/components/Clock/index.d.ts +19 -0
  90. package/dist/es/components/Clock/index.js +55 -0
  91. package/dist/es/components/Clock/index.js.map +7 -0
  92. package/dist/es/components/DebounceInput/index.d.ts +16 -0
  93. package/dist/es/components/DebounceInput/index.js +77 -0
  94. package/dist/es/components/DebounceInput/index.js.map +7 -0
  95. package/dist/es/components/DebounceInput/index.module.less +23 -0
  96. package/dist/es/components/MultipleSelect/index.d.ts +23 -0
  97. package/dist/es/components/MultipleSelect/index.js +249 -0
  98. package/dist/es/components/MultipleSelect/index.js.map +7 -0
  99. package/dist/es/components/MultipleSelect/index.module.less +174 -0
  100. package/dist/es/components/NumericInput/index.d.ts +19 -0
  101. package/dist/es/components/NumericInput/index.js +56 -0
  102. package/dist/es/components/NumericInput/index.js.map +7 -0
  103. package/dist/es/components/RefreshButton/index.d.ts +8 -0
  104. package/dist/es/components/RefreshButton/index.js +21 -0
  105. package/dist/es/components/RefreshButton/index.js.map +7 -0
  106. package/dist/es/components/SearchWithHistory/index.d.ts +21 -0
  107. package/dist/es/components/SearchWithHistory/index.js +115 -0
  108. package/dist/es/components/SearchWithHistory/index.js.map +7 -0
  109. package/dist/es/components/SearchWithHistory/index.module.less +64 -0
  110. package/dist/es/components/TextWithInput/index.d.ts +15 -0
  111. package/dist/es/components/TextWithInput/index.js +35 -0
  112. package/dist/es/components/TextWithInput/index.js.map +7 -0
  113. package/dist/es/components/TextWithToolTip/index.d.ts +17 -0
  114. package/dist/es/components/TextWithToolTip/index.js +118 -0
  115. package/dist/es/components/TextWithToolTip/index.js.map +7 -0
  116. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +28 -0
  117. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js +161 -0
  118. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.js.map +7 -0
  119. package/dist/es/components/TreeTransfer/components/TreeTransferPanel/index.less +151 -0
  120. package/dist/es/components/TreeTransfer/index.d.ts +28 -0
  121. package/dist/es/components/TreeTransfer/index.js +210 -0
  122. package/dist/es/components/TreeTransfer/index.js.map +7 -0
  123. package/dist/es/components/TreeTransfer/index.less +69 -0
  124. package/dist/es/components/TreeTransfer/types.d.ts +122 -0
  125. package/dist/es/components/TreeTransfer/types.js +6 -0
  126. package/dist/es/components/TreeTransfer/types.js.map +7 -0
  127. package/dist/es/components/TreeTransfer/utils/index.d.ts +120 -0
  128. package/dist/es/components/TreeTransfer/utils/index.js +195 -0
  129. package/dist/es/components/TreeTransfer/utils/index.js.map +7 -0
  130. package/dist/es/components/YkDateRangePicker/index.d.ts +57 -0
  131. package/dist/es/components/YkDateRangePicker/index.js +261 -0
  132. package/dist/es/components/YkDateRangePicker/index.js.map +7 -0
  133. package/dist/es/components/YkDateRangePicker/index.module.less +281 -0
  134. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  135. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +193 -0
  136. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  137. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  138. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +556 -0
  139. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  140. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  141. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +55 -0
  142. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  143. package/dist/es/components/YkRangeDateWithVS/index.d.ts +62 -0
  144. package/dist/es/components/YkRangeDateWithVS/index.js +130 -0
  145. package/dist/es/components/YkRangeDateWithVS/index.js.map +7 -0
  146. package/dist/es/components/YkRangeDateWithVS/index.module.less +548 -0
  147. package/dist/es/components/YkRangeDateWithVS/styles.d.ts +2 -0
  148. package/dist/es/components/YkRangeDateWithVS/styles.js +18 -0
  149. package/dist/es/components/YkRangeDateWithVS/styles.js.map +7 -0
  150. package/dist/es/components/YkRangeDateWithVS/typing.d.ts +15 -0
  151. package/dist/es/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  152. package/dist/es/components/YkRangeTimeWithRecent/constants.js +288 -0
  153. package/dist/es/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  154. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  155. package/dist/es/components/YkRangeTimeWithRecent/index.js +647 -0
  156. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +7 -0
  157. package/dist/es/components/YkRangeTimeWithRecent/index.module.less +263 -0
  158. package/dist/es/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  159. package/dist/es/creative/ButtonRadioWithInfo/index.js +103 -0
  160. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +7 -0
  161. package/dist/es/creative/ButtonRadioWithInfo/index.less +106 -0
  162. package/dist/es/creative/ButtonWithProgress/index.d.ts +11 -0
  163. package/dist/es/creative/ButtonWithProgress/index.js +79 -0
  164. package/dist/es/creative/ButtonWithProgress/index.js.map +7 -0
  165. package/dist/es/creative/ButtonWithProgress/index.less +66 -0
  166. package/dist/es/global.less +12 -0
  167. package/dist/es/index.d.ts +41 -0
  168. package/dist/es/index.js +85 -0
  169. package/dist/es/index.js.map +7 -0
  170. package/dist/es/layout/FlexGrid/index.d.ts +25 -0
  171. package/dist/es/layout/FlexGrid/index.js +63 -0
  172. package/dist/es/layout/FlexGrid/index.js.map +7 -0
  173. package/dist/es/layout/YkContainer/index.d.ts +27 -0
  174. package/dist/es/layout/YkContainer/index.js +79 -0
  175. package/dist/es/layout/YkContainer/index.js.map +7 -0
  176. package/dist/es/layout/YkDrawer/index.d.ts +22 -0
  177. package/dist/es/layout/YkDrawer/index.js +160 -0
  178. package/dist/es/layout/YkDrawer/index.js.map +7 -0
  179. package/dist/es/layout/YkDrawer/index.module.less +45 -0
  180. package/dist/es/ui/LabelSelect/demo.d.ts +3 -0
  181. package/dist/es/ui/LabelSelect/demo.js +83 -0
  182. package/dist/es/ui/LabelSelect/demo.js.map +7 -0
  183. package/dist/es/ui/LabelSelect/index.d.ts +41 -0
  184. package/dist/es/ui/LabelSelect/index.js +136 -0
  185. package/dist/es/ui/LabelSelect/index.js.map +7 -0
  186. package/dist/es/ui/LogicOperator/index.d.ts +10 -0
  187. package/dist/es/ui/LogicOperator/index.js +12 -0
  188. package/dist/es/ui/LogicOperator/index.js.map +7 -0
  189. package/dist/es/ui/LogicOperator/index.module.less +97 -0
  190. package/dist/es/ui/YkButton/index.d.ts +9 -0
  191. package/dist/es/ui/YkButton/index.js +59 -0
  192. package/dist/es/ui/YkButton/index.js.map +7 -0
  193. package/dist/es/ui/YkCard/index.d.ts +4 -0
  194. package/dist/es/ui/YkCard/index.js +79 -0
  195. package/dist/es/ui/YkCard/index.js.map +7 -0
  196. package/dist/es/ui/YkCard/index.module.less +30 -0
  197. package/dist/es/ui/YkCheckbox/index.d.ts +4 -0
  198. package/dist/es/ui/YkCheckbox/index.js +45 -0
  199. package/dist/es/ui/YkCheckbox/index.js.map +7 -0
  200. package/dist/es/ui/YkCheckbox/index.module.less +22 -0
  201. package/dist/es/ui/YkDescriptions/index.d.ts +4 -0
  202. package/dist/es/ui/YkDescriptions/index.js +41 -0
  203. package/dist/es/ui/YkDescriptions/index.js.map +7 -0
  204. package/dist/es/ui/YkPagination/index.d.ts +4 -0
  205. package/dist/es/ui/YkPagination/index.js +63 -0
  206. package/dist/es/ui/YkPagination/index.js.map +7 -0
  207. package/dist/es/ui/YkPagination/index.module.less +22 -0
  208. package/dist/es/ui/YkRadio/index.d.ts +4 -0
  209. package/dist/es/ui/YkRadio/index.js +51 -0
  210. package/dist/es/ui/YkRadio/index.js.map +7 -0
  211. package/dist/es/ui/YkRadio/index.module.less +22 -0
  212. package/dist/es/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  213. package/dist/es/ui/YkRadioBtnSpecial/index.js +23 -0
  214. package/dist/es/ui/YkRadioBtnSpecial/index.js.map +7 -0
  215. package/dist/es/ui/YkRadioBtnSpecial/index.module.less +112 -0
  216. package/dist/es/ui/YkSegmented/index.d.ts +4 -0
  217. package/dist/es/ui/YkSegmented/index.js +41 -0
  218. package/dist/es/ui/YkSegmented/index.js.map +7 -0
  219. package/dist/es/ui/YkSelect/index.d.ts +7 -0
  220. package/dist/es/ui/YkSelect/index.js +54 -0
  221. package/dist/es/ui/YkSelect/index.js.map +7 -0
  222. package/dist/es/ui/YkSpin/index.d.ts +4 -0
  223. package/dist/es/ui/YkSpin/index.js +41 -0
  224. package/dist/es/ui/YkSpin/index.js.map +7 -0
  225. package/dist/es/ui/YkStatistic/index.d.ts +4 -0
  226. package/dist/es/ui/YkStatistic/index.js +41 -0
  227. package/dist/es/ui/YkStatistic/index.js.map +7 -0
  228. package/dist/es/ui/YkSwitch/index.d.ts +4 -0
  229. package/dist/es/ui/YkSwitch/index.js +51 -0
  230. package/dist/es/ui/YkSwitch/index.js.map +7 -0
  231. package/dist/es/ui/YkTabs/index.d.ts +12 -0
  232. package/dist/es/ui/YkTabs/index.js +75 -0
  233. package/dist/es/ui/YkTabs/index.js.map +7 -0
  234. package/dist/es/ui/YkTabs/index.module.less +11 -0
  235. package/dist/es/ui/YkTooltip/index.d.ts +4 -0
  236. package/dist/es/ui/YkTooltip/index.js +50 -0
  237. package/dist/es/ui/YkTooltip/index.js.map +7 -0
  238. package/dist/es/utils/styleUtils.d.ts +18 -0
  239. package/dist/es/utils/styleUtils.js +57 -0
  240. package/dist/es/utils/styleUtils.js.map +7 -0
  241. package/dist/es/utils/ykStorybookDoc.d.ts +17 -0
  242. package/dist/es/utils/ykStorybookDoc.js +18 -0
  243. package/dist/es/utils/ykStorybookDoc.js.map +7 -0
  244. package/dist/lib/Themes/InputTheme/index.d.ts +6 -0
  245. package/dist/lib/Themes/InputTheme/index.js +52 -0
  246. package/dist/lib/Themes/InputTheme/index.js.map +7 -0
  247. package/dist/lib/Themes/TableTheme/index.d.ts +7 -0
  248. package/dist/lib/Themes/TableTheme/index.js +61 -0
  249. package/dist/lib/Themes/TableTheme/index.js.map +7 -0
  250. package/dist/lib/Themes/TableTheme/index.less +46 -0
  251. package/dist/lib/assets/image/YKUI-logo.png +0 -0
  252. package/dist/lib/assets/less/ant-reset.less +402 -0
  253. package/dist/lib/assets/less/index.less +1 -0
  254. package/dist/lib/assets/less/variables.less +16 -0
  255. package/dist/lib/business/AiChat/MarkdownRender.d.ts +9 -0
  256. package/dist/lib/business/AiChat/MarkdownRender.js +102 -0
  257. package/dist/lib/business/AiChat/MarkdownRender.js.map +7 -0
  258. package/dist/lib/business/AiChat/index.d.ts +16 -0
  259. package/dist/lib/business/AiChat/index.js +514 -0
  260. package/dist/lib/business/AiChat/index.js.map +7 -0
  261. package/dist/lib/business/AiChat/intentRecognizer.d.ts +33 -0
  262. package/dist/lib/business/AiChat/intentRecognizer.js +193 -0
  263. package/dist/lib/business/AiChat/intentRecognizer.js.map +7 -0
  264. package/dist/lib/business/AiChat/navigationManager.d.ts +94 -0
  265. package/dist/lib/business/AiChat/navigationManager.js +214 -0
  266. package/dist/lib/business/AiChat/navigationManager.js.map +7 -0
  267. package/dist/lib/business/AiChat/sse.d.ts +1 -0
  268. package/dist/lib/business/AiChat/sse.js +61 -0
  269. package/dist/lib/business/AiChat/sse.js.map +7 -0
  270. package/dist/lib/business/AiChat/type.d.ts +157 -0
  271. package/dist/lib/business/AiChat/type.js +18 -0
  272. package/dist/lib/business/AiChat/type.js.map +7 -0
  273. package/dist/lib/business/AiChat/useAiChat.d.ts +2 -0
  274. package/dist/lib/business/AiChat/useAiChat.js +222 -0
  275. package/dist/lib/business/AiChat/useAiChat.js.map +7 -0
  276. package/dist/lib/business/AiChat/useTaskWorkflow.d.ts +26 -0
  277. package/dist/lib/business/AiChat/useTaskWorkflow.js +216 -0
  278. package/dist/lib/business/AiChat/useTaskWorkflow.js.map +7 -0
  279. package/dist/lib/business/DrawerPageInfo/index.d.ts +35 -0
  280. package/dist/lib/business/DrawerPageInfo/index.js +163 -0
  281. package/dist/lib/business/DrawerPageInfo/index.js.map +7 -0
  282. package/dist/lib/business/DrawerPageInfo/index.module.less +87 -0
  283. package/dist/lib/business/DrawerPageInfo/test.png +0 -0
  284. package/dist/lib/business/Editor/index.d.ts +11 -0
  285. package/dist/lib/business/Editor/index.js +99 -0
  286. package/dist/lib/business/Editor/index.js.map +7 -0
  287. package/dist/lib/business/Editor/index.less +31 -0
  288. package/dist/lib/business/Empty/empty.png +0 -0
  289. package/dist/lib/business/Empty/index.d.ts +19 -0
  290. package/dist/lib/business/Empty/index.js +65 -0
  291. package/dist/lib/business/Empty/index.js.map +7 -0
  292. package/dist/lib/business/ModCommonFilter/assets/images/empty.png +0 -0
  293. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.d.ts +13 -0
  294. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js +50 -0
  295. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js.map +7 -0
  296. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.d.ts +13 -0
  297. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js +50 -0
  298. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js.map +7 -0
  299. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.d.ts +25 -0
  300. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js +60 -0
  301. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js.map +7 -0
  302. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.module.less +97 -0
  303. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.d.ts +18 -0
  304. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +69 -0
  305. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +7 -0
  306. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.d.ts +37 -0
  307. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +211 -0
  308. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +7 -0
  309. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.d.ts +26 -0
  310. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +97 -0
  311. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +7 -0
  312. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.d.ts +51 -0
  313. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js +101 -0
  314. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js.map +7 -0
  315. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.module.less +260 -0
  316. package/dist/lib/business/ModCommonFilter/index.d.ts +53 -0
  317. package/dist/lib/business/ModCommonFilter/index.js +143 -0
  318. package/dist/lib/business/ModCommonFilter/index.js.map +7 -0
  319. package/dist/lib/business/ModCommonFilter/index.module.less +7 -0
  320. package/dist/lib/business/ModCommonFilter/typing.d.ts +20 -0
  321. package/dist/lib/business/ModCommonFilter/typing.js +18 -0
  322. package/dist/lib/business/ModCommonFilter/typing.js.map +7 -0
  323. package/dist/lib/business/YkPorjectSelect/icon-product.png +0 -0
  324. package/dist/lib/business/YkPorjectSelect/index.d.ts +51 -0
  325. package/dist/lib/business/YkPorjectSelect/index.js +235 -0
  326. package/dist/lib/business/YkPorjectSelect/index.js.map +7 -0
  327. package/dist/lib/business/YkPorjectSelect/index.module.less +334 -0
  328. package/dist/lib/business/YkPorjectSelect/product-close.png +0 -0
  329. package/dist/lib/components/Clock/index.d.ts +19 -0
  330. package/dist/lib/components/Clock/index.js +85 -0
  331. package/dist/lib/components/Clock/index.js.map +7 -0
  332. package/dist/lib/components/DebounceInput/index.d.ts +16 -0
  333. package/dist/lib/components/DebounceInput/index.js +107 -0
  334. package/dist/lib/components/DebounceInput/index.js.map +7 -0
  335. package/dist/lib/components/DebounceInput/index.module.less +23 -0
  336. package/dist/lib/components/MultipleSelect/index.d.ts +23 -0
  337. package/dist/lib/components/MultipleSelect/index.js +279 -0
  338. package/dist/lib/components/MultipleSelect/index.js.map +7 -0
  339. package/dist/lib/components/MultipleSelect/index.module.less +174 -0
  340. package/dist/lib/components/NumericInput/index.d.ts +19 -0
  341. package/dist/lib/components/NumericInput/index.js +67 -0
  342. package/dist/lib/components/NumericInput/index.js.map +7 -0
  343. package/dist/lib/components/RefreshButton/index.d.ts +8 -0
  344. package/dist/lib/components/RefreshButton/index.js +51 -0
  345. package/dist/lib/components/RefreshButton/index.js.map +7 -0
  346. package/dist/lib/components/SearchWithHistory/index.d.ts +21 -0
  347. package/dist/lib/components/SearchWithHistory/index.js +145 -0
  348. package/dist/lib/components/SearchWithHistory/index.js.map +7 -0
  349. package/dist/lib/components/SearchWithHistory/index.module.less +64 -0
  350. package/dist/lib/components/TextWithInput/index.d.ts +15 -0
  351. package/dist/lib/components/TextWithInput/index.js +65 -0
  352. package/dist/lib/components/TextWithInput/index.js.map +7 -0
  353. package/dist/lib/components/TextWithToolTip/index.d.ts +17 -0
  354. package/dist/lib/components/TextWithToolTip/index.js +134 -0
  355. package/dist/lib/components/TextWithToolTip/index.js.map +7 -0
  356. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +28 -0
  357. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +191 -0
  358. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +7 -0
  359. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.less +151 -0
  360. package/dist/lib/components/TreeTransfer/index.d.ts +28 -0
  361. package/dist/lib/components/TreeTransfer/index.js +214 -0
  362. package/dist/lib/components/TreeTransfer/index.js.map +7 -0
  363. package/dist/lib/components/TreeTransfer/index.less +69 -0
  364. package/dist/lib/components/TreeTransfer/types.d.ts +122 -0
  365. package/dist/lib/components/TreeTransfer/types.js +30 -0
  366. package/dist/lib/components/TreeTransfer/types.js.map +7 -0
  367. package/dist/lib/components/TreeTransfer/utils/index.d.ts +120 -0
  368. package/dist/lib/components/TreeTransfer/utils/index.js +208 -0
  369. package/dist/lib/components/TreeTransfer/utils/index.js.map +7 -0
  370. package/dist/lib/components/YkDateRangePicker/index.d.ts +57 -0
  371. package/dist/lib/components/YkDateRangePicker/index.js +282 -0
  372. package/dist/lib/components/YkDateRangePicker/index.js.map +7 -0
  373. package/dist/lib/components/YkDateRangePicker/index.module.less +281 -0
  374. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  375. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +223 -0
  376. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  377. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  378. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +567 -0
  379. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  380. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  381. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +85 -0
  382. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  383. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +62 -0
  384. package/dist/lib/components/YkRangeDateWithVS/index.js +140 -0
  385. package/dist/lib/components/YkRangeDateWithVS/index.js.map +7 -0
  386. package/dist/lib/components/YkRangeDateWithVS/index.module.less +548 -0
  387. package/dist/lib/components/YkRangeDateWithVS/styles.d.ts +2 -0
  388. package/dist/lib/components/YkRangeDateWithVS/styles.js +48 -0
  389. package/dist/lib/components/YkRangeDateWithVS/styles.js.map +7 -0
  390. package/dist/lib/components/YkRangeDateWithVS/typing.d.ts +15 -0
  391. package/dist/lib/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  392. package/dist/lib/components/YkRangeTimeWithRecent/constants.js +333 -0
  393. package/dist/lib/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  394. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  395. package/dist/lib/components/YkRangeTimeWithRecent/index.js +647 -0
  396. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +7 -0
  397. package/dist/lib/components/YkRangeTimeWithRecent/index.module.less +263 -0
  398. package/dist/lib/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  399. package/dist/lib/creative/ButtonRadioWithInfo/index.js +102 -0
  400. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +7 -0
  401. package/dist/lib/creative/ButtonRadioWithInfo/index.less +106 -0
  402. package/dist/lib/creative/ButtonWithProgress/index.d.ts +11 -0
  403. package/dist/lib/creative/ButtonWithProgress/index.js +70 -0
  404. package/dist/lib/creative/ButtonWithProgress/index.js.map +7 -0
  405. package/dist/lib/creative/ButtonWithProgress/index.less +66 -0
  406. package/dist/lib/global.less +12 -0
  407. package/dist/lib/index.d.ts +41 -0
  408. package/dist/lib/index.js +158 -0
  409. package/dist/lib/index.js.map +7 -0
  410. package/dist/lib/layout/FlexGrid/index.d.ts +25 -0
  411. package/dist/lib/layout/FlexGrid/index.js +77 -0
  412. package/dist/lib/layout/FlexGrid/index.js.map +7 -0
  413. package/dist/lib/layout/YkContainer/index.d.ts +27 -0
  414. package/dist/lib/layout/YkContainer/index.js +79 -0
  415. package/dist/lib/layout/YkContainer/index.js.map +7 -0
  416. package/dist/lib/layout/YkDrawer/index.d.ts +22 -0
  417. package/dist/lib/layout/YkDrawer/index.js +152 -0
  418. package/dist/lib/layout/YkDrawer/index.js.map +7 -0
  419. package/dist/lib/layout/YkDrawer/index.module.less +45 -0
  420. package/dist/lib/ui/LabelSelect/demo.d.ts +3 -0
  421. package/dist/lib/ui/LabelSelect/demo.js +113 -0
  422. package/dist/lib/ui/LabelSelect/demo.js.map +7 -0
  423. package/dist/lib/ui/LabelSelect/index.d.ts +41 -0
  424. package/dist/lib/ui/LabelSelect/index.js +124 -0
  425. package/dist/lib/ui/LabelSelect/index.js.map +7 -0
  426. package/dist/lib/ui/LogicOperator/index.d.ts +10 -0
  427. package/dist/lib/ui/LogicOperator/index.js +42 -0
  428. package/dist/lib/ui/LogicOperator/index.js.map +7 -0
  429. package/dist/lib/ui/LogicOperator/index.module.less +97 -0
  430. package/dist/lib/ui/YkButton/index.d.ts +9 -0
  431. package/dist/lib/ui/YkButton/index.js +55 -0
  432. package/dist/lib/ui/YkButton/index.js.map +7 -0
  433. package/dist/lib/ui/YkCard/index.d.ts +4 -0
  434. package/dist/lib/ui/YkCard/index.js +76 -0
  435. package/dist/lib/ui/YkCard/index.js.map +7 -0
  436. package/dist/lib/ui/YkCard/index.module.less +30 -0
  437. package/dist/lib/ui/YkCheckbox/index.d.ts +4 -0
  438. package/dist/lib/ui/YkCheckbox/index.js +42 -0
  439. package/dist/lib/ui/YkCheckbox/index.js.map +7 -0
  440. package/dist/lib/ui/YkCheckbox/index.module.less +22 -0
  441. package/dist/lib/ui/YkDescriptions/index.d.ts +4 -0
  442. package/dist/lib/ui/YkDescriptions/index.js +41 -0
  443. package/dist/lib/ui/YkDescriptions/index.js.map +7 -0
  444. package/dist/lib/ui/YkPagination/index.d.ts +4 -0
  445. package/dist/lib/ui/YkPagination/index.js +60 -0
  446. package/dist/lib/ui/YkPagination/index.js.map +7 -0
  447. package/dist/lib/ui/YkPagination/index.module.less +22 -0
  448. package/dist/lib/ui/YkRadio/index.d.ts +4 -0
  449. package/dist/lib/ui/YkRadio/index.js +51 -0
  450. package/dist/lib/ui/YkRadio/index.js.map +7 -0
  451. package/dist/lib/ui/YkRadio/index.module.less +22 -0
  452. package/dist/lib/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  453. package/dist/lib/ui/YkRadioBtnSpecial/index.js +53 -0
  454. package/dist/lib/ui/YkRadioBtnSpecial/index.js.map +7 -0
  455. package/dist/lib/ui/YkRadioBtnSpecial/index.module.less +112 -0
  456. package/dist/lib/ui/YkSegmented/index.d.ts +4 -0
  457. package/dist/lib/ui/YkSegmented/index.js +41 -0
  458. package/dist/lib/ui/YkSegmented/index.js.map +7 -0
  459. package/dist/lib/ui/YkSelect/index.d.ts +7 -0
  460. package/dist/lib/ui/YkSelect/index.js +54 -0
  461. package/dist/lib/ui/YkSelect/index.js.map +7 -0
  462. package/dist/lib/ui/YkSpin/index.d.ts +4 -0
  463. package/dist/lib/ui/YkSpin/index.js +41 -0
  464. package/dist/lib/ui/YkSpin/index.js.map +7 -0
  465. package/dist/lib/ui/YkStatistic/index.d.ts +4 -0
  466. package/dist/lib/ui/YkStatistic/index.js +41 -0
  467. package/dist/lib/ui/YkStatistic/index.js.map +7 -0
  468. package/dist/lib/ui/YkSwitch/index.d.ts +4 -0
  469. package/dist/lib/ui/YkSwitch/index.js +51 -0
  470. package/dist/lib/ui/YkSwitch/index.js.map +7 -0
  471. package/dist/lib/ui/YkTabs/index.d.ts +12 -0
  472. package/dist/lib/ui/YkTabs/index.js +70 -0
  473. package/dist/lib/ui/YkTabs/index.js.map +7 -0
  474. package/dist/lib/ui/YkTabs/index.module.less +11 -0
  475. package/dist/lib/ui/YkTooltip/index.d.ts +4 -0
  476. package/dist/lib/ui/YkTooltip/index.js +45 -0
  477. package/dist/lib/ui/YkTooltip/index.js.map +7 -0
  478. package/dist/lib/utils/styleUtils.d.ts +18 -0
  479. package/dist/lib/utils/styleUtils.js +84 -0
  480. package/dist/lib/utils/styleUtils.js.map +7 -0
  481. package/dist/lib/utils/ykStorybookDoc.d.ts +17 -0
  482. package/dist/lib/utils/ykStorybookDoc.js +41 -0
  483. package/dist/lib/utils/ykStorybookDoc.js.map +7 -0
  484. package/package.json +147 -0
@@ -0,0 +1,208 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/TreeTransfer/utils/index.ts
20
+ var utils_exports = {};
21
+ __export(utils_exports, {
22
+ addNodesToTree: () => addNodesToTree,
23
+ buildTreeData: () => buildTreeData,
24
+ countParentNodes: () => countParentNodes,
25
+ countTotalNodes: () => countTotalNodes,
26
+ extractTopLevelSelectedNodes: () => extractTopLevelSelectedNodes,
27
+ filterData: () => filterData,
28
+ findNodeWithDescendants: () => findNodeWithDescendants,
29
+ flattenTreeData: () => flattenTreeData,
30
+ getAllDescendantKeys: () => getAllDescendantKeys,
31
+ removeNodesFromTree: () => removeNodesFromTree,
32
+ sliceDataByPage: () => sliceDataByPage
33
+ });
34
+ module.exports = __toCommonJS(utils_exports);
35
+ var import_types = require("../types");
36
+ function buildTreeData(data, options = {}) {
37
+ const { keyField = "id", parentField = "parentId", isParent = (item) => !item[parentField] } = options;
38
+ const map = /* @__PURE__ */ new Map();
39
+ const roots = [];
40
+ data.forEach((item) => {
41
+ const key = item[keyField];
42
+ map.set(key, { key, data: item, isParent: isParent(item), children: [] });
43
+ });
44
+ data.forEach((item) => {
45
+ const key = item[keyField];
46
+ const parentId = item[parentField];
47
+ const node = map.get(key);
48
+ if (parentId && map.has(parentId)) {
49
+ map.get(parentId).children.push(node);
50
+ } else {
51
+ roots.push(node);
52
+ }
53
+ });
54
+ return roots;
55
+ }
56
+ function flattenTreeData(treeData) {
57
+ const result = [];
58
+ function traverse(nodes) {
59
+ nodes.forEach((node) => {
60
+ var _a;
61
+ result.push(node);
62
+ if ((_a = node.children) == null ? void 0 : _a.length)
63
+ traverse(node.children);
64
+ });
65
+ }
66
+ traverse(treeData);
67
+ return result;
68
+ }
69
+ function sliceDataByPage(data, page, pageSize = import_types.DEFAULT_PAGE_SIZE) {
70
+ const start = (page - 1) * pageSize;
71
+ return data.slice(start, start + pageSize);
72
+ }
73
+ function filterData(data, searchValue, fields = ["id", "name"]) {
74
+ if (!searchValue.trim())
75
+ return data;
76
+ const lowerSearch = searchValue.toLowerCase();
77
+ return data.filter((item) => {
78
+ var _a;
79
+ const selfMatch = fields.some((field) => {
80
+ const value = typeof field === "function" ? field(item.data) : item.data[field];
81
+ return String(value ?? "").toLowerCase().includes(lowerSearch);
82
+ });
83
+ if (selfMatch)
84
+ return true;
85
+ if ((_a = item.children) == null ? void 0 : _a.length) {
86
+ return filterData(item.children, searchValue, fields).length > 0;
87
+ }
88
+ return false;
89
+ });
90
+ }
91
+ function getAllDescendantKeys(selectedKeys, dataSource) {
92
+ const keySet = new Set(selectedKeys.map(String));
93
+ const allKeys = [];
94
+ function collectWithDescendants(node) {
95
+ var _a;
96
+ allKeys.push(String(node.key));
97
+ (_a = node.children) == null ? void 0 : _a.forEach(collectWithDescendants);
98
+ }
99
+ function traverse(nodes) {
100
+ nodes.forEach((node) => {
101
+ var _a;
102
+ if (keySet.has(String(node.key))) {
103
+ collectWithDescendants(node);
104
+ } else {
105
+ if ((_a = node.children) == null ? void 0 : _a.length)
106
+ traverse(node.children);
107
+ }
108
+ });
109
+ }
110
+ traverse(dataSource);
111
+ return allKeys;
112
+ }
113
+ function countTotalNodes(data) {
114
+ let count = 0;
115
+ function traverse(nodes) {
116
+ nodes.forEach((node) => {
117
+ var _a;
118
+ count += 1;
119
+ if ((_a = node.children) == null ? void 0 : _a.length)
120
+ traverse(node.children);
121
+ });
122
+ }
123
+ traverse(data);
124
+ return count;
125
+ }
126
+ function countParentNodes(data) {
127
+ return data.length;
128
+ }
129
+ function findNodeWithDescendants(key, dataSource) {
130
+ const result = [];
131
+ function traverse(nodes) {
132
+ var _a;
133
+ for (const node of nodes) {
134
+ if (node.key === key) {
135
+ result.push(node);
136
+ (_a = node.children) == null ? void 0 : _a.forEach((child) => {
137
+ result.push(child);
138
+ if (child.children)
139
+ traverse(child.children);
140
+ });
141
+ return true;
142
+ }
143
+ if (node.children && traverse(node.children))
144
+ return true;
145
+ }
146
+ return false;
147
+ }
148
+ traverse(dataSource);
149
+ return result;
150
+ }
151
+ function removeNodesFromTree(dataSource, keysToRemove) {
152
+ var _a;
153
+ const result = [];
154
+ for (const node of dataSource) {
155
+ if (keysToRemove.has(node.key))
156
+ continue;
157
+ if ((_a = node.children) == null ? void 0 : _a.length) {
158
+ result.push({ ...node, children: removeNodesFromTree(node.children, keysToRemove) });
159
+ } else {
160
+ result.push(node);
161
+ }
162
+ }
163
+ return result;
164
+ }
165
+ function addNodesToTree(dataSource, parentKey, nodes) {
166
+ if (parentKey === null) {
167
+ return [...dataSource, ...nodes];
168
+ }
169
+ return dataSource.map((node) => {
170
+ if (node.key === parentKey) {
171
+ return { ...node, children: [...node.children ?? [], ...nodes] };
172
+ }
173
+ if (node.children) {
174
+ return { ...node, children: addNodesToTree(node.children, parentKey, nodes) };
175
+ }
176
+ return node;
177
+ });
178
+ }
179
+ function extractTopLevelSelectedNodes(selectedKeys, dataSource) {
180
+ const result = [];
181
+ function traverse(nodes) {
182
+ nodes.forEach((node) => {
183
+ var _a;
184
+ if (selectedKeys.has(String(node.key))) {
185
+ result.push(node);
186
+ } else if ((_a = node.children) == null ? void 0 : _a.length) {
187
+ traverse(node.children);
188
+ }
189
+ });
190
+ }
191
+ traverse(dataSource);
192
+ return result;
193
+ }
194
+ // Annotate the CommonJS export names for ESM import in node:
195
+ 0 && (module.exports = {
196
+ addNodesToTree,
197
+ buildTreeData,
198
+ countParentNodes,
199
+ countTotalNodes,
200
+ extractTopLevelSelectedNodes,
201
+ filterData,
202
+ findNodeWithDescendants,
203
+ flattenTreeData,
204
+ getAllDescendantKeys,
205
+ removeNodesFromTree,
206
+ sliceDataByPage
207
+ });
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/components/TreeTransfer/utils/index.ts"],
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\nimport { TreeTransferRow, DEFAULT_PAGE_SIZE } from '../types';\n\n/**\n * 从平铺的数据构建树形结构\n *\n * @param data - 平铺的数据数组\n * @param options - 配置选项\n * @returns 树形结构数据\n *\n * @example\n * ```tsx\n * const flatData = [\n * { id: '1', parentId: null, name: '应用1' },\n * { id: '1-1', parentId: '1', name: '权限1' },\n * ];\n *\n * const treeData = buildTreeData(flatData, {\n * keyField: 'id',\n * parentField: 'parentId',\n * });\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildTreeData<T extends Record<string, any>>(\n data: T[],\n options: {\n /** 唯一键字段名,默认 'id' */\n keyField?: string;\n /** 父键字段名,默认 'parentId' */\n parentField?: string;\n /** 判断是否为父节点的函数,默认:无父键则为父节点 */\n isParent?: (item: T) => boolean;\n } = {},\n): TreeTransferRow<T>[] {\n const { keyField = 'id', parentField = 'parentId', isParent = (item) => !item[parentField] } = options;\n\n const map = new Map<string | number, TreeTransferRow<T>>();\n const roots: TreeTransferRow<T>[] = [];\n\n // 第一次遍历:建立 key → node 映射\n data.forEach((item) => {\n const key = item[keyField];\n map.set(key, { key, data: item, isParent: isParent(item), children: [] });\n });\n\n // 第二次遍历:挂载父子关系\n data.forEach((item) => {\n const key = item[keyField];\n const parentId = item[parentField];\n const node = map.get(key)!;\n\n if (parentId && map.has(parentId)) {\n map.get(parentId)!.children!.push(node);\n } else {\n roots.push(node);\n }\n });\n\n return roots;\n}\n\n/**\n * 将树形结构平铺为一维数组(深度优先)\n *\n * @example\n * ```tsx\n * const flat = flattenTreeData([{ key: '1', children: [{ key: '1-1' }] }]);\n * // → [{ key: '1' }, { key: '1-1' }]\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function flattenTreeData<T = any>(treeData: TreeTransferRow<T>[]): TreeTransferRow<T>[] {\n const result: TreeTransferRow<T>[] = [];\n\n function traverse(nodes: TreeTransferRow<T>[]) {\n nodes.forEach((node) => {\n result.push(node);\n if (node.children?.length) traverse(node.children);\n });\n }\n\n traverse(treeData);\n return result;\n}\n\n/**\n * 根据页码切片数据(前端分页)\n *\n * @param data - 数据数组\n * @param page - 页码(从 1 开始)\n * @param pageSize - 每页条数\n * @returns 当前页数据\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sliceDataByPage<T = any>(\n data: TreeTransferRow<T>[],\n page: number,\n pageSize: number = DEFAULT_PAGE_SIZE,\n): TreeTransferRow<T>[] {\n const start = (page - 1) * pageSize;\n return data.slice(start, start + pageSize);\n}\n\n/**\n * 过滤数据(支持模糊搜索,递归保留有匹配子节点的父节点)\n *\n * @param data - 数据数组\n * @param searchValue - 搜索关键词(空字符串返回全量数据)\n * @param fields - 搜索字段列表,支持字段名或自定义取值函数,默认 ['id', 'name']\n * @returns 过滤后的数据\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function filterData<T = any>(\n data: TreeTransferRow<T>[],\n searchValue: string,\n fields: (string | ((item: T) => string))[] = ['id', 'name'],\n): TreeTransferRow<T>[] {\n if (!searchValue.trim()) return data;\n\n const lowerSearch = searchValue.toLowerCase();\n\n return data.filter((item) => {\n // 当前节点任意字段匹配即保留\n const selfMatch = fields.some((field) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = typeof field === 'function' ? field(item.data) : (item.data as any)[field];\n return String(value ?? '')\n .toLowerCase()\n .includes(lowerSearch);\n });\n\n if (selfMatch) return true;\n\n // 子节点有匹配项则保留父节点(子节点也递归过滤)\n if (item.children?.length) {\n return filterData(item.children, searchValue, fields).length > 0;\n }\n\n return false;\n });\n}\n\n/**\n * 获取选中节点及其所有后代节点的 key 集合(用于批量移除)\n *\n * 修复说明:原实现对 3+ 层树只展开 2 层。现改为对每个选中节点\n * 递归收集完整后代链,支持任意深度的树结构。\n *\n * @param selectedKeys - 选中的 keys\n * @param dataSource - 完整数据源\n * @returns 所有相关 key(字符串形式,含选中节点本身)\n *\n * @example\n * ```tsx\n * // 选中 'app1'(含 2 级子节点)\n * getAllDescendantKeys(['app1'], dataSource);\n * // → ['app1', 'app1-perm1', 'app1-perm1-sub1', 'app1-perm2', ...]\n * ```\n */\nexport function getAllDescendantKeys(selectedKeys: React.Key[], dataSource: TreeTransferRow[]): string[] {\n const keySet = new Set(selectedKeys.map(String));\n const allKeys: string[] = [];\n\n /** 递归收集节点本身及所有后代的 key */\n function collectWithDescendants(node: TreeTransferRow): void {\n allKeys.push(String(node.key));\n node.children?.forEach(collectWithDescendants);\n }\n\n function traverse(nodes: TreeTransferRow[]): void {\n nodes.forEach((node) => {\n if (keySet.has(String(node.key))) {\n // 选中节点:收集自身及全部后代\n collectWithDescendants(node);\n } else {\n // 未选中:继续向下搜索\n if (node.children?.length) traverse(node.children);\n }\n });\n }\n\n traverse(dataSource);\n return allKeys;\n}\n\n/**\n * 计算数据总节点数(包含所有后代)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function countTotalNodes<T = any>(data: TreeTransferRow<T>[]): number {\n let count = 0;\n function traverse(nodes: TreeTransferRow<T>[]) {\n nodes.forEach((node) => {\n count += 1;\n if (node.children?.length) traverse(node.children);\n });\n }\n traverse(data);\n return count;\n}\n\n/**\n * 计算顶层节点数(用于分页总数,不含嵌套子节点)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function countParentNodes<T = any>(data: TreeTransferRow<T>[]): number {\n return data.length;\n}\n\n/**\n * 查找节点及其所有后代节点(按 key 定位)\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function findNodeWithDescendants<T = any>(\n key: string | number,\n dataSource: TreeTransferRow<T>[],\n): TreeTransferRow<T>[] {\n const result: TreeTransferRow<T>[] = [];\n\n function traverse(nodes: TreeTransferRow<T>[]): boolean {\n for (const node of nodes) {\n if (node.key === key) {\n result.push(node);\n node.children?.forEach((child) => {\n result.push(child);\n if (child.children) traverse(child.children);\n });\n return true;\n }\n if (node.children && traverse(node.children)) return true;\n }\n return false;\n }\n\n traverse(dataSource);\n return result;\n}\n\n/**\n * 从树形数据中移除指定 key 的节点(不可变,返回新数组)\n *\n * @param dataSource - 数据源\n * @param keysToRemove - 要移除的节点 key 集合\n * @returns 过滤后的新数据源\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function removeNodesFromTree<T = any>(\n dataSource: TreeTransferRow<T>[],\n keysToRemove: Set<string | number>,\n): TreeTransferRow<T>[] {\n const result: TreeTransferRow<T>[] = [];\n\n for (const node of dataSource) {\n if (keysToRemove.has(node.key)) continue;\n\n if (node.children?.length) {\n result.push({ ...node, children: removeNodesFromTree(node.children, keysToRemove) });\n } else {\n result.push(node);\n }\n }\n\n return result;\n}\n\n/**\n * 向树形数据添加节点\n *\n * @param dataSource - 数据源\n * @param parentKey - 父节点 key;传 null 表示添加到根\n * @param nodes - 要添加的节点列表\n * @returns 新的数据源\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function addNodesToTree<T = any>(\n dataSource: TreeTransferRow<T>[],\n parentKey: string | number | null,\n nodes: TreeTransferRow<T>[],\n): TreeTransferRow<T>[] {\n if (parentKey === null) {\n return [...dataSource, ...nodes];\n }\n\n return dataSource.map((node) => {\n if (node.key === parentKey) {\n return { ...node, children: [...(node.children ?? []), ...nodes] };\n }\n if (node.children) {\n return { ...node, children: addNodesToTree(node.children, parentKey, nodes) };\n }\n return node;\n });\n}\n\n/**\n * 从树形数据中提取\"顶层选中节点\"(用于穿梭框移动操作)\n *\n * 行为:遍历树,遇到选中节点时直接收集(含其 children),不再向下递归。\n * 这样可以避免父节点和其已选中的子节点被分别添加两次。\n *\n * 适用场景:AntD Table 的 checkStrictly:false 级联选择中,\n * 选中父节点会自动勾选子节点。move 时只需携带父节点(含 children)。\n * 若仅选了某个子节点,则该子节点会被作为顶层节点添加到目标列表。\n *\n * @param selectedKeys - 选中的 key 集合(字符串)\n * @param dataSource - 数据源(支持嵌套树)\n * @returns 最小集合的顶层选中节点列表\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function extractTopLevelSelectedNodes<T = any>(\n selectedKeys: Set<string>,\n dataSource: TreeTransferRow<T>[],\n): TreeTransferRow<T>[] {\n const result: TreeTransferRow<T>[] = [];\n\n function traverse(nodes: TreeTransferRow<T>[]): void {\n nodes.forEach((node) => {\n if (selectedKeys.has(String(node.key))) {\n // 选中节点:整体移动(children 随之迁移)\n result.push(node);\n } else if (node.children?.length) {\n // 父节点未选中:继续向下搜寻子节点选中项\n traverse(node.children);\n }\n });\n }\n\n traverse(dataSource);\n return result;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * YkDateRangePicker
3
+ *
4
+ * 带「紧凑预设 tag」与「完整 RangePicker」双模式切换的日期范围选择器。
5
+ *
6
+ * 功能特性:
7
+ * - 默认紧凑模式:以 tag 形式展示「预设标签 + 格式化时间」或「起止时间」
8
+ * - mount 时若无初始值,自动选中「近5分钟」预设
9
+ * - 点击 tag 后展开内嵌的完整 RangePicker,失焦后自动收起
10
+ * - 8 个内置快捷预设,2 列 Grid 布局渲染,当前激活项高亮
11
+ * - 受控组件:区分「用户操作」与「外部赋值」,仅用户操作触发 onChange
12
+ * - 禁用日期:仅允许过去 7 天(含今天)
13
+ * - allowClear:支持一键清除,清除后重置预设状态
14
+ * - 通过 forwardRef + useImperativeHandle 对外暴露 toggleFirstPreset()
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const pickerRef = useRef<YkDateRangePickerRef>(null);
19
+ *
20
+ * <YkDateRangePicker
21
+ * value={range}
22
+ * onChange={(val) => setRange(val)}
23
+ * ref={pickerRef}
24
+ * />
25
+ *
26
+ * // 外部强制切换到「近5分钟」
27
+ * pickerRef.current?.toggleFirstPreset();
28
+ * ```
29
+ */
30
+ import { Dayjs } from 'dayjs';
31
+ import React from 'react';
32
+ /** 时间范围值 */
33
+ export type DateRangeValue = [Dayjs, Dayjs];
34
+ export interface YkDateRangePickerProps {
35
+ /** 受控值 */
36
+ value?: DateRangeValue | [];
37
+ /** 用户操作改变时触发(外部 setValue 不会触发) */
38
+ onChange?: (value: DateRangeValue | null) => void;
39
+ /**
40
+ * 是否允许清除。
41
+ * - false(默认):隐藏清除按钮,与 Vue 原版行为一致
42
+ * - true:显示清除按钮,清除后重置预设状态并触发 onChange(null)
43
+ */
44
+ allowClear?: boolean;
45
+ /**
46
+ * 紧凑 tag 无值/清空时的占位文本。
47
+ * 默认:「请选择时间范围」
48
+ */
49
+ placeholder?: string;
50
+ }
51
+ /** 通过 ref 对父组件暴露的方法 */
52
+ export interface YkDateRangePickerRef {
53
+ /** 强制切换到第一个预设(近5分钟)并触发 onChange */
54
+ toggleFirstPreset: () => void;
55
+ }
56
+ declare const YkDateRangePicker: React.ForwardRefExoticComponent<YkDateRangePickerProps & React.RefAttributes<YkDateRangePickerRef>>;
57
+ export default YkDateRangePicker;
@@ -0,0 +1,282 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/YkDateRangePicker/index.tsx
30
+ var YkDateRangePicker_exports = {};
31
+ __export(YkDateRangePicker_exports, {
32
+ default: () => YkDateRangePicker_default
33
+ });
34
+ module.exports = __toCommonJS(YkDateRangePicker_exports);
35
+ var import_antd = require("antd");
36
+ var import_classnames = __toESM(require("classnames"));
37
+ var import_dayjs = __toESM(require("dayjs"));
38
+ var import_react = __toESM(require("react"));
39
+ var import_index_module = __toESM(require("./index.module.less"));
40
+ var { RangePicker } = import_antd.DatePicker;
41
+ function pastTime(n, unit) {
42
+ const fmt = "YYYY-MM-DD HH:mm:00";
43
+ return [(0, import_dayjs.default)((0, import_dayjs.default)().subtract(n, unit).format(fmt)), (0, import_dayjs.default)((0, import_dayjs.default)().format(fmt))];
44
+ }
45
+ var DISPLAY_FORMAT = "YYYY-MM-DD HH:mm:ss";
46
+ function toDisplay(d) {
47
+ return (0, import_dayjs.default)(d).format(DISPLAY_FORMAT);
48
+ }
49
+ function toMatchKey(d) {
50
+ return (0, import_dayjs.default)(d).format(DISPLAY_FORMAT);
51
+ }
52
+ var RANGE_PRESETS = [
53
+ {
54
+ label: "近5分钟",
55
+ value: () => pastTime(5, "minute")
56
+ },
57
+ {
58
+ label: "近15分钟",
59
+ value: () => pastTime(15, "minute")
60
+ },
61
+ {
62
+ label: "近30分钟",
63
+ value: () => pastTime(30, "minute")
64
+ },
65
+ {
66
+ label: "近1小时",
67
+ value: () => pastTime(1, "hour")
68
+ },
69
+ {
70
+ label: "近2小时",
71
+ value: () => pastTime(2, "hour")
72
+ },
73
+ {
74
+ label: "近6小时",
75
+ value: () => pastTime(6, "hour")
76
+ },
77
+ {
78
+ label: "今天",
79
+ value: () => [
80
+ (0, import_dayjs.default)((0, import_dayjs.default)().startOf("day").format("YYYY-MM-DD HH:mm:00")),
81
+ (0, import_dayjs.default)((0, import_dayjs.default)().endOf("day").format("YYYY-MM-DD HH:mm:00"))
82
+ ],
83
+ // 紧凑模式只展示日期,如「03-25」
84
+ format: (v) => v[0].format("MM-DD")
85
+ },
86
+ {
87
+ label: "昨天",
88
+ value: () => [
89
+ (0, import_dayjs.default)((0, import_dayjs.default)().subtract(1, "day").startOf("day").format("YYYY-MM-DD HH:mm:00")),
90
+ (0, import_dayjs.default)((0, import_dayjs.default)().subtract(1, "day").endOf("day").format("YYYY-MM-DD HH:mm:00"))
91
+ ],
92
+ format: (v) => v[0].format("MM-DD")
93
+ },
94
+ {
95
+ label: "近7天",
96
+ value: () => [
97
+ (0, import_dayjs.default)((0, import_dayjs.default)().subtract(6, "day").startOf("day").format("YYYY-MM-DD HH:mm:00")),
98
+ (0, import_dayjs.default)((0, import_dayjs.default)().endOf("day").format("YYYY-MM-DD HH:mm:00"))
99
+ ],
100
+ // 紧凑模式展示完整日期区间,如「2024-03-19 ~ 2024-03-25」
101
+ format: (v) => [v[0].format("YYYY-MM-DD"), v[1].format("YYYY-MM-DD")]
102
+ }
103
+ ];
104
+ var YkDateRangePicker = (0, import_react.forwardRef)(function YkDateRangePicker2({ value, onChange, allowClear = false, placeholder = "请选择时间范围" }, ref) {
105
+ const [showFullPicker, setShowFullPicker] = (0, import_react.useState)(false);
106
+ const [open, setOpen] = (0, import_react.useState)(false);
107
+ const [activePreset, setActivePreset] = (0, import_react.useState)(void 0);
108
+ const [presetFormatText, setPresetFormatText] = (0, import_react.useState)(void 0);
109
+ const selfChangeRef = (0, import_react.useRef)(false);
110
+ const isPresetClickRef = (0, import_react.useRef)(false);
111
+ const wrapperRef = (0, import_react.useRef)(null);
112
+ const pickerRef = (0, import_react.useRef)(null);
113
+ const prevValueRef = (0, import_react.useRef)(value);
114
+ (0, import_react.useEffect)(() => {
115
+ if (value && value.length === 2)
116
+ return;
117
+ const first = RANGE_PRESETS[0];
118
+ const currentValue = first.value();
119
+ const formatText = currentValue.map((v) => (0, import_dayjs.default)(v).format("HH:mm:ss")).join(" ~ ");
120
+ setActivePreset(first);
121
+ setPresetFormatText(formatText);
122
+ selfChangeRef.current = true;
123
+ onChange == null ? void 0 : onChange(currentValue);
124
+ }, []);
125
+ (0, import_react.useEffect)(() => {
126
+ if (prevValueRef.current === value)
127
+ return;
128
+ prevValueRef.current = value;
129
+ if (!selfChangeRef.current) {
130
+ setActivePreset(void 0);
131
+ setPresetFormatText(void 0);
132
+ }
133
+ selfChangeRef.current = false;
134
+ }, [value]);
135
+ const showState = (0, import_react.useMemo)(() => {
136
+ if (!value || value.length < 2)
137
+ return [];
138
+ return [toDisplay(value[0]), toDisplay(value[1])];
139
+ }, [value]);
140
+ const activePresetIndex = (0, import_react.useMemo)(() => {
141
+ if (!value || value.length < 2)
142
+ return -1;
143
+ const [v0, v1] = value;
144
+ const valKeys = [toMatchKey(v0), toMatchKey(v1)];
145
+ return RANGE_PRESETS.findIndex((preset) => {
146
+ const presetVal = preset.value();
147
+ const presetKeys = [toMatchKey(presetVal[0]), toMatchKey(presetVal[1])];
148
+ return valKeys[0] === presetKeys[0] && valKeys[1] === presetKeys[1];
149
+ });
150
+ }, [value, open]);
151
+ const handlePresetClick = (0, import_react.useCallback)(
152
+ (preset) => {
153
+ isPresetClickRef.current = true;
154
+ const currentValue = preset.value();
155
+ let formatText;
156
+ if (preset.format) {
157
+ const res = preset.format(currentValue);
158
+ formatText = Array.isArray(res) ? res.join(" ~ ") : res;
159
+ } else {
160
+ formatText = currentValue.map((v) => (0, import_dayjs.default)(v).format("HH:mm:ss")).join(" ~ ");
161
+ }
162
+ setActivePreset(preset);
163
+ setPresetFormatText(formatText);
164
+ selfChangeRef.current = true;
165
+ onChange == null ? void 0 : onChange(currentValue);
166
+ setTimeout(() => {
167
+ setOpen(false);
168
+ setShowFullPicker(false);
169
+ }, 0);
170
+ },
171
+ [onChange]
172
+ );
173
+ const handlePickerChange = (0, import_react.useCallback)(
174
+ (dates) => {
175
+ setActivePreset(void 0);
176
+ setPresetFormatText(void 0);
177
+ isPresetClickRef.current = false;
178
+ selfChangeRef.current = true;
179
+ if ((dates == null ? void 0 : dates[0]) && (dates == null ? void 0 : dates[1])) {
180
+ onChange == null ? void 0 : onChange(dates);
181
+ } else {
182
+ onChange == null ? void 0 : onChange(null);
183
+ setTimeout(() => {
184
+ setOpen(false);
185
+ setShowFullPicker(false);
186
+ }, 0);
187
+ }
188
+ },
189
+ [onChange]
190
+ );
191
+ const handleClickCompactTag = (0, import_react.useCallback)(() => {
192
+ setShowFullPicker(true);
193
+ setTimeout(() => {
194
+ var _a;
195
+ const el = (_a = pickerRef.current) == null ? void 0 : _a.nativeElement;
196
+ if (el) {
197
+ const input = el.querySelector("input");
198
+ input == null ? void 0 : input.click();
199
+ input == null ? void 0 : input.focus();
200
+ }
201
+ }, 0);
202
+ }, []);
203
+ const handleOpenChange = (0, import_react.useCallback)((isOpen) => {
204
+ setOpen(isOpen);
205
+ if (!isOpen) {
206
+ setTimeout(() => {
207
+ setShowFullPicker(false);
208
+ }, 100);
209
+ }
210
+ }, []);
211
+ const disabledDate = (0, import_react.useCallback)((current) => {
212
+ return current && (current > (0, import_dayjs.default)().endOf("day") || current < (0, import_dayjs.default)().subtract(6, "day").startOf("day"));
213
+ }, []);
214
+ const getPopupContainer = (0, import_react.useCallback)(() => {
215
+ return wrapperRef.current ?? document.body;
216
+ }, []);
217
+ const presetsNode = (0, import_react.useMemo)(() => {
218
+ return RANGE_PRESETS.map((preset, index) => {
219
+ const isActive = activePresetIndex === index;
220
+ return {
221
+ label: /* @__PURE__ */ import_react.default.createElement(
222
+ "div",
223
+ {
224
+ className: (0, import_classnames.default)(import_index_module.default.yokaPresetItem, {
225
+ [import_index_module.default.yokaPresetItemActive]: isActive
226
+ }),
227
+ onClick: (e) => {
228
+ e.stopPropagation();
229
+ handlePresetClick(preset);
230
+ }
231
+ },
232
+ preset.label
233
+ ),
234
+ value: preset.value()
235
+ };
236
+ });
237
+ }, [activePresetIndex, handlePresetClick]);
238
+ (0, import_react.useImperativeHandle)(
239
+ ref,
240
+ () => ({
241
+ toggleFirstPreset() {
242
+ handlePresetClick(RANGE_PRESETS[0]);
243
+ }
244
+ }),
245
+ [handlePresetClick]
246
+ );
247
+ const pickerVisible = showFullPicker || open;
248
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.YkDateRangePicker, ref: wrapperRef }, !showFullPicker && /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTag, onClick: handleClickCompactTag }, /* @__PURE__ */ import_react.default.createElement("i", { className: (0, import_classnames.default)("iconfont icon-riqi1", import_index_module.default.yokaCompactTagIcon) }), /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagContent }, activePreset ? (
249
+ // 已选预设:「预设名称 (格式化时间)」
250
+ /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagPresetLabel }, activePreset.label), /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagPresetFormat }, "(", presetFormatText, ")"))
251
+ ) : showState.length === 2 ? (
252
+ // 自定义时间:「起始时间 ~ 结束时间」
253
+ /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagDatetime }, showState[0]), /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagSeparator }, "~"), /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagDatetime }, showState[1]))
254
+ ) : (
255
+ // 无值/清空:placeholder 居中显示
256
+ /* @__PURE__ */ import_react.default.createElement("span", { className: import_index_module.default.yokaCompactTagPlaceholder }, placeholder)
257
+ ))), /* @__PURE__ */ import_react.default.createElement("div", { className: import_index_module.default.yokaPickerWrapper, style: { display: pickerVisible ? "flex" : "none" } }, /* @__PURE__ */ import_react.default.createElement("i", { className: (0, import_classnames.default)("iconfont icon-riqi1", import_index_module.default.yokaPickerWrapperIcon) }), /* @__PURE__ */ import_react.default.createElement(
258
+ RangePicker,
259
+ {
260
+ ref: pickerRef,
261
+ value: value && value.length === 2 ? value : void 0,
262
+ onChange: handlePickerChange,
263
+ open,
264
+ onOpenChange: handleOpenChange,
265
+ variant: "borderless",
266
+ allowClear,
267
+ suffixIcon: null,
268
+ showTime: {
269
+ format: "HH:mm:ss",
270
+ hideDisabledOptions: true,
271
+ defaultValue: [(0, import_dayjs.default)("00:00", "HH:mm"), (0, import_dayjs.default)("23:59", "HH:mm")]
272
+ },
273
+ format: "YYYY-MM-DD HH:mm:ss",
274
+ disabledDate,
275
+ presets: presetsNode,
276
+ getPopupContainer
277
+ }
278
+ )));
279
+ });
280
+ YkDateRangePicker.displayName = "YkDateRangePicker";
281
+ var YkDateRangePicker_default = YkDateRangePicker;
282
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/YkDateRangePicker/index.tsx"],
4
+ "sourcesContent": ["/**\n * YkDateRangePicker\n *\n * 带「紧凑预设 tag」与「完整 RangePicker」双模式切换的日期范围选择器。\n *\n * 功能特性:\n * - 默认紧凑模式:以 tag 形式展示「预设标签 + 格式化时间」或「起止时间」\n * - mount 时若无初始值,自动选中「近5分钟」预设\n * - 点击 tag 后展开内嵌的完整 RangePicker,失焦后自动收起\n * - 8 个内置快捷预设,2 列 Grid 布局渲染,当前激活项高亮\n * - 受控组件:区分「用户操作」与「外部赋值」,仅用户操作触发 onChange\n * - 禁用日期:仅允许过去 7 天(含今天)\n * - allowClear:支持一键清除,清除后重置预设状态\n * - 通过 forwardRef + useImperativeHandle 对外暴露 toggleFirstPreset()\n *\n * @example\n * ```tsx\n * const pickerRef = useRef<YkDateRangePickerRef>(null);\n *\n * <YkDateRangePicker\n * value={range}\n * onChange={(val) => setRange(val)}\n * ref={pickerRef}\n * />\n *\n * // 外部强制切换到「近5分钟」\n * pickerRef.current?.toggleFirstPreset();\n * ```\n */\n\nimport { DatePicker } from 'antd';\nimport classNames from 'classnames';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, {\n type ComponentRef,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styles from './index.module.less';\nconst { RangePicker } = DatePicker;\n\n// ─── 类型 ─────────────────────────────────────────────────────────────────────\n\n/** 时间范围值 */\nexport type DateRangeValue = [Dayjs, Dayjs];\n\n/**\n * 预设项定义\n * - value() 每次调用都返回最新时间,避免闭包缓存旧值\n * - format() 可选,控制紧凑 tag 中的格式化展示文本\n */\ninterface RangePreset {\n label: string;\n /** 工厂函数,返回实时时间范围 */\n value: () => DateRangeValue;\n /** 自定义紧凑模式格式化:返回单个字符串或 [start, end] 数组 */\n format?: (value: DateRangeValue) => string | [string, string];\n}\n\nexport interface YkDateRangePickerProps {\n /** 受控值 */\n value?: DateRangeValue | [];\n /** 用户操作改变时触发(外部 setValue 不会触发) */\n onChange?: (value: DateRangeValue | null) => void;\n /**\n * 是否允许清除。\n * - false(默认):隐藏清除按钮,与 Vue 原版行为一致\n * - true:显示清除按钮,清除后重置预设状态并触发 onChange(null)\n */\n allowClear?: boolean;\n /**\n * 紧凑 tag 无值/清空时的占位文本。\n * 默认:「请选择时间范围」\n */\n placeholder?: string;\n}\n\n/** 通过 ref 对父组件暴露的方法 */\nexport interface YkDateRangePickerRef {\n /** 强制切换到第一个预设(近5分钟)并触发 onChange */\n toggleFirstPreset: () => void;\n}\n\n// ─── 工具函数 ─────────────────────────────────────────────────────────────────\n\n/** 精确到分钟的过去时间区间 */\nfunction pastTime(n: number, unit: dayjs.ManipulateType): DateRangeValue {\n const fmt = 'YYYY-MM-DD HH:mm:00';\n return [dayjs(dayjs().subtract(n, unit).format(fmt)), dayjs(dayjs().format(fmt))];\n}\n\nconst DISPLAY_FORMAT = 'YYYY-MM-DD HH:mm:ss';\n\n/** 格式化 Dayjs 为紧凑模式展示字符串 */\nfunction toDisplay(d: Dayjs): string {\n return dayjs(d).format(DISPLAY_FORMAT);\n}\n\n/** 格式化为预设匹配字符串(与 presetsFormat 保持一致) */\nfunction toMatchKey(d: Dayjs): string {\n return dayjs(d).format(DISPLAY_FORMAT);\n}\n\n// ─── 内置预设列表 ─────────────────────────────────────────────────────────────\n\n/**\n * 8 个内置快捷预设。\n * value 始终是工厂函数,保证每次点击都获取最新的当前时间。\n */\nconst RANGE_PRESETS: RangePreset[] = [\n {\n label: '近5分钟',\n value: () => pastTime(5, 'minute'),\n },\n {\n label: '近15分钟',\n value: () => pastTime(15, 'minute'),\n },\n {\n label: '近30分钟',\n value: () => pastTime(30, 'minute'),\n },\n {\n label: '近1小时',\n value: () => pastTime(1, 'hour'),\n },\n {\n label: '近2小时',\n value: () => pastTime(2, 'hour'),\n },\n {\n label: '近6小时',\n value: () => pastTime(6, 'hour'),\n },\n {\n label: '今天',\n value: () =>\n [\n dayjs(dayjs().startOf('day').format('YYYY-MM-DD HH:mm:00')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:00')),\n ] as DateRangeValue,\n // 紧凑模式只展示日期,如「03-25」\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '昨天',\n value: () =>\n [\n dayjs(dayjs().subtract(1, 'day').startOf('day').format('YYYY-MM-DD HH:mm:00')),\n dayjs(dayjs().subtract(1, 'day').endOf('day').format('YYYY-MM-DD HH:mm:00')),\n ] as DateRangeValue,\n format: (v) => v[0].format('MM-DD'),\n },\n {\n label: '近7天',\n value: () =>\n [\n dayjs(dayjs().subtract(6, 'day').startOf('day').format('YYYY-MM-DD HH:mm:00')),\n dayjs(dayjs().endOf('day').format('YYYY-MM-DD HH:mm:00')),\n ] as DateRangeValue,\n // 紧凑模式展示完整日期区间,如「2024-03-19 ~ 2024-03-25」\n format: (v) => [v[0].format('YYYY-MM-DD'), v[1].format('YYYY-MM-DD')],\n },\n];\n\n// ─── 主组件 ───────────────────────────────────────────────────────────────────\n\nconst YkDateRangePicker = forwardRef<YkDateRangePickerRef, YkDateRangePickerProps>(function YkDateRangePicker(\n { value, onChange, allowClear = false, placeholder = '请选择时间范围' },\n ref,\n) {\n // ── 内部状态 ───────────────────────────────────────────────────────────────\n\n /** 是否展示完整 RangePicker(false = 紧凑 tag 模式) */\n const [showFullPicker, setShowFullPicker] = useState(false);\n\n /** RangePicker 下拉面板是否展开 */\n const [open, setOpen] = useState(false);\n\n /**\n * 当前激活的预设定义引用。\n * undefined 表示用户手动选了自定义时间范围。\n */\n const [activePreset, setActivePreset] = useState<RangePreset | undefined>(undefined);\n\n /**\n * 紧凑 tag 中预设的格式化文本。\n * 例:「12:00:00 ~ 13:00:00」或「03-25」或「2024-03-19 ~ 2024-03-25」\n */\n const [presetFormatText, setPresetFormatText] = useState<string | undefined>(undefined);\n\n // ── Refs ───────────────────────────────────────────────────────────────────\n\n /**\n * 标记本次 value 变化是否由用户操作触发(非外部赋值)。\n * 用 ref 而非 state,避免触发额外的重渲染。\n * 与 Vue 版 selfChange 逻辑一致。\n */\n const selfChangeRef = useRef(false);\n\n /**\n * 标记当前 RangePicker.onChange 是否由预设点击触发。\n * 用于区分「预设点击」vs「手动选择」,避免手动选择时错误保留预设状态。\n */\n const isPresetClickRef = useRef(false);\n\n /** 组件根元素,用作 getPopupContainer */\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n /** RangePicker 实例 ref,用于编程式展开面板 */\n const pickerRef = useRef<ComponentRef<typeof RangePicker>>(null);\n\n /** 缓存上一次的 value,用于判断是否是外部变更 */\n const prevValueRef = useRef(value);\n\n // ── 默认值:mount 时无初始 value 则自动选中「近5分钟」 ───────────────────\n\n useEffect(() => {\n // 仅在外部未传有效初始值时执行一次\n if (value && (value as DateRangeValue).length === 2) return;\n\n const first = RANGE_PRESETS[0];\n const currentValue = first.value();\n const formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n\n setActivePreset(first);\n setPresetFormatText(formatText);\n\n // 标记为用户操作,避免被下方的外部 value 监听 effect 清空预设状态\n selfChangeRef.current = true;\n onChange?.(currentValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ── 外部 value 变化同步 ────────────────────────────────────────────────────\n\n useEffect(() => {\n // 跳过初始 mount(value 未真正变化)\n if (prevValueRef.current === value) return;\n prevValueRef.current = value;\n\n if (!selfChangeRef.current) {\n // 外部 setField 赋值:清空预设状态(无法得知外部值对应哪个预设)\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n }\n // 消费掉标记,等待下次用户操作重新置位\n selfChangeRef.current = false;\n }, [value]);\n\n // ── 紧凑 tag 展示文本 ──────────────────────────────────────────────────────\n\n /**\n * 紧凑模式下起止时间的字符串表示。\n * 与 Vue showState 计算属性逻辑一致。\n */\n const showState = useMemo<[string, string] | []>(() => {\n if (!value || value.length < 2) return [];\n return [toDisplay(value[0] as Dayjs), toDisplay(value[1] as Dayjs)];\n }, [value]);\n\n // ── 预设激活项检测 ─────────────────────────────────────────────────────────\n\n /**\n * 根据当前 value 匹配激活的预设 index(用于高亮渲染)。\n * 将 value 和预设值都格式化为同一字符串后比对,与 Vue presetsNode computed 一致。\n * 依赖 open,确保面板打开时(时间流逝后)重新计算。\n */\n const activePresetIndex = useMemo<number>(() => {\n if (!value || value.length < 2) return -1;\n const [v0, v1] = value as DateRangeValue;\n const valKeys = [toMatchKey(v0), toMatchKey(v1)];\n return RANGE_PRESETS.findIndex((preset) => {\n const presetVal = preset.value();\n const presetKeys = [toMatchKey(presetVal[0]), toMatchKey(presetVal[1])];\n return valKeys[0] === presetKeys[0] && valKeys[1] === presetKeys[1];\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, open]);\n\n // ── 事件处理 ──────────────────────────────────────────────────────────────\n\n /**\n * 点击预设项。\n * 对应 Vue handleTogglePreset。\n */\n const handlePresetClick = useCallback(\n (preset: RangePreset) => {\n isPresetClickRef.current = true;\n\n const currentValue = preset.value();\n\n // 计算紧凑 tag 中的格式化文本\n let formatText: string;\n if (preset.format) {\n const res = preset.format(currentValue);\n formatText = Array.isArray(res) ? res.join(' ~ ') : res;\n } else {\n // 无自定义 format:默认展示时间部分,如「12:00:00 ~ 13:00:00」\n formatText = currentValue.map((v) => dayjs(v).format('HH:mm:ss')).join(' ~ ');\n }\n\n setActivePreset(preset);\n setPresetFormatText(formatText);\n\n // 向父组件通知新值\n selfChangeRef.current = true;\n onChange?.(currentValue);\n\n // 选完预设后收起 picker,用 setTimeout 等待 antd 动画完成\n setTimeout(() => {\n setOpen(false);\n setShowFullPicker(false);\n }, 0);\n },\n [onChange],\n );\n\n /**\n * RangePicker onChange(用户手动选择日期或点击清除后触发)。\n * 对应 Vue handleChange。\n */\n const handlePickerChange = useCallback(\n (dates: [Dayjs | null, Dayjs | null] | null) => {\n // 无论是否预设点击,只要触发 change 都先清空预设状态\n setActivePreset(undefined);\n setPresetFormatText(undefined);\n isPresetClickRef.current = false;\n\n selfChangeRef.current = true;\n\n if (dates?.[0] && dates?.[1]) {\n // 正常选择\n onChange?.(dates as DateRangeValue);\n } else {\n // 点击清除:value 置为 [](空数组),并退回紧凑 tag 模式显示 placeholder\n onChange?.(null);\n setTimeout(() => {\n setOpen(false);\n setShowFullPicker(false);\n }, 0);\n }\n },\n [onChange],\n );\n\n /**\n * 点击紧凑 tag → 展开完整 RangePicker 并聚焦。\n * 对应 Vue handleClickPresetPicker。\n */\n const handleClickCompactTag = useCallback(() => {\n setShowFullPicker(true);\n // 等待 DOM 渲染后再触发 picker 展开\n setTimeout(() => {\n const el = pickerRef.current?.nativeElement;\n if (el) {\n // 触发第一个 input 的点击,使 antd RangePicker 展开面板\n const input = el.querySelector<HTMLInputElement>('input');\n input?.click();\n input?.focus();\n }\n }, 0);\n }, []);\n\n /**\n * RangePicker 面板开关回调。\n * 面板关闭时延迟退回紧凑模式(避免与选择操作冲突)。\n */\n const handleOpenChange = useCallback((isOpen: boolean) => {\n setOpen(isOpen);\n if (!isOpen) {\n setTimeout(() => {\n setShowFullPicker(false);\n }, 100);\n }\n }, []);\n\n /**\n * 禁用日期规则:只允许过去 7 天(含今天)。\n * 对应 Vue disabledDate。\n */\n const disabledDate = useCallback((current: Dayjs) => {\n return current && (current > dayjs().endOf('day') || current < dayjs().subtract(6, 'day').startOf('day'));\n }, []);\n\n /**\n * Popup 挂载容器:挂在组件自身 wrapper 内,避免全局定位错乱。\n * 对应 Vue getPopupContainer。\n */\n const getPopupContainer = useCallback((): HTMLElement => {\n return wrapperRef.current ?? document.body;\n }, []);\n\n // ── antd presets 节点 ──────────────────────────────────────────────────────\n\n /**\n * 构建传入 RangePicker 的 presets prop。\n * - label 为自定义 ReactNode,实现点击处理与高亮样式\n * - value 传实时值供 antd 内部使用(如 disabledDate 校验)\n * antd 5.x presets 格式:{ label: ReactNode; value: [Dayjs, Dayjs] }[]\n */\n const presetsNode = useMemo(() => {\n return RANGE_PRESETS.map((preset, index) => {\n const isActive = activePresetIndex === index;\n return {\n label: (\n <div\n className={classNames(styles.yokaPresetItem, {\n [styles.yokaPresetItemActive]: isActive,\n })}\n onClick={(e) => {\n // 阻止事件冒泡,避免与 antd 默认 preset 行为冲突\n e.stopPropagation();\n handlePresetClick(preset);\n }}\n >\n {preset.label}\n </div>\n ),\n value: preset.value() as [Dayjs, Dayjs],\n };\n });\n }, [activePresetIndex, handlePresetClick]);\n\n // ── 对外暴露方法 ───────────────────────────────────────────────────────────\n\n /**\n * 通过 ref 暴露 toggleFirstPreset(),供父组件调用。\n * 对应 Vue defineExpose({ toggleFirstPreset })。\n */\n useImperativeHandle(\n ref,\n () => ({\n toggleFirstPreset() {\n handlePresetClick(RANGE_PRESETS[0]);\n },\n }),\n [handlePresetClick],\n );\n\n // ── 渲染 ──────────────────────────────────────────────────────────────────\n\n // 完整 picker 的可见性:展开状态 或 下拉面板打开时均显示\n const pickerVisible = showFullPicker || open;\n\n return (\n <div className={styles.YkDateRangePicker} ref={wrapperRef}>\n {/* ── 紧凑 Tag 模式 ── */}\n {!showFullPicker && (\n <span className={styles.yokaCompactTag} onClick={handleClickCompactTag}>\n {/* 图标:绝对定位固定在左侧 */}\n <i className={classNames('iconfont icon-riqi1', styles.yokaCompactTagIcon)} />\n {/* 内容区:flex:1 + justify-content:center 实现视觉居中 */}\n <span className={styles.yokaCompactTagContent}>\n {activePreset ? (\n // 已选预设:「预设名称 (格式化时间)」\n <>\n <span className={styles.yokaCompactTagPresetLabel}>{activePreset.label}</span>\n <span className={styles.yokaCompactTagPresetFormat}>({presetFormatText})</span>\n </>\n ) : showState.length === 2 ? (\n // 自定义时间:「起始时间 ~ 结束时间」\n <>\n <span className={styles.yokaCompactTagDatetime}>{showState[0]}</span>\n <span className={styles.yokaCompactTagSeparator}>~</span>\n <span className={styles.yokaCompactTagDatetime}>{showState[1]}</span>\n </>\n ) : (\n // 无值/清空:placeholder 居中显示\n <span className={styles.yokaCompactTagPlaceholder}>{placeholder}</span>\n )}\n </span>\n </span>\n )}\n\n {/* ── 完整 RangePicker(display 切换以保持 DOM 挂载,避免 focus 闪烁) ── */}\n <div className={styles.yokaPickerWrapper} style={{ display: pickerVisible ? 'flex' : 'none' }}>\n <i className={classNames('iconfont icon-riqi1', styles.yokaPickerWrapperIcon)} />\n <RangePicker\n ref={pickerRef}\n // 值与回调\n value={value && value.length === 2 ? (value as [Dayjs, Dayjs]) : undefined}\n onChange={handlePickerChange}\n open={open}\n onOpenChange={handleOpenChange}\n // 外观\n variant=\"borderless\"\n allowClear={allowClear}\n suffixIcon={null}\n // 时间选择(支持秒)\n showTime={{\n format: 'HH:mm:ss',\n hideDisabledOptions: true,\n defaultValue: [dayjs('00:00', 'HH:mm'), dayjs('23:59', 'HH:mm')],\n }}\n format=\"YYYY-MM-DD HH:mm:ss\"\n // 禁用日期\n disabledDate={disabledDate}\n // 预设(自定义渲染)\n presets={presetsNode}\n // Popup 容器\n getPopupContainer={getPopupContainer}\n />\n </div>\n </div>\n );\n});\n\nYkDateRangePicker.displayName = 'YkDateRangePicker';\n\nexport default YkDateRangePicker;\n"],
5
+ "mappings": "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",
6
+ "names": ["dayjs", "YkDateRangePicker", "React", "classNames", "styles"]
7
+ }