44 class =" pf-v5-screen-reader"
55 type =" checkbox"
66 :name =" name"
7- :checked =" managedSelected "
7+ :checked =" selected "
88 :disabled =" selectableDisabled"
99 tabindex =" -1"
1010 @change =" emit('change', $event)"
1414 v-bind =" {...ouiaProps, ...$attrs}"
1515 :class =" [styles.card, ...selectableModifiers, {
1616 [styles.modifiers.compact]: compact,
17- [styles.modifiers.expanded]: managedExpanded ,
17+ [styles.modifiers.expanded]: expanded ,
1818 [styles.modifiers.flat]: flat,
1919 [styles.modifiers.rounded]: rounded,
2020 [styles.modifiers.displayLg]: large && !compact,
2929</template >
3030
3131<script lang="ts">
32- export const CardExpandedKey = Symbol (' CardExpandedKey' ) as InjectionKey <Ref <boolean >>;
32+ export const CardExpandedKey = Symbol (' CardExpandedKey' ) as InjectionKey <Ref <boolean | undefined >>;
3333export const CardExpandableKey = Symbol (' CardExpandableKey' ) as InjectionKey <ComputedRef <boolean >>;
3434
3535export interface Props extends OUIAProps , /* @vue-ignore */ Omit <HTMLAttributes , ' tabindex' > {
@@ -54,9 +54,6 @@ export interface Props extends OUIAProps, /* @vue-ignore */ Omit<HTMLAttributes,
5454 /** Name of the optional hidden input that tracks the selected status */
5555 name? : string ;
5656
57- /** Modifies the card to include selected styling */
58- selected? : boolean ,
59-
6057 /** Modifies the card to include flat styling */
6158 flat? : boolean ;
6259
@@ -74,16 +71,12 @@ export interface Props extends OUIAProps, /* @vue-ignore */ Omit<HTMLAttributes,
7471
7572 /** Modifies the card to be expandable */
7673 expandable? : boolean ;
77-
78- /** Flag indicating if a card is expanded. Modifies the card to be expandable. */
79- expanded? : boolean ;
8074}
8175 </script >
8276
8377<script lang="ts" setup>
8478import styles from ' @patternfly/react-styles/css/components/Card/card' ;
85- import { provide , computed , type Component , type InjectionKey , type Ref , type ComputedRef , type HTMLAttributes } from ' vue' ;
86- import { useManagedProp } from ' ../../use' ;
79+ import { provide , computed , type Component , type InjectionKey , type ComputedRef , type HTMLAttributes , type Ref } from ' vue' ;
8780import { isDefined } from ' @vueuse/shared' ;
8881import { useOUIAProps , type OUIAProps } from ' ../../helpers/ouia' ;
8982
@@ -99,11 +92,15 @@ const props = withDefaults(defineProps<Props>(), {
9992});
10093const ouiaProps = useOUIAProps ({id: props .ouiaId , safe: props .ouiaSafe });
10194
95+ /** Flag indicating if a card is expanded. Modifies the card to be expandable. */
96+ const expanded = defineModel <boolean >(' expanded' );
97+
98+ /** Modifies the card to include selected styling */
99+ const selected = defineModel <boolean >(' selected' , { default: false });
100+
102101const emit = defineEmits <{
103102 (name : ' click' , e : PointerEvent ): void ;
104103 (name : ' change' , e : Event ): void ;
105- (name : ' update:expanded' , value : boolean ): void ;
106- (name : ' update:selected' , value : boolean ): void ;
107104}>();
108105
109106defineSlots <{
@@ -112,26 +109,24 @@ defineSlots<{
112109 badge? : (props ? : Record <never , never >) => any ;
113110}>();
114111
115- const managedExpanded = useManagedProp (' expanded' , false );
116- const managedSelected = useManagedProp (' selected' , false );
117- provide (CardExpandedKey , managedExpanded );
118- provide (CardExpandableKey , computed (() => props .expandable || isDefined (props .expanded )));
112+ provide (CardExpandedKey , expanded );
113+ provide (CardExpandableKey , computed (() => props .expandable || isDefined (expanded .value )));
119114
120115const selectableModifiers = computed (() => {
121116 if (props .selectableDisabled ) {
122117 return [styles .modifiers .nonSelectableRaised ];
123118 }
124119 if (props .selectableRaised ) {
125- return [styles .modifiers .selectableRaised , managedSelected .value && styles .modifiers .selectedRaised ];
120+ return [styles .modifiers .selectableRaised , selected .value && styles .modifiers .selectedRaised ];
126121 }
127122 if (props .selectable ) {
128- return [styles .modifiers .selectable , managedSelected .value && styles .modifiers .selected ];
123+ return [styles .modifiers .selectable , selected .value && styles .modifiers .selected ];
129124 }
130125 return [];
131126});
132127
133128function onClick(e : PointerEvent ) {
134- managedSelected .value = ! managedSelected .value ;
129+ selected .value = ! selected .value ;
135130 emit (' click' , e );
136131}
137132 </script >
0 commit comments