vuetify 3.3.12 → 3.3.14
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 +114 -70
- package/dist/json/importMap-labs.json +4 -4
- package/dist/json/tags.json +15 -4
- package/dist/json/web-types.json +336 -149
- package/dist/vuetify-labs.css +605 -509
- package/dist/vuetify-labs.d.ts +547 -265
- package/dist/vuetify-labs.esm.js +504 -352
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +503 -351
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +439 -343
- package/dist/vuetify.d.ts +392 -102
- package/dist/vuetify.esm.js +304 -215
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +303 -214
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +839 -828
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
- package/lib/components/VAppBar/index.d.mts +6 -6
- package/lib/components/VAutocomplete/VAutocomplete.mjs +18 -4
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +42 -0
- package/lib/components/VBadge/VBadge.css +1 -1
- package/lib/components/VBadge/_variables.scss +1 -1
- package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
- package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
- package/lib/components/VBtn/VBtn.css +3 -0
- package/lib/components/VBtn/VBtn.sass +3 -0
- package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
- package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
- package/lib/components/VCheckbox/VCheckboxBtn.mjs +14 -11
- package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
- package/lib/components/VCheckbox/index.d.mts +3 -1
- package/lib/components/VColorPicker/VColorPickerEdit.css +4 -2
- package/lib/components/VColorPicker/VColorPickerPreview.css +11 -6
- package/lib/components/VCombobox/VCombobox.mjs +17 -3
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +42 -0
- package/lib/components/VField/VField.css +23 -7
- package/lib/components/VField/VField.mjs +5 -3
- package/lib/components/VField/VField.mjs.map +1 -1
- package/lib/components/VField/VField.sass +9 -1
- package/lib/components/VField/_variables.scss +1 -0
- package/lib/components/VFileInput/VFileInput.css +4 -0
- package/lib/components/VFileInput/VFileInput.sass +5 -1
- package/lib/components/VFileInput/_variables.scss +2 -1
- package/lib/components/VGrid/VGrid.css +153 -142
- package/lib/components/VList/VList.css +1 -1
- package/lib/components/VList/VList.sass +1 -1
- package/lib/components/VList/VListItem.css +15 -10
- package/lib/components/VList/VListItem.mjs +6 -3
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/VListItem.sass +17 -10
- package/lib/components/VMenu/VMenu.mjs +4 -3
- package/lib/components/VMenu/VMenu.mjs.map +1 -1
- package/lib/components/VMenu/index.d.mts +5 -5
- package/lib/components/VNavigationDrawer/VNavigationDrawer.css +0 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -1
- package/lib/components/VNavigationDrawer/_variables.scss +0 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +3 -2
- package/lib/components/VRadio/index.d.mts +3 -1
- package/lib/components/VRadioGroup/VRadioGroup.css +6 -1
- package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
- package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.sass +5 -0
- package/lib/components/VRadioGroup/_variables.scss +3 -1
- package/lib/components/VRadioGroup/index.d.mts +3 -1
- package/lib/components/VRangeSlider/index.d.mts +114 -33
- package/lib/components/VSelect/VSelect.mjs +26 -4
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.mts +42 -0
- package/lib/components/VSelectionControl/VSelectionControl.mjs +24 -20
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControl/index.d.mts +27 -25
- package/lib/components/VSlider/VSlider.mjs.map +1 -1
- package/lib/components/VSlider/VSliderThumb.css +8 -4
- package/lib/components/VSlider/VSliderTrack.css +22 -12
- package/lib/components/VSlider/index.d.mts +114 -33
- package/lib/components/VSwitch/VSwitch.css +24 -17
- package/lib/components/VSwitch/VSwitch.mjs +37 -28
- package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
- package/lib/components/VSwitch/VSwitch.sass +20 -11
- package/lib/components/VSwitch/_variables.scss +18 -6
- package/lib/components/VSwitch/index.d.mts +3 -1
- package/lib/components/VTextField/VTextField.css +9 -2
- package/lib/components/VTextField/VTextField.mjs +6 -3
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/VTextField.sass +10 -3
- package/lib/components/VTextField/index.d.mts +6 -0
- package/lib/components/VTextarea/VTextarea.mjs +1 -2
- package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
- package/lib/components/VTimeline/VTimeline.css +25 -11
- package/lib/components/VTimeline/VTimeline.sass +11 -1
- package/lib/components/VToolbar/VToolbar.css +4 -2
- package/lib/components/index.d.mts +391 -101
- package/lib/composables/color.mjs +6 -1
- package/lib/composables/color.mjs.map +1 -1
- package/lib/composables/defaults.mjs +9 -9
- package/lib/composables/defaults.mjs.map +1 -1
- package/lib/composables/theme.mjs +2 -5
- package/lib/composables/theme.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/index.d.mts +1 -1
- package/lib/labs/VDateInput/index.d.mts +8 -2
- package/lib/labs/VDatePicker/VDateCard.mjs +3 -0
- package/lib/labs/VDatePicker/VDateCard.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePicker.mjs +51 -21
- package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePickerControls.css +1 -1
- package/lib/labs/VDatePicker/VDatePickerControls.mjs +53 -35
- package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePickerMonth.mjs +37 -28
- package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePickerYears.mjs +19 -17
- package/lib/labs/VDatePicker/VDatePickerYears.mjs.map +1 -1
- package/lib/labs/VDatePicker/index.d.mts +148 -156
- package/lib/labs/VDateRangePicker/VDateRangeCard.mjs +3 -0
- package/lib/labs/VDateRangePicker/VDateRangeCard.mjs.map +1 -1
- package/lib/labs/VDateRangePicker/index.d.mts +59 -52
- package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
- package/lib/labs/VSkeletonLoader/index.d.mts +8 -8
- package/lib/labs/components.d.mts +156 -164
- package/lib/locale/af.mjs +1 -0
- package/lib/locale/af.mjs.map +1 -1
- package/lib/locale/ar.mjs +1 -0
- package/lib/locale/ar.mjs.map +1 -1
- package/lib/locale/az.mjs +1 -0
- package/lib/locale/az.mjs.map +1 -1
- package/lib/locale/bg.mjs +1 -0
- package/lib/locale/bg.mjs.map +1 -1
- package/lib/locale/ca.mjs +1 -0
- package/lib/locale/ca.mjs.map +1 -1
- package/lib/locale/ckb.mjs +1 -0
- package/lib/locale/ckb.mjs.map +1 -1
- package/lib/locale/cs.mjs +1 -0
- package/lib/locale/cs.mjs.map +1 -1
- package/lib/locale/da.mjs +1 -0
- package/lib/locale/da.mjs.map +1 -1
- package/lib/locale/de.mjs +1 -0
- package/lib/locale/de.mjs.map +1 -1
- package/lib/locale/el.mjs +1 -0
- package/lib/locale/el.mjs.map +1 -1
- package/lib/locale/en.mjs +1 -0
- package/lib/locale/en.mjs.map +1 -1
- package/lib/locale/es.mjs +1 -0
- package/lib/locale/es.mjs.map +1 -1
- package/lib/locale/et.mjs +1 -0
- package/lib/locale/et.mjs.map +1 -1
- package/lib/locale/fa.mjs +1 -0
- package/lib/locale/fa.mjs.map +1 -1
- package/lib/locale/fi.mjs +1 -0
- package/lib/locale/fi.mjs.map +1 -1
- package/lib/locale/fr.mjs +1 -0
- package/lib/locale/fr.mjs.map +1 -1
- package/lib/locale/he.mjs +1 -0
- package/lib/locale/he.mjs.map +1 -1
- package/lib/locale/hr.mjs +1 -0
- package/lib/locale/hr.mjs.map +1 -1
- package/lib/locale/hu.mjs +1 -0
- package/lib/locale/hu.mjs.map +1 -1
- package/lib/locale/id.mjs +1 -0
- package/lib/locale/id.mjs.map +1 -1
- package/lib/locale/index.d.mts +42 -0
- package/lib/locale/it.mjs +1 -0
- package/lib/locale/it.mjs.map +1 -1
- package/lib/locale/ja.mjs +1 -0
- package/lib/locale/ja.mjs.map +1 -1
- package/lib/locale/ko.mjs +1 -0
- package/lib/locale/ko.mjs.map +1 -1
- package/lib/locale/lt.mjs +1 -0
- package/lib/locale/lt.mjs.map +1 -1
- package/lib/locale/lv.mjs +1 -0
- package/lib/locale/lv.mjs.map +1 -1
- package/lib/locale/nl.mjs +1 -0
- package/lib/locale/nl.mjs.map +1 -1
- package/lib/locale/no.mjs +2 -1
- package/lib/locale/no.mjs.map +1 -1
- package/lib/locale/pl.mjs +1 -0
- package/lib/locale/pl.mjs.map +1 -1
- package/lib/locale/pt.mjs +1 -0
- package/lib/locale/pt.mjs.map +1 -1
- package/lib/locale/ro.mjs +1 -0
- package/lib/locale/ro.mjs.map +1 -1
- package/lib/locale/ru.mjs +1 -0
- package/lib/locale/ru.mjs.map +1 -1
- package/lib/locale/sk.mjs +1 -0
- package/lib/locale/sk.mjs.map +1 -1
- package/lib/locale/sl.mjs +1 -0
- package/lib/locale/sl.mjs.map +1 -1
- package/lib/locale/sr-Cyrl.mjs +1 -0
- package/lib/locale/sr-Cyrl.mjs.map +1 -1
- package/lib/locale/sr-Latn.mjs +1 -0
- package/lib/locale/sr-Latn.mjs.map +1 -1
- package/lib/locale/sv.mjs +1 -0
- package/lib/locale/sv.mjs.map +1 -1
- package/lib/locale/th.mjs +1 -0
- package/lib/locale/th.mjs.map +1 -1
- package/lib/locale/tr.mjs +1 -0
- package/lib/locale/tr.mjs.map +1 -1
- package/lib/locale/uk.mjs +1 -0
- package/lib/locale/uk.mjs.map +1 -1
- package/lib/locale/vi.mjs +1 -0
- package/lib/locale/vi.mjs.map +1 -1
- package/lib/locale/zh-Hans.mjs +1 -0
- package/lib/locale/zh-Hans.mjs.map +1 -1
- package/lib/locale/zh-Hant.mjs +1 -0
- package/lib/locale/zh-Hant.mjs.map +1 -1
- package/lib/styles/tools/_rtl.sass +4 -2
- package/lib/util/colorUtils.mjs +6 -0
- package/lib/util/colorUtils.mjs.map +1 -1
- package/lib/util/helpers.mjs +10 -4
- package/lib/util/helpers.mjs.map +1 -1
- package/lib/util/injectSelf.mjs +2 -1
- package/lib/util/injectSelf.mjs.map +1 -1
- package/package.json +2 -2
package/dist/vuetify.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.3.
|
|
2
|
+
* Vuetify v3.3.14
|
|
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, warn,
|
|
7
|
+
import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, ref, unref, 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, onBeforeUpdate, vModelText } from 'vue';
|
|
8
8
|
|
|
9
9
|
// Types
|
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
|
@@ -224,14 +224,22 @@ function omit(obj, exclude) {
|
|
|
224
224
|
exclude.forEach(prop => delete clone[prop]);
|
|
225
225
|
return clone;
|
|
226
226
|
}
|
|
227
|
+
const onRE = /^on[^a-z]/;
|
|
228
|
+
const isOn = key => onRE.test(key);
|
|
229
|
+
const bubblingEvents = ['onAfterscriptexecute', 'onAnimationcancel', 'onAnimationend', 'onAnimationiteration', 'onAnimationstart', 'onAuxclick', 'onBeforeinput', 'onBeforescriptexecute', 'onChange', 'onClick', 'onCompositionend', 'onCompositionstart', 'onCompositionupdate', 'onContextmenu', 'onCopy', 'onCut', 'onDblclick', 'onFocusin', 'onFocusout', 'onFullscreenchange', 'onFullscreenerror', 'onGesturechange', 'onGestureend', 'onGesturestart', 'onGotpointercapture', 'onInput', 'onKeydown', 'onKeypress', 'onKeyup', 'onLostpointercapture', 'onMousedown', 'onMousemove', 'onMouseout', 'onMouseover', 'onMouseup', 'onMousewheel', 'onPaste', 'onPointercancel', 'onPointerdown', 'onPointerenter', 'onPointerleave', 'onPointermove', 'onPointerout', 'onPointerover', 'onPointerup', 'onReset', 'onSelect', 'onSubmit', 'onTouchcancel', 'onTouchend', 'onTouchmove', 'onTouchstart', 'onTransitioncancel', 'onTransitionend', 'onTransitionrun', 'onTransitionstart', 'onWheel'];
|
|
227
230
|
|
|
228
231
|
/**
|
|
229
232
|
* Filter attributes that should be applied to
|
|
230
|
-
* the root element of
|
|
233
|
+
* the root element of an input component. Remaining
|
|
231
234
|
* attributes should be passed to the <input> element inside.
|
|
232
235
|
*/
|
|
233
236
|
function filterInputAttrs(attrs) {
|
|
234
|
-
|
|
237
|
+
const [events, props] = pick(attrs, [onRE]);
|
|
238
|
+
const inputEvents = omit(events, bubblingEvents);
|
|
239
|
+
const [rootAttrs, inputAttrs] = pick(props, ['class', 'style', 'id', /^data-/]);
|
|
240
|
+
Object.assign(rootAttrs, events);
|
|
241
|
+
Object.assign(inputAttrs, inputEvents);
|
|
242
|
+
return [rootAttrs, inputAttrs];
|
|
235
243
|
}
|
|
236
244
|
function wrapInArray(v) {
|
|
237
245
|
return v == null ? [] : Array.isArray(v) ? v : [v];
|
|
@@ -384,8 +392,6 @@ function destructComputed(getter) {
|
|
|
384
392
|
function includes(arr, val) {
|
|
385
393
|
return arr.includes(val);
|
|
386
394
|
}
|
|
387
|
-
const onRE = /^on[^a-z]/;
|
|
388
|
-
const isOn = key => onRE.test(key);
|
|
389
395
|
function eventName(propName) {
|
|
390
396
|
return propName[2].toLowerCase() + propName.slice(3);
|
|
391
397
|
}
|
|
@@ -652,6 +658,94 @@ function unbindProps(el, props) {
|
|
|
652
658
|
});
|
|
653
659
|
}
|
|
654
660
|
|
|
661
|
+
/**
|
|
662
|
+
* WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA
|
|
663
|
+
* @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
|
|
664
|
+
* @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup
|
|
665
|
+
*/
|
|
666
|
+
// Types
|
|
667
|
+
|
|
668
|
+
// MAGICAL NUMBERS
|
|
669
|
+
|
|
670
|
+
// sRGB Conversion to Relative Luminance (Y)
|
|
671
|
+
|
|
672
|
+
// Transfer Curve (aka "Gamma") for sRGB linearization
|
|
673
|
+
// Simple power curve vs piecewise described in docs
|
|
674
|
+
// Essentially, 2.4 best models actual display
|
|
675
|
+
// characteristics in combination with the total method
|
|
676
|
+
const mainTRC = 2.4;
|
|
677
|
+
const Rco = 0.2126729; // sRGB Red Coefficient (from matrix)
|
|
678
|
+
const Gco = 0.7151522; // sRGB Green Coefficient (from matrix)
|
|
679
|
+
const Bco = 0.0721750; // sRGB Blue Coefficient (from matrix)
|
|
680
|
+
|
|
681
|
+
// For Finding Raw SAPC Contrast from Relative Luminance (Y)
|
|
682
|
+
|
|
683
|
+
// Constants for SAPC Power Curve Exponents
|
|
684
|
+
// One pair for normal text, and one for reverse
|
|
685
|
+
// These are the "beating heart" of SAPC
|
|
686
|
+
const normBG = 0.55;
|
|
687
|
+
const normTXT = 0.58;
|
|
688
|
+
const revTXT = 0.57;
|
|
689
|
+
const revBG = 0.62;
|
|
690
|
+
|
|
691
|
+
// For Clamping and Scaling Values
|
|
692
|
+
|
|
693
|
+
const blkThrs = 0.03; // Level that triggers the soft black clamp
|
|
694
|
+
const blkClmp = 1.45; // Exponent for the soft black clamp curve
|
|
695
|
+
const deltaYmin = 0.0005; // Lint trap
|
|
696
|
+
const scaleBoW = 1.25; // Scaling for dark text on light
|
|
697
|
+
const scaleWoB = 1.25; // Scaling for light text on dark
|
|
698
|
+
const loConThresh = 0.078; // Threshold for new simple offset scale
|
|
699
|
+
const loConFactor = 12.82051282051282; // = 1/0.078,
|
|
700
|
+
const loConOffset = 0.06; // The simple offset
|
|
701
|
+
const loClip = 0.001; // Output clip (lint trap #2)
|
|
702
|
+
|
|
703
|
+
function APCAcontrast(text, background) {
|
|
704
|
+
// Linearize sRGB
|
|
705
|
+
const Rtxt = (text.r / 255) ** mainTRC;
|
|
706
|
+
const Gtxt = (text.g / 255) ** mainTRC;
|
|
707
|
+
const Btxt = (text.b / 255) ** mainTRC;
|
|
708
|
+
const Rbg = (background.r / 255) ** mainTRC;
|
|
709
|
+
const Gbg = (background.g / 255) ** mainTRC;
|
|
710
|
+
const Bbg = (background.b / 255) ** mainTRC;
|
|
711
|
+
|
|
712
|
+
// Apply the standard coefficients and sum to Y
|
|
713
|
+
let Ytxt = Rtxt * Rco + Gtxt * Gco + Btxt * Bco;
|
|
714
|
+
let Ybg = Rbg * Rco + Gbg * Gco + Bbg * Bco;
|
|
715
|
+
|
|
716
|
+
// Soft clamp Y when near black.
|
|
717
|
+
// Now clamping all colors to prevent crossover errors
|
|
718
|
+
if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp;
|
|
719
|
+
if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp;
|
|
720
|
+
|
|
721
|
+
// Return 0 Early for extremely low ∆Y (lint trap #1)
|
|
722
|
+
if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0;
|
|
723
|
+
|
|
724
|
+
// SAPC CONTRAST
|
|
725
|
+
|
|
726
|
+
let outputContrast; // For weighted final values
|
|
727
|
+
if (Ybg > Ytxt) {
|
|
728
|
+
// For normal polarity, black text on white
|
|
729
|
+
// Calculate the SAPC contrast value and scale
|
|
730
|
+
|
|
731
|
+
const SAPC = (Ybg ** normBG - Ytxt ** normTXT) * scaleBoW;
|
|
732
|
+
|
|
733
|
+
// NEW! SAPC SmoothScale™
|
|
734
|
+
// Low Contrast Smooth Scale Rollout to prevent polarity reversal
|
|
735
|
+
// and also a low clip for very low contrasts (lint trap #2)
|
|
736
|
+
// much of this is for very low contrasts, less than 10
|
|
737
|
+
// therefore for most reversing needs, only loConOffset is important
|
|
738
|
+
outputContrast = SAPC < loClip ? 0.0 : SAPC < loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC - loConOffset;
|
|
739
|
+
} else {
|
|
740
|
+
// For reverse polarity, light text on dark
|
|
741
|
+
// WoB should always return negative value.
|
|
742
|
+
|
|
743
|
+
const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
|
|
744
|
+
outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
|
|
745
|
+
}
|
|
746
|
+
return outputContrast * 100;
|
|
747
|
+
}
|
|
748
|
+
|
|
655
749
|
/* eslint-disable no-console */
|
|
656
750
|
|
|
657
751
|
function consoleWarn(message) {
|
|
@@ -1008,36 +1102,13 @@ function getContrast(first, second) {
|
|
|
1008
1102
|
const dark = Math.min(l1, l2);
|
|
1009
1103
|
return (light + 0.05) / (dark + 0.05);
|
|
1010
1104
|
}
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
function useToggleScope(source, fn) {
|
|
1017
|
-
let scope;
|
|
1018
|
-
function start() {
|
|
1019
|
-
scope = effectScope();
|
|
1020
|
-
scope.run(() => fn.length ? fn(() => {
|
|
1021
|
-
scope?.stop();
|
|
1022
|
-
start();
|
|
1023
|
-
}) : fn());
|
|
1024
|
-
}
|
|
1025
|
-
watch(source, active => {
|
|
1026
|
-
if (active && !scope) {
|
|
1027
|
-
start();
|
|
1028
|
-
} else if (!active) {
|
|
1029
|
-
scope?.stop();
|
|
1030
|
-
scope = undefined;
|
|
1031
|
-
}
|
|
1032
|
-
}, {
|
|
1033
|
-
immediate: true
|
|
1034
|
-
});
|
|
1035
|
-
onScopeDispose(() => {
|
|
1036
|
-
scope?.stop();
|
|
1037
|
-
});
|
|
1105
|
+
function getForeground(color) {
|
|
1106
|
+
const blackContrast = Math.abs(APCAcontrast(parseColor(0), parseColor(color)));
|
|
1107
|
+
const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), parseColor(color)));
|
|
1108
|
+
return whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000';
|
|
1038
1109
|
}
|
|
1039
1110
|
|
|
1040
|
-
//
|
|
1111
|
+
// Utilities
|
|
1041
1112
|
|
|
1042
1113
|
// Types
|
|
1043
1114
|
|
|
@@ -1059,6 +1130,7 @@ function provideDefaults(defaults, options) {
|
|
|
1059
1130
|
const scoped = unref(options?.scoped);
|
|
1060
1131
|
const reset = unref(options?.reset);
|
|
1061
1132
|
const root = unref(options?.root);
|
|
1133
|
+
if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
|
|
1062
1134
|
let properties = mergeDeep(providedDefaults.value, {
|
|
1063
1135
|
prev: injectedDefaults.value
|
|
1064
1136
|
});
|
|
@@ -1114,16 +1186,16 @@ function internalUseDefaults() {
|
|
|
1114
1186
|
let [key] = _ref;
|
|
1115
1187
|
return key.startsWith(key[0].toUpperCase());
|
|
1116
1188
|
});
|
|
1117
|
-
|
|
1189
|
+
_subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
|
|
1190
|
+
} else {
|
|
1191
|
+
_subcomponentDefaults.value = undefined;
|
|
1118
1192
|
}
|
|
1119
1193
|
});
|
|
1120
1194
|
function provideSubDefaults() {
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
|
|
1126
|
-
});
|
|
1195
|
+
const injected = injectSelf(DefaultsSymbol, vm);
|
|
1196
|
+
provide(DefaultsSymbol, computed(() => {
|
|
1197
|
+
return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
|
|
1198
|
+
}));
|
|
1127
1199
|
}
|
|
1128
1200
|
return {
|
|
1129
1201
|
props: _props,
|
|
@@ -1301,9 +1373,10 @@ function isPotentiallyScrollable(el) {
|
|
|
1301
1373
|
// Types
|
|
1302
1374
|
|
|
1303
1375
|
function injectSelf(key) {
|
|
1376
|
+
let vm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstance('injectSelf');
|
|
1304
1377
|
const {
|
|
1305
1378
|
provides
|
|
1306
|
-
} =
|
|
1379
|
+
} = vm;
|
|
1307
1380
|
if (provides && key in provides) {
|
|
1308
1381
|
// TS doesn't allow symbol as index type
|
|
1309
1382
|
return provides[key];
|
|
@@ -1641,6 +1714,7 @@ function createLayout(props) {
|
|
|
1641
1714
|
|
|
1642
1715
|
var en = {
|
|
1643
1716
|
badge: 'Badge',
|
|
1717
|
+
open: 'Open',
|
|
1644
1718
|
close: 'Close',
|
|
1645
1719
|
dataIterator: {
|
|
1646
1720
|
noResultsText: 'No matching records found',
|
|
@@ -1779,6 +1853,34 @@ const defaultRtl = {
|
|
|
1779
1853
|
zhHant: false
|
|
1780
1854
|
};
|
|
1781
1855
|
|
|
1856
|
+
// Utilities
|
|
1857
|
+
|
|
1858
|
+
// Types
|
|
1859
|
+
|
|
1860
|
+
function useToggleScope(source, fn) {
|
|
1861
|
+
let scope;
|
|
1862
|
+
function start() {
|
|
1863
|
+
scope = effectScope();
|
|
1864
|
+
scope.run(() => fn.length ? fn(() => {
|
|
1865
|
+
scope?.stop();
|
|
1866
|
+
start();
|
|
1867
|
+
}) : fn());
|
|
1868
|
+
}
|
|
1869
|
+
watch(source, active => {
|
|
1870
|
+
if (active && !scope) {
|
|
1871
|
+
start();
|
|
1872
|
+
} else if (!active) {
|
|
1873
|
+
scope?.stop();
|
|
1874
|
+
scope = undefined;
|
|
1875
|
+
}
|
|
1876
|
+
}, {
|
|
1877
|
+
immediate: true
|
|
1878
|
+
});
|
|
1879
|
+
onScopeDispose(() => {
|
|
1880
|
+
scope?.stop();
|
|
1881
|
+
});
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1782
1884
|
// Composables
|
|
1783
1885
|
|
|
1784
1886
|
// Types
|
|
@@ -1980,94 +2082,6 @@ function useRtl() {
|
|
|
1980
2082
|
};
|
|
1981
2083
|
}
|
|
1982
2084
|
|
|
1983
|
-
/**
|
|
1984
|
-
* WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA
|
|
1985
|
-
* @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
|
|
1986
|
-
* @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup
|
|
1987
|
-
*/
|
|
1988
|
-
// Types
|
|
1989
|
-
|
|
1990
|
-
// MAGICAL NUMBERS
|
|
1991
|
-
|
|
1992
|
-
// sRGB Conversion to Relative Luminance (Y)
|
|
1993
|
-
|
|
1994
|
-
// Transfer Curve (aka "Gamma") for sRGB linearization
|
|
1995
|
-
// Simple power curve vs piecewise described in docs
|
|
1996
|
-
// Essentially, 2.4 best models actual display
|
|
1997
|
-
// characteristics in combination with the total method
|
|
1998
|
-
const mainTRC = 2.4;
|
|
1999
|
-
const Rco = 0.2126729; // sRGB Red Coefficient (from matrix)
|
|
2000
|
-
const Gco = 0.7151522; // sRGB Green Coefficient (from matrix)
|
|
2001
|
-
const Bco = 0.0721750; // sRGB Blue Coefficient (from matrix)
|
|
2002
|
-
|
|
2003
|
-
// For Finding Raw SAPC Contrast from Relative Luminance (Y)
|
|
2004
|
-
|
|
2005
|
-
// Constants for SAPC Power Curve Exponents
|
|
2006
|
-
// One pair for normal text, and one for reverse
|
|
2007
|
-
// These are the "beating heart" of SAPC
|
|
2008
|
-
const normBG = 0.55;
|
|
2009
|
-
const normTXT = 0.58;
|
|
2010
|
-
const revTXT = 0.57;
|
|
2011
|
-
const revBG = 0.62;
|
|
2012
|
-
|
|
2013
|
-
// For Clamping and Scaling Values
|
|
2014
|
-
|
|
2015
|
-
const blkThrs = 0.03; // Level that triggers the soft black clamp
|
|
2016
|
-
const blkClmp = 1.45; // Exponent for the soft black clamp curve
|
|
2017
|
-
const deltaYmin = 0.0005; // Lint trap
|
|
2018
|
-
const scaleBoW = 1.25; // Scaling for dark text on light
|
|
2019
|
-
const scaleWoB = 1.25; // Scaling for light text on dark
|
|
2020
|
-
const loConThresh = 0.078; // Threshold for new simple offset scale
|
|
2021
|
-
const loConFactor = 12.82051282051282; // = 1/0.078,
|
|
2022
|
-
const loConOffset = 0.06; // The simple offset
|
|
2023
|
-
const loClip = 0.001; // Output clip (lint trap #2)
|
|
2024
|
-
|
|
2025
|
-
function APCAcontrast(text, background) {
|
|
2026
|
-
// Linearize sRGB
|
|
2027
|
-
const Rtxt = (text.r / 255) ** mainTRC;
|
|
2028
|
-
const Gtxt = (text.g / 255) ** mainTRC;
|
|
2029
|
-
const Btxt = (text.b / 255) ** mainTRC;
|
|
2030
|
-
const Rbg = (background.r / 255) ** mainTRC;
|
|
2031
|
-
const Gbg = (background.g / 255) ** mainTRC;
|
|
2032
|
-
const Bbg = (background.b / 255) ** mainTRC;
|
|
2033
|
-
|
|
2034
|
-
// Apply the standard coefficients and sum to Y
|
|
2035
|
-
let Ytxt = Rtxt * Rco + Gtxt * Gco + Btxt * Bco;
|
|
2036
|
-
let Ybg = Rbg * Rco + Gbg * Gco + Bbg * Bco;
|
|
2037
|
-
|
|
2038
|
-
// Soft clamp Y when near black.
|
|
2039
|
-
// Now clamping all colors to prevent crossover errors
|
|
2040
|
-
if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp;
|
|
2041
|
-
if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp;
|
|
2042
|
-
|
|
2043
|
-
// Return 0 Early for extremely low ∆Y (lint trap #1)
|
|
2044
|
-
if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0;
|
|
2045
|
-
|
|
2046
|
-
// SAPC CONTRAST
|
|
2047
|
-
|
|
2048
|
-
let outputContrast; // For weighted final values
|
|
2049
|
-
if (Ybg > Ytxt) {
|
|
2050
|
-
// For normal polarity, black text on white
|
|
2051
|
-
// Calculate the SAPC contrast value and scale
|
|
2052
|
-
|
|
2053
|
-
const SAPC = (Ybg ** normBG - Ytxt ** normTXT) * scaleBoW;
|
|
2054
|
-
|
|
2055
|
-
// NEW! SAPC SmoothScale™
|
|
2056
|
-
// Low Contrast Smooth Scale Rollout to prevent polarity reversal
|
|
2057
|
-
// and also a low clip for very low contrasts (lint trap #2)
|
|
2058
|
-
// much of this is for very low contrasts, less than 10
|
|
2059
|
-
// therefore for most reversing needs, only loConOffset is important
|
|
2060
|
-
outputContrast = SAPC < loClip ? 0.0 : SAPC < loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC - loConOffset;
|
|
2061
|
-
} else {
|
|
2062
|
-
// For reverse polarity, light text on dark
|
|
2063
|
-
// WoB should always return negative value.
|
|
2064
|
-
|
|
2065
|
-
const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
|
|
2066
|
-
outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
|
|
2067
|
-
}
|
|
2068
|
-
return outputContrast * 100;
|
|
2069
|
-
}
|
|
2070
|
-
|
|
2071
2085
|
// Utilities
|
|
2072
2086
|
|
|
2073
2087
|
// Types
|
|
@@ -2203,8 +2217,6 @@ function createTheme(options) {
|
|
|
2203
2217
|
if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
|
|
2204
2218
|
const onColor = `on-${color}`;
|
|
2205
2219
|
const colorVal = parseColor(theme.colors[color]);
|
|
2206
|
-
const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal));
|
|
2207
|
-
const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), colorVal));
|
|
2208
2220
|
|
|
2209
2221
|
// TODO: warn about poor color selections
|
|
2210
2222
|
// const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
|
|
@@ -2216,7 +2228,7 @@ function createTheme(options) {
|
|
|
2216
2228
|
// }
|
|
2217
2229
|
|
|
2218
2230
|
// Prefer white text if both have an acceptable contrast ratio
|
|
2219
|
-
theme.colors[onColor] =
|
|
2231
|
+
theme.colors[onColor] = getForeground(colorVal);
|
|
2220
2232
|
}
|
|
2221
2233
|
}
|
|
2222
2234
|
return acc;
|
|
@@ -3245,6 +3257,11 @@ function useColor(colors) {
|
|
|
3245
3257
|
if (colors.value.background) {
|
|
3246
3258
|
if (isCssColor(colors.value.background)) {
|
|
3247
3259
|
styles.backgroundColor = colors.value.background;
|
|
3260
|
+
if (!colors.value.text) {
|
|
3261
|
+
const textColor = getForeground(styles.backgroundColor);
|
|
3262
|
+
styles.color = textColor;
|
|
3263
|
+
styles.caretColor = textColor;
|
|
3264
|
+
}
|
|
3248
3265
|
} else {
|
|
3249
3266
|
classes.push(`bg-${colors.value.background}`);
|
|
3250
3267
|
}
|
|
@@ -5844,6 +5861,20 @@ const VSelectionControl = genericComponent()({
|
|
|
5844
5861
|
}
|
|
5845
5862
|
}) : props.label;
|
|
5846
5863
|
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
|
5864
|
+
const inputNode = createVNode("input", mergeProps({
|
|
5865
|
+
"ref": input,
|
|
5866
|
+
"checked": model.value,
|
|
5867
|
+
"disabled": !!(props.readonly || props.disabled),
|
|
5868
|
+
"id": id.value,
|
|
5869
|
+
"onBlur": onBlur,
|
|
5870
|
+
"onFocus": onFocus,
|
|
5871
|
+
"onInput": onInput,
|
|
5872
|
+
"aria-disabled": !!(props.readonly || props.disabled),
|
|
5873
|
+
"type": props.type,
|
|
5874
|
+
"value": trueValue.value,
|
|
5875
|
+
"name": props.name,
|
|
5876
|
+
"aria-checked": props.type === 'checkbox' ? model.value : undefined
|
|
5877
|
+
}, inputAttrs), null);
|
|
5847
5878
|
return createVNode("div", mergeProps({
|
|
5848
5879
|
"class": ['v-selection-control', {
|
|
5849
5880
|
'v-selection-control--dirty': model.value,
|
|
@@ -5860,34 +5891,24 @@ const VSelectionControl = genericComponent()({
|
|
|
5860
5891
|
"style": textColorStyles.value
|
|
5861
5892
|
}, [slots.default?.(), withDirectives(createVNode("div", {
|
|
5862
5893
|
"class": ['v-selection-control__input']
|
|
5863
|
-
}, [
|
|
5864
|
-
"key": "icon",
|
|
5865
|
-
"icon": icon.value
|
|
5866
|
-
}, null), createVNode("input", mergeProps({
|
|
5867
|
-
"ref": input,
|
|
5868
|
-
"checked": model.value,
|
|
5869
|
-
"disabled": !!(props.readonly || props.disabled),
|
|
5870
|
-
"id": id.value,
|
|
5871
|
-
"onBlur": onBlur,
|
|
5872
|
-
"onFocus": onFocus,
|
|
5873
|
-
"onInput": onInput,
|
|
5874
|
-
"aria-disabled": !!(props.readonly || props.disabled),
|
|
5875
|
-
"type": props.type,
|
|
5876
|
-
"value": trueValue.value,
|
|
5877
|
-
"name": props.name,
|
|
5878
|
-
"aria-checked": props.type === 'checkbox' ? model.value : undefined
|
|
5879
|
-
}, inputAttrs), null), slots.input?.({
|
|
5894
|
+
}, [slots.input?.({
|
|
5880
5895
|
model,
|
|
5881
5896
|
textColorClasses,
|
|
5882
5897
|
textColorStyles,
|
|
5898
|
+
inputNode,
|
|
5899
|
+
icon: icon.value,
|
|
5883
5900
|
props: {
|
|
5884
5901
|
onFocus,
|
|
5885
5902
|
onBlur,
|
|
5886
5903
|
id: id.value
|
|
5887
5904
|
}
|
|
5888
|
-
})
|
|
5905
|
+
}) ?? createVNode(Fragment, null, [icon.value && createVNode(VIcon, {
|
|
5906
|
+
"key": "icon",
|
|
5907
|
+
"icon": icon.value
|
|
5908
|
+
}, null), inputNode])]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
|
|
5889
5909
|
"for": id.value,
|
|
5890
|
-
"clickable": true
|
|
5910
|
+
"clickable": true,
|
|
5911
|
+
"onClick": e => e.stopPropagation()
|
|
5891
5912
|
}, {
|
|
5892
5913
|
default: () => [label]
|
|
5893
5914
|
})]);
|
|
@@ -5936,16 +5957,19 @@ const VCheckboxBtn = genericComponent()({
|
|
|
5936
5957
|
const trueIcon = computed(() => {
|
|
5937
5958
|
return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
|
|
5938
5959
|
});
|
|
5939
|
-
useRender(() =>
|
|
5940
|
-
|
|
5941
|
-
|
|
5942
|
-
|
|
5943
|
-
|
|
5944
|
-
|
|
5945
|
-
|
|
5946
|
-
|
|
5947
|
-
|
|
5948
|
-
|
|
5960
|
+
useRender(() => {
|
|
5961
|
+
const controlProps = omit(VSelectionControl.filterProps(props)[0], ['modelValue']);
|
|
5962
|
+
return createVNode(VSelectionControl, mergeProps(controlProps, {
|
|
5963
|
+
"modelValue": model.value,
|
|
5964
|
+
"onUpdate:modelValue": [$event => model.value = $event, onChange],
|
|
5965
|
+
"class": ['v-checkbox-btn', props.class],
|
|
5966
|
+
"style": props.style,
|
|
5967
|
+
"type": "checkbox",
|
|
5968
|
+
"falseIcon": falseIcon.value,
|
|
5969
|
+
"trueIcon": trueIcon.value,
|
|
5970
|
+
"aria-checked": indeterminate.value ? 'mixed' : undefined
|
|
5971
|
+
}), slots);
|
|
5972
|
+
});
|
|
5949
5973
|
return {};
|
|
5950
5974
|
}
|
|
5951
5975
|
});
|
|
@@ -6509,12 +6533,12 @@ const VCheckbox = genericComponent()({
|
|
|
6509
6533
|
const uid = getUid();
|
|
6510
6534
|
const id = computed(() => props.id || `checkbox-${uid}`);
|
|
6511
6535
|
useRender(() => {
|
|
6512
|
-
const [
|
|
6536
|
+
const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
|
|
6513
6537
|
const [inputProps, _1] = VInput.filterProps(props);
|
|
6514
6538
|
const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
|
|
6515
6539
|
return createVNode(VInput, mergeProps({
|
|
6516
6540
|
"class": ['v-checkbox', props.class]
|
|
6517
|
-
},
|
|
6541
|
+
}, rootAttrs, inputProps, {
|
|
6518
6542
|
"modelValue": model.value,
|
|
6519
6543
|
"onUpdate:modelValue": $event => model.value = $event,
|
|
6520
6544
|
"id": id.value,
|
|
@@ -7654,7 +7678,6 @@ const VListItem = genericComponent()({
|
|
|
7654
7678
|
"style": [colorStyles.value, dimensionStyles.value, props.style],
|
|
7655
7679
|
"href": link.href.value,
|
|
7656
7680
|
"tabindex": isClickable.value ? list ? -2 : 0 : undefined,
|
|
7657
|
-
"title": props.title,
|
|
7658
7681
|
"onClick": onClick,
|
|
7659
7682
|
"onKeydown": isClickable.value && !isLink.value && onKeyDown
|
|
7660
7683
|
}, {
|
|
@@ -7687,7 +7710,9 @@ const VListItem = genericComponent()({
|
|
|
7687
7710
|
}
|
|
7688
7711
|
}, {
|
|
7689
7712
|
default: () => [slots.prepend?.(slotProps.value)]
|
|
7690
|
-
})
|
|
7713
|
+
}), createVNode("div", {
|
|
7714
|
+
"class": "v-list-item__spacer"
|
|
7715
|
+
}, null)]), createVNode("div", {
|
|
7691
7716
|
"class": "v-list-item__content",
|
|
7692
7717
|
"data-no-activator": ""
|
|
7693
7718
|
}, [hasTitle && createVNode(VListItemTitle, {
|
|
@@ -7731,7 +7756,9 @@ const VListItem = genericComponent()({
|
|
|
7731
7756
|
}
|
|
7732
7757
|
}, {
|
|
7733
7758
|
default: () => [slots.append?.(slotProps.value)]
|
|
7734
|
-
})
|
|
7759
|
+
}), createVNode("div", {
|
|
7760
|
+
"class": "v-list-item__spacer"
|
|
7761
|
+
}, null)])]
|
|
7735
7762
|
}), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
|
|
7736
7763
|
});
|
|
7737
7764
|
return {};
|
|
@@ -9842,10 +9869,11 @@ const VMenu = genericComponent()({
|
|
|
9842
9869
|
}, 40);
|
|
9843
9870
|
}
|
|
9844
9871
|
});
|
|
9845
|
-
function onFocusIn(e) {
|
|
9872
|
+
async function onFocusIn(e) {
|
|
9846
9873
|
const before = e.relatedTarget;
|
|
9847
9874
|
const after = e.target;
|
|
9848
|
-
|
|
9875
|
+
await nextTick();
|
|
9876
|
+
if (isActive.value && before !== after && overlay.value?.contentEl &&
|
|
9849
9877
|
// We're the topmost menu
|
|
9850
9878
|
overlay.value?.globalTop &&
|
|
9851
9879
|
// It isn't the document or the menu body
|
|
@@ -10181,7 +10209,7 @@ const VField = genericComponent()({
|
|
|
10181
10209
|
'v-field--no-label': !label,
|
|
10182
10210
|
[`v-field--variant-${props.variant}`]: true
|
|
10183
10211
|
}, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
|
|
10184
|
-
"style": [backgroundColorStyles.value,
|
|
10212
|
+
"style": [backgroundColorStyles.value, props.style],
|
|
10185
10213
|
"onClick": onClick
|
|
10186
10214
|
}, attrs), [createVNode("div", {
|
|
10187
10215
|
"class": "v-field__overlay"
|
|
@@ -10205,7 +10233,8 @@ const VField = genericComponent()({
|
|
|
10205
10233
|
"ref": floatingLabelRef,
|
|
10206
10234
|
"class": [textColorClasses.value],
|
|
10207
10235
|
"floating": true,
|
|
10208
|
-
"for": id.value
|
|
10236
|
+
"for": id.value,
|
|
10237
|
+
"style": textColorStyles.value
|
|
10209
10238
|
}, {
|
|
10210
10239
|
default: () => [label]
|
|
10211
10240
|
}), createVNode(VFieldLabel, {
|
|
@@ -10241,7 +10270,8 @@ const VField = genericComponent()({
|
|
|
10241
10270
|
"key": "append-icon",
|
|
10242
10271
|
"name": "appendInner"
|
|
10243
10272
|
}, null)]), createVNode("div", {
|
|
10244
|
-
"class": ['v-field__outline', textColorClasses.value]
|
|
10273
|
+
"class": ['v-field__outline', textColorClasses.value],
|
|
10274
|
+
"style": textColorStyles.value
|
|
10245
10275
|
}, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
|
|
10246
10276
|
"class": "v-field__outline__start"
|
|
10247
10277
|
}, null), hasLabel.value && createVNode("div", {
|
|
@@ -10285,6 +10315,7 @@ const makeVTextFieldProps = propsFactory({
|
|
|
10285
10315
|
persistentPlaceholder: Boolean,
|
|
10286
10316
|
persistentCounter: Boolean,
|
|
10287
10317
|
suffix: String,
|
|
10318
|
+
role: String,
|
|
10288
10319
|
type: {
|
|
10289
10320
|
type: String,
|
|
10290
10321
|
default: 'text'
|
|
@@ -10409,7 +10440,7 @@ const VTextField = genericComponent()({
|
|
|
10409
10440
|
"onClick:clear": onClear,
|
|
10410
10441
|
"onClick:prependInner": props['onClick:prependInner'],
|
|
10411
10442
|
"onClick:appendInner": props['onClick:appendInner'],
|
|
10412
|
-
"role":
|
|
10443
|
+
"role": props.role
|
|
10413
10444
|
}, fieldProps, {
|
|
10414
10445
|
"id": id.value,
|
|
10415
10446
|
"active": isActive.value || isDirty.value,
|
|
@@ -10448,10 +10479,12 @@ const VTextField = genericComponent()({
|
|
|
10448
10479
|
"class": "v-text-field__prefix"
|
|
10449
10480
|
}, [createVNode("span", {
|
|
10450
10481
|
"class": "v-text-field__prefix__text"
|
|
10451
|
-
}, [props.prefix])]), createVNode("div", {
|
|
10482
|
+
}, [props.prefix])]), slots.default ? createVNode("div", {
|
|
10452
10483
|
"class": fieldClass,
|
|
10453
10484
|
"data-no-activator": ""
|
|
10454
|
-
}, [slots.default
|
|
10485
|
+
}, [slots.default(), inputNode]) : cloneVNode(inputNode, {
|
|
10486
|
+
class: fieldClass
|
|
10487
|
+
}), props.suffix && createVNode("span", {
|
|
10455
10488
|
"class": "v-text-field__suffix"
|
|
10456
10489
|
}, [createVNode("span", {
|
|
10457
10490
|
"class": "v-text-field__suffix__text"
|
|
@@ -10770,6 +10803,14 @@ function useScrolling(listRef, textFieldRef) {
|
|
|
10770
10803
|
const makeSelectProps = propsFactory({
|
|
10771
10804
|
chips: Boolean,
|
|
10772
10805
|
closableChips: Boolean,
|
|
10806
|
+
closeText: {
|
|
10807
|
+
type: String,
|
|
10808
|
+
default: '$vuetify.close'
|
|
10809
|
+
},
|
|
10810
|
+
openText: {
|
|
10811
|
+
type: String,
|
|
10812
|
+
default: '$vuetify.open'
|
|
10813
|
+
},
|
|
10773
10814
|
eager: Boolean,
|
|
10774
10815
|
hideNoData: Boolean,
|
|
10775
10816
|
hideSelected: Boolean,
|
|
@@ -10799,7 +10840,8 @@ const makeSelectProps = propsFactory({
|
|
|
10799
10840
|
const makeVSelectProps = propsFactory({
|
|
10800
10841
|
...makeSelectProps(),
|
|
10801
10842
|
...omit(makeVTextFieldProps({
|
|
10802
|
-
modelValue: null
|
|
10843
|
+
modelValue: null,
|
|
10844
|
+
role: 'button'
|
|
10803
10845
|
}), ['validationValue', 'dirty', 'appendInnerIcon']),
|
|
10804
10846
|
...makeTransitionProps({
|
|
10805
10847
|
transition: {
|
|
@@ -10824,6 +10866,7 @@ const VSelect = genericComponent()({
|
|
|
10824
10866
|
} = useLocale();
|
|
10825
10867
|
const vTextFieldRef = ref();
|
|
10826
10868
|
const vMenuRef = ref();
|
|
10869
|
+
const vVirtualScrollRef = ref();
|
|
10827
10870
|
const _menu = useProxiedModel(props, 'menu');
|
|
10828
10871
|
const menu = computed({
|
|
10829
10872
|
get: () => _menu.value,
|
|
@@ -10854,6 +10897,7 @@ const VSelect = genericComponent()({
|
|
|
10854
10897
|
});
|
|
10855
10898
|
const selected = computed(() => selections.value.map(selection => selection.props.value));
|
|
10856
10899
|
const isFocused = shallowRef(false);
|
|
10900
|
+
const label = computed(() => menu.value ? props.closeText : props.openText);
|
|
10857
10901
|
let keyboardLookupPrefix = '';
|
|
10858
10902
|
let keyboardLookupLastTime;
|
|
10859
10903
|
const displayItems = computed(() => {
|
|
@@ -10952,6 +10996,14 @@ const VSelect = genericComponent()({
|
|
|
10952
10996
|
vTextFieldRef.value.value = '';
|
|
10953
10997
|
}
|
|
10954
10998
|
}
|
|
10999
|
+
watch(menu, () => {
|
|
11000
|
+
if (!props.hideSelected && menu.value && selections.value.length) {
|
|
11001
|
+
const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
|
|
11002
|
+
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
11003
|
+
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
11004
|
+
});
|
|
11005
|
+
}
|
|
11006
|
+
});
|
|
10955
11007
|
useRender(() => {
|
|
10956
11008
|
const hasChips = !!(props.chips || slots.chip);
|
|
10957
11009
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -10980,7 +11032,9 @@ const VSelect = genericComponent()({
|
|
|
10980
11032
|
"onClick:clear": onClear,
|
|
10981
11033
|
"onMousedown:control": onMousedownControl,
|
|
10982
11034
|
"onBlur": onBlur,
|
|
10983
|
-
"onKeydown": onKeydown
|
|
11035
|
+
"onKeydown": onKeydown,
|
|
11036
|
+
"aria-label": t(label.value),
|
|
11037
|
+
"title": t(label.value)
|
|
10984
11038
|
}), {
|
|
10985
11039
|
...slots,
|
|
10986
11040
|
default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
|
|
@@ -11011,6 +11065,7 @@ const VSelect = genericComponent()({
|
|
|
11011
11065
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
|
|
11012
11066
|
"title": t(props.noDataText)
|
|
11013
11067
|
}, null)), createVNode(VVirtualScroll, {
|
|
11068
|
+
"ref": vVirtualScrollRef,
|
|
11014
11069
|
"renderless": true,
|
|
11015
11070
|
"items": displayItems.value
|
|
11016
11071
|
}, {
|
|
@@ -11243,7 +11298,8 @@ const makeVAutocompleteProps = propsFactory({
|
|
|
11243
11298
|
}),
|
|
11244
11299
|
...makeSelectProps(),
|
|
11245
11300
|
...omit(makeVTextFieldProps({
|
|
11246
|
-
modelValue: null
|
|
11301
|
+
modelValue: null,
|
|
11302
|
+
role: 'combobox'
|
|
11247
11303
|
}), ['validationValue', 'dirty', 'appendInnerIcon']),
|
|
11248
11304
|
...makeTransitionProps({
|
|
11249
11305
|
transition: false
|
|
@@ -11270,6 +11326,7 @@ const VAutocomplete = genericComponent()({
|
|
|
11270
11326
|
const isPristine = shallowRef(true);
|
|
11271
11327
|
const listHasFocus = shallowRef(false);
|
|
11272
11328
|
const vMenuRef = ref();
|
|
11329
|
+
const vVirtualScrollRef = ref();
|
|
11273
11330
|
const _menu = useProxiedModel(props, 'menu');
|
|
11274
11331
|
const menu = computed({
|
|
11275
11332
|
get: () => _menu.value,
|
|
@@ -11280,6 +11337,7 @@ const VAutocomplete = genericComponent()({
|
|
|
11280
11337
|
});
|
|
11281
11338
|
const selectionIndex = shallowRef(-1);
|
|
11282
11339
|
const color = computed(() => vTextFieldRef.value?.color);
|
|
11340
|
+
const label = computed(() => menu.value ? props.closeText : props.openText);
|
|
11283
11341
|
const {
|
|
11284
11342
|
items,
|
|
11285
11343
|
transformIn,
|
|
@@ -11359,7 +11417,7 @@ const VAutocomplete = genericComponent()({
|
|
|
11359
11417
|
menu.value = false;
|
|
11360
11418
|
}
|
|
11361
11419
|
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
|
|
11362
|
-
select(
|
|
11420
|
+
select(displayItems.value[0]);
|
|
11363
11421
|
}
|
|
11364
11422
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
11365
11423
|
listRef.value?.focus('next');
|
|
@@ -11472,6 +11530,14 @@ const VAutocomplete = genericComponent()({
|
|
|
11472
11530
|
if (val) menu.value = true;
|
|
11473
11531
|
isPristine.value = !val;
|
|
11474
11532
|
});
|
|
11533
|
+
watch(menu, () => {
|
|
11534
|
+
if (!props.hideSelected && menu.value && selections.value.length) {
|
|
11535
|
+
const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
|
|
11536
|
+
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
11537
|
+
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
11538
|
+
});
|
|
11539
|
+
}
|
|
11540
|
+
});
|
|
11475
11541
|
useRender(() => {
|
|
11476
11542
|
const hasChips = !!(props.chips || slots.chip);
|
|
11477
11543
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -11531,6 +11597,7 @@ const VAutocomplete = genericComponent()({
|
|
|
11531
11597
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
|
|
11532
11598
|
"title": t(props.noDataText)
|
|
11533
11599
|
}, null)), createVNode(VVirtualScroll, {
|
|
11600
|
+
"ref": vVirtualScrollRef,
|
|
11534
11601
|
"renderless": true,
|
|
11535
11602
|
"items": displayItems.value
|
|
11536
11603
|
}, {
|
|
@@ -11627,7 +11694,9 @@ const VAutocomplete = genericComponent()({
|
|
|
11627
11694
|
"class": "v-autocomplete__menu-icon",
|
|
11628
11695
|
"icon": props.menuIcon,
|
|
11629
11696
|
"onMousedown": onMousedownMenuIcon,
|
|
11630
|
-
"onClick": noop
|
|
11697
|
+
"onClick": noop,
|
|
11698
|
+
"aria-label": t(label.value),
|
|
11699
|
+
"title": t(label.value)
|
|
11631
11700
|
}, null) : undefined]);
|
|
11632
11701
|
}
|
|
11633
11702
|
});
|
|
@@ -14771,7 +14840,8 @@ const makeVComboboxProps = propsFactory({
|
|
|
14771
14840
|
returnObject: true
|
|
14772
14841
|
}),
|
|
14773
14842
|
...omit(makeVTextFieldProps({
|
|
14774
|
-
modelValue: null
|
|
14843
|
+
modelValue: null,
|
|
14844
|
+
role: 'combobox'
|
|
14775
14845
|
}), ['validationValue', 'dirty', 'appendInnerIcon']),
|
|
14776
14846
|
...makeTransitionProps({
|
|
14777
14847
|
transition: false
|
|
@@ -14799,6 +14869,7 @@ const VCombobox = genericComponent()({
|
|
|
14799
14869
|
const isPristine = shallowRef(true);
|
|
14800
14870
|
const listHasFocus = shallowRef(false);
|
|
14801
14871
|
const vMenuRef = ref();
|
|
14872
|
+
const vVirtualScrollRef = ref();
|
|
14802
14873
|
const _menu = useProxiedModel(props, 'menu');
|
|
14803
14874
|
const menu = computed({
|
|
14804
14875
|
get: () => _menu.value,
|
|
@@ -14810,6 +14881,7 @@ const VCombobox = genericComponent()({
|
|
|
14810
14881
|
const selectionIndex = shallowRef(-1);
|
|
14811
14882
|
let cleared = false;
|
|
14812
14883
|
const color = computed(() => vTextFieldRef.value?.color);
|
|
14884
|
+
const label = computed(() => menu.value ? props.closeText : props.openText);
|
|
14813
14885
|
const {
|
|
14814
14886
|
items,
|
|
14815
14887
|
transformIn,
|
|
@@ -15031,6 +15103,14 @@ const VCombobox = genericComponent()({
|
|
|
15031
15103
|
search.value = '';
|
|
15032
15104
|
}
|
|
15033
15105
|
});
|
|
15106
|
+
watch(menu, () => {
|
|
15107
|
+
if (!props.hideSelected && menu.value && selections.value.length) {
|
|
15108
|
+
const index = displayItems.value.findIndex(item => selections.value.some(s => item.value === s.value));
|
|
15109
|
+
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
15110
|
+
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
15111
|
+
});
|
|
15112
|
+
}
|
|
15113
|
+
});
|
|
15034
15114
|
useRender(() => {
|
|
15035
15115
|
const hasChips = !!(props.chips || slots.chip);
|
|
15036
15116
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -15089,6 +15169,7 @@ const VCombobox = genericComponent()({
|
|
|
15089
15169
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
|
|
15090
15170
|
"title": t(props.noDataText)
|
|
15091
15171
|
}, null)), createVNode(VVirtualScroll, {
|
|
15172
|
+
"ref": vVirtualScrollRef,
|
|
15092
15173
|
"renderless": true,
|
|
15093
15174
|
"items": displayItems.value
|
|
15094
15175
|
}, {
|
|
@@ -15185,7 +15266,9 @@ const VCombobox = genericComponent()({
|
|
|
15185
15266
|
"class": "v-combobox__menu-icon",
|
|
15186
15267
|
"icon": props.menuIcon,
|
|
15187
15268
|
"onMousedown": onMousedownMenuIcon,
|
|
15188
|
-
"onClick": noop
|
|
15269
|
+
"onClick": noop,
|
|
15270
|
+
"aria-label": t(label.value),
|
|
15271
|
+
"title": t(label.value)
|
|
15189
15272
|
}, null) : undefined]);
|
|
15190
15273
|
}
|
|
15191
15274
|
});
|
|
@@ -17478,7 +17561,7 @@ const VRadioGroup = genericComponent()({
|
|
|
17478
17561
|
const id = computed(() => props.id || `radio-group-${uid}`);
|
|
17479
17562
|
const model = useProxiedModel(props, 'modelValue');
|
|
17480
17563
|
useRender(() => {
|
|
17481
|
-
const [
|
|
17564
|
+
const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
|
|
17482
17565
|
const [inputProps, _1] = VInput.filterProps(props);
|
|
17483
17566
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
|
17484
17567
|
const label = slots.label ? slots.label({
|
|
@@ -17490,7 +17573,7 @@ const VRadioGroup = genericComponent()({
|
|
|
17490
17573
|
return createVNode(VInput, mergeProps({
|
|
17491
17574
|
"class": ['v-radio-group', props.class],
|
|
17492
17575
|
"style": props.style
|
|
17493
|
-
},
|
|
17576
|
+
}, rootAttrs, inputProps, {
|
|
17494
17577
|
"modelValue": model.value,
|
|
17495
17578
|
"onUpdate:modelValue": $event => model.value = $event,
|
|
17496
17579
|
"id": id.value
|
|
@@ -18467,6 +18550,7 @@ const VSwitch = genericComponent()({
|
|
|
18467
18550
|
focus,
|
|
18468
18551
|
blur
|
|
18469
18552
|
} = useFocus(props);
|
|
18553
|
+
const control = ref();
|
|
18470
18554
|
const loaderColor = computed(() => {
|
|
18471
18555
|
return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
|
|
18472
18556
|
});
|
|
@@ -18477,16 +18561,15 @@ const VSwitch = genericComponent()({
|
|
|
18477
18561
|
indeterminate.value = false;
|
|
18478
18562
|
}
|
|
18479
18563
|
}
|
|
18564
|
+
function onTrackClick(e) {
|
|
18565
|
+
e.stopPropagation();
|
|
18566
|
+
e.preventDefault();
|
|
18567
|
+
control.value?.input?.click();
|
|
18568
|
+
}
|
|
18480
18569
|
useRender(() => {
|
|
18481
|
-
const [
|
|
18570
|
+
const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
|
|
18482
18571
|
const [inputProps, _1] = VInput.filterProps(props);
|
|
18483
18572
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
|
18484
|
-
const control = ref();
|
|
18485
|
-
function onClick(e) {
|
|
18486
|
-
e.stopPropagation();
|
|
18487
|
-
e.preventDefault();
|
|
18488
|
-
control.value?.input?.click();
|
|
18489
|
-
}
|
|
18490
18573
|
return createVNode(VInput, mergeProps({
|
|
18491
18574
|
"class": ['v-switch', {
|
|
18492
18575
|
'v-switch--inset': props.inset
|
|
@@ -18494,7 +18577,7 @@ const VSwitch = genericComponent()({
|
|
|
18494
18577
|
'v-switch--indeterminate': indeterminate.value
|
|
18495
18578
|
}, loaderClasses.value, props.class],
|
|
18496
18579
|
"style": props.style
|
|
18497
|
-
},
|
|
18580
|
+
}, rootAttrs, inputProps, {
|
|
18498
18581
|
"id": id.value,
|
|
18499
18582
|
"focused": isFocused.value
|
|
18500
18583
|
}), {
|
|
@@ -18524,29 +18607,36 @@ const VSwitch = genericComponent()({
|
|
|
18524
18607
|
...slots,
|
|
18525
18608
|
default: () => createVNode("div", {
|
|
18526
18609
|
"class": "v-switch__track",
|
|
18527
|
-
"onClick":
|
|
18610
|
+
"onClick": onTrackClick
|
|
18528
18611
|
}, null),
|
|
18529
18612
|
input: _ref3 => {
|
|
18530
18613
|
let {
|
|
18531
|
-
|
|
18532
|
-
|
|
18614
|
+
inputNode,
|
|
18615
|
+
icon
|
|
18533
18616
|
} = _ref3;
|
|
18534
|
-
return createVNode("div", {
|
|
18535
|
-
"class": ['v-switch__thumb',
|
|
18536
|
-
|
|
18537
|
-
|
|
18538
|
-
|
|
18539
|
-
|
|
18540
|
-
|
|
18541
|
-
|
|
18542
|
-
|
|
18543
|
-
|
|
18544
|
-
"
|
|
18545
|
-
"
|
|
18546
|
-
"
|
|
18547
|
-
|
|
18548
|
-
|
|
18549
|
-
|
|
18617
|
+
return createVNode(Fragment, null, [inputNode, createVNode("div", {
|
|
18618
|
+
"class": ['v-switch__thumb', {
|
|
18619
|
+
'v-switch__thumb--filled': icon || props.loading
|
|
18620
|
+
}]
|
|
18621
|
+
}, [createVNode(VScaleTransition, null, {
|
|
18622
|
+
default: () => [!props.loading ? icon && createVNode(VIcon, {
|
|
18623
|
+
"key": icon,
|
|
18624
|
+
"icon": icon,
|
|
18625
|
+
"size": "x-small"
|
|
18626
|
+
}, null) : createVNode(LoaderSlot, {
|
|
18627
|
+
"name": "v-switch",
|
|
18628
|
+
"active": true,
|
|
18629
|
+
"color": isValid.value === false ? undefined : loaderColor.value
|
|
18630
|
+
}, {
|
|
18631
|
+
default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
|
|
18632
|
+
"active": slotProps.isActive,
|
|
18633
|
+
"color": slotProps.color,
|
|
18634
|
+
"indeterminate": true,
|
|
18635
|
+
"size": "16",
|
|
18636
|
+
"width": "2"
|
|
18637
|
+
}, null)
|
|
18638
|
+
})]
|
|
18639
|
+
})])]);
|
|
18550
18640
|
}
|
|
18551
18641
|
});
|
|
18552
18642
|
}
|
|
@@ -19027,8 +19117,7 @@ const VTextarea = genericComponent()({
|
|
|
19027
19117
|
"onMousedown": onControlMousedown,
|
|
19028
19118
|
"onClick:clear": onClear,
|
|
19029
19119
|
"onClick:prependInner": props['onClick:prependInner'],
|
|
19030
|
-
"onClick:appendInner": props['onClick:appendInner']
|
|
19031
|
-
"role": "textbox"
|
|
19120
|
+
"onClick:appendInner": props['onClick:appendInner']
|
|
19032
19121
|
}, fieldProps, {
|
|
19033
19122
|
"active": isActive.value || isDirty.value,
|
|
19034
19123
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
@@ -20289,7 +20378,7 @@ function createVuetify$1() {
|
|
|
20289
20378
|
date
|
|
20290
20379
|
};
|
|
20291
20380
|
}
|
|
20292
|
-
const version$1 = "3.3.
|
|
20381
|
+
const version$1 = "3.3.14";
|
|
20293
20382
|
createVuetify$1.version = version$1;
|
|
20294
20383
|
|
|
20295
20384
|
// Vue's inject() can only be used in setup
|
|
@@ -20314,7 +20403,7 @@ const createVuetify = function () {
|
|
|
20314
20403
|
...options
|
|
20315
20404
|
});
|
|
20316
20405
|
};
|
|
20317
|
-
const version = "3.3.
|
|
20406
|
+
const version = "3.3.14";
|
|
20318
20407
|
createVuetify.version = version;
|
|
20319
20408
|
|
|
20320
20409
|
export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
|