@element-plus/nightly 0.0.20260315 → 0.0.20260316

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 (341) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.full.js +603 -526
  3. package/dist/index.full.min.js +9 -9
  4. package/dist/index.full.min.js.map +1 -1
  5. package/dist/index.full.min.mjs +8 -8
  6. package/dist/index.full.min.mjs.map +1 -1
  7. package/dist/index.full.mjs +603 -526
  8. package/dist/locale/af.js +1 -1
  9. package/dist/locale/af.min.js +1 -1
  10. package/dist/locale/af.min.mjs +1 -1
  11. package/dist/locale/af.mjs +1 -1
  12. package/dist/locale/ar-eg.js +1 -1
  13. package/dist/locale/ar-eg.min.js +1 -1
  14. package/dist/locale/ar-eg.min.mjs +1 -1
  15. package/dist/locale/ar-eg.mjs +1 -1
  16. package/dist/locale/ar.js +1 -1
  17. package/dist/locale/ar.min.js +1 -1
  18. package/dist/locale/ar.min.mjs +1 -1
  19. package/dist/locale/ar.mjs +1 -1
  20. package/dist/locale/az.js +1 -1
  21. package/dist/locale/az.min.js +1 -1
  22. package/dist/locale/az.min.mjs +1 -1
  23. package/dist/locale/az.mjs +1 -1
  24. package/dist/locale/bg.js +1 -1
  25. package/dist/locale/bg.min.js +1 -1
  26. package/dist/locale/bg.min.mjs +1 -1
  27. package/dist/locale/bg.mjs +1 -1
  28. package/dist/locale/bn.js +1 -1
  29. package/dist/locale/bn.min.js +1 -1
  30. package/dist/locale/bn.min.mjs +1 -1
  31. package/dist/locale/bn.mjs +1 -1
  32. package/dist/locale/ca.js +1 -1
  33. package/dist/locale/ca.min.js +1 -1
  34. package/dist/locale/ca.min.mjs +1 -1
  35. package/dist/locale/ca.mjs +1 -1
  36. package/dist/locale/ckb.js +1 -1
  37. package/dist/locale/ckb.min.js +1 -1
  38. package/dist/locale/ckb.min.mjs +1 -1
  39. package/dist/locale/ckb.mjs +1 -1
  40. package/dist/locale/cs.js +1 -1
  41. package/dist/locale/cs.min.js +1 -1
  42. package/dist/locale/cs.min.mjs +1 -1
  43. package/dist/locale/cs.mjs +1 -1
  44. package/dist/locale/da.js +1 -1
  45. package/dist/locale/da.min.js +1 -1
  46. package/dist/locale/da.min.mjs +1 -1
  47. package/dist/locale/da.mjs +1 -1
  48. package/dist/locale/de.js +1 -1
  49. package/dist/locale/de.min.js +1 -1
  50. package/dist/locale/de.min.mjs +1 -1
  51. package/dist/locale/de.mjs +1 -1
  52. package/dist/locale/el.js +1 -1
  53. package/dist/locale/el.min.js +1 -1
  54. package/dist/locale/el.min.mjs +1 -1
  55. package/dist/locale/el.mjs +1 -1
  56. package/dist/locale/en.js +1 -1
  57. package/dist/locale/en.min.js +1 -1
  58. package/dist/locale/en.min.mjs +1 -1
  59. package/dist/locale/en.mjs +1 -1
  60. package/dist/locale/eo.js +1 -1
  61. package/dist/locale/eo.min.js +1 -1
  62. package/dist/locale/eo.min.mjs +1 -1
  63. package/dist/locale/eo.mjs +1 -1
  64. package/dist/locale/es.js +1 -1
  65. package/dist/locale/es.min.js +1 -1
  66. package/dist/locale/es.min.mjs +1 -1
  67. package/dist/locale/es.mjs +1 -1
  68. package/dist/locale/et.js +1 -1
  69. package/dist/locale/et.min.js +1 -1
  70. package/dist/locale/et.min.mjs +1 -1
  71. package/dist/locale/et.mjs +1 -1
  72. package/dist/locale/eu.js +1 -1
  73. package/dist/locale/eu.min.js +1 -1
  74. package/dist/locale/eu.min.mjs +1 -1
  75. package/dist/locale/eu.mjs +1 -1
  76. package/dist/locale/fa.js +1 -1
  77. package/dist/locale/fa.min.js +1 -1
  78. package/dist/locale/fa.min.mjs +1 -1
  79. package/dist/locale/fa.mjs +1 -1
  80. package/dist/locale/fi.js +1 -1
  81. package/dist/locale/fi.min.js +1 -1
  82. package/dist/locale/fi.min.mjs +1 -1
  83. package/dist/locale/fi.mjs +1 -1
  84. package/dist/locale/fr.js +1 -1
  85. package/dist/locale/fr.min.js +1 -1
  86. package/dist/locale/fr.min.mjs +1 -1
  87. package/dist/locale/fr.mjs +1 -1
  88. package/dist/locale/he.js +1 -1
  89. package/dist/locale/he.min.js +1 -1
  90. package/dist/locale/he.min.mjs +1 -1
  91. package/dist/locale/he.mjs +1 -1
  92. package/dist/locale/hi.js +1 -1
  93. package/dist/locale/hi.min.js +1 -1
  94. package/dist/locale/hi.min.mjs +1 -1
  95. package/dist/locale/hi.mjs +1 -1
  96. package/dist/locale/hr.js +1 -1
  97. package/dist/locale/hr.min.js +1 -1
  98. package/dist/locale/hr.min.mjs +1 -1
  99. package/dist/locale/hr.mjs +1 -1
  100. package/dist/locale/hu.js +1 -1
  101. package/dist/locale/hu.min.js +1 -1
  102. package/dist/locale/hu.min.mjs +1 -1
  103. package/dist/locale/hu.mjs +1 -1
  104. package/dist/locale/hy-am.js +1 -1
  105. package/dist/locale/hy-am.min.js +1 -1
  106. package/dist/locale/hy-am.min.mjs +1 -1
  107. package/dist/locale/hy-am.mjs +1 -1
  108. package/dist/locale/id.js +1 -1
  109. package/dist/locale/id.min.js +1 -1
  110. package/dist/locale/id.min.mjs +1 -1
  111. package/dist/locale/id.mjs +1 -1
  112. package/dist/locale/it.js +1 -1
  113. package/dist/locale/it.min.js +1 -1
  114. package/dist/locale/it.min.mjs +1 -1
  115. package/dist/locale/it.mjs +1 -1
  116. package/dist/locale/ja.js +1 -1
  117. package/dist/locale/ja.min.js +1 -1
  118. package/dist/locale/ja.min.mjs +1 -1
  119. package/dist/locale/ja.mjs +1 -1
  120. package/dist/locale/kk.js +1 -1
  121. package/dist/locale/kk.min.js +1 -1
  122. package/dist/locale/kk.min.mjs +1 -1
  123. package/dist/locale/kk.mjs +1 -1
  124. package/dist/locale/km.js +1 -1
  125. package/dist/locale/km.min.js +1 -1
  126. package/dist/locale/km.min.mjs +1 -1
  127. package/dist/locale/km.mjs +1 -1
  128. package/dist/locale/ko.js +1 -1
  129. package/dist/locale/ko.min.js +1 -1
  130. package/dist/locale/ko.min.mjs +1 -1
  131. package/dist/locale/ko.mjs +1 -1
  132. package/dist/locale/ku.js +1 -1
  133. package/dist/locale/ku.min.js +1 -1
  134. package/dist/locale/ku.min.mjs +1 -1
  135. package/dist/locale/ku.mjs +1 -1
  136. package/dist/locale/ky.js +1 -1
  137. package/dist/locale/ky.min.js +1 -1
  138. package/dist/locale/ky.min.mjs +1 -1
  139. package/dist/locale/ky.mjs +1 -1
  140. package/dist/locale/lo.js +1 -1
  141. package/dist/locale/lo.min.js +1 -1
  142. package/dist/locale/lo.min.mjs +1 -1
  143. package/dist/locale/lo.mjs +1 -1
  144. package/dist/locale/lt.js +1 -1
  145. package/dist/locale/lt.min.js +1 -1
  146. package/dist/locale/lt.min.mjs +1 -1
  147. package/dist/locale/lt.mjs +1 -1
  148. package/dist/locale/lv.js +1 -1
  149. package/dist/locale/lv.min.js +1 -1
  150. package/dist/locale/lv.min.mjs +1 -1
  151. package/dist/locale/lv.mjs +1 -1
  152. package/dist/locale/mg.js +1 -1
  153. package/dist/locale/mg.min.js +1 -1
  154. package/dist/locale/mg.min.mjs +1 -1
  155. package/dist/locale/mg.mjs +1 -1
  156. package/dist/locale/mn.js +1 -1
  157. package/dist/locale/mn.min.js +1 -1
  158. package/dist/locale/mn.min.mjs +1 -1
  159. package/dist/locale/mn.mjs +1 -1
  160. package/dist/locale/ms.js +1 -1
  161. package/dist/locale/ms.min.js +1 -1
  162. package/dist/locale/ms.min.mjs +1 -1
  163. package/dist/locale/ms.mjs +1 -1
  164. package/dist/locale/my.js +1 -1
  165. package/dist/locale/my.min.js +1 -1
  166. package/dist/locale/my.min.mjs +1 -1
  167. package/dist/locale/my.mjs +1 -1
  168. package/dist/locale/nb-no.js +1 -1
  169. package/dist/locale/nb-no.min.js +1 -1
  170. package/dist/locale/nb-no.min.mjs +1 -1
  171. package/dist/locale/nb-no.mjs +1 -1
  172. package/dist/locale/nl.js +1 -1
  173. package/dist/locale/nl.min.js +1 -1
  174. package/dist/locale/nl.min.mjs +1 -1
  175. package/dist/locale/nl.mjs +1 -1
  176. package/dist/locale/no.js +1 -1
  177. package/dist/locale/no.min.js +1 -1
  178. package/dist/locale/no.min.mjs +1 -1
  179. package/dist/locale/no.mjs +1 -1
  180. package/dist/locale/pa.js +1 -1
  181. package/dist/locale/pa.min.js +1 -1
  182. package/dist/locale/pa.min.mjs +1 -1
  183. package/dist/locale/pa.mjs +1 -1
  184. package/dist/locale/pl.js +1 -1
  185. package/dist/locale/pl.min.js +1 -1
  186. package/dist/locale/pl.min.mjs +1 -1
  187. package/dist/locale/pl.mjs +1 -1
  188. package/dist/locale/pt-br.js +1 -1
  189. package/dist/locale/pt-br.min.js +1 -1
  190. package/dist/locale/pt-br.min.mjs +1 -1
  191. package/dist/locale/pt-br.mjs +1 -1
  192. package/dist/locale/pt.js +1 -1
  193. package/dist/locale/pt.min.js +1 -1
  194. package/dist/locale/pt.min.mjs +1 -1
  195. package/dist/locale/pt.mjs +1 -1
  196. package/dist/locale/ro.js +1 -1
  197. package/dist/locale/ro.min.js +1 -1
  198. package/dist/locale/ro.min.mjs +1 -1
  199. package/dist/locale/ro.mjs +1 -1
  200. package/dist/locale/ru.js +1 -1
  201. package/dist/locale/ru.min.js +1 -1
  202. package/dist/locale/ru.min.mjs +1 -1
  203. package/dist/locale/ru.mjs +1 -1
  204. package/dist/locale/sk.js +1 -1
  205. package/dist/locale/sk.min.js +1 -1
  206. package/dist/locale/sk.min.mjs +1 -1
  207. package/dist/locale/sk.mjs +1 -1
  208. package/dist/locale/sl.js +1 -1
  209. package/dist/locale/sl.min.js +1 -1
  210. package/dist/locale/sl.min.mjs +1 -1
  211. package/dist/locale/sl.mjs +1 -1
  212. package/dist/locale/sr.js +1 -1
  213. package/dist/locale/sr.min.js +1 -1
  214. package/dist/locale/sr.min.mjs +1 -1
  215. package/dist/locale/sr.mjs +1 -1
  216. package/dist/locale/sv.js +1 -1
  217. package/dist/locale/sv.min.js +1 -1
  218. package/dist/locale/sv.min.mjs +1 -1
  219. package/dist/locale/sv.mjs +1 -1
  220. package/dist/locale/sw.js +1 -1
  221. package/dist/locale/sw.min.js +1 -1
  222. package/dist/locale/sw.min.mjs +1 -1
  223. package/dist/locale/sw.mjs +1 -1
  224. package/dist/locale/ta.js +1 -1
  225. package/dist/locale/ta.min.js +1 -1
  226. package/dist/locale/ta.min.mjs +1 -1
  227. package/dist/locale/ta.mjs +1 -1
  228. package/dist/locale/te.js +1 -1
  229. package/dist/locale/te.min.js +1 -1
  230. package/dist/locale/te.min.mjs +1 -1
  231. package/dist/locale/te.mjs +1 -1
  232. package/dist/locale/th.js +1 -1
  233. package/dist/locale/th.min.js +1 -1
  234. package/dist/locale/th.min.mjs +1 -1
  235. package/dist/locale/th.mjs +1 -1
  236. package/dist/locale/tk.js +1 -1
  237. package/dist/locale/tk.min.js +1 -1
  238. package/dist/locale/tk.min.mjs +1 -1
  239. package/dist/locale/tk.mjs +1 -1
  240. package/dist/locale/tr.js +1 -1
  241. package/dist/locale/tr.min.js +1 -1
  242. package/dist/locale/tr.min.mjs +1 -1
  243. package/dist/locale/tr.mjs +1 -1
  244. package/dist/locale/ug-cn.js +1 -1
  245. package/dist/locale/ug-cn.min.js +1 -1
  246. package/dist/locale/ug-cn.min.mjs +1 -1
  247. package/dist/locale/ug-cn.mjs +1 -1
  248. package/dist/locale/uk.js +1 -1
  249. package/dist/locale/uk.min.js +1 -1
  250. package/dist/locale/uk.min.mjs +1 -1
  251. package/dist/locale/uk.mjs +1 -1
  252. package/dist/locale/uz-uz.js +1 -1
  253. package/dist/locale/uz-uz.min.js +1 -1
  254. package/dist/locale/uz-uz.min.mjs +1 -1
  255. package/dist/locale/uz-uz.mjs +1 -1
  256. package/dist/locale/vi.js +1 -1
  257. package/dist/locale/vi.min.js +1 -1
  258. package/dist/locale/vi.min.mjs +1 -1
  259. package/dist/locale/vi.mjs +1 -1
  260. package/dist/locale/zh-cn.js +1 -1
  261. package/dist/locale/zh-cn.min.js +1 -1
  262. package/dist/locale/zh-cn.min.mjs +1 -1
  263. package/dist/locale/zh-cn.mjs +1 -1
  264. package/dist/locale/zh-hk.js +1 -1
  265. package/dist/locale/zh-hk.min.js +1 -1
  266. package/dist/locale/zh-hk.min.mjs +1 -1
  267. package/dist/locale/zh-hk.mjs +1 -1
  268. package/dist/locale/zh-mo.js +1 -1
  269. package/dist/locale/zh-mo.min.js +1 -1
  270. package/dist/locale/zh-mo.min.mjs +1 -1
  271. package/dist/locale/zh-mo.mjs +1 -1
  272. package/dist/locale/zh-tw.js +1 -1
  273. package/dist/locale/zh-tw.min.js +1 -1
  274. package/dist/locale/zh-tw.min.mjs +1 -1
  275. package/dist/locale/zh-tw.mjs +1 -1
  276. package/es/components/anchor/src/anchor.vue.d.ts +1 -1
  277. package/es/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
  278. package/es/components/badge/src/badge.vue.d.ts +1 -1
  279. package/es/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  280. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs +3 -1
  281. package/es/components/input/src/input.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  282. package/es/components/input/src/input2.mjs.map +1 -1
  283. package/es/components/link/src/link.vue.d.ts +1 -1
  284. package/es/components/mention/src/mention.vue.d.ts +1 -1
  285. package/es/components/message/src/message.d.ts +1 -1
  286. package/es/components/message/src/message.vue.d.ts +1 -1
  287. package/es/components/notification/src/notification.d.ts +1 -1
  288. package/es/components/notification/src/notification.vue.d.ts +1 -1
  289. package/es/components/radio/src/radio-group.vue.d.ts +1 -1
  290. package/es/components/segmented/index.d.ts +34 -66
  291. package/es/components/segmented/src/segmented.d.ts +5 -4
  292. package/es/components/segmented/src/segmented.mjs.map +1 -1
  293. package/es/components/segmented/src/segmented.vue.d.ts +21 -26
  294. package/es/components/segmented/src/segmented.vue_vue_type_script_setup_true_lang.mjs +58 -4
  295. package/es/components/segmented/src/segmented.vue_vue_type_script_setup_true_lang.mjs.map +1 -1
  296. package/es/components/segmented/src/segmented2.mjs.map +1 -1
  297. package/es/components/table/src/table-body/events-helper.mjs +1 -3
  298. package/es/components/table/src/table-body/events-helper.mjs.map +1 -1
  299. package/es/components/tabs/src/tab-nav.mjs +13 -10
  300. package/es/components/tabs/src/tab-nav.mjs.map +1 -1
  301. package/es/utils/index.d.ts +2 -1
  302. package/es/utils/index.mjs +2 -1
  303. package/es/utils/numbers.d.ts +9 -0
  304. package/es/utils/numbers.mjs +13 -0
  305. package/es/utils/numbers.mjs.map +1 -0
  306. package/es/version.mjs +1 -1
  307. package/es/version.mjs.map +1 -1
  308. package/lib/components/anchor/src/anchor.vue.d.ts +1 -1
  309. package/lib/components/autocomplete/src/autocomplete.vue.d.ts +1 -1
  310. package/lib/components/badge/src/badge.vue.d.ts +1 -1
  311. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  312. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js +3 -1
  313. package/lib/components/input/src/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  314. package/lib/components/input/src/input2.js.map +1 -1
  315. package/lib/components/link/src/link.vue.d.ts +1 -1
  316. package/lib/components/mention/src/mention.vue.d.ts +1 -1
  317. package/lib/components/message/src/message.d.ts +1 -1
  318. package/lib/components/message/src/message.vue.d.ts +1 -1
  319. package/lib/components/notification/src/notification.d.ts +1 -1
  320. package/lib/components/notification/src/notification.vue.d.ts +1 -1
  321. package/lib/components/radio/src/radio-group.vue.d.ts +1 -1
  322. package/lib/components/segmented/index.d.ts +34 -66
  323. package/lib/components/segmented/src/segmented.d.ts +5 -4
  324. package/lib/components/segmented/src/segmented.js.map +1 -1
  325. package/lib/components/segmented/src/segmented.vue.d.ts +21 -26
  326. package/lib/components/segmented/src/segmented.vue_vue_type_script_setup_true_lang.js +57 -3
  327. package/lib/components/segmented/src/segmented.vue_vue_type_script_setup_true_lang.js.map +1 -1
  328. package/lib/components/segmented/src/segmented2.js.map +1 -1
  329. package/lib/components/table/src/table-body/events-helper.js +2 -4
  330. package/lib/components/table/src/table-body/events-helper.js.map +1 -1
  331. package/lib/components/tabs/src/tab-nav.js +13 -10
  332. package/lib/components/tabs/src/tab-nav.js.map +1 -1
  333. package/lib/utils/index.d.ts +2 -1
  334. package/lib/utils/index.js +2 -0
  335. package/lib/utils/numbers.d.ts +9 -0
  336. package/lib/utils/numbers.js +15 -0
  337. package/lib/utils/numbers.js.map +1 -0
  338. package/lib/version.js +1 -1
  339. package/lib/version.js.map +1 -1
  340. package/package.json +4 -3
  341. package/web-types.json +1 -1
