@yoka-ui/ui 1.0.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 (488) hide show
  1. package/@Docs-yoka/exports.generated.md +93 -0
  2. package/@Docs-yoka/llms.txt +23 -0
  3. package/README.md +113 -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 +733 -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 +16 -0
  28. package/dist/es/business/AiChat/sse.js +171 -0
  29. package/dist/es/business/AiChat/sse.js.map +7 -0
  30. package/dist/es/business/AiChat/type.d.ts +156 -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 +268 -0
  35. package/dist/es/business/AiChat/useAiChat.js.map +7 -0
  36. package/dist/es/business/AiChat/useTaskWorkflow.d.ts +25 -0
  37. package/dist/es/business/AiChat/useTaskWorkflow.js +196 -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/YkDateRangePicker.mdx +180 -0
  131. package/dist/es/components/YkDateRangePicker/index.d.ts +61 -0
  132. package/dist/es/components/YkDateRangePicker/index.js +317 -0
  133. package/dist/es/components/YkDateRangePicker/index.js.map +7 -0
  134. package/dist/es/components/YkDateRangePicker/index.module.less +304 -0
  135. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  136. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +193 -0
  137. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  138. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  139. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +576 -0
  140. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  141. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  142. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +55 -0
  143. package/dist/es/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  144. package/dist/es/components/YkRangeDateWithVS/index.d.ts +62 -0
  145. package/dist/es/components/YkRangeDateWithVS/index.js +130 -0
  146. package/dist/es/components/YkRangeDateWithVS/index.js.map +7 -0
  147. package/dist/es/components/YkRangeDateWithVS/index.module.less +566 -0
  148. package/dist/es/components/YkRangeDateWithVS/styles.d.ts +2 -0
  149. package/dist/es/components/YkRangeDateWithVS/styles.js +18 -0
  150. package/dist/es/components/YkRangeDateWithVS/styles.js.map +7 -0
  151. package/dist/es/components/YkRangeDateWithVS/typing.d.ts +15 -0
  152. package/dist/es/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  153. package/dist/es/components/YkRangeTimeWithRecent/constants.js +288 -0
  154. package/dist/es/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  155. package/dist/es/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  156. package/dist/es/components/YkRangeTimeWithRecent/index.js +647 -0
  157. package/dist/es/components/YkRangeTimeWithRecent/index.js.map +7 -0
  158. package/dist/es/components/YkRangeTimeWithRecent/index.module.less +263 -0
  159. package/dist/es/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  160. package/dist/es/creative/ButtonRadioWithInfo/index.js +103 -0
  161. package/dist/es/creative/ButtonRadioWithInfo/index.js.map +7 -0
  162. package/dist/es/creative/ButtonRadioWithInfo/index.less +106 -0
  163. package/dist/es/creative/ButtonWithProgress/index.d.ts +11 -0
  164. package/dist/es/creative/ButtonWithProgress/index.js +79 -0
  165. package/dist/es/creative/ButtonWithProgress/index.js.map +7 -0
  166. package/dist/es/creative/ButtonWithProgress/index.less +66 -0
  167. package/dist/es/global.less +12 -0
  168. package/dist/es/index.d.ts +43 -0
  169. package/dist/es/index.js +87 -0
  170. package/dist/es/index.js.map +7 -0
  171. package/dist/es/index.less +35 -0
  172. package/dist/es/layout/FlexGrid/index.d.ts +25 -0
  173. package/dist/es/layout/FlexGrid/index.js +63 -0
  174. package/dist/es/layout/FlexGrid/index.js.map +7 -0
  175. package/dist/es/layout/YkContainer/index.d.ts +27 -0
  176. package/dist/es/layout/YkContainer/index.js +79 -0
  177. package/dist/es/layout/YkContainer/index.js.map +7 -0
  178. package/dist/es/layout/YkDrawer/index.d.ts +22 -0
  179. package/dist/es/layout/YkDrawer/index.js +160 -0
  180. package/dist/es/layout/YkDrawer/index.js.map +7 -0
  181. package/dist/es/layout/YkDrawer/index.module.less +45 -0
  182. package/dist/es/ui/LabelSelect/demo.d.ts +3 -0
  183. package/dist/es/ui/LabelSelect/demo.js +83 -0
  184. package/dist/es/ui/LabelSelect/demo.js.map +7 -0
  185. package/dist/es/ui/LabelSelect/index.d.ts +41 -0
  186. package/dist/es/ui/LabelSelect/index.js +136 -0
  187. package/dist/es/ui/LabelSelect/index.js.map +7 -0
  188. package/dist/es/ui/LogicOperator/index.d.ts +10 -0
  189. package/dist/es/ui/LogicOperator/index.js +12 -0
  190. package/dist/es/ui/LogicOperator/index.js.map +7 -0
  191. package/dist/es/ui/LogicOperator/index.module.less +97 -0
  192. package/dist/es/ui/YkButton/index.d.ts +9 -0
  193. package/dist/es/ui/YkButton/index.js +59 -0
  194. package/dist/es/ui/YkButton/index.js.map +7 -0
  195. package/dist/es/ui/YkCard/index.d.ts +4 -0
  196. package/dist/es/ui/YkCard/index.js +79 -0
  197. package/dist/es/ui/YkCard/index.js.map +7 -0
  198. package/dist/es/ui/YkCard/index.module.less +30 -0
  199. package/dist/es/ui/YkCheckbox/index.d.ts +4 -0
  200. package/dist/es/ui/YkCheckbox/index.js +45 -0
  201. package/dist/es/ui/YkCheckbox/index.js.map +7 -0
  202. package/dist/es/ui/YkCheckbox/index.module.less +22 -0
  203. package/dist/es/ui/YkDescriptions/index.d.ts +4 -0
  204. package/dist/es/ui/YkDescriptions/index.js +41 -0
  205. package/dist/es/ui/YkDescriptions/index.js.map +7 -0
  206. package/dist/es/ui/YkPagination/index.d.ts +4 -0
  207. package/dist/es/ui/YkPagination/index.js +63 -0
  208. package/dist/es/ui/YkPagination/index.js.map +7 -0
  209. package/dist/es/ui/YkPagination/index.module.less +22 -0
  210. package/dist/es/ui/YkRadio/index.d.ts +4 -0
  211. package/dist/es/ui/YkRadio/index.js +51 -0
  212. package/dist/es/ui/YkRadio/index.js.map +7 -0
  213. package/dist/es/ui/YkRadio/index.module.less +22 -0
  214. package/dist/es/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  215. package/dist/es/ui/YkRadioBtnSpecial/index.js +23 -0
  216. package/dist/es/ui/YkRadioBtnSpecial/index.js.map +7 -0
  217. package/dist/es/ui/YkRadioBtnSpecial/index.module.less +112 -0
  218. package/dist/es/ui/YkSegmented/index.d.ts +4 -0
  219. package/dist/es/ui/YkSegmented/index.js +41 -0
  220. package/dist/es/ui/YkSegmented/index.js.map +7 -0
  221. package/dist/es/ui/YkSelect/index.d.ts +7 -0
  222. package/dist/es/ui/YkSelect/index.js +54 -0
  223. package/dist/es/ui/YkSelect/index.js.map +7 -0
  224. package/dist/es/ui/YkSpin/index.d.ts +4 -0
  225. package/dist/es/ui/YkSpin/index.js +41 -0
  226. package/dist/es/ui/YkSpin/index.js.map +7 -0
  227. package/dist/es/ui/YkStatistic/index.d.ts +4 -0
  228. package/dist/es/ui/YkStatistic/index.js +41 -0
  229. package/dist/es/ui/YkStatistic/index.js.map +7 -0
  230. package/dist/es/ui/YkSwitch/index.d.ts +4 -0
  231. package/dist/es/ui/YkSwitch/index.js +51 -0
  232. package/dist/es/ui/YkSwitch/index.js.map +7 -0
  233. package/dist/es/ui/YkTabs/index.d.ts +12 -0
  234. package/dist/es/ui/YkTabs/index.js +75 -0
  235. package/dist/es/ui/YkTabs/index.js.map +7 -0
  236. package/dist/es/ui/YkTabs/index.module.less +11 -0
  237. package/dist/es/ui/YkTooltip/index.d.ts +4 -0
  238. package/dist/es/ui/YkTooltip/index.js +50 -0
  239. package/dist/es/ui/YkTooltip/index.js.map +7 -0
  240. package/dist/es/utils/styleUtils.d.ts +18 -0
  241. package/dist/es/utils/styleUtils.js +57 -0
  242. package/dist/es/utils/styleUtils.js.map +7 -0
  243. package/dist/es/utils/ykStorybookDoc.d.ts +17 -0
  244. package/dist/es/utils/ykStorybookDoc.js +18 -0
  245. package/dist/es/utils/ykStorybookDoc.js.map +7 -0
  246. package/dist/lib/Themes/InputTheme/index.d.ts +6 -0
  247. package/dist/lib/Themes/InputTheme/index.js +52 -0
  248. package/dist/lib/Themes/InputTheme/index.js.map +7 -0
  249. package/dist/lib/Themes/TableTheme/index.d.ts +7 -0
  250. package/dist/lib/Themes/TableTheme/index.js +61 -0
  251. package/dist/lib/Themes/TableTheme/index.js.map +7 -0
  252. package/dist/lib/Themes/TableTheme/index.less +46 -0
  253. package/dist/lib/assets/image/YKUI-logo.png +0 -0
  254. package/dist/lib/assets/less/ant-reset.less +402 -0
  255. package/dist/lib/assets/less/index.less +1 -0
  256. package/dist/lib/assets/less/variables.less +16 -0
  257. package/dist/lib/business/AiChat/MarkdownRender.d.ts +9 -0
  258. package/dist/lib/business/AiChat/MarkdownRender.js +102 -0
  259. package/dist/lib/business/AiChat/MarkdownRender.js.map +7 -0
  260. package/dist/lib/business/AiChat/index.d.ts +16 -0
  261. package/dist/lib/business/AiChat/index.js +723 -0
  262. package/dist/lib/business/AiChat/index.js.map +7 -0
  263. package/dist/lib/business/AiChat/intentRecognizer.d.ts +33 -0
  264. package/dist/lib/business/AiChat/intentRecognizer.js +193 -0
  265. package/dist/lib/business/AiChat/intentRecognizer.js.map +7 -0
  266. package/dist/lib/business/AiChat/navigationManager.d.ts +94 -0
  267. package/dist/lib/business/AiChat/navigationManager.js +214 -0
  268. package/dist/lib/business/AiChat/navigationManager.js.map +7 -0
  269. package/dist/lib/business/AiChat/sse.d.ts +16 -0
  270. package/dist/lib/business/AiChat/sse.js +171 -0
  271. package/dist/lib/business/AiChat/sse.js.map +7 -0
  272. package/dist/lib/business/AiChat/type.d.ts +156 -0
  273. package/dist/lib/business/AiChat/type.js +18 -0
  274. package/dist/lib/business/AiChat/type.js.map +7 -0
  275. package/dist/lib/business/AiChat/useAiChat.d.ts +2 -0
  276. package/dist/lib/business/AiChat/useAiChat.js +252 -0
  277. package/dist/lib/business/AiChat/useAiChat.js.map +7 -0
  278. package/dist/lib/business/AiChat/useTaskWorkflow.d.ts +25 -0
  279. package/dist/lib/business/AiChat/useTaskWorkflow.js +182 -0
  280. package/dist/lib/business/AiChat/useTaskWorkflow.js.map +7 -0
  281. package/dist/lib/business/DrawerPageInfo/index.d.ts +35 -0
  282. package/dist/lib/business/DrawerPageInfo/index.js +163 -0
  283. package/dist/lib/business/DrawerPageInfo/index.js.map +7 -0
  284. package/dist/lib/business/DrawerPageInfo/index.module.less +87 -0
  285. package/dist/lib/business/DrawerPageInfo/test.png +0 -0
  286. package/dist/lib/business/Editor/index.d.ts +11 -0
  287. package/dist/lib/business/Editor/index.js +99 -0
  288. package/dist/lib/business/Editor/index.js.map +7 -0
  289. package/dist/lib/business/Editor/index.less +31 -0
  290. package/dist/lib/business/Empty/empty.png +0 -0
  291. package/dist/lib/business/Empty/index.d.ts +19 -0
  292. package/dist/lib/business/Empty/index.js +65 -0
  293. package/dist/lib/business/Empty/index.js.map +7 -0
  294. package/dist/lib/business/ModCommonFilter/assets/images/empty.png +0 -0
  295. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.d.ts +13 -0
  296. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js +50 -0
  297. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconClose.js.map +7 -0
  298. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.d.ts +13 -0
  299. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js +50 -0
  300. package/dist/lib/business/ModCommonFilter/components/FilterButton/IconXiala.js.map +7 -0
  301. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.d.ts +25 -0
  302. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js +60 -0
  303. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.js.map +7 -0
  304. package/dist/lib/business/ModCommonFilter/components/FilterButton/index.module.less +97 -0
  305. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.d.ts +18 -0
  306. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js +69 -0
  307. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Category.js.map +7 -0
  308. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.d.ts +37 -0
  309. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js +211 -0
  310. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Content.js.map +7 -0
  311. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.d.ts +26 -0
  312. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js +97 -0
  313. package/dist/lib/business/ModCommonFilter/components/PopoverContent/Selected.js.map +7 -0
  314. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.d.ts +51 -0
  315. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js +101 -0
  316. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.js.map +7 -0
  317. package/dist/lib/business/ModCommonFilter/components/PopoverContent/index.module.less +260 -0
  318. package/dist/lib/business/ModCommonFilter/index.d.ts +53 -0
  319. package/dist/lib/business/ModCommonFilter/index.js +143 -0
  320. package/dist/lib/business/ModCommonFilter/index.js.map +7 -0
  321. package/dist/lib/business/ModCommonFilter/index.module.less +7 -0
  322. package/dist/lib/business/ModCommonFilter/typing.d.ts +20 -0
  323. package/dist/lib/business/ModCommonFilter/typing.js +18 -0
  324. package/dist/lib/business/ModCommonFilter/typing.js.map +7 -0
  325. package/dist/lib/business/YkPorjectSelect/icon-product.png +0 -0
  326. package/dist/lib/business/YkPorjectSelect/index.d.ts +51 -0
  327. package/dist/lib/business/YkPorjectSelect/index.js +235 -0
  328. package/dist/lib/business/YkPorjectSelect/index.js.map +7 -0
  329. package/dist/lib/business/YkPorjectSelect/index.module.less +334 -0
  330. package/dist/lib/business/YkPorjectSelect/product-close.png +0 -0
  331. package/dist/lib/components/Clock/index.d.ts +19 -0
  332. package/dist/lib/components/Clock/index.js +85 -0
  333. package/dist/lib/components/Clock/index.js.map +7 -0
  334. package/dist/lib/components/DebounceInput/index.d.ts +16 -0
  335. package/dist/lib/components/DebounceInput/index.js +107 -0
  336. package/dist/lib/components/DebounceInput/index.js.map +7 -0
  337. package/dist/lib/components/DebounceInput/index.module.less +23 -0
  338. package/dist/lib/components/MultipleSelect/index.d.ts +23 -0
  339. package/dist/lib/components/MultipleSelect/index.js +279 -0
  340. package/dist/lib/components/MultipleSelect/index.js.map +7 -0
  341. package/dist/lib/components/MultipleSelect/index.module.less +174 -0
  342. package/dist/lib/components/NumericInput/index.d.ts +19 -0
  343. package/dist/lib/components/NumericInput/index.js +67 -0
  344. package/dist/lib/components/NumericInput/index.js.map +7 -0
  345. package/dist/lib/components/RefreshButton/index.d.ts +8 -0
  346. package/dist/lib/components/RefreshButton/index.js +51 -0
  347. package/dist/lib/components/RefreshButton/index.js.map +7 -0
  348. package/dist/lib/components/SearchWithHistory/index.d.ts +21 -0
  349. package/dist/lib/components/SearchWithHistory/index.js +145 -0
  350. package/dist/lib/components/SearchWithHistory/index.js.map +7 -0
  351. package/dist/lib/components/SearchWithHistory/index.module.less +64 -0
  352. package/dist/lib/components/TextWithInput/index.d.ts +15 -0
  353. package/dist/lib/components/TextWithInput/index.js +65 -0
  354. package/dist/lib/components/TextWithInput/index.js.map +7 -0
  355. package/dist/lib/components/TextWithToolTip/index.d.ts +17 -0
  356. package/dist/lib/components/TextWithToolTip/index.js +134 -0
  357. package/dist/lib/components/TextWithToolTip/index.js.map +7 -0
  358. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.d.ts +28 -0
  359. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js +191 -0
  360. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.js.map +7 -0
  361. package/dist/lib/components/TreeTransfer/components/TreeTransferPanel/index.less +151 -0
  362. package/dist/lib/components/TreeTransfer/index.d.ts +28 -0
  363. package/dist/lib/components/TreeTransfer/index.js +214 -0
  364. package/dist/lib/components/TreeTransfer/index.js.map +7 -0
  365. package/dist/lib/components/TreeTransfer/index.less +69 -0
  366. package/dist/lib/components/TreeTransfer/types.d.ts +122 -0
  367. package/dist/lib/components/TreeTransfer/types.js +30 -0
  368. package/dist/lib/components/TreeTransfer/types.js.map +7 -0
  369. package/dist/lib/components/TreeTransfer/utils/index.d.ts +120 -0
  370. package/dist/lib/components/TreeTransfer/utils/index.js +208 -0
  371. package/dist/lib/components/TreeTransfer/utils/index.js.map +7 -0
  372. package/dist/lib/components/YkDateRangePicker/YkDateRangePicker.mdx +180 -0
  373. package/dist/lib/components/YkDateRangePicker/index.d.ts +61 -0
  374. package/dist/lib/components/YkDateRangePicker/index.js +338 -0
  375. package/dist/lib/components/YkDateRangePicker/index.js.map +7 -0
  376. package/dist/lib/components/YkDateRangePicker/index.module.less +304 -0
  377. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.d.ts +16 -0
  378. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js +223 -0
  379. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSCompare.js.map +7 -0
  380. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.d.ts +31 -0
  381. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js +587 -0
  382. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSRange.js.map +7 -0
  383. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.d.ts +16 -0
  384. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js +85 -0
  385. package/dist/lib/components/YkRangeDateWithVS/YkRangeDateWithVSSelect.js.map +7 -0
  386. package/dist/lib/components/YkRangeDateWithVS/index.d.ts +62 -0
  387. package/dist/lib/components/YkRangeDateWithVS/index.js +140 -0
  388. package/dist/lib/components/YkRangeDateWithVS/index.js.map +7 -0
  389. package/dist/lib/components/YkRangeDateWithVS/index.module.less +566 -0
  390. package/dist/lib/components/YkRangeDateWithVS/styles.d.ts +2 -0
  391. package/dist/lib/components/YkRangeDateWithVS/styles.js +48 -0
  392. package/dist/lib/components/YkRangeDateWithVS/styles.js.map +7 -0
  393. package/dist/lib/components/YkRangeDateWithVS/typing.d.ts +15 -0
  394. package/dist/lib/components/YkRangeTimeWithRecent/constants.d.ts +48 -0
  395. package/dist/lib/components/YkRangeTimeWithRecent/constants.js +333 -0
  396. package/dist/lib/components/YkRangeTimeWithRecent/constants.js.map +7 -0
  397. package/dist/lib/components/YkRangeTimeWithRecent/index.d.ts +26 -0
  398. package/dist/lib/components/YkRangeTimeWithRecent/index.js +647 -0
  399. package/dist/lib/components/YkRangeTimeWithRecent/index.js.map +7 -0
  400. package/dist/lib/components/YkRangeTimeWithRecent/index.module.less +263 -0
  401. package/dist/lib/creative/ButtonRadioWithInfo/index.d.ts +17 -0
  402. package/dist/lib/creative/ButtonRadioWithInfo/index.js +102 -0
  403. package/dist/lib/creative/ButtonRadioWithInfo/index.js.map +7 -0
  404. package/dist/lib/creative/ButtonRadioWithInfo/index.less +106 -0
  405. package/dist/lib/creative/ButtonWithProgress/index.d.ts +11 -0
  406. package/dist/lib/creative/ButtonWithProgress/index.js +70 -0
  407. package/dist/lib/creative/ButtonWithProgress/index.js.map +7 -0
  408. package/dist/lib/creative/ButtonWithProgress/index.less +66 -0
  409. package/dist/lib/global.less +12 -0
  410. package/dist/lib/index.d.ts +43 -0
  411. package/dist/lib/index.js +161 -0
  412. package/dist/lib/index.js.map +7 -0
  413. package/dist/lib/index.less +35 -0
  414. package/dist/lib/layout/FlexGrid/index.d.ts +25 -0
  415. package/dist/lib/layout/FlexGrid/index.js +77 -0
  416. package/dist/lib/layout/FlexGrid/index.js.map +7 -0
  417. package/dist/lib/layout/YkContainer/index.d.ts +27 -0
  418. package/dist/lib/layout/YkContainer/index.js +79 -0
  419. package/dist/lib/layout/YkContainer/index.js.map +7 -0
  420. package/dist/lib/layout/YkDrawer/index.d.ts +22 -0
  421. package/dist/lib/layout/YkDrawer/index.js +152 -0
  422. package/dist/lib/layout/YkDrawer/index.js.map +7 -0
  423. package/dist/lib/layout/YkDrawer/index.module.less +45 -0
  424. package/dist/lib/ui/LabelSelect/demo.d.ts +3 -0
  425. package/dist/lib/ui/LabelSelect/demo.js +113 -0
  426. package/dist/lib/ui/LabelSelect/demo.js.map +7 -0
  427. package/dist/lib/ui/LabelSelect/index.d.ts +41 -0
  428. package/dist/lib/ui/LabelSelect/index.js +124 -0
  429. package/dist/lib/ui/LabelSelect/index.js.map +7 -0
  430. package/dist/lib/ui/LogicOperator/index.d.ts +10 -0
  431. package/dist/lib/ui/LogicOperator/index.js +42 -0
  432. package/dist/lib/ui/LogicOperator/index.js.map +7 -0
  433. package/dist/lib/ui/LogicOperator/index.module.less +97 -0
  434. package/dist/lib/ui/YkButton/index.d.ts +9 -0
  435. package/dist/lib/ui/YkButton/index.js +55 -0
  436. package/dist/lib/ui/YkButton/index.js.map +7 -0
  437. package/dist/lib/ui/YkCard/index.d.ts +4 -0
  438. package/dist/lib/ui/YkCard/index.js +76 -0
  439. package/dist/lib/ui/YkCard/index.js.map +7 -0
  440. package/dist/lib/ui/YkCard/index.module.less +30 -0
  441. package/dist/lib/ui/YkCheckbox/index.d.ts +4 -0
  442. package/dist/lib/ui/YkCheckbox/index.js +42 -0
  443. package/dist/lib/ui/YkCheckbox/index.js.map +7 -0
  444. package/dist/lib/ui/YkCheckbox/index.module.less +22 -0
  445. package/dist/lib/ui/YkDescriptions/index.d.ts +4 -0
  446. package/dist/lib/ui/YkDescriptions/index.js +41 -0
  447. package/dist/lib/ui/YkDescriptions/index.js.map +7 -0
  448. package/dist/lib/ui/YkPagination/index.d.ts +4 -0
  449. package/dist/lib/ui/YkPagination/index.js +60 -0
  450. package/dist/lib/ui/YkPagination/index.js.map +7 -0
  451. package/dist/lib/ui/YkPagination/index.module.less +22 -0
  452. package/dist/lib/ui/YkRadio/index.d.ts +4 -0
  453. package/dist/lib/ui/YkRadio/index.js +51 -0
  454. package/dist/lib/ui/YkRadio/index.js.map +7 -0
  455. package/dist/lib/ui/YkRadio/index.module.less +22 -0
  456. package/dist/lib/ui/YkRadioBtnSpecial/index.d.ts +15 -0
  457. package/dist/lib/ui/YkRadioBtnSpecial/index.js +53 -0
  458. package/dist/lib/ui/YkRadioBtnSpecial/index.js.map +7 -0
  459. package/dist/lib/ui/YkRadioBtnSpecial/index.module.less +112 -0
  460. package/dist/lib/ui/YkSegmented/index.d.ts +4 -0
  461. package/dist/lib/ui/YkSegmented/index.js +41 -0
  462. package/dist/lib/ui/YkSegmented/index.js.map +7 -0
  463. package/dist/lib/ui/YkSelect/index.d.ts +7 -0
  464. package/dist/lib/ui/YkSelect/index.js +54 -0
  465. package/dist/lib/ui/YkSelect/index.js.map +7 -0
  466. package/dist/lib/ui/YkSpin/index.d.ts +4 -0
  467. package/dist/lib/ui/YkSpin/index.js +41 -0
  468. package/dist/lib/ui/YkSpin/index.js.map +7 -0
  469. package/dist/lib/ui/YkStatistic/index.d.ts +4 -0
  470. package/dist/lib/ui/YkStatistic/index.js +41 -0
  471. package/dist/lib/ui/YkStatistic/index.js.map +7 -0
  472. package/dist/lib/ui/YkSwitch/index.d.ts +4 -0
  473. package/dist/lib/ui/YkSwitch/index.js +51 -0
  474. package/dist/lib/ui/YkSwitch/index.js.map +7 -0
  475. package/dist/lib/ui/YkTabs/index.d.ts +12 -0
  476. package/dist/lib/ui/YkTabs/index.js +70 -0
  477. package/dist/lib/ui/YkTabs/index.js.map +7 -0
  478. package/dist/lib/ui/YkTabs/index.module.less +11 -0
  479. package/dist/lib/ui/YkTooltip/index.d.ts +4 -0
  480. package/dist/lib/ui/YkTooltip/index.js +45 -0
  481. package/dist/lib/ui/YkTooltip/index.js.map +7 -0
  482. package/dist/lib/utils/styleUtils.d.ts +18 -0
  483. package/dist/lib/utils/styleUtils.js +84 -0
  484. package/dist/lib/utils/styleUtils.js.map +7 -0
  485. package/dist/lib/utils/ykStorybookDoc.d.ts +17 -0
  486. package/dist/lib/utils/ykStorybookDoc.js +41 -0
  487. package/dist/lib/utils/ykStorybookDoc.js.map +7 -0
  488. package/package.json +148 -0
