antdv-next 1.5.6 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/dist/_util/ContextIsolator.js +12 -3
  2. package/dist/_util/PurePanel.js +17 -14
  3. package/dist/_util/fallbackProp.d.ts +13 -0
  4. package/dist/_util/fallbackProp.js +15 -0
  5. package/dist/_util/hooks/useAllowClear.d.ts +35 -0
  6. package/dist/_util/hooks/useAllowClear.js +34 -0
  7. package/dist/_util/hooks/useClosable.js +1 -1
  8. package/dist/_util/hooks/useMergeSemantic.js +3 -2
  9. package/dist/_util/omitUndefined.d.ts +13 -0
  10. package/dist/_util/omitUndefined.js +20 -0
  11. package/dist/_util/tools.d.ts +3 -1
  12. package/dist/_util/tools.js +6 -1
  13. package/dist/_util/wave/index.js +4 -2
  14. package/dist/_util/wave/style.d.ts +5 -1
  15. package/dist/_util/wave/useWave.d.ts +2 -1
  16. package/dist/_util/wave/useWave.js +4 -3
  17. package/dist/affix/style/index.d.ts +5 -1
  18. package/dist/alert/Alert.d.ts +6 -2
  19. package/dist/alert/Alert.js +135 -129
  20. package/dist/alert/style/index.d.ts +7 -4
  21. package/dist/alert/style/index.js +12 -9
  22. package/dist/anchor/style/index.d.ts +5 -1
  23. package/dist/antd-with-locales.esm.js +21947 -18522
  24. package/dist/antd-with-locales.js +82 -82
  25. package/dist/antd.css +1 -1
  26. package/dist/antd.esm.js +19553 -16771
  27. package/dist/antd.js +82 -82
  28. package/dist/app/style/index.d.ts +5 -1
  29. package/dist/auto-complete/index.js +1 -0
  30. package/dist/avatar/Avatar.js +2 -4
  31. package/dist/avatar/AvatarContext.d.ts +2 -2
  32. package/dist/avatar/style/index.d.ts +5 -1
  33. package/dist/badge/index.js +1 -1
  34. package/dist/badge/style/index.d.ts +5 -1
  35. package/dist/badge/style/index.js +2 -9
  36. package/dist/badge/style/ribbon.d.ts +5 -1
  37. package/dist/border-beam/BorderBeam.d.ts +8 -1
  38. package/dist/border-beam/BorderBeam.js +28 -14
  39. package/dist/border-beam/index.d.ts +2 -2
  40. package/dist/border-beam/style/index.d.ts +5 -1
  41. package/dist/breadcrumb/BreadcrumbItem.js +2 -2
  42. package/dist/breadcrumb/style/index.d.ts +5 -1
  43. package/dist/button/style/index.d.ts +5 -1
  44. package/dist/calendar/style/index.d.ts +4 -1
  45. package/dist/card/Card.js +1 -1
  46. package/dist/card/style/index.d.ts +5 -1
  47. package/dist/card/style/index.js +2 -2
  48. package/dist/carousel/index.js +1 -1
  49. package/dist/carousel/style/index.d.ts +5 -1
  50. package/dist/carousel/style/index.js +1 -1
  51. package/dist/cascader/Panel.js +3 -3
  52. package/dist/cascader/index.js +14 -6
  53. package/dist/cascader/style/index.d.ts +5 -1
  54. package/dist/cascader/style/panel.d.ts +5 -1
  55. package/dist/checkbox/Checkbox.js +6 -4
  56. package/dist/checkbox/Group.d.ts +19 -1
  57. package/dist/checkbox/Group.js +34 -5
  58. package/dist/checkbox/GroupContext.d.ts +3 -0
  59. package/dist/checkbox/index.d.ts +2 -2
  60. package/dist/checkbox/style/index.d.ts +4 -1
  61. package/dist/collapse/style/index.d.ts +4 -1
  62. package/dist/color-picker/ColorPicker.js +8 -12
  63. package/dist/color-picker/style/index.d.ts +5 -1
  64. package/dist/color-picker/style/input.js +1 -1
  65. package/dist/components.d.ts +1 -1
  66. package/dist/config-provider/context.d.ts +16 -21
  67. package/dist/config-provider/context.js +32 -38
  68. package/dist/config-provider/define.d.ts +3 -1
  69. package/dist/config-provider/hooks/useCSSVarCls.d.ts +3 -0
  70. package/dist/config-provider/hooks/useCSSVarCls.js +4 -3
  71. package/dist/config-provider/index.d.ts +2 -2
  72. package/dist/config-provider/index.js +24 -1
  73. package/dist/date-picker/generatePicker/generateRangePicker.js +29 -4
  74. package/dist/date-picker/generatePicker/generateSinglePicker.js +32 -6
  75. package/dist/date-picker/generatePicker/interface.d.ts +4 -0
  76. package/dist/date-picker/generatePicker/useComponents.d.ts +3 -3
  77. package/dist/date-picker/style/index.d.ts +5 -1
  78. package/dist/date-picker/style/panel.js +1 -1
  79. package/dist/date-picker/style/util.js +1 -1
  80. package/dist/date-picker/util.d.ts +10 -12
  81. package/dist/date-picker/util.js +14 -7
  82. package/dist/descriptions/Cell.js +80 -75
  83. package/dist/descriptions/Row.js +14 -11
  84. package/dist/descriptions/hooks/useItems.d.ts +10 -10
  85. package/dist/descriptions/style/index.d.ts +5 -1
  86. package/dist/descriptions/style/index.js +11 -13
  87. package/dist/divider/style/index.d.ts +5 -1
  88. package/dist/divider/style/index.js +1 -1
  89. package/dist/drawer/DrawerPanel.js +7 -7
  90. package/dist/drawer/index.d.ts +0 -2
  91. package/dist/drawer/index.js +0 -1
  92. package/dist/drawer/style/index.d.ts +5 -1
  93. package/dist/dropdown/dropdown.d.ts +2 -0
  94. package/dist/dropdown/dropdown.js +11 -3
  95. package/dist/dropdown/style/index.d.ts +5 -1
  96. package/dist/dropdown/style/index.js +1 -1
  97. package/dist/empty/style/index.d.ts +5 -1
  98. package/dist/flex/index.js +1 -1
  99. package/dist/flex/style/index.d.ts +5 -1
  100. package/dist/float-button/FloatButtonGroup.js +1 -1
  101. package/dist/float-button/style/index.d.ts +5 -1
  102. package/dist/form/ErrorList.js +1 -1
  103. package/dist/form/Form.js +1 -1
  104. package/dist/form/FormItem/ItemHolder.js +1 -1
  105. package/dist/form/FormItem/index.js +38 -18
  106. package/dist/form/FormItemInput.js +1 -1
  107. package/dist/form/FormItemLabel.js +1 -1
  108. package/dist/form/context.d.ts +1 -1
  109. package/dist/form/hooks/useVariant.d.ts +1 -1
  110. package/dist/form/hooks/useVariant.js +1 -1
  111. package/dist/form/style/index.d.ts +5 -1
  112. package/dist/grid/style/index.d.ts +5 -2
  113. package/dist/image/hooks/useMergedPreviewConfig.d.ts +1 -0
  114. package/dist/image/hooks/useMergedPreviewConfig.js +2 -1
  115. package/dist/image/hooks/usePreviewConfig.d.ts +9 -9
  116. package/dist/image/style/index.d.ts +4 -1
  117. package/dist/index.d.ts +1 -1
  118. package/dist/input/Group.js +1 -1
  119. package/dist/input/Input.d.ts +2 -1
  120. package/dist/input/Input.js +8 -5
  121. package/dist/input/OTP/OTPInput.d.ts +2 -1
  122. package/dist/input/OTP/OTPInput.js +12 -3
  123. package/dist/input/OTP/index.d.ts +3 -1
  124. package/dist/input/OTP/index.js +15 -6
  125. package/dist/input/Password.js +7 -5
  126. package/dist/input/Search.js +4 -2
  127. package/dist/input/TextArea.d.ts +3 -1
  128. package/dist/input/TextArea.js +13 -8
  129. package/dist/input/style/index.d.ts +5 -2
  130. package/dist/input/style/index.js +1 -1
  131. package/dist/input/style/otp.d.ts +5 -1
  132. package/dist/input/style/search.d.ts +5 -1
  133. package/dist/input/style/textarea.d.ts +5 -1
  134. package/dist/input-number/index.d.ts +3 -6
  135. package/dist/input-number/index.js +8 -3
  136. package/dist/input-number/style/index.d.ts +5 -1
  137. package/dist/input-number/style/index.js +1 -5
  138. package/dist/layout/style/index.d.ts +5 -1
  139. package/dist/layout/style/sider.d.ts +5 -1
  140. package/dist/listy/index.d.ts +1 -1
  141. package/dist/listy/index.js +9 -7
  142. package/dist/listy/interface.d.ts +6 -1
  143. package/dist/listy/style/index.d.ts +5 -1
  144. package/dist/listy/style/index.js +4 -2
  145. package/dist/locale/ar_EG.js +9 -0
  146. package/dist/locale/az_AZ.js +9 -0
  147. package/dist/locale/bg_BG.js +9 -0
  148. package/dist/locale/bn_BD.js +9 -0
  149. package/dist/locale/by_BY.js +9 -0
  150. package/dist/locale/ca_ES.js +9 -0
  151. package/dist/locale/cs_CZ.js +9 -0
  152. package/dist/locale/da_DK.js +9 -0
  153. package/dist/locale/de_DE.js +9 -0
  154. package/dist/locale/el_GR.js +9 -0
  155. package/dist/locale/en_GB.js +11 -1
  156. package/dist/locale/en_US.js +11 -1
  157. package/dist/locale/es_ES.js +9 -0
  158. package/dist/locale/et_EE.js +9 -0
  159. package/dist/locale/eu_ES.js +9 -0
  160. package/dist/locale/fa_IR.js +9 -0
  161. package/dist/locale/fi_FI.js +10 -1
  162. package/dist/locale/fr_BE.js +9 -0
  163. package/dist/locale/fr_CA.js +9 -0
  164. package/dist/locale/fr_FR.js +9 -0
  165. package/dist/locale/ga_IE.js +9 -0
  166. package/dist/locale/gl_ES.js +9 -0
  167. package/dist/locale/he_IL.js +9 -0
  168. package/dist/locale/hi_IN.js +9 -0
  169. package/dist/locale/hr_HR.js +9 -0
  170. package/dist/locale/hu_HU.js +9 -0
  171. package/dist/locale/hy_AM.js +9 -0
  172. package/dist/locale/id_ID.js +9 -0
  173. package/dist/locale/index.d.ts +3 -0
  174. package/dist/locale/is_IS.js +9 -0
  175. package/dist/locale/it_IT.js +9 -0
  176. package/dist/locale/ja_JP.js +9 -0
  177. package/dist/locale/ka_GE.js +9 -0
  178. package/dist/locale/kk_KZ.js +9 -0
  179. package/dist/locale/km_KH.js +9 -0
  180. package/dist/locale/kmr_IQ.js +9 -0
  181. package/dist/locale/kn_IN.js +9 -0
  182. package/dist/locale/ko_KR.js +9 -0
  183. package/dist/locale/ku_IQ.js +9 -0
  184. package/dist/locale/lt_LT.js +9 -0
  185. package/dist/locale/lv_LV.js +9 -0
  186. package/dist/locale/mk_MK.js +9 -0
  187. package/dist/locale/ml_IN.js +9 -0
  188. package/dist/locale/mn_MN.js +9 -0
  189. package/dist/locale/mr_IN.js +9 -0
  190. package/dist/locale/ms_MY.js +9 -0
  191. package/dist/locale/my_MM.js +9 -0
  192. package/dist/locale/nb_NO.js +9 -0
  193. package/dist/locale/ne_NP.js +9 -0
  194. package/dist/locale/nl_BE.js +9 -0
  195. package/dist/locale/nl_NL.js +9 -0
  196. package/dist/locale/pl_PL.js +9 -0
  197. package/dist/locale/pt_BR.js +9 -0
  198. package/dist/locale/pt_PT.js +9 -0
  199. package/dist/locale/ro_RO.js +19 -10
  200. package/dist/locale/ru_RU.js +9 -0
  201. package/dist/locale/si_LK.js +9 -0
  202. package/dist/locale/sk_SK.js +9 -0
  203. package/dist/locale/sl_SI.js +9 -0
  204. package/dist/locale/sq_AL.js +9 -0
  205. package/dist/locale/sr_RS.js +9 -0
  206. package/dist/locale/sv_SE.js +9 -0
  207. package/dist/locale/ta_IN.js +10 -1
  208. package/dist/locale/th_TH.js +9 -0
  209. package/dist/locale/tk_TK.js +9 -0
  210. package/dist/locale/tr_TR.js +9 -0
  211. package/dist/locale/uk_UA.js +9 -0
  212. package/dist/locale/ur_PK.js +9 -0
  213. package/dist/locale/useLocale.d.ts +7 -2
  214. package/dist/locale/useLocale.js +12 -1
  215. package/dist/locale/uz_UZ.js +9 -0
  216. package/dist/locale/vi_VN.js +9 -0
  217. package/dist/locale/zh_CN.js +13 -3
  218. package/dist/locale/zh_HK.js +11 -1
  219. package/dist/locale/zh_TW.js +11 -1
  220. package/dist/masonry/Masonry.js +1 -1
  221. package/dist/masonry/style/index.d.ts +4 -1
  222. package/dist/mentions/index.d.ts +2 -3
  223. package/dist/mentions/index.js +10 -5
  224. package/dist/mentions/style/index.d.ts +5 -1
  225. package/dist/mentions/style/index.js +1 -1
  226. package/dist/menu/MenuContext.d.ts +2 -0
  227. package/dist/menu/MenuItem.js +25 -7
  228. package/dist/menu/index.js +5 -0
  229. package/dist/menu/menu.d.ts +3 -0
  230. package/dist/menu/menu.js +7 -0
  231. package/dist/message/style/index.d.ts +5 -1
  232. package/dist/modal/ConfirmDialog.js +14 -7
  233. package/dist/modal/style/index.d.ts +3 -1
  234. package/dist/notification/PurePanel.js +7 -12
  235. package/dist/notification/interface.d.ts +8 -0
  236. package/dist/notification/style/index.d.ts +4 -1
  237. package/dist/notification/style/index.js +1 -1
  238. package/dist/notification/style/placement.js +10 -7
  239. package/dist/notification/useNotification.js +5 -15
  240. package/dist/package.js +1 -1
  241. package/dist/pagination/Pagination.js +2 -2
  242. package/dist/pagination/style/index.d.ts +5 -1
  243. package/dist/pagination/useShowSizeChanger.d.ts +3 -0
  244. package/dist/pagination/useShowSizeChanger.js +1 -1
  245. package/dist/popconfirm/index.js +5 -5
  246. package/dist/popconfirm/style/index.d.ts +5 -1
  247. package/dist/popconfirm/style/index.js +1 -1
  248. package/dist/popover/index.js +5 -4
  249. package/dist/popover/style/index.d.ts +5 -1
  250. package/dist/popover/style/index.js +2 -2
  251. package/dist/progress/Circle.js +0 -8
  252. package/dist/progress/Line.js +1 -9
  253. package/dist/progress/Steps.js +0 -8
  254. package/dist/progress/progress.js +2 -14
  255. package/dist/progress/style/index.d.ts +5 -1
  256. package/dist/qrcode/index.js +4 -25
  257. package/dist/qrcode/interface.d.ts +1 -1
  258. package/dist/qrcode/style/index.d.ts +5 -1
  259. package/dist/radio/group.js +40 -7
  260. package/dist/radio/index.d.ts +2 -2
  261. package/dist/radio/interface.d.ts +19 -1
  262. package/dist/radio/radio.js +5 -3
  263. package/dist/radio/style/index.d.ts +5 -1
  264. package/dist/rate/style/index.d.ts +5 -1
  265. package/dist/result/index.js +3 -3
  266. package/dist/result/noFound.js +120 -140
  267. package/dist/result/serverError.js +132 -147
  268. package/dist/result/style/index.d.ts +5 -1
  269. package/dist/result/unauthorized.js +115 -129
  270. package/dist/segmented/index.js +1 -1
  271. package/dist/segmented/style/index.d.ts +5 -1
  272. package/dist/select/index.js +12 -5
  273. package/dist/select/style/dropdown.js +1 -1
  274. package/dist/select/style/index.d.ts +5 -1
  275. package/dist/select/style/index.js +2 -2
  276. package/dist/select/style/select-input-multiple.js +1 -1
  277. package/dist/select/usePopupRender.js +4 -1
  278. package/dist/skeleton/style/index.d.ts +5 -1
  279. package/dist/slider/index.d.ts +0 -3
  280. package/dist/slider/index.js +2 -2
  281. package/dist/slider/style/index.d.ts +5 -1
  282. package/dist/space/Compact.d.ts +1 -1
  283. package/dist/space/style/addon.d.ts +5 -1
  284. package/dist/space/style/compact.d.ts +5 -1
  285. package/dist/space/style/index.d.ts +5 -1
  286. package/dist/spin/style/index.d.ts +5 -1
  287. package/dist/splitter/SplitBar.js +9 -3
  288. package/dist/splitter/interface.d.ts +5 -1
  289. package/dist/splitter/style/index.d.ts +5 -1
  290. package/dist/statistic/style/index.d.ts +5 -1
  291. package/dist/steps/style/index.d.ts +5 -1
  292. package/dist/steps/style/index.js +1 -1
  293. package/dist/steps/style/inline.js +1 -1
  294. package/dist/style/motion/collapse.js +4 -10
  295. package/dist/switch/style/index.d.ts +5 -1
  296. package/dist/table/ExpandIcon.d.ts +9 -4
  297. package/dist/table/ExpandIcon.js +42 -20
  298. package/dist/table/InternalTable.js +72 -62
  299. package/dist/table/hooks/useLazyKVMap.js +1 -1
  300. package/dist/table/hooks/useSelection.js +73 -15
  301. package/dist/table/interface.d.ts +8 -0
  302. package/dist/table/style/index.d.ts +5 -1
  303. package/dist/table/style/index.js +1 -1
  304. package/dist/table/style/selection.js +1 -1
  305. package/dist/table/style/sorter.js +2 -2
  306. package/dist/table/util.d.ts +1 -1
  307. package/dist/tabs/index.js +9 -2
  308. package/dist/tabs/style/index.d.ts +5 -1
  309. package/dist/tabs/style/index.js +1 -1
  310. package/dist/tag/CheckableTagGroup.d.ts +2 -2
  311. package/dist/tag/hooks/useColor.d.ts +1 -1
  312. package/dist/tag/style/index.d.ts +5 -1
  313. package/dist/theme/context.js +2 -1
  314. package/dist/theme/useToken.d.ts +6 -2
  315. package/dist/theme/useToken.js +46 -14
  316. package/dist/theme/util/genStyleUtils.d.ts +13 -3
  317. package/dist/theme/util/genStyleUtils.js +42 -28
  318. package/dist/time-picker/index.js +34 -0
  319. package/dist/timeline/Timeline.js +1 -1
  320. package/dist/timeline/style/index.d.ts +5 -1
  321. package/dist/timeline/useItems.d.ts +2 -2
  322. package/dist/timeline/useItems.js +1 -1
  323. package/dist/tooltip/index.js +1 -1
  324. package/dist/tooltip/style/index.d.ts +2 -2
  325. package/dist/tooltip/style/index.js +1 -1
  326. package/dist/tour/panelRender.js +3 -2
  327. package/dist/tour/style/index.d.ts +5 -1
  328. package/dist/transfer/Section.js +2 -1
  329. package/dist/transfer/Transfer.js +3 -1
  330. package/dist/transfer/style/index.d.ts +5 -1
  331. package/dist/tree/DirectoryTree.js +1 -1
  332. package/dist/tree/style/index.d.ts +4 -1
  333. package/dist/tree/style/index.js +1 -1
  334. package/dist/tree-select/index.js +15 -9
  335. package/dist/tree-select/style/index.d.ts +2 -2
  336. package/dist/typography/Base/index.js +23 -2
  337. package/dist/typography/Link.js +5 -0
  338. package/dist/typography/Paragraph.js +5 -0
  339. package/dist/typography/Text.js +5 -0
  340. package/dist/typography/Title.js +5 -0
  341. package/dist/typography/hooks/useMergedConfig.js +1 -1
  342. package/dist/typography/interface.d.ts +8 -1
  343. package/dist/typography/style/index.d.ts +5 -1
  344. package/dist/typography/style/index.js +2 -1
  345. package/dist/typography/style/mixins.d.ts +2 -1
  346. package/dist/typography/style/mixins.js +26 -3
  347. package/dist/upload/Upload.d.ts +1 -0
  348. package/dist/upload/Upload.js +10 -3
  349. package/dist/upload/UploadList/ListItem.js +8 -3
  350. package/dist/upload/interface.d.ts +1 -0
  351. package/dist/upload/style/index.d.ts +5 -1
  352. package/dist/version/token-meta.json +1 -1
  353. package/dist/version/token.json +1 -1
  354. package/dist/watermark/index.js +1 -1
  355. package/global.d.ts +5 -0
  356. package/package.json +17 -17
  357. package/web-tags.json +5053 -3004
  358. package/web-types.json +13207 -7299
  359. package/dist/_util/getAllowClear.d.ts +0 -6
  360. package/dist/_util/getAllowClear.js +0 -11