@@ -5,76 +5,44 @@ import "../../index.js";
5
5
  import * as vue from "vue";
6
6
 
7
7
  //#region ../../packages/components/segmented/index.d.ts
8
- declare const ElSegmented: {
9
- new (...args: any[]): vue.CreateComponentPublicInstanceWithMixins<Readonly<SegmentedProps> & Readonly<{
10
- onChange?: ((val: any) => any) | undefined;
11
- "onUpdate:modelValue"?: ((val: any) => any) | undefined;
12
- }>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
13
- change: (val: any) => void;
14
- "update:modelValue": (val: any) => void;
15
- }, vue.PublicProps, {
16
- props: Props;
17
- modelValue: string | number | boolean;
18
- disabled: boolean;
19
- validateEvent: boolean;
20
- direction: "vertical" | "horizontal";
21
- options: Option[];
22
- }, false, {}, {}, vue.GlobalComponents, vue.GlobalDirectives, string, {}, any, vue.ComponentProvideOptions, {
23
- P: {};
24
- B: {};
25
- D: {};
26
- C: {};
27
- M: {};
28
- Defaults: {};
29
- }, Readonly<SegmentedProps> & Readonly<{
8
+ declare const ElSegmented: (<T extends Option = Option>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: {
9
+ slots: {
10
+ default?: (props: {
11
+ item: T;
12
+ }) => any;
13
+ };
14
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
15
+ attrs: any;
16
+ }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
17
+ props: vue.PublicProps & {
18
+ direction?: ("vertical" | "horizontal") | undefined;
19
+ options?: T[] | undefined;
20
+ modelValue?: (string | number | boolean) | undefined;
21
+ props?: Props | undefined;
22
+ block?: boolean | undefined;
23
+ size?: ComponentSize | undefined;
24
+ disabled?: boolean | undefined;
25
+ validateEvent?: boolean | undefined;
26
+ id?: string | undefined;
27
+ name?: string | undefined;
28
+ ariaLabel?: string | undefined;
30
29
  onChange?: ((val: any) => any) | undefined;
31
30
  "onUpdate:modelValue"?: ((val: any) => any) | undefined;
32
- }>, {}, {}, {}, {}, {
33
- props: Props;
34
- modelValue: string | number | boolean;
35
- disabled: boolean;
36
- validateEvent: boolean;
37
- direction: "vertical" | "horizontal";
38
- options: Option[];
39
- }>;
40
- __isFragment?: never;
41
- __isTeleport?: never;
42
- __isSuspense?: never;
43
- } & vue.ComponentOptionsBase<Readonly<SegmentedProps> & Readonly<{
44
- onChange?: ((val: any) => any) | undefined;
45
- "onUpdate:modelValue"?: ((val: any) => any) | undefined;
46
- }>, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
47
- change: (val: any) => void;
48
- "update:modelValue": (val: any) => void;
49
- }, string, {
50
- props: Props;
51
- modelValue: string | number | boolean;
52
- disabled: boolean;
53
- validateEvent: boolean;
54
- direction: "vertical" | "horizontal";
55
- options: Option[];
56
- }, {}, string, {}, vue.GlobalComponents, vue.GlobalDirectives, string, vue.ComponentProvideOptions> & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps & (new () => {
57
- $slots: {
31
+ } & (typeof globalThis extends {
32
+ __VLS_PROPS_FALLBACK: infer P;
33
+ } ? P : {});
34
+ expose: (exposed: {}) => void;
35
+ attrs: any;
36
+ slots: {
58
37
  default?: (props: {
59
- item: any;
38
+ item: T;
60
39
  }) => any;
61
40
  };
62
- }) & vue.ObjectPlugin & {
63
- setPropsDefaults: (defaults: Partial<{
64
- readonly direction?: ("vertical" | "horizontal") | undefined;
65
- readonly options?: Option[] | undefined;
66
- readonly modelValue?: (string | number | boolean) | undefined;
67
- readonly props?: Props | undefined;
68
- readonly block?: boolean | undefined;
69
- readonly size?: ComponentSize | undefined;
70
- readonly disabled?: boolean | undefined;
71
- readonly validateEvent?: boolean | undefined;
72
- readonly id?: string | undefined;
73
- readonly name?: string | undefined;
74
- readonly ariaLabel?: string | undefined;
75
- readonly onChange?: ((val: any) => any) | undefined;
76
- readonly "onUpdate:modelValue"?: ((val: any) => any) | undefined;
77
- } & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps>) => void;
78
- } & Record<string, any>;
41
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
42
+ }>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
43
+ [key: string]: any;
44
+ }> & {
45
+ __ctx?: Awaited<typeof __VLS_setup>;
46
+ }) & vue.ObjectPlugin & Record<string, any>;
79
47
  //#endregion
80
48
  export { ElSegmented, ElSegmented as default, Props, SegmentedEmits, SegmentedInstance, SegmentedProps, SegmentedPropsPublic, defaultProps, segmentedEmits, segmentedProps };
@@ -4,7 +4,8 @@ import "../../../utils/index.js";
4
4
  import { Option } from "./types.js";
5
5
  import { _default } from "./segmented.vue.js";
6
6
  import * as vue from "vue";
7
- import { ExtractPublicPropTypes } from "vue";
7
+ import { ComponentInstance, ExtractPublicPropTypes } from "vue";
8
+ import { ComponentExposed } from "vue-component-type-helpers";
8
9
 
9
10
  //#region ../../packages/components/segmented/src/segmented.d.ts
10
11
  interface Props {
@@ -13,12 +14,12 @@ interface Props {
13
14
  disabled?: string;
14
15
  }
15
16
  declare const defaultProps: Required<Props>;
16
- interface SegmentedProps {
17
+ interface SegmentedProps<T extends Option = Option> {
17
18
  direction?: 'vertical' | 'horizontal';
18
19
  /**
19
20
  * @description options of segmented
20
21
  */
21
- options?: Option[];
22
+ options?: T[];
22
23
  /**
23
24
  * @description binding value
24
25
  */
@@ -86,6 +87,6 @@ declare const segmentedEmits: {
86
87
  change: (val: any) => val is string | number | boolean;
87
88
  };
88
89
  type SegmentedEmits = typeof segmentedEmits;
89
- type SegmentedInstance = InstanceType<typeof _default> & unknown;
90
+ type SegmentedInstance = ComponentInstance<typeof _default> & ComponentExposed<typeof _default>;
90
91
  //#endregion
91
92
  export { Props, SegmentedEmits, SegmentedInstance, SegmentedProps, SegmentedPropsPublic, defaultProps, segmentedEmits, segmentedProps };
@@ -1 +1 @@
1
- {"version":3,"file":"segmented.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.ts"],"sourcesContent":["import {\n buildProps,\n definePropType,\n isBoolean,\n isNumber,\n isString,\n} from '@element-plus/utils'\nimport { useAriaProps, useSizeProp } from '@element-plus/hooks'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\n\nimport type { Option } from './types'\nimport type { ExtractPublicPropTypes } from 'vue'\nimport type { ComponentSize } from '@element-plus/constants'\nimport type Segmented from './segmented.vue'\n\nexport interface Props {\n label?: string\n value?: string\n disabled?: string\n}\n\nexport const defaultProps: Required<Props> = {\n label: 'label',\n value: 'value',\n disabled: 'disabled',\n}\n\nexport interface SegmentedProps {\n direction?: 'vertical' | 'horizontal'\n /**\n * @description options of segmented\n */\n options?: Option[]\n /**\n * @description binding value\n */\n modelValue?: string | number | boolean\n /**\n * @description configuration options, see the following table\n */\n props?: Props\n /**\n * @description fit width of parent content\n */\n block?: boolean\n /**\n * @description size of component\n */\n size?: ComponentSize\n /**\n * @description whether segmented is disabled\n */\n disabled?: boolean\n /**\n * @description whether to trigger form validation\n */\n validateEvent?: boolean\n /**\n * @description native input id\n */\n id?: string\n /**\n * @description native `name` attribute\n */\n name?: string\n /**\n * @description native `aria-label` attribute\n */\n ariaLabel?: string\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `SegmentedProps` instead.\n */\nexport const segmentedProps = buildProps({\n direction: {\n type: definePropType<'vertical' | 'horizontal'>(String),\n default: 'horizontal',\n },\n /**\n * @description options of segmented\n */\n options: {\n type: definePropType<Option[]>(Array),\n default: () => [],\n },\n /**\n * @description binding value\n */\n modelValue: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n /**\n * @description configuration options, see the following table\n */\n props: {\n type: definePropType<Props>(Object),\n default: () => defaultProps,\n },\n /**\n * @description fit width of parent content\n */\n block: Boolean,\n /**\n * @description size of component\n */\n size: useSizeProp,\n /**\n * @description whether segmented is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n /**\n * @description native input id\n */\n id: String,\n /**\n * @description native `name` attribute\n */\n name: String,\n ...useAriaProps(['ariaLabel']),\n})\n\n/**\n * @deprecated Removed after 3.0.0, Use `SegmentedProps` instead.\n */\nexport type SegmentedPropsPublic = ExtractPublicPropTypes<typeof segmentedProps>\n\nexport const segmentedEmits = {\n [UPDATE_MODEL_EVENT]: (val: any) =>\n isString(val) || isNumber(val) || isBoolean(val),\n [CHANGE_EVENT]: (val: any) =>\n isString(val) || isNumber(val) || isBoolean(val),\n}\nexport type SegmentedEmits = typeof segmentedEmits\n\nexport type SegmentedInstance = InstanceType<typeof Segmented> & unknown\n"],"mappings":";;;;;;;AAqBA,MAAa,eAAgC;CAC3C,OAAO;CACP,OAAO;CACP,UAAU;CACX;;;;AAiDD,MAAa,iBAAiB,WAAW;CACvC,WAAW;EACT,MAAM,eAA0C,OAAO;EACvD,SAAS;EACV;CAID,SAAS;EACP,MAAM,eAAyB,MAAM;EACrC,eAAe,EAAE;EAClB;CAID,YAAY;EACV,MAAM;GAAC;GAAQ;GAAQ;GAAQ;EAC/B,SAAS;EACV;CAID,OAAO;EACL,MAAM,eAAsB,OAAO;EACnC,eAAe;EAChB;CAID,OAAO;CAIP,MAAM;CAIN,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,IAAI;CAIJ,MAAM;CACN,GAAG,aAAa,CAAC,YAAY,CAAC;CAC/B,CAAC;AAOF,MAAa,iBAAiB;EAC3B,sBAAsB,QACrB,SAAS,IAAI,IAAI,SAAS,IAAI,IAAI,UAAU,IAAI;EACjD,gBAAgB,QACf,SAAS,IAAI,IAAI,SAAS,IAAI,IAAI,UAAU,IAAI;CACnD"}
1
+ {"version":3,"file":"segmented.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.ts"],"sourcesContent":["import {\n buildProps,\n definePropType,\n isBoolean,\n isNumber,\n isString,\n} from '@element-plus/utils'\nimport { useAriaProps, useSizeProp } from '@element-plus/hooks'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\n\nimport type { Option } from './types'\nimport type { ComponentInstance, ExtractPublicPropTypes } from 'vue'\nimport type { ComponentExposed } from 'vue-component-type-helpers'\nimport type { ComponentSize } from '@element-plus/constants'\nimport type Segmented from './segmented.vue'\n\nexport interface Props {\n label?: string\n value?: string\n disabled?: string\n}\n\nexport const defaultProps: Required<Props> = {\n label: 'label',\n value: 'value',\n disabled: 'disabled',\n}\n\nexport interface SegmentedProps<T extends Option = Option> {\n direction?: 'vertical' | 'horizontal'\n /**\n * @description options of segmented\n */\n options?: T[]\n /**\n * @description binding value\n */\n modelValue?: string | number | boolean\n /**\n * @description configuration options, see the following table\n */\n props?: Props\n /**\n * @description fit width of parent content\n */\n block?: boolean\n /**\n * @description size of component\n */\n size?: ComponentSize\n /**\n * @description whether segmented is disabled\n */\n disabled?: boolean\n /**\n * @description whether to trigger form validation\n */\n validateEvent?: boolean\n /**\n * @description native input id\n */\n id?: string\n /**\n * @description native `name` attribute\n */\n name?: string\n /**\n * @description native `aria-label` attribute\n */\n ariaLabel?: string\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `SegmentedProps` instead.\n */\nexport const segmentedProps = buildProps({\n direction: {\n type: definePropType<'vertical' | 'horizontal'>(String),\n default: 'horizontal',\n },\n /**\n * @description options of segmented\n */\n options: {\n type: definePropType<Option[]>(Array),\n default: () => [],\n },\n /**\n * @description binding value\n */\n modelValue: {\n type: [String, Number, Boolean],\n default: undefined,\n },\n /**\n * @description configuration options, see the following table\n */\n props: {\n type: definePropType<Props>(Object),\n default: () => defaultProps,\n },\n /**\n * @description fit width of parent content\n */\n block: Boolean,\n /**\n * @description size of component\n */\n size: useSizeProp,\n /**\n * @description whether segmented is disabled\n */\n disabled: {\n type: Boolean,\n default: undefined,\n },\n /**\n * @description whether to trigger form validation\n */\n validateEvent: {\n type: Boolean,\n default: true,\n },\n /**\n * @description native input id\n */\n id: String,\n /**\n * @description native `name` attribute\n */\n name: String,\n ...useAriaProps(['ariaLabel']),\n})\n\n/**\n * @deprecated Removed after 3.0.0, Use `SegmentedProps` instead.\n */\nexport type SegmentedPropsPublic = ExtractPublicPropTypes<typeof segmentedProps>\n\nexport const segmentedEmits = {\n [UPDATE_MODEL_EVENT]: (val: any) =>\n isString(val) || isNumber(val) || isBoolean(val),\n [CHANGE_EVENT]: (val: any) =>\n isString(val) || isNumber(val) || isBoolean(val),\n}\nexport type SegmentedEmits = typeof segmentedEmits\n\nexport type SegmentedInstance = ComponentInstance<typeof Segmented> &\n ComponentExposed<typeof Segmented>\n"],"mappings":";;;;;;;AAsBA,MAAa,eAAgC;CAC3C,OAAO;CACP,OAAO;CACP,UAAU;CACX;;;;AAiDD,MAAa,iBAAiB,WAAW;CACvC,WAAW;EACT,MAAM,eAA0C,OAAO;EACvD,SAAS;EACV;CAID,SAAS;EACP,MAAM,eAAyB,MAAM;EACrC,eAAe,EAAE;EAClB;CAID,YAAY;EACV,MAAM;GAAC;GAAQ;GAAQ;GAAQ;EAC/B,SAAS;EACV;CAID,OAAO;EACL,MAAM,eAAsB,OAAO;EACnC,eAAe;EAChB;CAID,OAAO;CAIP,MAAM;CAIN,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,eAAe;EACb,MAAM;EACN,SAAS;EACV;CAID,IAAI;CAIJ,MAAM;CACN,GAAG,aAAa,CAAC,YAAY,CAAC;CAC/B,CAAC;AAOF,MAAa,iBAAiB;EAC3B,sBAAsB,QACrB,SAAS,IAAI,IAAI,SAAS,IAAI,IAAI,UAAU,IAAI;EACjD,gBAAgB,QACf,SAAS,IAAI,IAAI,SAAS,IAAI,IAAI,UAAU,IAAI;CACnD"}
@@ -1,34 +1,29 @@
1
1
  import { Option } from "./types.js";
2
- import { Props, SegmentedProps } from "./segmented.js";
2
+ import { SegmentedProps } from "./segmented.js";
3
3
  import * as vue from "vue";
4
4
 
5
5
  //#region ../../packages/components/segmented/src/segmented.vue.d.ts
6
- declare var __VLS_1: {
7
- item: any;
8
- };
9
- type __VLS_Slots = {} & {
10
- default?: (props: typeof __VLS_1) => any;
11
- };
12
- declare const __VLS_base: vue.DefineComponent<SegmentedProps, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
13
- change: (val: any) => void;
14
- "update:modelValue": (val: any) => void;
15
- }, string, vue.PublicProps, Readonly<SegmentedProps> & Readonly<{
16
- onChange?: ((val: any) => any) | undefined;
17
- "onUpdate:modelValue"?: ((val: any) => any) | undefined;
18
- }>, {
19
- props: Props;
20
- modelValue: string | number | boolean;
21
- disabled: boolean;
22
- validateEvent: boolean;
23
- direction: "vertical" | "horizontal";
24
- options: Option[];
25
- }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
26
- declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
27
- declare const _default: typeof __VLS_export;
28
- type __VLS_WithSlots<T, S> = T & {
29
- new (): {
30
- $slots: S;
6
+ declare const __VLS_export: <T extends Option = Option>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
7
+ props: vue.PublicProps & __VLS_PrettifyLocal<SegmentedProps<T> & {
8
+ onChange?: ((val: any) => any) | undefined;
9
+ "onUpdate:modelValue"?: ((val: any) => any) | undefined;
10
+ }> & (typeof globalThis extends {
11
+ __VLS_PROPS_FALLBACK: infer P;
12
+ } ? P : {});
13
+ expose: (exposed: {}) => void;
14
+ attrs: any;
15
+ slots: {
16
+ default?: (props: {
17
+ item: T;
18
+ }) => any;
31
19
  };
20
+ emit: ((event: "change", val: any) => void) & ((event: "update:modelValue", val: any) => void);
21
+ }>) => vue.VNode<vue.RendererNode, vue.RendererElement, {
22
+ [key: string]: any;
23
+ }> & {
24
+ __ctx?: Awaited<typeof __VLS_setup>;
32
25
  };
