UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 21.7 kB
{"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","clamp","genericComponent","getDecimals","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","modelValue","Number","min","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","step","VNumberInput","name","props","emits","val","setup","_ref","slots","_model","model","get","value","set","isNaN","vTextFieldRef","stepDecimals","modelDecimals","form","controlsDisabled","disabled","readonly","isReadonly","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","clampModel","toggleUpDown","increment","arguments","length","undefined","decimals","Math","toFixed","e","stopPropagation","onBeforeinput","data","existingTxt","target","selectionStart","selectionEnd","potentialNewInputVal","slice","test","preventDefault","onKeydown","includes","key","ctrlKey","onControlMousedown","inputText","_","textFieldProps","filterProps","incrementControlNode","_createVNode","flat","height","size","icon","decrementControlNode","decrement","controlNode","dividerNode","appendInnerControl","reverse","_Fragment","hasAppendInner","prependInnerControl","hasPrependInner","_mergeProps","$event","class","style","_len","args","Array","_key","_len2","_key2"],"sources":["../../../src/labs/VNumberInput/VNumberInput.tsx"],"sourcesContent":["// Styles\nimport './VNumberInput.sass'\n\n// Components\nimport { VBtn } from '../../components/VBtn'\nimport { VDefaultsProvider } from '../../components/VDefaultsProvider'\nimport { VDivider } from '../../components/VDivider'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref } from 'vue'\nimport { clamp, genericComponent, getDecimals, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\ntype ControlSlot = {\n click: (e: MouseEvent) => void\n}\n\ntype VNumberInputSlots = Omit<VTextFieldSlots, 'default'> & {\n increment: ControlSlot\n decrement: ControlSlot\n}\n\ntype ControlVariant = 'default' | 'stacked' | 'split'\n\nconst makeVNumberInputProps = propsFactory({\n controlVariant: {\n type: String as PropType<ControlVariant>,\n default: 'default',\n },\n inset: Boolean,\n hideInput: Boolean,\n modelValue: {\n type: Number as PropType<Number | null>,\n default: null,\n },\n min: {\n type: Number,\n default: Number.MIN_SAFE_INTEGER,\n },\n max: {\n type: Number,\n default: Number.MAX_SAFE_INTEGER,\n },\n step: {\n type: Number,\n default: 1,\n },\n\n ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon']),\n}, 'VNumberInput')\n\nexport const VNumberInput = genericComponent<VNumberInputSlots>()({\n name: 'VNumberInput',\n\n props: {\n ...makeVNumberInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: number) => true,\n },\n\n setup (props, { slots }) {\n const _model = useProxiedModel(props, 'modelValue')\n\n const model = computed({\n get: () => _model.value,\n set (val) {\n if (val === null) {\n _model.value = null\n return\n }\n\n if (!isNaN(+val) && +val <= props.max && +val >= props.min) {\n _model.value = +val\n }\n },\n })\n\n const vTextFieldRef = ref<VTextField | undefined>()\n\n const stepDecimals = computed(() => getDecimals(props.step))\n const modelDecimals = computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0)\n\n const form = useForm()\n const controlsDisabled = computed(() => (\n props.disabled || props.readonly || form?.isReadonly.value\n ))\n\n const canIncrease = computed(() => {\n if (controlsDisabled.value) return false\n return (model.value ?? 0) as number + props.step <= props.max\n })\n const canDecrease = computed(() => {\n if (controlsDisabled.value) return false\n return (model.value ?? 0) as number - props.step >= props.min\n })\n\n const controlVariant = computed(() => {\n return props.hideInput ? 'stacked' : props.controlVariant\n })\n\n const incrementIcon = computed(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n const decrementIcon = computed(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n const controlNodeSize = computed(() => controlVariant.value === 'split' ? 'default' : 'small')\n const controlNodeDefaultHeight = computed(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n const incrementSlotProps = computed(() => ({ click: onClickUp }))\n\n const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n onMounted(() => {\n if (!props.readonly && !props.disabled) {\n clampModel()\n }\n })\n\n function toggleUpDown (increment = true) {\n if (controlsDisabled.value) return\n if (model.value == null) {\n model.value = clamp(0, props.min, props.max)\n return\n }\n\n const decimals = Math.max(modelDecimals.value, stepDecimals.value)\n if (increment) {\n if (canIncrease.value) model.value = +((((model.value as number) + props.step).toFixed(decimals)))\n } else {\n if (canDecrease.value) model.value = +((((model.value as number) - props.step).toFixed(decimals)))\n }\n }\n\n function onClickUp (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown()\n }\n\n function onClickDown (e: MouseEvent) {\n e.stopPropagation()\n toggleUpDown(false)\n }\n\n function onBeforeinput (e: InputEvent) {\n if (!e.data) return\n const existingTxt = (e.target as HTMLInputElement)?.value\n const selectionStart = (e.target as HTMLInputElement)?.selectionStart\n const selectionEnd = (e.target as HTMLInputElement)?.selectionEnd\n const potentialNewInputVal =\n existingTxt\n ? existingTxt.slice(0, selectionStart as number | undefined) + e.data + existingTxt.slice(selectionEnd as number | undefined)\n : e.data\n // Only numbers, \"-\", \".\" are allowed\n // AND \"-\", \".\" are allowed only once\n // AND \"-\" is only allowed at the start\n if (!/^-?(\\d+(\\.\\d*)?|(\\.\\d+)|\\d*|\\.)$/.test(potentialNewInputVal)) {\n e.preventDefault()\n }\n }\n\n async function onKeydown (e: KeyboardEvent) {\n if (\n ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) ||\n e.ctrlKey\n ) return\n\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n e.preventDefault()\n clampModel()\n // _model is controlled, so need to wait until props['modelValue'] is updated\n await nextTick()\n if (e.key === 'ArrowDown') {\n toggleUpDown(false)\n } else {\n toggleUpDown()\n }\n }\n }\n\n function onControlMousedown (e: MouseEvent) {\n e.stopPropagation()\n }\n\n function clampModel () {\n if (!vTextFieldRef.value) return\n const inputText = vTextFieldRef.value.value\n if (inputText && !isNaN(+inputText)) {\n model.value = clamp(+(inputText), props.min, props.max)\n } else {\n model.value = null\n }\n }\n\n useRender(() => {\n const { modelValue: _, ...textFieldProps } = VTextField.filterProps(props)\n\n function incrementControlNode () {\n return !slots.increment ? (\n <VBtn\n disabled={ !canIncrease.value }\n flat\n key=\"increment-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"increment-btn\"\n icon={ incrementIcon.value }\n onClick={ onClickUp }\n onMousedown={ onControlMousedown }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n />\n ) : (\n <VDefaultsProvider\n key=\"increment-defaults\"\n defaults={{\n VBtn: {\n disabled: !canIncrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: incrementIcon.value,\n },\n }}\n >\n { slots.increment(incrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function decrementControlNode () {\n return !slots.decrement ? (\n <VBtn\n disabled={ !canDecrease.value }\n flat\n key=\"decrement-btn\"\n height={ controlNodeDefaultHeight.value }\n name=\"decrement-btn\"\n icon={ decrementIcon.value }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n onClick={ onClickDown }\n onMousedown={ onControlMousedown }\n />\n ) : (\n <VDefaultsProvider\n key=\"decrement-defaults\"\n defaults={{\n VBtn: {\n disabled: !canDecrease.value,\n flat: true,\n height: controlNodeDefaultHeight.value,\n size: controlNodeSize.value,\n icon: decrementIcon.value,\n },\n }}\n >\n { slots.decrement(decrementSlotProps.value) }\n </VDefaultsProvider>\n )\n }\n\n function controlNode () {\n return (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider\n vertical={ controlVariant.value !== 'stacked' }\n />\n\n { incrementControlNode() }\n </div>\n )\n }\n\n function dividerNode () {\n return !props.hideInput && !props.inset ? <VDivider vertical /> : undefined\n }\n\n const appendInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n <VDivider vertical />\n\n { incrementControlNode() }\n </div>\n ) : (!props.reverse\n ? <>{ dividerNode() }{ controlNode() }</>\n : undefined)\n\n const hasAppendInner = slots['append-inner'] || appendInnerControl\n\n const prependInnerControl =\n controlVariant.value === 'split'\n ? (\n <div class=\"v-number-input__control\">\n { decrementControlNode() }\n\n <VDivider vertical />\n </div>\n ) : (props.reverse\n ? <>{ controlNode() }{ dividerNode() }</>\n : undefined)\n\n const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n v-model={ model.value }\n onBeforeinput={ onBeforeinput }\n onChange={ clampModel }\n onKeydown={ onKeydown }\n class={[\n 'v-number-input',\n {\n 'v-number-input--default': controlVariant.value === 'default',\n 'v-number-input--hide-input': props.hideInput,\n 'v-number-input--inset': props.inset,\n 'v-number-input--reverse': props.reverse,\n 'v-number-input--split': controlVariant.value === 'split',\n 'v-number-input--stacked': controlVariant.value === 'stacked',\n },\n props.class,\n ]}\n { ...textFieldProps }\n style={ props.style }\n inputmode=\"decimal\"\n >\n {{\n ...slots,\n 'append-inner': hasAppendInner ? (...args) => (\n <>\n { slots['append-inner']?.(...args) }\n { appendInnerControl }\n </>\n ) : undefined,\n 'prepend-inner': hasPrependInner ? (...args) => (\n <>\n { prependInnerControl }\n { slots['prepend-inner']?.(...args) }\n </>\n ) : undefined,\n }}\n </VTextField>\n )\n })\n\n return forwardRefs({}, vTextFieldRef)\n },\n})\n\nexport type VNumberInput = InstanceType<typeof VNumberInput>\n"],"mappings":"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","ignoreList":[]}