@@ -3,7 +3,7 @@ import { useMultipleSelect } from "../../_util/hooks/useMultipleSelect.js";
3
3
  import Dropdown from "../../dropdown/index.js";
4
4
  import radio_default from "../../radio/index.js";
5
5
  import checkbox_default from "../../checkbox/index.js";
6
- import { computed, createVNode, mergeProps, shallowRef, unref, watch } from "vue";
6
+ import { computed, createVNode, defineComponent, mergeProps, shallowRef, unref, watch } from "vue";
7
7
  import { clsx } from "@v-c/util";
8
8
  import { DownOutlined } from "@antdv-next/icons";
9
9
  import { INTERNAL_COL_DEFINE } from "@v-c/table";
@@ -14,6 +14,48 @@ const SELECTION_ALL = "SELECT_ALL";
14
14
  const SELECTION_INVERT = "SELECT_INVERT";
15
15
  const SELECTION_NONE = "SELECT_NONE";
16
16
  const EMPTY_LIST = [];
17
+ const SelectionMenu = /* @__PURE__ */ defineComponent((props, { emit }) => {
18
+ const open = shallowRef(false);
19
+ const onKeydown = (event) => {
20
+ if (event.key === "Enter" || event.key === " ") {
21
+ event.preventDefault();
22
+ event.currentTarget?.click();
23
+ }
24
+ };
25
+ return () => createVNode(Dropdown, {
26
+ "menu": props.menu,
27
+ "getPopupContainer": props.getPopupContainer,
28
+ "trigger": ["click", "hover"],
29
+ "onOpenChange": (nextOpen) => {
30
+ open.value = nextOpen;
31
+ },
32
+ "onMenuClick": (info) => emit("menuClick", info)
33
+ }, { default: () => [createVNode(DownOutlined, mergeProps({
34
+ "role": "button",
35
+ "aria-label": props.label,
36
+ "aria-haspopup": "menu",
37
+ "aria-expanded": open.value,
38
+ "onKeydown": onKeydown
39
+ }, { "tabIndex": 0 }), null)] });
40
+ }, {
41
+ props: {
42
+ menu: {
43
+ type: Object,
44
+ required: true
45
+ },
46
+ getPopupContainer: {
47
+ type: Function,
48
+ required: false
49
+ },
50
+ label: {
51
+ type: String,
52
+ required: true
53
+ }
54
+ },
55
+ emits: ["menuClick"],
56
+ name: "TableSelectionMenu",
57
+ inheritAttrs: false
58
+ });
17
59
  function flattenData(childrenColumnName, data, list = []) {
18
60
  (data || []).forEach((record) => {
19
61
  list.push(record);
@@ -60,6 +102,16 @@ function useSelection(config, rowSelection) {
60
102
  preserveRecordsRef.value = newCache;
61
103
  }
62
104
  };
105
+ let lastClickEvent;
106
+ const takeClickEvent = (event) => {
107
+ const clickEvent = lastClickEvent;
108
+ lastClickEvent = void 0;
109
+ return clickEvent ?? event?.nativeEvent;
110
+ };
111
+ const getSelectedRecord = (key) => {
112
+ const record = getRecordByKey(key);
113
+ return !record && preserveSelectedRowKeys.value ? preserveRecordsRef.value.get(key) : record;
114
+ };
63
115
  watch([
64
116
  mergedSelectedKeys,
65
117
  data,
@@ -134,7 +186,7 @@ function useSelection(config, rowSelection) {
134
186
  };
135
187
  const triggerSingleSelection = (key, selected, keys, event) => {
136
188
  if (selectionConfig.value.onSelect) {
137
- const rows = keys.map((k) => getRecordByKey(k));
189
+ const rows = keys.map((k) => getSelectedRecord(k));
138
190
  selectionConfig.value.onSelect(getRecordByKey(key), selected, rows, event);
139
191
  }
140
192
  setSelectedKeys(keys, "single");
@@ -150,7 +202,7 @@ function useSelection(config, rowSelection) {
150
202
  key: "all",
151
203
  text: tableLocale.value.selectionAll,
152
204
  onSelect() {
153
- setSelectedKeys(data.value.reduce((keys, record, index) => {
205
+ setSelectedKeys(flattenData(childrenColumnName.value, data.value).reduce((keys, record, index) => {
154
206
  const key = getRowKey.value(record, index);
155
207
  if (!isCheckboxDisabled(record) || derivedSelectedKeySet.value.has(key)) keys.push(key);
156
208
  return keys;
@@ -162,7 +214,7 @@ function useSelection(config, rowSelection) {
162
214
  text: tableLocale.value.selectInvert,
163
215
  onSelect() {
164
216
  const keySet = new Set(derivedSelectedKeySet.value);
165
- pageData.value.forEach((record, index) => {
217
+ flattedData.value.forEach((record, index) => {
166
218
  const key = getRowKey.value(record, index);
167
219
  if (!checkboxPropsMap.value.get(key)?.disabled) if (keySet.has(key)) keySet.delete(key);
168
220
  else keySet.add(key);
@@ -181,7 +233,8 @@ function useSelection(config, rowSelection) {
181
233
  onSelect() {
182
234
  selectionConfig.value.onSelectNone?.();
183
235
  setSelectedKeys(Array.from(derivedSelectedKeySet.value).filter((key) => {
184
- return checkboxPropsMap.value.get(key)?.disabled;
236
+ const record = getSelectedRecord(key);
237
+ return record !== void 0 && isCheckboxDisabled(record);
185
238
  }), "none");
186
239
  }
187
240
  };
@@ -217,10 +270,11 @@ function useSelection(config, rowSelection) {
217
270
  }
218
271
  });
219
272
  const keys = Array.from(keySet);
220
- selectionConfig.value.onSelectAll?.(!checkedCurrentAll, keys.map((k) => getRecordByKey(k)), changeKeys.map((k) => getRecordByKey(k)));
273
+ selectionConfig.value.onSelectAll?.(!checkedCurrentAll, keys.map((k) => getSelectedRecord(k)), changeKeys.map((k) => getRecordByKey(k)));
221
274
  setSelectedKeys(keys, "all");
222
275
  updatePrevSelectedIndex(null);
223
276
  };
277
+ const { selectAll, selectRow = "Select row", selectedRow = "Row selected", selectionMenu: selectionMenuLabel = "Selection menu" } = tableLocale.value;
224
278
  let title;
225
279
  let columnTitleCheckbox;
226
280
  if (selectionType.value !== "radio") {
@@ -234,16 +288,17 @@ function useSelection(config, rowSelection) {
234
288
  mergedSelections.value.forEach((selection, index) => {
235
289
  selectionMap.set(selection.key ?? index, selection);
236
290
  });
237
- customizeSelections = createVNode("div", { "class": `${prefixCls.value}-selection-extra` }, [createVNode(Dropdown, {
291
+ customizeSelections = createVNode("div", { "class": `${prefixCls.value}-selection-extra` }, [createVNode(SelectionMenu, {
238
292
  "menu": {
239
293
  getPopupContainer: getPopupContainer.value,
240
294
  items: menuItems
241
295
  },
242
296
  "getPopupContainer": getPopupContainer.value,
297
+ "label": selectionMenuLabel,
243
298
  "onMenuClick": (info) => {
244
299
  selectionMap.get(info?.key)?.onSelect?.(recordKeys);
245
300
  }
246
- }, { default: () => [createVNode("span", null, [createVNode(DownOutlined, null, null)])] })]);
301
+ }, null)]);
247
302
  }
248
303
  const allDisabledData = flattedData.value.map((record, index) => {
249
304
  const key = getRowKey.value(record, index);
@@ -258,7 +313,7 @@ function useSelection(config, rowSelection) {
258
313
  const allDisabledSomeChecked = allDisabled && allDisabledData.some(({ checked }) => checked);
259
314
  const customCheckboxProps = selectionConfig.value.getTitleCheckboxProps?.() || {};
260
315
  const { onChange, disabled } = customCheckboxProps;
261
- columnTitleCheckbox = createVNode(checkbox_default, mergeProps({ "aria-label": customizeSelections ? "Custom selection" : "Select all" }, customCheckboxProps, {
316
+ columnTitleCheckbox = createVNode(checkbox_default, mergeProps({ "aria-label": typeof selectAll === "string" && selectAll ? selectAll : "Select all" }, customCheckboxProps, {
262
317
  "checked": !allDisabled ? !!flattedData.value.length && checkedCurrentAll : allDisabledAndChecked,
263
318
  "indeterminate": !allDisabled ? !checkedCurrentAll && checkedCurrentSome : !allDisabledAndChecked && allDisabledSomeChecked,
264
319
  "onChange": (e) => {
@@ -276,14 +331,16 @@ function useSelection(config, rowSelection) {
276
331
  const checked = keySet.has(key);
277
332
  const checkboxProps = checkboxPropsMap.value.get(key);
278
333
  return {
279
- node: createVNode(radio_default, mergeProps({ "aria-label": `Select row ${index + 1}` }, checkboxProps, {
334
+ node: createVNode(radio_default, mergeProps({ "aria-label": selectRow }, checkboxProps, {
280
335
  "checked": checked,
281
336
  "onClick": (e) => {
337
+ lastClickEvent = e;
282
338
  e.stopPropagation();
283
339
  checkboxProps?.onClick?.(e);
284
340
  },
285
341
  "onChange": (event) => {
286
- if (!keySet.has(key)) triggerSingleSelection(key, true, [key], event.nativeEvent);
342
+ const nativeEvent = takeClickEvent(event);
343
+ if (!keySet.has(key)) triggerSingleSelection(key, true, [key], nativeEvent);
287
344
  checkboxProps?.onChange?.(event);
288
345
  }
289
346
  }), null),
@@ -301,23 +358,24 @@ function useSelection(config, rowSelection) {
301
358
  warning(typeof checkboxProps?.indeterminate !== "boolean", "usage", "set `indeterminate` using `rowSelection.getCheckboxProps` is not allowed with tree structured dataSource.");
302
359
  } else mergedIndeterminate = checkboxProps?.indeterminate ?? indeterminate;
303
360
  return {
304
- node: createVNode(checkbox_default, mergeProps({ "aria-label": checked ? `Row ${index + 1} selected` : `Select row ${index + 1}` }, checkboxProps, {
361
+ node: createVNode(checkbox_default, mergeProps({ "aria-label": checked ? selectedRow : selectRow }, checkboxProps, {
305
362
  "indeterminate": mergedIndeterminate,
306
363
  "checked": checked,
307
364
  "skipGroup": true,
308
365
  "onClick": (e) => {
366
+ lastClickEvent = e;
309
367
  e.stopPropagation();
310
368
  checkboxProps?.onClick?.(e);
311
369
  },
312
370
  "onChange": (event) => {
313
- const nativeEvent = event.nativeEvent;
314
- const { shiftKey } = nativeEvent;
371
+ const nativeEvent = takeClickEvent(event);
372
+ const shiftKey = !!nativeEvent?.shiftKey;
315
373
  const currentSelectedIndex = recordKeys.indexOf(key);
316
374
  const isMultiple = derivedSelectedKeySet.value.size > 0 && recordKeys.some((key) => derivedSelectedKeySet.value.has(key));
317
375
  if (shiftKey && checkStrictly.value && isMultiple) {
318
376
  const changedKeys = multipleSelect(currentSelectedIndex, recordKeys, keySet);
319
377
  const keys = Array.from(keySet);
320
- selectionConfig.value.onSelectMultiple?.(!checked, keys.map((recordKey) => getRecordByKey(recordKey)), changedKeys.map((recordKey) => getRecordByKey(recordKey)));
378
+ selectionConfig.value.onSelectMultiple?.(!checked, keys.map((recordKey) => getSelectedRecord(recordKey)), changedKeys.map((recordKey) => getRecordByKey(recordKey)));
321
379
  setSelectedKeys(keys, "multiple");
322
380
  } else {
323
381
  const originCheckedKeys = derivedSelectedKeys.value[0];
@@ -31,9 +31,17 @@ interface TableLocale {
31
31
  selectNone?: VueNode;
32
32
  selectInvert?: VueNode;
33
33
  selectionAll?: VueNode;
34
+ /** Accessible label for a selectable row. */
35
+ selectRow?: string;
36
+ /** Accessible label for a selected row. */
37
+ selectedRow?: string;
38
+ /** Accessible label for the custom selection menu trigger. */
39
+ selectionMenu?: string;
34
40
  sortTitle?: string;
35
41
  expand?: string;
36
42
  collapse?: string;
43
+ expandAll?: string;
44
+ collapseAll?: string;
37
45
  triggerDesc?: string;
38
46
  triggerAsc?: string;
39
47
  cancelSort?: string;
@@ -1,4 +1,8 @@
1
+ import { SeedToken } from "../../theme/interface/seeds.js";
2
+ import { AliasToken } from "../../theme/interface/alias.js";
3
+ import { ComponentTokenMap } from "../../theme/interface/components.js";
1
4
  import { FullToken, GetDefaultToken } from "../../theme/interface/cssinjs-utils.js";
5
+ import "../../theme/interface/index.js";
2
6
  import "../../theme/internal.js";
3
7
  //#region src/table/style/index.d.ts
4
8
  interface ComponentToken {
@@ -211,6 +215,6 @@ interface TableToken extends FullToken<'Table'> {
211
215
  tableScrollBg: string;
212
216
  }
213
217
  declare const prepareComponentToken: GetDefaultToken<'Table'>;
214
- declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
218
+ declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>, tokenResult?: import("@antdv-next/cssinjs").UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken> | undefined) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
215
219
  //#endregion
216
220
  export { ComponentToken, TableToken, _default as default, prepareComponentToken };
@@ -25,7 +25,7 @@ const genTableStyle = (token) => {
25
25
  return { [`${componentCls}-wrapper`]: {
26
26
  clear: "both",
27
27
  maxWidth: "100%",
28
- ["--rc-virtual-list-scrollbar-bg"]: token.tableScrollBg,
28
+ ["--vc-virtual-list-scrollbar-bg"]: token.tableScrollBg,
29
29
  ...clearFix(),
30
30
  [componentCls]: {
31
31
  ...resetComponent(token),
@@ -21,7 +21,7 @@ const genSelectionStyle = (token) => {
21
21
  textAlign: "center",
22
22
  [`${antCls}-radio-wrapper`]: { marginInlineEnd: 0 }
23
23
  },
24
- [`table tr th${componentCls}-selection-column${componentCls}-cell-fix-left`]: { zIndex: calc(token.zIndexTableFixed).add(1).equal({ unit: false }) },
24
+ [`table tr th${componentCls}-selection-column${componentCls}-cell-fix-start`]: { zIndex: `calc(var(--z-offset, 0) + ${token.zIndexTableFixed})` },
25
25
  [`table tr th${componentCls}-selection-column::after`]: { backgroundColor: "transparent !important" },
26
26
  [`${componentCls}-selection`]: {
27
27
  position: "relative",
@@ -12,8 +12,8 @@ const genSorterStyle = (token) => {
12
12
  },
13
13
  "&:focus-visible": { color: token.colorPrimary },
14
14
  [`
15
- &${componentCls}-cell-fix-left:hover,
16
- &${componentCls}-cell-fix-right:hover
15
+ &${componentCls}-cell-fix-start:hover,
16
+ &${componentCls}-cell-fix-end:hover
17
17
  `]: { background: token.tableFixedHeaderSortActiveBg }
18
18
  },
19
19
  [`${componentCls}-thead th${componentCls}-column-sort`]: {
@@ -11,7 +11,7 @@ declare function renderColumnTitle<RecordType extends AnyObject = AnyObject>(tit
11
11
  * Should filter [object Object]
12
12
  */
13
13
  declare function safeColumnTitle<RecordType extends AnyObject = AnyObject>(title: ColumnTitle<RecordType>, props: ColumnTitleProps<RecordType>): any;
14
- declare function normalizePlacement(pos: TablePaginationPlacement | TablePaginationPosition): "start" | "end" | "center";
14
+ declare function normalizePlacement(pos: TablePaginationPlacement | TablePaginationPosition): "center" | "end" | "start";
15
15
  declare function getPaginationSize(paginationSize: SizeType, mergedSize: SizeType): SizeType;
16
16
  //#endregion
17
17
  export { getColumnKey, getColumnPos, getPaginationSize, normalizePlacement, renderColumnTitle, safeColumnTitle };
@@ -56,6 +56,9 @@ const InternalTabs = /* @__PURE__ */ defineComponent((props, { attrs, slots, emi
56
56
  warning(!(attrs.onPrevClick || attrs.onNextClick), "breaking", "`onPrevClick` and `onNextClick` has been removed. Please use `onTabScroll` instead.");
57
57
  warning.deprecated(!indicatorSize.value, "indicatorSize", "indicator");
58
58
  warning.deprecated(!(props.destroyInactiveTabPane || props.items?.some((item) => "destroyInactiveTabPane" in item)), "destroyInactiveTabPane", "destroyOnHidden");
59
+ if (more.value) [["visible", "open"], ["onVisibleChange", "onOpenChange"]].forEach(([deprecatedName, newName]) => {
60
+ warning.deprecated(!(deprecatedName in more.value), `more.${deprecatedName}`, `more.${newName}`);
61
+ });
59
62
  }
60
63
  const rootCls = useCSSVarCls(prefixCls);
61
64
  const [hashId, cssVarCls] = style_default(prefixCls, rootCls);
@@ -87,14 +90,18 @@ const InternalTabs = /* @__PURE__ */ defineComponent((props, { attrs, slots, emi
87
90
  };
88
91
  const mergedMoreFn = () => {
89
92
  const rootPrefixCls = getPrefixCls();
93
+ const { visible: moreVisible, ...restMoreProps } = more.value ?? {};
94
+ const legacyMoreProps = more.value && !("open" in more.value) && "visible" in more.value ? { open: moreVisible } : {};
90
95
  if (!rootPrefixCls) return {
91
96
  icon: moreIcon,
92
- ...more.value
97
+ ...restMoreProps,
98
+ ...legacyMoreProps
93
99
  };
94
100
  return {
95
101
  icon: moreIcon,
96
102
  transitionName: `${rootPrefixCls}-slide-up`,
97
- ...more.value
103
+ ...restMoreProps,
104
+ ...legacyMoreProps
98
105
  };
99
106
  };
100
107
  const mergedMore = mergedMoreFn();
@@ -1,4 +1,8 @@
1
+ import { SeedToken } from "../../theme/interface/seeds.js";
2
+ import { AliasToken } from "../../theme/interface/alias.js";
3
+ import { ComponentTokenMap } from "../../theme/interface/components.js";
1
4
  import { FullToken, GetDefaultToken } from "../../theme/interface/cssinjs-utils.js";
5
+ import "../../theme/interface/index.js";
2
6
  import "../../theme/internal.js";
3
7
  //#region src/tabs/style/index.d.ts
4
8
  interface ComponentToken {
@@ -143,6 +147,6 @@ interface TabsToken extends FullToken<'Tabs'> {
143
147
  tabsHorizontalItemMarginRTL: string;
144
148
  }
145
149
  declare const prepareComponentToken: GetDefaultToken<'Tabs'>;
146
- declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
150
+ declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>, tokenResult?: import("@antdv-next/cssinjs").UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken> | undefined) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
147
151
  //#endregion
148
152
  export { ComponentToken, TabsToken, _default as default, prepareComponentToken };
@@ -114,7 +114,7 @@ const genDropdownStyle = (token) => {
114
114
  margin: 0,
115
115
  padding: `${unit(token.paddingXXS)} ${unit(token.paddingSM)}`,
116
116
  color: token.colorText,
117
- fontWeight: "normal",
117
+ fontWeight: 400,
118
118
  fontSize: token.fontSize,
119
119
  lineHeight: token.lineHeight,
120
120
  cursor: "pointer",
@@ -43,7 +43,7 @@ interface CheckableTagGroupEmitsProps<CheckableTagValue = CheckableTagDefaultVal
43
43
  onChange?: CheckableTagGroupEmits<CheckableTagValue>['change'];
44
44
  'onUpdate:value'?: CheckableTagGroupEmits<CheckableTagValue>['update:value'];
45
45
  }
46
- interface InternalCheckableTagGroupProps extends CheckableTagGroupProps, CheckableTagGroupEmitsProps {}
47
- declare const CheckableTagGroup: import("vue").DefineSetupFnComponent<InternalCheckableTagGroupProps, CheckableTagGroupEmits<CheckableTagDefaultValue>, {}, InternalCheckableTagGroupProps, import("vue").PublicProps>;
46
+ type InternalCheckableTagGroupProps = CheckableTagGroupProps & /* @vue-ignore */ CheckableTagGroupEmitsProps;
47
+ declare const CheckableTagGroup: import("vue").DefineSetupFnComponent<InternalCheckableTagGroupProps, CheckableTagGroupEmits<CheckableTagDefaultValue>, {}, InternalCheckableTagGroupProps & {}, import("vue").PublicProps>;
48
48
  //#endregion
49
49
  export { CheckableTagGroupEmits, CheckableTagGroupEmitsProps, CheckableTagGroupProps, CheckableTagGroupRef, CheckableTagOption, SemanticName, CheckableTagGroup as default };
@@ -9,6 +9,6 @@ declare function useColor(props: {
9
9
  color: Ref<TagProps['color']>;
10
10
  variant: Ref<TagProps['variant']>;
11
11
  bordered: Ref<TagProps['bordered']>;
12
- }, contextVariant?: Ref<TagProps['variant']>): readonly [import("vue").ComputedRef<"solid" | "filled" | "outlined">, import("vue").ComputedRef<string | undefined>, import("vue").ComputedRef<boolean>, import("vue").ComputedRef<boolean>, import("vue").ComputedRef<CSSProperties>];
12
+ }, contextVariant?: Ref<TagProps['variant']>): readonly [import("vue").ComputedRef<"outlined" | "solid" | "filled">, import("vue").ComputedRef<string | undefined>, import("vue").ComputedRef<boolean>, import("vue").ComputedRef<boolean>, import("vue").ComputedRef<CSSProperties>];
13
13
  //#endregion
14
14
  export { useColor as default };
@@ -1,4 +1,8 @@
1
+ import { SeedToken } from "../../theme/interface/seeds.js";
2
+ import { AliasToken } from "../../theme/interface/alias.js";
3
+ import { ComponentTokenMap } from "../../theme/interface/components.js";
1
4
  import { FullToken, GenStyleFn, GetDefaultToken } from "../../theme/interface/cssinjs-utils.js";
5
+ import "../../theme/interface/index.js";
2
6
  import "../../theme/internal.js";
3
7
  import { CSSProperties } from "vue";
4
8
  //#region src/tag/style/index.d.ts
@@ -28,6 +32,6 @@ interface TagToken extends FullToken<'Tag'> {
28
32
  }
29
33
  declare function prepareToken(token: Parameters<GenStyleFn<'Tag'>>[0]): TagToken;
30
34
  declare const prepareComponentToken: GetDefaultToken<'Tag'>;
31
- declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
35
+ declare const _default: (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>, tokenResult?: import("@antdv-next/cssinjs").UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken> | undefined) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>];
32
36
  //#endregion
33
37
  export { ComponentToken, TagToken, _default as default, prepareComponentToken, prepareToken };
@@ -17,8 +17,9 @@ const DesignTokenProvider = defineComponent((props, { slots }) => {
17
17
  return slots?.default?.();
18
18
  };
19
19
  }, { props: ["value"] });
20
+ const defaultDesignTokenRef = computed(() => defaultConfig);
20
21
  function useDesignToken() {
21
- return inject(DesignTokenContextKey, computed(() => defaultConfig));
22
+ return inject(DesignTokenContextKey, defaultDesignTokenRef);
22
23
  }
23
24
  //#endregion
24
25
  export { DesignTokenContextKey, DesignTokenProvider, defaultConfig, defaultTheme, useDesignToken, useDesignTokenProvide };
@@ -11,6 +11,10 @@ declare const ignore: { [key in keyof AliasToken]?: boolean; };
11
11
  declare function getComputedToken(originToken: SeedToken, overrideToken: DesignTokenProviderProps['components'] & {
12
12
  override?: Partial<AliasToken>;
13
13
  }, theme: Theme<any, any>): any;
14
- declare function useToken(): [theme: Ref<Theme<SeedToken, AliasToken>>, token: Ref<GlobalToken>, hashId: Ref<string>, realToken: Ref<GlobalToken>, cssVar: Ref<DesignTokenProviderProps['cssVar']>, zeroRuntime: Ref<boolean>];
14
+ type UseTokenResult = [theme: Ref<Theme<SeedToken, AliasToken>>, token: Ref<GlobalToken>, hashId: Ref<string>, realToken: Ref<GlobalToken>, cssVar: Ref<{
15
+ prefix: string;
16
+ key: string;
17
+ }>, zeroRuntime: Ref<boolean>];
18
+ declare function useToken(): UseTokenResult;
15
19
  //#endregion
16
- export { useToken as default, getComputedToken, ignore, unitless };
20
+ export { UseTokenResult, useToken as default, getComputedToken, ignore, unitless };
@@ -4,8 +4,8 @@ import { useDesignToken } from "./context.js";
4
4
  import { useConfig } from "../config-provider/context.js";
5
5
  import version_default from "../version/index.js";
6
6
  import formatToken from "./util/alias.js";
7
- import { computed } from "vue";
8
- import { useCacheToken } from "@antdv-next/cssinjs";
7
+ import { computed, effectScope } from "vue";
8
+ import { createCacheToken, useGlobalCacheEntry, useStyleContext } from "@antdv-next/cssinjs";
9
9
  //#region src/theme/useToken.ts
10
10
  const unitless = {
11
11
  lineHeight: true,
@@ -67,9 +67,13 @@ function getComputedToken(originToken, overrideToken, theme) {
67
67
  });
68
68
  return mergedDerivativeToken;
69
69
  }
70
- function useToken() {
71
- const designContext = useDesignToken();
72
- const config = useConfig();
70
+ /**
71
+ * The derived token only depends on the three injected contexts, so compute it
72
+ * once per (design token, config, style context) triple and let every component
73
+ * instance under those providers reuse the same computeds. Each instance only
74
+ * holds a reference on the cache entry (`useGlobalCacheEntry`).
75
+ */
76
+ function createSharedToken(designContext, config, styleContext) {
73
77
  const salt = computed(() => `${version_default}-${designContext.value.hashed || ""}`);
74
78
  const mergedTheme = computed(() => designContext.value?.theme || defaultTheme);
75
79
  const cssVar = computed(() => {
@@ -79,7 +83,7 @@ function useToken() {
79
83
  key: cssVar?.key ?? "css-var-root"
80
84
  };
81
85
  });
82
- const cachedToken = useCacheToken(mergedTheme, computed(() => [seedToken, designContext.value.token]), computed(() => {
86
+ const entry = createCacheToken(styleContext, mergedTheme, computed(() => [seedToken, designContext.value.token]), computed(() => {
83
87
  return {
84
88
  salt: salt.value,
85
89
  override: designContext.value.override,
@@ -93,14 +97,42 @@ function useToken() {
93
97
  nonce: designContext.value.csp?.nonce ?? config.value?.csp?.nonce
94
98
  };
95
99
  }));
96
- return [
97
- mergedTheme,
98
- computed(() => cachedToken.value[2]),
99
- computed(() => designContext.value.hashed ? cachedToken.value[1] : ""),
100
- computed(() => cachedToken.value[0]),
101
- cssVar,
102
- computed(() => !!designContext.value?.zeroRuntime)
103
- ];
100
+ const cachedToken = entry.value;
101
+ return {
102
+ entry,
103
+ result: [
104
+ mergedTheme,
105
+ computed(() => cachedToken.value[2]),
106
+ computed(() => designContext.value.hashed ? cachedToken.value[1] : ""),
107
+ computed(() => cachedToken.value[0]),
108
+ cssVar,
109
+ computed(() => !!designContext.value?.zeroRuntime)
110
+ ]
111
+ };
112
+ }
113
+ const sharedTokenMap = /* @__PURE__ */ new WeakMap();
114
+ function getSharedToken(designContext, config, styleContext) {
115
+ let byConfig = sharedTokenMap.get(designContext);
116
+ if (!byConfig) {
117
+ byConfig = /* @__PURE__ */ new WeakMap();
118
+ sharedTokenMap.set(designContext, byConfig);
119
+ }
120
+ let byStyle = byConfig.get(config);
121
+ if (!byStyle) {
122
+ byStyle = /* @__PURE__ */ new WeakMap();
123
+ byConfig.set(config, byStyle);
124
+ }
125
+ let shared = byStyle.get(styleContext);
126
+ if (!shared) {
127
+ shared = effectScope(true).run(() => createSharedToken(designContext, config, styleContext));
128
+ byStyle.set(styleContext, shared);
129
+ }
130
+ return shared;
131
+ }
132
+ function useToken() {
133
+ const shared = getSharedToken(useDesignToken(), useConfig(), useStyleContext());
134
+ useGlobalCacheEntry(shared.entry);
135
+ return shared.result;
104
136
  }
105
137
  //#endregion
106
138
  export { useToken as default, getComputedToken, ignore, unitless };
@@ -1,7 +1,17 @@
1
+ import { SeedToken } from "../interface/seeds.js";
1
2
  import { AliasToken } from "../interface/alias.js";
2
3
  import { ComponentTokenMap } from "../interface/components.js";
3
4
  import "../interface/index.js";
5
+ import { ComputedRef } from "vue";
6
+ import { UseTokenReturn } from "@antdv-next/cssinjs";
4
7
  //#region src/theme/util/genStyleUtils.d.ts
8
+ type StyleTokenResult = UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken>;
9
+ /**
10
+ * `useToken()` in the shape the cssinjs style hooks consume. Components that
11
+ * need the token themselves (e.g. Wave) call this once and pass the result to
12
+ * their style hook so the token is resolved a single time per instance.
13
+ */
14
+ declare function useStyleToken(): StyleTokenResult;
5
15
  declare const genComponentStyleHook: <C extends keyof ComponentTokenMap>(componentName: C | [C, string], styleFn: import("@antdv-next/cssinjs").GenStyleFn<ComponentTokenMap, AliasToken, C>, getDefaultToken?: import("@antdv-next/cssinjs").GetDefaultToken<ComponentTokenMap, AliasToken, C> | undefined, options?: {
6
16
  resetStyle?: boolean;
7
17
  resetFont?: boolean;
@@ -10,7 +20,7 @@ declare const genComponentStyleHook: <C extends keyof ComponentTokenMap>(compone
10
20
  order?: number;
11
21
  injectStyle?: boolean;
12
22
  unitless?: Partial<Record<keyof Exclude<import("@antdv-next/cssinjs").OverrideTokenMap<ComponentTokenMap, AliasToken>[C], undefined>, boolean>> | undefined;
13
- } | undefined) => (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>) => import("vue").Ref<string, string>, genStyleHooks: <C extends keyof ComponentTokenMap>(component: C | [C, string], styleFn: import("@antdv-next/cssinjs").GenStyleFn<ComponentTokenMap, AliasToken, C>, getDefaultToken?: import("@antdv-next/cssinjs").GetDefaultToken<ComponentTokenMap, AliasToken, C> | undefined, options?: {
23
+ } | undefined) => (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>, tokenResult?: UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken> | undefined) => import("vue").Ref<string, string>, genStyleHooks: <C extends keyof ComponentTokenMap>(component: C | [C, string], styleFn: import("@antdv-next/cssinjs").GenStyleFn<ComponentTokenMap, AliasToken, C>, getDefaultToken?: import("@antdv-next/cssinjs").GetDefaultToken<ComponentTokenMap, AliasToken, C> | undefined, options?: {
14
24
  resetStyle?: boolean;
15
25
  resetFont?: boolean;
16
26
  deprecatedTokens?: [keyof Exclude<import("@antdv-next/cssinjs").OverrideTokenMap<ComponentTokenMap, AliasToken>[C], undefined>, keyof Exclude<import("@antdv-next/cssinjs").OverrideTokenMap<ComponentTokenMap, AliasToken>[C], undefined>][] | undefined;
@@ -22,7 +32,7 @@ declare const genComponentStyleHook: <C extends keyof ComponentTokenMap>(compone
22
32
  prefixCls: string;
23
33
  rootCls: string;
24
34
  }) => string[]);
25
- } | undefined) => (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>) => readonly [import("vue").Ref<string, string>, import("vue").ComputedRef<string | undefined>], genSubStyleComponent: <C extends keyof ComponentTokenMap>(componentName: C | [C, string], styleFn: import("@antdv-next/cssinjs").GenStyleFn<ComponentTokenMap, AliasToken, C>, getDefaultToken?: import("@antdv-next/cssinjs").GetDefaultToken<ComponentTokenMap, AliasToken, C> | undefined, options?: {
35
+ } | undefined) => (prefixCls: import("vue").Ref<string>, rootCls?: import("vue").Ref<string | undefined>, tokenResult?: UseTokenReturn<ComponentTokenMap, AliasToken, SeedToken> | undefined) => readonly [import("vue").Ref<string, string>, ComputedRef<string | undefined>], genSubStyleComponent: <C extends keyof ComponentTokenMap>(componentName: C | [C, string], styleFn: import("@antdv-next/cssinjs").GenStyleFn<ComponentTokenMap, AliasToken, C>, getDefaultToken?: import("@antdv-next/cssinjs").GetDefaultToken<ComponentTokenMap, AliasToken, C> | undefined, options?: {
26
36
  resetStyle?: boolean;
27
37
  resetFont?: boolean;
28
38
  deprecatedTokens?: [keyof Exclude<import("@antdv-next/cssinjs").OverrideTokenMap<ComponentTokenMap, AliasToken>[C], undefined>, keyof Exclude<import("@antdv-next/cssinjs").OverrideTokenMap<ComponentTokenMap, AliasToken>[C], undefined>][] | undefined;
@@ -41,4 +51,4 @@ type CssVarName = (name: string) => `--${string}`;
41
51
  type CssVarRef = (name: string, fallback?: string | number) => `var(--${string})`;
42
52
  declare function genCssVar(antCls: string, component: string): readonly [varName: CssVarName, varRef: CssVarRef];
43
53
  //#endregion
44
- export { genComponentStyleHook, genCssVar, genStyleHooks, genSubStyleComponent };
54
+ export { StyleTokenResult, genComponentStyleHook, genCssVar, genStyleHooks, genSubStyleComponent, useStyleToken };
@@ -1,38 +1,52 @@
1
1
  import { useConfig } from "../../config-provider/context.js";
2
2
  import useToken, { unitless } from "../useToken.js";
3
3
  import { genCommonStyle, genIconStyle, genLinkStyle } from "../../style/index.js";
4
- import { computed } from "vue";
4
+ import { computed, effectScope } from "vue";
5
5
  import { genStyleUtils } from "@antdv-next/cssinjs/cssinjs-utils";
6
6
  //#region src/theme/util/genStyleUtils.ts
7
+ /**
8
+ * Derive a computed from the injected config ref once per ref instead of once
9
+ * per component instance. The config ref is stable per ConfigProvider (and a
10
+ * module singleton without one), so the WeakMap entry lives exactly as long
11
+ * as the provider.
12
+ */
13
+ function memoByConfig(cache, create) {
14
+ const config = useConfig();
15
+ let result = cache.get(config);
16
+ if (!result) {
17
+ result = effectScope(true).run(() => computed(() => create(config)));
18
+ cache.set(config, result);
19
+ }
20
+ return result;
21
+ }
22
+ const prefixCache = /* @__PURE__ */ new WeakMap();
23
+ const cspCache = /* @__PURE__ */ new WeakMap();
24
+ /**
25
+ * `useToken()` in the shape the cssinjs style hooks consume. Components that
26
+ * need the token themselves (e.g. Wave) call this once and pass the result to
27
+ * their style hook so the token is resolved a single time per instance.
28
+ */
29
+ function useStyleToken() {
30
+ const [theme, realToken, hashId, token, cssVar, zeroRuntime] = useToken();
31
+ return {
32
+ theme,
33
+ realToken,
34
+ hashId,
35
+ token,
36
+ cssVar,
37
+ zeroRuntime
38
+ };
39
+ }
7
40
  const { genComponentStyleHook, genStyleHooks, genSubStyleComponent } = genStyleUtils({
8
- usePrefix: () => {
9
- const configCtx = useConfig();
10
- return computed(() => {
11
- const { getPrefixCls, iconPrefixCls } = configCtx.value;
12
- return {
13
- rootPrefixCls: getPrefixCls(),
14
- iconPrefixCls
15
- };
16
- });
17
- },
18
- useToken() {
19
- const [theme, realToken, hashId, token, cssVar, zeroRuntime] = useToken();
41
+ usePrefix: () => memoByConfig(prefixCache, (configCtx) => {
42
+ const { getPrefixCls, iconPrefixCls } = configCtx.value;
20
43
  return {
21
- theme,
22
- realToken,
23
- hashId: computed(() => hashId.value ?? ""),
24
- token,
25
- cssVar: computed(() => cssVar?.value ?? {
26
- prefix: "",
27
- key: ""
28
- }),
29
- zeroRuntime
44
+ rootPrefixCls: getPrefixCls(),
45
+ iconPrefixCls
30
46
  };
31
- },
32
- useCSP: () => {
33
- const configCtx = useConfig();
34
- return computed(() => configCtx.value?.csp ?? {});
35
- },
47
+ }),
48
+ useToken: useStyleToken,
49
+ useCSP: () => memoByConfig(cspCache, (configCtx) => configCtx.value?.csp ?? {}),
36
50
  getResetStyles: (token, config) => {
37
51
  const linkStyle = genLinkStyle(token);
38
52
  const { prefix } = config ?? {};
@@ -56,4 +70,4 @@ function genCssVar(antCls, component) {
56
70
  return [varName, varRef];
57
71
  }
58
72
  //#endregion
59
- export { genComponentStyleHook, genCssVar, genStyleHooks, genSubStyleComponent };
73
+ export { genComponentStyleHook, genCssVar, genStyleHooks, genSubStyleComponent, useStyleToken };