vuetify 3.4.2 → 3.4.3
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.
- package/dist/json/attributes.json +2187 -2187
- package/dist/json/importMap.json +114 -114
- package/dist/json/web-types.json +3977 -3962
- package/dist/vuetify-labs.css +1645 -1636
- package/dist/vuetify-labs.d.ts +298 -151
- package/dist/vuetify-labs.esm.js +710 -696
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +709 -695
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +915 -906
- package/dist/vuetify.d.ts +332 -185
- package/dist/vuetify.esm.js +710 -696
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +709 -695
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +222 -221
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/index.d.mts +48 -48
- package/lib/blueprints/md1.d.mts +48 -48
- package/lib/blueprints/md2.d.mts +48 -48
- package/lib/blueprints/md3.d.mts +48 -48
- package/lib/components/VBtn/VBtn.css +3 -0
- package/lib/components/VBtn/VBtn.sass +4 -0
- package/lib/components/VBtn/_variables.scss +1 -0
- package/lib/components/VCarousel/VCarousel.css +2 -1
- package/lib/components/VCarousel/VCarousel.mjs +1 -1
- package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
- package/lib/components/VCarousel/VCarousel.sass +3 -1
- package/lib/components/VCarousel/_variables.scss +6 -0
- package/lib/components/VCheckbox/index.d.mts +32 -20
- package/lib/components/VDataTable/VDataTable.mjs +2 -1
- package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableFooter.css +1 -1
- package/lib/components/VDataTable/VDataTableFooter.mjs +18 -31
- package/lib/components/VDataTable/VDataTableFooter.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/components/VDataTable/_variables.scss +1 -1
- package/lib/components/VDataTable/index.d.mts +3 -3
- package/lib/components/VDatePicker/VDatePicker.mjs +3 -3
- package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.mjs +18 -15
- package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.mjs +1 -0
- package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
- package/lib/components/VPagination/VPagination.mjs +2 -2
- package/lib/components/VPagination/VPagination.mjs.map +1 -1
- package/lib/components/VRadio/index.d.mts +16 -10
- package/lib/components/VRadioGroup/index.d.mts +16 -10
- package/lib/components/VSelect/VSelect.mjs +3 -1
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.mts +16 -10
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
- package/lib/components/VSelectionControlGroup/index.d.mts +16 -10
- package/lib/components/VSlideGroup/VSlideGroup.mjs +2 -2
- package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
- package/lib/components/VSwitch/index.d.mts +16 -10
- package/lib/components/VTable/VTable.css +6 -1
- package/lib/components/VTable/VTable.sass +6 -1
- package/lib/components/VTable/_variables.scss +2 -0
- package/lib/components/VTabs/VTab.mjs +4 -3
- package/lib/components/VTabs/VTab.mjs.map +1 -1
- package/lib/components/VTabs/index.d.mts +72 -0
- package/lib/components/index.d.mts +187 -73
- package/lib/composables/date/date.mjs +21 -13
- package/lib/composables/date/date.mjs.map +1 -1
- package/lib/composables/router.mjs +7 -2
- package/lib/composables/router.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +4 -3
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.mts +145 -112
- package/lib/locale/fr.mjs +1 -1
- package/lib/locale/fr.mjs.map +1 -1
- package/package.json +2 -2
package/dist/vuetify.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.4.
|
|
2
|
+
* Vuetify v3.4.3
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, withModifiers, toDisplayString,
|
|
7
|
+
import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
|
|
8
8
|
|
|
9
9
|
// Types
|
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
|
@@ -4967,6 +4967,13 @@ function usePosition(props) {
|
|
|
4967
4967
|
}
|
|
4968
4968
|
|
|
4969
4969
|
// Utilities
|
|
4970
|
+
|
|
4971
|
+
// Types
|
|
4972
|
+
|
|
4973
|
+
function useRoute() {
|
|
4974
|
+
const vm = getCurrentInstance('useRoute');
|
|
4975
|
+
return computed(() => vm?.proxy?.$route);
|
|
4976
|
+
}
|
|
4970
4977
|
function useRouter() {
|
|
4971
4978
|
return getCurrentInstance('useRouter')?.proxy?.$router;
|
|
4972
4979
|
}
|
|
@@ -4984,12 +4991,17 @@ function useLink(props, attrs) {
|
|
|
4984
4991
|
};
|
|
4985
4992
|
}
|
|
4986
4993
|
const link = props.to ? RouterLink.useLink(props) : undefined;
|
|
4994
|
+
const route = useRoute();
|
|
4987
4995
|
return {
|
|
4988
4996
|
isLink,
|
|
4989
4997
|
isClickable,
|
|
4990
4998
|
route: link?.route,
|
|
4991
4999
|
navigate: link?.navigate,
|
|
4992
|
-
isActive: link && computed(() =>
|
|
5000
|
+
isActive: link && computed(() => {
|
|
5001
|
+
if (!props.exact) return link.isActive?.value;
|
|
5002
|
+
if (!route.value) return link.isExactActive?.value;
|
|
5003
|
+
return link.isExactActive?.value && deepEqual(link.route.value.query, route.value.query);
|
|
5004
|
+
}),
|
|
4993
5005
|
href: computed(() => props.to ? link?.route.value.href : props.href)
|
|
4994
5006
|
};
|
|
4995
5007
|
}
|
|
@@ -5806,7 +5818,10 @@ const makeSelectionControlGroupProps = propsFactory({
|
|
|
5806
5818
|
default: null
|
|
5807
5819
|
},
|
|
5808
5820
|
name: String,
|
|
5809
|
-
readonly:
|
|
5821
|
+
readonly: {
|
|
5822
|
+
type: Boolean,
|
|
5823
|
+
default: null
|
|
5824
|
+
},
|
|
5810
5825
|
modelValue: null,
|
|
5811
5826
|
type: String,
|
|
5812
5827
|
valueComparator: {
|
|
@@ -11445,7 +11460,9 @@ const VSelect = genericComponent()({
|
|
|
11445
11460
|
item,
|
|
11446
11461
|
index,
|
|
11447
11462
|
props: itemProps
|
|
11448
|
-
}) ?? createVNode(VListItem, itemProps, {
|
|
11463
|
+
}) ?? createVNode(VListItem, mergeProps(itemProps, {
|
|
11464
|
+
"role": "option"
|
|
11465
|
+
}), {
|
|
11449
11466
|
prepend: _ref3 => {
|
|
11450
11467
|
let {
|
|
11451
11468
|
isSelected
|
|
@@ -13407,7 +13424,7 @@ const VCarousel = genericComponent()({
|
|
|
13407
13424
|
const props = {
|
|
13408
13425
|
id: `carousel-item-${item.id}`,
|
|
13409
13426
|
'aria-label': t('$vuetify.carousel.ariaLabel.delimiter', index + 1, group.items.value.length),
|
|
13410
|
-
class: [group.isSelected(item.id) && 'v-btn--active'],
|
|
13427
|
+
class: ['v-carousel__controls__item', group.isSelected(item.id) && 'v-btn--active'],
|
|
13411
13428
|
onClick: () => group.select(item.id, true)
|
|
13412
13429
|
};
|
|
13413
13430
|
return slots.item ? slots.item({
|
|
@@ -16802,13 +16819,11 @@ class VuetifyDateAdapter {
|
|
|
16802
16819
|
}
|
|
16803
16820
|
}
|
|
16804
16821
|
|
|
16805
|
-
//
|
|
16806
|
-
|
|
16807
|
-
// Types
|
|
16808
|
-
|
|
16822
|
+
// Composables
|
|
16823
|
+
const DateOptionsSymbol = Symbol.for('vuetify:date-options');
|
|
16809
16824
|
const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
|
|
16810
16825
|
function createDate(options, locale) {
|
|
16811
|
-
const
|
|
16826
|
+
const _options = mergeDeep({
|
|
16812
16827
|
adapter: VuetifyDateAdapter,
|
|
16813
16828
|
locale: {
|
|
16814
16829
|
af: 'af-ZA',
|
|
@@ -16854,22 +16869,28 @@ function createDate(options, locale) {
|
|
|
16854
16869
|
zhHant: 'zh-TW'
|
|
16855
16870
|
}
|
|
16856
16871
|
}, options);
|
|
16857
|
-
|
|
16872
|
+
return {
|
|
16873
|
+
options: _options,
|
|
16874
|
+
instance: createInstance(_options, locale)
|
|
16875
|
+
};
|
|
16876
|
+
}
|
|
16877
|
+
function createInstance(options, locale) {
|
|
16878
|
+
const instance = reactive(typeof options.adapter === 'function'
|
|
16858
16879
|
// eslint-disable-next-line new-cap
|
|
16859
|
-
? new
|
|
16860
|
-
locale:
|
|
16861
|
-
formats:
|
|
16862
|
-
}) :
|
|
16880
|
+
? new options.adapter({
|
|
16881
|
+
locale: options.locale[locale.current.value] ?? locale.current.value,
|
|
16882
|
+
formats: options.formats
|
|
16883
|
+
}) : options.adapter);
|
|
16863
16884
|
watch(locale.current, value => {
|
|
16864
|
-
|
|
16865
|
-
instance.locale = newLocale ?? instance.locale;
|
|
16885
|
+
instance.locale = options.locale[value] ?? value ?? instance.locale;
|
|
16866
16886
|
});
|
|
16867
16887
|
return instance;
|
|
16868
16888
|
}
|
|
16869
16889
|
function useDate() {
|
|
16870
|
-
const
|
|
16871
|
-
if (!
|
|
16872
|
-
|
|
16890
|
+
const options = inject$1(DateOptionsSymbol);
|
|
16891
|
+
if (!options) throw new Error('[Vuetify] Could not find injected date options');
|
|
16892
|
+
const locale = useLocale();
|
|
16893
|
+
return createInstance(options, locale);
|
|
16873
16894
|
}
|
|
16874
16895
|
|
|
16875
16896
|
// https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
|
|
@@ -17210,152 +17231,473 @@ const VDataIterator = genericComponent()({
|
|
|
17210
17231
|
}
|
|
17211
17232
|
});
|
|
17212
17233
|
|
|
17234
|
+
// Utilities
|
|
17235
|
+
|
|
17213
17236
|
// Types
|
|
17214
17237
|
|
|
17215
|
-
|
|
17238
|
+
function useRefs() {
|
|
17239
|
+
const refs = ref([]);
|
|
17240
|
+
onBeforeUpdate(() => refs.value = []);
|
|
17241
|
+
function updateRef(e, i) {
|
|
17242
|
+
refs.value[i] = e;
|
|
17243
|
+
}
|
|
17244
|
+
return {
|
|
17245
|
+
refs,
|
|
17246
|
+
updateRef
|
|
17247
|
+
};
|
|
17248
|
+
}
|
|
17249
|
+
|
|
17250
|
+
// Types
|
|
17251
|
+
|
|
17252
|
+
const makeVPaginationProps = propsFactory({
|
|
17253
|
+
activeColor: String,
|
|
17254
|
+
start: {
|
|
17255
|
+
type: [Number, String],
|
|
17256
|
+
default: 1
|
|
17257
|
+
},
|
|
17258
|
+
modelValue: {
|
|
17259
|
+
type: Number,
|
|
17260
|
+
default: props => props.start
|
|
17261
|
+
},
|
|
17262
|
+
disabled: Boolean,
|
|
17263
|
+
length: {
|
|
17264
|
+
type: [Number, String],
|
|
17265
|
+
default: 1,
|
|
17266
|
+
validator: val => val % 1 === 0
|
|
17267
|
+
},
|
|
17268
|
+
totalVisible: [Number, String],
|
|
17269
|
+
firstIcon: {
|
|
17270
|
+
type: IconValue,
|
|
17271
|
+
default: '$first'
|
|
17272
|
+
},
|
|
17216
17273
|
prevIcon: {
|
|
17217
|
-
type:
|
|
17274
|
+
type: IconValue,
|
|
17218
17275
|
default: '$prev'
|
|
17219
17276
|
},
|
|
17220
17277
|
nextIcon: {
|
|
17221
|
-
type:
|
|
17278
|
+
type: IconValue,
|
|
17222
17279
|
default: '$next'
|
|
17223
17280
|
},
|
|
17224
|
-
|
|
17281
|
+
lastIcon: {
|
|
17282
|
+
type: IconValue,
|
|
17283
|
+
default: '$last'
|
|
17284
|
+
},
|
|
17285
|
+
ariaLabel: {
|
|
17225
17286
|
type: String,
|
|
17226
|
-
default: '$
|
|
17287
|
+
default: '$vuetify.pagination.ariaLabel.root'
|
|
17227
17288
|
},
|
|
17228
|
-
|
|
17289
|
+
pageAriaLabel: {
|
|
17229
17290
|
type: String,
|
|
17230
|
-
default: '$
|
|
17291
|
+
default: '$vuetify.pagination.ariaLabel.page'
|
|
17231
17292
|
},
|
|
17232
|
-
|
|
17293
|
+
currentPageAriaLabel: {
|
|
17233
17294
|
type: String,
|
|
17234
|
-
default: '$vuetify.
|
|
17295
|
+
default: '$vuetify.pagination.ariaLabel.currentPage'
|
|
17235
17296
|
},
|
|
17236
|
-
|
|
17297
|
+
firstAriaLabel: {
|
|
17237
17298
|
type: String,
|
|
17238
|
-
default: '$vuetify.
|
|
17299
|
+
default: '$vuetify.pagination.ariaLabel.first'
|
|
17239
17300
|
},
|
|
17240
|
-
|
|
17301
|
+
previousAriaLabel: {
|
|
17241
17302
|
type: String,
|
|
17242
|
-
default: '$vuetify.
|
|
17303
|
+
default: '$vuetify.pagination.ariaLabel.previous'
|
|
17243
17304
|
},
|
|
17244
|
-
|
|
17305
|
+
nextAriaLabel: {
|
|
17245
17306
|
type: String,
|
|
17246
|
-
default: '$vuetify.
|
|
17307
|
+
default: '$vuetify.pagination.ariaLabel.next'
|
|
17247
17308
|
},
|
|
17248
|
-
|
|
17309
|
+
lastAriaLabel: {
|
|
17249
17310
|
type: String,
|
|
17250
|
-
default: '$vuetify.
|
|
17311
|
+
default: '$vuetify.pagination.ariaLabel.last'
|
|
17251
17312
|
},
|
|
17252
|
-
|
|
17313
|
+
ellipsis: {
|
|
17253
17314
|
type: String,
|
|
17254
|
-
default: '
|
|
17315
|
+
default: '...'
|
|
17255
17316
|
},
|
|
17256
|
-
|
|
17257
|
-
|
|
17258
|
-
|
|
17259
|
-
|
|
17260
|
-
|
|
17261
|
-
|
|
17262
|
-
|
|
17263
|
-
|
|
17264
|
-
|
|
17265
|
-
|
|
17266
|
-
|
|
17267
|
-
|
|
17268
|
-
|
|
17269
|
-
|
|
17270
|
-
|
|
17271
|
-
|
|
17272
|
-
|
|
17273
|
-
|
|
17317
|
+
showFirstLastPage: Boolean,
|
|
17318
|
+
...makeBorderProps(),
|
|
17319
|
+
...makeComponentProps(),
|
|
17320
|
+
...makeDensityProps(),
|
|
17321
|
+
...makeElevationProps(),
|
|
17322
|
+
...makeRoundedProps(),
|
|
17323
|
+
...makeSizeProps(),
|
|
17324
|
+
...makeTagProps({
|
|
17325
|
+
tag: 'nav'
|
|
17326
|
+
}),
|
|
17327
|
+
...makeThemeProps(),
|
|
17328
|
+
...makeVariantProps({
|
|
17329
|
+
variant: 'text'
|
|
17330
|
+
})
|
|
17331
|
+
}, 'VPagination');
|
|
17332
|
+
const VPagination = genericComponent()({
|
|
17333
|
+
name: 'VPagination',
|
|
17334
|
+
props: makeVPaginationProps(),
|
|
17335
|
+
emits: {
|
|
17336
|
+
'update:modelValue': value => true,
|
|
17337
|
+
first: value => true,
|
|
17338
|
+
prev: value => true,
|
|
17339
|
+
next: value => true,
|
|
17340
|
+
last: value => true
|
|
17274
17341
|
},
|
|
17275
|
-
showCurrentPage: Boolean
|
|
17276
|
-
}, 'VDataTableFooter');
|
|
17277
|
-
const VDataTableFooter = genericComponent()({
|
|
17278
|
-
name: 'VDataTableFooter',
|
|
17279
|
-
props: makeVDataTableFooterProps(),
|
|
17280
17342
|
setup(props, _ref) {
|
|
17281
17343
|
let {
|
|
17282
|
-
slots
|
|
17344
|
+
slots,
|
|
17345
|
+
emit
|
|
17283
17346
|
} = _ref;
|
|
17347
|
+
const page = useProxiedModel(props, 'modelValue');
|
|
17284
17348
|
const {
|
|
17285
|
-
t
|
|
17349
|
+
t,
|
|
17350
|
+
n
|
|
17286
17351
|
} = useLocale();
|
|
17287
17352
|
const {
|
|
17288
|
-
|
|
17289
|
-
|
|
17290
|
-
|
|
17291
|
-
|
|
17292
|
-
|
|
17293
|
-
|
|
17294
|
-
|
|
17295
|
-
} =
|
|
17296
|
-
const
|
|
17297
|
-
|
|
17298
|
-
|
|
17299
|
-
|
|
17300
|
-
|
|
17301
|
-
|
|
17353
|
+
isRtl
|
|
17354
|
+
} = useRtl();
|
|
17355
|
+
const {
|
|
17356
|
+
themeClasses
|
|
17357
|
+
} = provideTheme(props);
|
|
17358
|
+
const {
|
|
17359
|
+
width
|
|
17360
|
+
} = useDisplay();
|
|
17361
|
+
const maxButtons = shallowRef(-1);
|
|
17362
|
+
provideDefaults(undefined, {
|
|
17363
|
+
scoped: true
|
|
17364
|
+
});
|
|
17365
|
+
const {
|
|
17366
|
+
resizeRef
|
|
17367
|
+
} = useResizeObserver(entries => {
|
|
17368
|
+
if (!entries.length) return;
|
|
17369
|
+
const {
|
|
17370
|
+
target,
|
|
17371
|
+
contentRect
|
|
17372
|
+
} = entries[0];
|
|
17373
|
+
const firstItem = target.querySelector('.v-pagination__list > *');
|
|
17374
|
+
if (!firstItem) return;
|
|
17375
|
+
const totalWidth = contentRect.width;
|
|
17376
|
+
const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;
|
|
17377
|
+
maxButtons.value = getMax(totalWidth, itemWidth);
|
|
17378
|
+
});
|
|
17379
|
+
const length = computed(() => parseInt(props.length, 10));
|
|
17380
|
+
const start = computed(() => parseInt(props.start, 10));
|
|
17381
|
+
const totalVisible = computed(() => {
|
|
17382
|
+
if (props.totalVisible != null) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;
|
|
17383
|
+
return getMax(width.value, 58);
|
|
17384
|
+
});
|
|
17385
|
+
function getMax(totalWidth, itemWidth) {
|
|
17386
|
+
const minButtons = props.showFirstLastPage ? 5 : 3;
|
|
17387
|
+
return Math.max(0, Math.floor(
|
|
17388
|
+
// Round to two decimal places to avoid floating point errors
|
|
17389
|
+
+((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
|
|
17390
|
+
}
|
|
17391
|
+
const range = computed(() => {
|
|
17392
|
+
if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
|
|
17393
|
+
if (totalVisible.value <= 0) return [];else if (totalVisible.value === 1) return [page.value];
|
|
17394
|
+
if (length.value <= totalVisible.value) {
|
|
17395
|
+
return createRange(length.value, start.value);
|
|
17302
17396
|
}
|
|
17303
|
-
|
|
17304
|
-
|
|
17305
|
-
|
|
17306
|
-
|
|
17307
|
-
|
|
17308
|
-
|
|
17309
|
-
|
|
17310
|
-
|
|
17311
|
-
|
|
17312
|
-
|
|
17313
|
-
|
|
17314
|
-
|
|
17315
|
-
|
|
17316
|
-
|
|
17317
|
-
|
|
17318
|
-
|
|
17319
|
-
}, null)]), createVNode("div", {
|
|
17320
|
-
"class": "v-data-table-footer__info"
|
|
17321
|
-
}, [createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), createVNode("div", {
|
|
17322
|
-
"class": "v-data-table-footer__pagination"
|
|
17323
|
-
}, [createVNode(VBtn, {
|
|
17324
|
-
"icon": props.firstIcon,
|
|
17325
|
-
"variant": "plain",
|
|
17326
|
-
"onClick": () => page.value = 1,
|
|
17327
|
-
"disabled": page.value === 1,
|
|
17328
|
-
"aria-label": t(props.firstPageLabel)
|
|
17329
|
-
}, null), createVNode(VBtn, {
|
|
17330
|
-
"icon": props.prevIcon,
|
|
17331
|
-
"variant": "plain",
|
|
17332
|
-
"onClick": () => page.value = Math.max(1, page.value - 1),
|
|
17333
|
-
"disabled": page.value === 1,
|
|
17334
|
-
"aria-label": t(props.prevPageLabel)
|
|
17335
|
-
}, null), props.showCurrentPage && createVNode("span", {
|
|
17336
|
-
"key": "page",
|
|
17337
|
-
"class": "v-data-table-footer__page"
|
|
17338
|
-
}, [page.value]), createVNode(VBtn, {
|
|
17339
|
-
"icon": props.nextIcon,
|
|
17340
|
-
"variant": "plain",
|
|
17341
|
-
"onClick": () => page.value = Math.min(pageCount.value, page.value + 1),
|
|
17342
|
-
"disabled": page.value === pageCount.value,
|
|
17343
|
-
"aria-label": t(props.nextPageLabel)
|
|
17344
|
-
}, null), createVNode(VBtn, {
|
|
17345
|
-
"icon": props.lastIcon,
|
|
17346
|
-
"variant": "plain",
|
|
17347
|
-
"onClick": () => page.value = pageCount.value,
|
|
17348
|
-
"disabled": page.value === pageCount.value,
|
|
17349
|
-
"aria-label": t(props.lastPageLabel)
|
|
17350
|
-
}, null)])]);
|
|
17351
|
-
}
|
|
17352
|
-
});
|
|
17353
|
-
|
|
17354
|
-
// Types
|
|
17397
|
+
const even = totalVisible.value % 2 === 0;
|
|
17398
|
+
const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
|
|
17399
|
+
const left = even ? middle : middle + 1;
|
|
17400
|
+
const right = length.value - middle;
|
|
17401
|
+
if (left - page.value >= 0) {
|
|
17402
|
+
return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
|
|
17403
|
+
} else if (page.value - right >= (even ? 1 : 0)) {
|
|
17404
|
+
const rangeLength = totalVisible.value - 1;
|
|
17405
|
+
const rangeStart = length.value - rangeLength + start.value;
|
|
17406
|
+
return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
|
|
17407
|
+
} else {
|
|
17408
|
+
const rangeLength = Math.max(1, totalVisible.value - 3);
|
|
17409
|
+
const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
|
|
17410
|
+
return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
|
|
17411
|
+
}
|
|
17412
|
+
});
|
|
17355
17413
|
|
|
17356
|
-
|
|
17357
|
-
|
|
17358
|
-
|
|
17414
|
+
// TODO: 'first' | 'prev' | 'next' | 'last' does not work here?
|
|
17415
|
+
function setValue(e, value, event) {
|
|
17416
|
+
e.preventDefault();
|
|
17417
|
+
page.value = value;
|
|
17418
|
+
event && emit(event, value);
|
|
17419
|
+
}
|
|
17420
|
+
const {
|
|
17421
|
+
refs,
|
|
17422
|
+
updateRef
|
|
17423
|
+
} = useRefs();
|
|
17424
|
+
provideDefaults({
|
|
17425
|
+
VPaginationBtn: {
|
|
17426
|
+
color: toRef(props, 'color'),
|
|
17427
|
+
border: toRef(props, 'border'),
|
|
17428
|
+
density: toRef(props, 'density'),
|
|
17429
|
+
size: toRef(props, 'size'),
|
|
17430
|
+
variant: toRef(props, 'variant'),
|
|
17431
|
+
rounded: toRef(props, 'rounded'),
|
|
17432
|
+
elevation: toRef(props, 'elevation')
|
|
17433
|
+
}
|
|
17434
|
+
});
|
|
17435
|
+
const items = computed(() => {
|
|
17436
|
+
return range.value.map((item, index) => {
|
|
17437
|
+
const ref = e => updateRef(e, index);
|
|
17438
|
+
if (typeof item === 'string') {
|
|
17439
|
+
return {
|
|
17440
|
+
isActive: false,
|
|
17441
|
+
key: `ellipsis-${index}`,
|
|
17442
|
+
page: item,
|
|
17443
|
+
props: {
|
|
17444
|
+
ref,
|
|
17445
|
+
ellipsis: true,
|
|
17446
|
+
icon: true,
|
|
17447
|
+
disabled: true
|
|
17448
|
+
}
|
|
17449
|
+
};
|
|
17450
|
+
} else {
|
|
17451
|
+
const isActive = item === page.value;
|
|
17452
|
+
return {
|
|
17453
|
+
isActive,
|
|
17454
|
+
key: item,
|
|
17455
|
+
page: n(item),
|
|
17456
|
+
props: {
|
|
17457
|
+
ref,
|
|
17458
|
+
ellipsis: false,
|
|
17459
|
+
icon: true,
|
|
17460
|
+
disabled: !!props.disabled || +props.length < 2,
|
|
17461
|
+
color: isActive ? props.activeColor : props.color,
|
|
17462
|
+
ariaCurrent: isActive,
|
|
17463
|
+
ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
|
|
17464
|
+
onClick: e => setValue(e, item)
|
|
17465
|
+
}
|
|
17466
|
+
};
|
|
17467
|
+
}
|
|
17468
|
+
});
|
|
17469
|
+
});
|
|
17470
|
+
const controls = computed(() => {
|
|
17471
|
+
const prevDisabled = !!props.disabled || page.value <= start.value;
|
|
17472
|
+
const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
|
|
17473
|
+
return {
|
|
17474
|
+
first: props.showFirstLastPage ? {
|
|
17475
|
+
icon: isRtl.value ? props.lastIcon : props.firstIcon,
|
|
17476
|
+
onClick: e => setValue(e, start.value, 'first'),
|
|
17477
|
+
disabled: prevDisabled,
|
|
17478
|
+
ariaLabel: t(props.firstAriaLabel),
|
|
17479
|
+
ariaDisabled: prevDisabled
|
|
17480
|
+
} : undefined,
|
|
17481
|
+
prev: {
|
|
17482
|
+
icon: isRtl.value ? props.nextIcon : props.prevIcon,
|
|
17483
|
+
onClick: e => setValue(e, page.value - 1, 'prev'),
|
|
17484
|
+
disabled: prevDisabled,
|
|
17485
|
+
ariaLabel: t(props.previousAriaLabel),
|
|
17486
|
+
ariaDisabled: prevDisabled
|
|
17487
|
+
},
|
|
17488
|
+
next: {
|
|
17489
|
+
icon: isRtl.value ? props.prevIcon : props.nextIcon,
|
|
17490
|
+
onClick: e => setValue(e, page.value + 1, 'next'),
|
|
17491
|
+
disabled: nextDisabled,
|
|
17492
|
+
ariaLabel: t(props.nextAriaLabel),
|
|
17493
|
+
ariaDisabled: nextDisabled
|
|
17494
|
+
},
|
|
17495
|
+
last: props.showFirstLastPage ? {
|
|
17496
|
+
icon: isRtl.value ? props.firstIcon : props.lastIcon,
|
|
17497
|
+
onClick: e => setValue(e, start.value + length.value - 1, 'last'),
|
|
17498
|
+
disabled: nextDisabled,
|
|
17499
|
+
ariaLabel: t(props.lastAriaLabel),
|
|
17500
|
+
ariaDisabled: nextDisabled
|
|
17501
|
+
} : undefined
|
|
17502
|
+
};
|
|
17503
|
+
});
|
|
17504
|
+
function updateFocus() {
|
|
17505
|
+
const currentIndex = page.value - start.value;
|
|
17506
|
+
refs.value[currentIndex]?.$el.focus();
|
|
17507
|
+
}
|
|
17508
|
+
function onKeydown(e) {
|
|
17509
|
+
if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
|
|
17510
|
+
page.value = page.value - 1;
|
|
17511
|
+
nextTick(updateFocus);
|
|
17512
|
+
} else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
|
|
17513
|
+
page.value = page.value + 1;
|
|
17514
|
+
nextTick(updateFocus);
|
|
17515
|
+
}
|
|
17516
|
+
}
|
|
17517
|
+
useRender(() => createVNode(props.tag, {
|
|
17518
|
+
"ref": resizeRef,
|
|
17519
|
+
"class": ['v-pagination', themeClasses.value, props.class],
|
|
17520
|
+
"style": props.style,
|
|
17521
|
+
"role": "navigation",
|
|
17522
|
+
"aria-label": t(props.ariaLabel),
|
|
17523
|
+
"onKeydown": onKeydown,
|
|
17524
|
+
"data-test": "v-pagination-root"
|
|
17525
|
+
}, {
|
|
17526
|
+
default: () => [createVNode("ul", {
|
|
17527
|
+
"class": "v-pagination__list"
|
|
17528
|
+
}, [props.showFirstLastPage && createVNode("li", {
|
|
17529
|
+
"key": "first",
|
|
17530
|
+
"class": "v-pagination__first",
|
|
17531
|
+
"data-test": "v-pagination-first"
|
|
17532
|
+
}, [slots.first ? slots.first(controls.value.first) : createVNode(VBtn, mergeProps({
|
|
17533
|
+
"_as": "VPaginationBtn"
|
|
17534
|
+
}, controls.value.first), null)]), createVNode("li", {
|
|
17535
|
+
"key": "prev",
|
|
17536
|
+
"class": "v-pagination__prev",
|
|
17537
|
+
"data-test": "v-pagination-prev"
|
|
17538
|
+
}, [slots.prev ? slots.prev(controls.value.prev) : createVNode(VBtn, mergeProps({
|
|
17539
|
+
"_as": "VPaginationBtn"
|
|
17540
|
+
}, controls.value.prev), null)]), items.value.map((item, index) => createVNode("li", {
|
|
17541
|
+
"key": item.key,
|
|
17542
|
+
"class": ['v-pagination__item', {
|
|
17543
|
+
'v-pagination__item--is-active': item.isActive
|
|
17544
|
+
}],
|
|
17545
|
+
"data-test": "v-pagination-item"
|
|
17546
|
+
}, [slots.item ? slots.item(item) : createVNode(VBtn, mergeProps({
|
|
17547
|
+
"_as": "VPaginationBtn"
|
|
17548
|
+
}, item.props), {
|
|
17549
|
+
default: () => [item.page]
|
|
17550
|
+
})])), createVNode("li", {
|
|
17551
|
+
"key": "next",
|
|
17552
|
+
"class": "v-pagination__next",
|
|
17553
|
+
"data-test": "v-pagination-next"
|
|
17554
|
+
}, [slots.next ? slots.next(controls.value.next) : createVNode(VBtn, mergeProps({
|
|
17555
|
+
"_as": "VPaginationBtn"
|
|
17556
|
+
}, controls.value.next), null)]), props.showFirstLastPage && createVNode("li", {
|
|
17557
|
+
"key": "last",
|
|
17558
|
+
"class": "v-pagination__last",
|
|
17559
|
+
"data-test": "v-pagination-last"
|
|
17560
|
+
}, [slots.last ? slots.last(controls.value.last) : createVNode(VBtn, mergeProps({
|
|
17561
|
+
"_as": "VPaginationBtn"
|
|
17562
|
+
}, controls.value.last), null)])])]
|
|
17563
|
+
}));
|
|
17564
|
+
return {};
|
|
17565
|
+
}
|
|
17566
|
+
});
|
|
17567
|
+
|
|
17568
|
+
// Types
|
|
17569
|
+
|
|
17570
|
+
const makeVDataTableFooterProps = propsFactory({
|
|
17571
|
+
prevIcon: {
|
|
17572
|
+
type: String,
|
|
17573
|
+
default: '$prev'
|
|
17574
|
+
},
|
|
17575
|
+
nextIcon: {
|
|
17576
|
+
type: String,
|
|
17577
|
+
default: '$next'
|
|
17578
|
+
},
|
|
17579
|
+
firstIcon: {
|
|
17580
|
+
type: String,
|
|
17581
|
+
default: '$first'
|
|
17582
|
+
},
|
|
17583
|
+
lastIcon: {
|
|
17584
|
+
type: String,
|
|
17585
|
+
default: '$last'
|
|
17586
|
+
},
|
|
17587
|
+
itemsPerPageText: {
|
|
17588
|
+
type: String,
|
|
17589
|
+
default: '$vuetify.dataFooter.itemsPerPageText'
|
|
17590
|
+
},
|
|
17591
|
+
pageText: {
|
|
17592
|
+
type: String,
|
|
17593
|
+
default: '$vuetify.dataFooter.pageText'
|
|
17594
|
+
},
|
|
17595
|
+
firstPageLabel: {
|
|
17596
|
+
type: String,
|
|
17597
|
+
default: '$vuetify.dataFooter.firstPage'
|
|
17598
|
+
},
|
|
17599
|
+
prevPageLabel: {
|
|
17600
|
+
type: String,
|
|
17601
|
+
default: '$vuetify.dataFooter.prevPage'
|
|
17602
|
+
},
|
|
17603
|
+
nextPageLabel: {
|
|
17604
|
+
type: String,
|
|
17605
|
+
default: '$vuetify.dataFooter.nextPage'
|
|
17606
|
+
},
|
|
17607
|
+
lastPageLabel: {
|
|
17608
|
+
type: String,
|
|
17609
|
+
default: '$vuetify.dataFooter.lastPage'
|
|
17610
|
+
},
|
|
17611
|
+
itemsPerPageOptions: {
|
|
17612
|
+
type: Array,
|
|
17613
|
+
default: () => [{
|
|
17614
|
+
value: 10,
|
|
17615
|
+
title: '10'
|
|
17616
|
+
}, {
|
|
17617
|
+
value: 25,
|
|
17618
|
+
title: '25'
|
|
17619
|
+
}, {
|
|
17620
|
+
value: 50,
|
|
17621
|
+
title: '50'
|
|
17622
|
+
}, {
|
|
17623
|
+
value: 100,
|
|
17624
|
+
title: '100'
|
|
17625
|
+
}, {
|
|
17626
|
+
value: -1,
|
|
17627
|
+
title: '$vuetify.dataFooter.itemsPerPageAll'
|
|
17628
|
+
}]
|
|
17629
|
+
},
|
|
17630
|
+
showCurrentPage: Boolean
|
|
17631
|
+
}, 'VDataTableFooter');
|
|
17632
|
+
const VDataTableFooter = genericComponent()({
|
|
17633
|
+
name: 'VDataTableFooter',
|
|
17634
|
+
props: makeVDataTableFooterProps(),
|
|
17635
|
+
setup(props, _ref) {
|
|
17636
|
+
let {
|
|
17637
|
+
slots
|
|
17638
|
+
} = _ref;
|
|
17639
|
+
const {
|
|
17640
|
+
t
|
|
17641
|
+
} = useLocale();
|
|
17642
|
+
const {
|
|
17643
|
+
page,
|
|
17644
|
+
pageCount,
|
|
17645
|
+
startIndex,
|
|
17646
|
+
stopIndex,
|
|
17647
|
+
itemsLength,
|
|
17648
|
+
itemsPerPage,
|
|
17649
|
+
setItemsPerPage
|
|
17650
|
+
} = usePagination();
|
|
17651
|
+
const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => {
|
|
17652
|
+
if (typeof option === 'number') {
|
|
17653
|
+
return {
|
|
17654
|
+
value: option,
|
|
17655
|
+
title: option === -1 ? t('$vuetify.dataFooter.itemsPerPageAll') : String(option)
|
|
17656
|
+
};
|
|
17657
|
+
}
|
|
17658
|
+
return {
|
|
17659
|
+
...option,
|
|
17660
|
+
title: t(option.title)
|
|
17661
|
+
};
|
|
17662
|
+
}));
|
|
17663
|
+
useRender(() => createVNode("div", {
|
|
17664
|
+
"class": "v-data-table-footer"
|
|
17665
|
+
}, [slots.prepend?.(), createVNode("div", {
|
|
17666
|
+
"class": "v-data-table-footer__items-per-page"
|
|
17667
|
+
}, [createVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
|
|
17668
|
+
"items": itemsPerPageOptions.value,
|
|
17669
|
+
"modelValue": itemsPerPage.value,
|
|
17670
|
+
"onUpdate:modelValue": v => setItemsPerPage(Number(v)),
|
|
17671
|
+
"density": "compact",
|
|
17672
|
+
"variant": "outlined",
|
|
17673
|
+
"hide-details": true
|
|
17674
|
+
}, null)]), createVNode("div", {
|
|
17675
|
+
"class": "v-data-table-footer__info"
|
|
17676
|
+
}, [createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), createVNode("div", {
|
|
17677
|
+
"class": "v-data-table-footer__pagination"
|
|
17678
|
+
}, [createVNode(VPagination, {
|
|
17679
|
+
"modelValue": page.value,
|
|
17680
|
+
"onUpdate:modelValue": $event => page.value = $event,
|
|
17681
|
+
"density": "comfortable",
|
|
17682
|
+
"first-aria-label": props.firstPageLabel,
|
|
17683
|
+
"last-aria-label": props.lastPageLabel,
|
|
17684
|
+
"length": pageCount.value,
|
|
17685
|
+
"next-aria-label": props.nextPageLabel,
|
|
17686
|
+
"prev-aria-label": props.prevPageLabel,
|
|
17687
|
+
"rounded": true,
|
|
17688
|
+
"show-first-last-page": true,
|
|
17689
|
+
"total-visible": props.showCurrentPage ? 1 : 0,
|
|
17690
|
+
"variant": "plain"
|
|
17691
|
+
}, null)])]));
|
|
17692
|
+
return {};
|
|
17693
|
+
}
|
|
17694
|
+
});
|
|
17695
|
+
|
|
17696
|
+
// Types
|
|
17697
|
+
|
|
17698
|
+
const VDataTableColumn = defineFunctionalComponent({
|
|
17699
|
+
align: {
|
|
17700
|
+
type: String,
|
|
17359
17701
|
default: 'start'
|
|
17360
17702
|
},
|
|
17361
17703
|
fixed: Boolean,
|
|
@@ -17734,7 +18076,7 @@ const VDataTableHeaders = genericComponent()({
|
|
|
17734
18076
|
}, loaderClasses.value],
|
|
17735
18077
|
"style": {
|
|
17736
18078
|
width: convertToUnit(column.width),
|
|
17737
|
-
minWidth: convertToUnit(column.
|
|
18079
|
+
minWidth: convertToUnit(column.minWidth),
|
|
17738
18080
|
...getFixedStyles(column, y)
|
|
17739
18081
|
},
|
|
17740
18082
|
"colspan": column.colspan,
|
|
@@ -18369,7 +18711,7 @@ const VDataTable = genericComponent()({
|
|
|
18369
18711
|
default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), createVNode("thead", null, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), createVNode("tbody", null, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
|
|
18370
18712
|
"items": paginatedItems.value
|
|
18371
18713
|
}), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
|
|
18372
|
-
bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(Fragment, null, [createVNode(VDataTableFooter, dataTableFooterProps, {
|
|
18714
|
+
bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(Fragment, null, [createVNode(VDivider, null, null), createVNode(VDataTableFooter, dataTableFooterProps, {
|
|
18373
18715
|
prepend: slots['footer.prepend']
|
|
18374
18716
|
})])
|
|
18375
18717
|
});
|
|
@@ -19242,21 +19584,20 @@ const VDatePickerMonth = genericComponent()({
|
|
|
19242
19584
|
// model comes in always as array
|
|
19243
19585
|
// leaves as array if multiple
|
|
19244
19586
|
const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v));
|
|
19245
|
-
|
|
19246
|
-
|
|
19247
|
-
|
|
19248
|
-
|
|
19587
|
+
const displayValue = computed(() => {
|
|
19588
|
+
if (model.value.length > 0) return adapter.date(model.value[0]);
|
|
19589
|
+
if (props.min) return adapter.date(props.min);
|
|
19590
|
+
if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0]);
|
|
19591
|
+
return adapter.date();
|
|
19249
19592
|
});
|
|
19250
19593
|
const year = useProxiedModel(props, 'year', undefined, v => {
|
|
19251
|
-
|
|
19252
|
-
|
|
19253
|
-
return adapter.startOfYear(date);
|
|
19594
|
+
const value = v != null ? Number(v) : adapter.getYear(displayValue.value);
|
|
19595
|
+
return adapter.startOfYear(adapter.setYear(adapter.date(), value));
|
|
19254
19596
|
}, v => adapter.getYear(v));
|
|
19255
19597
|
const month = useProxiedModel(props, 'month', undefined, v => {
|
|
19256
|
-
|
|
19257
|
-
|
|
19258
|
-
|
|
19259
|
-
return date;
|
|
19598
|
+
const value = v != null ? Number(v) : adapter.getMonth(displayValue.value);
|
|
19599
|
+
const date = adapter.setYear(adapter.date(), adapter.getYear(year.value));
|
|
19600
|
+
return adapter.setMonth(date, value);
|
|
19260
19601
|
}, v => adapter.getMonth(v));
|
|
19261
19602
|
const weeksInMonth = computed(() => {
|
|
19262
19603
|
const weeks = adapter.getWeekArray(month.value);
|
|
@@ -19310,9 +19651,9 @@ const VDatePickerMonth = genericComponent()({
|
|
|
19310
19651
|
function isDisabled(value) {
|
|
19311
19652
|
if (props.disabled) return true;
|
|
19312
19653
|
const date = adapter.date(value);
|
|
19313
|
-
if (props.min && adapter.isAfter(props.min, date)) return true;
|
|
19314
|
-
if (props.max && adapter.isAfter(date, props.max)) return true;
|
|
19315
|
-
if (Array.isArray(props.allowedDates)) {
|
|
19654
|
+
if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true;
|
|
19655
|
+
if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true;
|
|
19656
|
+
if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
|
|
19316
19657
|
return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
|
|
19317
19658
|
}
|
|
19318
19659
|
if (typeof props.allowedDates === 'function') {
|
|
@@ -19334,6 +19675,10 @@ const VDatePickerMonth = genericComponent()({
|
|
|
19334
19675
|
model.value = [value];
|
|
19335
19676
|
}
|
|
19336
19677
|
}
|
|
19678
|
+
watch(displayValue, val => {
|
|
19679
|
+
month.value = val;
|
|
19680
|
+
year.value = val;
|
|
19681
|
+
});
|
|
19337
19682
|
return () => createVNode("div", {
|
|
19338
19683
|
"class": "v-date-picker-month"
|
|
19339
19684
|
}, [props.showWeek && createVNode("div", {
|
|
@@ -19705,22 +20050,22 @@ const VDatePicker = genericComponent()({
|
|
|
19705
20050
|
function onClickNext() {
|
|
19706
20051
|
if (month.value < 11) {
|
|
19707
20052
|
month.value++;
|
|
19708
|
-
emit('update:month', month.value);
|
|
19709
20053
|
} else {
|
|
19710
20054
|
year.value++;
|
|
19711
20055
|
month.value = 0;
|
|
19712
20056
|
emit('update:year', year.value);
|
|
19713
20057
|
}
|
|
20058
|
+
emit('update:month', month.value);
|
|
19714
20059
|
}
|
|
19715
20060
|
function onClickPrev() {
|
|
19716
20061
|
if (month.value > 0) {
|
|
19717
20062
|
month.value--;
|
|
19718
|
-
emit('update:month', month.value);
|
|
19719
20063
|
} else {
|
|
19720
20064
|
year.value--;
|
|
19721
20065
|
month.value = 11;
|
|
19722
|
-
emit('update:year',
|
|
20066
|
+
emit('update:year', year.value);
|
|
19723
20067
|
}
|
|
20068
|
+
emit('update:month', month.value);
|
|
19724
20069
|
}
|
|
19725
20070
|
function onClickMonth() {
|
|
19726
20071
|
viewMode.value = viewMode.value === 'months' ? 'month' : 'months';
|
|
@@ -21448,577 +21793,244 @@ const VNavigationDrawer = genericComponent()({
|
|
|
21448
21793
|
}, {
|
|
21449
21794
|
default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && createVNode("div", mergeProps({
|
|
21450
21795
|
"class": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],
|
|
21451
|
-
"style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
|
|
21452
|
-
"onClick": () => isActive.value = false
|
|
21453
|
-
}, scopeId), null)]
|
|
21454
|
-
})]);
|
|
21455
|
-
});
|
|
21456
|
-
return {
|
|
21457
|
-
isStuck
|
|
21458
|
-
};
|
|
21459
|
-
}
|
|
21460
|
-
});
|
|
21461
|
-
|
|
21462
|
-
// Composables
|
|
21463
|
-
const VNoSsr = defineComponent({
|
|
21464
|
-
name: 'VNoSsr',
|
|
21465
|
-
setup(_, _ref) {
|
|
21466
|
-
let {
|
|
21467
|
-
slots
|
|
21468
|
-
} = _ref;
|
|
21469
|
-
const show = useHydration();
|
|
21470
|
-
return () => show.value && slots.default?.();
|
|
21471
|
-
}
|
|
21472
|
-
});
|
|
21473
|
-
|
|
21474
|
-
// Types
|
|
21475
|
-
|
|
21476
|
-
const makeVOtpInputProps = propsFactory({
|
|
21477
|
-
autofocus: Boolean,
|
|
21478
|
-
divider: String,
|
|
21479
|
-
focusAll: Boolean,
|
|
21480
|
-
label: {
|
|
21481
|
-
type: String,
|
|
21482
|
-
default: '$vuetify.input.otp'
|
|
21483
|
-
},
|
|
21484
|
-
length: {
|
|
21485
|
-
type: [Number, String],
|
|
21486
|
-
default: 6
|
|
21487
|
-
},
|
|
21488
|
-
modelValue: {
|
|
21489
|
-
type: [Number, String],
|
|
21490
|
-
default: undefined
|
|
21491
|
-
},
|
|
21492
|
-
placeholder: String,
|
|
21493
|
-
type: {
|
|
21494
|
-
type: String,
|
|
21495
|
-
default: 'number'
|
|
21496
|
-
},
|
|
21497
|
-
...makeDimensionProps(),
|
|
21498
|
-
...makeFocusProps(),
|
|
21499
|
-
...only(makeVFieldProps({
|
|
21500
|
-
variant: 'outlined'
|
|
21501
|
-
}), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
|
|
21502
|
-
}, 'VOtpInput');
|
|
21503
|
-
const VOtpInput = genericComponent()({
|
|
21504
|
-
name: 'VOtpInput',
|
|
21505
|
-
props: makeVOtpInputProps(),
|
|
21506
|
-
emits: {
|
|
21507
|
-
finish: val => true,
|
|
21508
|
-
'update:focused': val => true,
|
|
21509
|
-
'update:modelValue': val => true
|
|
21510
|
-
},
|
|
21511
|
-
setup(props, _ref) {
|
|
21512
|
-
let {
|
|
21513
|
-
attrs,
|
|
21514
|
-
emit,
|
|
21515
|
-
slots
|
|
21516
|
-
} = _ref;
|
|
21517
|
-
const {
|
|
21518
|
-
dimensionStyles
|
|
21519
|
-
} = useDimension(props);
|
|
21520
|
-
const {
|
|
21521
|
-
isFocused,
|
|
21522
|
-
focus,
|
|
21523
|
-
blur
|
|
21524
|
-
} = useFocus(props);
|
|
21525
|
-
const model = useProxiedModel(props, 'modelValue', '', val => String(val).split(''), val => val.join(''));
|
|
21526
|
-
const {
|
|
21527
|
-
t
|
|
21528
|
-
} = useLocale();
|
|
21529
|
-
const length = computed(() => Number(props.length));
|
|
21530
|
-
const fields = computed(() => Array(length.value).fill(0));
|
|
21531
|
-
const focusIndex = ref(-1);
|
|
21532
|
-
const contentRef = ref();
|
|
21533
|
-
const inputRef = ref([]);
|
|
21534
|
-
const current = computed(() => inputRef.value[focusIndex.value]);
|
|
21535
|
-
function onInput() {
|
|
21536
|
-
// The maxlength attribute doesn't work for the number type input, so the text type is used.
|
|
21537
|
-
// The following logic simulates the behavior of a number input.
|
|
21538
|
-
if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
|
|
21539
|
-
current.value.value = '';
|
|
21540
|
-
return;
|
|
21541
|
-
}
|
|
21542
|
-
const array = model.value.slice();
|
|
21543
|
-
const value = current.value.value;
|
|
21544
|
-
array[focusIndex.value] = value;
|
|
21545
|
-
let target = null;
|
|
21546
|
-
if (focusIndex.value > model.value.length) {
|
|
21547
|
-
target = model.value.length + 1;
|
|
21548
|
-
} else if (focusIndex.value + 1 !== length.value) {
|
|
21549
|
-
target = 'next';
|
|
21550
|
-
}
|
|
21551
|
-
model.value = array;
|
|
21552
|
-
if (target) focusChild(contentRef.value, target);
|
|
21553
|
-
}
|
|
21554
|
-
function onKeydown(e) {
|
|
21555
|
-
const array = model.value.slice();
|
|
21556
|
-
const index = focusIndex.value;
|
|
21557
|
-
let target = null;
|
|
21558
|
-
if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
|
|
21559
|
-
e.preventDefault();
|
|
21560
|
-
if (e.key === 'ArrowLeft') {
|
|
21561
|
-
target = 'prev';
|
|
21562
|
-
} else if (e.key === 'ArrowRight') {
|
|
21563
|
-
target = 'next';
|
|
21564
|
-
} else if (['Backspace', 'Delete'].includes(e.key)) {
|
|
21565
|
-
array[focusIndex.value] = '';
|
|
21566
|
-
model.value = array;
|
|
21567
|
-
if (focusIndex.value > 0 && e.key === 'Backspace') {
|
|
21568
|
-
target = 'prev';
|
|
21569
|
-
} else {
|
|
21570
|
-
requestAnimationFrame(() => {
|
|
21571
|
-
inputRef.value[index]?.select();
|
|
21572
|
-
});
|
|
21573
|
-
}
|
|
21574
|
-
}
|
|
21575
|
-
requestAnimationFrame(() => {
|
|
21576
|
-
if (target != null) {
|
|
21577
|
-
focusChild(contentRef.value, target);
|
|
21578
|
-
}
|
|
21579
|
-
});
|
|
21580
|
-
}
|
|
21581
|
-
function onPaste(index, e) {
|
|
21582
|
-
e.preventDefault();
|
|
21583
|
-
e.stopPropagation();
|
|
21584
|
-
model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
|
|
21585
|
-
inputRef.value?.[index].blur();
|
|
21586
|
-
}
|
|
21587
|
-
function reset() {
|
|
21588
|
-
model.value = [];
|
|
21589
|
-
}
|
|
21590
|
-
function onFocus(e, index) {
|
|
21591
|
-
focus();
|
|
21592
|
-
focusIndex.value = index;
|
|
21593
|
-
}
|
|
21594
|
-
function onBlur() {
|
|
21595
|
-
blur();
|
|
21596
|
-
focusIndex.value = -1;
|
|
21597
|
-
}
|
|
21598
|
-
provideDefaults({
|
|
21599
|
-
VField: {
|
|
21600
|
-
color: computed(() => props.color),
|
|
21601
|
-
bgColor: computed(() => props.color),
|
|
21602
|
-
baseColor: computed(() => props.baseColor),
|
|
21603
|
-
disabled: computed(() => props.disabled),
|
|
21604
|
-
error: computed(() => props.error),
|
|
21605
|
-
variant: computed(() => props.variant)
|
|
21606
|
-
}
|
|
21607
|
-
}, {
|
|
21608
|
-
scoped: true
|
|
21609
|
-
});
|
|
21610
|
-
watch(model, val => {
|
|
21611
|
-
if (val.length === length.value) emit('finish', val.join(''));
|
|
21612
|
-
}, {
|
|
21613
|
-
deep: true
|
|
21614
|
-
});
|
|
21615
|
-
watch(focusIndex, val => {
|
|
21616
|
-
if (val < 0) return;
|
|
21617
|
-
nextTick(() => {
|
|
21618
|
-
inputRef.value[val]?.select();
|
|
21619
|
-
});
|
|
21620
|
-
});
|
|
21621
|
-
useRender(() => {
|
|
21622
|
-
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
|
21623
|
-
return createVNode("div", mergeProps({
|
|
21624
|
-
"class": ['v-otp-input', {
|
|
21625
|
-
'v-otp-input--divided': !!props.divider
|
|
21626
|
-
}, props.class],
|
|
21627
|
-
"style": [props.style]
|
|
21628
|
-
}, rootAttrs), [createVNode("div", {
|
|
21629
|
-
"ref": contentRef,
|
|
21630
|
-
"class": "v-otp-input__content",
|
|
21631
|
-
"style": [dimensionStyles.value]
|
|
21632
|
-
}, [fields.value.map((_, i) => createVNode(Fragment, null, [props.divider && i !== 0 && createVNode("span", {
|
|
21633
|
-
"class": "v-otp-input__divider"
|
|
21634
|
-
}, [props.divider]), createVNode(VField, {
|
|
21635
|
-
"focused": isFocused.value && props.focusAll || focusIndex.value === i,
|
|
21636
|
-
"key": i
|
|
21637
|
-
}, {
|
|
21638
|
-
...slots,
|
|
21639
|
-
default: () => {
|
|
21640
|
-
return createVNode("input", {
|
|
21641
|
-
"ref": val => inputRef.value[i] = val,
|
|
21642
|
-
"aria-label": t(props.label, i + 1),
|
|
21643
|
-
"autofocus": i === 0 && props.autofocus,
|
|
21644
|
-
"autocomplete": "one-time-code",
|
|
21645
|
-
"class": ['v-otp-input__field'],
|
|
21646
|
-
"inputmode": props.type === 'number' ? 'numeric' : 'text',
|
|
21647
|
-
"min": props.type === 'number' ? 0 : undefined,
|
|
21648
|
-
"maxlength": "1",
|
|
21649
|
-
"placeholder": props.placeholder,
|
|
21650
|
-
"type": props.type === 'number' ? 'text' : props.type,
|
|
21651
|
-
"value": model.value[i],
|
|
21652
|
-
"onInput": onInput,
|
|
21653
|
-
"onFocus": e => onFocus(e, i),
|
|
21654
|
-
"onBlur": onBlur,
|
|
21655
|
-
"onKeydown": onKeydown,
|
|
21656
|
-
"onPaste": event => onPaste(i, event)
|
|
21657
|
-
}, null);
|
|
21658
|
-
}
|
|
21659
|
-
})])), createVNode("input", mergeProps({
|
|
21660
|
-
"class": "v-otp-input-input",
|
|
21661
|
-
"type": "hidden"
|
|
21662
|
-
}, inputAttrs, {
|
|
21663
|
-
"value": model.value.join('')
|
|
21664
|
-
}), null), createVNode(VOverlay, {
|
|
21665
|
-
"contained": true,
|
|
21666
|
-
"content-class": "v-otp-input__loader",
|
|
21667
|
-
"model-value": !!props.loading,
|
|
21668
|
-
"persistent": true
|
|
21669
|
-
}, {
|
|
21670
|
-
default: () => [slots.loader?.() ?? createVNode(VProgressCircular, {
|
|
21671
|
-
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
|
21672
|
-
"indeterminate": true,
|
|
21673
|
-
"size": "24",
|
|
21674
|
-
"width": "2"
|
|
21675
|
-
}, null)]
|
|
21676
|
-
}), slots.default?.()])]);
|
|
21796
|
+
"style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
|
|
21797
|
+
"onClick": () => isActive.value = false
|
|
21798
|
+
}, scopeId), null)]
|
|
21799
|
+
})]);
|
|
21677
21800
|
});
|
|
21678
21801
|
return {
|
|
21679
|
-
|
|
21680
|
-
inputRef.value?.some(input => input.blur());
|
|
21681
|
-
},
|
|
21682
|
-
focus: () => {
|
|
21683
|
-
inputRef.value?.[0].focus();
|
|
21684
|
-
},
|
|
21685
|
-
reset,
|
|
21686
|
-
isFocused
|
|
21802
|
+
isStuck
|
|
21687
21803
|
};
|
|
21688
21804
|
}
|
|
21689
21805
|
});
|
|
21690
21806
|
|
|
21691
|
-
//
|
|
21692
|
-
|
|
21693
|
-
|
|
21694
|
-
|
|
21695
|
-
|
|
21696
|
-
|
|
21697
|
-
|
|
21698
|
-
|
|
21699
|
-
|
|
21807
|
+
// Composables
|
|
21808
|
+
const VNoSsr = defineComponent({
|
|
21809
|
+
name: 'VNoSsr',
|
|
21810
|
+
setup(_, _ref) {
|
|
21811
|
+
let {
|
|
21812
|
+
slots
|
|
21813
|
+
} = _ref;
|
|
21814
|
+
const show = useHydration();
|
|
21815
|
+
return () => show.value && slots.default?.();
|
|
21700
21816
|
}
|
|
21701
|
-
|
|
21702
|
-
refs,
|
|
21703
|
-
updateRef
|
|
21704
|
-
};
|
|
21705
|
-
}
|
|
21817
|
+
});
|
|
21706
21818
|
|
|
21707
21819
|
// Types
|
|
21708
21820
|
|
|
21709
|
-
const
|
|
21710
|
-
|
|
21711
|
-
|
|
21712
|
-
|
|
21713
|
-
|
|
21714
|
-
|
|
21715
|
-
|
|
21716
|
-
type: Number,
|
|
21717
|
-
default: props => props.start
|
|
21821
|
+
const makeVOtpInputProps = propsFactory({
|
|
21822
|
+
autofocus: Boolean,
|
|
21823
|
+
divider: String,
|
|
21824
|
+
focusAll: Boolean,
|
|
21825
|
+
label: {
|
|
21826
|
+
type: String,
|
|
21827
|
+
default: '$vuetify.input.otp'
|
|
21718
21828
|
},
|
|
21719
|
-
disabled: Boolean,
|
|
21720
21829
|
length: {
|
|
21721
21830
|
type: [Number, String],
|
|
21722
|
-
default:
|
|
21723
|
-
validator: val => val % 1 === 0
|
|
21724
|
-
},
|
|
21725
|
-
totalVisible: [Number, String],
|
|
21726
|
-
firstIcon: {
|
|
21727
|
-
type: IconValue,
|
|
21728
|
-
default: '$first'
|
|
21729
|
-
},
|
|
21730
|
-
prevIcon: {
|
|
21731
|
-
type: IconValue,
|
|
21732
|
-
default: '$prev'
|
|
21733
|
-
},
|
|
21734
|
-
nextIcon: {
|
|
21735
|
-
type: IconValue,
|
|
21736
|
-
default: '$next'
|
|
21737
|
-
},
|
|
21738
|
-
lastIcon: {
|
|
21739
|
-
type: IconValue,
|
|
21740
|
-
default: '$last'
|
|
21741
|
-
},
|
|
21742
|
-
ariaLabel: {
|
|
21743
|
-
type: String,
|
|
21744
|
-
default: '$vuetify.pagination.ariaLabel.root'
|
|
21745
|
-
},
|
|
21746
|
-
pageAriaLabel: {
|
|
21747
|
-
type: String,
|
|
21748
|
-
default: '$vuetify.pagination.ariaLabel.page'
|
|
21749
|
-
},
|
|
21750
|
-
currentPageAriaLabel: {
|
|
21751
|
-
type: String,
|
|
21752
|
-
default: '$vuetify.pagination.ariaLabel.currentPage'
|
|
21753
|
-
},
|
|
21754
|
-
firstAriaLabel: {
|
|
21755
|
-
type: String,
|
|
21756
|
-
default: '$vuetify.pagination.ariaLabel.first'
|
|
21757
|
-
},
|
|
21758
|
-
previousAriaLabel: {
|
|
21759
|
-
type: String,
|
|
21760
|
-
default: '$vuetify.pagination.ariaLabel.previous'
|
|
21761
|
-
},
|
|
21762
|
-
nextAriaLabel: {
|
|
21763
|
-
type: String,
|
|
21764
|
-
default: '$vuetify.pagination.ariaLabel.next'
|
|
21831
|
+
default: 6
|
|
21765
21832
|
},
|
|
21766
|
-
|
|
21767
|
-
type: String,
|
|
21768
|
-
default:
|
|
21833
|
+
modelValue: {
|
|
21834
|
+
type: [Number, String],
|
|
21835
|
+
default: undefined
|
|
21769
21836
|
},
|
|
21770
|
-
|
|
21837
|
+
placeholder: String,
|
|
21838
|
+
type: {
|
|
21771
21839
|
type: String,
|
|
21772
|
-
default: '
|
|
21840
|
+
default: 'number'
|
|
21773
21841
|
},
|
|
21774
|
-
|
|
21775
|
-
...
|
|
21776
|
-
...
|
|
21777
|
-
|
|
21778
|
-
|
|
21779
|
-
|
|
21780
|
-
|
|
21781
|
-
|
|
21782
|
-
|
|
21783
|
-
}),
|
|
21784
|
-
...makeThemeProps(),
|
|
21785
|
-
...makeVariantProps({
|
|
21786
|
-
variant: 'text'
|
|
21787
|
-
})
|
|
21788
|
-
}, 'VPagination');
|
|
21789
|
-
const VPagination = genericComponent()({
|
|
21790
|
-
name: 'VPagination',
|
|
21791
|
-
props: makeVPaginationProps(),
|
|
21842
|
+
...makeDimensionProps(),
|
|
21843
|
+
...makeFocusProps(),
|
|
21844
|
+
...only(makeVFieldProps({
|
|
21845
|
+
variant: 'outlined'
|
|
21846
|
+
}), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
|
|
21847
|
+
}, 'VOtpInput');
|
|
21848
|
+
const VOtpInput = genericComponent()({
|
|
21849
|
+
name: 'VOtpInput',
|
|
21850
|
+
props: makeVOtpInputProps(),
|
|
21792
21851
|
emits: {
|
|
21793
|
-
|
|
21794
|
-
|
|
21795
|
-
|
|
21796
|
-
next: value => true,
|
|
21797
|
-
last: value => true
|
|
21852
|
+
finish: val => true,
|
|
21853
|
+
'update:focused': val => true,
|
|
21854
|
+
'update:modelValue': val => true
|
|
21798
21855
|
},
|
|
21799
21856
|
setup(props, _ref) {
|
|
21800
21857
|
let {
|
|
21801
|
-
|
|
21802
|
-
emit
|
|
21858
|
+
attrs,
|
|
21859
|
+
emit,
|
|
21860
|
+
slots
|
|
21803
21861
|
} = _ref;
|
|
21804
|
-
const page = useProxiedModel(props, 'modelValue');
|
|
21805
|
-
const {
|
|
21806
|
-
t,
|
|
21807
|
-
n
|
|
21808
|
-
} = useLocale();
|
|
21809
|
-
const {
|
|
21810
|
-
isRtl
|
|
21811
|
-
} = useRtl();
|
|
21812
21862
|
const {
|
|
21813
|
-
|
|
21814
|
-
} =
|
|
21863
|
+
dimensionStyles
|
|
21864
|
+
} = useDimension(props);
|
|
21815
21865
|
const {
|
|
21816
|
-
|
|
21817
|
-
|
|
21818
|
-
|
|
21819
|
-
|
|
21820
|
-
|
|
21821
|
-
});
|
|
21866
|
+
isFocused,
|
|
21867
|
+
focus,
|
|
21868
|
+
blur
|
|
21869
|
+
} = useFocus(props);
|
|
21870
|
+
const model = useProxiedModel(props, 'modelValue', '', val => String(val).split(''), val => val.join(''));
|
|
21822
21871
|
const {
|
|
21823
|
-
|
|
21824
|
-
} =
|
|
21825
|
-
|
|
21826
|
-
|
|
21827
|
-
|
|
21828
|
-
|
|
21829
|
-
|
|
21830
|
-
|
|
21831
|
-
|
|
21832
|
-
|
|
21833
|
-
|
|
21834
|
-
|
|
21835
|
-
|
|
21836
|
-
|
|
21837
|
-
const start = computed(() => parseInt(props.start, 10));
|
|
21838
|
-
const totalVisible = computed(() => {
|
|
21839
|
-
if (props.totalVisible) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;
|
|
21840
|
-
return getMax(width.value, 58);
|
|
21841
|
-
});
|
|
21842
|
-
function getMax(totalWidth, itemWidth) {
|
|
21843
|
-
const minButtons = props.showFirstLastPage ? 5 : 3;
|
|
21844
|
-
return Math.max(0, Math.floor(
|
|
21845
|
-
// Round to two decimal places to avoid floating point errors
|
|
21846
|
-
+((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
|
|
21847
|
-
}
|
|
21848
|
-
const range = computed(() => {
|
|
21849
|
-
if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
|
|
21850
|
-
if (totalVisible.value <= 1) return [page.value];
|
|
21851
|
-
if (length.value <= totalVisible.value) {
|
|
21852
|
-
return createRange(length.value, start.value);
|
|
21872
|
+
t
|
|
21873
|
+
} = useLocale();
|
|
21874
|
+
const length = computed(() => Number(props.length));
|
|
21875
|
+
const fields = computed(() => Array(length.value).fill(0));
|
|
21876
|
+
const focusIndex = ref(-1);
|
|
21877
|
+
const contentRef = ref();
|
|
21878
|
+
const inputRef = ref([]);
|
|
21879
|
+
const current = computed(() => inputRef.value[focusIndex.value]);
|
|
21880
|
+
function onInput() {
|
|
21881
|
+
// The maxlength attribute doesn't work for the number type input, so the text type is used.
|
|
21882
|
+
// The following logic simulates the behavior of a number input.
|
|
21883
|
+
if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
|
|
21884
|
+
current.value.value = '';
|
|
21885
|
+
return;
|
|
21853
21886
|
}
|
|
21854
|
-
const
|
|
21855
|
-
const
|
|
21856
|
-
|
|
21857
|
-
|
|
21858
|
-
if (
|
|
21859
|
-
|
|
21860
|
-
} else if (
|
|
21861
|
-
|
|
21862
|
-
|
|
21863
|
-
|
|
21864
|
-
|
|
21865
|
-
|
|
21866
|
-
|
|
21867
|
-
|
|
21887
|
+
const array = model.value.slice();
|
|
21888
|
+
const value = current.value.value;
|
|
21889
|
+
array[focusIndex.value] = value;
|
|
21890
|
+
let target = null;
|
|
21891
|
+
if (focusIndex.value > model.value.length) {
|
|
21892
|
+
target = model.value.length + 1;
|
|
21893
|
+
} else if (focusIndex.value + 1 !== length.value) {
|
|
21894
|
+
target = 'next';
|
|
21895
|
+
}
|
|
21896
|
+
model.value = array;
|
|
21897
|
+
if (target) focusChild(contentRef.value, target);
|
|
21898
|
+
}
|
|
21899
|
+
function onKeydown(e) {
|
|
21900
|
+
const array = model.value.slice();
|
|
21901
|
+
const index = focusIndex.value;
|
|
21902
|
+
let target = null;
|
|
21903
|
+
if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
|
|
21904
|
+
e.preventDefault();
|
|
21905
|
+
if (e.key === 'ArrowLeft') {
|
|
21906
|
+
target = 'prev';
|
|
21907
|
+
} else if (e.key === 'ArrowRight') {
|
|
21908
|
+
target = 'next';
|
|
21909
|
+
} else if (['Backspace', 'Delete'].includes(e.key)) {
|
|
21910
|
+
array[focusIndex.value] = '';
|
|
21911
|
+
model.value = array;
|
|
21912
|
+
if (focusIndex.value > 0 && e.key === 'Backspace') {
|
|
21913
|
+
target = 'prev';
|
|
21914
|
+
} else {
|
|
21915
|
+
requestAnimationFrame(() => {
|
|
21916
|
+
inputRef.value[index]?.select();
|
|
21917
|
+
});
|
|
21918
|
+
}
|
|
21868
21919
|
}
|
|
21869
|
-
|
|
21870
|
-
|
|
21871
|
-
|
|
21872
|
-
|
|
21920
|
+
requestAnimationFrame(() => {
|
|
21921
|
+
if (target != null) {
|
|
21922
|
+
focusChild(contentRef.value, target);
|
|
21923
|
+
}
|
|
21924
|
+
});
|
|
21925
|
+
}
|
|
21926
|
+
function onPaste(index, e) {
|
|
21873
21927
|
e.preventDefault();
|
|
21874
|
-
|
|
21875
|
-
|
|
21928
|
+
e.stopPropagation();
|
|
21929
|
+
model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
|
|
21930
|
+
inputRef.value?.[index].blur();
|
|
21931
|
+
}
|
|
21932
|
+
function reset() {
|
|
21933
|
+
model.value = [];
|
|
21934
|
+
}
|
|
21935
|
+
function onFocus(e, index) {
|
|
21936
|
+
focus();
|
|
21937
|
+
focusIndex.value = index;
|
|
21938
|
+
}
|
|
21939
|
+
function onBlur() {
|
|
21940
|
+
blur();
|
|
21941
|
+
focusIndex.value = -1;
|
|
21876
21942
|
}
|
|
21877
|
-
const {
|
|
21878
|
-
refs,
|
|
21879
|
-
updateRef
|
|
21880
|
-
} = useRefs();
|
|
21881
21943
|
provideDefaults({
|
|
21882
|
-
|
|
21883
|
-
color:
|
|
21884
|
-
|
|
21885
|
-
|
|
21886
|
-
|
|
21887
|
-
|
|
21888
|
-
|
|
21889
|
-
elevation: toRef(props, 'elevation')
|
|
21944
|
+
VField: {
|
|
21945
|
+
color: computed(() => props.color),
|
|
21946
|
+
bgColor: computed(() => props.color),
|
|
21947
|
+
baseColor: computed(() => props.baseColor),
|
|
21948
|
+
disabled: computed(() => props.disabled),
|
|
21949
|
+
error: computed(() => props.error),
|
|
21950
|
+
variant: computed(() => props.variant)
|
|
21890
21951
|
}
|
|
21952
|
+
}, {
|
|
21953
|
+
scoped: true
|
|
21891
21954
|
});
|
|
21892
|
-
|
|
21893
|
-
|
|
21894
|
-
|
|
21895
|
-
|
|
21896
|
-
|
|
21897
|
-
|
|
21898
|
-
|
|
21899
|
-
|
|
21900
|
-
|
|
21901
|
-
ref,
|
|
21902
|
-
ellipsis: true,
|
|
21903
|
-
icon: true,
|
|
21904
|
-
disabled: true
|
|
21905
|
-
}
|
|
21906
|
-
};
|
|
21907
|
-
} else {
|
|
21908
|
-
const isActive = item === page.value;
|
|
21909
|
-
return {
|
|
21910
|
-
isActive,
|
|
21911
|
-
key: item,
|
|
21912
|
-
page: n(item),
|
|
21913
|
-
props: {
|
|
21914
|
-
ref,
|
|
21915
|
-
ellipsis: false,
|
|
21916
|
-
icon: true,
|
|
21917
|
-
disabled: !!props.disabled || +props.length < 2,
|
|
21918
|
-
color: isActive ? props.activeColor : props.color,
|
|
21919
|
-
ariaCurrent: isActive,
|
|
21920
|
-
ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
|
|
21921
|
-
onClick: e => setValue(e, item)
|
|
21922
|
-
}
|
|
21923
|
-
};
|
|
21924
|
-
}
|
|
21955
|
+
watch(model, val => {
|
|
21956
|
+
if (val.length === length.value) emit('finish', val.join(''));
|
|
21957
|
+
}, {
|
|
21958
|
+
deep: true
|
|
21959
|
+
});
|
|
21960
|
+
watch(focusIndex, val => {
|
|
21961
|
+
if (val < 0) return;
|
|
21962
|
+
nextTick(() => {
|
|
21963
|
+
inputRef.value[val]?.select();
|
|
21925
21964
|
});
|
|
21926
21965
|
});
|
|
21927
|
-
|
|
21928
|
-
const
|
|
21929
|
-
|
|
21930
|
-
|
|
21931
|
-
|
|
21932
|
-
|
|
21933
|
-
|
|
21934
|
-
|
|
21935
|
-
|
|
21936
|
-
|
|
21937
|
-
|
|
21938
|
-
|
|
21939
|
-
|
|
21940
|
-
|
|
21941
|
-
|
|
21942
|
-
|
|
21943
|
-
|
|
21944
|
-
|
|
21945
|
-
|
|
21946
|
-
|
|
21947
|
-
|
|
21948
|
-
|
|
21949
|
-
|
|
21950
|
-
|
|
21951
|
-
|
|
21952
|
-
|
|
21953
|
-
|
|
21954
|
-
|
|
21955
|
-
|
|
21956
|
-
|
|
21957
|
-
|
|
21958
|
-
|
|
21959
|
-
|
|
21966
|
+
useRender(() => {
|
|
21967
|
+
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
|
21968
|
+
return createVNode("div", mergeProps({
|
|
21969
|
+
"class": ['v-otp-input', {
|
|
21970
|
+
'v-otp-input--divided': !!props.divider
|
|
21971
|
+
}, props.class],
|
|
21972
|
+
"style": [props.style]
|
|
21973
|
+
}, rootAttrs), [createVNode("div", {
|
|
21974
|
+
"ref": contentRef,
|
|
21975
|
+
"class": "v-otp-input__content",
|
|
21976
|
+
"style": [dimensionStyles.value]
|
|
21977
|
+
}, [fields.value.map((_, i) => createVNode(Fragment, null, [props.divider && i !== 0 && createVNode("span", {
|
|
21978
|
+
"class": "v-otp-input__divider"
|
|
21979
|
+
}, [props.divider]), createVNode(VField, {
|
|
21980
|
+
"focused": isFocused.value && props.focusAll || focusIndex.value === i,
|
|
21981
|
+
"key": i
|
|
21982
|
+
}, {
|
|
21983
|
+
...slots,
|
|
21984
|
+
default: () => {
|
|
21985
|
+
return createVNode("input", {
|
|
21986
|
+
"ref": val => inputRef.value[i] = val,
|
|
21987
|
+
"aria-label": t(props.label, i + 1),
|
|
21988
|
+
"autofocus": i === 0 && props.autofocus,
|
|
21989
|
+
"autocomplete": "one-time-code",
|
|
21990
|
+
"class": ['v-otp-input__field'],
|
|
21991
|
+
"disabled": props.disabled,
|
|
21992
|
+
"inputmode": props.type === 'number' ? 'numeric' : 'text',
|
|
21993
|
+
"min": props.type === 'number' ? 0 : undefined,
|
|
21994
|
+
"maxlength": "1",
|
|
21995
|
+
"placeholder": props.placeholder,
|
|
21996
|
+
"type": props.type === 'number' ? 'text' : props.type,
|
|
21997
|
+
"value": model.value[i],
|
|
21998
|
+
"onInput": onInput,
|
|
21999
|
+
"onFocus": e => onFocus(e, i),
|
|
22000
|
+
"onBlur": onBlur,
|
|
22001
|
+
"onKeydown": onKeydown,
|
|
22002
|
+
"onPaste": event => onPaste(i, event)
|
|
22003
|
+
}, null);
|
|
22004
|
+
}
|
|
22005
|
+
})])), createVNode("input", mergeProps({
|
|
22006
|
+
"class": "v-otp-input-input",
|
|
22007
|
+
"type": "hidden"
|
|
22008
|
+
}, inputAttrs, {
|
|
22009
|
+
"value": model.value.join('')
|
|
22010
|
+
}), null), createVNode(VOverlay, {
|
|
22011
|
+
"contained": true,
|
|
22012
|
+
"content-class": "v-otp-input__loader",
|
|
22013
|
+
"model-value": !!props.loading,
|
|
22014
|
+
"persistent": true
|
|
22015
|
+
}, {
|
|
22016
|
+
default: () => [slots.loader?.() ?? createVNode(VProgressCircular, {
|
|
22017
|
+
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
|
22018
|
+
"indeterminate": true,
|
|
22019
|
+
"size": "24",
|
|
22020
|
+
"width": "2"
|
|
22021
|
+
}, null)]
|
|
22022
|
+
}), slots.default?.()])]);
|
|
21960
22023
|
});
|
|
21961
|
-
|
|
21962
|
-
|
|
21963
|
-
|
|
21964
|
-
|
|
21965
|
-
|
|
21966
|
-
|
|
21967
|
-
|
|
21968
|
-
|
|
21969
|
-
|
|
21970
|
-
|
|
21971
|
-
nextTick(updateFocus);
|
|
21972
|
-
}
|
|
21973
|
-
}
|
|
21974
|
-
useRender(() => createVNode(props.tag, {
|
|
21975
|
-
"ref": resizeRef,
|
|
21976
|
-
"class": ['v-pagination', themeClasses.value, props.class],
|
|
21977
|
-
"style": props.style,
|
|
21978
|
-
"role": "navigation",
|
|
21979
|
-
"aria-label": t(props.ariaLabel),
|
|
21980
|
-
"onKeydown": onKeydown,
|
|
21981
|
-
"data-test": "v-pagination-root"
|
|
21982
|
-
}, {
|
|
21983
|
-
default: () => [createVNode("ul", {
|
|
21984
|
-
"class": "v-pagination__list"
|
|
21985
|
-
}, [props.showFirstLastPage && createVNode("li", {
|
|
21986
|
-
"key": "first",
|
|
21987
|
-
"class": "v-pagination__first",
|
|
21988
|
-
"data-test": "v-pagination-first"
|
|
21989
|
-
}, [slots.first ? slots.first(controls.value.first) : createVNode(VBtn, mergeProps({
|
|
21990
|
-
"_as": "VPaginationBtn"
|
|
21991
|
-
}, controls.value.first), null)]), createVNode("li", {
|
|
21992
|
-
"key": "prev",
|
|
21993
|
-
"class": "v-pagination__prev",
|
|
21994
|
-
"data-test": "v-pagination-prev"
|
|
21995
|
-
}, [slots.prev ? slots.prev(controls.value.prev) : createVNode(VBtn, mergeProps({
|
|
21996
|
-
"_as": "VPaginationBtn"
|
|
21997
|
-
}, controls.value.prev), null)]), items.value.map((item, index) => createVNode("li", {
|
|
21998
|
-
"key": item.key,
|
|
21999
|
-
"class": ['v-pagination__item', {
|
|
22000
|
-
'v-pagination__item--is-active': item.isActive
|
|
22001
|
-
}],
|
|
22002
|
-
"data-test": "v-pagination-item"
|
|
22003
|
-
}, [slots.item ? slots.item(item) : createVNode(VBtn, mergeProps({
|
|
22004
|
-
"_as": "VPaginationBtn"
|
|
22005
|
-
}, item.props), {
|
|
22006
|
-
default: () => [item.page]
|
|
22007
|
-
})])), createVNode("li", {
|
|
22008
|
-
"key": "next",
|
|
22009
|
-
"class": "v-pagination__next",
|
|
22010
|
-
"data-test": "v-pagination-next"
|
|
22011
|
-
}, [slots.next ? slots.next(controls.value.next) : createVNode(VBtn, mergeProps({
|
|
22012
|
-
"_as": "VPaginationBtn"
|
|
22013
|
-
}, controls.value.next), null)]), props.showFirstLastPage && createVNode("li", {
|
|
22014
|
-
"key": "last",
|
|
22015
|
-
"class": "v-pagination__last",
|
|
22016
|
-
"data-test": "v-pagination-last"
|
|
22017
|
-
}, [slots.last ? slots.last(controls.value.last) : createVNode(VBtn, mergeProps({
|
|
22018
|
-
"_as": "VPaginationBtn"
|
|
22019
|
-
}, controls.value.last), null)])])]
|
|
22020
|
-
}));
|
|
22021
|
-
return {};
|
|
22024
|
+
return {
|
|
22025
|
+
blur: () => {
|
|
22026
|
+
inputRef.value?.some(input => input.blur());
|
|
22027
|
+
},
|
|
22028
|
+
focus: () => {
|
|
22029
|
+
inputRef.value?.[0].focus();
|
|
22030
|
+
},
|
|
22031
|
+
reset,
|
|
22032
|
+
isFocused
|
|
22033
|
+
};
|
|
22022
22034
|
}
|
|
22023
22035
|
});
|
|
22024
22036
|
|
|
@@ -23080,7 +23092,7 @@ const VSlideGroup = genericComponent()({
|
|
|
23080
23092
|
"class": ['v-slide-group__prev', {
|
|
23081
23093
|
'v-slide-group__prev--disabled': !hasPrev.value
|
|
23082
23094
|
}],
|
|
23083
|
-
"onClick": () => scrollTo('prev')
|
|
23095
|
+
"onClick": () => hasPrev.value && scrollTo('prev')
|
|
23084
23096
|
}, [slots.prev?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
|
|
23085
23097
|
default: () => [createVNode(VIcon, {
|
|
23086
23098
|
"icon": isRtl.value ? props.nextIcon : props.prevIcon
|
|
@@ -23105,7 +23117,7 @@ const VSlideGroup = genericComponent()({
|
|
|
23105
23117
|
"class": ['v-slide-group__next', {
|
|
23106
23118
|
'v-slide-group__next--disabled': !hasNext.value
|
|
23107
23119
|
}],
|
|
23108
|
-
"onClick": () => scrollTo('next')
|
|
23120
|
+
"onClick": () => hasNext.value && scrollTo('next')
|
|
23109
23121
|
}, [slots.next?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
|
|
23110
23122
|
default: () => [createVNode(VIcon, {
|
|
23111
23123
|
"icon": isRtl.value ? props.prevIcon : props.nextIcon
|
|
@@ -23998,11 +24010,12 @@ const VTab = genericComponent()({
|
|
|
23998
24010
|
"maxWidth": props.fixed ? 300 : undefined,
|
|
23999
24011
|
"onGroup:selected": updateSlider
|
|
24000
24012
|
}), {
|
|
24001
|
-
|
|
24013
|
+
...slots,
|
|
24014
|
+
default: () => createVNode(Fragment, null, [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
|
|
24002
24015
|
"ref": sliderEl,
|
|
24003
24016
|
"class": ['v-tab__slider', sliderColorClasses.value],
|
|
24004
24017
|
"style": sliderColorStyles.value
|
|
24005
|
-
}, null)]
|
|
24018
|
+
}, null)])
|
|
24006
24019
|
});
|
|
24007
24020
|
});
|
|
24008
24021
|
return {};
|
|
@@ -25069,7 +25082,8 @@ function createVuetify$1() {
|
|
|
25069
25082
|
app.provide(ThemeSymbol, theme);
|
|
25070
25083
|
app.provide(IconSymbol, icons);
|
|
25071
25084
|
app.provide(LocaleSymbol, locale);
|
|
25072
|
-
app.provide(
|
|
25085
|
+
app.provide(DateOptionsSymbol, date.options);
|
|
25086
|
+
app.provide(DateAdapterSymbol, date.instance);
|
|
25073
25087
|
if (IN_BROWSER && options.ssr) {
|
|
25074
25088
|
if (app.$nuxt) {
|
|
25075
25089
|
app.$nuxt.hook('app:suspense:resolve', () => {
|
|
@@ -25115,7 +25129,7 @@ function createVuetify$1() {
|
|
|
25115
25129
|
date
|
|
25116
25130
|
};
|
|
25117
25131
|
}
|
|
25118
|
-
const version$1 = "3.4.
|
|
25132
|
+
const version$1 = "3.4.3";
|
|
25119
25133
|
createVuetify$1.version = version$1;
|
|
25120
25134
|
|
|
25121
25135
|
// Vue's inject() can only be used in setup
|
|
@@ -25140,7 +25154,7 @@ const createVuetify = function () {
|
|
|
25140
25154
|
...options
|
|
25141
25155
|
});
|
|
25142
25156
|
};
|
|
25143
|
-
const version = "3.4.
|
|
25157
|
+
const version = "3.4.3";
|
|
25144
25158
|
createVuetify.version = version;
|
|
25145
25159
|
|
|
25146
25160
|
export { components, createVuetify, directives, useDate, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
|