primevue-mirror/components/lib/inputnumber/BaseInputNumber.vue

291 lines
7.0 KiB
Vue

<script>
import BaseComponent from 'primevue/basecomponent';
import { useStyle } from 'primevue/usestyle';
const styles = `
@layer primevue {
.p-inputnumber {
display: inline-flex;
}
.p-inputnumber-button {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
}
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button .p-button-label,
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button .p-button-label {
display: none;
}
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-up {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
padding: 0;
}
.p-inputnumber-buttons-stacked .p-inputnumber-input {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.p-inputnumber-buttons-stacked .p-button.p-inputnumber-button-down {
border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-left-radius: 0;
padding: 0;
}
.p-inputnumber-buttons-stacked .p-inputnumber-button-group {
display: flex;
flex-direction: column;
}
.p-inputnumber-buttons-stacked .p-inputnumber-button-group .p-button.p-inputnumber-button {
flex: 1 1 auto;
}
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-up {
order: 3;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.p-inputnumber-buttons-horizontal .p-inputnumber-input {
order: 2;
border-radius: 0;
}
.p-inputnumber-buttons-horizontal .p-button.p-inputnumber-button-down {
order: 1;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.p-inputnumber-buttons-vertical {
flex-direction: column;
}
.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-up {
order: 1;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
width: 100%;
}
.p-inputnumber-buttons-vertical .p-inputnumber-input {
order: 2;
border-radius: 0;
text-align: center;
}
.p-inputnumber-buttons-vertical .p-button.p-inputnumber-button-down {
order: 3;
border-top-left-radius: 0;
border-top-right-radius: 0;
width: 100%;
}
.p-inputnumber-input {
flex: 1 1 auto;
}
.p-fluid .p-inputnumber {
width: 100%;
}
.p-fluid .p-inputnumber .p-inputnumber-input {
width: 1%;
}
.p-fluid .p-inputnumber-buttons-vertical .p-inputnumber-input {
width: 100%;
}
}
`;
const classes = {
root: ({ instance, props }) => [
'p-inputnumber p-component p-inputwrapper',
{
'p-inputwrapper-filled': instance.filled,
'p-inputwrapper-focus': instance.focused,
'p-inputnumber-buttons-stacked': props.showButtons && props.buttonLayout === 'stacked',
'p-inputnumber-buttons-horizontal': props.showButtons && props.buttonLayout === 'horizontal',
'p-inputnumber-buttons-vertical': props.showButtons && props.buttonLayout === 'vertical'
}
],
input: 'p-inputnumber-input',
buttonGroup: 'p-inputnumber-button-group',
incrementButton: ({ instance, props }) => [
'p-inputnumber-button p-inputnumber-button-up',
{
'p-disabled': props.showButtons && props.max !== null && instance.maxBoundry()
}
],
decrementButton: ({ instance, props }) => [
'p-inputnumber-button p-inputnumber-button-down',
{
'p-disabled': props.showButtons && props.min !== null && instance.minBoundry()
}
]
};
const { load: loadStyle } = useStyle(styles, { name: 'inputnumber', manual: true });
export default {
name: 'BaseInputNumber',
extends: BaseComponent,
props: {
modelValue: {
type: Number,
default: null
},
format: {
type: Boolean,
default: true
},
showButtons: {
type: Boolean,
default: false
},
buttonLayout: {
type: String,
default: 'stacked'
},
incrementButtonClass: {
type: String,
default: null
},
decrementButtonClass: {
type: String,
default: null
},
incrementButtonIcon: {
type: String,
default: undefined
},
decrementButtonIcon: {
type: String,
default: undefined
},
locale: {
type: String,
default: undefined
},
localeMatcher: {
type: String,
default: undefined
},
mode: {
type: String,
default: 'decimal'
},
prefix: {
type: String,
default: null
},
suffix: {
type: String,
default: null
},
currency: {
type: String,
default: undefined
},
currencyDisplay: {
type: String,
default: undefined
},
useGrouping: {
type: Boolean,
default: true
},
minFractionDigits: {
type: Number,
default: undefined
},
maxFractionDigits: {
type: Number,
default: undefined
},
min: {
type: Number,
default: null
},
max: {
type: Number,
default: null
},
step: {
type: Number,
default: 1
},
allowEmpty: {
type: Boolean,
default: true
},
highlightOnFocus: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
},
placeholder: {
type: String,
default: null
},
inputId: {
type: String,
default: null
},
inputClass: {
type: [String, Object],
default: null
},
inputStyle: {
type: Object,
default: null
},
inputProps: {
type: null,
default: null
},
incrementButtonProps: {
type: null,
default: null
},
decrementButtonProps: {
type: null,
default: null
},
'aria-labelledby': {
type: String,
default: null
},
'aria-label': {
type: String,
default: null
}
},
css: {
classes,
loadStyle
},
provide() {
return {
$parentInstance: this
};
}
};
</script>