Files
element-plus/packages/components/segmented/src/segmented.ts
dopamine 0ca1570aa1 chore: upgrade to Vue 3.5 (#22096)
* chore: upgrade deps

* chore: replace __ExtractPublicPropTypes with ExtractPublicPropTypes

* fix: get rid of type errors

* fix: resolve test errors with @vue/test-utils v2.4.6

* fix: resolve test errors with Vue 3.5.22

* ci: set pnpm flag

* chore: update the Vue peer dependency version

* Apply suggestion from @tolking

Co-authored-by: qiang <qw13131wang@gmail.com>

* docs: update example code

Co-authored-by: warmthsea <2586244885@qq.com>

* chore: remove csstype (#22487)

* chore: fix merge code type error

* chore: fix test:ssr error

- Cannot read properties of undefined (reading 'getSSRProps')

* chore: fix typecheck:vitest error

* chore: update pnpm yaml file

* test: fix collapse accordion error

* chore: update deps

* chore: fix type error

* chore: lock file

* chore: sync change

sync with the remove of vue macro

* refactor: use computed instead of eagerComputed

* fix: timeline.test.tsx typecheck

* chore: clean lock file

try dont throw CodeFactor issues in ci

did:
- rm pnpm-lock.yaml
- rm -rf ./**/node_modules
- pnpm store prune
- pnpm cache delete
- pnpm install

Also stay in 3.1.0 for vue-tsc in order to avoid the warnings of
template refs, see https://github.com/vuejs/language-tools/issues/5815

* chore: format code

---------

Co-authored-by: Dsaquel <291874700n@gmail.com>
Co-authored-by: qiang <qw13131wang@gmail.com>
Co-authored-by: warmthsea <2586244885@qq.com>
Co-authored-by: Noblet Ouways <91417411+Dsaquel@users.noreply.github.com>
Co-authored-by: sea <45450994+warmthsea@users.noreply.github.com>
Co-authored-by: btea <2356281422@qq.com>
2025-12-16 09:34:03 +08:00

98 lines
2.2 KiB
TypeScript

import {
buildProps,
definePropType,
isBoolean,
isNumber,
isString,
} from '@element-plus/utils'
import { useAriaProps, useSizeProp } from '@element-plus/hooks'
import { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@element-plus/constants'
import type { Option } from './types'
import type { ExtractPropTypes, ExtractPublicPropTypes } from 'vue'
import type Segmented from './segmented.vue'
export interface Props {
label?: string
value?: string
disabled?: string
}
export const defaultProps: Required<Props> = {
label: 'label',
value: 'value',
disabled: 'disabled',
}
export const segmentedProps = buildProps({
direction: {
type: definePropType<'vertical' | 'horizontal'>(String),
default: 'horizontal',
},
/**
* @description options of segmented
*/
options: {
type: definePropType<Option[]>(Array),
default: () => [],
},
/**
* @description binding value
*/
modelValue: {
type: [String, Number, Boolean],
default: undefined,
},
/**
* @description configuration options, see the following table
*/
props: {
type: definePropType<Props>(Object),
default: () => defaultProps,
},
/**
* @description fit width of parent content
*/
block: Boolean,
/**
* @description size of component
*/
size: useSizeProp,
/**
* @description whether segmented is disabled
*/
disabled: {
type: Boolean,
default: undefined,
},
/**
* @description whether to trigger form validation
*/
validateEvent: {
type: Boolean,
default: true,
},
/**
* @description native input id
*/
id: String,
/**
* @description native `name` attribute
*/
name: String,
...useAriaProps(['ariaLabel']),
})
export type SegmentedProps = ExtractPropTypes<typeof segmentedProps>
export type SegmentedPropsPublic = ExtractPublicPropTypes<typeof segmentedProps>
export const segmentedEmits = {
[UPDATE_MODEL_EVENT]: (val: any) =>
isString(val) || isNumber(val) || isBoolean(val),
[CHANGE_EVENT]: (val: any) =>
isString(val) || isNumber(val) || isBoolean(val),
}
export type SegmentedEmits = typeof segmentedEmits
export type SegmentedInstance = InstanceType<typeof Segmented> & unknown