vuetify 3.8.8 → 3.8.10

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 (130) hide show
  1. package/LICENSE.md +1 -1
  2. package/dist/json/attributes.json +3413 -3405
  3. package/dist/json/importMap-labs.json +38 -38
  4. package/dist/json/importMap.json +146 -146
  5. package/dist/json/tags.json +2 -0
  6. package/dist/json/web-types.json +6357 -6339
  7. package/dist/vuetify-labs.cjs +210 -103
  8. package/dist/vuetify-labs.css +3832 -3823
  9. package/dist/vuetify-labs.d.ts +80 -58
  10. package/dist/vuetify-labs.esm.js +211 -104
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +210 -103
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +191 -83
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3244 -3235
  17. package/dist/vuetify.d.ts +70 -58
  18. package/dist/vuetify.esm.js +192 -84
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +191 -83
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1002 -993
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VBtn/VBtn.css +3 -0
  26. package/lib/components/VBtn/VBtn.sass +3 -0
  27. package/lib/components/VBtnGroup/VBtnGroup.css +2 -1
  28. package/lib/components/VBtnGroup/VBtnGroup.sass +2 -1
  29. package/lib/components/VDataTable/VDataTable.css +6 -3
  30. package/lib/components/VDataTable/VDataTable.sass +4 -2
  31. package/lib/components/VDataTable/VDataTableColumn.js +1 -0
  32. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  33. package/lib/components/VDataTable/VDataTableFooter.js +3 -1
  34. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  35. package/lib/components/VDataTable/VDataTableHeaders.js +8 -1
  36. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  37. package/lib/components/VDatePicker/VDatePicker.js +19 -13
  38. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  39. package/lib/components/VDatePicker/VDatePickerMonth.js +2 -2
  40. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  41. package/lib/components/VDatePicker/VDatePickerYears.js +1 -3
  42. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  43. package/lib/components/VField/VField.js +10 -2
  44. package/lib/components/VField/VField.js.map +1 -1
  45. package/lib/components/VFileInput/VFileInput.js +8 -3
  46. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  47. package/lib/components/VList/VListChildren.js +4 -3
  48. package/lib/components/VList/VListChildren.js.map +1 -1
  49. package/lib/components/VList/VListGroup.d.ts +10 -0
  50. package/lib/components/VList/VListGroup.js +2 -2
  51. package/lib/components/VList/VListGroup.js.map +1 -1
  52. package/lib/components/VList/VListItem.css +2 -0
  53. package/lib/components/VList/VListItem.sass +2 -0
  54. package/lib/components/VList/_variables.scss +1 -0
  55. package/lib/components/VNumberInput/VNumberInput.d.ts +5 -0
  56. package/lib/components/VNumberInput/VNumberInput.js +7 -11
  57. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  58. package/lib/components/VOtpInput/VOtpInput.js +22 -3
  59. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  60. package/lib/components/VSelect/VSelect.js +6 -5
  61. package/lib/components/VSelect/VSelect.js.map +1 -1
  62. package/lib/components/VSlider/VSliderThumb.js +1 -1
  63. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  64. package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
  65. package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
  66. package/lib/components/VTextField/VTextField.js +9 -8
  67. package/lib/components/VTextField/VTextField.js.map +1 -1
  68. package/lib/components/VTextarea/VTextarea.js +4 -4
  69. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  70. package/lib/composables/autofocus.d.ts +7 -0
  71. package/lib/composables/autofocus.js +10 -0
  72. package/lib/composables/autofocus.js.map +1 -0
  73. package/lib/composables/date/adapters/vuetify.js +1 -1
  74. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  75. package/lib/composables/date/date.d.ts +1 -4
  76. package/lib/composables/date/date.js +13 -14
  77. package/lib/composables/date/date.js.map +1 -1
  78. package/lib/composables/fileDrop.d.ts +4 -0
  79. package/lib/composables/fileDrop.js +50 -0
  80. package/lib/composables/fileDrop.js.map +1 -0
  81. package/lib/composables/group.js +1 -0
  82. package/lib/composables/group.js.map +1 -1
  83. package/lib/composables/hotkey.d.ts +9 -0
  84. package/lib/composables/hotkey.js +131 -0
  85. package/lib/composables/hotkey.js.map +1 -0
  86. package/lib/composables/icons.d.ts +6 -0
  87. package/lib/composables/icons.js.map +1 -1
  88. package/lib/composables/intersectionObserver.js +2 -2
  89. package/lib/composables/intersectionObserver.js.map +1 -1
  90. package/lib/composables/list-items.js +2 -2
  91. package/lib/composables/list-items.js.map +1 -1
  92. package/lib/composables/selectLink.js +2 -2
  93. package/lib/composables/selectLink.js.map +1 -1
  94. package/lib/composables/transition.js +3 -3
  95. package/lib/composables/transition.js.map +1 -1
  96. package/lib/entry-bundler.d.ts +0 -3
  97. package/lib/entry-bundler.js +1 -1
  98. package/lib/entry-bundler.js.map +1 -1
  99. package/lib/framework.d.ts +60 -58
  100. package/lib/framework.js +1 -1
  101. package/lib/framework.js.map +1 -1
  102. package/lib/iconsets/fa.js +3 -1
  103. package/lib/iconsets/fa.js.map +1 -1
  104. package/lib/iconsets/fa4.js +3 -1
  105. package/lib/iconsets/fa4.js.map +1 -1
  106. package/lib/iconsets/md.js +3 -1
  107. package/lib/iconsets/md.js.map +1 -1
  108. package/lib/iconsets/mdi-svg.js +3 -1
  109. package/lib/iconsets/mdi-svg.js.map +1 -1
  110. package/lib/labs/VColorInput/VColorInput.js +3 -8
  111. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  112. package/lib/labs/VDateInput/VDateInput.d.ts +5 -0
  113. package/lib/labs/VDateInput/VDateInput.js +7 -10
  114. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  115. package/lib/labs/VFileUpload/VFileUpload.js +7 -3
  116. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  117. package/lib/labs/VFileUpload/VFileUploadItem.js +1 -0
  118. package/lib/labs/VFileUpload/VFileUploadItem.js.map +1 -1
  119. package/lib/labs/VTimePicker/VTimePickerClock.js +3 -1
  120. package/lib/labs/VTimePicker/VTimePickerClock.js.map +1 -1
  121. package/lib/labs/VTreeview/VTreeviewChildren.js +2 -1
  122. package/lib/labs/VTreeview/VTreeviewChildren.js.map +1 -1
  123. package/lib/labs/VTreeview/VTreeviewGroup.d.ts +10 -0
  124. package/lib/labs/VTreeview/VTreeviewItem.js +1 -0
  125. package/lib/labs/VTreeview/VTreeviewItem.js.map +1 -1
  126. package/lib/labs/entry-bundler.d.ts +0 -3
  127. package/lib/util/helpers.d.ts +4 -1
  128. package/lib/util/helpers.js +7 -1
  129. package/lib/util/helpers.js.map +1 -1
  130. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"VListGroup.js","names":["VExpandTransition","VDefaultsProvider","useList","makeComponentProps","IconValue","useNestedGroupActivator","useNestedItem","useSsrBoot","makeTagProps","MaybeTransition","computed","defineComponent","genericComponent","propsFactory","useRender","VListGroupActivator","name","setup","_","_ref","slots","default","makeVListGroupProps","activeColor","String","baseColor","color","collapseIcon","type","expandIcon","prependIcon","appendIcon","fluid","Boolean","subgroup","title","value","VListGroup","props","_ref2","isOpen","open","id","_id","list","isBooted","onClick","e","stopPropagation","includes","target","tagName","activatorProps","class","toggleIcon","activatorDefaults","VListItem","active","_createVNode","tag","_normalizeClass","hasPrepend","_normalizeStyle","style","activator","component","_withDirectives","_createElementVNode","_vShow"],"sources":["../../../src/components/VList/VListGroup.tsx"],"sourcesContent":["// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useList } from './list'\nimport { makeComponentProps } from '@/composables/component'\nimport { IconValue } from '@/composables/icons'\nimport { useNestedGroupActivator, useNestedItem } from '@/composables/nested/nested'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VListGroupSlots = {\n default: never\n activator: { isOpen: boolean, props: Record<string, unknown> }\n}\n\nconst VListGroupActivator = defineComponent({\n name: 'VListGroupActivator',\n\n setup (_, { slots }) {\n useNestedGroupActivator()\n\n return () => slots.default?.()\n },\n})\n\nexport const makeVListGroupProps = propsFactory({\n /* @deprecated */\n activeColor: String,\n baseColor: String,\n color: String,\n collapseIcon: {\n type: IconValue,\n default: '$collapse',\n },\n expandIcon: {\n type: IconValue,\n default: '$expand',\n },\n prependIcon: IconValue,\n appendIcon: IconValue,\n fluid: Boolean,\n subgroup: Boolean,\n title: String,\n value: null,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n}, 'VListGroup')\n\nexport const VListGroup = genericComponent<VListGroupSlots>()({\n name: 'VListGroup',\n\n props: makeVListGroupProps(),\n\n setup (props, { slots }) {\n const { isOpen, open, id: _id } = useNestedItem(() => props.value, true)\n const id = computed(() => `v-list-group--id-${String(_id.value)}`)\n const list = useList()\n const { isBooted } = useSsrBoot()\n\n function onClick (e: Event) {\n e.stopPropagation()\n if (['INPUT', 'TEXTAREA'].includes((e.target as Element)?.tagName)) return\n open(!isOpen.value, e)\n }\n\n const activatorProps = computed(() => ({\n onClick,\n class: 'v-list-group__header',\n id: id.value,\n }))\n\n const toggleIcon = computed(() => isOpen.value ? props.collapseIcon : props.expandIcon)\n const activatorDefaults = computed(() => ({\n VListItem: {\n active: isOpen.value,\n activeColor: props.activeColor,\n baseColor: props.baseColor,\n color: props.color,\n prependIcon: props.prependIcon || (props.subgroup && toggleIcon.value),\n appendIcon: props.appendIcon || (!props.subgroup && toggleIcon.value),\n title: props.title,\n value: props.value,\n },\n }))\n\n useRender(() => (\n <props.tag\n class={[\n 'v-list-group',\n {\n 'v-list-group--prepend': list?.hasPrepend.value,\n 'v-list-group--fluid': props.fluid,\n 'v-list-group--subgroup': props.subgroup,\n 'v-list-group--open': isOpen.value,\n },\n props.class,\n ]}\n style={ props.style }\n >\n { slots.activator && (\n <VDefaultsProvider defaults={ activatorDefaults.value }>\n <VListGroupActivator>\n { slots.activator({ props: activatorProps.value, isOpen: isOpen.value }) }\n </VListGroupActivator>\n </VDefaultsProvider>\n )}\n\n <MaybeTransition transition={{ component: VExpandTransition }} disabled={ !isBooted.value }>\n <div class=\"v-list-group__items\" role=\"group\" aria-labelledby={ id.value } v-show={ isOpen.value }>\n { slots.default?.() }\n </div>\n </MaybeTransition>\n </props.tag>\n ))\n\n return {\n isOpen,\n }\n },\n})\n\nexport type VListGroup = InstanceType<typeof VListGroup>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VListGroup.js","names":["VExpandTransition","VDefaultsProvider","useList","makeComponentProps","IconValue","useNestedGroupActivator","useNestedItem","useSsrBoot","makeTagProps","MaybeTransition","computed","defineComponent","genericComponent","propsFactory","useRender","VListGroupActivator","name","setup","_","_ref","slots","default","makeVListGroupProps","activeColor","String","baseColor","color","collapseIcon","type","expandIcon","rawId","Number","prependIcon","appendIcon","fluid","Boolean","subgroup","title","value","VListGroup","props","_ref2","isOpen","open","id","_id","list","isBooted","onClick","e","includes","target","tagName","activatorProps","class","toggleIcon","activatorDefaults","VListItem","active","_createVNode","tag","_normalizeClass","hasPrepend","_normalizeStyle","style","activator","component","_withDirectives","_createElementVNode","_vShow"],"sources":["../../../src/components/VList/VListGroup.tsx"],"sourcesContent":["// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useList } from './list'\nimport { makeComponentProps } from '@/composables/component'\nimport { IconValue } from '@/composables/icons'\nimport { useNestedGroupActivator, useNestedItem } from '@/composables/nested/nested'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VListGroupSlots = {\n default: never\n activator: { isOpen: boolean, props: Record<string, unknown> }\n}\n\nconst VListGroupActivator = defineComponent({\n name: 'VListGroupActivator',\n\n setup (_, { slots }) {\n useNestedGroupActivator()\n\n return () => slots.default?.()\n },\n})\n\nexport const makeVListGroupProps = propsFactory({\n /* @deprecated */\n activeColor: String,\n baseColor: String,\n color: String,\n collapseIcon: {\n type: IconValue,\n default: '$collapse',\n },\n expandIcon: {\n type: IconValue,\n default: '$expand',\n },\n rawId: [String, Number],\n prependIcon: IconValue,\n appendIcon: IconValue,\n fluid: Boolean,\n subgroup: Boolean,\n title: String,\n value: null,\n\n ...makeComponentProps(),\n ...makeTagProps(),\n}, 'VListGroup')\n\nexport const VListGroup = genericComponent<VListGroupSlots>()({\n name: 'VListGroup',\n\n props: makeVListGroupProps(),\n\n setup (props, { slots }) {\n const { isOpen, open, id: _id } = useNestedItem(() => props.value, true)\n const id = computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`)\n const list = useList()\n const { isBooted } = useSsrBoot()\n\n function onClick (e: Event) {\n if (['INPUT', 'TEXTAREA'].includes((e.target as Element)?.tagName)) return\n open(!isOpen.value, e)\n }\n\n const activatorProps = computed(() => ({\n onClick,\n class: 'v-list-group__header',\n id: id.value,\n }))\n\n const toggleIcon = computed(() => isOpen.value ? props.collapseIcon : props.expandIcon)\n const activatorDefaults = computed(() => ({\n VListItem: {\n active: isOpen.value,\n activeColor: props.activeColor,\n baseColor: props.baseColor,\n color: props.color,\n prependIcon: props.prependIcon || (props.subgroup && toggleIcon.value),\n appendIcon: props.appendIcon || (!props.subgroup && toggleIcon.value),\n title: props.title,\n value: props.value,\n },\n }))\n\n useRender(() => (\n <props.tag\n class={[\n 'v-list-group',\n {\n 'v-list-group--prepend': list?.hasPrepend.value,\n 'v-list-group--fluid': props.fluid,\n 'v-list-group--subgroup': props.subgroup,\n 'v-list-group--open': isOpen.value,\n },\n props.class,\n ]}\n style={ props.style }\n >\n { slots.activator && (\n <VDefaultsProvider defaults={ activatorDefaults.value }>\n <VListGroupActivator>\n { slots.activator({ props: activatorProps.value, isOpen: isOpen.value }) }\n </VListGroupActivator>\n </VDefaultsProvider>\n )}\n\n <MaybeTransition transition={{ component: VExpandTransition }} disabled={ !isBooted.value }>\n <div class=\"v-list-group__items\" role=\"group\" aria-labelledby={ id.value } v-show={ isOpen.value }>\n { slots.default?.() }\n </div>\n </MaybeTransition>\n </props.tag>\n ))\n\n return {\n isOpen,\n }\n },\n})\n\nexport type VListGroup = InstanceType<typeof VListGroup>\n"],"mappings":"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","ignoreList":[]}