26
+ declare const _default: typeof __VLS_export;
27
+ type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K] } : { [K in keyof T as K]: T[K] }) & {};
33
28
  //#endregion
34
29
  export { _default };
@@ -5,7 +5,7 @@ import { useNamespace } from "../../../hooks/use-namespace/index.mjs";
5
5
  import { useId } from "../../../hooks/use-id/index.mjs";
6
6
  import { useFormDisabled, useFormSize } from "../../form/src/hooks/use-form-common-props.mjs";
7
7
  import { useFormItem, useFormItemInputId } from "../../form/src/hooks/use-form-item.mjs";
8
- import { defaultProps, segmentedEmits, segmentedProps } from "./segmented.mjs";
8
+ import { defaultProps, segmentedEmits } from "./segmented.mjs";
9
9
  import { useActiveElement, useResizeObserver } from "@vueuse/core";
10
10
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, reactive, ref, renderList, renderSlot, toDisplayString, unref, watch } from "vue";
11
11
 
@@ -24,7 +24,62 @@ const _hoisted_2 = [
24
24
  var segmented_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
25
25
  name: "ElSegmented",
26
26
  __name: "segmented",
27
- props: segmentedProps,
27
+ props: {
28
+ direction: {
29
+ type: String,
30
+ required: false,
31
+ default: "horizontal"
32
+ },
33
+ options: {
34
+ type: Array,
35
+ required: false,
36
+ default: () => []
37
+ },
38
+ modelValue: {
39
+ type: [
40
+ String,
41
+ Number,
42
+ Boolean
43
+ ],
44
+ required: false,
45
+ default: void 0
46
+ },
47
+ props: {
48
+ type: Object,
49
+ required: false,
50
+ default: () => defaultProps
51
+ },
52
+ block: {
53
+ type: Boolean,
54
+ required: false
55
+ },
56
+ size: {
57
+ type: null,
58
+ required: false
59
+ },
60
+ disabled: {
61
+ type: Boolean,
62
+ required: false,
63
+ default: void 0
64
+ },
65
+ validateEvent: {
66
+ type: Boolean,
67
+ required: false,
68
+ default: true
69
+ },
70
+ id: {
71
+ type: String,
72
+ required: false
73
+ },
74
+ name: {
75
+ type: String,
76
+ required: false
77
+ },
78
+ ariaLabel: {
79
+ type: String,
80
+ required: false
81
+ }
82
+ },
28
83
  emits: segmentedEmits,
29
84
  setup(__props, { emit: __emit }) {
30
85
  const props = __props;
@@ -55,7 +110,6 @@ var segmented_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
55
110
  ...defaultProps,
56
111
  ...props.props
57
112
  }));
58
- const intoAny = (item) => item;
59
113
  const getValue = (item) => {
60
114
  return isObject(item) ? item[aliasProps.value.value] : item;
61
115
  };
@@ -151,7 +205,7 @@ var segmented_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
151
205
  disabled: getDisabled(item),
152
206
  checked: getSelected(item),
153
207
  onChange: ($event) => handleChange($event, item)
154
- }, null, 42, _hoisted_2), createElementVNode("div", { class: normalizeClass(unref(ns).e("item-label")) }, [renderSlot(_ctx.$slots, "default", { item: intoAny(item) }, () => [createTextVNode(toDisplayString(getLabel(item)), 1)])], 2)], 2);
208
+ }, null, 42, _hoisted_2), createElementVNode("div", { class: normalizeClass(unref(ns).e("item-label")) }, [renderSlot(_ctx.$slots, "default", { item }, () => [createTextVNode(toDisplayString(getLabel(item)), 1)])], 2)], 2);
155
209
  }), 128))], 2)], 10, _hoisted_1)) : createCommentVNode("v-if", true);
156
210
  };
157
211
  }
