@vuetify/nightly 3.9.0-master.2025-07-08 → 3.9.0-master.2025-07-09

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 (47) hide show
  1. package/CHANGELOG.md +12 -3
  2. package/dist/json/attributes.json +2733 -2733
  3. package/dist/json/importMap-labs.json +28 -28
  4. package/dist/json/importMap.json +156 -156
  5. package/dist/json/web-types.json +4722 -4722
  6. package/dist/vuetify-labs.cjs +23 -23
  7. package/dist/vuetify-labs.css +5395 -5395
  8. package/dist/vuetify-labs.d.ts +54 -54
  9. package/dist/vuetify-labs.esm.js +23 -23
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +23 -23
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +15 -15
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +4203 -4203
  16. package/dist/vuetify.d.ts +54 -54
  17. package/dist/vuetify.esm.js +15 -15
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +15 -15
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +8 -8
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VDataTable/VDataTableFooter.js +7 -7
  25. package/lib/components/VDataTable/VDataTableFooter.js.map +1 -1
  26. package/lib/components/VFileInput/VFileInput.js +1 -1
  27. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  28. package/lib/components/VOtpInput/VOtpInput.js +2 -2
  29. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  30. package/lib/components/VSnackbar/VSnackbar.js +1 -1
  31. package/lib/components/VSnackbar/VSnackbar.js.map +1 -1
  32. package/lib/components/VTreeview/VTreeview.js +1 -1
  33. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  34. package/lib/entry-bundler.js +1 -1
  35. package/lib/framework.d.ts +54 -54
  36. package/lib/framework.js +1 -1
  37. package/lib/labs/VColorInput/VColorInput.js +1 -1
  38. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  39. package/lib/labs/VDateInput/VDateInput.js +1 -1
  40. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  41. package/lib/labs/VFileUpload/VFileUpload.js +1 -1
  42. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  43. package/lib/labs/VStepperVertical/VStepperVertical.js +4 -4
  44. package/lib/labs/VStepperVertical/VStepperVertical.js.map +1 -1
  45. package/lib/labs/VStepperVertical/VStepperVerticalItem.js +1 -1
  46. package/lib/labs/VStepperVertical/VStepperVerticalItem.js.map +1 -1
  47. package/package.json +1 -1
@@ -117,7 +117,7 @@ export const VDataTableFooter = genericComponent()({
117
117
  "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
118
118
  "density": "compact",
119
119
  "variant": "outlined",
120
- "hide-details": true
120
+ "hideDetails": true
121
121
  }, null)]), _createElementVNode("div", {
122
122
  "class": "v-data-table-footer__info"
123
123
  }, [_createElementVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), _createElementVNode("div", {
@@ -126,14 +126,14 @@ export const VDataTableFooter = genericComponent()({
126
126
  "modelValue": page.value,
127
127
  "onUpdate:modelValue": $event => page.value = $event,
128
128
  "density": "comfortable",
129
- "first-aria-label": props.firstPageLabel,
130
- "last-aria-label": props.lastPageLabel,
129
+ "firstAriaLabel": props.firstPageLabel,
130
+ "lastAriaLabel": props.lastPageLabel,
131
131
  "length": pageCount.value,
132
- "next-aria-label": props.nextPageLabel,
133
- "previous-aria-label": props.prevPageLabel,
132
+ "nextAriaLabel": props.nextPageLabel,
133
+ "previousAriaLabel": props.prevPageLabel,
134
134
  "rounded": true,
135
- "show-first-last-page": true,
136
- "total-visible": props.showCurrentPage ? 1 : 0,
135
+ "showFirstLastPage": true,
136
+ "totalVisible": props.showCurrentPage ? 1 : 0,
137
137
  "variant": "plain"
138
138
  }, paginationProps), null)])]);
