parent
6672378d51
commit
5ea506913f
|
@ -43,10 +43,26 @@ const TriStateCheckboxProps = [
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const TriStateCheckboxSlots = [
|
||||||
|
{
|
||||||
|
name: 'checkicon',
|
||||||
|
description: 'Custom check icon template.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'uncheckicon',
|
||||||
|
description: 'Custom uncheck icon template.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'nullableicon',
|
||||||
|
description: 'Custom nullable icon template.'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
tristatecheckbox: {
|
tristatecheckbox: {
|
||||||
name: 'TriStateCheckbox',
|
name: 'TriStateCheckbox',
|
||||||
description: 'TriStateCheckbox is used to select either "true", "false" or "null" as the value.',
|
description: 'TriStateCheckbox is used to select either "true", "false" or "null" as the value.',
|
||||||
props: TriStateCheckboxProps
|
props: TriStateCheckboxProps,
|
||||||
|
slots: TriStateCheckboxSlots
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
* @module tristatecheckbox
|
* @module tristatecheckbox
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
import { InputHTMLAttributes } from 'vue';
|
import { InputHTMLAttributes, VNode } from 'vue';
|
||||||
import { ClassComponent, GlobalComponentConstructor, Nullable } from '../ts-helpers';
|
import { ClassComponent, GlobalComponentConstructor, Nullable } from '../ts-helpers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,7 +49,20 @@ export interface TriStateCheckboxProps {
|
||||||
/**
|
/**
|
||||||
* Defines valid slots in TriStateCheckbox component.
|
* Defines valid slots in TriStateCheckbox component.
|
||||||
*/
|
*/
|
||||||
export interface TriStateCheckboxSlots {}
|
export interface TriStateCheckboxSlots {
|
||||||
|
/**
|
||||||
|
* Custom check icon template.
|
||||||
|
*/
|
||||||
|
checkicon(): VNode[];
|
||||||
|
/**
|
||||||
|
* Custom uncheck icon template.
|
||||||
|
*/
|
||||||
|
uncheckicon(): VNode[];
|
||||||
|
/**
|
||||||
|
* Custom nullable icon template.
|
||||||
|
*/
|
||||||
|
nullableicon(): VNode[];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines valid emits in TriStateCheckbox component.
|
* Defines valid emits in TriStateCheckbox component.
|
||||||
|
|
|
@ -18,12 +18,21 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="p-sr-only" aria-live="polite">{{ ariaValueLabel }}</span>
|
<span class="p-sr-only" aria-live="polite">{{ ariaValueLabel }}</span>
|
||||||
<div ref="box" :class="['p-checkbox-box', { 'p-highlight': modelValue != null, 'p-disabled': disabled, 'p-focus': focused }]">
|
<div ref="box" :class="['p-checkbox-box', { 'p-highlight': modelValue != null, 'p-disabled': disabled, 'p-focus': focused }]">
|
||||||
<span :class="['p-checkbox-icon', icon]"></span>
|
<slot v-if="modelValue === true" name="checkicon">
|
||||||
|
<component :is="'CheckIcon'" class="p-checkbox-icon" />
|
||||||
|
</slot>
|
||||||
|
<slot v-else-if="modelValue === false" name="uncheckicon">
|
||||||
|
<component :is="'TimesIcon'" class="p-checkbox-icon" />
|
||||||
|
</slot>
|
||||||
|
<slot v-else name="nullableicon" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import CheckIcon from 'primevue/icon/check';
|
||||||
|
import TimesIcon from 'primevue/icon/times';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TriStateCheckbox',
|
name: 'TriStateCheckbox',
|
||||||
emits: ['click', 'update:modelValue', 'change', 'keydown', 'focus', 'blur'],
|
emits: ['click', 'update:modelValue', 'change', 'keydown', 'focus', 'blur'],
|
||||||
|
@ -136,6 +145,10 @@ export default {
|
||||||
ariaValueLabel() {
|
ariaValueLabel() {
|
||||||
return this.modelValue ? this.$primevue.config.locale.aria.trueLabel : this.modelValue === false ? this.$primevue.config.locale.aria.falseLabel : this.$primevue.config.locale.aria.nullLabel;
|
return this.modelValue ? this.$primevue.config.locale.aria.trueLabel : this.modelValue === false ? this.$primevue.config.locale.aria.falseLabel : this.$primevue.config.locale.aria.nullLabel;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
CheckIcon: CheckIcon,
|
||||||
|
TimesIcon: TimesIcon
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue