vuetify 3.7.14 → 3.7.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/json/attributes.json +3550 -3550
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +162 -162
  4. package/dist/json/tags.json +3 -3
  5. package/dist/json/web-types.json +6475 -6452
  6. package/dist/vuetify-labs.css +5395 -5391
  7. package/dist/vuetify-labs.d.ts +453 -215
  8. package/dist/vuetify-labs.esm.js +254 -151
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +253 -150
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +3635 -3635
  13. package/dist/vuetify.d.ts +389 -209
  14. package/dist/vuetify.esm.js +105 -70
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +104 -69
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +229 -227
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +15 -6
  22. package/lib/components/VAutocomplete/index.d.mts +23 -8
  23. package/lib/components/VBadge/VBadge.mjs +2 -2
  24. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  25. package/lib/components/VBtn/VBtn.mjs +6 -3
  26. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  27. package/lib/components/VBtn/index.d.mts +15 -6
  28. package/lib/components/VCard/VCard.mjs +12 -3
  29. package/lib/components/VCard/VCard.mjs.map +1 -1
  30. package/lib/components/VCard/VCardItem.mjs +11 -4
  31. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  32. package/lib/components/VCard/index.d.mts +75 -30
  33. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  34. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  35. package/lib/components/VChip/VChip.mjs +6 -3
  36. package/lib/components/VChip/VChip.mjs.map +1 -1
  37. package/lib/components/VChip/index.d.mts +15 -6
  38. package/lib/components/VCombobox/index.d.mts +23 -8
  39. package/lib/components/VDataIterator/index.d.mts +2 -2
  40. package/lib/components/VDataTable/composables/headers.mjs +3 -1
  41. package/lib/components/VDataTable/composables/headers.mjs.map +1 -1
  42. package/lib/components/VDataTable/composables/paginate.mjs +2 -2
  43. package/lib/components/VDataTable/composables/paginate.mjs.map +1 -1
  44. package/lib/components/VDataTable/index.d.mts +34 -34
  45. package/lib/components/VDataTable/types.mjs.map +1 -1
  46. package/lib/components/VDatePicker/VDatePickerMonth.mjs +12 -21
  47. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  48. package/lib/components/VDatePicker/index.d.mts +3 -3
  49. package/lib/components/VDialog/index.d.mts +21 -6
  50. package/lib/components/VFab/index.d.mts +15 -6
  51. package/lib/components/VList/VListItem.mjs +13 -5
  52. package/lib/components/VList/VListItem.mjs.map +1 -1
  53. package/lib/components/VList/index.d.mts +32 -14
  54. package/lib/components/VMenu/index.d.mts +21 -6
  55. package/lib/components/VOtpInput/VOtpInput.mjs +1 -1
  56. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  57. package/lib/components/VOverlay/VOverlay.mjs +10 -1
  58. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  59. package/lib/components/VOverlay/index.d.mts +6 -0
  60. package/lib/components/VPagination/VPagination.mjs +3 -3
  61. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  62. package/lib/components/VParallax/VParallax.mjs +1 -1
  63. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  64. package/lib/components/VRating/VRating.mjs +1 -1
  65. package/lib/components/VRating/VRating.mjs.map +1 -1
  66. package/lib/components/VSelect/index.d.mts +23 -8
  67. package/lib/components/VSlider/slider.mjs +2 -1
  68. package/lib/components/VSlider/slider.mjs.map +1 -1
  69. package/lib/components/VSnackbar/index.d.mts +21 -6
  70. package/lib/components/VSparkline/VBarline.mjs +1 -1
  71. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  72. package/lib/components/VTabs/index.d.mts +39 -24
  73. package/lib/components/VTextarea/VTextarea.mjs +2 -2
  74. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  75. package/lib/components/VTooltip/index.d.mts +21 -6
  76. package/lib/components/index.d.mts +333 -153
  77. package/lib/composables/stack.mjs +2 -2
  78. package/lib/composables/stack.mjs.map +1 -1
  79. package/lib/composables/validation.mjs +2 -2
  80. package/lib/composables/validation.mjs.map +1 -1
  81. package/lib/entry-bundler.mjs +1 -1
  82. package/lib/framework.mjs +1 -1
  83. package/lib/index.d.mts +56 -56
  84. package/lib/labs/VDateInput/VDateInput.mjs +5 -4
  85. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  86. package/lib/labs/VDateInput/index.d.mts +10 -10
  87. package/lib/labs/VFileUpload/VFileUpload.css +5 -1
  88. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -2
  89. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  90. package/lib/labs/VFileUpload/VFileUpload.sass +4 -0
  91. package/lib/labs/VFileUpload/_variables.scss +1 -1
  92. package/lib/labs/VFileUpload/index.d.mts +32 -14
  93. package/lib/labs/VNumberInput/VNumberInput.mjs +60 -24
  94. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  95. package/lib/labs/VNumberInput/hold.mjs +31 -0
  96. package/lib/labs/VNumberInput/hold.mjs.map +1 -0
  97. package/lib/labs/VNumberInput/index.d.mts +1 -7
  98. package/lib/labs/VSnackbarQueue/index.d.mts +21 -6
  99. package/lib/labs/VTimePicker/VTimePicker.mjs +30 -31
  100. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  101. package/lib/labs/VTimePicker/VTimePickerControls.mjs +14 -13
  102. package/lib/labs/VTimePicker/VTimePickerControls.mjs.map +1 -1
  103. package/lib/labs/VTimePicker/index.d.mts +35 -13
  104. package/lib/labs/VTimePicker/shared.mjs +2 -0
  105. package/lib/labs/VTimePicker/shared.mjs.map +1 -0
  106. package/lib/labs/VTreeview/VTreeviewItem.mjs +11 -4
  107. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  108. package/lib/labs/VTreeview/index.d.mts +46 -22
  109. package/lib/labs/components.d.mts +143 -70
  110. package/lib/locale/adapters/vuetify.mjs +1 -1
  111. package/lib/locale/adapters/vuetify.mjs.map +1 -1
  112. package/lib/locale/af.mjs +42 -42
  113. package/lib/locale/af.mjs.map +1 -1
  114. package/lib/locale/az.mjs +7 -7
  115. package/lib/locale/az.mjs.map +1 -1
  116. package/lib/locale/bg.mjs +7 -7
  117. package/lib/locale/bg.mjs.map +1 -1
  118. package/lib/locale/ca.mjs +25 -25
  119. package/lib/locale/ca.mjs.map +1 -1
  120. package/lib/locale/ckb.mjs +29 -29
  121. package/lib/locale/ckb.mjs.map +1 -1
  122. package/lib/locale/cs.mjs +13 -13
  123. package/lib/locale/cs.mjs.map +1 -1
  124. package/lib/locale/da.mjs +22 -22
  125. package/lib/locale/da.mjs.map +1 -1
  126. package/lib/locale/el.mjs +41 -41
  127. package/lib/locale/el.mjs.map +1 -1
  128. package/lib/locale/es.mjs +26 -26
  129. package/lib/locale/es.mjs.map +1 -1
  130. package/lib/locale/et.mjs +29 -29
  131. package/lib/locale/et.mjs.map +1 -1
  132. package/lib/locale/fa.mjs +5 -5
  133. package/lib/locale/fa.mjs.map +1 -1
  134. package/lib/locale/fi.mjs +22 -22
  135. package/lib/locale/fi.mjs.map +1 -1
  136. package/lib/locale/fr.mjs +6 -6
  137. package/lib/locale/fr.mjs.map +1 -1
  138. package/lib/locale/he.mjs +29 -29
  139. package/lib/locale/he.mjs.map +1 -1
  140. package/lib/locale/hr.mjs +28 -28
  141. package/lib/locale/hr.mjs.map +1 -1
  142. package/lib/locale/hu.mjs +10 -10
  143. package/lib/locale/hu.mjs.map +1 -1
  144. package/lib/locale/id.mjs +30 -30
  145. package/lib/locale/id.mjs.map +1 -1
  146. package/lib/locale/it.mjs +7 -7
  147. package/lib/locale/it.mjs.map +1 -1
  148. package/lib/locale/ja.mjs +9 -9
  149. package/lib/locale/ja.mjs.map +1 -1
  150. package/lib/locale/km.mjs +6 -6
  151. package/lib/locale/km.mjs.map +1 -1
  152. package/lib/locale/ko.mjs +27 -27
  153. package/lib/locale/ko.mjs.map +1 -1
  154. package/lib/locale/lt.mjs +5 -5
  155. package/lib/locale/lt.mjs.map +1 -1
  156. package/lib/locale/lv.mjs +33 -33
  157. package/lib/locale/lv.mjs.map +1 -1
  158. package/lib/locale/nl.mjs +10 -10
  159. package/lib/locale/nl.mjs.map +1 -1
  160. package/lib/locale/no.mjs +11 -11
  161. package/lib/locale/no.mjs.map +1 -1
  162. package/lib/locale/pl.mjs +7 -7
  163. package/lib/locale/pl.mjs.map +1 -1
  164. package/lib/locale/pt.mjs +11 -11
  165. package/lib/locale/pt.mjs.map +1 -1
  166. package/lib/locale/ro.mjs +9 -9
  167. package/lib/locale/ro.mjs.map +1 -1
  168. package/lib/locale/ru.mjs +6 -6
  169. package/lib/locale/ru.mjs.map +1 -1
  170. package/lib/locale/sk.mjs +5 -5
  171. package/lib/locale/sk.mjs.map +1 -1
  172. package/lib/locale/sl.mjs +4 -4
  173. package/lib/locale/sl.mjs.map +1 -1
  174. package/lib/locale/sr-Cyrl.mjs +30 -30
  175. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  176. package/lib/locale/sr-Latn.mjs +28 -28
  177. package/lib/locale/sr-Latn.mjs.map +1 -1
  178. package/lib/locale/sv.mjs +17 -17
  179. package/lib/locale/sv.mjs.map +1 -1
  180. package/lib/locale/th.mjs +30 -30
  181. package/lib/locale/th.mjs.map +1 -1
  182. package/lib/locale/tr.mjs +31 -31
  183. package/lib/locale/tr.mjs.map +1 -1
  184. package/lib/locale/uk.mjs +29 -29
  185. package/lib/locale/uk.mjs.map +1 -1
  186. package/lib/locale/vi.mjs +28 -28
  187. package/lib/locale/vi.mjs.map +1 -1
  188. package/lib/locale/zh-Hans.mjs +31 -31
  189. package/lib/locale/zh-Hans.mjs.map +1 -1
  190. package/lib/locale/zh-Hant.mjs +31 -31
  191. package/lib/locale/zh-Hant.mjs.map +1 -1
  192. package/lib/util/animation.mjs +8 -8
  193. package/lib/util/animation.mjs.map +1 -1
  194. package/lib/util/helpers.mjs +6 -4
  195. package/lib/util/helpers.mjs.map +1 -1
  196. package/package.json +7 -2
  197. package/lib/labs/VTimePicker/SelectingTimes.mjs +0 -10
  198. package/lib/labs/VTimePicker/SelectingTimes.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"VFileUpload.mjs","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","IconValue","useLocale","useProxiedModel","onMounted","onUnmounted","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","setup","_ref","attrs","slots","t","densityClasses","model","isArray","dragOver","vSheetRef","inputRef","value","$el","addEventListener","onDragOver","onDrop","removeEventListener","e","preventDefault","stopImmediatePropagation","onDragLeave","from","dataTransfer","array","slice","file","some","f","push","onClick","click","onClickRemove","index","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","inputNode","_createVNode","_mergeProps","target","_Fragment","undefined","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { onMounted, onUnmounted, ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n )\n\n const dragOver = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n\n onMounted(() => {\n vSheetRef.value?.$el.addEventListener('dragover', onDragOver)\n vSheetRef.value?.$el.addEventListener('drop', onDrop)\n })\n\n onUnmounted(() => {\n vSheetRef.value?.$el.removeEventListener('dragover', onDragOver)\n vSheetRef.value?.$el.removeEventListener('drop', onDrop)\n })\n\n function onDragOver (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n dragOver.value = true\n }\n\n function onDragLeave (e: DragEvent) {\n e.preventDefault()\n dragOver.value = false\n }\n\n function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n dragOver.value = false\n\n const files = Array.from(e.dataTransfer?.files ?? [])\n\n if (!files.length) return\n\n if (!props.multiple) {\n model.value = [files[0]]\n\n return\n }\n\n const array = model.value.slice()\n\n for (const file of files) {\n if (!array.some(f => f.name === file.name)) {\n array.push(file)\n }\n }\n\n model.value = array\n }\n\n function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n model.value = model.value.filter((_, i) => i !== index)\n\n if (model.value.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': dragOver.value,\n },\n densityClasses.value,\n ]}\n onDragleave={ onDragLeave }\n onDragover={ onDragOver }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n model-value={ dragOver.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VFileUpload.mjs","names":["VFileUploadItem","VBtn","VDefaultsProvider","makeVDividerProps","VDivider","VIcon","VOverlay","makeVSheetProps","VSheet","makeDelayProps","makeDensityProps","useDensity","IconValue","useLocale","useProxiedModel","onMounted","onUnmounted","ref","shallowRef","filterInputAttrs","genericComponent","pick","propsFactory","useRender","wrapInArray","makeVFileUploadProps","browseText","type","String","default","dividerText","title","subtitle","icon","modelValue","Array","Object","validator","val","every","v","clearable","Boolean","disabled","hideBrowse","multiple","scrim","showSize","name","length","VFileUpload","inheritAttrs","props","emits","files","setup","_ref","attrs","slots","t","densityClasses","model","isArray","dragOver","vSheetRef","inputRef","value","$el","addEventListener","onDragOver","onDrop","removeEventListener","e","preventDefault","stopImmediatePropagation","onDragLeave","from","dataTransfer","array","slice","file","some","f","push","onClick","click","onClickRemove","index","newValue","filter","_","i","hasTitle","hasIcon","hasBrowse","browse","density","cardProps","filterProps","dividerProps","rootAttrs","inputAttrs","inputNode","_createVNode","_mergeProps","target","_Fragment","undefined","divider","readonly","size","text","variant","input","map","slotProps","onClick:remove","item"],"sources":["../../../src/labs/VFileUpload/VFileUpload.tsx"],"sourcesContent":["// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { onMounted, onUnmounted, ref, shallowRef } from 'vue'\nimport { filterInputAttrs, genericComponent, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nexport type VFileUploadSlots = {\n browse: {\n props: { onClick: (e: MouseEvent) => void }\n }\n default: never\n icon: never\n input: {\n inputNode: VNode\n }\n item: {\n file: File\n props: { 'onClick:remove': () => void }\n }\n title: never\n divider: never\n}\n\nexport const makeVFileUploadProps = propsFactory({\n browseText: {\n type: String,\n default: '$vuetify.fileUpload.browse',\n },\n dividerText: {\n type: String,\n default: '$vuetify.fileUpload.divider',\n },\n title: {\n type: String,\n default: '$vuetify.fileUpload.title',\n },\n subtitle: String,\n icon: {\n type: IconValue,\n default: '$upload',\n },\n modelValue: {\n type: [Array, Object] as PropType<File[] | File>,\n default: null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n clearable: Boolean,\n disabled: Boolean,\n hideBrowse: Boolean,\n multiple: Boolean,\n scrim: {\n type: [Boolean, String],\n default: true,\n },\n showSize: Boolean,\n name: String,\n\n ...makeDelayProps(),\n ...makeDensityProps(),\n ...pick(makeVDividerProps({\n length: 150,\n }), ['length', 'thickness', 'opacity']),\n ...makeVSheetProps(),\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n name: 'VFileUpload',\n\n inheritAttrs: false,\n\n props: makeVFileUploadProps(),\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const { densityClasses } = useDensity(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n )\n\n const dragOver = shallowRef(false)\n const vSheetRef = ref<InstanceType<typeof VSheet> | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n\n onMounted(() => {\n vSheetRef.value?.$el.addEventListener('dragover', onDragOver)\n vSheetRef.value?.$el.addEventListener('drop', onDrop)\n })\n\n onUnmounted(() => {\n vSheetRef.value?.$el.removeEventListener('dragover', onDragOver)\n vSheetRef.value?.$el.removeEventListener('drop', onDrop)\n })\n\n function onDragOver (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n dragOver.value = true\n }\n\n function onDragLeave (e: DragEvent) {\n e.preventDefault()\n dragOver.value = false\n }\n\n function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n dragOver.value = false\n\n const files = Array.from(e.dataTransfer?.files ?? [])\n\n if (!files.length) return\n\n if (!props.multiple) {\n model.value = [files[0]]\n\n return\n }\n\n const array = model.value.slice()\n\n for (const file of files) {\n if (!array.some(f => f.name === file.name)) {\n array.push(file)\n }\n }\n\n model.value = array\n }\n\n function onClick () {\n inputRef.value?.click()\n }\n\n function onClickRemove (index: number) {\n const newValue = model.value.filter((_, i) => i !== index)\n model.value = newValue\n\n if (newValue.length > 0 || !inputRef.value) return\n\n inputRef.value.value = ''\n }\n\n useRender(() => {\n const hasTitle = !!(slots.title || props.title)\n const hasIcon = !!(slots.icon || props.icon)\n const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n const cardProps = VSheet.filterProps(props)\n const dividerProps = VDivider.filterProps(props)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n name={ props.name }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n { ...inputAttrs }\n />\n )\n\n return (\n <>\n <VSheet\n ref={ vSheetRef }\n { ...cardProps }\n class={[\n 'v-file-upload',\n {\n 'v-file-upload--clickable': !hasBrowse,\n 'v-file-upload--disabled': props.disabled,\n 'v-file-upload--dragging': dragOver.value,\n },\n densityClasses.value,\n ]}\n onDragleave={ onDragLeave }\n onDragover={ onDragOver }\n onDrop={ onDrop }\n onClick={ !hasBrowse ? onClick : undefined }\n { ...rootAttrs }\n >\n { hasIcon && (\n <div key=\"icon\" class=\"v-file-upload-icon\">\n { !slots.icon ? (\n <VIcon\n key=\"icon-icon\"\n icon={ props.icon }\n />\n ) : (\n <VDefaultsProvider\n key=\"icon-defaults\"\n defaults={{\n VIcon: {\n icon: props.icon,\n },\n }}\n >\n { slots.icon() }\n </VDefaultsProvider>\n )}\n </div>\n )}\n\n { hasTitle && (\n <div key=\"title\" class=\"v-file-upload-title\">\n { slots.title?.() ?? t(props.title) }\n </div>\n )}\n\n { props.density === 'default' && (\n <>\n <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n { slots.divider?.() ?? (\n <VDivider { ...dividerProps }>\n { t(props.dividerText) }\n </VDivider>\n )}\n </div>\n\n { hasBrowse && (\n <>\n { !slots.browse ? (\n <VBtn\n readonly={ props.disabled }\n size=\"large\"\n text={ t(props.browseText) }\n variant=\"tonal\"\n onClick={ onClick }\n />\n ) : (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n readonly: props.disabled,\n size: 'large',\n text: t(props.browseText),\n variant: 'tonal',\n },\n }}\n >\n { slots.browse({ props: { onClick } }) }\n </VDefaultsProvider>\n )}\n </>\n )}\n\n { props.subtitle && (\n <div class=\"v-file-upload-subtitle\">\n { props.subtitle }\n </div>\n )}\n </>\n )}\n\n <VOverlay\n model-value={ dragOver.value }\n contained\n scrim={ props.scrim }\n />\n\n { slots.input?.({ inputNode }) ?? inputNode }\n </VSheet>\n\n { model.value.length > 0 && (\n <div class=\"v-file-upload-items\">\n { model.value.map((file, i) => {\n const slotProps = {\n file,\n props: {\n 'onClick:remove': () => onClickRemove(i),\n },\n }\n\n return (\n <VDefaultsProvider\n key={ i }\n defaults={{\n VFileUploadItem: {\n file,\n clearable: props.clearable,\n disabled: props.disabled,\n showSize: props.showSize,\n },\n }}\n >\n { slots.item?.(slotProps) ?? (\n <VFileUploadItem\n key={ i }\n onClick:remove={ () => onClickRemove(i) }\n v-slots={ slots }\n />\n )}\n </VDefaultsProvider>\n )\n })}\n </div>\n )}\n </>\n )\n })\n },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n"],"mappings":"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","ignoreList":[]}