@@ -1 +1 @@
1
- {"version":3,"file":"segmented.vue_vue_type_script_setup_true_lang.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.vue"],"sourcesContent":["<template>\n <div\n v-if=\"options.length\"\n :id=\"inputId\"\n ref=\"segmentedRef\"\n :class=\"segmentedCls\"\n role=\"radiogroup\"\n :aria-label=\"!isLabeledByFormItem ? ariaLabel || 'segmented' : undefined\"\n :aria-labelledby=\"isLabeledByFormItem ? formItem!.labelId : undefined\"\n >\n <div :class=\"[ns.e('group'), ns.m(direction)]\">\n <div :style=\"selectedStyle\" :class=\"selectedCls\" />\n <label\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :class=\"getItemCls(item)\"\n >\n <input\n :class=\"ns.e('item-input')\"\n type=\"radio\"\n :name=\"name\"\n :disabled=\"getDisabled(item)\"\n :checked=\"getSelected(item)\"\n @change=\"handleChange($event, item)\"\n />\n <div :class=\"ns.e('item-label')\">\n <slot :item=\"intoAny(item)\">{{ getLabel(item) }}</slot>\n </div>\n </label>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useActiveElement, useResizeObserver } from '@vueuse/core'\nimport { useId, useNamespace } from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport { debugWarn, isObject } from '@element-plus/utils'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { defaultProps, segmentedEmits } from './segmented'\n\nimport type { Option } from './types'\nimport type { SegmentedProps } from './segmented'\n\ndefineOptions({\n name: 'ElSegmented',\n})\n\nconst props = withDefaults(defineProps<SegmentedProps>(), {\n direction: 'horizontal',\n options: () => [],\n props: () => defaultProps,\n validateEvent: true,\n modelValue: undefined,\n disabled: undefined,\n})\nconst emit = defineEmits(segmentedEmits)\n\nconst ns = useNamespace('segmented')\nconst segmentedId = useId()\nconst segmentedSize = useFormSize()\nconst _disabled = useFormDisabled()\nconst { formItem } = useFormItem()\nconst { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: formItem,\n})\n\nconst segmentedRef = ref<HTMLElement | null>(null)\nconst activeElement = useActiveElement()\n\nconst state = reactive({\n isInit: false,\n width: 0,\n height: 0,\n translateX: 0,\n translateY: 0,\n focusVisible: false,\n})\n\nconst handleChange = (evt: Event, item: Option) => {\n const value = getValue(item)\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n ;(evt.target as HTMLInputElement).checked = value === props.modelValue\n}\n\nconst aliasProps = computed(() => ({ ...defaultProps, ...props.props }))\n\n//FIXME: remove this when vue >=3.3\nconst intoAny = (item: any) => item\n\nconst getValue = (item: Option) => {\n return isObject(item) ? item[aliasProps.value.value] : item\n}\n\nconst getLabel = (item: Option) => {\n return isObject(item) ? item[aliasProps.value.label] : item\n}\n\nconst getDisabled = (item: Option | undefined) => {\n return !!(\n _disabled.value ||\n (isObject(item) ? item[aliasProps.value.disabled] : false)\n )\n}\n\nconst getSelected = (item: Option) => {\n return props.modelValue === getValue(item)\n}\n\nconst getOption = (value: any) => {\n return props.options.find((item) => getValue(item) === value)\n}\n\nconst getItemCls = (item: Option) => {\n return [\n ns.e('item'),\n ns.is('selected', getSelected(item)),\n ns.is('disabled', getDisabled(item)),\n ]\n}\n\nconst updateSelect = () => {\n if (!segmentedRef.value) return\n const selectedItem = segmentedRef.value.querySelector(\n '.is-selected'\n ) as HTMLElement\n const selectedItemInput = segmentedRef.value.querySelector(\n '.is-selected input'\n ) as HTMLElement\n if (!selectedItem || !selectedItemInput) {\n state.width = 0\n state.height = 0\n state.translateX = 0\n state.translateY = 0\n state.focusVisible = false\n return\n }\n state.isInit = true\n if (props.direction === 'vertical') {\n state.height = selectedItem.offsetHeight\n state.translateY = selectedItem.offsetTop\n } else {\n state.width = selectedItem.offsetWidth\n state.translateX = selectedItem.offsetLeft\n }\n try {\n // This will failed in test\n state.focusVisible = selectedItemInput.matches(':focus-visible')\n } catch {}\n}\n\nconst segmentedCls = computed(() => [\n ns.b(),\n ns.m(segmentedSize.value),\n ns.is('block', props.block),\n])\n\nconst selectedStyle = computed(() => ({\n width: props.direction === 'vertical' ? '100%' : `${state.width}px`,\n height: props.direction === 'vertical' ? `${state.height}px` : '100%',\n transform:\n props.direction === 'vertical'\n ? `translateY(${state.translateY}px)`\n : `translateX(${state.translateX}px)`,\n display: state.isInit ? 'block' : 'none',\n}))\n\nconst selectedCls = computed(() => [\n ns.e('item-selected'),\n ns.is('disabled', getDisabled(getOption(props.modelValue))),\n ns.is('focus-visible', state.focusVisible),\n])\n\nconst name = computed(() => {\n return props.name || segmentedId.value\n})\n\nuseResizeObserver(segmentedRef, updateSelect)\n\nwatch(activeElement, updateSelect)\n\nwatch(\n () => props.modelValue,\n () => {\n updateSelect()\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n },\n {\n flush: 'post',\n }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDA,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,KAAK,aAAa,YAAW;EACnC,MAAM,cAAc,OAAM;EAC1B,MAAM,gBAAgB,aAAY;EAClC,MAAM,YAAY,iBAAgB;EAClC,MAAM,EAAE,aAAa,aAAY;EACjC,MAAM,EAAE,SAAS,wBAAwB,mBAAmB,OAAO,EACjE,iBAAiB,UAClB,CAAA;EAED,MAAM,eAAe,IAAwB,KAAI;EACjD,MAAM,gBAAgB,kBAAiB;EAEvC,MAAM,QAAQ,SAAS;GACrB,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,cAAc;GACf,CAAA;EAED,MAAM,gBAAgB,KAAY,SAAiB;GACjD,MAAM,QAAQ,SAAS,KAAI;AAC3B,QAAK,oBAAoB,MAAK;AAC9B,QAAK,cAAc,MAAK;AACvB,GAAC,IAAI,OAA4B,UAAU,UAAU,MAAM;;EAG9D,MAAM,aAAa,gBAAgB;GAAE,GAAG;GAAc,GAAG,MAAM;GAAO,EAAC;EAGvE,MAAM,WAAW,SAAc;EAE/B,MAAM,YAAY,SAAiB;AACjC,UAAO,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,SAAS;;EAGzD,MAAM,YAAY,SAAiB;AACjC,UAAO,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,SAAS;;EAGzD,MAAM,eAAe,SAA6B;AAChD,UAAO,CAAC,EACN,UAAU,UACT,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,YAAY;;EAIxD,MAAM,eAAe,SAAiB;AACpC,UAAO,MAAM,eAAe,SAAS,KAAI;;EAG3C,MAAM,aAAa,UAAe;AAChC,UAAO,MAAM,QAAQ,MAAM,SAAS,SAAS,KAAK,KAAK,MAAK;;EAG9D,MAAM,cAAc,SAAiB;AACnC,UAAO;IACL,GAAG,EAAE,OAAO;IACZ,GAAG,GAAG,YAAY,YAAY,KAAK,CAAC;IACpC,GAAG,GAAG,YAAY,YAAY,KAAK,CAAC;IACtC;;EAGF,MAAM,qBAAqB;AACzB,OAAI,CAAC,aAAa,MAAO;GACzB,MAAM,eAAe,aAAa,MAAM,cACtC,eACD;GACD,MAAM,oBAAoB,aAAa,MAAM,cAC3C,qBACD;AACD,OAAI,CAAC,gBAAgB,CAAC,mBAAmB;AACvC,UAAM,QAAQ;AACd,UAAM,SAAS;AACf,UAAM,aAAa;AACnB,UAAM,aAAa;AACnB,UAAM,eAAe;AACrB;;AAEF,SAAM,SAAS;AACf,OAAI,MAAM,cAAc,YAAY;AAClC,UAAM,SAAS,aAAa;AAC5B,UAAM,aAAa,aAAa;UAC3B;AACL,UAAM,QAAQ,aAAa;AAC3B,UAAM,aAAa,aAAa;;AAElC,OAAI;AAEF,UAAM,eAAe,kBAAkB,QAAQ,iBAAgB;WACzD;;EAGV,MAAM,eAAe,eAAe;GAClC,GAAG,GAAG;GACN,GAAG,EAAE,cAAc,MAAM;GACzB,GAAG,GAAG,SAAS,MAAM,MAAM;GAC5B,CAAA;EAED,MAAM,gBAAgB,gBAAgB;GACpC,OAAO,MAAM,cAAc,aAAa,SAAS,GAAG,MAAM,MAAM;GAChE,QAAQ,MAAM,cAAc,aAAa,GAAG,MAAM,OAAO,MAAM;GAC/D,WACE,MAAM,cAAc,aAChB,cAAc,MAAM,WAAW,OAC/B,cAAc,MAAM,WAAW;GACrC,SAAS,MAAM,SAAS,UAAU;GACnC,EAAC;EAEF,MAAM,cAAc,eAAe;GACjC,GAAG,EAAE,gBAAgB;GACrB,GAAG,GAAG,YAAY,YAAY,UAAU,MAAM,WAAW,CAAC,CAAC;GAC3D,GAAG,GAAG,iBAAiB,MAAM,aAAa;GAC3C,CAAA;EAED,MAAM,OAAO,eAAe;AAC1B,UAAO,MAAM,QAAQ,YAAY;IAClC;AAED,oBAAkB,cAAc,aAAY;AAE5C,QAAM,eAAe,aAAY;AAEjC,cACQ,MAAM,kBACN;AACJ,iBAAa;AACb,OAAI,MAAM,cACR,WAAU,WAAW,SAAS,CAAC,OAAO,QAAQ,UAAU,IAAI,CAAA;KAGhE,EACE,OAAO,QACT,CACF;;UArMU,QAAA,QAAQ,uBADhB,mBA6BM,OAAA;;IA3BH,IAAI,MAAA,QAAO;aACR;IAAJ,KAAI;IACH,OAAK,eAAE,aAAA,MAAY;IACpB,MAAK;IACJ,cAAU,CAAG,MAAA,oBAAmB,GAAG,QAAA,aAAS,cAAkB;IAC9D,mBAAiB,MAAA,oBAAmB,GAAG,MAAA,SAAQ,CAAE,UAAU;OAE5D,mBAmBM,OAAA,EAnBA,OAAK,eAAA,CAAG,MAAA,GAAE,CAAC,EAAC,QAAA,EAAW,MAAA,GAAE,CAAC,EAAE,QAAA,UAAS,CAAA,CAAA,KACzC,mBAAmD,OAAA;IAA7C,OAAK,eAAE,cAAA,MAAa;IAAG,OAAK,eAAE,YAAA,MAAW;kCAC/C,mBAgBQ,UAAA,MAAA,WAfkB,QAAA,UAAhB,MAAM,UAAK;wBADrB,mBAgBQ,SAAA;KAdL,KAAK;KACL,OAAK,eAAE,WAAW,KAAI,CAAA;QAEvB,mBAOE,SAAA;KANC,OAAK,eAAE,MAAA,GAAE,CAAC,EAAC,aAAA,CAAA;KACZ,MAAK;KACJ,MAAM,KAAA;KACN,UAAU,YAAY,KAAI;KAC1B,SAAS,YAAY,KAAI;KACzB,WAAM,WAAE,aAAa,QAAQ,KAAI;8BAEpC,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAE,CAAC,EAAC,aAAA,CAAA,KACf,WAAuD,KAAA,QAAA,WAAA,EAAhD,MAAM,QAAQ,KAAI,UAA8B,iCAAxB,SAAS,KAAI,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"segmented.vue_vue_type_script_setup_true_lang.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.vue"],"sourcesContent":["<template>\n <div\n v-if=\"options.length\"\n :id=\"inputId\"\n ref=\"segmentedRef\"\n :class=\"segmentedCls\"\n role=\"radiogroup\"\n :aria-label=\"!isLabeledByFormItem ? ariaLabel || 'segmented' : undefined\"\n :aria-labelledby=\"isLabeledByFormItem ? formItem!.labelId : undefined\"\n >\n <div :class=\"[ns.e('group'), ns.m(direction)]\">\n <div :style=\"selectedStyle\" :class=\"selectedCls\" />\n <label\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :class=\"getItemCls(item)\"\n >\n <input\n :class=\"ns.e('item-input')\"\n type=\"radio\"\n :name=\"name\"\n :disabled=\"getDisabled(item)\"\n :checked=\"getSelected(item)\"\n @change=\"handleChange($event, item)\"\n />\n <div :class=\"ns.e('item-label')\">\n <slot :item=\"item\">{{ getLabel(item) }}</slot>\n </div>\n </label>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends Option = Option\">\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useActiveElement, useResizeObserver } from '@vueuse/core'\nimport { useId, useNamespace } from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport { debugWarn, isObject } from '@element-plus/utils'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { defaultProps, segmentedEmits } from './segmented'\n\nimport type { Option } from './types'\nimport type { SegmentedProps } from './segmented'\n\ndefineOptions({\n name: 'ElSegmented',\n})\n\nconst props = withDefaults(defineProps<SegmentedProps<T>>(), {\n direction: 'horizontal',\n options: () => [],\n props: () => defaultProps,\n validateEvent: true,\n modelValue: undefined,\n disabled: undefined,\n})\nconst emit = defineEmits(segmentedEmits)\n\nconst ns = useNamespace('segmented')\nconst segmentedId = useId()\nconst segmentedSize = useFormSize()\nconst _disabled = useFormDisabled()\nconst { formItem } = useFormItem()\nconst { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: formItem,\n})\n\nconst segmentedRef = ref<HTMLElement | null>(null)\nconst activeElement = useActiveElement()\n\nconst state = reactive({\n isInit: false,\n width: 0,\n height: 0,\n translateX: 0,\n translateY: 0,\n focusVisible: false,\n})\n\nconst handleChange = (evt: Event, item: T) => {\n const value = getValue(item)\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n ;(evt.target as HTMLInputElement).checked = value === props.modelValue\n}\n\nconst aliasProps = computed(() => ({ ...defaultProps, ...props.props }))\n\nconst getValue = (item: T) => {\n return isObject(item) ? item[aliasProps.value.value] : item\n}\n\nconst getLabel = (item: T) => {\n return isObject(item) ? item[aliasProps.value.label] : item\n}\n\nconst getDisabled = (item: T | undefined) => {\n return !!(\n _disabled.value ||\n (isObject(item) ? item[aliasProps.value.disabled] : false)\n )\n}\n\nconst getSelected = (item: T) => {\n return props.modelValue === getValue(item)\n}\n\nconst getOption = (value: any) => {\n return props.options.find((item) => getValue(item) === value)\n}\n\nconst getItemCls = (item: T) => {\n return [\n ns.e('item'),\n ns.is('selected', getSelected(item)),\n ns.is('disabled', getDisabled(item)),\n ]\n}\n\nconst updateSelect = () => {\n if (!segmentedRef.value) return\n const selectedItem = segmentedRef.value.querySelector(\n '.is-selected'\n ) as HTMLElement\n const selectedItemInput = segmentedRef.value.querySelector(\n '.is-selected input'\n ) as HTMLElement\n if (!selectedItem || !selectedItemInput) {\n state.width = 0\n state.height = 0\n state.translateX = 0\n state.translateY = 0\n state.focusVisible = false\n return\n }\n state.isInit = true\n if (props.direction === 'vertical') {\n state.height = selectedItem.offsetHeight\n state.translateY = selectedItem.offsetTop\n } else {\n state.width = selectedItem.offsetWidth\n state.translateX = selectedItem.offsetLeft\n }\n try {\n // This will failed in test\n state.focusVisible = selectedItemInput.matches(':focus-visible')\n } catch {}\n}\n\nconst segmentedCls = computed(() => [\n ns.b(),\n ns.m(segmentedSize.value),\n ns.is('block', props.block),\n])\n\nconst selectedStyle = computed(() => ({\n width: props.direction === 'vertical' ? '100%' : `${state.width}px`,\n height: props.direction === 'vertical' ? `${state.height}px` : '100%',\n transform:\n props.direction === 'vertical'\n ? `translateY(${state.translateY}px)`\n : `translateX(${state.translateX}px)`,\n display: state.isInit ? 'block' : 'none',\n}))\n\nconst selectedCls = computed(() => [\n ns.e('item-selected'),\n ns.is('disabled', getDisabled(getOption(props.modelValue))),\n ns.is('focus-visible', state.focusVisible),\n])\n\nconst name = computed(() => {\n return props.name || segmentedId.value\n})\n\nuseResizeObserver(segmentedRef, updateSelect)\n\nwatch(activeElement, updateSelect)\n\nwatch(\n () => props.modelValue,\n () => {\n updateSelect()\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n },\n {\n flush: 'post',\n }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDA,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,KAAK,aAAa,YAAW;EACnC,MAAM,cAAc,OAAM;EAC1B,MAAM,gBAAgB,aAAY;EAClC,MAAM,YAAY,iBAAgB;EAClC,MAAM,EAAE,aAAa,aAAY;EACjC,MAAM,EAAE,SAAS,wBAAwB,mBAAmB,OAAO,EACjE,iBAAiB,UAClB,CAAA;EAED,MAAM,eAAe,IAAwB,KAAI;EACjD,MAAM,gBAAgB,kBAAiB;EAEvC,MAAM,QAAQ,SAAS;GACrB,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,cAAc;GACf,CAAA;EAED,MAAM,gBAAgB,KAAY,SAAY;GAC5C,MAAM,QAAQ,SAAS,KAAI;AAC3B,QAAK,oBAAoB,MAAK;AAC9B,QAAK,cAAc,MAAK;AACvB,GAAC,IAAI,OAA4B,UAAU,UAAU,MAAM;;EAG9D,MAAM,aAAa,gBAAgB;GAAE,GAAG;GAAc,GAAG,MAAM;GAAO,EAAC;EAEvE,MAAM,YAAY,SAAY;AAC5B,UAAO,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,SAAS;;EAGzD,MAAM,YAAY,SAAY;AAC5B,UAAO,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,SAAS;;EAGzD,MAAM,eAAe,SAAwB;AAC3C,UAAO,CAAC,EACN,UAAU,UACT,SAAS,KAAK,GAAG,KAAK,WAAW,MAAM,YAAY;;EAIxD,MAAM,eAAe,SAAY;AAC/B,UAAO,MAAM,eAAe,SAAS,KAAI;;EAG3C,MAAM,aAAa,UAAe;AAChC,UAAO,MAAM,QAAQ,MAAM,SAAS,SAAS,KAAK,KAAK,MAAK;;EAG9D,MAAM,cAAc,SAAY;AAC9B,UAAO;IACL,GAAG,EAAE,OAAO;IACZ,GAAG,GAAG,YAAY,YAAY,KAAK,CAAC;IACpC,GAAG,GAAG,YAAY,YAAY,KAAK,CAAC;IACtC;;EAGF,MAAM,qBAAqB;AACzB,OAAI,CAAC,aAAa,MAAO;GACzB,MAAM,eAAe,aAAa,MAAM,cACtC,eACD;GACD,MAAM,oBAAoB,aAAa,MAAM,cAC3C,qBACD;AACD,OAAI,CAAC,gBAAgB,CAAC,mBAAmB;AACvC,UAAM,QAAQ;AACd,UAAM,SAAS;AACf,UAAM,aAAa;AACnB,UAAM,aAAa;AACnB,UAAM,eAAe;AACrB;;AAEF,SAAM,SAAS;AACf,OAAI,MAAM,cAAc,YAAY;AAClC,UAAM,SAAS,aAAa;AAC5B,UAAM,aAAa,aAAa;UAC3B;AACL,UAAM,QAAQ,aAAa;AAC3B,UAAM,aAAa,aAAa;;AAElC,OAAI;AAEF,UAAM,eAAe,kBAAkB,QAAQ,iBAAgB;WACzD;;EAGV,MAAM,eAAe,eAAe;GAClC,GAAG,GAAG;GACN,GAAG,EAAE,cAAc,MAAM;GACzB,GAAG,GAAG,SAAS,MAAM,MAAM;GAC5B,CAAA;EAED,MAAM,gBAAgB,gBAAgB;GACpC,OAAO,MAAM,cAAc,aAAa,SAAS,GAAG,MAAM,MAAM;GAChE,QAAQ,MAAM,cAAc,aAAa,GAAG,MAAM,OAAO,MAAM;GAC/D,WACE,MAAM,cAAc,aAChB,cAAc,MAAM,WAAW,OAC/B,cAAc,MAAM,WAAW;GACrC,SAAS,MAAM,SAAS,UAAU;GACnC,EAAC;EAEF,MAAM,cAAc,eAAe;GACjC,GAAG,EAAE,gBAAgB;GACrB,GAAG,GAAG,YAAY,YAAY,UAAU,MAAM,WAAW,CAAC,CAAC;GAC3D,GAAG,GAAG,iBAAiB,MAAM,aAAa;GAC3C,CAAA;EAED,MAAM,OAAO,eAAe;AAC1B,UAAO,MAAM,QAAQ,YAAY;IAClC;AAED,oBAAkB,cAAc,aAAY;AAE5C,QAAM,eAAe,aAAY;AAEjC,cACQ,MAAM,kBACN;AACJ,iBAAa;AACb,OAAI,MAAM,cACR,WAAU,WAAW,SAAS,CAAC,OAAO,QAAQ,UAAU,IAAI,CAAA;KAGhE,EACE,OAAO,QACT,CACF;;UAlMU,QAAA,QAAQ,uBADhB,mBA6BM,OAAA;;IA3BH,IAAI,MAAA,QAAO;aACR;IAAJ,KAAI;IACH,OAAK,eAAE,aAAA,MAAY;IACpB,MAAK;IACJ,cAAU,CAAG,MAAA,oBAAmB,GAAG,QAAA,aAAS,cAAkB;IAC9D,mBAAiB,MAAA,oBAAmB,GAAG,MAAA,SAAQ,CAAE,UAAU;OAE5D,mBAmBM,OAAA,EAnBA,OAAK,eAAA,CAAG,MAAA,GAAE,CAAC,EAAC,QAAA,EAAW,MAAA,GAAE,CAAC,EAAE,QAAA,UAAS,CAAA,CAAA,KACzC,mBAAmD,OAAA;IAA7C,OAAK,eAAE,cAAA,MAAa;IAAG,OAAK,eAAE,YAAA,MAAW;kCAC/C,mBAgBQ,UAAA,MAAA,WAfkB,QAAA,UAAhB,MAAM,UAAK;wBADrB,mBAgBQ,SAAA;KAdL,KAAK;KACL,OAAK,eAAE,WAAW,KAAI,CAAA;QAEvB,mBAOE,SAAA;KANC,OAAK,eAAE,MAAA,GAAE,CAAC,EAAC,aAAA,CAAA;KACZ,MAAK;KACJ,MAAM,KAAA;KACN,UAAU,YAAY,KAAI;KAC1B,SAAS,YAAY,KAAI;KACzB,WAAM,WAAE,aAAa,QAAQ,KAAI;8BAEpC,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAE,CAAC,EAAC,aAAA,CAAA,KACf,WAA8C,KAAA,QAAA,WAAA,EAAjC,MAAI,QAA6B,iCAAxB,SAAS,KAAI,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"segmented2.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.vue"],"sourcesContent":["<template>\n <div\n v-if=\"options.length\"\n :id=\"inputId\"\n ref=\"segmentedRef\"\n :class=\"segmentedCls\"\n role=\"radiogroup\"\n :aria-label=\"!isLabeledByFormItem ? ariaLabel || 'segmented' : undefined\"\n :aria-labelledby=\"isLabeledByFormItem ? formItem!.labelId : undefined\"\n >\n <div :class=\"[ns.e('group'), ns.m(direction)]\">\n <div :style=\"selectedStyle\" :class=\"selectedCls\" />\n <label\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :class=\"getItemCls(item)\"\n >\n <input\n :class=\"ns.e('item-input')\"\n type=\"radio\"\n :name=\"name\"\n :disabled=\"getDisabled(item)\"\n :checked=\"getSelected(item)\"\n @change=\"handleChange($event, item)\"\n />\n <div :class=\"ns.e('item-label')\">\n <slot :item=\"intoAny(item)\">{{ getLabel(item) }}</slot>\n </div>\n </label>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useActiveElement, useResizeObserver } from '@vueuse/core'\nimport { useId, useNamespace } from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport { debugWarn, isObject } from '@element-plus/utils'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { defaultProps, segmentedEmits } from './segmented'\n\nimport type { Option } from './types'\nimport type { SegmentedProps } from './segmented'\n\ndefineOptions({\n name: 'ElSegmented',\n})\n\nconst props = withDefaults(defineProps<SegmentedProps>(), {\n direction: 'horizontal',\n options: () => [],\n props: () => defaultProps,\n validateEvent: true,\n modelValue: undefined,\n disabled: undefined,\n})\nconst emit = defineEmits(segmentedEmits)\n\nconst ns = useNamespace('segmented')\nconst segmentedId = useId()\nconst segmentedSize = useFormSize()\nconst _disabled = useFormDisabled()\nconst { formItem } = useFormItem()\nconst { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: formItem,\n})\n\nconst segmentedRef = ref<HTMLElement | null>(null)\nconst activeElement = useActiveElement()\n\nconst state = reactive({\n isInit: false,\n width: 0,\n height: 0,\n translateX: 0,\n translateY: 0,\n focusVisible: false,\n})\n\nconst handleChange = (evt: Event, item: Option) => {\n const value = getValue(item)\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n ;(evt.target as HTMLInputElement).checked = value === props.modelValue\n}\n\nconst aliasProps = computed(() => ({ ...defaultProps, ...props.props }))\n\n//FIXME: remove this when vue >=3.3\nconst intoAny = (item: any) => item\n\nconst getValue = (item: Option) => {\n return isObject(item) ? item[aliasProps.value.value] : item\n}\n\nconst getLabel = (item: Option) => {\n return isObject(item) ? item[aliasProps.value.label] : item\n}\n\nconst getDisabled = (item: Option | undefined) => {\n return !!(\n _disabled.value ||\n (isObject(item) ? item[aliasProps.value.disabled] : false)\n )\n}\n\nconst getSelected = (item: Option) => {\n return props.modelValue === getValue(item)\n}\n\nconst getOption = (value: any) => {\n return props.options.find((item) => getValue(item) === value)\n}\n\nconst getItemCls = (item: Option) => {\n return [\n ns.e('item'),\n ns.is('selected', getSelected(item)),\n ns.is('disabled', getDisabled(item)),\n ]\n}\n\nconst updateSelect = () => {\n if (!segmentedRef.value) return\n const selectedItem = segmentedRef.value.querySelector(\n '.is-selected'\n ) as HTMLElement\n const selectedItemInput = segmentedRef.value.querySelector(\n '.is-selected input'\n ) as HTMLElement\n if (!selectedItem || !selectedItemInput) {\n state.width = 0\n state.height = 0\n state.translateX = 0\n state.translateY = 0\n state.focusVisible = false\n return\n }\n state.isInit = true\n if (props.direction === 'vertical') {\n state.height = selectedItem.offsetHeight\n state.translateY = selectedItem.offsetTop\n } else {\n state.width = selectedItem.offsetWidth\n state.translateX = selectedItem.offsetLeft\n }\n try {\n // This will failed in test\n state.focusVisible = selectedItemInput.matches(':focus-visible')\n } catch {}\n}\n\nconst segmentedCls = computed(() => [\n ns.b(),\n ns.m(segmentedSize.value),\n ns.is('block', props.block),\n])\n\nconst selectedStyle = computed(() => ({\n width: props.direction === 'vertical' ? '100%' : `${state.width}px`,\n height: props.direction === 'vertical' ? `${state.height}px` : '100%',\n transform:\n props.direction === 'vertical'\n ? `translateY(${state.translateY}px)`\n : `translateX(${state.translateX}px)`,\n display: state.isInit ? 'block' : 'none',\n}))\n\nconst selectedCls = computed(() => [\n ns.e('item-selected'),\n ns.is('disabled', getDisabled(getOption(props.modelValue))),\n ns.is('focus-visible', state.focusVisible),\n])\n\nconst name = computed(() => {\n return props.name || segmentedId.value\n})\n\nuseResizeObserver(segmentedRef, updateSelect)\n\nwatch(activeElement, updateSelect)\n\nwatch(\n () => props.modelValue,\n () => {\n updateSelect()\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n },\n {\n flush: 'post',\n }\n)\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"segmented2.mjs","names":[],"sources":["../../../../../../packages/components/segmented/src/segmented.vue"],"sourcesContent":["<template>\n <div\n v-if=\"options.length\"\n :id=\"inputId\"\n ref=\"segmentedRef\"\n :class=\"segmentedCls\"\n role=\"radiogroup\"\n :aria-label=\"!isLabeledByFormItem ? ariaLabel || 'segmented' : undefined\"\n :aria-labelledby=\"isLabeledByFormItem ? formItem!.labelId : undefined\"\n >\n <div :class=\"[ns.e('group'), ns.m(direction)]\">\n <div :style=\"selectedStyle\" :class=\"selectedCls\" />\n <label\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :class=\"getItemCls(item)\"\n >\n <input\n :class=\"ns.e('item-input')\"\n type=\"radio\"\n :name=\"name\"\n :disabled=\"getDisabled(item)\"\n :checked=\"getSelected(item)\"\n @change=\"handleChange($event, item)\"\n />\n <div :class=\"ns.e('item-label')\">\n <slot :item=\"item\">{{ getLabel(item) }}</slot>\n </div>\n </label>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends Option = Option\">\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useActiveElement, useResizeObserver } from '@vueuse/core'\nimport { useId, useNamespace } from '@element-plus/hooks'\nimport {\n useFormDisabled,\n useFormItem,\n useFormItemInputId,\n useFormSize,\n} from '@element-plus/components/form'\nimport { debugWarn, isObject } from '@element-plus/utils'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'\nimport { defaultProps, segmentedEmits } from './segmented'\n\nimport type { Option } from './types'\nimport type { SegmentedProps } from './segmented'\n\ndefineOptions({\n name: 'ElSegmented',\n})\n\nconst props = withDefaults(defineProps<SegmentedProps<T>>(), {\n direction: 'horizontal',\n options: () => [],\n props: () => defaultProps,\n validateEvent: true,\n modelValue: undefined,\n disabled: undefined,\n})\nconst emit = defineEmits(segmentedEmits)\n\nconst ns = useNamespace('segmented')\nconst segmentedId = useId()\nconst segmentedSize = useFormSize()\nconst _disabled = useFormDisabled()\nconst { formItem } = useFormItem()\nconst { inputId, isLabeledByFormItem } = useFormItemInputId(props, {\n formItemContext: formItem,\n})\n\nconst segmentedRef = ref<HTMLElement | null>(null)\nconst activeElement = useActiveElement()\n\nconst state = reactive({\n isInit: false,\n width: 0,\n height: 0,\n translateX: 0,\n translateY: 0,\n focusVisible: false,\n})\n\nconst handleChange = (evt: Event, item: T) => {\n const value = getValue(item)\n emit(UPDATE_MODEL_EVENT, value)\n emit(CHANGE_EVENT, value)\n ;(evt.target as HTMLInputElement).checked = value === props.modelValue\n}\n\nconst aliasProps = computed(() => ({ ...defaultProps, ...props.props }))\n\nconst getValue = (item: T) => {\n return isObject(item) ? item[aliasProps.value.value] : item\n}\n\nconst getLabel = (item: T) => {\n return isObject(item) ? item[aliasProps.value.label] : item\n}\n\nconst getDisabled = (item: T | undefined) => {\n return !!(\n _disabled.value ||\n (isObject(item) ? item[aliasProps.value.disabled] : false)\n )\n}\n\nconst getSelected = (item: T) => {\n return props.modelValue === getValue(item)\n}\n\nconst getOption = (value: any) => {\n return props.options.find((item) => getValue(item) === value)\n}\n\nconst getItemCls = (item: T) => {\n return [\n ns.e('item'),\n ns.is('selected', getSelected(item)),\n ns.is('disabled', getDisabled(item)),\n ]\n}\n\nconst updateSelect = () => {\n if (!segmentedRef.value) return\n const selectedItem = segmentedRef.value.querySelector(\n '.is-selected'\n ) as HTMLElement\n const selectedItemInput = segmentedRef.value.querySelector(\n '.is-selected input'\n ) as HTMLElement\n if (!selectedItem || !selectedItemInput) {\n state.width = 0\n state.height = 0\n state.translateX = 0\n state.translateY = 0\n state.focusVisible = false\n return\n }\n state.isInit = true\n if (props.direction === 'vertical') {\n state.height = selectedItem.offsetHeight\n state.translateY = selectedItem.offsetTop\n } else {\n state.width = selectedItem.offsetWidth\n state.translateX = selectedItem.offsetLeft\n }\n try {\n // This will failed in test\n state.focusVisible = selectedItemInput.matches(':focus-visible')\n } catch {}\n}\n\nconst segmentedCls = computed(() => [\n ns.b(),\n ns.m(segmentedSize.value),\n ns.is('block', props.block),\n])\n\nconst selectedStyle = computed(() => ({\n width: props.direction === 'vertical' ? '100%' : `${state.width}px`,\n height: props.direction === 'vertical' ? `${state.height}px` : '100%',\n transform:\n props.direction === 'vertical'\n ? `translateY(${state.translateY}px)`\n : `translateX(${state.translateX}px)`,\n display: state.isInit ? 'block' : 'none',\n}))\n\nconst selectedCls = computed(() => [\n ns.e('item-selected'),\n ns.is('disabled', getDisabled(getOption(props.modelValue))),\n ns.is('focus-visible', state.focusVisible),\n])\n\nconst name = computed(() => {\n return props.name || segmentedId.value\n})\n\nuseResizeObserver(segmentedRef, updateSelect)\n\nwatch(activeElement, updateSelect)\n\nwatch(\n () => props.modelValue,\n () => {\n updateSelect()\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n },\n {\n flush: 'post',\n }\n)\n</script>\n"],"mappings":""}
@@ -1,13 +1,11 @@
1
1
  import { addClass, hasClass, removeClass } from "../../../../utils/dom/style.mjs";