@@ -211,6 +211,7 @@
211
211
  align-self: center;
212
212
  grid-area: content;
213
213
  overflow: hidden;
214
+ min-width: 40px;
214
215
  }
215
216
 
216
217
  .v-list-item-action {
@@ -452,6 +453,7 @@
452
453
 
453
454
  .v-list-group__items {
454
455
  --indent-padding: calc(var(--parent-padding) + var(--list-indent-size));
456
+ min-width: min-content;
455
457
  }
456
458
 
457
459
  .v-list-group__items .v-list-item {
@@ -150,6 +150,7 @@
150
150
  align-self: center
151
151
  grid-area: content
152
152
  overflow: hidden
153
+ min-width: $list-item-content-min-width
153
154
 
154
155
  .v-list-item-action
155
156
  align-self: center
@@ -321,6 +322,7 @@
321
322
 
322
323
  .v-list-group__items
323
324
  --indent-padding: calc(var(--parent-padding) + var(--list-indent-size))
325
+ min-width: min-content
324
326
 
325
327
  .v-list-group__items .v-list-item
326
328
  padding-inline-start: calc(#{$base-padding} + var(--indent-padding)) !important
@@ -37,6 +37,7 @@ $list-item-border-radius: 0 !default;
37
37
  $list-item-border-style: settings.$border-style-root !default;
38
38
  $list-item-border-width: 0 !default;
39
39
  $list-item-border-thin-width: thin !default;
40
+ $list-item-content-min-width: 40px !default;
40
41
  $list-item-elevation: 1 !default;
41
42
  $list-item-icon-opacity: var(--v-medium-emphasis-opacity) !default;
42
43
  $list-item-icon-active-opacity: 1 !default;
@@ -136,6 +136,7 @@ export declare const VNumberInput: {
136
136
  "v-slot:increment"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
137
137
  "v-slot:decrement"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
138
138
  } & {
139
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
139
140
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
140
141
  }, Omit<Omit<{
141
142
  $: import("vue").ComponentInternalInstance;
@@ -2076,6 +2077,7 @@ export declare const VNumberInput: {
2076
2077
  } | {};
2077
2078
  }) | {};
2078
2079
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
2080
+ 'update:focused': (val: boolean) => true;
2079
2081
  'update:modelValue': (val: number) => true;
2080
2082
  }, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, {
2081
2083
  flat: boolean;
@@ -2272,6 +2274,7 @@ export declare const VNumberInput: {
2272
2274
  "v-slot:increment"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
2273
2275
  "v-slot:decrement"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
2274
2276
  } & {
2277
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
2275
2278
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
2276
2279
  }, Omit<Omit<{
2277
2280
  $: import("vue").ComponentInternalInstance;
@@ -4385,6 +4388,7 @@ export declare const VNumberInput: {
4385
4388
  "v-slot:increment"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
4386
4389
  "v-slot:decrement"?: false | ((arg: ControlSlot) => import("vue").VNodeChild) | undefined;
4387
4390
  } & {
4391
+ "onUpdate:focused"?: ((val: boolean) => any) | undefined;
4388
4392
  "onUpdate:modelValue"?: ((val: number) => any) | undefined;
4389
4393
  }, Omit<Omit<{
4390
4394
  $: import("vue").ComponentInternalInstance;
@@ -6325,6 +6329,7 @@ export declare const VNumberInput: {
6325
6329
  } | {};
6326
6330
  }) | {};
6327
6331
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6332
+ 'update:focused': (val: boolean) => true;
6328
6333
  'update:modelValue': (val: number) => true;
6329
6334
  }, string, {
6330
6335
  flat: boolean;
@@ -8,7 +8,6 @@ import { VDefaultsProvider } from "../VDefaultsProvider/index.js";
8
8
  import { VDivider } from "../VDivider/index.js";
9
9
  import { makeVTextFieldProps, VTextField } from "../VTextField/VTextField.js"; // Composables
10
10
  import { useHold } from "./hold.js";
11
- import { useFocus } from "../../composables/focus.js";
12
11
  import { useForm } from "../../composables/form.js";
13
12
  import { forwardRefs } from "../../composables/forwardRefs.js";
14
13
  import { useProxiedModel } from "../../composables/proxiedModel.js"; // Utilities
@@ -49,6 +48,7 @@ export const VNumberInput = genericComponent()({
49
48
  ...makeVNumberInputProps()
50
49
  },
51
50
  emits: {
51
+ 'update:focused': val => true,
52
52
  'update:modelValue': val => true
53
53
  },
54
54
  setup(props, _ref) {
@@ -64,11 +64,7 @@ export const VNumberInput = genericComponent()({
64
64
  });
65
65
  const form = useForm(props);
66
66
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
67
- const {
68
- isFocused,
69
- focus,
70
- blur
71
- } = useFocus(props);
67
+ const isFocused = shallowRef(props.focused);
72
68
  function correctPrecision(val) {
73
69
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
74
70
  const fixed = precision == null ? String(val) : val.toFixed(precision);
@@ -255,11 +251,9 @@ export const VNumberInput = genericComponent()({
255
251
  inputText.value = model.value.toString();
256
252
  }
257
253
  function onFocus() {
258
- focus();
259
254
  trimDecimalZeros();
260
255
  }
261
256
  function onBlur() {
262
- blur();
263
257
  clampModel();
264
258
  }
265
259
  useRender(() => {
@@ -352,9 +346,12 @@ export const VNumberInput = genericComponent()({
352
346
  }, null)]) : props.reverse && controlVariant.value !== 'hidden' ? _createElementVNode(_Fragment, null, [controlNode(), dividerNode()]) : undefined;
353
347
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
354
348
  return _createVNode(VTextField, _mergeProps({
355
- "ref": vTextFieldRef,
349
+ "ref": vTextFieldRef
350
+ }, textFieldProps, {
356
351
  "modelValue": inputText.value,
357
352
  "onUpdate:modelValue": $event => inputText.value = $event,
353
+ "focused": isFocused.value,
354
+ "onUpdate:focused": $event => isFocused.value = $event,
358
355
  "validationValue": model.value,
359
356
  "onBeforeinput": onBeforeinput,
360
357
  "onFocus": onFocus,
@@ -367,8 +364,7 @@ export const VNumberInput = genericComponent()({
367
364
  'v-number-input--reverse': props.reverse,
368
365
  'v-number-input--split': controlVariant.value === 'split',
369
366
  'v-number-input--stacked': controlVariant.value === 'stacked'
370
- }, props.class]
371
- }, textFieldProps, {
367
+ }, props.class],
372
368
  "style": props.style,
373
369
  "inputmode": "decimal"
374
370
  }), {
@@ -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","extractNumber","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","onPointercancel","onControlPointerCancel","decrementSlotProps","onDownControlMousedown","formatInputValue","clampModel","inferPrecision","str","idx","indexOf","increment","inferredPrecision","Math","onBeforeinput","e","data","inputElement","target","existingTxt","selectionStart","selectionEnd","potentialNewInputVal","slice","potentialNewNumber","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","_createElementVNode","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, extractNumber, 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 onPointercancel: onControlPointerCancel,\n },\n }\n const decrementSlotProps = {\n props: {\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onDownControlMousedown,\n onPointercancel: onControlPointerCancel,\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 inputElement = e.target as HTMLInputElement\n const { value: existingTxt, selectionStart, selectionEnd } = inputElement ?? {}\n\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\n const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision)\n\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 inputElement!.value = potentialNewNumber\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 inputElement!.value = potentialNewNumber\n }\n // Ignore decimal separator when precision = 0\n if (props.precision === 0 && potentialNewInputVal.includes('.')) {\n e.preventDefault()\n inputElement!.value = potentialNewNumber\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 onControlPointerCancel (e: PointerEvent) {\n const el = e.currentTarget as HTMLElement\n el?.releasePointerCapture(e.pointerId)\n holdStop()\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 onPointercancel={ onControlPointerCancel }\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 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 onPointercancel={ onControlPointerCancel }\n size={ controlNodeSize.value }\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":[]}
1
+ {"version":3,"file":"VNumberInput.js","names":["VBtn","VDefaultsProvider","VDivider","makeVTextFieldProps","VTextField","useHold","useForm","forwardRefs","useProxiedModel","computed","nextTick","onMounted","ref","shallowRef","toRef","watch","watchEffect","clamp","extractNumber","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","focused","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","onPointercancel","onControlPointerCancel","decrementSlotProps","onDownControlMousedown","formatInputValue","clampModel","inferPrecision","str","idx","indexOf","increment","inferredPrecision","Math","onBeforeinput","e","data","inputElement","target","existingTxt","selectionStart","selectionEnd","potentialNewInputVal","slice","potentialNewNumber","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","_createElementVNode","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 { 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, extractNumber, 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:focused': (val: boolean) => true,\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 = shallowRef(props.focused)\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 onPointercancel: onControlPointerCancel,\n },\n }\n const decrementSlotProps = {\n props: {\n onClick: onControlClick,\n onPointerup: onControlMouseup,\n onPointerdown: onDownControlMousedown,\n onPointercancel: onControlPointerCancel,\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 inputElement = e.target as HTMLInputElement\n const { value: existingTxt, selectionStart, selectionEnd } = inputElement ?? {}\n\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\n const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision)\n\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 inputElement!.value = potentialNewNumber\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 inputElement!.value = potentialNewNumber\n }\n // Ignore decimal separator when precision = 0\n if (props.precision === 0 && potentialNewInputVal.includes('.')) {\n e.preventDefault()\n inputElement!.value = potentialNewNumber\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 onControlPointerCancel (e: PointerEvent) {\n const el = e.currentTarget as HTMLElement\n el?.releasePointerCapture(e.pointerId)\n holdStop()\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 trimDecimalZeros()\n }\n\n function onBlur () {\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 onPointercancel={ onControlPointerCancel }\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 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 onPointercancel={ onControlPointerCancel }\n size={ controlNodeSize.value }\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 { ...textFieldProps }\n v-model={ inputText.value }\n v-model:focused={ isFocused.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 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":[]}
@@ -9,9 +9,10 @@ import { VProgressCircular } from "../VProgressCircular/VProgressCircular.js"; /
9
9
  import { provideDefaults } from "../../composables/defaults.js";
10
10
  import { makeDimensionProps, useDimension } from "../../composables/dimensions.js";
11
11
  import { makeFocusProps, useFocus } from "../../composables/focus.js";
12
+ import { useIntersectionObserver } from "../../composables/intersectionObserver.js";
12
13
  import { useLocale } from "../../composables/locale.js";
13
14
  import { useProxiedModel } from "../../composables/proxiedModel.js"; // Utilities
14
- import { computed, nextTick, ref, toRef, watch } from 'vue';
15
+ import { computed, effectScope, nextTick, ref, toRef, watch, watchEffect } from 'vue';
15
16
  import { filterInputAttrs, focusChild, genericComponent, pick, propsFactory, useRender } from "../../util/index.js"; // Types
16
17
  // Types
17
18
  export const makeVOtpInputProps = propsFactory({
@@ -73,6 +74,21 @@ export const VOtpInput = genericComponent()({
73
74
  const contentRef = ref();
74
75
  const inputRef = ref([]);
75
76
  const current = computed(() => inputRef.value[focusIndex.value]);
77
+ const intersectScope = effectScope();
78
+ intersectScope.run(() => {
79
+ const {
80
+ intersectionRef,
81
+ isIntersecting
82
+ } = useIntersectionObserver();
83
+ watch(isIntersecting, v => {
84
+ if (!v) return;
85
+ intersectionRef.value?.focus();
86
+ intersectScope.stop();
87
+ });
88
+ watchEffect(() => {
89
+ intersectionRef.value = inputRef.value[0];
90
+ });
91
+ });
76
92
  function onInput() {
77
93
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
78
94
  // The following logic simulates the behavior of a number input.
@@ -122,7 +138,7 @@ export const VOtpInput = genericComponent()({
122
138
  function onPaste(index, e) {
123
139
  e.preventDefault();
124
140
  e.stopPropagation();
125
- const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
141
+ const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
126
142
  if (isValidNumber(clipboardText)) return;
127
143
  model.value = clipboardText.split('');
128
144
  inputRef.value?.[index].blur();
@@ -154,7 +170,10 @@ export const VOtpInput = genericComponent()({
154
170
  scoped: true
155
171
  });
156
172
  watch(model, val => {
157
- if (val.length === length.value) emit('finish', val.join(''));
173
+ if (val.length === length.value) {
174
+ focusIndex.value = length.value - 1;
175
+ emit('finish', val.join(''));
176
+ }
158
177
  }, {
159
178
  deep: true
160
179
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useLocale","useProxiedModel","computed","nextTick","ref","toRef","watch","filterInputAttrs","focusChild","genericComponent","pick","propsFactory","useRender","makeVOtpInputProps","autofocus","Boolean","divider","String","focusAll","label","type","default","length","Number","modelValue","undefined","placeholder","variant","VOtpInput","name","props","emits","finish","val","setup","_ref","attrs","emit","slots","dimensionStyles","isFocused","focus","blur","model","split","join","t","fields","Array","value","fill","focusIndex","contentRef","inputRef","current","onInput","isValidNumber","array","slice","target","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","_normalizeClass","event","loading","some","input"],"sources":["../../../src/components/VOtpInput/VOtpInput.tsx"],"sourcesContent":["// Styles\nimport './VOtpInput.sass'\n\n// Components\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, toRef, watch } from 'vue'\nimport { filterInputAttrs, focusChild, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VOtpInputSlots = {\n default: never\n loader: never\n}\n\nexport const makeVOtpInputProps = propsFactory({\n autofocus: Boolean,\n divider: String,\n focusAll: Boolean,\n label: {\n type: String,\n default: '$vuetify.input.otp',\n },\n length: {\n type: [Number, String],\n default: 6,\n },\n modelValue: {\n type: [Number, String],\n default: undefined,\n },\n placeholder: String,\n type: {\n type: String as PropType<'text' | 'password' | 'number'>,\n default: 'number',\n },\n\n ...makeDimensionProps(),\n ...makeFocusProps(),\n ...pick(makeVFieldProps({\n variant: 'outlined' as const,\n }), [\n 'baseColor',\n 'bgColor',\n 'class',\n 'color',\n 'disabled',\n 'error',\n 'loading',\n 'rounded',\n 'style',\n 'theme',\n 'variant',\n ]),\n}, 'VOtpInput')\n\nexport const VOtpInput = genericComponent<VOtpInputSlots>()({\n name: 'VOtpInput',\n\n props: makeVOtpInputProps(),\n\n emits: {\n finish: (val: string) => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { dimensionStyles } = useDimension(props)\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n '',\n val => val == null ? [] : String(val).split(''),\n val => val.join('')\n )\n const { t } = useLocale()\n\n const length = computed(() => Number(props.length))\n const fields = computed(() => Array(length.value).fill(0))\n const focusIndex = ref(-1)\n const contentRef = ref<HTMLElement>()\n const inputRef = ref<HTMLInputElement[]>([])\n const current = computed(() => inputRef.value[focusIndex.value])\n\n function onInput () {\n // The maxlength attribute doesn't work for the number type input, so the text type is used.\n // The following logic simulates the behavior of a number input.\n if (isValidNumber(current.value.value)) {\n current.value.value = ''\n return\n }\n\n const array = model.value.slice()\n const value = current.value.value\n\n array[focusIndex.value] = value\n\n let target: any = null\n\n if (focusIndex.value > model.value.length) {\n target = model.value.length + 1\n } else if (focusIndex.value + 1 !== length.value) {\n target = 'next'\n }\n\n model.value = array\n\n if (target) focusChild(contentRef.value!, target)\n }\n\n function onKeydown (e: KeyboardEvent) {\n const array = model.value.slice()\n const index = focusIndex.value\n let target: 'next' | 'prev' | 'first' | 'last' | number | null = null\n\n if (![\n 'ArrowLeft',\n 'ArrowRight',\n 'Backspace',\n 'Delete',\n ].includes(e.key)) return\n\n e.preventDefault()\n\n if (e.key === 'ArrowLeft') {\n target = 'prev'\n } else if (e.key === 'ArrowRight') {\n target = 'next'\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n array[focusIndex.value] = ''\n\n model.value = array\n\n if (focusIndex.value > 0 && e.key === 'Backspace') {\n target = 'prev'\n } else {\n requestAnimationFrame(() => {\n inputRef.value[index]?.select()\n })\n }\n }\n\n requestAnimationFrame(() => {\n if (target != null) {\n focusChild(contentRef.value!, target)\n }\n })\n }\n\n function onPaste (index: number, e: ClipboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? ''\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[index].blur()\n }\n\n function reset () {\n model.value = []\n }\n\n function onFocus (e: FocusEvent, index: number) {\n focus()\n\n focusIndex.value = index\n }\n\n function onBlur () {\n blur()\n\n focusIndex.value = -1\n }\n\n function isValidNumber (value: string) {\n return props.type === 'number' && /[^0-9]/g.test(value)\n }\n\n provideDefaults({\n VField: {\n color: toRef(() => props.color),\n bgColor: toRef(() => props.color),\n baseColor: toRef(() => props.baseColor),\n disabled: toRef(() => props.disabled),\n error: toRef(() => props.error),\n variant: toRef(() => props.variant),\n },\n }, { scoped: true })\n\n watch(model, val => {\n if (val.length === length.value) emit('finish', val.join(''))\n }, { deep: true })\n\n watch(focusIndex, val => {\n if (val < 0) return\n\n nextTick(() => {\n inputRef.value[val]?.select()\n })\n })\n\n useRender(() => {\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n return (\n <div\n class={[\n 'v-otp-input',\n {\n 'v-otp-input--divided': !!props.divider,\n },\n props.class,\n ]}\n style={[\n props.style,\n ]}\n { ...rootAttrs }\n >\n <div\n ref={ contentRef }\n class=\"v-otp-input__content\"\n style={[\n dimensionStyles.value,\n ]}\n >\n { fields.value.map((_, i) => (\n <>\n { props.divider && i !== 0 && (\n <span class=\"v-otp-input__divider\">{ props.divider }</span>\n )}\n\n <VField\n focused={ (isFocused.value && props.focusAll) || focusIndex.value === i }\n key={ i }\n >\n {{\n ...slots,\n loader: undefined,\n default: () => {\n return (\n <input\n ref={ val => inputRef.value[i] = val as HTMLInputElement }\n aria-label={ t(props.label, i + 1) }\n autofocus={ i === 0 && props.autofocus }\n autocomplete=\"one-time-code\"\n class={[\n 'v-otp-input__field',\n ]}\n disabled={ props.disabled }\n inputmode={ props.type === 'number' ? 'numeric' : 'text' }\n min={ props.type === 'number' ? 0 : undefined }\n maxlength={ i === 0 ? length.value : '1' }\n placeholder={ props.placeholder }\n type={ props.type === 'number' ? 'text' : props.type }\n value={ model.value[i] }\n onInput={ onInput }\n onFocus={ e => onFocus(e, i) }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n onPaste={ event => onPaste(i, event) }\n />\n )\n },\n }}\n </VField>\n </>\n ))}\n\n <input\n class=\"v-otp-input-input\"\n type=\"hidden\"\n { ...inputAttrs }\n value={ model.value.join('') }\n />\n\n <VOverlay\n contained\n content-class=\"v-otp-input__loader\"\n model-value={ !!props.loading }\n persistent\n >\n { slots.loader?.() ?? (\n <VProgressCircular\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n size=\"24\"\n width=\"2\"\n />\n )}\n </VOverlay>\n\n { slots.default?.() }\n </div>\n </div>\n )\n })\n\n return {\n blur: () => {\n inputRef.value?.some(input => input.blur())\n },\n focus: () => {\n inputRef.value?.[0].focus()\n },\n reset,\n isFocused,\n }\n },\n})\n\nexport type VOtpInput = InstanceType<typeof VOtpInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useIntersectionObserver","useLocale","useProxiedModel","computed","effectScope","nextTick","ref","toRef","watch","watchEffect","filterInputAttrs","focusChild","genericComponent","pick","propsFactory","useRender","makeVOtpInputProps","autofocus","Boolean","divider","String","focusAll","label","type","default","length","Number","modelValue","undefined","placeholder","variant","VOtpInput","name","props","emits","finish","val","setup","_ref","attrs","emit","slots","dimensionStyles","isFocused","focus","blur","model","split","join","t","fields","Array","value","fill","focusIndex","contentRef","inputRef","current","intersectScope","run","intersectionRef","isIntersecting","v","stop","onInput","isValidNumber","array","slice","target","onKeydown","e","index","includes","key","preventDefault","requestAnimationFrame","select","onPaste","stopPropagation","clipboardText","clipboardData","getData","trim","reset","onFocus","onBlur","test","color","bgColor","baseColor","disabled","error","scoped","deep","rootAttrs","inputAttrs","_createElementVNode","_mergeProps","class","style","_normalizeStyle","map","_","i","_Fragment","_createVNode","loader","_normalizeClass","event","loading","some","input"],"sources":["../../../src/components/VOtpInput/VOtpInput.tsx"],"sourcesContent":["// Styles\nimport './VOtpInput.sass'\n\n// Components\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, effectScope, nextTick, ref, toRef, watch, watchEffect } from 'vue'\nimport { filterInputAttrs, focusChild, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VOtpInputSlots = {\n default: never\n loader: never\n}\n\nexport const makeVOtpInputProps = propsFactory({\n autofocus: Boolean,\n divider: String,\n focusAll: Boolean,\n label: {\n type: String,\n default: '$vuetify.input.otp',\n },\n length: {\n type: [Number, String],\n default: 6,\n },\n modelValue: {\n type: [Number, String],\n default: undefined,\n },\n placeholder: String,\n type: {\n type: String as PropType<'text' | 'password' | 'number'>,\n default: 'number',\n },\n\n ...makeDimensionProps(),\n ...makeFocusProps(),\n ...pick(makeVFieldProps({\n variant: 'outlined' as const,\n }), [\n 'baseColor',\n 'bgColor',\n 'class',\n 'color',\n 'disabled',\n 'error',\n 'loading',\n 'rounded',\n 'style',\n 'theme',\n 'variant',\n ]),\n}, 'VOtpInput')\n\nexport const VOtpInput = genericComponent<VOtpInputSlots>()({\n name: 'VOtpInput',\n\n props: makeVOtpInputProps(),\n\n emits: {\n finish: (val: string) => true,\n 'update:focused': (val: boolean) => true,\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { dimensionStyles } = useDimension(props)\n const { isFocused, focus, blur } = useFocus(props)\n const model = useProxiedModel(\n props,\n 'modelValue',\n '',\n val => val == null ? [] : String(val).split(''),\n val => val.join('')\n )\n const { t } = useLocale()\n\n const length = computed(() => Number(props.length))\n const fields = computed(() => Array(length.value).fill(0))\n const focusIndex = ref(-1)\n const contentRef = ref<HTMLElement>()\n const inputRef = ref<HTMLInputElement[]>([])\n const current = computed(() => inputRef.value[focusIndex.value])\n\n const intersectScope = effectScope()\n intersectScope.run(() => {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n watch(isIntersecting, v => {\n if (!v) return\n intersectionRef.value?.focus()\n intersectScope.stop()\n })\n watchEffect(() => {\n intersectionRef.value = inputRef.value[0]\n })\n })\n\n function onInput () {\n // The maxlength attribute doesn't work for the number type input, so the text type is used.\n // The following logic simulates the behavior of a number input.\n if (isValidNumber(current.value.value)) {\n current.value.value = ''\n return\n }\n\n const array = model.value.slice()\n const value = current.value.value\n\n array[focusIndex.value] = value\n\n let target: any = null\n\n if (focusIndex.value > model.value.length) {\n target = model.value.length + 1\n } else if (focusIndex.value + 1 !== length.value) {\n target = 'next'\n }\n\n model.value = array\n\n if (target) focusChild(contentRef.value!, target)\n }\n\n function onKeydown (e: KeyboardEvent) {\n const array = model.value.slice()\n const index = focusIndex.value\n let target: 'next' | 'prev' | 'first' | 'last' | number | null = null\n\n if (![\n 'ArrowLeft',\n 'ArrowRight',\n 'Backspace',\n 'Delete',\n ].includes(e.key)) return\n\n e.preventDefault()\n\n if (e.key === 'ArrowLeft') {\n target = 'prev'\n } else if (e.key === 'ArrowRight') {\n target = 'next'\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n array[focusIndex.value] = ''\n\n model.value = array\n\n if (focusIndex.value > 0 && e.key === 'Backspace') {\n target = 'prev'\n } else {\n requestAnimationFrame(() => {\n inputRef.value[index]?.select()\n })\n }\n }\n\n requestAnimationFrame(() => {\n if (target != null) {\n focusChild(contentRef.value!, target)\n }\n })\n }\n\n function onPaste (index: number, e: ClipboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n\n const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? ''\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[index].blur()\n }\n\n function reset () {\n model.value = []\n }\n\n function onFocus (e: FocusEvent, index: number) {\n focus()\n\n focusIndex.value = index\n }\n\n function onBlur () {\n blur()\n\n focusIndex.value = -1\n }\n\n function isValidNumber (value: string) {\n return props.type === 'number' && /[^0-9]/g.test(value)\n }\n\n provideDefaults({\n VField: {\n color: toRef(() => props.color),\n bgColor: toRef(() => props.color),\n baseColor: toRef(() => props.baseColor),\n disabled: toRef(() => props.disabled),\n error: toRef(() => props.error),\n variant: toRef(() => props.variant),\n },\n }, { scoped: true })\n\n watch(model, val => {\n if (val.length === length.value) {\n focusIndex.value = length.value - 1\n emit('finish', val.join(''))\n }\n }, { deep: true })\n\n watch(focusIndex, val => {\n if (val < 0) return\n\n nextTick(() => {\n inputRef.value[val]?.select()\n })\n })\n\n useRender(() => {\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n return (\n <div\n class={[\n 'v-otp-input',\n {\n 'v-otp-input--divided': !!props.divider,\n },\n props.class,\n ]}\n style={[\n props.style,\n ]}\n { ...rootAttrs }\n >\n <div\n ref={ contentRef }\n class=\"v-otp-input__content\"\n style={[\n dimensionStyles.value,\n ]}\n >\n { fields.value.map((_, i) => (\n <>\n { props.divider && i !== 0 && (\n <span class=\"v-otp-input__divider\">{ props.divider }</span>\n )}\n\n <VField\n focused={ (isFocused.value && props.focusAll) || focusIndex.value === i }\n key={ i }\n >\n {{\n ...slots,\n loader: undefined,\n default: () => {\n return (\n <input\n ref={ val => inputRef.value[i] = val as HTMLInputElement }\n aria-label={ t(props.label, i + 1) }\n autofocus={ i === 0 && props.autofocus }\n autocomplete=\"one-time-code\"\n class={[\n 'v-otp-input__field',\n ]}\n disabled={ props.disabled }\n inputmode={ props.type === 'number' ? 'numeric' : 'text' }\n min={ props.type === 'number' ? 0 : undefined }\n maxlength={ i === 0 ? length.value : '1' }\n placeholder={ props.placeholder }\n type={ props.type === 'number' ? 'text' : props.type }\n value={ model.value[i] }\n onInput={ onInput }\n onFocus={ e => onFocus(e, i) }\n onBlur={ onBlur }\n onKeydown={ onKeydown }\n onPaste={ event => onPaste(i, event) }\n />\n )\n },\n }}\n </VField>\n </>\n ))}\n\n <input\n class=\"v-otp-input-input\"\n type=\"hidden\"\n { ...inputAttrs }\n value={ model.value.join('') }\n />\n\n <VOverlay\n contained\n content-class=\"v-otp-input__loader\"\n model-value={ !!props.loading }\n persistent\n >\n { slots.loader?.() ?? (\n <VProgressCircular\n color={ typeof props.loading === 'boolean' ? undefined : props.loading }\n indeterminate\n size=\"24\"\n width=\"2\"\n />\n )}\n </VOverlay>\n\n { slots.default?.() }\n </div>\n </div>\n )\n })\n\n return {\n blur: () => {\n inputRef.value?.some(input => input.blur())\n },\n focus: () => {\n inputRef.value?.[0].focus()\n },\n reset,\n isFocused,\n }\n },\n})\n\nexport type VOtpInput = InstanceType<typeof VOtpInput>\n"],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ import { useLocale } from "../../composables/locale.js";
22
22
  import { useProxiedModel } from "../../composables/proxiedModel.js";
23
23
  import { makeTransitionProps } from "../../composables/transition.js"; // Utilities
24
24
  import { computed, mergeProps, nextTick, ref, shallowRef, toRef, watch } from 'vue';
25
- import { checkPrintable, deepEqual, ensureValidVNode, genericComponent, IN_BROWSER, matchesSelector, omit, propsFactory, useRender, wrapInArray } from "../../util/index.js"; // Types
25
+ import { camelizeProps, checkPrintable, deepEqual, ensureValidVNode, genericComponent, IN_BROWSER, matchesSelector, omit, propsFactory, useRender, wrapInArray } from "../../util/index.js"; // Types
26
26
  export const makeSelectProps = propsFactory({
27
27
  chips: Boolean,
28
28
  closableChips: Boolean,
@@ -356,6 +356,7 @@ export const VSelect = genericComponent()({
356
356
  index,
357
357
  itemRef
358
358
  } = _ref2;
359
+ const camelizedProps = camelizeProps(item.props);
359
360
  const itemProps = mergeProps(item.props, {
360
361
  ref: itemRef,
361
362
  key: item.value,
@@ -377,10 +378,10 @@ export const VSelect = genericComponent()({
377
378
  "modelValue": isSelected,
378
379
  "ripple": false,
379
380
  "tabindex": "-1"
380
- }, null) : undefined, item.props.prependAvatar && _createVNode(VAvatar, {
381
- "image": item.props.prependAvatar
382
- }, null), item.props.prependIcon && _createVNode(VIcon, {
383
- "icon": item.props.prependIcon
381
+ }, null) : undefined, camelizedProps.prependAvatar && _createVNode(VAvatar, {
382
+ "image": camelizedProps.prependAvatar
383
+ }, null), camelizedProps.prependIcon && _createVNode(VIcon, {
384
+ "icon": camelizedProps.prependIcon
384
385
  }, null)]);
385
386
  }
386
387
  });