@@ -46,6 +46,7 @@
46
46
  .v-file-upload-title
47
47
  font-size: $file-upload-title-font-size
48
48
  font-weight: 600
49
+ text-align: center
49
50
 
50
51
  .v-file-upload-icon
51
52
  opacity: var(--v-medium-emphasis-opacity)
@@ -67,6 +68,9 @@
67
68
  justify-content: center
68
69
  width: 100%
69
70
 
71
+ .v-divider__wrapper
72
+ max-width: 100%
73
+
70
74
  .v-file-upload-items
71
75
  margin: $file-upload-items-margin
72
76
 
@@ -2,7 +2,7 @@
2
2
  @use '../../styles/settings';
3
3
 
4
4
  $file-upload-title-font-size: 1.5rem !default;
5
- $file-upload-padding: 64px 0 !default;
5
+ $file-upload-padding: 64px 16px !default;
6
6
  $file-upload-border-radius: 4px !default;
7
7
  $file-upload-border-width: 2px !default;
8
8
  $file-upload-title-font-weight: 600 !default;
@@ -712,10 +712,10 @@ type ListItemSlot = {
712
712
  select: (value: boolean) => void;
713
713
  };
714
714
  type ListItemTitleSlot = {
715
- title?: string | number;
715
+ title?: string | number | boolean;
716
716
  };