@@ -0,0 +1,195 @@
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/components/TreeTransfer/utils/index.ts
22
+ import { DEFAULT_PAGE_SIZE } from "../types";
23
+ function buildTreeData(data, options = {}) {
24
+ const { keyField = "id", parentField = "parentId", isParent = (item) => !item[parentField] } = options;
25
+ const map = /* @__PURE__ */ new Map();
26
+ const roots = [];
27
+ data.forEach((item) => {
28
+ const key = item[keyField];
29
+ map.set(key, { key, data: item, isParent: isParent(item), children: [] });
30
+ });
31
+ data.forEach((item) => {
32
+ const key = item[keyField];
33
+ const parentId = item[parentField];
34
+ const node = map.get(key);
35
+ if (parentId && map.has(parentId)) {
36
+ map.get(parentId).children.push(node);
37
+ } else {
38
+ roots.push(node);
39
+ }
40
+ });
41
+ return roots;
42
+ }
43
+ function flattenTreeData(treeData) {
44
+ const result = [];
45
+ function traverse(nodes) {
46
+ nodes.forEach((node) => {
47
+ var _a;
48
+ result.push(node);
49
+ if ((_a = node.children) == null ? void 0 : _a.length)
50
+ traverse(node.children);
51
+ });
52
+ }
53
+ traverse(treeData);
54
+ return result;
55
+ }
56
+ function sliceDataByPage(data, page, pageSize = DEFAULT_PAGE_SIZE) {
57
+ const start = (page - 1) * pageSize;
58
+ return data.slice(start, start + pageSize);
59
+ }
60
+ function filterData(data, searchValue, fields = ["id", "name"]) {
61
+ if (!searchValue.trim())
62
+ return data;
63
+ const lowerSearch = searchValue.toLowerCase();
64
+ return data.filter((item) => {
65
+ var _a;
66
+ const selfMatch = fields.some((field) => {
67
+ const value = typeof field === "function" ? field(item.data) : item.data[field];
68
+ return String(value != null ? value : "").toLowerCase().includes(lowerSearch);
69
+ });
70
+ if (selfMatch)
71
+ return true;
72
+ if ((_a = item.children) == null ? void 0 : _a.length) {
73
+ return filterData(item.children, searchValue, fields).length > 0;
74
+ }
75
+ return false;
76
+ });
77
+ }
78
+ function getAllDescendantKeys(selectedKeys, dataSource) {
79
+ const keySet = new Set(selectedKeys.map(String));
80
+ const allKeys = [];
81
+ function collectWithDescendants(node) {
82
+ var _a;
83
+ allKeys.push(String(node.key));
84
+ (_a = node.children) == null ? void 0 : _a.forEach(collectWithDescendants);
85
+ }
86
+ function traverse(nodes) {
87
+ nodes.forEach((node) => {
88
+ var _a;
89
+ if (keySet.has(String(node.key))) {
90
+ collectWithDescendants(node);
91
+ } else {
92
+ if ((_a = node.children) == null ? void 0 : _a.length)
93
+ traverse(node.children);
94
+ }
95
+ });
96
+ }
97
+ traverse(dataSource);
98
+ return allKeys;
99
+ }
100
+ function countTotalNodes(data) {
101
+ let count = 0;
102
+ function traverse(nodes) {
103
+ nodes.forEach((node) => {
104
+ var _a;
105
+ count += 1;
106
+ if ((_a = node.children) == null ? void 0 : _a.length)
107
+ traverse(node.children);
108
+ });
109
+ }
110
+ traverse(data);
111
+ return count;
112
+ }
113
+ function countParentNodes(data) {
114
+ return data.length;
115
+ }
116
+ function findNodeWithDescendants(key, dataSource) {
117
+ const result = [];
118
+ function traverse(nodes) {
119
+ var _a;
120
+ for (const node of nodes) {
121
+ if (node.key === key) {
122
+ result.push(node);
123
+ (_a = node.children) == null ? void 0 : _a.forEach((child) => {
124
+ result.push(child);
125
+ if (child.children)
126
+ traverse(child.children);
127
+ });
128
+ return true;
129
+ }
130
+ if (node.children && traverse(node.children))
131
+ return true;
132
+ }
133
+ return false;
134
+ }
135
+ traverse(dataSource);
136
+ return result;
137
+ }
138
+ function removeNodesFromTree(dataSource, keysToRemove) {
139
+ var _a;
140
+ const result = [];
141
+ for (const node of dataSource) {
142
+ if (keysToRemove.has(node.key))
143
+ continue;
144
+ if ((_a = node.children) == null ? void 0 : _a.length) {
145
+ result.push(__spreadProps(__spreadValues({}, node), { children: removeNodesFromTree(node.children, keysToRemove) }));
146
+ } else {
147
+ result.push(node);
148
+ }
149
+ }
150
+ return result;
151
+ }
152
+ function addNodesToTree(dataSource, parentKey, nodes) {
153
+ if (parentKey === null) {
154
+ return [...dataSource, ...nodes];
155
+ }
156
+ return dataSource.map((node) => {
157
+ var _a;
158
+ if (node.key === parentKey) {
159
+ return __spreadProps(__spreadValues({}, node), { children: [...(_a = node.children) != null ? _a : [], ...nodes] });
160
+ }
161
+ if (node.children) {
162
+ return __spreadProps(__spreadValues({}, node), { children: addNodesToTree(node.children, parentKey, nodes) });
163
+ }
164
+ return node;
165
+ });
166
+ }
167
+ function extractTopLevelSelectedNodes(selectedKeys, dataSource) {
168
+ const result = [];
169
+ function traverse(nodes) {
170
+ nodes.forEach((node) => {
171
+ var _a;
172
+ if (selectedKeys.has(String(node.key))) {
173
+ result.push(node);
174
+ } else if ((_a = node.children) == null ? void 0 : _a.length) {
175
+ traverse(node.children);
176
+ }
177
+ });
178
+ }
179
+ traverse(dataSource);
180
+ return result;
181
+ }
182
+ export {
183
+ addNodesToTree,
184
+ buildTreeData,
185
+ countParentNodes,
186
+ countTotalNodes,
187
+ extractTopLevelSelectedNodes,
188
+ filterData,
189
+ findNodeWithDescendants,
190
+ flattenTreeData,
191
+ getAllDescendantKeys,
192
+ removeNodesFromTree,
193
+ sliceDataByPage
194
+ };
195
+ //# 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,180 @@
1
+ import { Meta, ArgTypes } from '@storybook/addon-docs/blocks';
2
+ import * as YkDateRangePickerStories from './index.stories';
3
+
4
+ <Meta of={YkDateRangePickerStories} />
5
+
6
+ # YkDateRangePicker 事件日期范围选择器
7
+
8
+ 事件类日期范围选择器,支持**紧凑预设标签**与**完整 RangePicker** 双模式切换,提供多项快捷预设与受控逻辑。
9
+
10
+ ## ✨ 核心特性
11
+
12
+ - 🎯 **双模式交互**:紧凑模式(预设标签)↔ 完整模式(RangePicker)无缝切换
13
+ - ⚡ **智能预设**:内置 8 个常用时间快捷选项,2 列网格布局
14
+ - 🎨 **视觉反馈**:当前激活项高亮显示,蓝色背景标识选中状态
15
+ - 🤖 **智能默认**:无初始值时自动选中「近5分钟」预设
16
+ - 🔄 **受控组件**:精准区分「用户操作」与「外部赋值」,仅用户操作触发 `onChange`
17
+ - 🔒 **日期限制**:仅允许选择近 7 天(含今天)的时间范围
18
+ - 🗑️ **清除支持**:`allowClear` 一键清除,清除后自动重置预设状态
19
+ - 🔧 **ref 控制**:通过 `forwardRef` 暴露 `toggleFirstPreset()` 方法,支持外部强制切换预设
20
+
21
+ ## 📦 依赖
22
+
23
+ ```json
24
+ {
25
+ "react": "^18.3.1",
26
+ "antd": "^5.29.2",
27
+ "dayjs": "^1.x",
28
+ "classnames": "^2.5.1",
29
+ "@ant-design/icons": "^5.6.1"
30
+ }
31
+ ```
32
+
33
+ ## 🚀 快速开始
34
+
35
+ ### 基础使用
36
+
37
+ ```tsx
38
+ import { useState, useRef } from 'react';
39
+ import { YkDateRangePicker, type DateRangeValue, type YkDateRangePickerRef } from '@yoka/ui';
40
+ import dayjs from 'dayjs';
41
+
42
+ function App() {
43
+ const [range, setRange] = useState<DateRangeValue | []>([]);
44
+ const pickerRef = useRef<YkDateRangePickerRef>(null);
45
+
46
+ return (
47
+ <YkDateRangePicker
48
+ value={range}
49
+ onChange={(dates) => setRange(dates ?? [])}
50
+ ref={pickerRef}
51
+ />
52
+ );
53
+ }
54
+ ```
55
+
56
+ ### 外部控制
57
+
58
+ ```tsx
59
+ // 强制切换到「近5分钟」预设
60
+ pickerRef.current?.toggleFirstPreset();
61
+
62
+ // 设置外部值
63
+ setRange([dayjs().subtract(1, 'hour'), dayjs()]);
64
+
65
+ // 清空选择
66
+ setRange([]);
67
+ ```
68
+
69
+ ## 📋 API 文档
70
+
71
+ <ArgTypes of={YkDateRangePickerStories} />
72
+
73
+ ## 💡 使用场景
74
+
75
+ ### 1. 日志查询
76
+
77
+ 适用于需要快速筛选最近时间段日志的场景,预设的「近5分钟」「近1小时」等选项大幅提升操作效率。
78
+
79
+ ### 2. 数据分析
80
+
81
+ 在数据报表页面中,用户可以通过预设快速切换常用分析周期,或通过自定义范围进行精细化查询。
82
+
83
+ ### 3. 监控告警
84
+
85
+ 结合实时监控需求,预设项帮助用户快速定位异常发生的时间段。
86
+
87
+ ## 🎯 最佳实践
88
+
89
+ ### 保持受控模式
90
+
91
+ 始终使用受控模式(controlled mode),通过 `value` 和 `onChange` 管理状态,确保组件行为可预测:
92
+
93
+ ```tsx
94
+ // ✅ 推荐:受控模式
95
+ const [value, setValue] = useState<DateRangeValue | []>([]);
96
+ <YkDateRangePicker value={value} onChange={setValue} />
97
+
98
+ // ❌ 避免:非受控模式可能导致状态不一致
99
+ <YkDateRangePicker defaultValue={initialValue} />
100
+ ```
101
+
102
+ ### 合理使用 ref
103
+
104
+ ref 方法 `toggleFirstPreset()` 适用于特殊场景(如重置查询条件),日常使用中建议通过受控 props 控制组件:
105
+
106
+ ```tsx
107
+ // 在重置按钮的回调中使用
108
+ const handleReset = () => {
109
+ setValue([]); // 清空值
110
+ pickerRef.current?.toggleFirstPreset(); // 重置到默认预设
111
+ };
112
+ ```
113
+
114
+ ### 处理空值
115
+
116
+ 组件支持空数组 `[]` 作为值,表示未选择任何时间范围。清除后建议重置为 `[]` 而非 `undefined`:
117
+
118
+ ```tsx
119
+ onChange={(val) => {
120
+ // ✅ 推荐:始终转换为数组
121
+ setValue(val || []);
122
+ }}
123
+ ```
124
+
125
+ ## ⚠️ 注意事项
126
+
127
+ 1. **样式引入**:业务侧使用 `@yoka/ui` 时,需确保引入 Ant Design 全局样式和组件库样式:
128
+ ```tsx
129
+ import 'antd/dist/reset.css';
130
+ import '@yoka/ui/dist/index.less';
131
+ ```
132
+
133
+ 2. **版本要求**:需要 React 18+ 和 Ant Design 5+,与库的版本保持一致。
134
+
135
+ 3. **日期限制**:组件默认限制只能选择近 7 天(含今天)的时间范围,如需调整需修改源码中的禁用逻辑。
136
+
137
+ 4. **预设范围**:预设项的时长计算基于当前时间,每次展开时会重新计算。
138
+
139
+ 5. **性能优化**:组件内部使用 `useMemo` 和 `useCallback` 优化预设计算和事件处理,避免不必要的重渲染。
140
+
141
+ ## 🎨 预设项说明
142
+
143
+ | 预设标签 | 时间范围 | 使用场景 |
144
+ | --------- | --------- | --------- |
145
+ | 近5分钟 | 当前时间 - 5分钟 ~ 现在 | 实时监控、日志追踪 |
146
+ | 近15分钟 | 当前时间 - 15分钟 ~ 现在 | 短期数据分析 |
147
+ | 近30分钟 | 当前时间 - 30分钟 ~ 现在 | 中等时长监控 |
148
+ | 近1小时 | 当前时间 - 1小时 ~ 现在 | 小时级数据分析 |
149
+ | 近6小时 | 当前时间 - 6小时 ~ 现在 | 半日数据查看 |
150
+ | 近12小时 | 当前时间 - 12小时 ~ 现在 | 半日对比分析 |
151
+ | 近24小时 | 当前时间 - 24小时 ~ 现在 | 日级数据查询 |
152
+ | 近7天 | 当前时间 - 7天 ~ 现在 | 周级趋势分析 |
153
+
154
+ ## 🔍 交互行为
155
+
156
+ ### 预设选择流程
157
+
158
+ 1. 用户点击紧凑模式的标签区域
159
+ 2. 下拉面板展开,显示 8 个预设选项和完整的 RangePicker
160
+ 3. 用户点击任意预设项,组件自动计算对应时间范围
161
+ 4. 选择后立即触发 `onChange` 回调,并关闭面板
162
+ 5. 紧凑模式标签更新为「预设名称 + 格式化时间」或「起止时间」
163
+
164
+ ### 自定义时间选择
165
+
166
+ 1. 用户在展开的面板中点击 RangePicker
167
+ 2. 选择自定义开始和结束时间
168
+ 3. 点击确定后触发 `onChange` 回调
169
+ 4. 紧凑模式标签显示为「开始时间 ~ 结束时间」格式
170
+
171
+ ### 清除行为
172
+
173
+ - 当设置 `allowClear=true` 时,标签右侧显示清除图标
174
+ - 点击清除图标后,值重置为 `[]`,预设状态被清除
175
+ - 触发 `onChange` 回调,参数为 `[]`
176
+
177
+ ## 📚 相关组件
178
+
179
+ - [DatePicker](https://ant.design/components/date-picker) - Ant Design 基础日期选择器
180
+ - [RangePicker](https://ant.design/components/date-picker#rangepicker) - Ant Design 日期范围选择器
@@ -0,0 +1,61 @@
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
+ disabled?: boolean;
52
+ /** 校验状态 */
53
+ status?: '' | 'error' | 'warning';
54
+ }
55
+ /** 通过 ref 对父组件暴露的方法 */
56
+ export interface YkDateRangePickerRef {
57
+ /** 强制切换到第一个预设(近5分钟)并触发 onChange */
58
+ toggleFirstPreset: () => void;
59
+ }
60
+ declare const YkDateRangePicker: React.ForwardRefExoticComponent<YkDateRangePickerProps & React.RefAttributes<YkDateRangePickerRef>>;
61
+ export default YkDateRangePicker;