diff --git a/lerna.json b/lerna.json index 6e0adf31c12..80e0f37eda4 100644 --- a/lerna.json +++ b/lerna.json @@ -13,6 +13,6 @@ } }, "npmClient": "yarn", - "version": "3.5.14", + "version": "3.5.15", "useWorkspaces": true } diff --git a/packages/api-generator/package.json b/packages/api-generator/package.json index d6e9806e0b4..f1f2a45ee77 100755 --- a/packages/api-generator/package.json +++ b/packages/api-generator/package.json @@ -1,6 +1,6 @@ { "name": "@vuetify/api-generator", - "version": "3.5.14", + "version": "3.5.15", "private": true, "description": "", "scripts": { @@ -17,7 +17,7 @@ "ts-morph": "^20.0.0", "tsx": "^4.6.2", "vue": "^3.4.19", - "vuetify": "^3.5.14" + "vuetify": "^3.5.15" }, "devDependencies": { "@types/stringify-object": "^4.0.5" diff --git a/packages/api-generator/src/locale/en/VOverlay.json b/packages/api-generator/src/locale/en/VOverlay.json index 1178d4b16f5..36cd8a8b3c8 100644 --- a/packages/api-generator/src/locale/en/VOverlay.json +++ b/packages/api-generator/src/locale/en/VOverlay.json @@ -11,6 +11,7 @@ "zIndex": "The z-index used for the component." }, "events": { - "click:outside": "Event that fires when clicking outside an active overlay." + "click:outside": "Event that fires when clicking outside an active overlay.", + "afterLeave": "Event that fires after the overlay has finished transitioning out." } } diff --git a/packages/docs/package.json b/packages/docs/package.json index 6544051fd35..aed500e5680 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -3,7 +3,7 @@ "description": "A Vue.js project", "private": true, "author": "John Leider ", - "version": "3.5.14", + "version": "3.5.15", "repository": { "type": "git", "url": "git+https://github.com/vuetifyjs/vuetify.git", @@ -24,7 +24,7 @@ "@vercel/analytics": "^1.2.2", "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", - "@vuetify/one": "^1.5.4", + "@vuetify/one": "^1.5.5", "algoliasearch": "^4.20.0", "fflate": "^0.8.1", "isomorphic-fetch": "^3.0.0", @@ -39,7 +39,7 @@ "vue-i18n": "^9.7.1", "vue-instantsearch": "^4.12.1", "vue-prism-component": "^2.0.0", - "vuetify": "^3.5.14" + "vuetify": "^3.5.15" }, "devDependencies": { "@emailjs/browser": "^3.11.0", @@ -51,7 +51,7 @@ "@vitejs/plugin-basic-ssl": "^1.0.2", "@vitejs/plugin-vue": "^4.5.2", "@vue/compiler-sfc": "^3.4.19", - "@vuetify/api-generator": "^3.5.14", + "@vuetify/api-generator": "^3.5.15", "ajv": "^8.12.0", "async-es": "^3.2.5", "date-fns": "^2.30.0", diff --git a/packages/docs/src/components/app/bar/Bar.vue b/packages/docs/src/components/app/bar/Bar.vue index 56b90e2dea1..d3e65471c3c 100644 --- a/packages/docs/src/components/app/bar/Bar.vue +++ b/packages/docs/src/components/app/bar/Bar.vue @@ -17,28 +17,28 @@ diff --git a/packages/docs/src/components/app/bar/EnterpriseLink.vue b/packages/docs/src/components/app/bar/EnterpriseLink.vue index 0a922fed8d3..3ef7f5b43dd 100644 --- a/packages/docs/src/components/app/bar/EnterpriseLink.vue +++ b/packages/docs/src/components/app/bar/EnterpriseLink.vue @@ -1,15 +1,14 @@ diff --git a/packages/docs/src/examples/v-expansion-panels/misc-advanced.vue b/packages/docs/src/examples/v-expansion-panels/misc-advanced.vue index 025b6feb2d4..a66ba6c577e 100644 --- a/packages/docs/src/examples/v-expansion-panels/misc-advanced.vue +++ b/packages/docs/src/examples/v-expansion-panels/misc-advanced.vue @@ -39,7 +39,7 @@ - + Location @@ -50,7 +50,7 @@ > Select trip destination @@ -109,7 +109,7 @@ - + Start and end dates @@ -119,7 +119,7 @@ cols="8" > - When do you want to travel? + When do you want to travel? -### SASS variables +## SASS variables You can also use the following SASS variables to customize the border color and width: diff --git a/packages/docs/src/pages/en/styles/cursor.md b/packages/docs/src/pages/en/styles/cursor.md index bdaafdab72e..6d463ea4af3 100644 --- a/packages/docs/src/pages/en/styles/cursor.md +++ b/packages/docs/src/pages/en/styles/cursor.md @@ -8,6 +8,8 @@ related: - /styles/content/ - /styles/spacing/ - /styles/text-and-typography/ +features: + report: true --- # Cursor @@ -16,30 +18,44 @@ Utilities for controlling the cursor styling when hovering over elements. +| Class | Properties | | +| - | - | - | +| **cursor-auto** | cursor: auto; | +| **cursor-default** | cursor: default; | +| **cursor-grab** | cursor: grab; | +| **cursor-grabbing** | cursor: grabbing; | +| **cursor-help** | cursor: help; | +| **cursor-move** | cursor: move; | +| **cursor-none** | cursor: none; | +| **cursor-not-allowed** | cursor: not-allowed; | +| **cursor-pointer** | cursor: pointer; | +| **cursor-progress** | cursor: progress; | +| **cursor-text** | cursor: text; | +| **cursor-wait** | cursor: wait; { style="max-height: 420px;" fixed-header } | + + + ## Usage Apply custom cursor styling to a component or element. -| Class | Properties | | -| - | - | - | -| **cursor-auto** | cursor: auto; | | -| **cursor-default** | cursor: default; | | -| **cursor-grab** | cursor: grab; | | -| **cursor-grabbing** | cursor: grabbing; | | -| **cursor-help** | cursor: help; | | -| **cursor-move** | cursor: move; | | -| **cursor-none** | cursor: none; | | -| **cursor-not-allowed** | cursor: not-allowed; | | -| **cursor-pointer** | cursor: pointer; | | -| **cursor-progress** | cursor: progress; | | -| **cursor-text** | cursor: text; | | -| **cursor-wait** | cursor: wait; | | +## SASS variables - +You can also use the following SASS variables to customize the border color and width: -## Disable +```scss { resource="src/styles/settings.scss" } +@use 'vuetify/settings' with ( + $utilities: ( + "cursor": ( + property: cursor, + class: cursor, + values: auto default pointer wait text move help not-allowed progress grab grabbing none + ) + ) +); +``` Disable the generation of **cursor** utility classes by overwriting the utilities value: diff --git a/packages/vuetify/package.json b/packages/vuetify/package.json index 3bc8743d00f..b35d0f77da7 100755 --- a/packages/vuetify/package.json +++ b/packages/vuetify/package.json @@ -1,7 +1,7 @@ { "name": "vuetify", "description": "Vue Material Component Framework", - "version": "3.5.14", + "version": "3.5.15", "author": { "name": "John Leider", "email": "john@vuetifyjs.com" diff --git a/packages/vuetify/src/components/VBtn/VBtn.sass b/packages/vuetify/src/components/VBtn/VBtn.sass index 403645f1ae1..f5dfaa0a8d8 100644 --- a/packages/vuetify/src/components/VBtn/VBtn.sass +++ b/packages/vuetify/src/components/VBtn/VBtn.sass @@ -174,6 +174,10 @@ top: 0 width: 100% + > .v-progress-circular + width: $button-loader-size + height: $button-loader-size + .v-btn__content, .v-btn__prepend, .v-btn__append diff --git a/packages/vuetify/src/components/VBtn/VBtn.tsx b/packages/vuetify/src/components/VBtn/VBtn.tsx index 38dd91125ca..d4cb1b1e16a 100644 --- a/packages/vuetify/src/components/VBtn/VBtn.tsx +++ b/packages/vuetify/src/components/VBtn/VBtn.tsx @@ -293,7 +293,6 @@ export const VBtn = genericComponent()({ )} diff --git a/packages/vuetify/src/components/VBtn/_variables.scss b/packages/vuetify/src/components/VBtn/_variables.scss index eec2e0ef52a..e5eab86adbf 100644 --- a/packages/vuetify/src/components/VBtn/_variables.scss +++ b/packages/vuetify/src/components/VBtn/_variables.scss @@ -32,6 +32,7 @@ $button-stacked-icon-margin: 4px !default; $button-icon-border-radius: map.get(settings.$rounded, 'circle') !default; $button-icon-font-size: 1rem !default; $button-line-height: normal !default; +$button-loader-size: 1.5em !default; $button-stacked-line-height: 1.25 !default; $button-plain-opacity: .62 !default; $button-padding-ratio: 2.25 !default; diff --git a/packages/vuetify/src/components/VDataTable/composables/options.ts b/packages/vuetify/src/components/VDataTable/composables/options.ts index 06d3e2dc511..9dcab1d39fb 100644 --- a/packages/vuetify/src/components/VDataTable/composables/options.ts +++ b/packages/vuetify/src/components/VDataTable/composables/options.ts @@ -34,7 +34,7 @@ export function useOptions ({ if (deepEqual(oldOptions, options.value)) return // Reset page when searching - if (oldOptions?.search !== options.value.search) { + if (oldOptions && oldOptions.search !== options.value.search) { page.value = 1 } diff --git a/packages/vuetify/src/components/VDialog/VDialog.tsx b/packages/vuetify/src/components/VDialog/VDialog.tsx index b26bc62f7b5..b4d5dc06b93 100644 --- a/packages/vuetify/src/components/VDialog/VDialog.tsx +++ b/packages/vuetify/src/components/VDialog/VDialog.tsx @@ -42,7 +42,9 @@ export const VDialog = genericComponent()({ props: makeVDialogProps(), emits: { + 'click:outside': (e: MouseEvent) => true, 'update:modelValue': (value: boolean) => true, + afterLeave: () => true, }, setup (props, { slots }) { diff --git a/packages/vuetify/src/components/VMenu/VMenu.tsx b/packages/vuetify/src/components/VMenu/VMenu.tsx index 74f643e2015..7ac262c0b47 100644 --- a/packages/vuetify/src/components/VMenu/VMenu.tsx +++ b/packages/vuetify/src/components/VMenu/VMenu.tsx @@ -125,7 +125,9 @@ export const VMenu = genericComponent()({ function onKeydown (e: KeyboardEvent) { if (props.disabled) return - if (e.key === 'Tab') { + if (e.key === 'Tab' || (e.key === 'Enter' && !props.closeOnContentClick)) { + if (e.key === 'Enter') e.preventDefault() + const nextElement = getNextElement( focusableChildren(overlay.value?.contentEl as Element, false), e.shiftKey ? 'prev' : 'next', diff --git a/packages/vuetify/src/components/VSelectionControl/VSelectionControl.tsx b/packages/vuetify/src/components/VSelectionControl/VSelectionControl.tsx index ab11c870b28..7340ba32954 100644 --- a/packages/vuetify/src/components/VSelectionControl/VSelectionControl.tsx +++ b/packages/vuetify/src/components/VSelectionControl/VSelectionControl.tsx @@ -123,7 +123,7 @@ export function useSelectionControl ( model.value && !props.error && !props.disabled - ) ? props.color : undefined + ) ? props.color : props.baseColor })) const icon = computed(() => model.value ? props.trueIcon : props.falseIcon) diff --git a/packages/vuetify/src/composables/__tests__/rounded.spec.ts b/packages/vuetify/src/composables/__tests__/rounded.spec.ts index 010bee4ca94..4aebfd5f0a1 100644 --- a/packages/vuetify/src/composables/__tests__/rounded.spec.ts +++ b/packages/vuetify/src/composables/__tests__/rounded.spec.ts @@ -25,17 +25,18 @@ describe('rounded.ts', () => { [{}, []], [{ rounded: null }, []], [{ rounded: 1 }, []], - // // Rounded only + // Rounded only [{ rounded: true }, ['foo--rounded']], [{ rounded: '' }, ['foo--rounded']], - // // Rounded with 0 + // Rounded with 0 [{ rounded: '0' }, ['rounded-0']], [{ rounded: 0 }, ['rounded-0']], - // // Rounded with a word + [{ rounded: false }, ['rounded-0']], + // Rounded with a word [{ rounded: 'circle' }, ['rounded-circle']], [{ rounded: 'shaped' }, ['rounded-shaped']], [{ rounded: 'pill' }, ['rounded-pill']], - // // Corner and axis rounded + // Corner and axis rounded [{ rounded: 'te-xl be-lg' }, ['rounded-te-xl', 'rounded-be-lg']], ] as RoundedProps[])('should return correct rounded classes', (props: RoundedProps, expected: any) => { const { roundedClasses } = useRounded(props, 'foo') diff --git a/packages/vuetify/src/composables/rounded.ts b/packages/vuetify/src/composables/rounded.ts index 972d02f95a2..ee573bd0121 100644 --- a/packages/vuetify/src/composables/rounded.ts +++ b/packages/vuetify/src/composables/rounded.ts @@ -43,7 +43,7 @@ export function useRounded ( for (const value of String(rounded).split(' ')) { classes.push(`rounded-${value}`) } - } else if (tile) { + } else if (tile || rounded === false) { classes.push('rounded-0') } diff --git a/packages/vuetify/src/labs/VTimePicker/VTimePicker.tsx b/packages/vuetify/src/labs/VTimePicker/VTimePicker.tsx index 589444aa2ab..c108a7efe50 100644 --- a/packages/vuetify/src/labs/VTimePicker/VTimePicker.tsx +++ b/packages/vuetify/src/labs/VTimePicker/VTimePicker.tsx @@ -254,10 +254,10 @@ export const VTimePicker = genericComponent()({ case 'hour': emit('update:hour', value) break - case 'minutes': + case 'minute': emit('update:minute', value) break - case 'seconds': + case 'second': emit('update:second', value) break default: diff --git a/packages/vuetify/src/labs/VTimePicker/VTimePickerClock.tsx b/packages/vuetify/src/labs/VTimePicker/VTimePickerClock.tsx index 760e10ad30f..57f29b7a8d8 100644 --- a/packages/vuetify/src/labs/VTimePicker/VTimePickerClock.tsx +++ b/packages/vuetify/src/labs/VTimePicker/VTimePickerClock.tsx @@ -200,6 +200,10 @@ export const VTimePickerClock = genericComponent()({ function onMouseDown (e: MouseEvent | TouchEvent) { e.preventDefault() + window.addEventListener('mousemove', onDragMove) + window.addEventListener('touchmove', onDragMove) + window.addEventListener('mouseup', onMouseUp) + window.addEventListener('touchend', onMouseUp) valueOnMouseDown.value = null valueOnMouseUp.value = null isDragging.value = true @@ -208,6 +212,10 @@ export const VTimePickerClock = genericComponent()({ function onMouseUp (e: MouseEvent | TouchEvent) { e.stopPropagation() + window.removeEventListener('mousemove', onDragMove) + window.removeEventListener('touchmove', onDragMove) + window.removeEventListener('mouseup', onMouseUp) + window.removeEventListener('touchend', onMouseUp) isDragging.value = false if (valueOnMouseUp.value !== null && isAllowed(valueOnMouseUp.value)) { @@ -226,12 +234,7 @@ export const VTimePickerClock = genericComponent()({ }, ]} onMousedown={ onMouseDown } - onMouseup={ onMouseUp } - onMouseleave={ (e: MouseEvent) => (isDragging.value && onMouseUp(e)) } onTouchstart={ onMouseDown } - onTouchend={ onMouseUp } - onMousemove={ onDragMove } - onTouchmove={ onDragMove } onWheel={ (e: WheelEvent) => (props.scrollable && wheel(e)) } ref={ clockRef } > diff --git a/packages/vuetify/src/locale/sl.ts b/packages/vuetify/src/locale/sl.ts index 9f5fe98b7d3..f31c327c6b5 100644 --- a/packages/vuetify/src/locale/sl.ts +++ b/packages/vuetify/src/locale/sl.ts @@ -1,14 +1,14 @@ export default { badge: 'Značka', - open: 'Open', + open: 'Odpri', close: 'Zapri', confirmEdit: { - ok: 'OK', - cancel: 'Cancel', + ok: 'V redu', + cancel: 'Prekliči', }, dataIterator: { noResultsText: 'Ni iskanega zapisa', - loadingText: 'Nalaganje...', + loadingText: 'Nalaganje ...', }, dataTable: { itemsPerPageText: 'Vrstic na stran:', @@ -23,8 +23,8 @@ export default { sortBy: 'Razvrsti po', }, dataFooter: { - itemsPerPageText: 'Predmetov na stran:', - itemsPerPageAll: 'Vse', + itemsPerPageText: 'Elementov na stran:', + itemsPerPageAll: 'Vsi', nextPage: 'Naslednja stran', prevPage: 'Prejšnja stran', firstPage: 'Prva stran', @@ -32,18 +32,18 @@ export default { pageText: '{0}-{1} od {2}', }, dateRangeInput: { - divider: 'to', + divider: 'do', }, datePicker: { - itemsSelected: '{0} selected', + itemsSelected: '{0} izbranih', range: { - title: 'Select dates', - header: 'Enter dates', + title: 'Izberite datume', + header: 'Vnesite datume', }, - title: 'Select date', - header: 'Enter date', + title: 'Izberite datum', + header: 'Vnesite datum', input: { - placeholder: 'Enter date', + placeholder: 'Vnesite datum', }, }, noDataText: 'Ni podatkov', @@ -51,51 +51,51 @@ export default { prev: 'Prejšnji prikaz', next: 'Naslednji prikaz', ariaLabel: { - delimiter: 'Carousel slide {0} of {1}', + delimiter: 'Prikaz {0} od {1}', }, }, calendar: { moreEvents: 'Še {0}', - today: 'Today', + today: 'Danes', }, input: { - clear: 'Clear {0}', - prependAction: '{0} prepended action', - appendAction: '{0} appended action', - otp: 'Please enter OTP character {0}', + clear: 'Počisti {0}', + prependAction: 'Dejanje pred {0}', + appendAction: 'Dejanje po {0}', + otp: 'Vnesite {0}. OTP znak', }, fileInput: { counter: '{0} datotek', - counterSize: '{0} datotek ({1} skupno)', + counterSize: '{0} datotek (skupno {1})', }, timePicker: { am: 'AM', pm: 'PM', - title: 'Select Time', + title: 'Izberite čas', }, pagination: { ariaLabel: { - root: 'Navigacija po strani po strani', + root: 'Navigacija po straneh', next: 'Naslednja stran', previous: 'Prejšnja stran', page: 'Pojdi na stran {0}', currentPage: 'Trenutna stran, stran {0}', - first: 'First page', - last: 'Last page', + first: 'Prva stran', + last: 'Zadnja stran', }, }, stepper: { - next: 'Next', - prev: 'Previous', + next: 'Naprej', + prev: 'Nazaj', }, rating: { ariaLabel: { - item: 'Rating {0} of {1}', + item: 'Ocena {0} od {1}', }, }, - loading: 'Loading...', + loading: 'Nalaganje ...', infiniteScroll: { - loadMore: 'Load more', - empty: 'No more', + loadMore: 'Naloži več', + empty: 'Konec', }, } diff --git a/yarn.lock b/yarn.lock index daa8202b6d3..8d795821797 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3957,10 +3957,10 @@ find-cache-dir "^3.3.2" upath "^2.0.1" -"@vuetify/one@^1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@vuetify/one/-/one-1.5.4.tgz#c312eb99256c50d60c7099c2d445d949e2141887" - integrity sha512-gfgRqa2957pKAxqNH5oN1LgKxPh7NTNo+ZWZkjqNnpy/p19b8YVS9ox/GxvkEIT/LvMWJtQDdvy92+vmRCzpng== +"@vuetify/one@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@vuetify/one/-/one-1.5.5.tgz#d47afc9cfc85905744462e10f3e2c01e5de9e2cc" + integrity sha512-JJJ7Is+qidPwv2+vYI1Jyct2r3KbM4SlxVEIFen2NCU5JLHM2LPTdxl2OzKNBcSF6jZI3w7reP+J5S3m5QML1w== "@vueuse/head@^1.3.1": version "1.3.1"