717
717
  type ListItemSubtitleSlot = {
718
- subtitle?: string | number;
718
+ subtitle?: string | number | boolean;
719
719
  };
720
720
 
721
721
  declare const VFileUploadItem: {
@@ -751,7 +751,7 @@ declare const VFileUploadItem: {
751
751
  minHeight?: string | number | undefined;
752
752
  minWidth?: string | number | undefined;
753
753
  value?: any;
754
- title?: string | number | undefined;
754
+ title?: string | number | boolean | undefined;
755
755
  class?: any;
756
756
  theme?: string | undefined;
757
757
  to?: string | vue_router.RouteLocationAsRelativeGeneric | vue_router.RouteLocationAsPathGeneric | undefined;
@@ -766,7 +766,7 @@ declare const VFileUploadItem: {
766
766
  activeClass?: string | undefined;
767
767
  appendAvatar?: string | undefined;
768
768
  prependAvatar?: string | undefined;
769
- subtitle?: string | number | undefined;
769
+ subtitle?: string | number | boolean | undefined;
770
770
  } & {
771
771
  $children?: vue.VNodeChild | ((arg: ListItemSlot) => vue.VNodeChild) | {
772
772
  clear?: ((arg: {
@@ -841,7 +841,7 @@ declare const VFileUploadItem: {
841
841
  minHeight?: string | number | undefined;
842
842
  minWidth?: string | number | undefined;
843
843
  value?: any;
844
- title?: string | number | undefined;
844
+ title?: string | number | boolean | undefined;
845
845
  class?: any;
846
846
  theme?: string | undefined;
847
847
  to?: string | vue_router.RouteLocationAsRelativeGeneric | vue_router.RouteLocationAsPathGeneric | undefined;
@@ -856,7 +856,7 @@ declare const VFileUploadItem: {
856
856
  activeClass?: string | undefined;
857
857
  appendAvatar?: string | undefined;
858
858
  prependAvatar?: string | undefined;
859
- subtitle?: string | number | undefined;
859
+ subtitle?: string | number | boolean | undefined;
860
860
  } & {
861
861
  $children?: vue.VNodeChild | ((arg: ListItemSlot) => vue.VNodeChild) | {
862
862
  clear?: ((arg: {
@@ -906,6 +906,7 @@ declare const VFileUploadItem: {
906
906
  border: string | number | boolean;
907
907
  nav: boolean;
908
908
  style: vue.StyleValue;
909
+ title: string | number | boolean;
909
910
  disabled: boolean;
910
911
  tag: string;
911
912
  lines: false | "one" | "two" | "three";
@@ -916,6 +917,7 @@ declare const VFileUploadItem: {
916
917
  ripple: boolean | {
917
918
  class: string;
918
919
  } | undefined;
920
+ subtitle: string | number | boolean;
919
921
  clearable: boolean;
920
922
  showSize: boolean;
921
923
  fileIcon: string;
@@ -969,7 +971,7 @@ declare const VFileUploadItem: {
969
971
  minHeight?: string | number | undefined;
970
972
  minWidth?: string | number | undefined;
971
973
  value?: any;
972
- title?: string | number | undefined;
974
+ title?: string | number | boolean | undefined;
973
975
  class?: any;
974
976
  theme?: string | undefined;
975
977
  to?: string | vue_router.RouteLocationAsRelativeGeneric | vue_router.RouteLocationAsPathGeneric | undefined;
@@ -984,7 +986,7 @@ declare const VFileUploadItem: {
984
986
  activeClass?: string | undefined;
985
987
  appendAvatar?: string | undefined;
986
988
  prependAvatar?: string | undefined;
987
- subtitle?: string | number | undefined;
989
+ subtitle?: string | number | boolean | undefined;
988
990
  } & {
989
991
  $children?: vue.VNodeChild | ((arg: ListItemSlot) => vue.VNodeChild) | {
990
992
  clear?: ((arg: {
@@ -1034,6 +1036,7 @@ declare const VFileUploadItem: {
1034
1036
  border: string | number | boolean;
1035
1037
  nav: boolean;
1036
1038
  style: vue.StyleValue;
1039
+ title: string | number | boolean;
1037
1040
  disabled: boolean;
1038
1041
  tag: string;
1039
1042
  lines: false | "one" | "two" | "three";
@@ -1044,6 +1047,7 @@ declare const VFileUploadItem: {
1044
1047
  ripple: boolean | {
1045
1048
  class: string;
1046
1049
  } | undefined;
1050
+ subtitle: string | number | boolean;
1047
1051
  clearable: boolean;
1048
1052
  showSize: boolean;
1049
1053
  fileIcon: string;
@@ -1083,7 +1087,7 @@ declare const VFileUploadItem: {
1083
1087
  minHeight?: string | number | undefined;
1084
1088
  minWidth?: string | number | undefined;
1085
1089
  value?: any;
1086
- title?: string | number | undefined;
1090
+ title?: string | number | boolean | undefined;
1087
1091
  class?: any;
1088
1092
  theme?: string | undefined;
1089
1093
  to?: string | vue_router.RouteLocationAsRelativeGeneric | vue_router.RouteLocationAsPathGeneric | undefined;
@@ -1098,7 +1102,7 @@ declare const VFileUploadItem: {
1098
1102
  activeClass?: string | undefined;
1099
1103
  appendAvatar?: string | undefined;
1100
1104
  prependAvatar?: string | undefined;
1101
- subtitle?: string | number | undefined;
1105
+ subtitle?: string | number | boolean | undefined;
1102
1106
  } & {
1103
1107
  $children?: vue.VNodeChild | ((arg: ListItemSlot) => vue.VNodeChild) | {
1104
1108
  clear?: ((arg: {
@@ -1151,6 +1155,7 @@ declare const VFileUploadItem: {
1151
1155
  border: string | number | boolean;
1152
1156
  nav: boolean;
1153
1157
  style: vue.StyleValue;
1158
+ title: string | number | boolean;
1154
1159
  disabled: boolean;
1155
1160
  tag: string;
1156
1161
  lines: false | "one" | "two" | "three";
@@ -1161,6 +1166,7 @@ declare const VFileUploadItem: {
1161
1166
  ripple: boolean | {
1162
1167
  class: string;
1163
1168
  } | undefined;
1169
+ subtitle: string | number | boolean;
1164
1170
  clearable: boolean;
1165
1171
  showSize: boolean;
1166
1172
  fileIcon: string;
@@ -1252,8 +1258,14 @@ declare const VFileUploadItem: {
1252
1258
  default: boolean;
1253
1259
  };
1254
1260
  slim: BooleanConstructor;
1255
- subtitle: (StringConstructor | NumberConstructor)[];
1256
- title: (StringConstructor | NumberConstructor)[];
1261
+ subtitle: {
1262
+ type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1263
+ default: undefined;
1264
+ };
1265
+ title: {
1266
+ type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1267
+ default: undefined;
1268
+ };
1257
1269
  value: null;
1258
1270
  onClick: PropType<(args_0: MouseEvent | KeyboardEvent) => void>;
1259
1271
  onClickOnce: PropType<(args_0: MouseEvent) => void>;
@@ -1344,8 +1356,14 @@ declare const VFileUploadItem: {
1344
1356
  default: boolean;
1345
1357
  };
1346
1358
  slim: BooleanConstructor;
1347
- subtitle: (StringConstructor | NumberConstructor)[];
1348
- title: (StringConstructor | NumberConstructor)[];
1359
+ subtitle: {
1360
+ type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1361
+ default: undefined;
1362
+ };
1363
+ title: {
1364
+ type: (StringConstructor | BooleanConstructor | NumberConstructor)[];
1365
+ default: undefined;
1366
+ };
1349
1367
  value: null;
1350
1368
  onClick: PropType<(args_0: MouseEvent | KeyboardEvent) => void>;
1351
1369
  onClickOnce: PropType<(args_0: MouseEvent) => void>;
@@ -7,6 +7,8 @@ import { VBtn } from "../../components/VBtn/index.mjs";
7
7
  import { VDefaultsProvider } from "../../components/VDefaultsProvider/index.mjs";
8
8
  import { VDivider } from "../../components/VDivider/index.mjs";
9
9
  import { makeVTextFieldProps, VTextField } from "../../components/VTextField/VTextField.mjs"; // Composables
10
+ import { useHold } from "./hold.mjs";
11
+ import { useFocus } from "../../composables/focus.mjs";
10
12
  import { useForm } from "../../composables/form.mjs";
11
13
  import { forwardRefs } from "../../composables/forwardRefs.mjs";
12
14
  import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
@@ -39,7 +41,7 @@ const makeVNumberInputProps = propsFactory({
39
41
  type: Number,
40
42
  default: 0
41
43
  },
42
- ...omit(makeVTextFieldProps({}), ['modelValue'])
44
+ ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
43
45
  }, 'VNumberInput');
44
46
  export const VNumberInput = genericComponent()({
45
47
  name: 'VNumberInput',
@@ -54,16 +56,26 @@ export const VNumberInput = genericComponent()({
54
56
  slots
55
57
  } = _ref;
56
58
  const vTextFieldRef = ref();
59
+ const {
60
+ holdStart,
61
+ holdStop
62
+ } = useHold({
63
+ toggleUpDown
64
+ });
57
65
  const form = useForm(props);
58
66
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
59
- const isFocused = ref(false);
67
+ const {
68
+ isFocused,
69
+ focus,
70
+ blur
71
+ } = useFocus(props);
60
72
  function correctPrecision(val) {
61
73
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
62
74
  const fixed = precision == null ? String(val) : val.toFixed(precision);
63
75
  return isFocused.value ? Number(fixed).toString() // trim zeros
64
76
  : fixed;
65
77
  }
66
- const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(+val, props.min, props.max));
78
+ const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
67
79
  const _inputText = shallowRef(null);
68
80
  watchEffect(() => {
69
81
  if (isFocused.value && !controlsDisabled.value) {
@@ -80,8 +92,8 @@ export const VNumberInput = genericComponent()({
80
92
  if (val === null || val === '') {
81
93
  model.value = null;
82
94
  _inputText.value = null;
83
- } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {
84
- model.value = +val;
95
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
96
+ model.value = Number(val);
85
97
  _inputText.value = val;
86
98
  }
87
99
  }
@@ -102,10 +114,18 @@ export const VNumberInput = genericComponent()({
102
114
  const controlNodeSize = computed(() => controlVariant.value === 'split' ? 'default' : 'small');
103
115
  const controlNodeDefaultHeight = computed(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
104
116
  const incrementSlotProps = computed(() => ({
105
- click: onClickUp
117
+ props: {
118
+ onClick: onControlClick,
119
+ onPointerup: onControlMouseup,
120
+ onPointerdown: onUpControlMousedown
121
+ }
106
122
  }));
107
123
  const decrementSlotProps = computed(() => ({
108
- click: onClickDown
124
+ props: {
125
+ onClick: onControlClick,
126
+ onPointerup: onControlMouseup,
127
+ onPointerdown: onDownControlMousedown
128
+ }
109
129
  }));
110
130
  watch(() => props.precision, () => formatInputValue());
111
131
  onMounted(() => {
@@ -132,14 +152,6 @@ export const VNumberInput = genericComponent()({
132
152
  if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision);
133
153
  }
134
154
  }
135
- function onClickUp(e) {
136
- e.stopPropagation();
137
- toggleUpDown();
138
- }
139
- function onClickDown(e) {
140
- e.stopPropagation();
141
- toggleUpDown(false);
142
- }
143
155
  function onBeforeinput(e) {
144
156
  if (!e.data) return;
145
157
  const existingTxt = e.target?.value;
@@ -177,15 +189,36 @@ export const VNumberInput = genericComponent()({
177
189
  }
178
190
  }
179
191
  }
180
- function onControlMousedown(e) {
192
+ function onControlClick(e) {
193
+ e.stopPropagation();
194
+ }
195
+ function onControlMouseup(e) {
196
+ const el = e.currentTarget;
197
+ el?.releasePointerCapture(e.pointerId);
198
+ e.preventDefault();
199
+ e.stopPropagation();
200
+ holdStop();
201
+ }
202
+ function onUpControlMousedown(e) {
203
+ const el = e.currentTarget;
204
+ el?.setPointerCapture(e.pointerId);
205
+ e.preventDefault();
206
+ e.stopPropagation();
207
+ holdStart('up');
208
+ }
209
+ function onDownControlMousedown(e) {
210
+ const el = e.currentTarget;
211
+ el?.setPointerCapture(e.pointerId);
212
+ e.preventDefault();
181
213
  e.stopPropagation();
214
+ holdStart('down');
182
215
  }
183
216
  function clampModel() {
184
217
  if (controlsDisabled.value) return;
185
218
  if (!vTextFieldRef.value) return;
186
219
  const actualText = vTextFieldRef.value.value;
187
- if (actualText && !isNaN(+actualText)) {
188
- inputText.value = correctPrecision(clamp(+actualText, props.min, props.max));
220
+ if (actualText && !isNaN(Number(actualText))) {
221
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
189
222
  } else {
190
223
  inputText.value = null;
191
224
  }
@@ -207,11 +240,11 @@ export const VNumberInput = genericComponent()({
207
240
  inputText.value = model.value.toString();
208
241
  }
209
242
  function onFocus() {
210
- isFocused.value = true;
243
+ focus();
211
244
  trimDecimalZeros();
212
245
  }
213
246
  function onBlur() {
214
- isFocused.value = false;
247
+ blur();
215
248
  clampModel();
216
249
  }
217
250
  useRender(() => {
@@ -228,8 +261,9 @@ export const VNumberInput = genericComponent()({
228
261
  "data-testid": "increment",
229
262
  "aria-hidden": "true",
230
263
  "icon": incrementIcon.value,
231
- "onClick": onClickUp,
232
- "onMousedown": onControlMousedown,
264
+ "onClick": onControlClick,
265
+ "onPointerup": onControlMouseup,
266
+ "onPointerdown": onUpControlMousedown,
233
267
  "size": controlNodeSize.value,
234
268
  "tabindex": "-1"
235
269
  }, null) : _createVNode(VDefaultsProvider, {
@@ -258,8 +292,9 @@ export const VNumberInput = genericComponent()({
258
292
  "icon": decrementIcon.value,
259
293
  "size": controlNodeSize.value,
260
294
  "tabindex": "-1",
261
- "onClick": onClickDown,
262
- "onMousedown": onControlMousedown
295
+ "onClick": onControlClick,
296
+ "onPointerup": onControlMouseup,
297
+ "onPointerdown": onDownControlMousedown
263
298
  }, null) : _createVNode(VDefaultsProvider, {
264
299
  "key": "decrement-defaults",
265
300
  "defaults": {
@@ -303,6 +338,7 @@ export const VNumberInput = genericComponent()({
303
338
  "ref": vTextFieldRef,
304
339
  "modelValue": inputText.value,
305
340
  "onUpdate:modelValue": $event => inputText.value = $event,
341
+ "validationValue": model.value,
306
342
  "onBeforeinput": onBeforeinput,
307
343
  "onFocus": onFocus,
308
344
  "onBlur": onBlur,
@@ -1 +1 @@
1
- {"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","shallowRef","watch","watchEffect","clamp","genericComponent","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","modelValue","Number","min","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","step","precision","VNumberInput","name","props","emits","val","setup","_ref","slots","vTextFieldRef","form","controlsDisabled","isDisabled","value","isReadonly","isFocused","correctPrecision","arguments","length","undefined","fixed","toFixed","toString","model","_inputText","isNaN","inputText","get","set","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","click","onClickUp","decrementSlotProps","onClickDown","formatInputValue","clampModel","inferPrecision","str","idx","indexOf","toggleUpDown","increment","inferredPrecision","Math","e","stopPropagation","onBeforeinput","data","existingTxt","target","selectionStart","selectionEnd","potentialNewInputVal","slice","test","preventDefault","split","includes","onKeydown","key","ctrlKey","onControlMousedown","actualText","trimDecimalZeros","onFocus","onBlur","_","textFieldProps","filterProps","incrementControlNode","_createVNode","disabled","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, shallowRef, watch, watchEffect } from 'vue'\nimport { clamp, genericComponent, 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' | 'hidden'\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 precision: {\n type: Number as PropType<number | null>,\n default: 0,\n },\n\n ...omit(makeVTextFieldProps({}), ['modelValue']),\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 vTextFieldRef = ref<VTextField | undefined>()\n\n const form = useForm(props)\n const controlsDisabled = computed(() => (\n form.isDisabled.value || form.isReadonly.value\n ))\n\n const isFocused = ref(false)\n\n function correctPrecision (val: number, precision = props.precision) {\n const fixed = precision == null\n ? String(val)\n : val.toFixed(precision)\n return isFocused.value\n ? Number(fixed).toString() // trim zeros\n : fixed\n }\n\n const model = useProxiedModel(props, 'modelValue', null,\n val => val ?? null,\n val => val == null\n ? val ?? null\n : clamp(+val, props.min, props.max)\n )\n\n const _inputText = shallowRef<string | null>(null)\n watchEffect(() => {\n if (isFocused.value && !controlsDisabled.value) {\n // ignore external changes\n } else if (model.value == null) {\n _inputText.value = null\n } else if (!isNaN(model.value)) {\n _inputText.value = correctPrecision(model.value)\n }\n })\n const inputText = computed<string | null>({\n get: () => _inputText.value,\n set (val) {\n if (val === null || val === '') {\n model.value = null\n _inputText.value = null\n } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {\n model.value = +val\n _inputText.value = val\n }\n },\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 const decrementSlotProps = computed(() => ({ click: onClickDown }))\n\n watch(() => props.precision, () => formatInputValue())\n\n onMounted(() => {\n clampModel()\n })\n\n function inferPrecision (value: number | null) {\n if (value == null) return 0\n const str = value.toString()\n const idx = str.indexOf('.')\n return ~idx ? str.length - idx : 0\n }\n\n function toggleUpDown (increment = true) {\n if (controlsDisabled.value) return\n if (model.value == null) {\n inputText.value = correctPrecision(clamp(0, props.min, props.max))\n return\n }\n\n let inferredPrecision = Math.max(inferPrecision(model.value), inferPrecision(props.step))\n if (props.precision != null) inferredPrecision = Math.max(inferredPrecision, props.precision)\n if (increment) {\n if (canIncrease.value) inputText.value = correctPrecision(model.value + props.step, inferredPrecision)\n } else {\n if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision)\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 if (props.precision == null) return\n\n // Ignore decimal digits above precision limit\n if (potentialNewInputVal.split('.')[1]?.length > props.precision) {\n e.preventDefault()\n }\n // Ignore decimal separator when precision = 0\n if (props.precision === 0 && potentialNewInputVal.includes('.')) {\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 (controlsDisabled.value) return\n if (!vTextFieldRef.value) return\n const actualText = vTextFieldRef.value.value\n if (actualText && !isNaN(+actualText)) {\n inputText.value = correctPrecision(clamp(+actualText, props.min, props.max))\n } else {\n inputText.value = null\n }\n }\n\n function formatInputValue () {\n if (controlsDisabled.value) return\n if (model.value === null || isNaN(model.value)) {\n inputText.value = null\n return\n }\n inputText.value = props.precision == null\n ? String(model.value)\n : model.value.toFixed(props.precision)\n }\n\n function trimDecimalZeros () {\n if (controlsDisabled.value) return\n if (model.value === null || isNaN(model.value)) {\n inputText.value = null\n return\n }\n inputText.value = model.value.toString()\n }\n\n function onFocus () {\n isFocused.value = true\n trimDecimalZeros()\n }\n\n function onBlur () {\n isFocused.value = false\n clampModel()\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 data-testid=\"increment\"\n aria-hidden=\"true\"\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 data-testid=\"decrement\"\n aria-hidden=\"true\"\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 || controlVariant.value === 'hidden'\n ? undefined\n : <>{ dividerNode() }{ controlNode() }</>)\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 && controlVariant.value !== 'hidden'\n ? <>{ controlNode() }{ dividerNode() }</>\n : undefined)\n\n const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n v-model={ inputText.value }\n onBeforeinput={ onBeforeinput }\n onFocus={ onFocus }\n onBlur={ onBlur }\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":";AAAA;AACA;;AAEA;AAAA,SACSA,IAAI;AAAA,SACJC,iBAAiB;AAAA,SACjBC,QAAQ;AAAA,SACRC,mBAAmB,EAAEC,UAAU,sDAExC;AAAA,SACSC,OAAO;AAAA,SACPC,WAAW;AAAA,SACXC,eAAe,8CAExB;AACA,SAASC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,GAAG,EAAEC,UAAU,EAAEC,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAAA,SAC/EC,KAAK,EAAEC,gBAAgB,EAAEC,IAAI,EAAEC,YAAY,EAAEC,SAAS,gCAE/D;AAeA,MAAMC,qBAAqB,GAAGF,YAAY,CAAC;EACzCG,cAAc,EAAE;IACdC,IAAI,EAAEC,MAAkC;IACxCC,OAAO,EAAE;EACX,CAAC;EACDC,KAAK,EAAEC,OAAO;EACdC,SAAS,EAAED,OAAO;EAClBE,UAAU,EAAE;IACVN,IAAI,EAAEO,MAAiC;IACvCL,OAAO,EAAE;EACX,CAAC;EACDM,GAAG,EAAE;IACHR,IAAI,EAAEO,MAAM;IACZL,OAAO,EAAEK,MAAM,CAACE;EAClB,CAAC;EACDC,GAAG,EAAE;IACHV,IAAI,EAAEO,MAAM;IACZL,OAAO,EAAEK,MAAM,CAACI;EAClB,CAAC;EACDC,IAAI,EAAE;IACJZ,IAAI,EAAEO,MAAM;IACZL,OAAO,EAAE;EACX,CAAC;EACDW,SAAS,EAAE;IACTb,IAAI,EAAEO,MAAiC;IACvCL,OAAO,EAAE;EACX,CAAC;EAED,GAAGP,IAAI,CAACd,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC;AACjD,CAAC,EAAE,cAAc,CAAC;AAElB,OAAO,MAAMiC,YAAY,GAAGpB,gBAAgB,CAAoB,CAAC,CAAC;EAChEqB,IAAI,EAAE,cAAc;EAEpBC,KAAK,EAAE;IACL,GAAGlB,qBAAqB,CAAC;EAC3B,CAAC;EAEDmB,KAAK,EAAE;IACL,mBAAmB,EAAGC,GAAW,IAAK;EACxC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,aAAa,GAAGjC,GAAG,CAAyB,CAAC;IAEnD,MAAMkC,IAAI,GAAGxC,OAAO,CAACiC,KAAK,CAAC;IAC3B,MAAMQ,gBAAgB,GAAGtC,QAAQ,CAAC,MAChCqC,IAAI,CAACE,UAAU,CAACC,KAAK,IAAIH,IAAI,CAACI,UAAU,CAACD,KAC1C,CAAC;IAEF,MAAME,SAAS,GAAGvC,GAAG,CAAC,KAAK,CAAC;IAE5B,SAASwC,gBAAgBA,CAAEX,GAAW,EAA+B;MAAA,IAA7BL,SAAS,GAAAiB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGd,KAAK,CAACH,SAAS;MACjE,MAAMoB,KAAK,GAAGpB,SAAS,IAAI,IAAI,GAC3BZ,MAAM,CAACiB,GAAG,CAAC,GACXA,GAAG,CAACgB,OAAO,CAACrB,SAAS,CAAC;MAC1B,OAAOe,SAAS,CAACF,KAAK,GAClBnB,MAAM,CAAC0B,KAAK,CAAC,CAACE,QAAQ,CAAC,CAAC,CAAC;MAAA,EACzBF,KAAK;IACX;IAEA,MAAMG,KAAK,GAAGnD,eAAe,CAAC+B,KAAK,EAAE,YAAY,EAAE,IAAI,EACrDE,GAAG,IAAIA,GAAG,IAAI,IAAI,EAClBA,GAAG,IAAIA,GAAG,IAAI,IAAI,GACdA,GAAG,IAAI,IAAI,GACXzB,KAAK,CAAC,CAACyB,GAAG,EAAEF,KAAK,CAACR,GAAG,EAAEQ,KAAK,CAACN,GAAG,CACtC,CAAC;IAED,MAAM2B,UAAU,GAAG/C,UAAU,CAAgB,IAAI,CAAC;IAClDE,WAAW,CAAC,MAAM;MAChB,IAAIoC,SAAS,CAACF,KAAK,IAAI,CAACF,gBAAgB,CAACE,KAAK,EAAE;QAC9C;MAAA,CACD,MAAM,IAAIU,KAAK,CAACV,KAAK,IAAI,IAAI,EAAE;QAC9BW,UAAU,CAACX,KAAK,GAAG,IAAI;MACzB,CAAC,MAAM,IAAI,CAACY,KAAK,CAACF,KAAK,CAACV,KAAK,CAAC,EAAE;QAC9BW,UAAU,CAACX,KAAK,GAAGG,gBAAgB,CAACO,KAAK,CAACV,KAAK,CAAC;MAClD;IACF,CAAC,CAAC;IACF,MAAMa,SAAS,GAAGrD,QAAQ,CAAgB;MACxCsD,GAAG,EAAEA,CAAA,KAAMH,UAAU,CAACX,KAAK;MAC3Be,GAAGA,CAAEvB,GAAG,EAAE;QACR,IAAIA,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,EAAE,EAAE;UAC9BkB,KAAK,CAACV,KAAK,GAAG,IAAI;UAClBW,UAAU,CAACX,KAAK,GAAG,IAAI;QACzB,CAAC,MAAM,IAAI,CAACY,KAAK,CAAC,CAACpB,GAAG,CAAC,IAAI,CAACA,GAAG,IAAIF,KAAK,CAACN,GAAG,IAAI,CAACQ,GAAG,IAAIF,KAAK,CAACR,GAAG,EAAE;UACjE4B,KAAK,CAACV,KAAK,GAAG,CAACR,GAAG;UAClBmB,UAAU,CAACX,KAAK,GAAGR,GAAG;QACxB;MACF;IACF,CAAC,CAAC;IAEF,MAAMwB,WAAW,GAAGxD,QAAQ,CAAC,MAAM;MACjC,IAAIsC,gBAAgB,CAACE,KAAK,EAAE,OAAO,KAAK;MACxC,OAAO,CAACU,KAAK,CAACV,KAAK,IAAI,CAAC,IAAcV,KAAK,CAACJ,IAAI,IAAII,KAAK,CAACN,GAAG;IAC/D,CAAC,CAAC;IACF,MAAMiC,WAAW,GAAGzD,QAAQ,CAAC,MAAM;MACjC,IAAIsC,gBAAgB,CAACE,KAAK,EAAE,OAAO,KAAK;MACxC,OAAO,CAACU,KAAK,CAACV,KAAK,IAAI,CAAC,IAAcV,KAAK,CAACJ,IAAI,IAAII,KAAK,CAACR,GAAG;IAC/D,CAAC,CAAC;IAEF,MAAMT,cAAc,GAAGb,QAAQ,CAAC,MAAM;MACpC,OAAO8B,KAAK,CAACX,SAAS,GAAG,SAAS,GAAGW,KAAK,CAACjB,cAAc;IAC3D,CAAC,CAAC;IAEF,MAAM6C,aAAa,GAAG1D,QAAQ,CAAC,MAAMa,cAAc,CAAC2B,KAAK,KAAK,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;IAC9F,MAAMmB,aAAa,GAAG3D,QAAQ,CAAC,MAAMa,cAAc,CAAC2B,KAAK,KAAK,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7F,MAAMoB,eAAe,GAAG5D,QAAQ,CAAC,MAAMa,cAAc,CAAC2B,KAAK,KAAK,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9F,MAAMqB,wBAAwB,GAAG7D,QAAQ,CAAC,MAAMa,cAAc,CAAC2B,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAErG,MAAMsB,kBAAkB,GAAG9D,QAAQ,CAAC,OAAO;MAAE+D,KAAK,EAAEC;IAAU,CAAC,CAAC,CAAC;IACjE,MAAMC,kBAAkB,GAAGjE,QAAQ,CAAC,OAAO;MAAE+D,KAAK,EAAEG;IAAY,CAAC,CAAC,CAAC;IAEnE7D,KAAK,CAAC,MAAMyB,KAAK,CAACH,SAAS,EAAE,MAAMwC,gBAAgB,CAAC,CAAC,CAAC;IAEtDjE,SAAS,CAAC,MAAM;MACdkE,UAAU,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,SAASC,cAAcA,CAAE7B,KAAoB,EAAE;MAC7C,IAAIA,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC;MAC3B,MAAM8B,GAAG,GAAG9B,KAAK,CAACS,QAAQ,CAAC,CAAC;MAC5B,MAAMsB,GAAG,GAAGD,GAAG,CAACE,OAAO,CAAC,GAAG,CAAC;MAC5B,OAAO,CAACD,GAAG,GAAGD,GAAG,CAACzB,MAAM,GAAG0B,GAAG,GAAG,CAAC;IACpC;IAEA,SAASE,YAAYA,CAAA,EAAoB;MAAA,IAAlBC,SAAS,GAAA9B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;MACrC,IAAIN,gBAAgB,CAACE,KAAK,EAAE;MAC5B,IAAIU,KAAK,CAACV,KAAK,IAAI,IAAI,EAAE;QACvBa,SAAS,CAACb,KAAK,GAAGG,gBAAgB,CAACpC,KAAK,CAAC,CAAC,EAAEuB,KAAK,CAACR,GAAG,EAAEQ,KAAK,CAACN,GAAG,CAAC,CAAC;QAClE;MACF;MAEA,IAAImD,iBAAiB,GAAGC,IAAI,CAACpD,GAAG,CAAC6C,cAAc,CAACnB,KAAK,CAACV,KAAK,CAAC,EAAE6B,cAAc,CAACvC,KAAK,CAACJ,IAAI,CAAC,CAAC;MACzF,IAAII,KAAK,CAACH,SAAS,IAAI,IAAI,EAAEgD,iBAAiB,GAAGC,IAAI,CAACpD,GAAG,CAACmD,iBAAiB,EAAE7C,KAAK,CAACH,SAAS,CAAC;MAC7F,IAAI+C,SAAS,EAAE;QACb,IAAIlB,WAAW,CAAChB,KAAK,EAAEa,SAAS,CAACb,KAAK,GAAGG,gBAAgB,CAACO,KAAK,CAACV,KAAK,GAAGV,KAAK,CAACJ,IAAI,EAAEiD,iBAAiB,CAAC;MACxG,CAAC,MAAM;QACL,IAAIlB,WAAW,CAACjB,KAAK,EAAEa,SAAS,CAACb,KAAK,GAAGG,gBAAgB,CAACO,KAAK,CAACV,KAAK,GAAGV,KAAK,CAACJ,IAAI,EAAEiD,iBAAiB,CAAC;MACxG;IACF;IAEA,SAASX,SAASA,CAAEa,CAAa,EAAE;MACjCA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBL,YAAY,CAAC,CAAC;IAChB;IAEA,SAASP,WAAWA,CAAEW,CAAa,EAAE;MACnCA,CAAC,CAACC,eAAe,CAAC,CAAC;MACnBL,YAAY,CAAC,KAAK,CAAC;IACrB;IAEA,SAASM,aAAaA,CAAEF,CAAa,EAAE;MACrC,IAAI,CAACA,CAAC,CAACG,IAAI,EAAE;MACb,MAAMC,WAAW,GAAIJ,CAAC,CAACK,MAAM,EAAuB1C,KAAK;MACzD,MAAM2C,cAAc,GAAIN,CAAC,CAACK,MAAM,EAAuBC,cAAc;MACrE,MAAMC,YAAY,GAAIP,CAAC,CAACK,MAAM,EAAuBE,YAAY;MACjE,MAAMC,oBAAoB,GACxBJ,WAAW,GACPA,WAAW,CAACK,KAAK,CAAC,CAAC,EAAEH,cAAoC,CAAC,GAAGN,CAAC,CAACG,IAAI,GAAGC,WAAW,CAACK,KAAK,CAACF,YAAkC,CAAC,GAC3HP,CAAC,CAACG,IAAI;MACZ;MACA;MACA;MACA,IAAI,CAAC,kCAAkC,CAACO,IAAI,CAACF,oBAAoB,CAAC,EAAE;QAClER,CAAC,CAACW,cAAc,CAAC,CAAC;MACpB;MAEA,IAAI1D,KAAK,CAACH,SAAS,IAAI,IAAI,EAAE;;MAE7B;MACA,IAAI0D,oBAAoB,CAACI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE5C,MAAM,GAAGf,KAAK,CAACH,SAAS,EAAE;QAChEkD,CAAC,CAACW,cAAc,CAAC,CAAC;MACpB;MACA;MACA,IAAI1D,KAAK,CAACH,SAAS,KAAK,CAAC,IAAI0D,oBAAoB,CAACK,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC/Db,CAAC,CAACW,cAAc,CAAC,CAAC;MACpB;IACF;IAEA,eAAeG,SAASA,CAAEd,CAAgB,EAAE;MAC1C,IACE,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAACa,QAAQ,CAACb,CAAC,CAACe,GAAG,CAAC,IAClFf,CAAC,CAACgB,OAAO,EACT;MAEF,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAACH,QAAQ,CAACb,CAAC,CAACe,GAAG,CAAC,EAAE;QAC5Cf,CAAC,CAACW,cAAc,CAAC,CAAC;QAClBpB,UAAU,CAAC,CAAC;QACZ;QACA,MAAMnE,QAAQ,CAAC,CAAC;QAChB,IAAI4E,CAAC,CAACe,GAAG,KAAK,WAAW,EAAE;UACzBnB,YAAY,CAAC,KAAK,CAAC;QACrB,CAAC,MAAM;UACLA,YAAY,CAAC,CAAC;QAChB;MACF;IACF;IAEA,SAASqB,kBAAkBA,CAAEjB,CAAa,EAAE;MAC1CA,CAAC,CAACC,eAAe,CAAC,CAAC;IACrB;IAEA,SAASV,UAAUA,CAAA,EAAI;MACrB,IAAI9B,gBAAgB,CAACE,KAAK,EAAE;MAC5B,IAAI,CAACJ,aAAa,CAACI,KAAK,EAAE;MAC1B,MAAMuD,UAAU,GAAG3D,aAAa,CAACI,KAAK,CAACA,KAAK;MAC5C,IAAIuD,UAAU,IAAI,CAAC3C,KAAK,CAAC,CAAC2C,UAAU,CAAC,EAAE;QACrC1C,SAAS,CAACb,KAAK,GAAGG,gBAAgB,CAACpC,KAAK,CAAC,CAACwF,UAAU,EAAEjE,KAAK,CAACR,GAAG,EAAEQ,KAAK,CAACN,GAAG,CAAC,CAAC;MAC9E,CAAC,MAAM;QACL6B,SAAS,CAACb,KAAK,GAAG,IAAI;MACxB;IACF;IAEA,SAAS2B,gBAAgBA,CAAA,EAAI;MAC3B,IAAI7B,gBAAgB,CAACE,KAAK,EAAE;MAC5B,IAAIU,KAAK,CAACV,KAAK,KAAK,IAAI,IAAIY,KAAK,CAACF,KAAK,CAACV,KAAK,CAAC,EAAE;QAC9Ca,SAAS,CAACb,KAAK,GAAG,IAAI;QACtB;MACF;MACAa,SAAS,CAACb,KAAK,GAAGV,KAAK,CAACH,SAAS,IAAI,IAAI,GACrCZ,MAAM,CAACmC,KAAK,CAACV,KAAK,CAAC,GACnBU,KAAK,CAACV,KAAK,CAACQ,OAAO,CAAClB,KAAK,CAACH,SAAS,CAAC;IAC1C;IAEA,SAASqE,gBAAgBA,CAAA,EAAI;MAC3B,IAAI1D,gBAAgB,CAACE,KAAK,EAAE;MAC5B,IAAIU,KAAK,CAACV,KAAK,KAAK,IAAI,IAAIY,KAAK,CAACF,KAAK,CAACV,KAAK,CAAC,EAAE;QAC9Ca,SAAS,CAACb,KAAK,GAAG,IAAI;QACtB;MACF;MACAa,SAAS,CAACb,KAAK,GAAGU,KAAK,CAACV,KAAK,CAACS,QAAQ,CAAC,CAAC;IAC1C;IAEA,SAASgD,OAAOA,CAAA,EAAI;MAClBvD,SAAS,CAACF,KAAK,GAAG,IAAI;MACtBwD,gBAAgB,CAAC,CAAC;IACpB;IAEA,SAASE,MAAMA,CAAA,EAAI;MACjBxD,SAAS,CAACF,KAAK,GAAG,KAAK;MACvB4B,UAAU,CAAC,CAAC;IACd;IAEAzD,SAAS,CAAC,MAAM;MACd,MAAM;QAAES,UAAU,EAAE+E,CAAC;QAAE,GAAGC;MAAe,CAAC,GAAGxG,UAAU,CAACyG,WAAW,CAACvE,KAAK,CAAC;MAE1E,SAASwE,oBAAoBA,CAAA,EAAI;QAC/B,OAAO,CAACnE,KAAK,CAACuC,SAAS,GAAA6B,YAAA,CAAA/G,IAAA;UAAA,YAER,CAACgE,WAAW,CAAChB,KAAK;UAAA;UAAA;UAAA,UAGpBqB,wBAAwB,CAACrB,KAAK;UAAA;UAAA;UAAA,QAGhCkB,aAAa,CAAClB,KAAK;UAAA,WAChBwB,SAAS;UAAA,eACL8B,kBAAkB;UAAA,QACzBlC,eAAe,CAACpB,KAAK;UAAA;QAAA,WAAA+D,YAAA,CAAA9G,iBAAA;UAAA;UAAA,YAMlB;YACRD,IAAI,EAAE;cACJgH,QAAQ,EAAE,CAAChD,WAAW,CAAChB,KAAK;cAC5BiE,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE7C,wBAAwB,CAACrB,KAAK;cACtCmE,IAAI,EAAE/C,eAAe,CAACpB,KAAK;cAC3BoE,IAAI,EAAElD,aAAa,CAAClB;YACtB;UACF;QAAC;UAAAxB,OAAA,EAAAA,CAAA,MAECmB,KAAK,CAACuC,SAAS,CAACZ,kBAAkB,CAACtB,KAAK,CAAC;QAAA,EAE9C;MACH;MAEA,SAASqE,oBAAoBA,CAAA,EAAI;QAC/B,OAAO,CAAC1E,KAAK,CAAC2E,SAAS,GAAAP,YAAA,CAAA/G,IAAA;UAAA,YAER,CAACiE,WAAW,CAACjB,KAAK;UAAA;UAAA;UAAA,UAGpBqB,wBAAwB,CAACrB,KAAK;UAAA;UAAA;UAAA,QAGhCmB,aAAa,CAACnB,KAAK;UAAA,QACnBoB,eAAe,CAACpB,KAAK;UAAA;UAAA,WAElB0B,WAAW;UAAA,eACP4B;QAAkB,WAAAS,YAAA,CAAA9G,iBAAA;UAAA;UAAA,YAKtB;YACRD,IAAI,EAAE;cACJgH,QAAQ,EAAE,CAAC/C,WAAW,CAACjB,KAAK;cAC5BiE,IAAI,EAAE,IAAI;cACVC,MAAM,EAAE7C,wBAAwB,CAACrB,KAAK;cACtCmE,IAAI,EAAE/C,eAAe,CAACpB,KAAK;cAC3BoE,IAAI,EAAEjD,aAAa,CAACnB;YACtB;UACF;QAAC;UAAAxB,OAAA,EAAAA,CAAA,MAECmB,KAAK,CAAC2E,SAAS,CAAC7C,kBAAkB,CAACzB,KAAK,CAAC;QAAA,EAE9C;MACH;MAEA,SAASuE,WAAWA,CAAA,EAAI;QACtB,OAAAR,YAAA;UAAA;QAAA,IAEMM,oBAAoB,CAAC,CAAC,EAAAN,YAAA,CAAA7G,QAAA;UAAA,YAGXmB,cAAc,CAAC2B,KAAK,KAAK;QAAS,UAG7C8D,oBAAoB,CAAC,CAAC;MAG9B;MAEA,SAASU,WAAWA,CAAA,EAAI;QACtB,OAAO,CAAClF,KAAK,CAACX,SAAS,IAAI,CAACW,KAAK,CAACb,KAAK,GAAAsF,YAAA,CAAA7G,QAAA;UAAA;QAAA,WAA2BoD,SAAS;MAC7E;MAEA,MAAMmE,kBAAkB,GACtBpG,cAAc,CAAC2B,KAAK,KAAK,OAAO,GAAA+D,YAAA;QAAA;MAAA,IAAAA,YAAA,CAAA7G,QAAA;QAAA;MAAA,UAKxB4G,oBAAoB,CAAC,CAAC,KAEvBxE,KAAK,CAACoF,OAAO,IAAIrG,cAAc,CAAC2B,KAAK,KAAK,QAAQ,GACnDM,SAAS,GAAAyD,YAAA,CAAAY,SAAA,SACLH,WAAW,CAAC,CAAC,EAAID,WAAW,CAAC,CAAC,EAAM;MAEhD,MAAMK,cAAc,GAAGjF,KAAK,CAAC,cAAc,CAAC,IAAI8E,kBAAkB;MAElE,MAAMI,mBAAmB,GACvBxG,cAAc,CAAC2B,KAAK,KAAK,OAAO,GAAA+D,YAAA;QAAA;MAAA,IAGxBM,oBAAoB,CAAC,CAAC,EAAAN,YAAA,CAAA7G,QAAA;QAAA;MAAA,aAIvBoC,KAAK,CAACoF,OAAO,IAAIrG,cAAc,CAAC2B,KAAK,KAAK,QAAQ,GAAA+D,YAAA,CAAAY,SAAA,SAC/CJ,WAAW,CAAC,CAAC,EAAIC,WAAW,CAAC,CAAC,KAClClE,SAAU;MAElB,MAAMwE,eAAe,GAAGnF,KAAK,CAAC,eAAe,CAAC,IAAIkF,mBAAmB;MAErE,OAAAd,YAAA,CAAA3G,UAAA,EAAA2H,WAAA;QAAA,OAEUnF,aAAa;QAAA,cACTiB,SAAS,CAACb,KAAK;QAAA,uBAAAgF,MAAA,IAAfnE,SAAS,CAACb,KAAK,GAAAgF,MAAA;QAAA,iBACTzC,aAAa;QAAA,WACnBkB,OAAO;QAAA,UACRC,MAAM;QAAA,aACHP,SAAS;QAAA,SACd,CACL,gBAAgB,EAChB;UACE,yBAAyB,EAAE9E,cAAc,CAAC2B,KAAK,KAAK,SAAS;UAC7D,4BAA4B,EAAEV,KAAK,CAACX,SAAS;UAC7C,uBAAuB,EAAEW,KAAK,CAACb,KAAK;UACpC,yBAAyB,EAAEa,KAAK,CAACoF,OAAO;UACxC,uBAAuB,EAAErG,cAAc,CAAC2B,KAAK,KAAK,OAAO;UACzD,yBAAyB,EAAE3B,cAAc,CAAC2B,KAAK,KAAK;QACtD,CAAC,EACDV,KAAK,CAAC2F,KAAK;MACZ,GACIrB,cAAc;QAAA,SACXtE,KAAK,CAAC4F,KAAK;QAAA;MAAA;QAIjB,GAAGvF,KAAK;QACR,cAAc,EAAEiF,cAAc,GAAG;UAAA,SAAAO,IAAA,GAAA/E,SAAA,CAAAC,MAAA,EAAI+E,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;YAAJF,IAAI,CAAAE,IAAA,IAAAlF,SAAA,CAAAkF,IAAA;UAAA;UAAA,OAAAvB,YAAA,CAAAY,SAAA,SAEnChF,KAAK,CAAC,cAAc,CAAC,GAAG,GAAGyF,IAAI,CAAC,EAChCX,kBAAkB;QAAA,CAEvB,GAAGnE,SAAS;QACb,eAAe,EAAEwE,eAAe,GAAG;UAAA,SAAAS,KAAA,GAAAnF,SAAA,CAAAC,MAAA,EAAI+E,IAAI,OAAAC,KAAA,CAAAE,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;YAAJJ,IAAI,CAAAI,KAAA,IAAApF,SAAA,CAAAoF,KAAA;UAAA;UAAA,OAAAzB,YAAA,CAAAY,SAAA,SAErCE,mBAAmB,EACnBlF,KAAK,CAAC,eAAe,CAAC,GAAG,GAAGyF,IAAI,CAAC;QAAA,CAEtC,GAAG9E;MAAS;IAIrB,CAAC,CAAC;IAEF,OAAOhD,WAAW,CAAC,CAAC,CAAC,EAAEsC,aAAa,CAAC;EACvC;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"VNumberInput.mjs","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useHold","useFocus","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","shallowRef","watch","watchEffect","clamp","genericComponent","omit","propsFactory","useRender","makeVNumberInputProps","controlVariant","type","String","default","inset","Boolean","hideInput","modelValue","Number","min","MIN_SAFE_INTEGER","max","MAX_SAFE_INTEGER","step","precision","VNumberInput","name","props","emits","val","setup","_ref","slots","vTextFieldRef","holdStart","holdStop","toggleUpDown","form","controlsDisabled","isDisabled","value","isReadonly","isFocused","focus","blur","correctPrecision","arguments","length","undefined","fixed","toFixed","toString","model","_inputText","isNaN","inputText","get","set","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","onClick","onControlClick","onPointerup","onControlMouseup","onPointerdown","onUpControlMousedown","decrementSlotProps","onDownControlMousedown","formatInputValue","clampModel","inferPrecision","str","idx","indexOf","increment","inferredPrecision","Math","onBeforeinput","e","data","existingTxt","target","selectionStart","selectionEnd","potentialNewInputVal","slice","test","preventDefault","split","includes","onKeydown","key","ctrlKey","stopPropagation","el","currentTarget","releasePointerCapture","pointerId","setPointerCapture","actualText","trimDecimalZeros","onFocus","onBlur","_","textFieldProps","filterProps","incrementControlNode","_createVNode","disabled","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 { useHold } from './hold'\nimport { useFocus } from '@/composables/focus'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { clamp, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\ntype ControlSlot = {\n props: Record<string, unknown>\n}\n\ntype VNumberInputSlots = Omit<VTextFieldSlots, 'default'> & {\n increment: ControlSlot\n decrement: ControlSlot\n}\n\ntype ControlVariant = 'default' | 'stacked' | 'split' | 'hidden'\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 precision: {\n type: Number as PropType<number | null>,\n default: 0,\n },\n\n ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue']),\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 vTextFieldRef = ref<VTextField | undefined>()\n\n const { holdStart, holdStop } = useHold({ toggleUpDown })\n const form = useForm(props)\n const controlsDisabled = computed(() => (\n form.isDisabled.value || form.isReadonly.value\n ))\n\n const { isFocused, focus, blur } = useFocus(props)\n\n function correctPrecision (val: number, precision = props.precision) {\n const fixed = precision == null\n ? String(val)\n : val.toFixed(precision)\n return isFocused.value\n ? Number(fixed).toString() // trim zeros\n : fixed\n }\n\n const model = useProxiedModel(props, 'modelValue', null,\n val => val ?? null,\n val => val == null\n ? val ?? null\n : clamp(Number(val), props.min, props.max)\n )\n\n const _inputText = shallowRef<string | null>(null)\n watchEffect(() => {\n if (isFocused.value && !controlsDisabled.value) {\n // ignore external changes\n } else if (model.value == null) {\n _inputText.value = null\n } else if (!isNaN(model.value)) {\n _inputText.value = correctPrecision(model.value)\n }\n })\n const inputText = computed<string | null>({\n get: () => _inputText.value,\n set (val) {\n if (val === null || val === '') {\n model.value = null\n _inputText.value = null\n } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {\n model.value = Number(val)\n _inputText.value = val\n }\n },\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(() => ({\n props: {\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onUpControlMousedown,\n },\n }))\n const decrementSlotProps = computed(() => ({\n props: {\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onDownControlMousedown,\n },\n }))\n\n watch(() => props.precision, () => formatInputValue())\n\n onMounted(() => {\n clampModel()\n })\n\n function inferPrecision (value: number | null) {\n if (value == null) return 0\n const str = value.toString()\n const idx = str.indexOf('.')\n return ~idx ? str.length - idx : 0\n }\n\n function toggleUpDown (increment = true) {\n if (controlsDisabled.value) return\n if (model.value == null) {\n inputText.value = correctPrecision(clamp(0, props.min, props.max))\n return\n }\n\n let inferredPrecision = Math.max(inferPrecision(model.value), inferPrecision(props.step))\n if (props.precision != null) inferredPrecision = Math.max(inferredPrecision, props.precision)\n if (increment) {\n if (canIncrease.value) inputText.value = correctPrecision(model.value + props.step, inferredPrecision)\n } else {\n if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision)\n }\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 if (props.precision == null) return\n\n // Ignore decimal digits above precision limit\n if (potentialNewInputVal.split('.')[1]?.length > props.precision) {\n e.preventDefault()\n }\n // Ignore decimal separator when precision = 0\n if (props.precision === 0 && potentialNewInputVal.includes('.')) {\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 onControlClick (e: MouseEvent) {\n e.stopPropagation()\n }\n\n function onControlMouseup (e: PointerEvent) {\n const el = e.currentTarget as HTMLElement\n el?.releasePointerCapture(e.pointerId)\n e.preventDefault()\n e.stopPropagation()\n holdStop()\n }\n\n function onUpControlMousedown (e: PointerEvent) {\n const el = e.currentTarget as HTMLElement\n el?.setPointerCapture(e.pointerId)\n e.preventDefault()\n e.stopPropagation()\n holdStart('up')\n }\n\n function onDownControlMousedown (e: PointerEvent) {\n const el = e.currentTarget as HTMLElement\n el?.setPointerCapture(e.pointerId)\n e.preventDefault()\n e.stopPropagation()\n holdStart('down')\n }\n\n function clampModel () {\n if (controlsDisabled.value) return\n if (!vTextFieldRef.value) return\n const actualText = vTextFieldRef.value.value\n if (actualText && !isNaN(Number(actualText))) {\n inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max))\n } else {\n inputText.value = null\n }\n }\n\n function formatInputValue () {\n if (controlsDisabled.value) return\n if (model.value === null || isNaN(model.value)) {\n inputText.value = null\n return\n }\n inputText.value = props.precision == null\n ? String(model.value)\n : model.value.toFixed(props.precision)\n }\n\n function trimDecimalZeros () {\n if (controlsDisabled.value) return\n if (model.value === null || isNaN(model.value)) {\n inputText.value = null\n return\n }\n inputText.value = model.value.toString()\n }\n\n function onFocus () {\n focus()\n trimDecimalZeros()\n }\n\n function onBlur () {\n blur()\n clampModel()\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 data-testid=\"increment\"\n aria-hidden=\"true\"\n icon={ incrementIcon.value }\n onClick={ onControlClick }\n onPointerup={ onControlMouseup }\n onPointerdown={ onUpControlMousedown }\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 data-testid=\"decrement\"\n aria-hidden=\"true\"\n icon={ decrementIcon.value }\n size={ controlNodeSize.value }\n tabindex=\"-1\"\n onClick={ onControlClick }\n onPointerup={ onControlMouseup }\n onPointerdown={ onDownControlMousedown }\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 || controlVariant.value === 'hidden'\n ? undefined\n : <>{ dividerNode() }{ controlNode() }</>)\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 && controlVariant.value !== 'hidden'\n ? <>{ controlNode() }{ dividerNode() }</>\n : undefined)\n\n const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n return (\n <VTextField\n ref={ vTextFieldRef }\n v-model={ inputText.value }\n validationValue={ model.value }\n onBeforeinput={ onBeforeinput }\n onFocus={ onFocus }\n onBlur={ onBlur }\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":[]}
@@ -0,0 +1,31 @@
1
+ // Utilities
2
+ import { onScopeDispose } from 'vue';
3
+ const HOLD_REPEAT = 50;
4
+ const HOLD_DELAY = 500;
5
+ export function useHold(_ref) {
6
+ let {
7
+ toggleUpDown
8
+ } = _ref;
9
+ let timeout = -1;
10
+ let interval = -1;
11
+ onScopeDispose(holdStop);
12
+ function holdStart(value) {
13
+ holdStop();
14
+ tick(value);
15
+ timeout = window.setTimeout(() => {
16
+ interval = window.setInterval(() => tick(value), HOLD_REPEAT);
17
+ }, HOLD_DELAY);
18
+ }
19
+ function holdStop() {
20
+ window.clearTimeout(timeout);
21
+ window.clearInterval(interval);
22
+ }
23
+ function tick(value) {
24
+ toggleUpDown(value === 'up');
25
+ }
26
+ return {
27
+ holdStart,
28
+ holdStop
29
+ };
30
+ }
31
+ //# sourceMappingURL=hold.mjs.map