2
+ import { isGreaterThan } from "../../../../utils/numbers.mjs";
2
3
  import { createTablePopper, getCell, getColumnByCell, removePopper } from "../util.mjs";
3
4
  import { TABLE_INJECTION_KEY } from "../tokens.mjs";
4
5
  import { debounce } from "lodash-unified";
5
6
  import { h, inject, ref } from "vue";
6
7
 
7
8
  //#region ../../packages/components/table/src/table-body/events-helper.ts
8
- function isGreaterThan(a, b, epsilon = .03) {
9
- return a - b > epsilon;
10
- }
11
9
  function useEvents(props) {
12
10
  const parent = inject(TABLE_INJECTION_KEY);
13
11
  const tooltipContent = ref("");
@@ -1 +1 @@
1
- {"version":3,"file":"events-helper.mjs","names":[],"sources":["../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { h, inject, ref } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport { addClass, hasClass, removeClass } from '@element-plus/utils'\nimport {\n createTablePopper,\n getCell,\n getColumnByCell,\n removePopper,\n} from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { TableBodyProps } from './defaults'\nimport type { TableOverflowTooltipOptions } from '../util'\nimport type { DefaultRow } from '../table/defaults'\n\nfunction isGreaterThan(a: number, b: number, epsilon = 0.03) {\n return a - b > epsilon\n}\n\nfunction useEvents<T extends DefaultRow>(props: Partial<TableBodyProps<T>>) {\n const parent = inject(TABLE_INJECTION_KEY)\n const tooltipContent = ref('')\n const tooltipTrigger = ref(h('div'))\n const handleEvent = (event: Event, row: T, name: string) => {\n const table = parent\n const cell = getCell(event)\n let column: TableColumnCtx<T> | null = null\n const namespace = table?.vnode.el?.dataset.prefix\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (column) {\n table?.emit(`cell-${name}`, row, column, cell, event)\n }\n }\n table?.emit(`row-${name}`, row, column, event)\n }\n const handleDoubleClick = (event: Event, row: T) => {\n handleEvent(event, row, 'dblclick')\n }\n const handleClick = (event: Event, row: T) => {\n props.store?.commit('setCurrentRow', row)\n handleEvent(event, row, 'click')\n }\n const handleContextMenu = (event: Event, row: T) => {\n handleEvent(event, row, 'contextmenu')\n }\n const handleMouseEnter = debounce((index: number) => {\n props.store?.commit('setHoverRow', index)\n }, 30)\n const handleMouseLeave = debounce(() => {\n props.store?.commit('setHoverRow', null)\n }, 30)\n const getPadding = (el: HTMLElement) => {\n const style = window.getComputedStyle(el, null)\n const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0\n const paddingRight = Number.parseInt(style.paddingRight, 10) || 0\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n return {\n left: paddingLeft,\n right: paddingRight,\n top: paddingTop,\n bottom: paddingBottom,\n }\n }\n\n const toggleRowClassByCell = (\n rowSpan: number,\n event: MouseEvent,\n toggle: (el: Element, cls: string) => void\n ) => {\n let node: Node | null | undefined = (event?.target as Element | null)\n ?.parentNode\n while (rowSpan > 1) {\n node = node?.nextSibling\n if (!node || node.nodeName !== 'TR') break\n toggle(node as Element, 'hover-row hover-fixed-row')\n rowSpan--\n }\n }\n\n const handleCellMouseEnter = (\n event: MouseEvent,\n row: T,\n tooltipOptions: TableOverflowTooltipOptions\n ) => {\n if (!parent) return\n const table = parent\n const cell = getCell(event)\n const namespace = table?.vnode.el?.dataset.prefix\n let column: TableColumnCtx<T> | null = null\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (!column) {\n return\n }\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, addClass)\n }\n const hoverState = (table.hoverState = {\n cell,\n column: column as any,\n row,\n })\n table?.emit(\n 'cell-mouse-enter',\n hoverState.row,\n hoverState.column,\n hoverState.cell,\n event\n )\n }\n\n if (!tooltipOptions) {\n if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n return\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n const cellChild = (event.target as HTMLElement).querySelector(\n '.cell'\n ) as HTMLElement\n if (\n !(\n hasClass(cellChild, `${namespace}-tooltip`) &&\n cellChild.childNodes.length &&\n cellChild.textContent?.trim()\n )\n ) {\n return\n }\n // use range width instead of scrollWidth to determine whether the text is overflowing\n // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n const range = document.createRange()\n range.setStart(cellChild, 0)\n range.setEnd(cellChild, cellChild.childNodes.length)\n /** detail: https://github.com/element-plus/element-plus/issues/10790\n * What went wrong?\n * UI > Browser > Zoom, In Blink/WebKit, getBoundingClientRect() sometimes returns inexact values, probably due to lost precision during internal calculations. In the example above:\n * - Expected: 188\n * - Actual: 188.00000762939453\n */\n const { width: rangeWidth, height: rangeHeight } =\n range.getBoundingClientRect()\n const { width: cellChildWidth, height: cellChildHeight } =\n cellChild.getBoundingClientRect()\n\n const { top, left, right, bottom } = getPadding(cellChild)\n const horizontalPadding = left + right\n const verticalPadding = top + bottom\n if (\n isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) ||\n isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) ||\n // When using a high-resolution screen, it is possible that a returns cellChild.scrollWidth value of 1921 and\n // cellChildWidth returns a value of 1920.994140625. #16856 #16673\n isGreaterThan(cellChild.scrollWidth, cellChildWidth)\n ) {\n createTablePopper(\n tooltipOptions,\n (cell?.innerText || cell?.textContent) ?? '',\n row,\n column,\n cell,\n table\n )\n } else if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n }\n const handleCellMouseLeave = (event: MouseEvent) => {\n const cell = getCell(event)\n if (!cell) return\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, removeClass)\n }\n const oldHoverState = parent?.hoverState\n parent?.emit(\n 'cell-mouse-leave',\n oldHoverState?.row,\n oldHoverState?.column,\n oldHoverState?.cell,\n event\n )\n }\n\n return {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger,\n }\n}\n\nexport default useEvents\n"],"mappings":"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"}
1
+ {"version":3,"file":"events-helper.mjs","names":[],"sources":["../../../../../../../packages/components/table/src/table-body/events-helper.ts"],"sourcesContent":["import { h, inject, ref } from 'vue'\nimport { debounce } from 'lodash-unified'\nimport {\n addClass,\n hasClass,\n isGreaterThan,\n removeClass,\n} from '@element-plus/utils'\nimport {\n createTablePopper,\n getCell,\n getColumnByCell,\n removePopper,\n} from '../util'\nimport { TABLE_INJECTION_KEY } from '../tokens'\n\nimport type { TableColumnCtx } from '../table-column/defaults'\nimport type { TableBodyProps } from './defaults'\nimport type { TableOverflowTooltipOptions } from '../util'\nimport type { DefaultRow } from '../table/defaults'\n\nfunction useEvents<T extends DefaultRow>(props: Partial<TableBodyProps<T>>) {\n const parent = inject(TABLE_INJECTION_KEY)\n const tooltipContent = ref('')\n const tooltipTrigger = ref(h('div'))\n const handleEvent = (event: Event, row: T, name: string) => {\n const table = parent\n const cell = getCell(event)\n let column: TableColumnCtx<T> | null = null\n const namespace = table?.vnode.el?.dataset.prefix\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (column) {\n table?.emit(`cell-${name}`, row, column, cell, event)\n }\n }\n table?.emit(`row-${name}`, row, column, event)\n }\n const handleDoubleClick = (event: Event, row: T) => {\n handleEvent(event, row, 'dblclick')\n }\n const handleClick = (event: Event, row: T) => {\n props.store?.commit('setCurrentRow', row)\n handleEvent(event, row, 'click')\n }\n const handleContextMenu = (event: Event, row: T) => {\n handleEvent(event, row, 'contextmenu')\n }\n const handleMouseEnter = debounce((index: number) => {\n props.store?.commit('setHoverRow', index)\n }, 30)\n const handleMouseLeave = debounce(() => {\n props.store?.commit('setHoverRow', null)\n }, 30)\n const getPadding = (el: HTMLElement) => {\n const style = window.getComputedStyle(el, null)\n const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0\n const paddingRight = Number.parseInt(style.paddingRight, 10) || 0\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n return {\n left: paddingLeft,\n right: paddingRight,\n top: paddingTop,\n bottom: paddingBottom,\n }\n }\n\n const toggleRowClassByCell = (\n rowSpan: number,\n event: MouseEvent,\n toggle: (el: Element, cls: string) => void\n ) => {\n let node: Node | null | undefined = (event?.target as Element | null)\n ?.parentNode\n while (rowSpan > 1) {\n node = node?.nextSibling\n if (!node || node.nodeName !== 'TR') break\n toggle(node as Element, 'hover-row hover-fixed-row')\n rowSpan--\n }\n }\n\n const handleCellMouseEnter = (\n event: MouseEvent,\n row: T,\n tooltipOptions: TableOverflowTooltipOptions\n ) => {\n if (!parent) return\n const table = parent\n const cell = getCell(event)\n const namespace = table?.vnode.el?.dataset.prefix\n let column: TableColumnCtx<T> | null = null\n if (cell) {\n column = getColumnByCell(\n {\n columns: props.store?.states.columns.value ?? [],\n },\n cell,\n namespace\n )\n if (!column) {\n return\n }\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, addClass)\n }\n const hoverState = (table.hoverState = {\n cell,\n column: column as any,\n row,\n })\n table?.emit(\n 'cell-mouse-enter',\n hoverState.row,\n hoverState.column,\n hoverState.cell,\n event\n )\n }\n\n if (!tooltipOptions) {\n if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n return\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n const cellChild = (event.target as HTMLElement).querySelector(\n '.cell'\n ) as HTMLElement\n if (\n !(\n hasClass(cellChild, `${namespace}-tooltip`) &&\n cellChild.childNodes.length &&\n cellChild.textContent?.trim()\n )\n ) {\n return\n }\n // use range width instead of scrollWidth to determine whether the text is overflowing\n // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n const range = document.createRange()\n range.setStart(cellChild, 0)\n range.setEnd(cellChild, cellChild.childNodes.length)\n /** detail: https://github.com/element-plus/element-plus/issues/10790\n * What went wrong?\n * UI > Browser > Zoom, In Blink/WebKit, getBoundingClientRect() sometimes returns inexact values, probably due to lost precision during internal calculations. In the example above:\n * - Expected: 188\n * - Actual: 188.00000762939453\n */\n const { width: rangeWidth, height: rangeHeight } =\n range.getBoundingClientRect()\n const { width: cellChildWidth, height: cellChildHeight } =\n cellChild.getBoundingClientRect()\n\n const { top, left, right, bottom } = getPadding(cellChild)\n const horizontalPadding = left + right\n const verticalPadding = top + bottom\n if (\n isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) ||\n isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) ||\n // When using a high-resolution screen, it is possible that a returns cellChild.scrollWidth value of 1921 and\n // cellChildWidth returns a value of 1920.994140625. #16856 #16673\n isGreaterThan(cellChild.scrollWidth, cellChildWidth)\n ) {\n createTablePopper(\n tooltipOptions,\n (cell?.innerText || cell?.textContent) ?? '',\n row,\n column,\n cell,\n table\n )\n } else if (removePopper?.trigger === cell) {\n removePopper?.()\n }\n }\n const handleCellMouseLeave = (event: MouseEvent) => {\n const cell = getCell(event)\n if (!cell) return\n if (cell.rowSpan > 1) {\n toggleRowClassByCell(cell.rowSpan, event, removeClass)\n }\n const oldHoverState = parent?.hoverState\n parent?.emit(\n 'cell-mouse-leave',\n oldHoverState?.row,\n oldHoverState?.column,\n oldHoverState?.cell,\n event\n )\n }\n\n return {\n handleDoubleClick,\n handleClick,\n handleContextMenu,\n handleMouseEnter,\n handleMouseLeave,\n handleCellMouseEnter,\n handleCellMouseLeave,\n tooltipContent,\n tooltipTrigger,\n }\n}\n\nexport default useEvents\n"],"mappings":";;;;;;;;AAqBA,SAAS,UAAgC,OAAmC;CAC1E,MAAM,SAAS,OAAO,oBAAoB;CAC1C,MAAM,iBAAiB,IAAI,GAAG;CAC9B,MAAM,iBAAiB,IAAI,EAAE,MAAM,CAAC;CACpC,MAAM,eAAe,OAAc,KAAQ,SAAiB;EAC1D,MAAM,QAAQ;EACd,MAAM,OAAO,QAAQ,MAAM;EAC3B,IAAI,SAAmC;EACvC,MAAM,YAAY,OAAO,MAAM,IAAI,QAAQ;AAC3C,MAAI,MAAM;AACR,YAAS,gBACP,EACE,SAAS,MAAM,OAAO,OAAO,QAAQ,SAAS,EAAE,EACjD,EACD,MACA,UACD;AACD,OAAI,OACF,QAAO,KAAK,QAAQ,QAAQ,KAAK,QAAQ,MAAM,MAAM;;AAGzD,SAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,MAAM;;CAEhD,MAAM,qBAAqB,OAAc,QAAW;AAClD,cAAY,OAAO,KAAK,WAAW;;CAErC,MAAM,eAAe,OAAc,QAAW;AAC5C,QAAM,OAAO,OAAO,iBAAiB,IAAI;AACzC,cAAY,OAAO,KAAK,QAAQ;;CAElC,MAAM,qBAAqB,OAAc,QAAW;AAClD,cAAY,OAAO,KAAK,cAAc;;CAExC,MAAM,mBAAmB,UAAU,UAAkB;AACnD,QAAM,OAAO,OAAO,eAAe,MAAM;IACxC,GAAG;CACN,MAAM,mBAAmB,eAAe;AACtC,QAAM,OAAO,OAAO,eAAe,KAAK;IACvC,GAAG;CACN,MAAM,cAAc,OAAoB;EACtC,MAAM,QAAQ,OAAO,iBAAiB,IAAI,KAAK;AAK/C,SAAO;GACL,MALkB,OAAO,SAAS,MAAM,aAAa,GAAG,IAAI;GAM5D,OALmB,OAAO,SAAS,MAAM,cAAc,GAAG,IAAI;GAM9D,KALiB,OAAO,SAAS,MAAM,YAAY,GAAG,IAAI;GAM1D,QALoB,OAAO,SAAS,MAAM,eAAe,GAAG,IAAI;GAMjE;;CAGH,MAAM,wBACJ,SACA,OACA,WACG;EACH,IAAI,QAAiC,OAAO,SACxC;AACJ,SAAO,UAAU,GAAG;AAClB,UAAO,MAAM;AACb,OAAI,CAAC,QAAQ,KAAK,aAAa,KAAM;AACrC,UAAO,MAAiB,4BAA4B;AACpD;;;CAIJ,MAAM,wBACJ,OACA,KACA,mBACG;AACH,MAAI,CAAC,OAAQ;EACb,MAAM,QAAQ;EACd,MAAM,OAAO,QAAQ,MAAM;EAC3B,MAAM,YAAY,OAAO,MAAM,IAAI,QAAQ;EAC3C,IAAI,SAAmC;AACvC,MAAI,MAAM;AACR,YAAS,gBACP,EACE,SAAS,MAAM,OAAO,OAAO,QAAQ,SAAS,EAAE,EACjD,EACD,MACA,UACD;AACD,OAAI,CAAC,OACH;AAEF,OAAI,KAAK,UAAU,EACjB,sBAAqB,KAAK,SAAS,OAAO,SAAS;GAErD,MAAM,aAAc,MAAM,aAAa;IACrC;IACQ;IACR;IACD;AACD,UAAO,KACL,oBACA,WAAW,KACX,WAAW,QACX,WAAW,MACX,MACD;;AAGH,MAAI,CAAC,gBAAgB;AACnB,OAAI,cAAc,YAAY,KAC5B,iBAAgB;AAElB;;EAIF,MAAM,YAAa,MAAM,OAAuB,cAC9C,QACD;AACD,MACE,EACE,SAAS,WAAW,GAAG,UAAU,UAAU,IAC3C,UAAU,WAAW,UACrB,UAAU,aAAa,MAAM,EAG/B;EAIF,MAAM,QAAQ,SAAS,aAAa;AACpC,QAAM,SAAS,WAAW,EAAE;AAC5B,QAAM,OAAO,WAAW,UAAU,WAAW,OAAO;;;;;;;EAOpD,MAAM,EAAE,OAAO,YAAY,QAAQ,gBACjC,MAAM,uBAAuB;EAC/B,MAAM,EAAE,OAAO,gBAAgB,QAAQ,oBACrC,UAAU,uBAAuB;EAEnC,MAAM,EAAE,KAAK,MAAM,OAAO,WAAW,WAAW,UAAU;EAC1D,MAAM,oBAAoB,OAAO;EACjC,MAAM,kBAAkB,MAAM;AAC9B,MACE,cAAc,aAAa,mBAAmB,eAAe,IAC7D,cAAc,cAAc,iBAAiB,gBAAgB,IAG7D,cAAc,UAAU,aAAa,eAAe,CAEpD,mBACE,iBACC,MAAM,aAAa,MAAM,gBAAgB,IAC1C,KACA,QACA,MACA,MACD;WACQ,cAAc,YAAY,KACnC,iBAAgB;;CAGpB,MAAM,wBAAwB,UAAsB;EAClD,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,CAAC,KAAM;AACX,MAAI,KAAK,UAAU,EACjB,sBAAqB,KAAK,SAAS,OAAO,YAAY;EAExD,MAAM,gBAAgB,QAAQ;AAC9B,UAAQ,KACN,oBACA,eAAe,KACf,eAAe,QACf,eAAe,MACf,MACD;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}
@@ -1,10 +1,10 @@
1
1
  import { EVENT_CODE } from "../../../constants/aria.mjs";
2
2
  import { getEventCode } from "../../../utils/dom/event.mjs";
3
3
  import { rAF } from "../../../utils/raf.mjs";
4
- import { capitalize } from "../../../utils/strings.mjs";
5
4
  import { throwError } from "../../../utils/error.mjs";
6
5
  import { buildProps, definePropType } from "../../../utils/vue/props/runtime.mjs";
7
6
  import { mutable } from "../../../utils/typescript.mjs";
7
+ import { isGreaterThan } from "../../../utils/numbers.mjs";
8
8
  import { useNamespace } from "../../../hooks/use-namespace/index.mjs";
9
9
  import { ElIcon } from "../../icon/index.mjs";
10
10
  import useWheel from "../../virtual-list/src/hooks/use-wheel.mjs";
@@ -99,17 +99,17 @@ const TabNav = /* @__PURE__ */ defineComponent({
99
99
  };
100
100
  const scrollPrev = () => {
101
101
  if (!navScroll$.value) return;
102
- const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];
102
+ const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
103
103
  const currentOffset = navOffset.value;
104
104
  if (!currentOffset) return;
105
105
  navOffset.value = currentOffset > containerSize ? currentOffset - containerSize : 0;
106
106
  };
107
107
  const scrollNext = () => {
108
108
  if (!navScroll$.value || !nav$.value) return;
109
- const navSize = nav$.value[`offset${capitalize(sizeName.value)}`];
110
- const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`];
109
+ const navSize = nav$.value.getBoundingClientRect()[sizeName.value];
110
+ const containerSize = navScroll$.value.getBoundingClientRect()[sizeName.value];
111
111
  const currentOffset = navOffset.value;
112
- if (navSize - currentOffset <= containerSize) return;
112
+ if (!isGreaterThan(navSize - currentOffset, containerSize)) return;
113
113
  navOffset.value = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;
114
114
  };
115
115
  const scrollToActiveTab = async () => {
@@ -121,12 +121,15 @@ const TabNav = /* @__PURE__ */ defineComponent({
121
121
  const navScroll = navScroll$.value;
122
122
  const activeTabBounding = activeTab.getBoundingClientRect();
123
123
  const navScrollBounding = navScroll.getBoundingClientRect();
124
- const maxOffset = isHorizontal.value ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;
124
+ const navScrollLeft = navScrollBounding.left + 1;
125
+ const navScrollRight = navScrollBounding.right - 1;
126
+ const navBounding = nav.getBoundingClientRect();
127
+ const maxOffset = isHorizontal.value ? navBounding.width - navScrollBounding.width : navBounding.height - navScrollBounding.height;
125
128
  const currentOffset = navOffset.value;
126
129
  let newOffset = currentOffset;
127
130
  if (isHorizontal.value) {
128
- if (activeTabBounding.left < navScrollBounding.left) newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);
129
- if (activeTabBounding.right > navScrollBounding.right) newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;
131
+ if (activeTabBounding.left < navScrollLeft) newOffset = currentOffset - (navScrollLeft - activeTabBounding.left);
132
+ if (activeTabBounding.right > navScrollRight) newOffset = currentOffset + activeTabBounding.right - navScrollRight;
130
133
  } else {
131
134
  if (activeTabBounding.top < navScrollBounding.top) newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);
132
135
  if (activeTabBounding.bottom > navScrollBounding.bottom) newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);
@@ -143,8 +146,8 @@ const TabNav = /* @__PURE__ */ defineComponent({
143
146
  if (containerSize < navSize) {
144
147
  scrollable.value = scrollable.value || {};
145
148
  scrollable.value.prev = currentOffset;
146
- scrollable.value.next = currentOffset + containerSize < navSize;
147
- if (navSize - currentOffset < containerSize) navOffset.value = navSize - containerSize;
149
+ scrollable.value.next = isGreaterThan(navSize, currentOffset + containerSize);
150
+ if (isGreaterThan(containerSize, navSize - currentOffset)) navOffset.value = navSize - containerSize;
148
151
  } else {
149
152
  scrollable.value = false;
150
153
  if (currentOffset > 0) navOffset.value = 0;