@vuetify/nightly 3.8.5-pr-21419.3ae3440 → 3.8.6-master.2025-05-21

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 (43) hide show
  1. package/CHANGELOG.md +10 -11
  2. package/dist/json/attributes.json +3365 -3365
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +164 -164
  5. package/dist/json/web-types.json +6152 -6152
  6. package/dist/vuetify-labs.cjs +38 -33
  7. package/dist/vuetify-labs.css +4423 -4412
  8. package/dist/vuetify-labs.d.ts +59 -59
  9. package/dist/vuetify-labs.esm.js +38 -33
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +38 -33
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +38 -33
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +4299 -4288
  16. package/dist/vuetify.d.ts +59 -59
  17. package/dist/vuetify.esm.js +38 -33
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +38 -33
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +21 -21
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VNavigationDrawer/touch.js +2 -4
  25. package/lib/components/VNavigationDrawer/touch.js.map +1 -1
  26. package/lib/components/VNumberInput/VNumberInput.css +15 -4
  27. package/lib/components/VNumberInput/VNumberInput.js +18 -10
  28. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  29. package/lib/components/VNumberInput/VNumberInput.sass +18 -6
  30. package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
  31. package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
  32. package/lib/components/VSelect/VSelect.js +13 -16
  33. package/lib/components/VSelect/VSelect.js.map +1 -1
  34. package/lib/components/VSlider/slider.js +1 -1
  35. package/lib/components/VSlider/slider.js.map +1 -1
  36. package/lib/composables/goto.js +1 -1
  37. package/lib/composables/goto.js.map +1 -1
  38. package/lib/entry-bundler.js +1 -1
  39. package/lib/entry-bundler.js.map +1 -1
  40. package/lib/framework.d.ts +59 -59
  41. package/lib/framework.js +1 -1
  42. package/lib/framework.js.map +1 -1
  43. package/package.json +5 -5
@@ -2,9 +2,7 @@
2
2
  import { useToggleScope } from "../../composables/toggleScope.js";
3
3
  import { useVelocity } from "../../composables/touch.js"; // Utilities