139
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"VDataTableFooter.js","names":["VPagination","VSelect","usePagination","IconValue","useLocale","computed","genericComponent","propsFactory","useRender","makeVDataTableFooterProps","prevIcon","type","default","nextIcon","firstIcon","lastIcon","itemsPerPageText","String","pageText","firstPageLabel","prevPageLabel","nextPageLabel","lastPageLabel","itemsPerPageOptions","Array","value","title","showCurrentPage","Boolean","VDataTableFooter","name","props","setup","_ref","slots","t","page","pageCount","startIndex","stopIndex","itemsLength","itemsPerPage","setItemsPerPage","map","option","isNaN","Number","paginationProps","filterProps","_createElementVNode","prepend","_createVNode","v","_mergeProps","$event"],"sources":["../../../src/components/VDataTable/VDataTableFooter.tsx"],"sourcesContent":["// Styles\nimport './VDataTableFooter.sass'\n\n// Components\nimport { VPagination } from '@/components/VPagination'\nimport { VSelect } from '@/components/VSelect'\n\n// Composables\nimport { usePagination } from './composables/paginate'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVDataTableFooterProps = propsFactory({\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n firstIcon: {\n type: IconValue,\n default: '$first',\n },\n lastIcon: {\n type: IconValue,\n default: '$last',\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText',\n },\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText',\n },\n firstPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.firstPage',\n },\n prevPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.prevPage',\n },\n nextPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.nextPage',\n },\n lastPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.lastPage',\n },\n itemsPerPageOptions: {\n type: Array as PropType<readonly (number | { title: string, value: number })[]>,\n default: () => ([\n { value: 10, title: '10' },\n { value: 25, title: '25' },\n { value: 50, title: '50' },\n { value: 100, title: '100' },\n { value: -1, title: '$vuetify.dataFooter.itemsPerPageAll' },\n ]),\n },\n showCurrentPage: Boolean,\n}, 'VDataTableFooter')\n\nexport const VDataTableFooter = genericComponent<{ prepend: never }>()({\n name: 'VDataTableFooter',\n\n props: makeVDataTableFooterProps(),\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { page, pageCount, startIndex, stopIndex, itemsLength, itemsPerPage, setItemsPerPage } = usePagination()\n\n const itemsPerPageOptions = computed(() => (\n props.itemsPerPageOptions.map(option => {\n if (typeof option === 'number') {\n return {\n value: option,\n title: option === -1\n ? t('$vuetify.dataFooter.itemsPerPageAll')\n : String(option),\n }\n }\n\n return {\n ...option,\n title: !isNaN(Number(option.title)) ? option.title : t(option.title),\n }\n })\n ))\n\n useRender(() => {\n const paginationProps = VPagination.filterProps(props)\n\n return (\n <div class=\"v-data-table-footer\">\n { slots.prepend?.() }\n\n <div class=\"v-data-table-footer__items-per-page\">\n <span aria-label={ t(props.itemsPerPageText) }>{ t(props.itemsPerPageText) }</span>\n\n <VSelect\n items={ itemsPerPageOptions.value }\n modelValue={ itemsPerPage.value }\n onUpdate:modelValue={ v => setItemsPerPage(Number(v)) }\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n />\n </div>\n\n <div class=\"v-data-table-footer__info\">\n <div>\n { t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value) }\n </div>\n </div>\n\n <div class=\"v-data-table-footer__pagination\">\n <VPagination\n v-model={ page.value }\n density=\"comfortable\"\n first-aria-label={ props.firstPageLabel }\n last-aria-label={ props.lastPageLabel }\n length={ pageCount.value }\n next-aria-label={ props.nextPageLabel }\n previous-aria-label={ props.prevPageLabel }\n rounded\n show-first-last-page\n total-visible={ props.showCurrentPage ? 1 : 0 }\n variant=\"plain\"\n { ...paginationProps }\n ></VPagination>\n </div>\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VDataTableFooter = InstanceType<typeof VDataTableFooter>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VDataTableFooter.js","names":["VPagination","VSelect","usePagination","IconValue","useLocale","computed","genericComponent","propsFactory","useRender","makeVDataTableFooterProps","prevIcon","type","default","nextIcon","firstIcon","lastIcon","itemsPerPageText","String","pageText","firstPageLabel","prevPageLabel","nextPageLabel","lastPageLabel","itemsPerPageOptions","Array","value","title","showCurrentPage","Boolean","VDataTableFooter","name","props","setup","_ref","slots","t","page","pageCount","startIndex","stopIndex","itemsLength","itemsPerPage","setItemsPerPage","map","option","isNaN","Number","paginationProps","filterProps","_createElementVNode","prepend","_createVNode","v","_mergeProps","$event"],"sources":["../../../src/components/VDataTable/VDataTableFooter.tsx"],"sourcesContent":["// Styles\nimport './VDataTableFooter.sass'\n\n// Components\nimport { VPagination } from '@/components/VPagination'\nimport { VSelect } from '@/components/VSelect'\n\n// Composables\nimport { usePagination } from './composables/paginate'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVDataTableFooterProps = propsFactory({\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n firstIcon: {\n type: IconValue,\n default: '$first',\n },\n lastIcon: {\n type: IconValue,\n default: '$last',\n },\n itemsPerPageText: {\n type: String,\n default: '$vuetify.dataFooter.itemsPerPageText',\n },\n pageText: {\n type: String,\n default: '$vuetify.dataFooter.pageText',\n },\n firstPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.firstPage',\n },\n prevPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.prevPage',\n },\n nextPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.nextPage',\n },\n lastPageLabel: {\n type: String,\n default: '$vuetify.dataFooter.lastPage',\n },\n itemsPerPageOptions: {\n type: Array as PropType<readonly (number | { title: string, value: number })[]>,\n default: () => ([\n { value: 10, title: '10' },\n { value: 25, title: '25' },\n { value: 50, title: '50' },\n { value: 100, title: '100' },\n { value: -1, title: '$vuetify.dataFooter.itemsPerPageAll' },\n ]),\n },\n showCurrentPage: Boolean,\n}, 'VDataTableFooter')\n\nexport const VDataTableFooter = genericComponent<{ prepend: never }>()({\n name: 'VDataTableFooter',\n\n props: makeVDataTableFooterProps(),\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { page, pageCount, startIndex, stopIndex, itemsLength, itemsPerPage, setItemsPerPage } = usePagination()\n\n const itemsPerPageOptions = computed(() => (\n props.itemsPerPageOptions.map(option => {\n if (typeof option === 'number') {\n return {\n value: option,\n title: option === -1\n ? t('$vuetify.dataFooter.itemsPerPageAll')\n : String(option),\n }\n }\n\n return {\n ...option,\n title: !isNaN(Number(option.title)) ? option.title : t(option.title),\n }\n })\n ))\n\n useRender(() => {\n const paginationProps = VPagination.filterProps(props)\n\n return (\n <div class=\"v-data-table-footer\">\n { slots.prepend?.() }\n\n <div class=\"v-data-table-footer__items-per-page\">\n <span aria-label={ t(props.itemsPerPageText) }>{ t(props.itemsPerPageText) }</span>\n\n <VSelect\n items={ itemsPerPageOptions.value }\n modelValue={ itemsPerPage.value }\n onUpdate:modelValue={ v => setItemsPerPage(Number(v)) }\n density=\"compact\"\n variant=\"outlined\"\n hideDetails\n />\n </div>\n\n <div class=\"v-data-table-footer__info\">\n <div>\n { t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value) }\n </div>\n </div>\n\n <div class=\"v-data-table-footer__pagination\">\n <VPagination\n v-model={ page.value }\n density=\"comfortable\"\n firstAriaLabel={ props.firstPageLabel }\n lastAriaLabel={ props.lastPageLabel }\n length={ pageCount.value }\n nextAriaLabel={ props.nextPageLabel }\n previousAriaLabel={ props.prevPageLabel }\n rounded\n showFirstLastPage\n totalVisible={ props.showCurrentPage ? 1 : 0 }\n variant=\"plain\"\n { ...paginationProps }\n ></VPagination>\n </div>\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VDataTableFooter = InstanceType<typeof VDataTableFooter>\n"],"mappings":"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","ignoreList":[]}
@@ -191,7 +191,7 @@ export const VFileInput = genericComponent()({
191
191
  } = _ref3;
192
192
  return _createVNode(VField, _mergeProps({
193
193
  "ref": vFieldRef,
194
- "prepend-icon": props.prependIcon,
194
+ "prependIcon": props.prependIcon,
195
195
  "onMousedown": onControlMousedown,
196
196
  "onClick": onControlClick,
197
197
  "onClick:clear": onClear,
@@ -1 +1 @@
1
- {"version":3,"file":"VFileInput.js","names":["VChip","VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useFileDrop","useFocus","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","shallowRef","toRef","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","propsFactory","useRender","wrapInArray","makeVFileInputProps","chips","Boolean","counter","counterSizeString","type","String","default","counterString","hideInput","multiple","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","Object","props","val","every","clearable","VFileInput","name","inheritAttrs","emits","e","focused","files","setup","_ref","attrs","emit","slots","t","model","isArray","isFocused","focus","blur","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","inputRef","isActive","active","isPlainOrUnderlined","variant","isDragging","handleDrop","hasFilesOrFolders","onFocus","document","activeElement","onClickPrepend","click","onControlMousedown","onControlClick","onClear","stopPropagation","onDragover","preventDefault","stopImmediatePropagation","onDragleave","onDrop","dataTransfer","DataTransfer","items","add","dispatchEvent","Event","bubbles","newValue","hasModelReset","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","class","style","_ref3","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref4","fieldClass","slotProps","_createElementVNode","_Fragment","target","_normalizeClass","selection","text","join","disabled"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & {\n counter: never\n selection: {\n fileNames: string[]\n totalBytes: number\n totalBytesReadable: string\n }\n}\n\nexport const makeVFileInputProps = propsFactory({\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n hideInput: Boolean,\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number, String] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(Number(v))\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: [Array, Object] as PropType<File[] | File | null>,\n default: (props: any) => props.multiple ? [] : null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n}, 'VFileInput')\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: makeVFileInputProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (files: File | File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (!props.multiple && Array.isArray(val)) ? val[0] : val,\n )\n const { isFocused, focus, blur } = useFocus(props)\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = toRef(() => isFocused.value || props.active)\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n const isDragging = shallowRef(false)\n const { handleDrop, hasFilesOrFolders } = useFileDrop()\n\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onClickPrepend (e: MouseEvent) {\n inputRef.value?.click()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value || !hasFilesOrFolders(e)) return\n\n const dataTransfer = new DataTransfer()\n for (const file of await handleDrop(e)) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value.files = dataTransfer.files\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n modelValue={ props.multiple ? model.value : model.value[0] }\n class={[\n 'v-file-input',\n {\n 'v-file-input--chips': !!props.chips,\n 'v-file-input--dragging': isDragging.value,\n 'v-file-input--hide': props.hideInput,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n onClick:prepend={ onClickPrepend }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prepend-icon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n onDragover={ onDragover }\n onDrop={ onDrop }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n if (isReadonly.value) e.preventDefault()\n\n onFocus()\n }}\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n onDragleave={ onDragleave }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && !props.hideInput && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n text={ text }\n />\n ))\n : fileNames.value.join(', ')\n )}\n </div>\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value?.length }\n value={ counterValue.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VFileInput.js","names":["VChip","VCounter","VField","makeVFieldProps","makeVInputProps","VInput","useFileDrop","useFocus","forwardRefs","useLocale","useProxiedModel","computed","nextTick","ref","shallowRef","toRef","watch","callEvent","filterInputAttrs","genericComponent","humanReadableFileSize","propsFactory","useRender","wrapInArray","makeVFileInputProps","chips","Boolean","counter","counterSizeString","type","String","default","counterString","hideInput","multiple","showSize","Number","validator","v","includes","prependIcon","modelValue","Array","Object","props","val","every","clearable","VFileInput","name","inheritAttrs","emits","e","focused","files","setup","_ref","attrs","emit","slots","t","model","isArray","isFocused","focus","blur","base","undefined","totalBytes","value","reduce","bytes","_ref2","size","totalBytesReadable","fileNames","map","file","counterValue","fileCount","length","vInputRef","vFieldRef","inputRef","isActive","active","isPlainOrUnderlined","variant","isDragging","handleDrop","hasFilesOrFolders","onFocus","document","activeElement","onClickPrepend","click","onControlMousedown","onControlClick","onClear","stopPropagation","onDragover","preventDefault","stopImmediatePropagation","onDragleave","onDrop","dataTransfer","DataTransfer","items","add","dispatchEvent","Event","bubbles","newValue","hasModelReset","hasCounter","hasDetails","details","rootAttrs","inputAttrs","_","inputProps","filterProps","fieldProps","_createVNode","_mergeProps","class","style","_ref3","id","isDisabled","isDirty","isReadonly","isValid","dirty","_ref4","fieldClass","slotProps","_createElementVNode","_Fragment","target","_normalizeClass","selection","text","join","disabled"],"sources":["../../../src/components/VFileInput/VFileInput.tsx"],"sourcesContent":["// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n callEvent,\n filterInputAttrs,\n genericComponent,\n humanReadableFileSize,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & {\n counter: never\n selection: {\n fileNames: string[]\n totalBytes: number\n totalBytesReadable: string\n }\n}\n\nexport const makeVFileInputProps = propsFactory({\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n hideInput: Boolean,\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number, String] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(Number(v))\n )\n },\n },\n\n ...makeVInputProps({ prependIcon: '$file' }),\n\n modelValue: {\n type: [Array, Object] as PropType<File[] | File | null>,\n default: (props: any) => props.multiple ? [] : null,\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n}, 'VFileInput')\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: makeVFileInputProps(),\n\n emits: {\n 'click:control': (e: MouseEvent) => true,\n 'mousedown:control': (e: MouseEvent) => true,\n 'update:focused': (focused: boolean) => true,\n 'update:modelValue': (files: File | File[]) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(\n props,\n 'modelValue',\n props.modelValue,\n val => wrapInArray(val),\n val => (!props.multiple && Array.isArray(val)) ? val[0] : val,\n )\n const { isFocused, focus, blur } = useFocus(props)\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n const inputRef = ref<HTMLInputElement>()\n const isActive = toRef(() => isFocused.value || props.active)\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n const isDragging = shallowRef(false)\n const { handleDrop, hasFilesOrFolders } = useFileDrop()\n\n function onFocus () {\n if (inputRef.value !== document.activeElement) {\n inputRef.value?.focus()\n }\n\n if (!isFocused.value) focus()\n }\n function onClickPrepend (e: MouseEvent) {\n inputRef.value?.click()\n }\n function onControlMousedown (e: MouseEvent) {\n emit('mousedown:control', e)\n }\n function onControlClick (e: MouseEvent) {\n inputRef.value?.click()\n\n emit('click:control', e)\n }\n function onClear (e: MouseEvent) {\n e.stopPropagation()\n\n onFocus()\n\n nextTick(() => {\n model.value = []\n\n callEvent(props['onClick:clear'], e)\n })\n }\n function onDragover (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = true\n }\n function onDragleave (e: DragEvent) {\n e.preventDefault()\n isDragging.value = false\n }\n async function onDrop (e: DragEvent) {\n e.preventDefault()\n e.stopImmediatePropagation()\n isDragging.value = false\n\n if (!inputRef.value || !hasFilesOrFolders(e)) return\n\n const dataTransfer = new DataTransfer()\n for (const file of await handleDrop(e)) {\n dataTransfer.items.add(file)\n }\n\n inputRef.value.files = dataTransfer.files\n inputRef.value.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n watch(model, newValue => {\n const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n if (hasModelReset && inputRef.value) {\n inputRef.value.value = ''\n }\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter)\n const hasDetails = !!(hasCounter || slots.details)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n const fieldProps = VField.filterProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n modelValue={ props.multiple ? model.value : model.value[0] }\n class={[\n 'v-file-input',\n {\n 'v-file-input--chips': !!props.chips,\n 'v-file-input--dragging': isDragging.value,\n 'v-file-input--hide': props.hideInput,\n 'v-input--plain-underlined': isPlainOrUnderlined.value,\n },\n props.class,\n ]}\n style={ props.style }\n onClick:prepend={ onClickPrepend }\n { ...rootAttrs }\n { ...inputProps }\n centerAffix={ !isPlainOrUnderlined.value }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n }) => (\n <VField\n ref={ vFieldRef }\n prependIcon={ props.prependIcon }\n onMousedown={ onControlMousedown }\n onClick={ onControlClick }\n onClick:clear={ onClear }\n onClick:prependInner={ props['onClick:prependInner'] }\n onClick:appendInner={ props['onClick:appendInner'] }\n { ...fieldProps }\n id={ id.value }\n active={ isActive.value || isDirty.value }\n dirty={ isDirty.value || props.dirty }\n disabled={ isDisabled.value }\n focused={ isFocused.value }\n error={ isValid.value === false }\n onDragover={ onDragover }\n onDrop={ onDrop }\n >\n {{\n ...slots,\n default: ({\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n multiple={ props.multiple }\n name={ props.name }\n onClick={ e => {\n e.stopPropagation()\n\n if (isReadonly.value) e.preventDefault()\n\n onFocus()\n }}\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n }}\n onDragleave={ onDragleave }\n onFocus={ onFocus }\n onBlur={ blur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n <div class={ fieldClass }>\n { !!model.value?.length && !props.hideInput && (\n slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n text={ text }\n />\n ))\n : fileNames.value.join(', ')\n )}\n </div>\n </>\n ),\n }}\n </VField>\n ),\n details: hasDetails ? slotProps => (\n <>\n { slots.details?.(slotProps) }\n\n { hasCounter && (\n <>\n <span />\n\n <VCounter\n active={ !!model.value?.length }\n value={ counterValue.value }\n disabled={ props.disabled }\n v-slots:default={ slots.counter }\n />\n </>\n )}\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n"],"mappings":"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","ignoreList":[]}
@@ -234,8 +234,8 @@ export const VOtpInput = genericComponent()({
234
234
  "value": model.value.join('')
235
235
  }), null), _createVNode(VOverlay, {
236
236
  "contained": true,
237
- "content-class": "v-otp-input__loader",
238
- "model-value": !!props.loading,
237
+ "contentClass": "v-otp-input__loader",
238
+ "modelValue": !!props.loading,
239
239
  "persistent": true
240
240
  }, {
241
241
  default: () => [slots.loader?.() ?? _createVNode(VProgressCircular, {
@@ -1 +1 @@
1
- {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useIntersectionObserver","useLocale","useProxiedModel","useToggleScope","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","finalIndex","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'\nimport { useToggleScope } from '@/composables/toggleScope'\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 useToggleScope(() => props.autofocus, () => {\n const intersectScope = effectScope()\n intersectScope.run(() => {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n watchEffect(() => {\n intersectionRef.value = inputRef.value[0]\n })\n watch(isIntersecting, v => {\n if (!v) return\n intersectionRef.value?.focus()\n intersectScope.stop()\n })\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 const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[finalIndex].focus()\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":[]}
1
+ {"version":3,"file":"VOtpInput.js","names":["makeVFieldProps","VField","VOverlay","VProgressCircular","provideDefaults","makeDimensionProps","useDimension","makeFocusProps","useFocus","useIntersectionObserver","useLocale","useProxiedModel","useToggleScope","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","finalIndex","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'\nimport { useToggleScope } from '@/composables/toggleScope'\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 useToggleScope(() => props.autofocus, () => {\n const intersectScope = effectScope()\n intersectScope.run(() => {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n watchEffect(() => {\n intersectionRef.value = inputRef.value[0]\n })\n watch(isIntersecting, v => {\n if (!v) return\n intersectionRef.value?.focus()\n intersectScope.stop()\n })\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 const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1\n\n if (isValidNumber(clipboardText)) return\n\n model.value = clipboardText.split('')\n\n inputRef.value?.[finalIndex].focus()\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 contentClass=\"v-otp-input__loader\"\n modelValue={ !!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":[]}
@@ -196,7 +196,7 @@ export const VSnackbar = genericComponent()({
196
196
  "ref": timerRef,
197
197
  "color": typeof props.timer === 'string' ? props.timer : 'info',
198
198
  "max": props.timeout,
199
- "model-value": countdown.time.value
199
+ "modelValue": countdown.time.value
200
200
  }, null)]), hasContent && _createElementVNode("div", {
201
201
  "key": "content",
202
202
  "class": "v-snackbar__content",
@@ -1 +1 @@
1
- {"version":3,"file":"VSnackbar.js","names":["VDefaultsProvider","VOverlay","makeVOverlayProps","VProgressLinear","useLayout","forwardRefs","VuetifyLayoutKey","makeLocationProps","makePositionProps","usePosition","useProxiedModel","makeRoundedProps","useRounded","useScopeId","makeThemeProps","provideTheme","useToggleScope","genOverlays","makeVariantProps","useVariant","computed","inject","mergeProps","nextTick","onMounted","onScopeDispose","ref","shallowRef","watch","watchEffect","genericComponent","omit","propsFactory","refElement","useRender","useCountdown","milliseconds","time","timer","clear","clearInterval","reset","value","start","el","style","getComputedStyle","transitionDuration","interval","parseFloat","startTime","performance","now","window","setInterval","elapsed","Math","max","makeVSnackbarProps","multiLine","Boolean","text","String","timeout","type","Number","default","vertical","location","transition","VSnackbar","name","props","emits","v","setup","_ref","slots","isActive","positionClasses","scopeId","themeClasses","colorClasses","colorStyles","variantClasses","roundedClasses","countdown","overlay","timerRef","isHovering","startY","mainStyles","hasLayout","undefined","layout","startTimeout","activeTimeout","clearTimeout","element","setTimeout","onPointerenter","onPointerleave","onTouchstart","event","touches","clientY","onTouchend","abs","changedTouches","onAfterLeave","locationClasses","split","reduce","acc","loc","overlayProps","filterProps","hasContent","_createVNode","_mergeProps","class","$event","contentProps","_createElementVNode","actions","VBtn","variant","ripple","slim","activator"],"sources":["../../../src/components/VSnackbar/VSnackbar.tsx"],"sourcesContent":["// Styles\nimport './VSnackbar.sass'\n\n// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Composables\nimport { useLayout } from '@/composables'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { VuetifyLayoutKey } from '@/composables/layout'\nimport { makeLocationProps } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useScopeId } from '@/composables/scopeId'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { computed, inject, mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { genericComponent, omit, propsFactory, refElement, useRender } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype VSnackbarSlots = {\n activator: { isActive: boolean, props: Record<string, any> }\n default: never\n actions: { isActive: Ref<boolean> }\n text: never\n}\n\nfunction useCountdown (milliseconds: () => number) {\n const time = shallowRef(milliseconds())\n let timer = -1\n\n function clear () {\n clearInterval(timer)\n }\n\n function reset () {\n clear()\n\n nextTick(() => time.value = milliseconds())\n }\n\n function start (el?: HTMLElement) {\n const style = el ? getComputedStyle(el) : { transitionDuration: 0.2 }\n const interval = parseFloat(style.transitionDuration) * 1000 || 200\n\n clear()\n\n if (time.value <= 0) return\n\n const startTime = performance.now()\n timer = window.setInterval(() => {\n const elapsed = performance.now() - startTime + interval\n time.value = Math.max(milliseconds() - elapsed, 0)\n\n if (time.value <= 0) clear()\n }, interval)\n }\n\n onScopeDispose(clear)\n\n return { clear, time, start, reset }\n}\n\nexport const makeVSnackbarProps = propsFactory({\n multiLine: Boolean,\n text: String,\n timer: [Boolean, String],\n timeout: {\n type: [Number, String],\n default: 5000,\n },\n vertical: Boolean,\n\n ...makeLocationProps({ location: 'bottom' } as const),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeVariantProps(),\n ...makeThemeProps(),\n ...omit(makeVOverlayProps({\n transition: 'v-snackbar-transition',\n }), ['persistent', 'noClickAnimation', 'scrim', 'scrollStrategy']),\n}, 'VSnackbar')\n\nexport const VSnackbar = genericComponent<VSnackbarSlots>()({\n name: 'VSnackbar',\n\n props: makeVSnackbarProps(),\n\n emits: {\n 'update:modelValue': (v: boolean) => true,\n },\n\n setup (props, { slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { positionClasses } = usePosition(props)\n const { scopeId } = useScopeId()\n const { themeClasses } = provideTheme(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { roundedClasses } = useRounded(props)\n const countdown = useCountdown(() => Number(props.timeout))\n\n const overlay = ref<VOverlay>()\n const timerRef = ref<VProgressLinear>()\n const isHovering = shallowRef(false)\n const startY = shallowRef(0)\n const mainStyles = ref()\n const hasLayout = inject(VuetifyLayoutKey, undefined)\n\n useToggleScope(() => !!hasLayout, () => {\n const layout = useLayout()\n\n watchEffect(() => {\n mainStyles.value = layout.mainStyles.value\n })\n })\n\n watch(isActive, startTimeout)\n watch(() => props.timeout, startTimeout)\n\n onMounted(() => {\n if (isActive.value) startTimeout()\n })\n\n let activeTimeout = -1\n function startTimeout () {\n countdown.reset()\n window.clearTimeout(activeTimeout)\n const timeout = Number(props.timeout)\n\n if (!isActive.value || timeout === -1) return\n\n const element = refElement(timerRef.value)\n\n countdown.start(element)\n\n activeTimeout = window.setTimeout(() => {\n isActive.value = false\n }, timeout)\n }\n\n function clearTimeout () {\n countdown.reset()\n window.clearTimeout(activeTimeout)\n }\n\n function onPointerenter () {\n isHovering.value = true\n clearTimeout()\n }\n\n function onPointerleave () {\n isHovering.value = false\n startTimeout()\n }\n\n function onTouchstart (event: TouchEvent) {\n startY.value = event.touches[0].clientY\n }\n\n function onTouchend (event: TouchEvent) {\n if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {\n isActive.value = false\n }\n }\n\n function onAfterLeave () {\n if (isHovering.value) onPointerleave()\n }\n\n const locationClasses = computed(() => {\n return props.location.split(' ').reduce((acc, loc) => {\n acc[`v-snackbar--${loc}`] = true\n\n return acc\n }, {} as Record<string, any>)\n })\n\n useRender(() => {\n const overlayProps = VOverlay.filterProps(props)\n const hasContent = !!(slots.default || slots.text || props.text)\n\n return (\n <VOverlay\n ref={ overlay }\n class={[\n 'v-snackbar',\n {\n 'v-snackbar--active': isActive.value,\n 'v-snackbar--multi-line': props.multiLine && !props.vertical,\n 'v-snackbar--timer': !!props.timer,\n 'v-snackbar--vertical': props.vertical,\n },\n locationClasses.value,\n positionClasses.value,\n props.class,\n ]}\n style={[\n mainStyles.value,\n props.style,\n ]}\n { ...overlayProps }\n v-model={ isActive.value }\n contentProps={ mergeProps({\n class: [\n 'v-snackbar__wrapper',\n themeClasses.value,\n colorClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ],\n style: [\n colorStyles.value,\n ],\n onPointerenter,\n onPointerleave,\n }, overlayProps.contentProps)}\n persistent\n noClickAnimation\n scrim={ false }\n scrollStrategy=\"none\"\n _disableGlobalStack\n onTouchstartPassive={ onTouchstart }\n onTouchend={ onTouchend }\n onAfterLeave={ onAfterLeave }\n { ...scopeId }\n v-slots={{ activator: slots.activator }}\n >\n { genOverlays(false, 'v-snackbar') }\n\n { props.timer && !isHovering.value && (\n <div key=\"timer\" class=\"v-snackbar__timer\">\n <VProgressLinear\n ref={ timerRef }\n color={ typeof props.timer === 'string' ? props.timer : 'info' }\n max={ props.timeout }\n model-value={ countdown.time.value }\n />\n </div>\n )}\n\n { hasContent && (\n <div\n key=\"content\"\n class=\"v-snackbar__content\"\n role=\"status\"\n aria-live=\"polite\"\n >\n { slots.text?.() ?? props.text }\n\n { slots.default?.() }\n </div>\n )}\n\n { slots.actions && (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n variant: 'text',\n ripple: false,\n slim: true,\n },\n }}\n >\n <div class=\"v-snackbar__actions\">\n { slots.actions({ isActive }) }\n </div>\n </VDefaultsProvider>\n )}\n </VOverlay>\n )\n })\n\n return forwardRefs({}, overlay)\n },\n})\n\nexport type VSnackbar = InstanceType<typeof VSnackbar>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VSnackbar.js","names":["VDefaultsProvider","VOverlay","makeVOverlayProps","VProgressLinear","useLayout","forwardRefs","VuetifyLayoutKey","makeLocationProps","makePositionProps","usePosition","useProxiedModel","makeRoundedProps","useRounded","useScopeId","makeThemeProps","provideTheme","useToggleScope","genOverlays","makeVariantProps","useVariant","computed","inject","mergeProps","nextTick","onMounted","onScopeDispose","ref","shallowRef","watch","watchEffect","genericComponent","omit","propsFactory","refElement","useRender","useCountdown","milliseconds","time","timer","clear","clearInterval","reset","value","start","el","style","getComputedStyle","transitionDuration","interval","parseFloat","startTime","performance","now","window","setInterval","elapsed","Math","max","makeVSnackbarProps","multiLine","Boolean","text","String","timeout","type","Number","default","vertical","location","transition","VSnackbar","name","props","emits","v","setup","_ref","slots","isActive","positionClasses","scopeId","themeClasses","colorClasses","colorStyles","variantClasses","roundedClasses","countdown","overlay","timerRef","isHovering","startY","mainStyles","hasLayout","undefined","layout","startTimeout","activeTimeout","clearTimeout","element","setTimeout","onPointerenter","onPointerleave","onTouchstart","event","touches","clientY","onTouchend","abs","changedTouches","onAfterLeave","locationClasses","split","reduce","acc","loc","overlayProps","filterProps","hasContent","_createVNode","_mergeProps","class","$event","contentProps","_createElementVNode","actions","VBtn","variant","ripple","slim","activator"],"sources":["../../../src/components/VSnackbar/VSnackbar.tsx"],"sourcesContent":["// Styles\nimport './VSnackbar.sass'\n\n// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Composables\nimport { useLayout } from '@/composables'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { VuetifyLayoutKey } from '@/composables/layout'\nimport { makeLocationProps } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useScopeId } from '@/composables/scopeId'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { computed, inject, mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { genericComponent, omit, propsFactory, refElement, useRender } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype VSnackbarSlots = {\n activator: { isActive: boolean, props: Record<string, any> }\n default: never\n actions: { isActive: Ref<boolean> }\n text: never\n}\n\nfunction useCountdown (milliseconds: () => number) {\n const time = shallowRef(milliseconds())\n let timer = -1\n\n function clear () {\n clearInterval(timer)\n }\n\n function reset () {\n clear()\n\n nextTick(() => time.value = milliseconds())\n }\n\n function start (el?: HTMLElement) {\n const style = el ? getComputedStyle(el) : { transitionDuration: 0.2 }\n const interval = parseFloat(style.transitionDuration) * 1000 || 200\n\n clear()\n\n if (time.value <= 0) return\n\n const startTime = performance.now()\n timer = window.setInterval(() => {\n const elapsed = performance.now() - startTime + interval\n time.value = Math.max(milliseconds() - elapsed, 0)\n\n if (time.value <= 0) clear()\n }, interval)\n }\n\n onScopeDispose(clear)\n\n return { clear, time, start, reset }\n}\n\nexport const makeVSnackbarProps = propsFactory({\n multiLine: Boolean,\n text: String,\n timer: [Boolean, String],\n timeout: {\n type: [Number, String],\n default: 5000,\n },\n vertical: Boolean,\n\n ...makeLocationProps({ location: 'bottom' } as const),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeVariantProps(),\n ...makeThemeProps(),\n ...omit(makeVOverlayProps({\n transition: 'v-snackbar-transition',\n }), ['persistent', 'noClickAnimation', 'scrim', 'scrollStrategy']),\n}, 'VSnackbar')\n\nexport const VSnackbar = genericComponent<VSnackbarSlots>()({\n name: 'VSnackbar',\n\n props: makeVSnackbarProps(),\n\n emits: {\n 'update:modelValue': (v: boolean) => true,\n },\n\n setup (props, { slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { positionClasses } = usePosition(props)\n const { scopeId } = useScopeId()\n const { themeClasses } = provideTheme(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { roundedClasses } = useRounded(props)\n const countdown = useCountdown(() => Number(props.timeout))\n\n const overlay = ref<VOverlay>()\n const timerRef = ref<VProgressLinear>()\n const isHovering = shallowRef(false)\n const startY = shallowRef(0)\n const mainStyles = ref()\n const hasLayout = inject(VuetifyLayoutKey, undefined)\n\n useToggleScope(() => !!hasLayout, () => {\n const layout = useLayout()\n\n watchEffect(() => {\n mainStyles.value = layout.mainStyles.value\n })\n })\n\n watch(isActive, startTimeout)\n watch(() => props.timeout, startTimeout)\n\n onMounted(() => {\n if (isActive.value) startTimeout()\n })\n\n let activeTimeout = -1\n function startTimeout () {\n countdown.reset()\n window.clearTimeout(activeTimeout)\n const timeout = Number(props.timeout)\n\n if (!isActive.value || timeout === -1) return\n\n const element = refElement(timerRef.value)\n\n countdown.start(element)\n\n activeTimeout = window.setTimeout(() => {\n isActive.value = false\n }, timeout)\n }\n\n function clearTimeout () {\n countdown.reset()\n window.clearTimeout(activeTimeout)\n }\n\n function onPointerenter () {\n isHovering.value = true\n clearTimeout()\n }\n\n function onPointerleave () {\n isHovering.value = false\n startTimeout()\n }\n\n function onTouchstart (event: TouchEvent) {\n startY.value = event.touches[0].clientY\n }\n\n function onTouchend (event: TouchEvent) {\n if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {\n isActive.value = false\n }\n }\n\n function onAfterLeave () {\n if (isHovering.value) onPointerleave()\n }\n\n const locationClasses = computed(() => {\n return props.location.split(' ').reduce((acc, loc) => {\n acc[`v-snackbar--${loc}`] = true\n\n return acc\n }, {} as Record<string, any>)\n })\n\n useRender(() => {\n const overlayProps = VOverlay.filterProps(props)\n const hasContent = !!(slots.default || slots.text || props.text)\n\n return (\n <VOverlay\n ref={ overlay }\n class={[\n 'v-snackbar',\n {\n 'v-snackbar--active': isActive.value,\n 'v-snackbar--multi-line': props.multiLine && !props.vertical,\n 'v-snackbar--timer': !!props.timer,\n 'v-snackbar--vertical': props.vertical,\n },\n locationClasses.value,\n positionClasses.value,\n props.class,\n ]}\n style={[\n mainStyles.value,\n props.style,\n ]}\n { ...overlayProps }\n v-model={ isActive.value }\n contentProps={ mergeProps({\n class: [\n 'v-snackbar__wrapper',\n themeClasses.value,\n colorClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ],\n style: [\n colorStyles.value,\n ],\n onPointerenter,\n onPointerleave,\n }, overlayProps.contentProps)}\n persistent\n noClickAnimation\n scrim={ false }\n scrollStrategy=\"none\"\n _disableGlobalStack\n onTouchstartPassive={ onTouchstart }\n onTouchend={ onTouchend }\n onAfterLeave={ onAfterLeave }\n { ...scopeId }\n v-slots={{ activator: slots.activator }}\n >\n { genOverlays(false, 'v-snackbar') }\n\n { props.timer && !isHovering.value && (\n <div key=\"timer\" class=\"v-snackbar__timer\">\n <VProgressLinear\n ref={ timerRef }\n color={ typeof props.timer === 'string' ? props.timer : 'info' }\n max={ props.timeout }\n modelValue={ countdown.time.value }\n />\n </div>\n )}\n\n { hasContent && (\n <div\n key=\"content\"\n class=\"v-snackbar__content\"\n role=\"status\"\n aria-live=\"polite\"\n >\n { slots.text?.() ?? props.text }\n\n { slots.default?.() }\n </div>\n )}\n\n { slots.actions && (\n <VDefaultsProvider\n defaults={{\n VBtn: {\n variant: 'text',\n ripple: false,\n slim: true,\n },\n }}\n >\n <div class=\"v-snackbar__actions\">\n { slots.actions({ isActive }) }\n </div>\n </VDefaultsProvider>\n )}\n </VOverlay>\n )\n })\n\n return forwardRefs({}, overlay)\n },\n})\n\nexport type VSnackbar = InstanceType<typeof VSnackbar>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,iBAAiB;AAAA,SACjBC,QAAQ;AAAA,SACRC,iBAAiB;AAAA,SACjBC,eAAe,uCAExB;AAAA,SACSC,SAAS;AAAA,SACTC,WAAW;AAAA,SACXC,gBAAgB;AAAA,SAChBC,iBAAiB;AAAA,SACjBC,iBAAiB,EAAEC,WAAW;AAAA,SAC9BC,eAAe;AAAA,SACfC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,UAAU;AAAA,SACVC,cAAc,EAAEC,YAAY;AAAA,SAC5BC,cAAc;AAAA,SACdC,WAAW,EAAEC,gBAAgB,EAAEC,UAAU,wCAElD;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,cAAc,EAAEC,GAAG,EAAEC,UAAU,EAAEC,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAAA,SACnHC,gBAAgB,EAAEC,IAAI,EAAEC,YAAY,EAAEC,UAAU,EAAEC,SAAS,+BAEpE;AAUA,SAASC,YAAYA,CAAEC,YAA0B,EAAE;EACjD,MAAMC,IAAI,GAAGV,UAAU,CAACS,YAAY,CAAC,CAAC,CAAC;EACvC,IAAIE,KAAK,GAAG,CAAC,CAAC;EAEd,SAASC,KAAKA,CAAA,EAAI;IAChBC,aAAa,CAACF,KAAK,CAAC;EACtB;EAEA,SAASG,KAAKA,CAAA,EAAI;IAChBF,KAAK,CAAC,CAAC;IAEPhB,QAAQ,CAAC,MAAMc,IAAI,CAACK,KAAK,GAAGN,YAAY,CAAC,CAAC,CAAC;EAC7C;EAEA,SAASO,KAAKA,CAAEC,EAAgB,EAAE;IAChC,MAAMC,KAAK,GAAGD,EAAE,GAAGE,gBAAgB,CAACF,EAAE,CAAC,GAAG;MAAEG,kBAAkB,EAAE;IAAI,CAAC;IACrE,MAAMC,QAAQ,GAAGC,UAAU,CAACJ,KAAK,CAACE,kBAAkB,CAAC,GAAG,IAAI,IAAI,GAAG;IAEnER,KAAK,CAAC,CAAC;IAEP,IAAIF,IAAI,CAACK,KAAK,IAAI,CAAC,EAAE;IAErB,MAAMQ,SAAS,GAAGC,WAAW,CAACC,GAAG,CAAC,CAAC;IACnCd,KAAK,GAAGe,MAAM,CAACC,WAAW,CAAC,MAAM;MAC/B,MAAMC,OAAO,GAAGJ,WAAW,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS,GAAGF,QAAQ;MACxDX,IAAI,CAACK,KAAK,GAAGc,IAAI,CAACC,GAAG,CAACrB,YAAY,CAAC,CAAC,GAAGmB,OAAO,EAAE,CAAC,CAAC;MAElD,IAAIlB,IAAI,CAACK,KAAK,IAAI,CAAC,EAAEH,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAES,QAAQ,CAAC;EACd;EAEAvB,cAAc,CAACc,KAAK,CAAC;EAErB,OAAO;IAAEA,KAAK;IAAEF,IAAI;IAAEM,KAAK;IAAEF;EAAM,CAAC;AACtC;AAEA,OAAO,MAAMiB,kBAAkB,GAAG1B,YAAY,CAAC;EAC7C2B,SAAS,EAAEC,OAAO;EAClBC,IAAI,EAAEC,MAAM;EACZxB,KAAK,EAAE,CAACsB,OAAO,EAAEE,MAAM,CAAC;EACxBC,OAAO,EAAE;IACPC,IAAI,EAAE,CAACC,MAAM,EAAEH,MAAM,CAAC;IACtBI,OAAO,EAAE;EACX,CAAC;EACDC,QAAQ,EAAEP,OAAO;EAEjB,GAAGrD,iBAAiB,CAAC;IAAE6D,QAAQ,EAAE;EAAS,CAAU,CAAC;EACrD,GAAG5D,iBAAiB,CAAC,CAAC;EACtB,GAAGG,gBAAgB,CAAC,CAAC;EACrB,GAAGO,gBAAgB,CAAC,CAAC;EACrB,GAAGJ,cAAc,CAAC,CAAC;EACnB,GAAGiB,IAAI,CAAC7B,iBAAiB,CAAC;IACxBmE,UAAU,EAAE;EACd,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,CAAC;AACnE,CAAC,EAAE,WAAW,CAAC;AAEf,OAAO,MAAMC,SAAS,GAAGxC,gBAAgB,CAAiB,CAAC,CAAC;EAC1DyC,IAAI,EAAE,WAAW;EAEjBC,KAAK,EAAEd,kBAAkB,CAAC,CAAC;EAE3Be,KAAK,EAAE;IACL,mBAAmB,EAAGC,CAAU,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAME,QAAQ,GAAGpE,eAAe,CAAC8D,KAAK,EAAE,YAAY,CAAC;IACrD,MAAM;MAAEO;IAAgB,CAAC,GAAGtE,WAAW,CAAC+D,KAAK,CAAC;IAC9C,MAAM;MAAEQ;IAAQ,CAAC,GAAGnE,UAAU,CAAC,CAAC;IAChC,MAAM;MAAEoE;IAAa,CAAC,GAAGlE,YAAY,CAACyD,KAAK,CAAC;IAC5C,MAAM;MAAEU,YAAY;MAAEC,WAAW;MAAEC;IAAe,CAAC,GAAGjE,UAAU,CAACqD,KAAK,CAAC;IACvE,MAAM;MAAEa;IAAe,CAAC,GAAGzE,UAAU,CAAC4D,KAAK,CAAC;IAC5C,MAAMc,SAAS,GAAGnD,YAAY,CAAC,MAAM8B,MAAM,CAACO,KAAK,CAACT,OAAO,CAAC,CAAC;IAE3D,MAAMwB,OAAO,GAAG7D,GAAG,CAAW,CAAC;IAC/B,MAAM8D,QAAQ,GAAG9D,GAAG,CAAkB,CAAC;IACvC,MAAM+D,UAAU,GAAG9D,UAAU,CAAC,KAAK,CAAC;IACpC,MAAM+D,MAAM,GAAG/D,UAAU,CAAC,CAAC,CAAC;IAC5B,MAAMgE,UAAU,GAAGjE,GAAG,CAAC,CAAC;IACxB,MAAMkE,SAAS,GAAGvE,MAAM,CAACf,gBAAgB,EAAEuF,SAAS,CAAC;IAErD7E,cAAc,CAAC,MAAM,CAAC,CAAC4E,SAAS,EAAE,MAAM;MACtC,MAAME,MAAM,GAAG1F,SAAS,CAAC,CAAC;MAE1ByB,WAAW,CAAC,MAAM;QAChB8D,UAAU,CAACjD,KAAK,GAAGoD,MAAM,CAACH,UAAU,CAACjD,KAAK;MAC5C,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFd,KAAK,CAACkD,QAAQ,EAAEiB,YAAY,CAAC;IAC7BnE,KAAK,CAAC,MAAM4C,KAAK,CAACT,OAAO,EAAEgC,YAAY,CAAC;IAExCvE,SAAS,CAAC,MAAM;MACd,IAAIsD,QAAQ,CAACpC,KAAK,EAAEqD,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,IAAIC,aAAa,GAAG,CAAC,CAAC;IACtB,SAASD,YAAYA,CAAA,EAAI;MACvBT,SAAS,CAAC7C,KAAK,CAAC,CAAC;MACjBY,MAAM,CAAC4C,YAAY,CAACD,aAAa,CAAC;MAClC,MAAMjC,OAAO,GAAGE,MAAM,CAACO,KAAK,CAACT,OAAO,CAAC;MAErC,IAAI,CAACe,QAAQ,CAACpC,KAAK,IAAIqB,OAAO,KAAK,CAAC,CAAC,EAAE;MAEvC,MAAMmC,OAAO,GAAGjE,UAAU,CAACuD,QAAQ,CAAC9C,KAAK,CAAC;MAE1C4C,SAAS,CAAC3C,KAAK,CAACuD,OAAO,CAAC;MAExBF,aAAa,GAAG3C,MAAM,CAAC8C,UAAU,CAAC,MAAM;QACtCrB,QAAQ,CAACpC,KAAK,GAAG,KAAK;MACxB,CAAC,EAAEqB,OAAO,CAAC;IACb;IAEA,SAASkC,YAAYA,CAAA,EAAI;MACvBX,SAAS,CAAC7C,KAAK,CAAC,CAAC;MACjBY,MAAM,CAAC4C,YAAY,CAACD,aAAa,CAAC;IACpC;IAEA,SAASI,cAAcA,CAAA,EAAI;MACzBX,UAAU,CAAC/C,KAAK,GAAG,IAAI;MACvBuD,YAAY,CAAC,CAAC;IAChB;IAEA,SAASI,cAAcA,CAAA,EAAI;MACzBZ,UAAU,CAAC/C,KAAK,GAAG,KAAK;MACxBqD,YAAY,CAAC,CAAC;IAChB;IAEA,SAASO,YAAYA,CAAEC,KAAiB,EAAE;MACxCb,MAAM,CAAChD,KAAK,GAAG6D,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,CAACC,OAAO;IACzC;IAEA,SAASC,UAAUA,CAAEH,KAAiB,EAAE;MACtC,IAAI/C,IAAI,CAACmD,GAAG,CAACjB,MAAM,CAAChD,KAAK,GAAG6D,KAAK,CAACK,cAAc,CAAC,CAAC,CAAC,CAACH,OAAO,CAAC,GAAG,EAAE,EAAE;QACjE3B,QAAQ,CAACpC,KAAK,GAAG,KAAK;MACxB;IACF;IAEA,SAASmE,YAAYA,CAAA,EAAI;MACvB,IAAIpB,UAAU,CAAC/C,KAAK,EAAE2D,cAAc,CAAC,CAAC;IACxC;IAEA,MAAMS,eAAe,GAAG1F,QAAQ,CAAC,MAAM;MACrC,OAAOoD,KAAK,CAACJ,QAAQ,CAAC2C,KAAK,CAAC,GAAG,CAAC,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;QACpDD,GAAG,CAAC,eAAeC,GAAG,EAAE,CAAC,GAAG,IAAI;QAEhC,OAAOD,GAAG;MACZ,CAAC,EAAE,CAAC,CAAwB,CAAC;IAC/B,CAAC,CAAC;IAEF/E,SAAS,CAAC,MAAM;MACd,MAAMiF,YAAY,GAAGlH,QAAQ,CAACmH,WAAW,CAAC5C,KAAK,CAAC;MAChD,MAAM6C,UAAU,GAAG,CAAC,EAAExC,KAAK,CAACX,OAAO,IAAIW,KAAK,CAAChB,IAAI,IAAIW,KAAK,CAACX,IAAI,CAAC;MAEhE,OAAAyD,YAAA,CAAArH,QAAA,EAAAsH,WAAA;QAAA,OAEUhC,OAAO;QAAA,SACN,CACL,YAAY,EACZ;UACE,oBAAoB,EAAET,QAAQ,CAACpC,KAAK;UACpC,wBAAwB,EAAE8B,KAAK,CAACb,SAAS,IAAI,CAACa,KAAK,CAACL,QAAQ;UAC5D,mBAAmB,EAAE,CAAC,CAACK,KAAK,CAAClC,KAAK;UAClC,sBAAsB,EAAEkC,KAAK,CAACL;QAChC,CAAC,EACD2C,eAAe,CAACpE,KAAK,EACrBqC,eAAe,CAACrC,KAAK,EACrB8B,KAAK,CAACgD,KAAK,CACZ;QAAA,SACM,CACL7B,UAAU,CAACjD,KAAK,EAChB8B,KAAK,CAAC3B,KAAK;MACZ,GACIsE,YAAY;QAAA,cACPrC,QAAQ,CAACpC,KAAK;QAAA,uBAAA+E,MAAA,IAAd3C,QAAQ,CAACpC,KAAK,GAAA+E,MAAA;QAAA,gBACTnG,UAAU,CAAC;UACxBkG,KAAK,EAAE,CACL,qBAAqB,EACrBvC,YAAY,CAACvC,KAAK,EAClBwC,YAAY,CAACxC,KAAK,EAClB2C,cAAc,CAAC3C,KAAK,EACpB0C,cAAc,CAAC1C,KAAK,CACrB;UACDG,KAAK,EAAE,CACLsC,WAAW,CAACzC,KAAK,CAClB;UACD0D,cAAc;UACdC;QACF,CAAC,EAAEc,YAAY,CAACO,YAAY,CAAC;QAAA;QAAA;QAAA,SAGrB,KAAK;QAAA;QAAA;QAAA,uBAGSpB,YAAY;QAAA,cACrBI,UAAU;QAAA,gBACRG;MAAY,GACtB7B,OAAO;QAAAd,OAAA,EAAAA,CAAA,MAGVjD,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,EAEhCuD,KAAK,CAAClC,KAAK,IAAI,CAACmD,UAAU,CAAC/C,KAAK,IAAAiF,mBAAA;UAAA;UAAA;QAAA,IAAAL,YAAA,CAAAnH,eAAA;UAAA,OAGtBqF,QAAQ;UAAA,SACN,OAAOhB,KAAK,CAAClC,KAAK,KAAK,QAAQ,GAAGkC,KAAK,CAAClC,KAAK,GAAG,MAAM;UAAA,OACxDkC,KAAK,CAACT,OAAO;UAAA,cACNuB,SAAS,CAACjD,IAAI,CAACK;QAAK,UAGtC,EAEC2E,UAAU,IAAAM,mBAAA;UAAA;UAAA;UAAA;UAAA;QAAA,IAON9C,KAAK,CAAChB,IAAI,GAAG,CAAC,IAAIW,KAAK,CAACX,IAAI,EAE5BgB,KAAK,CAACX,OAAO,GAAG,CAAC,EAEtB,EAECW,KAAK,CAAC+C,OAAO,IAAAN,YAAA,CAAAtH,iBAAA;UAAA,YAED;YACR6H,IAAI,EAAE;cACJC,OAAO,EAAE,MAAM;cACfC,MAAM,EAAE,KAAK;cACbC,IAAI,EAAE;YACR;UACF;QAAC;UAAA9D,OAAA,EAAAA,CAAA,MAAAyD,mBAAA;YAAA;UAAA,IAGG9C,KAAK,CAAC+C,OAAO,CAAC;YAAE9C;UAAS,CAAC,CAAC;QAAA,EAGlC;QA1CUmD,SAAS,EAAEpD,KAAK,CAACoD;MAAS;IA6C3C,CAAC,CAAC;IAEF,OAAO5H,WAAW,CAAC,CAAC,CAAC,EAAEkF,OAAO,CAAC;EACjC;AACF,CAAC,CAAC","ignoreList":[]}
@@ -133,7 +133,7 @@ export const VTreeview = genericComponent()({
133
133
  "class": ['v-treeview', {
134
134
  'v-treeview--fluid': props.fluid
135
135
  }, props.class],
136
- "open-strategy": "multiple",
136
+ "openStrategy": "multiple",
137
137
  "style": props.style,
138
138
  "opened": opened.value,
139
139
  "activated": activated.value,
@@ -1 +1 @@
1
- {"version":3,"file":"VTreeview.js","names":["makeVTreeviewChildrenProps","VTreeviewChildren","makeVListProps","useListItems","VList","provideDefaults","makeFilterProps","useFilter","useProxiedModel","computed","provide","ref","toRaw","toRef","genericComponent","omit","propsFactory","useRender","VTreeviewSymbol","flatten","items","flat","arguments","length","undefined","item","push","children","makeVTreeviewProps","fluid","Boolean","openAll","indentLines","String","search","filterKeys","collapseIcon","expandIcon","slim","modelValue","Array","VTreeview","name","props","emits","val","value","setup","_ref","slots","emit","activeColor","baseColor","color","activated","_selected","selected","get","set","vListRef","opened","flatItems","filteredItems","visibleIds","getPath","Set","flatMap","itemVal","returnObject","raw","getChildren","map","id","arr","queue","slice","child","shift","ids","i","concat","VTreeviewGroup","VTreeviewItem","activeClass","density","disabled","lines","variant","listProps","filterProps","treeviewChildrenProps","indentLinesVariant","_createVNode","_mergeProps","class","style","$event","default"],"sources":["../../../src/components/VTreeview/VTreeview.tsx"],"sourcesContent":["// Components\nimport { makeVTreeviewChildrenProps, VTreeviewChildren } from './VTreeviewChildren'\nimport { makeVListProps, useListItems, VList } from '@/components/VList/VList'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, provide, ref, toRaw, toRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { VTreeviewSymbol } from './shared'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { VListChildrenSlots } from '@/components/VList/VListChildren'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, IndentLinesVariant } from '@/util'\n\nfunction flatten (items: ListItem[], flat: ListItem[] = []) {\n for (const item of items) {\n flat.push(item)\n if (item.children) flatten(item.children, flat)\n }\n return flat\n}\n\nexport const makeVTreeviewProps = propsFactory({\n fluid: Boolean,\n openAll: Boolean,\n indentLines: [Boolean, String] as PropType<boolean | IndentLinesVariant>,\n search: String,\n\n ...makeFilterProps({ filterKeys: ['title'] }),\n ...omit(makeVTreeviewChildrenProps(), [\n 'index',\n 'path',\n 'indentLinesVariant',\n 'parentIndentLines',\n 'isLastGroup',\n ]),\n ...omit(makeVListProps({\n collapseIcon: '$treeviewCollapse',\n expandIcon: '$treeviewExpand',\n slim: true,\n }), ['nav', 'openStrategy']),\n\n modelValue: Array,\n}, 'VTreeview')\n\nexport const VTreeview = genericComponent<new <T>(\n props: {\n items?: T[]\n },\n slots: VListChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VTreeview',\n\n props: makeVTreeviewProps(),\n\n emits: {\n 'update:opened': (val: unknown) => true,\n 'update:activated': (val: unknown) => true,\n 'update:selected': (val: unknown) => true,\n 'update:modelValue': (val: unknown) => true,\n 'click:open': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n 'click:select': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n },\n\n setup (props, { slots, emit }) {\n const { items } = useListItems(props)\n const activeColor = toRef(() => props.activeColor)\n const baseColor = toRef(() => props.baseColor)\n const color = toRef(() => props.color)\n const activated = useProxiedModel(props, 'activated')\n const _selected = useProxiedModel(props, 'selected')\n\n const selected = computed({\n get: () => props.modelValue ?? _selected.value,\n set (val) {\n _selected.value = val\n emit('update:modelValue', val)\n },\n })\n\n const vListRef = ref<VList>()\n\n const opened = computed(() => props.openAll ? openAll(items.value) : props.opened)\n const flatItems = computed(() => flatten(items.value))\n const search = toRef(() => props.search)\n const { filteredItems } = useFilter(props, flatItems, search)\n const visibleIds = computed(() => {\n if (!search.value) return null\n const getPath = vListRef.value?.getPath\n if (!getPath) return null\n return new Set(filteredItems.value.flatMap(item => {\n const itemVal = props.returnObject ? item.raw : item.props.value\n return [\n ...getPath(itemVal),\n ...getChildren(itemVal),\n ].map(toRaw)\n }))\n })\n\n function getChildren (id: unknown) {\n const arr: unknown[] = []\n const queue = ((vListRef.value?.children.get(id) ?? []).slice())\n while (queue.length) {\n const child = queue.shift()\n if (!child) continue\n arr.push(child)\n queue.push(...((vListRef.value?.children.get(child) ?? []).slice()))\n }\n return arr\n }\n\n function openAll (items: InternalListItem<any>[]) {\n let ids: any[] = []\n\n for (const i of items) {\n if (!i.children) continue\n\n ids.push(props.returnObject ? toRaw(i.raw) : i.value)\n\n if (i.children) {\n ids = ids.concat(openAll(i.children))\n }\n }\n\n return ids\n }\n\n provide(VTreeviewSymbol, { visibleIds })\n\n provideDefaults({\n VTreeviewGroup: {\n activeColor,\n baseColor,\n color,\n collapseIcon: toRef(() => props.collapseIcon),\n expandIcon: toRef(() => props.expandIcon),\n },\n VTreeviewItem: {\n activeClass: toRef(() => props.activeClass),\n activeColor,\n baseColor,\n color,\n density: toRef(() => props.density),\n disabled: toRef(() => props.disabled),\n lines: toRef(() => props.lines),\n variant: toRef(() => props.variant),\n },\n })\n\n useRender(() => {\n const listProps = VList.filterProps(props)\n const treeviewChildrenProps = VTreeviewChildren.filterProps(props)\n const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines\n\n return (\n <VList\n ref={ vListRef }\n { ...listProps }\n class={[\n 'v-treeview',\n {\n 'v-treeview--fluid': props.fluid,\n },\n props.class,\n ]}\n open-strategy=\"multiple\"\n style={ props.style }\n opened={ opened.value }\n v-model:activated={ activated.value }\n v-model:selected={ selected.value }\n >\n <VTreeviewChildren\n { ...treeviewChildrenProps }\n density={ props.density }\n returnObject={ props.returnObject }\n items={ items.value }\n parentIndentLines={ props.indentLines ? [] : undefined }\n indentLinesVariant={ indentLinesVariant }\n v-slots={ slots }\n ></VTreeviewChildren>\n </VList>\n )\n })\n\n return { }\n },\n})\n\nexport type VTreeview = InstanceType<typeof VTreeview>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VTreeview.js","names":["makeVTreeviewChildrenProps","VTreeviewChildren","makeVListProps","useListItems","VList","provideDefaults","makeFilterProps","useFilter","useProxiedModel","computed","provide","ref","toRaw","toRef","genericComponent","omit","propsFactory","useRender","VTreeviewSymbol","flatten","items","flat","arguments","length","undefined","item","push","children","makeVTreeviewProps","fluid","Boolean","openAll","indentLines","String","search","filterKeys","collapseIcon","expandIcon","slim","modelValue","Array","VTreeview","name","props","emits","val","value","setup","_ref","slots","emit","activeColor","baseColor","color","activated","_selected","selected","get","set","vListRef","opened","flatItems","filteredItems","visibleIds","getPath","Set","flatMap","itemVal","returnObject","raw","getChildren","map","id","arr","queue","slice","child","shift","ids","i","concat","VTreeviewGroup","VTreeviewItem","activeClass","density","disabled","lines","variant","listProps","filterProps","treeviewChildrenProps","indentLinesVariant","_createVNode","_mergeProps","class","style","$event","default"],"sources":["../../../src/components/VTreeview/VTreeview.tsx"],"sourcesContent":["// Components\nimport { makeVTreeviewChildrenProps, VTreeviewChildren } from './VTreeviewChildren'\nimport { makeVListProps, useListItems, VList } from '@/components/VList/VList'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, provide, ref, toRaw, toRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { VTreeviewSymbol } from './shared'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { VListChildrenSlots } from '@/components/VList/VListChildren'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, IndentLinesVariant } from '@/util'\n\nfunction flatten (items: ListItem[], flat: ListItem[] = []) {\n for (const item of items) {\n flat.push(item)\n if (item.children) flatten(item.children, flat)\n }\n return flat\n}\n\nexport const makeVTreeviewProps = propsFactory({\n fluid: Boolean,\n openAll: Boolean,\n indentLines: [Boolean, String] as PropType<boolean | IndentLinesVariant>,\n search: String,\n\n ...makeFilterProps({ filterKeys: ['title'] }),\n ...omit(makeVTreeviewChildrenProps(), [\n 'index',\n 'path',\n 'indentLinesVariant',\n 'parentIndentLines',\n 'isLastGroup',\n ]),\n ...omit(makeVListProps({\n collapseIcon: '$treeviewCollapse',\n expandIcon: '$treeviewExpand',\n slim: true,\n }), ['nav', 'openStrategy']),\n\n modelValue: Array,\n}, 'VTreeview')\n\nexport const VTreeview = genericComponent<new <T>(\n props: {\n items?: T[]\n },\n slots: VListChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VTreeview',\n\n props: makeVTreeviewProps(),\n\n emits: {\n 'update:opened': (val: unknown) => true,\n 'update:activated': (val: unknown) => true,\n 'update:selected': (val: unknown) => true,\n 'update:modelValue': (val: unknown) => true,\n 'click:open': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n 'click:select': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n },\n\n setup (props, { slots, emit }) {\n const { items } = useListItems(props)\n const activeColor = toRef(() => props.activeColor)\n const baseColor = toRef(() => props.baseColor)\n const color = toRef(() => props.color)\n const activated = useProxiedModel(props, 'activated')\n const _selected = useProxiedModel(props, 'selected')\n\n const selected = computed({\n get: () => props.modelValue ?? _selected.value,\n set (val) {\n _selected.value = val\n emit('update:modelValue', val)\n },\n })\n\n const vListRef = ref<VList>()\n\n const opened = computed(() => props.openAll ? openAll(items.value) : props.opened)\n const flatItems = computed(() => flatten(items.value))\n const search = toRef(() => props.search)\n const { filteredItems } = useFilter(props, flatItems, search)\n const visibleIds = computed(() => {\n if (!search.value) return null\n const getPath = vListRef.value?.getPath\n if (!getPath) return null\n return new Set(filteredItems.value.flatMap(item => {\n const itemVal = props.returnObject ? item.raw : item.props.value\n return [\n ...getPath(itemVal),\n ...getChildren(itemVal),\n ].map(toRaw)\n }))\n })\n\n function getChildren (id: unknown) {\n const arr: unknown[] = []\n const queue = ((vListRef.value?.children.get(id) ?? []).slice())\n while (queue.length) {\n const child = queue.shift()\n if (!child) continue\n arr.push(child)\n queue.push(...((vListRef.value?.children.get(child) ?? []).slice()))\n }\n return arr\n }\n\n function openAll (items: InternalListItem<any>[]) {\n let ids: any[] = []\n\n for (const i of items) {\n if (!i.children) continue\n\n ids.push(props.returnObject ? toRaw(i.raw) : i.value)\n\n if (i.children) {\n ids = ids.concat(openAll(i.children))\n }\n }\n\n return ids\n }\n\n provide(VTreeviewSymbol, { visibleIds })\n\n provideDefaults({\n VTreeviewGroup: {\n activeColor,\n baseColor,\n color,\n collapseIcon: toRef(() => props.collapseIcon),\n expandIcon: toRef(() => props.expandIcon),\n },\n VTreeviewItem: {\n activeClass: toRef(() => props.activeClass),\n activeColor,\n baseColor,\n color,\n density: toRef(() => props.density),\n disabled: toRef(() => props.disabled),\n lines: toRef(() => props.lines),\n variant: toRef(() => props.variant),\n },\n })\n\n useRender(() => {\n const listProps = VList.filterProps(props)\n const treeviewChildrenProps = VTreeviewChildren.filterProps(props)\n const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines\n\n return (\n <VList\n ref={ vListRef }\n { ...listProps }\n class={[\n 'v-treeview',\n {\n 'v-treeview--fluid': props.fluid,\n },\n props.class,\n ]}\n openStrategy=\"multiple\"\n style={ props.style }\n opened={ opened.value }\n v-model:activated={ activated.value }\n v-model:selected={ selected.value }\n >\n <VTreeviewChildren\n { ...treeviewChildrenProps }\n density={ props.density }\n returnObject={ props.returnObject }\n items={ items.value }\n parentIndentLines={ props.indentLines ? [] : undefined }\n indentLinesVariant={ indentLinesVariant }\n v-slots={ slots }\n ></VTreeviewChildren>\n </VList>\n )\n })\n\n return { }\n },\n})\n\nexport type VTreeview = InstanceType<typeof VTreeview>\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@ export const createVuetify = function () {
16
16
  ...options
17
17
  });
18
18
  };
19
- export const version = "3.9.0-master.2025-07-08";
19
+ export const version = "3.9.0-master.2025-07-09";
20
20
  createVuetify.version = version;
21
21
  export { blueprints, components, directives };
22
22
  export * from "./composables/index.js";