4
4
  import { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue';
5
-
6
- // Types
7
-
5
+ import { clamp } from "../../util/index.js"; // Types
8
6
  export function useTouch(_ref) {
9
7
  let {
10
8
  el,
@@ -47,7 +45,7 @@ export function useTouch(_ref) {
47
45
  function getProgress(pos) {
48
46
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
49
47
  const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
50
- return limit ? Math.max(0, Math.min(1, progress)) : progress;
48
+ return limit ? clamp(progress) : progress;
51
49
  }
52
50
  function onTouchstart(e) {
53
51
  if (touchless.value) return;
@@ -1 +1 @@
1
- {"version":3,"file":"touch.js","names":["useToggleScope","useVelocity","computed","onBeforeUnmount","onMounted","onScopeDispose","shallowRef","watchEffect","useTouch","_ref","el","isActive","isTemporary","width","touchless","position","window","addEventListener","onTouchstart","passive","onTouchmove","onTouchend","removeEventListener","isHorizontal","includes","value","addMovement","endTouch","getVelocity","maybeDragging","isDragging","dragProgress","offset","start","getOffset","pos","active","document","documentElement","clientWidth","clientHeight","oops","getProgress","limit","arguments","length","undefined","progress","Math","max","min","e","touchX","changedTouches","clientX","touchY","clientY","touchZone","inTouchZone","inElement","cancelable","dx","abs","dy","thresholdMet","preventDefault","velocity","identifier","vx","x","vy","y","direction","left","right","top","bottom","dragStyles","transform","transition","style","setProperty","Error"],"sources":["../../../src/components/VNavigationDrawer/touch.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { useVelocity } from '@/composables/touch'\n\n// Utilities\nimport { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTouch ({\n el,\n isActive,\n isTemporary,\n width,\n touchless,\n position,\n}: {\n el: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n isTemporary: Ref<boolean>\n width: Ref<number>\n touchless: Ref<boolean>\n position: Ref<'left' | 'right' | 'top' | 'bottom'>\n}) {\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, { passive: true })\n window.addEventListener('touchmove', onTouchmove, { passive: false })\n window.addEventListener('touchend', onTouchend, { passive: true })\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart)\n window.removeEventListener('touchmove', onTouchmove)\n window.removeEventListener('touchend', onTouchend)\n })\n\n const isHorizontal = computed(() => ['left', 'right'].includes(position.value))\n\n const { addMovement, endTouch, getVelocity } = useVelocity()\n let maybeDragging = false\n const isDragging = shallowRef(false)\n const dragProgress = shallowRef(0)\n const offset = shallowRef(0)\n let start: [number, number] | undefined\n\n function getOffset (pos: number, active: boolean): number {\n return (\n position.value === 'left' ? pos\n : position.value === 'right' ? document.documentElement.clientWidth - pos\n : position.value === 'top' ? pos\n : position.value === 'bottom' ? document.documentElement.clientHeight - pos\n : oops()\n ) - (active ? width.value : 0)\n }\n\n function getProgress (pos: number, limit = true): number {\n const progress = (\n position.value === 'left' ? (pos - offset.value) / width.value\n : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value\n : position.value === 'top' ? (pos - offset.value) / width.value\n : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n : oops()\n )\n return limit ? Math.max(0, Math.min(1, progress)) : progress\n }\n\n function onTouchstart (e: TouchEvent) {\n if (touchless.value) return\n\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n const touchZone = 25\n const inTouchZone: boolean =\n position.value === 'left' ? touchX < touchZone\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone\n : position.value === 'top' ? touchY < touchZone\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone\n : oops()\n\n const inElement: boolean = isActive.value && (\n position.value === 'left' ? touchX < width.value\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value\n : position.value === 'top' ? touchY < width.value\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value\n : oops()\n )\n\n if (\n inTouchZone ||\n inElement ||\n (isActive.value && isTemporary.value)\n ) {\n start = [touchX, touchY]\n\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n maybeDragging = offset.value > -20 && offset.value < 80\n endTouch(e)\n addMovement(e)\n }\n }\n\n function onTouchmove (e: TouchEvent) {\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false\n return\n }\n\n const dx = Math.abs(touchX - start![0])\n const dy = Math.abs(touchY - start![1])\n\n const thresholdMet = isHorizontal.value\n ? dx > dy && dx > 3\n : dy > dx && dy > 3\n\n if (thresholdMet) {\n isDragging.value = true\n maybeDragging = false\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false\n }\n }\n\n if (!isDragging.value) return\n\n e.preventDefault()\n addMovement(e)\n\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false)\n dragProgress.value = Math.max(0, Math.min(1, progress))\n\n if (progress > 1) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, true)\n } else if (progress < 0) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, false)\n }\n }\n\n function onTouchend (e: TouchEvent) {\n maybeDragging = false\n\n if (!isDragging.value) return\n\n addMovement(e)\n\n isDragging.value = false\n\n const velocity = getVelocity(e.changedTouches[0].identifier)\n const vx = Math.abs(velocity.x)\n const vy = Math.abs(velocity.y)\n const thresholdMet = isHorizontal.value\n ? vx > vy && vx > 400\n : vy > vx && vy > 3\n\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up',\n }[position.value] || oops())\n } else {\n isActive.value = dragProgress.value > 0.5\n }\n }\n\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform:\n position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n : oops(),\n transition: 'none',\n } : undefined\n })\n\n useToggleScope(isDragging, () => {\n const transform = el.value?.style.transform ?? null\n const transition = el.value?.style.transition ?? null\n\n watchEffect(() => {\n el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none')\n el.value?.style.setProperty('transition', dragStyles.value?.transition || null)\n })\n\n onScopeDispose(() => {\n el.value?.style.setProperty('transform', transform)\n el.value?.style.setProperty('transition', transition)\n })\n })\n\n return {\n isDragging,\n dragProgress,\n dragStyles,\n }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"touch.js","names":["useToggleScope","useVelocity","computed","onBeforeUnmount","onMounted","onScopeDispose","shallowRef","watchEffect","clamp","useTouch","_ref","el","isActive","isTemporary","width","touchless","position","window","addEventListener","onTouchstart","passive","onTouchmove","onTouchend","removeEventListener","isHorizontal","includes","value","addMovement","endTouch","getVelocity","maybeDragging","isDragging","dragProgress","offset","start","getOffset","pos","active","document","documentElement","clientWidth","clientHeight","oops","getProgress","limit","arguments","length","undefined","progress","e","touchX","changedTouches","clientX","touchY","clientY","touchZone","inTouchZone","inElement","cancelable","dx","Math","abs","dy","thresholdMet","preventDefault","max","min","velocity","identifier","vx","x","vy","y","direction","left","right","top","bottom","dragStyles","transform","transition","style","setProperty","Error"],"sources":["../../../src/components/VNavigationDrawer/touch.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { useVelocity } from '@/composables/touch'\n\n// Utilities\nimport { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue'\nimport { clamp } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTouch ({\n el,\n isActive,\n isTemporary,\n width,\n touchless,\n position,\n}: {\n el: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n isTemporary: Ref<boolean>\n width: Ref<number>\n touchless: Ref<boolean>\n position: Ref<'left' | 'right' | 'top' | 'bottom'>\n}) {\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, { passive: true })\n window.addEventListener('touchmove', onTouchmove, { passive: false })\n window.addEventListener('touchend', onTouchend, { passive: true })\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart)\n window.removeEventListener('touchmove', onTouchmove)\n window.removeEventListener('touchend', onTouchend)\n })\n\n const isHorizontal = computed(() => ['left', 'right'].includes(position.value))\n\n const { addMovement, endTouch, getVelocity } = useVelocity()\n let maybeDragging = false\n const isDragging = shallowRef(false)\n const dragProgress = shallowRef(0)\n const offset = shallowRef(0)\n let start: [number, number] | undefined\n\n function getOffset (pos: number, active: boolean): number {\n return (\n position.value === 'left' ? pos\n : position.value === 'right' ? document.documentElement.clientWidth - pos\n : position.value === 'top' ? pos\n : position.value === 'bottom' ? document.documentElement.clientHeight - pos\n : oops()\n ) - (active ? width.value : 0)\n }\n\n function getProgress (pos: number, limit = true): number {\n const progress = (\n position.value === 'left' ? (pos - offset.value) / width.value\n : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value\n : position.value === 'top' ? (pos - offset.value) / width.value\n : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n : oops()\n )\n return limit ? clamp(progress) : progress\n }\n\n function onTouchstart (e: TouchEvent) {\n if (touchless.value) return\n\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n const touchZone = 25\n const inTouchZone: boolean =\n position.value === 'left' ? touchX < touchZone\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone\n : position.value === 'top' ? touchY < touchZone\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone\n : oops()\n\n const inElement: boolean = isActive.value && (\n position.value === 'left' ? touchX < width.value\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value\n : position.value === 'top' ? touchY < width.value\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value\n : oops()\n )\n\n if (\n inTouchZone ||\n inElement ||\n (isActive.value && isTemporary.value)\n ) {\n start = [touchX, touchY]\n\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n maybeDragging = offset.value > -20 && offset.value < 80\n endTouch(e)\n addMovement(e)\n }\n }\n\n function onTouchmove (e: TouchEvent) {\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false\n return\n }\n\n const dx = Math.abs(touchX - start![0])\n const dy = Math.abs(touchY - start![1])\n\n const thresholdMet = isHorizontal.value\n ? dx > dy && dx > 3\n : dy > dx && dy > 3\n\n if (thresholdMet) {\n isDragging.value = true\n maybeDragging = false\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false\n }\n }\n\n if (!isDragging.value) return\n\n e.preventDefault()\n addMovement(e)\n\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false)\n dragProgress.value = Math.max(0, Math.min(1, progress))\n\n if (progress > 1) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, true)\n } else if (progress < 0) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, false)\n }\n }\n\n function onTouchend (e: TouchEvent) {\n maybeDragging = false\n\n if (!isDragging.value) return\n\n addMovement(e)\n\n isDragging.value = false\n\n const velocity = getVelocity(e.changedTouches[0].identifier)\n const vx = Math.abs(velocity.x)\n const vy = Math.abs(velocity.y)\n const thresholdMet = isHorizontal.value\n ? vx > vy && vx > 400\n : vy > vx && vy > 3\n\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up',\n }[position.value] || oops())\n } else {\n isActive.value = dragProgress.value > 0.5\n }\n }\n\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform:\n position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n : oops(),\n transition: 'none',\n } : undefined\n })\n\n useToggleScope(isDragging, () => {\n const transform = el.value?.style.transform ?? null\n const transition = el.value?.style.transition ?? null\n\n watchEffect(() => {\n el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none')\n el.value?.style.setProperty('transition', dragStyles.value?.transition || null)\n })\n\n onScopeDispose(() => {\n el.value?.style.setProperty('transform', transform)\n el.value?.style.setProperty('transition', transition)\n })\n })\n\n return {\n isDragging,\n dragProgress,\n dragStyles,\n }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,17 +4,28 @@
4
4
  .v-number-input input[type=number]::-webkit-outer-spin-button, .v-number-input input[type=number]::-webkit-inner-spin-button {
5
5
  -webkit-appearance: none;
6
6
  }
7
- .v-number-input .v-field:not(:has(.v-field__prepend-inner > .v-icon)) {
7
+ .v-number-input .v-field:has(.v-field__prepend-inner > .v-number-input__control:first-child) {
8
8
  padding-inline-start: 0;
9
9
  }
10
- .v-number-input .v-field:not(:has(.v-field__append-inner > .v-icon)) {
10
+ .v-number-input .v-field:has(.v-field__append-inner > .v-number-input__control:last-child) {
11
11
  padding-inline-end: 0;
12
12
  }
13
13
  .v-number-input .v-field__prepend-inner:has(.v-number-input__control) > .v-icon {
14
- margin-inline-end: 12px;
14
+ margin-inline-end: 4px;
15
+ }
16
+ .v-number-input .v-field__prepend-inner:has(.v-number-input__control) > hr + .v-icon,
17
+ .v-number-input .v-field__prepend-inner:has(.v-number-input__control) > .v-number-input__control + .v-icon {
18
+ margin-inline: 8px 0;
15
19
  }
16
20
  .v-number-input .v-field__append-inner:has(.v-number-input__control) > .v-icon {
17
- margin-inline-start: 12px;
21
+ margin-inline-start: 4px;
22
+ }
23
+ .v-number-input .v-field__append-inner:has(.v-number-input__control) > .v-icon:has(+ hr),
24
+ .v-number-input .v-field__append-inner:has(.v-number-input__control) > .v-icon:has(+ .v-number-input__control) {
25
+ margin-inline: 0 8px;
26
+ }
27
+ .v-number-input .v-field__clearable:has(+ .v-field__append-inner > hr:first-child) {
28
+ margin-inline-end: 8px;
18
29
  }
19
30
  .v-number-input--inset .v-divider {
20
31
  height: 55%;
@@ -115,6 +115,9 @@ export const VNumberInput = genericComponent()({
115
115
  const controlNodeDefaultHeight = toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
116
116
  const incrementSlotProps = {
117
117
  props: {
118
+ style: {
119
+ touchAction: 'none'
120
+ },
118
121
  onClick: onControlClick,
119
122
  onPointerup: onControlMouseup,
120
123
  onPointerdown: onUpControlMousedown
@@ -122,6 +125,9 @@ export const VNumberInput = genericComponent()({
122
125
  };
123
126
  const decrementSlotProps = {
124
127
  props: {
128
+ style: {
129
+ touchAction: 'none'
130
+ },
125
131
  onClick: onControlClick,
126
132
  onPointerup: onControlMouseup,
127
133
  onPointerdown: onDownControlMousedown
@@ -254,17 +260,18 @@ export const VNumberInput = genericComponent()({
254
260
  } = VTextField.filterProps(props);
255
261
  function incrementControlNode() {
256
262
  return !slots.increment ? _createVNode(VBtn, {
263
+ "aria-hidden": "true",
264
+ "data-testid": "increment",
257
265
  "disabled": !canIncrease.value,
258
266
  "flat": true,
259
- "key": "increment-btn",
260
267
  "height": controlNodeDefaultHeight.value,
261
- "data-testid": "increment",
262
- "aria-hidden": "true",
263
268
  "icon": incrementIcon.value,
269
+ "key": "increment-btn",
264
270
  "onClick": onControlClick,
265
- "onPointerup": onControlMouseup,
266
271
  "onPointerdown": onUpControlMousedown,
272
+ "onPointerup": onControlMouseup,
267
273
  "size": controlNodeSize.value,
274
+ "style": "touch-action: none",
268
275
  "tabindex": "-1"
269
276
  }, null) : _createVNode(VDefaultsProvider, {
270
277
  "key": "increment-defaults",
@@ -283,18 +290,19 @@ export const VNumberInput = genericComponent()({
283
290
  }
284
291
  function decrementControlNode() {
285
292
  return !slots.decrement ? _createVNode(VBtn, {
293
+ "aria-hidden": "true",
294
+ "data-testid": "decrement",
286
295
  "disabled": !canDecrease.value,
287
296
  "flat": true,
288
- "key": "decrement-btn",
289
297
  "height": controlNodeDefaultHeight.value,
290
- "data-testid": "decrement",
291
- "aria-hidden": "true",
292
298
  "icon": decrementIcon.value,
293
- "size": controlNodeSize.value,
294
- "tabindex": "-1",
299
+ "key": "decrement-btn",
295
300
  "onClick": onControlClick,
301
+ "onPointerdown": onDownControlMousedown,
296
302
  "onPointerup": onControlMouseup,
297
- "onPointerdown": onDownControlMousedown
303
+ "size": controlNodeSize.value,
304
+ "style": "touch-action: none",
305
+ "tabindex": "-1"
298
306
  }, null) : _createVNode(VDefaultsProvider, {
299
307
  "key": "decrement-defaults",
300
308
  "defaults": {
@@ -1 +1 @@
1
- {"version":3,"file":"VNumberInput.js","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useHold","useFocus","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","shallowRef","toRef","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/components/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, toRef, 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>()\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 = toRef(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n const decrementIcon = toRef(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n const controlNodeSize = toRef(() => controlVariant.value === 'split' ? 'default' : 'small')\n const controlNodeDefaultHeight = toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n const incrementSlotProps = {\n props: {\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onUpControlMousedown,\n },\n }\n const decrementSlotProps = {\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) }\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) }\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":[]}
1
+ {"version":3,"file":"VNumberInput.js","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useHold","useFocus","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","shallowRef","toRef","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","style","touchAction","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","_len","args","Array","_key","_len2","_key2"],"sources":["../../../src/components/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, toRef, 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>()\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 = toRef(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n const decrementIcon = toRef(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n const controlNodeSize = toRef(() => controlVariant.value === 'split' ? 'default' : 'small')\n const controlNodeDefaultHeight = toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n const incrementSlotProps = {\n props: {\n style: { touchAction: 'none' },\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onUpControlMousedown,\n },\n }\n const decrementSlotProps = {\n props: {\n style: { touchAction: 'none' },\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 aria-hidden=\"true\"\n data-testid=\"increment\"\n disabled={ !canIncrease.value }\n flat\n height={ controlNodeDefaultHeight.value }\n icon={ incrementIcon.value }\n key=\"increment-btn\"\n onClick={ onControlClick }\n onPointerdown={ onUpControlMousedown }\n onPointerup={ onControlMouseup }\n size={ controlNodeSize.value }\n style=\"touch-action: none\"\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) }\n </VDefaultsProvider>\n )\n }\n\n function decrementControlNode () {\n return !slots.decrement ? (\n <VBtn\n aria-hidden=\"true\"\n data-testid=\"decrement\"\n disabled={ !canDecrease.value }\n flat\n height={ controlNodeDefaultHeight.value }\n icon={ decrementIcon.value }\n key=\"decrement-btn\"\n onClick={ onControlClick }\n onPointerdown={ onDownControlMousedown }\n onPointerup={ onControlMouseup }\n size={ controlNodeSize.value }\n style=\"touch-action: none\"\n tabindex=\"-1\"\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) }\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":[]}
@@ -15,18 +15,30 @@
15
15
  -webkit-appearance: none
16
16
 
17
17
  .v-field
18
- &:not(:has(.v-field__prepend-inner > .v-icon))
18
+ &:has(.v-field__prepend-inner > .v-number-input__control:first-child)
19
19
  padding-inline-start: 0
20
20
 
21
- &:not(:has(.v-field__append-inner > .v-icon))
21
+ &:has(.v-field__append-inner > .v-number-input__control:last-child)
22
22
  padding-inline-end: 0
23
23
 
24
- .v-field__prepend-inner:has(.v-number-input__control) > .v-icon
25
- margin-inline-end: 12px
24
+ .v-field__prepend-inner:has(.v-number-input__control)
25
+ > .v-icon
26
+ margin-inline-end: 4px
26
27
 
27
- .v-field__append-inner:has(.v-number-input__control) > .v-icon
28
- margin-inline-start: 12px
28
+ > hr + .v-icon,
29
+ > .v-number-input__control + .v-icon
30
+ margin-inline: 8px 0
29
31
 
32
+ .v-field__append-inner:has(.v-number-input__control)
33
+ > .v-icon
34
+ margin-inline-start: 4px
35
+
36
+ > .v-icon:has(+ hr),
37
+ > .v-icon:has(+ .v-number-input__control)
38
+ margin-inline: 0 8px
39
+
40
+ .v-field__clearable:has(+ .v-field__append-inner > hr:first-child)
41
+ margin-inline-end: 8px
30
42
 
31
43
  &--inset
32
44
  .v-divider
@@ -11,7 +11,7 @@ import { makeSizeProps, useSize } from "../../composables/size.js";
11
11
  import { makeTagProps } from "../../composables/tag.js";
12
12
  import { makeThemeProps, provideTheme } from "../../composables/theme.js"; // Utilities
13
13
  import { ref, toRef, watchEffect } from 'vue';
14
- import { convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
14
+ import { clamp, convertToUnit, genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
15
15
  export const makeVProgressCircularProps = propsFactory({
16
16
  bgColor: String,
17
17
  color: String,
@@ -68,7 +68,7 @@ export const VProgressCircular = genericComponent()({
68
68
  resizeRef,
69
69
  contentRect
70
70
  } = useResizeObserver();
71
- const normalizedValue = toRef(() => Math.max(0, Math.min(100, parseFloat(props.modelValue))));
71
+ const normalizedValue = toRef(() => clamp(parseFloat(props.modelValue), 0, 100));
72
72
  const width = toRef(() => Number(props.width));
73
73
  const size = toRef(() => {
74
74
  // Get size from element if size prop value is small, large etc
@@ -1 +1 @@
1
- {"version":3,"file":"VProgressCircular.js","names":["useTextColor","makeComponentProps","useIntersectionObserver","useResizeObserver","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","ref","toRef","watchEffect","convertToUnit","genericComponent","propsFactory","useRender","makeVProgressCircularProps","bgColor","String","color","indeterminate","Boolean","modelValue","type","Number","default","rotate","width","tag","VProgressCircular","name","props","setup","_ref","slots","MAGIC_RADIUS_CONSTANT","CIRCUMFERENCE","Math","PI","root","themeClasses","sizeClasses","sizeStyles","textColorClasses","textColorStyles","underlayColorClasses","underlayColorStyles","intersectionRef","isIntersecting","resizeRef","contentRect","normalizedValue","max","min","parseFloat","size","value","diameter","strokeWidth","strokeDashOffset","_createVNode","class","style","undefined","transform"],"sources":["../../../src/components/VProgressCircular/VProgressCircular.tsx"],"sourcesContent":["// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { ref, toRef, watchEffect } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVProgressCircularProps = propsFactory({\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeComponentProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n}, 'VProgressCircular')\n\ntype VProgressCircularSlots = {\n default: { value: number }\n}\n\nexport const VProgressCircular = genericComponent<VProgressCircularSlots>()({\n name: 'VProgressCircular',\n\n props: makeVProgressCircularProps(),\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const root = ref<HTMLElement>()\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n const { resizeRef, contentRect } = useResizeObserver()\n\n const normalizedValue = toRef(() => Math.max(0, Math.min(100, parseFloat(props.modelValue))))\n const width = toRef(() => Number(props.width))\n const size = toRef(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value\n ? Number(props.size)\n : contentRect.value\n ? contentRect.value.width\n : Math.max(width.value, 32)\n })\n const diameter = toRef(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = toRef(() => width.value / size.value * diameter.value)\n const strokeDashOffset = toRef(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n watchEffect(() => {\n intersectionRef.value = root.value\n resizeRef.value = root.value\n })\n\n useRender(() => (\n <props.tag\n ref={ root }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n props.class,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n props.style,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressCircular = InstanceType<typeof VProgressCircular>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VProgressCircular.js","names":["useTextColor","makeComponentProps","useIntersectionObserver","useResizeObserver","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","ref","toRef","watchEffect","clamp","convertToUnit","genericComponent","propsFactory","useRender","makeVProgressCircularProps","bgColor","String","color","indeterminate","Boolean","modelValue","type","Number","default","rotate","width","tag","VProgressCircular","name","props","setup","_ref","slots","MAGIC_RADIUS_CONSTANT","CIRCUMFERENCE","Math","PI","root","themeClasses","sizeClasses","sizeStyles","textColorClasses","textColorStyles","underlayColorClasses","underlayColorStyles","intersectionRef","isIntersecting","resizeRef","contentRect","normalizedValue","parseFloat","size","value","max","diameter","strokeWidth","strokeDashOffset","_createVNode","class","style","undefined","transform"],"sources":["../../../src/components/VProgressCircular/VProgressCircular.tsx"],"sourcesContent":["// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { ref, toRef, watchEffect } from 'vue'\nimport { clamp, convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVProgressCircularProps = propsFactory({\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeComponentProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n}, 'VProgressCircular')\n\ntype VProgressCircularSlots = {\n default: { value: number }\n}\n\nexport const VProgressCircular = genericComponent<VProgressCircularSlots>()({\n name: 'VProgressCircular',\n\n props: makeVProgressCircularProps(),\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const root = ref<HTMLElement>()\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n const { resizeRef, contentRect } = useResizeObserver()\n\n const normalizedValue = toRef(() => clamp(parseFloat(props.modelValue), 0, 100))\n const width = toRef(() => Number(props.width))\n const size = toRef(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value\n ? Number(props.size)\n : contentRect.value\n ? contentRect.value.width\n : Math.max(width.value, 32)\n })\n const diameter = toRef(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = toRef(() => width.value / size.value * diameter.value)\n const strokeDashOffset = toRef(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n watchEffect(() => {\n intersectionRef.value = root.value\n resizeRef.value = root.value\n })\n\n useRender(() => (\n <props.tag\n ref={ root }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n props.class,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n props.style,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n )}\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressCircular = InstanceType<typeof VProgressCircular>\n"],"mappings":"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","ignoreList":[]}
@@ -180,42 +180,39 @@ export const VSelect = genericComponent()({
180
180
  const items = displayItems.value;
181
181
  function findItem() {
182
182
  let result = findItemBase();
183
- if (result !== undefined) return result;
183
+ if (result) return result;
184
184
  if (keyboardLookupPrefix.at(-1) === keyboardLookupPrefix.at(-2)) {
185
185
  // No matches but we have a repeated letter, try the next item with that prefix
186
186
  keyboardLookupPrefix = keyboardLookupPrefix.slice(0, -1);
187
187
  result = findItemBase();
188
- if (result !== undefined) return result;
188
+ if (result) return result;
189
189
  }
190
190
 
191
191
  // Still nothing, wrap around to the top
192
192
  keyboardLookupIndex = -1;
193
193
  result = findItemBase();
194
- if (result !== undefined) return result;
194
+ if (result) return result;
195
195
 
196
196
  // Still nothing, try just the new letter
197
197
  keyboardLookupPrefix = e.key.toLowerCase();
198
198
  return findItemBase();
199
199
  }
200
200
  function findItemBase() {
201
- for (let i = 0; i < items.length; i++) {
201
+ for (let i = keyboardLookupIndex + 1; i < items.length; i++) {
202
202
  const _item = items[i];
203
- if (i > keyboardLookupIndex && _item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {
204
- keyboardLookupIndex = i;
205
- return _item;
203
+ if (_item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {
204
+ return [_item, i];
206
205
  }
207
206
  }
208
207
  return undefined;
209
208
  }
210
- const item = findItem();
211
- if (item !== undefined) {
212
- if (!props.multiple) {
213
- model.value = [item];
214
- }
215
- const index = displayItems.value.indexOf(item);
216
- if (~index && IN_BROWSER) {
217
- listRef.value?.focus(index);
218
- }
209
+ const result = findItem();
210
+ if (!result) return;
211
+ const [item, index] = result;
212
+ keyboardLookupIndex = index;
213
+ listRef.value?.focus(index);
214
+ if (!props.multiple) {
215
+ model.value = [item];
219
216
  }
220
217
  }
221
218