vuetify 2.5.9 → 2.5.13
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 +58 -66
- package/dist/json/tags.json +0 -2
- package/dist/json/web-types.json +89 -146
- package/dist/vuetify.css +37 -24
- package/dist/vuetify.css.map +1 -1
- package/dist/vuetify.js +374 -177
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VAppBar/VAppBar.js +3 -0
- package/es5/components/VAppBar/VAppBar.js.map +1 -1
- package/es5/components/VAutocomplete/VAutocomplete.js +20 -2
- package/es5/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/es5/components/VCalendar/mixins/calendar-with-events.js +4 -2
- package/es5/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
- package/es5/components/VCalendar/mixins/mouse.js +19 -0
- package/es5/components/VCalendar/mixins/mouse.js.map +1 -1
- package/es5/components/VCalendar/util/timestamp.js +2 -2
- package/es5/components/VCalendar/util/timestamp.js.map +1 -1
- package/es5/components/VCombobox/VCombobox.js +0 -5
- package/es5/components/VCombobox/VCombobox.js.map +1 -1
- package/es5/components/VDataTable/VDataTableHeaderMobile.js +2 -2
- package/es5/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
- package/es5/components/VDialog/VDialog.js +4 -2
- package/es5/components/VDialog/VDialog.js.map +1 -1
- package/es5/components/VList/VListItem.js +8 -1
- package/es5/components/VList/VListItem.js.map +1 -1
- package/es5/components/VOverlay/VOverlay.js +1 -0
- package/es5/components/VOverlay/VOverlay.js.map +1 -1
- package/es5/components/VRadioGroup/VRadioGroup.js +7 -0
- package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/es5/components/VRangeSlider/VRangeSlider.js +4 -1
- package/es5/components/VRangeSlider/VRangeSlider.js.map +1 -1
- package/es5/components/VSelect/VSelect.js +1 -1
- package/es5/components/VSelect/VSelect.js.map +1 -1
- package/es5/components/VSlideGroup/VSlideGroup.js +93 -37
- package/es5/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/es5/components/VTabs/VTab.js +15 -4
- package/es5/components/VTabs/VTab.js.map +1 -1
- package/es5/components/VTabs/VTabsBar.js +1 -1
- package/es5/components/VTabs/VTabsBar.js.map +1 -1
- package/es5/components/VTextarea/VTextarea.js +11 -2
- package/es5/components/VTextarea/VTextarea.js.map +1 -1
- package/es5/components/VTooltip/VTooltip.js +2 -5
- package/es5/components/VTooltip/VTooltip.js.map +1 -1
- package/es5/components/VTreeview/VTreeview.js +1 -1
- package/es5/components/VTreeview/VTreeview.js.map +1 -1
- package/es5/components/transitions/createTransition.js +1 -5
- package/es5/components/transitions/createTransition.js.map +1 -1
- package/es5/directives/click-outside/index.js +19 -10
- package/es5/directives/click-outside/index.js.map +1 -1
- package/es5/directives/intersect/index.js +12 -11
- package/es5/directives/intersect/index.js.map +1 -1
- package/es5/directives/mutate/index.js +7 -6
- package/es5/directives/mutate/index.js.map +1 -1
- package/es5/directives/resize/index.js +8 -7
- package/es5/directives/resize/index.js.map +1 -1
- package/es5/directives/ripple/index.js +2 -3
- package/es5/directives/ripple/index.js.map +1 -1
- package/es5/directives/scroll/index.js +13 -10
- package/es5/directives/scroll/index.js.map +1 -1
- package/es5/framework.js +1 -1
- package/es5/locale/fr.js +1 -1
- package/es5/locale/fr.js.map +1 -1
- package/es5/mixins/detachable/index.js +32 -14
- package/es5/mixins/detachable/index.js.map +1 -1
- package/es5/mixins/intersectable/index.js +5 -2
- package/es5/mixins/intersectable/index.js.map +1 -1
- package/es5/mixins/menuable/index.js +5 -5
- package/es5/mixins/menuable/index.js.map +1 -1
- package/es5/mixins/overlayable/index.js +22 -35
- package/es5/mixins/overlayable/index.js.map +1 -1
- package/es5/mixins/routable/index.js +9 -3
- package/es5/mixins/routable/index.js.map +1 -1
- package/es5/services/goto/index.js +3 -1
- package/es5/services/goto/index.js.map +1 -1
- package/es5/util/helpers.js +23 -0
- package/es5/util/helpers.js.map +1 -1
- package/lib/components/VAppBar/VAppBar.js +4 -0
- package/lib/components/VAppBar/VAppBar.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +18 -2
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VCalendar/mixins/calendar-with-events.js +4 -2
- package/lib/components/VCalendar/mixins/calendar-with-events.js.map +1 -1
- package/lib/components/VCalendar/mixins/mouse.js +19 -0
- package/lib/components/VCalendar/mixins/mouse.js.map +1 -1
- package/lib/components/VCalendar/util/timestamp.js +2 -2
- package/lib/components/VCalendar/util/timestamp.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +0 -5
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaderMobile.js +2 -2
- package/lib/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
- package/lib/components/VDialog/VDialog.js +5 -2
- package/lib/components/VDialog/VDialog.js.map +1 -1
- package/lib/components/VList/VListItem.js +9 -1
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.js +1 -0
- package/lib/components/VOverlay/VOverlay.js.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.js +9 -0
- package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/lib/components/VRangeSlider/VRangeSlider.js +4 -1
- package/lib/components/VRangeSlider/VRangeSlider.js.map +1 -1
- package/lib/components/VSelect/VSelect.js +1 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.js +63 -40
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTabs/VTab.js +16 -6
- package/lib/components/VTabs/VTab.js.map +1 -1
- package/lib/components/VTabs/VTabsBar.js +1 -1
- package/lib/components/VTabs/VTabsBar.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.js +8 -0
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTooltip/VTooltip.js +2 -5
- package/lib/components/VTooltip/VTooltip.js.map +1 -1
- package/lib/components/VTreeview/VTreeview.js +1 -1
- package/lib/components/VTreeview/VTreeview.js.map +1 -1
- package/lib/components/transitions/createTransition.js +1 -5
- package/lib/components/transitions/createTransition.js.map +1 -1
- package/lib/directives/click-outside/index.js +20 -10
- package/lib/directives/click-outside/index.js.map +1 -1
- package/lib/directives/intersect/index.js +12 -10
- package/lib/directives/intersect/index.js.map +1 -1
- package/lib/directives/mutate/index.js +7 -6
- package/lib/directives/mutate/index.js.map +1 -1
- package/lib/directives/resize/index.js +6 -5
- package/lib/directives/resize/index.js.map +1 -1
- package/lib/directives/ripple/index.js +2 -3
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/directives/scroll/index.js +9 -6
- package/lib/directives/scroll/index.js.map +1 -1
- package/lib/framework.js +1 -1
- package/lib/locale/fr.js +1 -1
- package/lib/locale/fr.js.map +1 -1
- package/lib/mixins/detachable/index.js +28 -13
- package/lib/mixins/detachable/index.js.map +1 -1
- package/lib/mixins/intersectable/index.js +5 -2
- package/lib/mixins/intersectable/index.js.map +1 -1
- package/lib/mixins/menuable/index.js +4 -4
- package/lib/mixins/menuable/index.js.map +1 -1
- package/lib/mixins/overlayable/index.js +23 -36
- package/lib/mixins/overlayable/index.js.map +1 -1
- package/lib/mixins/routable/index.js +12 -3
- package/lib/mixins/routable/index.js.map +1 -1
- package/lib/services/goto/index.js +3 -1
- package/lib/services/goto/index.js.map +1 -1
- package/lib/util/helpers.js +21 -0
- package/lib/util/helpers.js.map +1 -1
- package/package.json +2 -3
- package/src/components/VAppBar/VAppBar.ts +3 -0
- package/src/components/VAutocomplete/VAutocomplete.ts +15 -2
- package/src/components/VCalendar/mixins/calendar-with-events.sass +7 -1
- package/src/components/VCalendar/mixins/calendar-with-events.ts +3 -3
- package/src/components/VCalendar/mixins/mouse.ts +21 -0
- package/src/components/VCalendar/util/__tests__/events.spec.ts +1 -1
- package/src/components/VCalendar/util/timestamp.ts +2 -2
- package/src/components/VCombobox/VCombobox.ts +0 -5
- package/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +113 -0
- package/src/components/VCombobox/__tests__/VCombobox.spec.ts +30 -0
- package/src/components/VDataTable/VDataTableHeaderMobile.ts +3 -1
- package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +0 -20
- package/src/components/VDialog/VDialog.ts +4 -2
- package/src/components/VImg/__tests__/VImg.spec.ts +1 -1
- package/src/components/VList/VListItem.sass +2 -1
- package/src/components/VList/VListItem.ts +7 -1
- package/src/components/VList/__tests__/VListItem.spec.ts +16 -0
- package/src/components/VOverlay/VOverlay.ts +1 -0
- package/src/components/VRadioGroup/VRadioGroup.ts +8 -0
- package/src/components/VRangeSlider/VRangeSlider.ts +3 -1
- package/src/components/VSelect/VSelect.ts +1 -1
- package/src/components/VSlideGroup/VSlideGroup.ts +75 -35
- package/src/components/VSlideGroup/__tests__/VSlideGroup.spec.ts +1 -3
- package/src/components/VSnackbar/VSnackbar.sass +2 -0
- package/src/components/VStepper/VStepper.sass +5 -1
- package/src/components/VStepper/_variables.scss +2 -1
- package/src/components/VTabs/VTab.ts +14 -4
- package/src/components/VTabs/VTabs.sass +5 -2
- package/src/components/VTabs/VTabsBar.ts +2 -2
- package/src/components/VTextarea/VTextarea.ts +7 -0
- package/src/components/VTooltip/VTooltip.ts +2 -5
- package/src/components/VTreeview/VTreeview.ts +1 -1
- package/src/components/transitions/createTransition.ts +1 -5
- package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +9 -6
- package/src/directives/click-outside/__tests__/click-outside.spec.ts +7 -4
- package/src/directives/click-outside/index.ts +19 -10
- package/src/directives/intersect/__tests__/intersect.spec.ts +13 -10
- package/src/directives/intersect/index.ts +13 -12
- package/src/directives/mutate/__tests__/mutate.spec.ts +36 -17
- package/src/directives/mutate/index.ts +8 -7
- package/src/directives/resize/__tests__/resize.spec.ts +4 -4
- package/src/directives/resize/index.ts +10 -5
- package/src/directives/ripple/index.ts +3 -5
- package/src/directives/scroll/__tests__/scroll.spec.ts +9 -9
- package/src/directives/scroll/index.ts +8 -7
- package/src/globals.d.ts +10 -11
- package/src/locale/fr.ts +1 -1
- package/src/mixins/detachable/index.ts +32 -15
- package/src/mixins/intersectable/index.ts +5 -2
- package/src/mixins/menuable/index.ts +4 -4
- package/src/mixins/overlayable/index.ts +24 -35
- package/src/mixins/routable/__tests__/routable.spec.ts +82 -5
- package/src/mixins/routable/index.ts +10 -3
- package/src/services/goto/index.ts +6 -1
- package/src/styles/components/_selection-controls.sass +4 -7
- package/src/styles/generic/_transitions.scss +219 -215
- package/src/styles/settings/_variables.scss +7 -7
- package/src/util/helpers.ts +22 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Components
|
|
2
2
|
import VOverlay from '../../components/VOverlay'; // Utilities
|
|
3
3
|
|
|
4
|
-
import { keyCodes, addOnceEventListener, addPassiveEventListener, getZIndex } from '../../util/helpers'; // Types
|
|
4
|
+
import { keyCodes, addOnceEventListener, addPassiveEventListener, getZIndex, composedPath } from '../../util/helpers'; // Types
|
|
5
5
|
|
|
6
6
|
import Vue from 'vue';
|
|
7
7
|
/* @vue/component */
|
|
@@ -108,20 +108,31 @@ export default Vue.extend().extend({
|
|
|
108
108
|
hasScrollbar(el) {
|
|
109
109
|
if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
|
|
110
110
|
const style = window.getComputedStyle(el);
|
|
111
|
-
return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight;
|
|
111
|
+
return (['auto', 'scroll'].includes(style.overflowY) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight || ['auto', 'scroll'].includes(style.overflowX) && el.scrollWidth > el.clientWidth;
|
|
112
112
|
},
|
|
113
113
|
|
|
114
|
-
shouldScroll(el,
|
|
114
|
+
shouldScroll(el, e) {
|
|
115
115
|
if (el.hasAttribute('data-app')) return false;
|
|
116
|
-
const
|
|
117
|
-
const
|
|
116
|
+
const dir = e.shiftKey || e.deltaX ? 'x' : 'y';
|
|
117
|
+
const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY;
|
|
118
|
+
let alreadyAtStart;
|
|
119
|
+
let alreadyAtEnd;
|
|
120
|
+
|
|
121
|
+
if (dir === 'y') {
|
|
122
|
+
alreadyAtStart = el.scrollTop === 0;
|
|
123
|
+
alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight;
|
|
124
|
+
} else {
|
|
125
|
+
alreadyAtStart = el.scrollLeft === 0;
|
|
126
|
+
alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth;
|
|
127
|
+
}
|
|
128
|
+
|
|
118
129
|
const scrollingUp = delta < 0;
|
|
119
130
|
const scrollingDown = delta > 0;
|
|
120
|
-
if (!
|
|
121
|
-
if (!
|
|
131
|
+
if (!alreadyAtStart && scrollingUp) return true;
|
|
132
|
+
if (!alreadyAtEnd && scrollingDown) return true;
|
|
122
133
|
|
|
123
|
-
if (
|
|
124
|
-
return this.shouldScroll(el.parentNode,
|
|
134
|
+
if (alreadyAtStart || alreadyAtEnd) {
|
|
135
|
+
return this.shouldScroll(el.parentNode, e);
|
|
125
136
|
}
|
|
126
137
|
|
|
127
138
|
return false;
|
|
@@ -138,8 +149,7 @@ export default Vue.extend().extend({
|
|
|
138
149
|
},
|
|
139
150
|
|
|
140
151
|
checkPath(e) {
|
|
141
|
-
const path =
|
|
142
|
-
const delta = e.deltaY;
|
|
152
|
+
const path = composedPath(e);
|
|
143
153
|
|
|
144
154
|
if (e.type === 'keydown' && path[0] === document.body) {
|
|
145
155
|
const dialog = this.$refs.dialog; // getSelection returns null in firefox in some edge cases, can be ignored
|
|
@@ -147,7 +157,7 @@ export default Vue.extend().extend({
|
|
|
147
157
|
const selected = window.getSelection().anchorNode;
|
|
148
158
|
|
|
149
159
|
if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
|
|
150
|
-
return !this.shouldScroll(dialog,
|
|
160
|
+
return !this.shouldScroll(dialog, e);
|
|
151
161
|
}
|
|
152
162
|
|
|
153
163
|
return true;
|
|
@@ -158,35 +168,12 @@ export default Vue.extend().extend({
|
|
|
158
168
|
if (el === document) return true;
|
|
159
169
|
if (el === document.documentElement) return true;
|
|
160
170
|
if (el === this.$refs.content) return true;
|
|
161
|
-
if (this.hasScrollbar(el)) return !this.shouldScroll(el,
|
|
171
|
+
if (this.hasScrollbar(el)) return !this.shouldScroll(el, e);
|
|
162
172
|
}
|
|
163
173
|
|
|
164
174
|
return true;
|
|
165
175
|
},
|
|
166
176
|
|
|
167
|
-
/**
|
|
168
|
-
* Polyfill for Event.prototype.composedPath
|
|
169
|
-
*/
|
|
170
|
-
composedPath(e) {
|
|
171
|
-
if (e.composedPath) return e.composedPath();
|
|
172
|
-
const path = [];
|
|
173
|
-
let el = e.target;
|
|
174
|
-
|
|
175
|
-
while (el) {
|
|
176
|
-
path.push(el);
|
|
177
|
-
|
|
178
|
-
if (el.tagName === 'HTML') {
|
|
179
|
-
path.push(document);
|
|
180
|
-
path.push(window);
|
|
181
|
-
return path;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
el = el.parentElement;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return path;
|
|
188
|
-
},
|
|
189
|
-
|
|
190
177
|
hideScroll() {
|
|
191
178
|
if (this.$vuetify.breakpoint.smAndDown) {
|
|
192
179
|
document.documentElement.classList.add('overflow-y-hidden');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mixins/overlayable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VOverlay from '../../components/VOverlay'\n\n// Utilities\nimport {\n keyCodes,\n addOnceEventListener,\n addPassiveEventListener,\n getZIndex,\n} from '../../util/helpers'\n\n// Types\nimport Vue from 'vue'\n\ninterface Toggleable extends Vue {\n isActive?: boolean\n}\n\ninterface Stackable extends Vue {\n activeZIndex: number\n}\n\ninterface options {\n absolute?: boolean\n $refs: {\n dialog?: HTMLElement\n content?: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default Vue.extend<Vue & Toggleable & Stackable & options>().extend({\n name: 'overlayable',\n\n props: {\n hideOverlay: Boolean,\n overlayColor: String,\n overlayOpacity: [Number, String],\n },\n\n data () {\n return {\n animationFrame: 0,\n overlay: null as InstanceType<typeof VOverlay> | null,\n }\n },\n\n watch: {\n hideOverlay (value) {\n if (!this.isActive) return\n\n if (value) this.removeOverlay()\n else this.genOverlay()\n },\n },\n\n beforeDestroy () {\n this.removeOverlay()\n },\n\n methods: {\n createOverlay () {\n const overlay = new VOverlay({\n propsData: {\n absolute: this.absolute,\n value: false,\n color: this.overlayColor,\n opacity: this.overlayOpacity,\n },\n })\n\n overlay.$mount()\n\n const parent = this.absolute\n ? this.$el.parentNode\n : document.querySelector('[data-app]')\n\n parent && parent.insertBefore(overlay.$el, parent.firstChild)\n\n this.overlay = overlay\n },\n genOverlay () {\n this.hideScroll()\n\n if (this.hideOverlay) return\n\n if (!this.overlay) this.createOverlay()\n\n this.animationFrame = requestAnimationFrame(() => {\n if (!this.overlay) return\n\n if (this.activeZIndex !== undefined) {\n this.overlay.zIndex = String(this.activeZIndex - 1)\n } else if (this.$el) {\n this.overlay.zIndex = getZIndex(this.$el)\n }\n\n this.overlay.value = true\n })\n\n return true\n },\n /** removeOverlay(false) will not restore the scollbar afterwards */\n removeOverlay (showScroll = true) {\n if (this.overlay) {\n addOnceEventListener(this.overlay.$el, 'transitionend', () => {\n if (\n !this.overlay ||\n !this.overlay.$el ||\n !this.overlay.$el.parentNode ||\n this.overlay.value ||\n this.isActive\n ) return\n\n this.overlay.$el.parentNode.removeChild(this.overlay.$el)\n this.overlay.$destroy()\n this.overlay = null\n })\n\n // Cancel animation frame in case\n // overlay is removed before it\n // has finished its animation\n cancelAnimationFrame(this.animationFrame)\n\n this.overlay.value = false\n }\n\n showScroll && this.showScroll()\n },\n scrollListener (e: WheelEvent & KeyboardEvent) {\n if (e.type === 'keydown') {\n if (\n ['INPUT', 'TEXTAREA', 'SELECT'].includes((e.target as Element).tagName) ||\n // https://github.com/vuetifyjs/vuetify/issues/4715\n (e.target as HTMLElement).isContentEditable\n ) return\n\n const up = [keyCodes.up, keyCodes.pageup]\n const down = [keyCodes.down, keyCodes.pagedown]\n\n if (up.includes(e.keyCode)) {\n (e as any).deltaY = -1\n } else if (down.includes(e.keyCode)) {\n (e as any).deltaY = 1\n } else {\n return\n }\n }\n\n if (e.target === this.overlay ||\n (e.type !== 'keydown' && e.target === document.body) ||\n this.checkPath(e)) e.preventDefault()\n },\n hasScrollbar (el?: Element) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ['auto', 'scroll'].includes(style.overflowY!) && el.scrollHeight > el.clientHeight\n },\n shouldScroll (el: Element, delta: number): boolean {\n if (el.hasAttribute('data-app')) return false\n\n const alreadyAtTop = el.scrollTop === 0\n const alreadyAtBottom = el.scrollTop + el.clientHeight === el.scrollHeight\n const scrollingUp = delta < 0\n const scrollingDown = delta > 0\n\n if (!alreadyAtTop && scrollingUp) return true\n if (!alreadyAtBottom && scrollingDown) return true\n if ((alreadyAtTop || alreadyAtBottom)) {\n return this.shouldScroll(el.parentNode as Element, delta)\n }\n\n return false\n },\n isInside (el: Element, parent: Element): boolean {\n if (el === parent) {\n return true\n } else if (el === null || el === document.body) {\n return false\n } else {\n return this.isInside(el.parentNode as Element, parent)\n }\n },\n checkPath (e: WheelEvent) {\n const path = e.path || this.composedPath(e)\n const delta = e.deltaY\n\n if (e.type === 'keydown' && path[0] === document.body) {\n const dialog = this.$refs.dialog\n // getSelection returns null in firefox in some edge cases, can be ignored\n const selected = window.getSelection()!.anchorNode as Element\n if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n return !this.shouldScroll(dialog, delta)\n }\n return true\n }\n\n for (let index = 0; index < path.length; index++) {\n const el = path[index]\n\n if (el === document) return true\n if (el === document.documentElement) return true\n if (el === this.$refs.content) return true\n\n if (this.hasScrollbar(el as Element)) return !this.shouldScroll(el as Element, delta)\n }\n\n return true\n },\n /**\n * Polyfill for Event.prototype.composedPath\n */\n composedPath (e: WheelEvent): EventTarget[] {\n if (e.composedPath) return e.composedPath()\n\n const path = []\n let el = e.target as Element\n\n while (el) {\n path.push(el)\n\n if (el.tagName === 'HTML') {\n path.push(document)\n path.push(window)\n\n return path\n }\n\n el = el.parentElement!\n }\n return path\n },\n hideScroll () {\n if (this.$vuetify.breakpoint.smAndDown) {\n document.documentElement!.classList.add('overflow-y-hidden')\n } else {\n addPassiveEventListener(window, 'wheel', this.scrollListener as EventHandlerNonNull, { passive: false })\n window.addEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n }\n },\n showScroll () {\n document.documentElement!.classList.remove('overflow-y-hidden')\n window.removeEventListener('wheel', this.scrollListener as EventHandlerNonNull)\n window.removeEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/mixins/overlayable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VOverlay from '../../components/VOverlay'\n\n// Utilities\nimport {\n keyCodes,\n addOnceEventListener,\n addPassiveEventListener,\n getZIndex,\n composedPath,\n} from '../../util/helpers'\n\n// Types\nimport Vue from 'vue'\n\ninterface Toggleable extends Vue {\n isActive?: boolean\n}\n\ninterface Stackable extends Vue {\n activeZIndex: number\n}\n\ninterface options {\n absolute?: boolean\n $refs: {\n dialog?: HTMLElement\n content?: HTMLElement\n }\n}\n\n/* @vue/component */\nexport default Vue.extend<Vue & Toggleable & Stackable & options>().extend({\n name: 'overlayable',\n\n props: {\n hideOverlay: Boolean,\n overlayColor: String,\n overlayOpacity: [Number, String],\n },\n\n data () {\n return {\n animationFrame: 0,\n overlay: null as InstanceType<typeof VOverlay> | null,\n }\n },\n\n watch: {\n hideOverlay (value) {\n if (!this.isActive) return\n\n if (value) this.removeOverlay()\n else this.genOverlay()\n },\n },\n\n beforeDestroy () {\n this.removeOverlay()\n },\n\n methods: {\n createOverlay () {\n const overlay = new VOverlay({\n propsData: {\n absolute: this.absolute,\n value: false,\n color: this.overlayColor,\n opacity: this.overlayOpacity,\n },\n })\n\n overlay.$mount()\n\n const parent = this.absolute\n ? this.$el.parentNode\n : document.querySelector('[data-app]')\n\n parent && parent.insertBefore(overlay.$el, parent.firstChild)\n\n this.overlay = overlay\n },\n genOverlay () {\n this.hideScroll()\n\n if (this.hideOverlay) return\n\n if (!this.overlay) this.createOverlay()\n\n this.animationFrame = requestAnimationFrame(() => {\n if (!this.overlay) return\n\n if (this.activeZIndex !== undefined) {\n this.overlay.zIndex = String(this.activeZIndex - 1)\n } else if (this.$el) {\n this.overlay.zIndex = getZIndex(this.$el)\n }\n\n this.overlay.value = true\n })\n\n return true\n },\n /** removeOverlay(false) will not restore the scollbar afterwards */\n removeOverlay (showScroll = true) {\n if (this.overlay) {\n addOnceEventListener(this.overlay.$el, 'transitionend', () => {\n if (\n !this.overlay ||\n !this.overlay.$el ||\n !this.overlay.$el.parentNode ||\n this.overlay.value ||\n this.isActive\n ) return\n\n this.overlay.$el.parentNode.removeChild(this.overlay.$el)\n this.overlay.$destroy()\n this.overlay = null\n })\n\n // Cancel animation frame in case\n // overlay is removed before it\n // has finished its animation\n cancelAnimationFrame(this.animationFrame)\n\n this.overlay.value = false\n }\n\n showScroll && this.showScroll()\n },\n scrollListener (e: WheelEvent & KeyboardEvent) {\n if (e.type === 'keydown') {\n if (\n ['INPUT', 'TEXTAREA', 'SELECT'].includes((e.target as Element).tagName) ||\n // https://github.com/vuetifyjs/vuetify/issues/4715\n (e.target as HTMLElement).isContentEditable\n ) return\n\n const up = [keyCodes.up, keyCodes.pageup]\n const down = [keyCodes.down, keyCodes.pagedown]\n\n if (up.includes(e.keyCode)) {\n (e as any).deltaY = -1\n } else if (down.includes(e.keyCode)) {\n (e as any).deltaY = 1\n } else {\n return\n }\n }\n\n if (e.target === this.overlay ||\n (e.type !== 'keydown' && e.target === document.body) ||\n this.checkPath(e)) e.preventDefault()\n },\n hasScrollbar (el?: Element) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return ((['auto', 'scroll'].includes(style.overflowY!) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight) ||\n ((['auto', 'scroll'].includes(style.overflowX!)) && el.scrollWidth > el.clientWidth)\n },\n shouldScroll (el: Element, e: WheelEvent): boolean {\n if (el.hasAttribute('data-app')) return false\n\n const dir = e.shiftKey || e.deltaX ? 'x' : 'y'\n const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY\n\n let alreadyAtStart: boolean\n let alreadyAtEnd: boolean\n if (dir === 'y') {\n alreadyAtStart = el.scrollTop === 0\n alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight\n } else {\n alreadyAtStart = el.scrollLeft === 0\n alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth\n }\n\n const scrollingUp = delta < 0\n const scrollingDown = delta > 0\n\n if (!alreadyAtStart && scrollingUp) return true\n if (!alreadyAtEnd && scrollingDown) return true\n if ((alreadyAtStart || alreadyAtEnd)) {\n return this.shouldScroll(el.parentNode as Element, e)\n }\n\n return false\n },\n isInside (el: Element, parent: Element): boolean {\n if (el === parent) {\n return true\n } else if (el === null || el === document.body) {\n return false\n } else {\n return this.isInside(el.parentNode as Element, parent)\n }\n },\n checkPath (e: WheelEvent) {\n const path = composedPath(e)\n\n if (e.type === 'keydown' && path[0] === document.body) {\n const dialog = this.$refs.dialog\n // getSelection returns null in firefox in some edge cases, can be ignored\n const selected = window.getSelection()!.anchorNode as Element\n if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {\n return !this.shouldScroll(dialog, e)\n }\n return true\n }\n\n for (let index = 0; index < path.length; index++) {\n const el = path[index]\n\n if (el === document) return true\n if (el === document.documentElement) return true\n if (el === this.$refs.content) return true\n\n if (this.hasScrollbar(el as Element)) return !this.shouldScroll(el as Element, e)\n }\n\n return true\n },\n hideScroll () {\n if (this.$vuetify.breakpoint.smAndDown) {\n document.documentElement!.classList.add('overflow-y-hidden')\n } else {\n addPassiveEventListener(window, 'wheel', this.scrollListener as EventHandlerNonNull, { passive: false })\n window.addEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n }\n },\n showScroll () {\n document.documentElement!.classList.remove('overflow-y-hidden')\n window.removeEventListener('wheel', this.scrollListener as EventHandlerNonNull)\n window.removeEventListener('keydown', this.scrollListener as EventHandlerNonNull)\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
|
|
@@ -63,6 +63,11 @@ export default Vue.extend({
|
|
|
63
63
|
watch: {
|
|
64
64
|
$route: 'onRouteChange'
|
|
65
65
|
},
|
|
66
|
+
|
|
67
|
+
mounted() {
|
|
68
|
+
this.onRouteChange();
|
|
69
|
+
},
|
|
70
|
+
|
|
66
71
|
methods: {
|
|
67
72
|
click(e) {
|
|
68
73
|
this.$emit('click', e);
|
|
@@ -128,16 +133,20 @@ export default Vue.extend({
|
|
|
128
133
|
onRouteChange() {
|
|
129
134
|
if (!this.to || !this.$refs.link || !this.$route) return;
|
|
130
135
|
const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim();
|
|
131
|
-
const
|
|
136
|
+
const exactActiveClass = `${this.exactActiveClass} ${this.proxyClass || ''}`.trim() || activeClass;
|
|
137
|
+
const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass);
|
|
132
138
|
this.$nextTick(() => {
|
|
133
139
|
/* istanbul ignore else */
|
|
134
|
-
if (getObjectValueByPath(this.$refs.link, path)) {
|
|
140
|
+
if (!getObjectValueByPath(this.$refs.link, path) === this.isActive) {
|
|
135
141
|
this.toggle();
|
|
136
142
|
}
|
|
137
143
|
});
|
|
138
144
|
},
|
|
139
145
|
|
|
140
|
-
toggle
|
|
146
|
+
toggle() {
|
|
147
|
+
this.isActive = !this.isActive;
|
|
148
|
+
}
|
|
149
|
+
|
|
141
150
|
}
|
|
142
151
|
});
|
|
143
152
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mixins/routable/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAyC,KAAzC,C,CAEA;;AACA,OAAO,MAAP,MAAsC,yBAAtC,C,CAEA;;AACA,SAAS,oBAAT,QAAqC,oBAArC;AAEA,eAAe,GAAG,CAAC,MAAJ,CAAW;AACxB,EAAA,IAAI,EAAE,UADkB;AAGxB,EAAA,UAAU,EAAE;AACV,IAAA;AADU,GAHY;AAOxB,EAAA,KAAK,EAAE;AACL,IAAA,WAAW,EAAE,MADR;AAEL,IAAA,MAAM,EAAE,OAFH;AAGL,IAAA,QAAQ,EAAE,OAHL;AAIL,IAAA,KAAK,EAAE;AACL,MAAA,IAAI,EAAE,OADD;AAEL,MAAA,OAAO,EAAE;AAFJ,KAJF;AAQL,IAAA,SAAS,EAAE,OARN;AASL,IAAA,gBAAgB,EAAE,MATb;AAUL,IAAA,IAAI,EAAE,OAVD;AAWL,IAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,CAXD;AAYL,IAAA,EAAE,EAAE,CAAC,MAAD,EAAS,MAAT,CAZC;AAaL,IAAA,IAAI,EAAE,OAbD;AAcL,IAAA,OAAO,EAAE,OAdJ;AAeL,IAAA,MAAM,EAAE;AACN,MAAA,IAAI,EAAE,CAAC,OAAD,EAAU,MAAV,CADA;AAEN,MAAA,OAAO,EAAE;AAFH,KAfH;AAmBL,IAAA,GAAG,EAAE,MAnBA;AAoBL,IAAA,MAAM,EAAE;AApBH,GAPiB;AA8BxB,EAAA,IAAI,EAAE,OAAO;AACX,IAAA,QAAQ,EAAE,KADC;AAEX,IAAA,UAAU,EAAE;AAFD,GAAP,CA9BkB;AAmCxB,EAAA,QAAQ,EAAE;AACR,IAAA,OAAO,GAAA;AACL,YAAM,OAAO,GAA4B,EAAzC;AAEA,UAAI,KAAK,EAAT,EAAa,OAAO,OAAP;AAEb,UAAI,KAAK,WAAT,EAAsB,OAAO,CAAC,KAAK,WAAN,CAAP,GAA4B,KAAK,QAAjC;AACtB,UAAI,KAAK,UAAT,EAAqB,OAAO,CAAC,KAAK,UAAN,CAAP,GAA2B,KAAK,QAAhC;AAErB,aAAO,OAAP;AACD,KAVO;;AAWR,IAAA,cAAc,GAAA;AAAA;;AACZ,6BAAO,KAAK,MAAZ,2BAAuB,CAAC,KAAK,QAAN,IAAkB,KAAK,WAA9C;AACD,KAbO;;AAcR,IAAA,WAAW,GAAA;AACT,UAAI,KAAK,QAAT,EAAmB,OAAO,KAAP;AAEnB,aAAO,OAAO,CACZ,KAAK,MAAL,IACA,KAAK,UAAL,CAAgB,KADhB,IAEA,KAAK,UAAL,CAAgB,QAAhB,CAFA,IAGA,KAAK,MAAL,CAAY,QAJA,CAAd;AAMD,KAvBO;;AAwBR,IAAA,MAAM,GAAA;AACJ,aAAO,KAAK,EAAL,IAAW,KAAK,IAAhB,IAAwB,KAAK,IAApC;AACD,KA1BO;;AA2BR,IAAA,MAAM,EAAE,OAAO,EAAP;AA3BA,GAnCc;AAiExB,EAAA,KAAK,EAAE;AACL,IAAA,MAAM,EAAE;AADH,GAjEiB
|
|
1
|
+
{"version":3,"sources":["../../../src/mixins/routable/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType<boolean | undefined>,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record<string, boolean> = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n mounted () {\n this.onRouteChange()\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click,\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass} ${this.proxyClass || ''}`.trim()\n const exactActiveClass = `${this.exactActiveClass} ${this.proxyClass || ''}`.trim() || activeClass\n\n const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass)\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (!getObjectValueByPath(this.$refs.link, path) === this.isActive) {\n this.toggle()\n }\n })\n },\n toggle () {\n this.isActive = !this.isActive\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
|
|
@@ -51,8 +51,10 @@ export default function goTo(_target, _settings = {}) {
|
|
|
51
51
|
const progress = Math.abs(settings.duration ? Math.min(timeElapsed / settings.duration, 1) : 1);
|
|
52
52
|
container.scrollTop = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
|
|
53
53
|
const clientHeight = container === document.body ? document.documentElement.clientHeight : container.clientHeight;
|
|
54
|
+
const reachBottom = clientHeight + container.scrollTop >= container.scrollHeight;
|
|
54
55
|
|
|
55
|
-
if (progress === 1 ||
|
|
56
|
+
if (progress === 1 || // Need to go lower but reach bottom
|
|
57
|
+
targetLocation > container.scrollTop && reachBottom) {
|
|
56
58
|
return resolve(targetLocation);
|
|
57
59
|
}
|
|
58
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/services/goto/index.ts"],"names":[],"mappings":"AAAA;AACA,SAAS,OAAT,QAAwB,YAAxB,C,CAEA;;AACA,OAAO,KAAK,cAAZ,MAAgC,mBAAhC;AACA,SACE,YADF,EAEE,SAFF,QAGO,QAHP;AAUA,eAAc,SAAU,IAAV,CACZ,OADY,EAEZ,SAAA,GAAyB,EAFb,EAEe;AAE3B,QAAM,QAAQ,GAAgB;AAC5B,IAAA,SAAS,EAAG,QAAQ,CAAC,gBAAT,IAAoD,QAAQ,CAAC,IAA7D,IAAqE,QAAQ,CAAC,eAD9D;AAE5B,IAAA,QAAQ,EAAE,GAFkB;AAG5B,IAAA,MAAM,EAAE,CAHoB;AAI5B,IAAA,MAAM,EAAE,gBAJoB;AAK5B,IAAA,SAAS,EAAE,IALiB;AAM5B,OAAG;AANyB,GAA9B;AAQA,QAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAV,CAA9B;AAEA;;AACA,MAAI,QAAQ,CAAC,SAAT,IAAsB,IAAI,CAAC,SAAL,CAAe,WAAzC,EAAsD;AACpD,UAAM,QAAQ,GAAG,SAAS,CAAC,SAAV,CAAoB,QAApB,CAA6B,qBAA7B,CAAjB;AACA,UAAM,SAAS,GAAG,SAAS,CAAC,SAAV,CAAoB,QAApB,CAA6B,8BAA7B,CAAlB;AACA,UAAM;AAAE,MAAA,GAAF;AAAO,MAAA;AAAP,QAAe,IAAI,CAAC,SAAL,CAAe,WAApC;AAEA,IAAA,QAAQ,CAAC,MAAT,IAAmB,GAAnB;AACA;;AACA,QAAI,CAAC,QAAD,IAAa,SAAjB,EAA4B,QAAQ,CAAC,MAAT,IAAmB,GAAnB;AAC7B;;AAED,QAAM,SAAS,GAAG,WAAW,CAAC,GAAZ,EAAlB;AAEA,MAAI,cAAJ;;AACA,MAAI,OAAO,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,IAAA,cAAc,GAAG,SAAS,CAAC,OAAD,CAAT,GAAqB,QAAQ,CAAC,MAA/C;AACD,GAFD,MAEO;AACL,IAAA,cAAc,GAAG,SAAS,CAAC,OAAD,CAAT,GAAqB,SAAS,CAAC,SAAD,CAA9B,GAA4C,QAAQ,CAAC,MAAtE;AACD;;AAED,QAAM,aAAa,GAAG,SAAS,CAAC,SAAhC;AACA,MAAI,cAAc,KAAK,aAAvB,EAAsC,OAAO,OAAO,CAAC,OAAR,CAAgB,cAAhB,CAAP;AAEtC,QAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,MAAhB,KAA2B,UAA3B,GACT,QAAQ,CAAC,MADA,GAET,cAAc,CAAC,QAAQ,CAAC,MAAV,CAFlB;AAGA;;AACA,MAAI,CAAC,IAAL,EAAW,MAAM,IAAI,SAAJ,CAAc,oBAAoB,QAAQ,CAAC,MAAM,cAAjD,CAAN,CAvCgB,CAyC3B;;AACA;;AACA,SAAO,IAAI,OAAJ,CAAY,OAAO,IAAI,qBAAqB,CAAC,SAAS,IAAT,CAAe,WAAf,EAAkC;AACpF,UAAM,WAAW,GAAG,WAAW,GAAG,SAAlC;AACA,UAAM,QAAQ,GAAG,IAAI,CAAC,GAAL,CAAS,QAAQ,CAAC,QAAT,GAAoB,IAAI,CAAC,GAAL,CAAS,WAAW,GAAG,QAAQ,CAAC,QAAhC,EAA0C,CAA1C,CAApB,GAAmE,CAA5E,CAAjB;AAEA,IAAA,SAAS,CAAC,SAAV,GAAsB,IAAI,CAAC,KAAL,CAAW,aAAa,GAAG,CAAC,cAAc,GAAG,aAAlB,IAAmC,IAAI,CAAC,QAAD,CAAlE,CAAtB;AAEA,UAAM,YAAY,GAAG,SAAS,KAAK,QAAQ,CAAC,IAAvB,GAA8B,QAAQ,CAAC,eAAT,CAAyB,YAAvD,GAAsE,SAAS,CAAC,YAArG
|
|
1
|
+
{"version":3,"sources":["../../../src/services/goto/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Extensions\nimport { Service } from '../service'\n\n// Utilities\nimport * as easingPatterns from './easing-patterns'\nimport {\n getContainer,\n getOffset,\n} from './util'\n\n// Types\nimport { GoToOptions, VuetifyGoToTarget } from 'vuetify/types/services/goto'\n\nimport { VuetifyServiceContract } from 'vuetify/types/services'\n\nexport default function goTo (\n _target: VuetifyGoToTarget,\n _settings: GoToOptions = {}\n): Promise<number> {\n const settings: GoToOptions = {\n container: (document.scrollingElement as HTMLElement | null) || document.body || document.documentElement,\n duration: 500,\n offset: 0,\n easing: 'easeInOutCubic',\n appOffset: true,\n ..._settings,\n }\n const container = getContainer(settings.container)\n\n /* istanbul ignore else */\n if (settings.appOffset && goTo.framework.application) {\n const isDrawer = container.classList.contains('v-navigation-drawer')\n const isClipped = container.classList.contains('v-navigation-drawer--clipped')\n const { bar, top } = goTo.framework.application as any\n\n settings.offset += bar\n /* istanbul ignore else */\n if (!isDrawer || isClipped) settings.offset += top\n }\n\n const startTime = performance.now()\n\n let targetLocation: number\n if (typeof _target === 'number') {\n targetLocation = getOffset(_target) - settings.offset!\n } else {\n targetLocation = getOffset(_target) - getOffset(container) - settings.offset!\n }\n\n const startLocation = container.scrollTop\n if (targetLocation === startLocation) return Promise.resolve(targetLocation)\n\n const ease = typeof settings.easing === 'function'\n ? settings.easing\n : easingPatterns[settings.easing!]\n /* istanbul ignore else */\n if (!ease) throw new TypeError(`Easing function \"${settings.easing}\" not found.`)\n\n // Cannot be tested properly in jsdom\n /* istanbul ignore next */\n return new Promise(resolve => requestAnimationFrame(function step (currentTime: number) {\n const timeElapsed = currentTime - startTime\n const progress = Math.abs(settings.duration ? Math.min(timeElapsed / settings.duration, 1) : 1)\n\n container.scrollTop = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress))\n\n const clientHeight = container === document.body ? document.documentElement.clientHeight : container.clientHeight\n const reachBottom = clientHeight + container.scrollTop >= container.scrollHeight\n if (\n progress === 1 ||\n // Need to go lower but reach bottom\n (targetLocation > container.scrollTop && reachBottom)\n ) {\n return resolve(targetLocation)\n }\n\n requestAnimationFrame(step)\n }))\n}\n\ngoTo.framework = {} as Record<string, VuetifyServiceContract>\ngoTo.init = () => {}\n\nexport class Goto extends Service {\n public static property: 'goTo' = 'goTo'\n\n constructor () {\n super()\n\n return goTo\n }\n}\n"],"sourceRoot":"","file":"index.js"}
|
package/lib/util/helpers.js
CHANGED
|
@@ -418,4 +418,25 @@ export function mergeDeep(source = {}, target = {}) {
|
|
|
418
418
|
export function fillArray(length, obj) {
|
|
419
419
|
return Array(length).fill(obj);
|
|
420
420
|
}
|
|
421
|
+
/** Polyfill for Event.prototype.composedPath */
|
|
422
|
+
|
|
423
|
+
export function composedPath(e) {
|
|
424
|
+
if (e.composedPath) return e.composedPath();
|
|
425
|
+
const path = [];
|
|
426
|
+
let el = e.target;
|
|
427
|
+
|
|
428
|
+
while (el) {
|
|
429
|
+
path.push(el);
|
|
430
|
+
|
|
431
|
+
if (el.tagName === 'HTML') {
|
|
432
|
+
path.push(document);
|
|
433
|
+
path.push(window);
|
|
434
|
+
return path;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
el = el.parentElement;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return path;
|
|
441
|
+
}
|
|
421
442
|
//# sourceMappingURL=helpers.js.map
|
package/lib/util/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import Vue from 'vue'\nimport { VNode, VNodeDirective } from 'vue/types'\nimport { VuetifyIcon } from 'vuetify/types/services/icons'\nimport { DataTableCompareFunction, SelectItemKey, ItemGroup } from 'vuetify/types'\n\nexport function createSimpleFunctional (\n c: string,\n el = 'div',\n name?: string\n) {\n return Vue.extend({\n name: name || c.replace(/__/g, '-'),\n\n functional: true,\n\n render (h, { data, children }): VNode {\n data.staticClass = (`${c} ${data.staticClass || ''}`).trim()\n\n return h(el, data, children)\n },\n })\n}\n\nexport type BindingConfig = Pick<VNodeDirective, 'arg' | 'modifiers' | 'value'>\nexport function directiveConfig (binding: BindingConfig, defaults = {}): VNodeDirective {\n return {\n ...defaults,\n ...binding.modifiers,\n value: binding.arg,\n ...(binding.value || {}),\n }\n}\n\nexport function addOnceEventListener (\n el: EventTarget,\n eventName: string,\n cb: (event: Event) => void,\n options: boolean | AddEventListenerOptions = false\n): void {\n const once = (event: Event) => {\n cb(event)\n el.removeEventListener(eventName, once, options)\n }\n\n el.addEventListener(eventName, once, options)\n}\n\nlet passiveSupported = false\ntry {\n if (typeof window !== 'undefined') {\n const testListenerOpts = Object.defineProperty({}, 'passive', {\n get: () => {\n passiveSupported = true\n },\n })\n\n window.addEventListener('testListener', testListenerOpts, testListenerOpts)\n window.removeEventListener('testListener', testListenerOpts, testListenerOpts)\n }\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\nexport { passiveSupported }\n\nexport function addPassiveEventListener (\n el: EventTarget,\n event: string,\n cb: EventHandlerNonNull | (() => void),\n options: {}\n): void {\n el.addEventListener(event, cb, passiveSupported ? options : false)\n}\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n const last = path.length - 1\n\n if (last < 0) return obj === undefined ? fallback : obj\n\n for (let i = 0; i < last; i++) {\n if (obj == null) {\n return fallback\n }\n obj = obj[path[i]]\n }\n\n if (obj == null) return fallback\n\n return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n if (a === b) return true\n\n if (\n a instanceof Date &&\n b instanceof Date &&\n a.getTime() !== b.getTime()\n ) {\n // If the values are Date, compare them as timestamps\n return false\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false\n }\n\n const props = Object.keys(a)\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false\n }\n\n return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: any, path: string, fallback?: any): any {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback\n if (obj[path] !== undefined) return obj[path]\n path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n path = path.replace(/^\\./, '') // strip a leading dot\n return getNestedValue(obj, path.split('.'), fallback)\n}\n\nexport function getPropertyFromItem (\n item: object,\n property: SelectItemKey,\n fallback?: any\n): any {\n if (property == null) return item === undefined ? fallback : item\n\n if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n if (typeof property !== 'function') return fallback\n\n const value = property(item, fallback)\n\n return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number): number[] {\n return Array.from({ length }, (v, k) => k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n if (!index) return getZIndex(el.parentNode as Element)\n return index\n}\n\nconst tagsToReplace = {\n '&': '&',\n '<': '<',\n '>': '>',\n} as any\n\nexport function escapeHTML (str: string): string {\n return str.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag)\n}\n\nexport function filterObjectOnKeys<T, K extends keyof T> (obj: T, keys: K[]): { [N in K]: T[N] } {\n const filtered = {} as { [N in K]: T[N] }\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key]\n }\n }\n\n return filtered\n}\n\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n if (str == null || str === '') {\n return undefined\n } else if (isNaN(+str!)) {\n return String(str)\n } else {\n return `${Number(str)}${unit}`\n }\n}\n\nexport function kebabCase (str: string): string {\n return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\nexport function isObject (obj: any): obj is object {\n return obj !== null && typeof obj === 'object'\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34,\n shift: 16,\n})\n\n/**\n * This remaps internal names like '$cancel' or '$vuetify.icons.cancel'\n * to the current name or component for that icon.\n */\nexport function remapInternalIcon (vm: Vue, iconName: string): VuetifyIcon {\n // Look for custom component in the configuration\n const component = vm.$vuetify.icons.component\n\n // Look for overrides\n if (iconName.startsWith('$')) {\n // Get the target icon name\n const iconPath = `$vuetify.icons.values.${iconName.split('$').pop()!.split('.').pop()}`\n\n // Now look up icon indirection name,\n // e.g. '$vuetify.icons.values.cancel'\n const override = getObjectValueByPath(vm, iconPath, iconName)\n\n if (typeof override === 'string') iconName = override\n else return override\n }\n\n if (component == null) {\n return iconName\n }\n\n return {\n component,\n props: {\n icon: iconName,\n },\n }\n}\n\nexport function keys<O> (o: O) {\n return Object.keys(o) as (keyof O)[]\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nconst camelizeRE = /-(\\w)/g\nexport const camelize = (str: string): string => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\n}\n\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\nexport function arrayDiff (a: any[], b: any[]): any[] {\n const diff: any[] = []\n for (let i = 0; i < b.length; i++) {\n if (a.indexOf(b[i]) < 0) diff.push(b[i])\n }\n return diff\n}\n\n/**\n * Makes the first character of a string uppercase\n */\nexport function upperFirst (str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function groupItems<T extends any = any> (\n items: T[],\n groupBy: string[],\n groupDesc: boolean[]\n): ItemGroup<T>[] {\n const key = groupBy[0]\n const groups: ItemGroup<T>[] = []\n let current\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const val = getObjectValueByPath(item, key, null)\n if (current !== val) {\n current = val\n groups.push({\n name: val ?? '',\n items: [],\n })\n }\n groups[groups.length - 1].items.push(item)\n }\n return groups\n}\n\nexport function wrapInArray<T> (v: T | T[] | null | undefined): T[] { return v != null ? Array.isArray(v) ? v : [v] : [] }\n\nexport function sortItems<T extends any = any> (\n items: T[],\n sortBy: string[],\n sortDesc: boolean[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction<T>>\n): T[] {\n if (sortBy === null || !sortBy.length) return items\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return items.sort((a, b) => {\n for (let i = 0; i < sortBy.length; i++) {\n const sortKey = sortBy[i]\n\n let sortA = getObjectValueByPath(a, sortKey)\n let sortB = getObjectValueByPath(b, sortKey)\n\n if (sortDesc[i]) {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters && customSorters[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA === null && sortB === null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n return value != null &&\n search != null &&\n typeof value !== 'boolean' &&\n value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function searchItems<T extends any = any> (items: T[], search: string): T[] {\n if (!search) return items\n search = search.toString().toLowerCase()\n if (search.trim() === '') return items\n\n return items.filter((item: any) => Object.keys(item).some(key => defaultFilter(getObjectValueByPath(item, key), search, item)))\n}\n\n/**\n * Returns:\n * - 'normal' for old style slots - `<template slot=\"default\">`\n * - 'scoped' for old style scoped slots (`<template slot=\"default\" slot-scope=\"data\">`) or bound v-slot (`#default=\"data\"`)\n * - 'v-slot' for unbound v-slot (`#default`) - only if the third param is true, otherwise counts as scoped\n */\nexport function getSlotType<T extends boolean = false> (vm: Vue, name: string, split?: T): (T extends true ? 'v-slot' : never) | 'normal' | 'scoped' | void {\n if (vm.$slots[name] && vm.$scopedSlots[name] && (vm.$scopedSlots[name] as any).name) {\n return split ? 'v-slot' as any : 'scoped'\n }\n if (vm.$slots[name]) return 'normal'\n if (vm.$scopedSlots[name]) return 'scoped'\n}\n\nexport function debounce (fn: Function, delay: number) {\n let timeoutId = 0 as any\n return (...args: any[]) => {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn(...args), delay)\n }\n}\n\nexport function throttle<T extends (...args: any[]) => any> (fn: T, limit: number) {\n let throttling = false\n return (...args: Parameters<T>): void | ReturnType<T> => {\n if (!throttling) {\n throttling = true\n setTimeout(() => throttling = false, limit)\n return fn(...args)\n }\n }\n}\n\nexport function getPrefixedScopedSlots (prefix: string, scopedSlots: any) {\n return Object.keys(scopedSlots).filter(k => k.startsWith(prefix)).reduce((obj: any, k: string) => {\n obj[k.replace(prefix, '')] = scopedSlots[k]\n return obj\n }, {})\n}\n\nexport function getSlot (vm: Vue, name = 'default', data?: object | (() => object), optional = false) {\n if (vm.$scopedSlots[name]) {\n return vm.$scopedSlots[name]!(data instanceof Function ? data() : data)\n } else if (vm.$slots[name] && (!data || optional)) {\n return vm.$slots[name]\n }\n return undefined\n}\n\nexport function clamp (value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function padEnd (str: string, length: number, char = '0') {\n return str + char.repeat(Math.max(0, length - str.length))\n}\n\nexport function chunk (str: string, size = 1) {\n const chunked: string[] = []\n let index = 0\n while (index < str.length) {\n chunked.push(str.substr(index, size))\n index += size\n }\n return chunked\n}\n\nexport function humanReadableFileSize (bytes: number, binary = false): string {\n const base = binary ? 1024 : 1000\n if (bytes < base) {\n return `${bytes} B`\n }\n\n const prefix = binary ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G']\n let unit = -1\n while (Math.abs(bytes) >= base && unit < prefix.length - 1) {\n bytes /= base\n ++unit\n }\n return `${bytes.toFixed(1)} ${prefix[unit]}B`\n}\n\nexport function camelizeObjectKeys (obj: Record<string, any> | null | undefined) {\n if (!obj) return {}\n\n return Object.keys(obj).reduce((o: any, key: string) => {\n o[camelize(key)] = obj[key]\n return o\n }, {})\n}\n\nexport function mergeDeep (\n source: Dictionary<any> = {},\n target: Dictionary<any> = {}\n) {\n for (const key in target) {\n const sourceProperty = source[key]\n const targetProperty = target[key]\n\n // Only continue deep merging if\n // both properties are objects\n if (\n isObject(sourceProperty) &&\n isObject(targetProperty)\n ) {\n source[key] = mergeDeep(sourceProperty, targetProperty)\n\n continue\n }\n\n source[key] = targetProperty\n }\n\n return source\n}\n\nexport function fillArray<T> (length: number, obj: T) {\n return Array(length).fill(obj)\n}\n"],"sourceRoot":"","file":"helpers.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/util/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import Vue from 'vue'\nimport { VNode, VNodeDirective } from 'vue/types'\nimport { VuetifyIcon } from 'vuetify/types/services/icons'\nimport { DataTableCompareFunction, SelectItemKey, ItemGroup } from 'vuetify/types'\n\nexport function createSimpleFunctional (\n c: string,\n el = 'div',\n name?: string\n) {\n return Vue.extend({\n name: name || c.replace(/__/g, '-'),\n\n functional: true,\n\n render (h, { data, children }): VNode {\n data.staticClass = (`${c} ${data.staticClass || ''}`).trim()\n\n return h(el, data, children)\n },\n })\n}\n\nexport type BindingConfig = Pick<VNodeDirective, 'arg' | 'modifiers' | 'value'>\nexport function directiveConfig (binding: BindingConfig, defaults = {}): VNodeDirective {\n return {\n ...defaults,\n ...binding.modifiers,\n value: binding.arg,\n ...(binding.value || {}),\n }\n}\n\nexport function addOnceEventListener (\n el: EventTarget,\n eventName: string,\n cb: (event: Event) => void,\n options: boolean | AddEventListenerOptions = false\n): void {\n const once = (event: Event) => {\n cb(event)\n el.removeEventListener(eventName, once, options)\n }\n\n el.addEventListener(eventName, once, options)\n}\n\nlet passiveSupported = false\ntry {\n if (typeof window !== 'undefined') {\n const testListenerOpts = Object.defineProperty({}, 'passive', {\n get: () => {\n passiveSupported = true\n },\n })\n\n window.addEventListener('testListener', testListenerOpts, testListenerOpts)\n window.removeEventListener('testListener', testListenerOpts, testListenerOpts)\n }\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\nexport { passiveSupported }\n\nexport function addPassiveEventListener (\n el: EventTarget,\n event: string,\n cb: EventHandlerNonNull | (() => void),\n options: {}\n): void {\n el.addEventListener(event, cb, passiveSupported ? options : false)\n}\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n const last = path.length - 1\n\n if (last < 0) return obj === undefined ? fallback : obj\n\n for (let i = 0; i < last; i++) {\n if (obj == null) {\n return fallback\n }\n obj = obj[path[i]]\n }\n\n if (obj == null) return fallback\n\n return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n if (a === b) return true\n\n if (\n a instanceof Date &&\n b instanceof Date &&\n a.getTime() !== b.getTime()\n ) {\n // If the values are Date, compare them as timestamps\n return false\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false\n }\n\n const props = Object.keys(a)\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false\n }\n\n return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: any, path: string, fallback?: any): any {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback\n if (obj[path] !== undefined) return obj[path]\n path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n path = path.replace(/^\\./, '') // strip a leading dot\n return getNestedValue(obj, path.split('.'), fallback)\n}\n\nexport function getPropertyFromItem (\n item: object,\n property: SelectItemKey,\n fallback?: any\n): any {\n if (property == null) return item === undefined ? fallback : item\n\n if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n if (typeof property !== 'function') return fallback\n\n const value = property(item, fallback)\n\n return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number): number[] {\n return Array.from({ length }, (v, k) => k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n if (!index) return getZIndex(el.parentNode as Element)\n return index\n}\n\nconst tagsToReplace = {\n '&': '&',\n '<': '<',\n '>': '>',\n} as any\n\nexport function escapeHTML (str: string): string {\n return str.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag)\n}\n\nexport function filterObjectOnKeys<T, K extends keyof T> (obj: T, keys: K[]): { [N in K]: T[N] } {\n const filtered = {} as { [N in K]: T[N] }\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key]\n }\n }\n\n return filtered\n}\n\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n if (str == null || str === '') {\n return undefined\n } else if (isNaN(+str!)) {\n return String(str)\n } else {\n return `${Number(str)}${unit}`\n }\n}\n\nexport function kebabCase (str: string): string {\n return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()\n}\n\nexport function isObject (obj: any): obj is object {\n return obj !== null && typeof obj === 'object'\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34,\n shift: 16,\n})\n\n/**\n * This remaps internal names like '$cancel' or '$vuetify.icons.cancel'\n * to the current name or component for that icon.\n */\nexport function remapInternalIcon (vm: Vue, iconName: string): VuetifyIcon {\n // Look for custom component in the configuration\n const component = vm.$vuetify.icons.component\n\n // Look for overrides\n if (iconName.startsWith('$')) {\n // Get the target icon name\n const iconPath = `$vuetify.icons.values.${iconName.split('$').pop()!.split('.').pop()}`\n\n // Now look up icon indirection name,\n // e.g. '$vuetify.icons.values.cancel'\n const override = getObjectValueByPath(vm, iconPath, iconName)\n\n if (typeof override === 'string') iconName = override\n else return override\n }\n\n if (component == null) {\n return iconName\n }\n\n return {\n component,\n props: {\n icon: iconName,\n },\n }\n}\n\nexport function keys<O> (o: O) {\n return Object.keys(o) as (keyof O)[]\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nconst camelizeRE = /-(\\w)/g\nexport const camelize = (str: string): string => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\n}\n\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\nexport function arrayDiff (a: any[], b: any[]): any[] {\n const diff: any[] = []\n for (let i = 0; i < b.length; i++) {\n if (a.indexOf(b[i]) < 0) diff.push(b[i])\n }\n return diff\n}\n\n/**\n * Makes the first character of a string uppercase\n */\nexport function upperFirst (str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\nexport function groupItems<T extends any = any> (\n items: T[],\n groupBy: string[],\n groupDesc: boolean[]\n): ItemGroup<T>[] {\n const key = groupBy[0]\n const groups: ItemGroup<T>[] = []\n let current\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const val = getObjectValueByPath(item, key, null)\n if (current !== val) {\n current = val\n groups.push({\n name: val ?? '',\n items: [],\n })\n }\n groups[groups.length - 1].items.push(item)\n }\n return groups\n}\n\nexport function wrapInArray<T> (v: T | T[] | null | undefined): T[] { return v != null ? Array.isArray(v) ? v : [v] : [] }\n\nexport function sortItems<T extends any = any> (\n items: T[],\n sortBy: string[],\n sortDesc: boolean[],\n locale: string,\n customSorters?: Record<string, DataTableCompareFunction<T>>\n): T[] {\n if (sortBy === null || !sortBy.length) return items\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return items.sort((a, b) => {\n for (let i = 0; i < sortBy.length; i++) {\n const sortKey = sortBy[i]\n\n let sortA = getObjectValueByPath(a, sortKey)\n let sortB = getObjectValueByPath(b, sortKey)\n\n if (sortDesc[i]) {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters && customSorters[sortKey]) {\n const customResult = customSorters[sortKey](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA === null && sortB === null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n return value != null &&\n search != null &&\n typeof value !== 'boolean' &&\n value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function searchItems<T extends any = any> (items: T[], search: string): T[] {\n if (!search) return items\n search = search.toString().toLowerCase()\n if (search.trim() === '') return items\n\n return items.filter((item: any) => Object.keys(item).some(key => defaultFilter(getObjectValueByPath(item, key), search, item)))\n}\n\n/**\n * Returns:\n * - 'normal' for old style slots - `<template slot=\"default\">`\n * - 'scoped' for old style scoped slots (`<template slot=\"default\" slot-scope=\"data\">`) or bound v-slot (`#default=\"data\"`)\n * - 'v-slot' for unbound v-slot (`#default`) - only if the third param is true, otherwise counts as scoped\n */\nexport function getSlotType<T extends boolean = false> (vm: Vue, name: string, split?: T): (T extends true ? 'v-slot' : never) | 'normal' | 'scoped' | void {\n if (vm.$slots[name] && vm.$scopedSlots[name] && (vm.$scopedSlots[name] as any).name) {\n return split ? 'v-slot' as any : 'scoped'\n }\n if (vm.$slots[name]) return 'normal'\n if (vm.$scopedSlots[name]) return 'scoped'\n}\n\nexport function debounce (fn: Function, delay: number) {\n let timeoutId = 0 as any\n return (...args: any[]) => {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn(...args), delay)\n }\n}\n\nexport function throttle<T extends (...args: any[]) => any> (fn: T, limit: number) {\n let throttling = false\n return (...args: Parameters<T>): void | ReturnType<T> => {\n if (!throttling) {\n throttling = true\n setTimeout(() => throttling = false, limit)\n return fn(...args)\n }\n }\n}\n\nexport function getPrefixedScopedSlots (prefix: string, scopedSlots: any) {\n return Object.keys(scopedSlots).filter(k => k.startsWith(prefix)).reduce((obj: any, k: string) => {\n obj[k.replace(prefix, '')] = scopedSlots[k]\n return obj\n }, {})\n}\n\nexport function getSlot (vm: Vue, name = 'default', data?: object | (() => object), optional = false) {\n if (vm.$scopedSlots[name]) {\n return vm.$scopedSlots[name]!(data instanceof Function ? data() : data)\n } else if (vm.$slots[name] && (!data || optional)) {\n return vm.$slots[name]\n }\n return undefined\n}\n\nexport function clamp (value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function padEnd (str: string, length: number, char = '0') {\n return str + char.repeat(Math.max(0, length - str.length))\n}\n\nexport function chunk (str: string, size = 1) {\n const chunked: string[] = []\n let index = 0\n while (index < str.length) {\n chunked.push(str.substr(index, size))\n index += size\n }\n return chunked\n}\n\nexport function humanReadableFileSize (bytes: number, binary = false): string {\n const base = binary ? 1024 : 1000\n if (bytes < base) {\n return `${bytes} B`\n }\n\n const prefix = binary ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G']\n let unit = -1\n while (Math.abs(bytes) >= base && unit < prefix.length - 1) {\n bytes /= base\n ++unit\n }\n return `${bytes.toFixed(1)} ${prefix[unit]}B`\n}\n\nexport function camelizeObjectKeys (obj: Record<string, any> | null | undefined) {\n if (!obj) return {}\n\n return Object.keys(obj).reduce((o: any, key: string) => {\n o[camelize(key)] = obj[key]\n return o\n }, {})\n}\n\nexport function mergeDeep (\n source: Dictionary<any> = {},\n target: Dictionary<any> = {}\n) {\n for (const key in target) {\n const sourceProperty = source[key]\n const targetProperty = target[key]\n\n // Only continue deep merging if\n // both properties are objects\n if (\n isObject(sourceProperty) &&\n isObject(targetProperty)\n ) {\n source[key] = mergeDeep(sourceProperty, targetProperty)\n\n continue\n }\n\n source[key] = targetProperty\n }\n\n return source\n}\n\nexport function fillArray<T> (length: number, obj: T) {\n return Array(length).fill(obj)\n}\n\n/** Polyfill for Event.prototype.composedPath */\nexport function composedPath (e: Event): EventTarget[] {\n if (e.composedPath) return e.composedPath()\n\n const path = []\n let el = e.target as Element\n\n while (el) {\n path.push(el)\n\n if (el.tagName === 'HTML') {\n path.push(document)\n path.push(window)\n\n return path\n }\n\n el = el.parentElement!\n }\n return path\n}\n"],"sourceRoot":"","file":"helpers.js"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vuetify",
|
|
3
3
|
"description": "Vue Material Component Framework",
|
|
4
|
-
"version": "2.5.
|
|
4
|
+
"version": "2.5.13",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "John Leider",
|
|
7
7
|
"email": "john@vuetifyjs.com"
|
|
@@ -67,7 +67,6 @@
|
|
|
67
67
|
"@fortawesome/fontawesome-svg-core": "^1.2.30",
|
|
68
68
|
"@fortawesome/free-solid-svg-icons": "^5.14.0",
|
|
69
69
|
"@fortawesome/vue-fontawesome": "^0.1.10",
|
|
70
|
-
"@mdi/font": "^4.5.95",
|
|
71
70
|
"@types/jest": "^26.0.14",
|
|
72
71
|
"@types/node": "^14.11.10",
|
|
73
72
|
"@vue/test-utils": "1.0.0-beta.29",
|
|
@@ -113,5 +112,5 @@
|
|
|
113
112
|
"attributes": "dist/json/attributes.json"
|
|
114
113
|
},
|
|
115
114
|
"web-types": "dist/json/web-types.json",
|
|
116
|
-
"gitHead": "
|
|
115
|
+
"gitHead": "836d4fb5073abc0d18595377cec1427fd207fce1"
|
|
117
116
|
}
|
|
@@ -225,6 +225,9 @@ export default baseMixins.extend({
|
|
|
225
225
|
invertedScroll (val: boolean) {
|
|
226
226
|
this.isActive = !val || this.currentScroll !== 0
|
|
227
227
|
},
|
|
228
|
+
hideOnScroll (val: boolean) {
|
|
229
|
+
this.isActive = !val || this.currentScroll < this.computedScrollThreshold
|
|
230
|
+
},
|
|
228
231
|
},
|
|
229
232
|
|
|
230
233
|
created () {
|
|
@@ -217,7 +217,16 @@ export default VSelect.extend({
|
|
|
217
217
|
// for duplicate items? no idea
|
|
218
218
|
if (val === oldVal) return
|
|
219
219
|
|
|
220
|
-
this.
|
|
220
|
+
if (!this.autoSelectFirst) {
|
|
221
|
+
const preSelectedItem = oldVal[this.$refs.menu.listIndex]
|
|
222
|
+
|
|
223
|
+
if (preSelectedItem) {
|
|
224
|
+
this.setMenuIndex(val.findIndex(i => i === preSelectedItem))
|
|
225
|
+
} else {
|
|
226
|
+
this.setMenuIndex(-1)
|
|
227
|
+
}
|
|
228
|
+
this.$emit('update:list-index', this.$refs.menu.listIndex)
|
|
229
|
+
}
|
|
221
230
|
|
|
222
231
|
this.$nextTick(() => {
|
|
223
232
|
if (
|
|
@@ -227,7 +236,11 @@ export default VSelect.extend({
|
|
|
227
236
|
) return
|
|
228
237
|
|
|
229
238
|
this.$refs.menu.getTiles()
|
|
230
|
-
|
|
239
|
+
|
|
240
|
+
if (this.autoSelectFirst && val.length) {
|
|
241
|
+
this.setMenuIndex(0)
|
|
242
|
+
this.$emit('update:list-index', this.$refs.menu.listIndex)
|
|
243
|
+
}
|
|
231
244
|
})
|
|
232
245
|
},
|
|
233
246
|
onInternalSearchChanged () {
|
|
@@ -45,7 +45,6 @@
|
|
|
45
45
|
|
|
46
46
|
.v-event-timed
|
|
47
47
|
position: absolute
|
|
48
|
-
overflow: hidden
|
|
49
48
|
white-space: nowrap
|
|
50
49
|
text-overflow: ellipsis
|
|
51
50
|
font-size: $calendar-event-font-size
|
|
@@ -53,6 +52,13 @@
|
|
|
53
52
|
border-radius: $calendar-event-border-radius
|
|
54
53
|
pointer-events: all
|
|
55
54
|
|
|
55
|
+
.v-event-summary
|
|
56
|
+
display: inline-block
|
|
57
|
+
overflow: hidden
|
|
58
|
+
text-overflow: ellipsis
|
|
59
|
+
width: 100%
|
|
60
|
+
white-space: nowrap
|
|
61
|
+
|
|
56
62
|
&.v-calendar-events
|
|
57
63
|
.v-calendar-weekly__head-weekday
|
|
58
64
|
margin-right: -$calendar-line-width
|
|
@@ -302,17 +302,17 @@ export default CalendarBase.extend({
|
|
|
302
302
|
const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)
|
|
303
303
|
const eventSummary = () => {
|
|
304
304
|
const name = this.eventNameFunction(event, timedEvent)
|
|
305
|
-
|
|
306
305
|
if (event.start.hasTime) {
|
|
306
|
+
const eventSummaryClass = 'v-event-summary'
|
|
307
307
|
if (timedEvent) {
|
|
308
308
|
const time = timeSummary()
|
|
309
309
|
const delimiter = singline ? ', ' : '<br>'
|
|
310
310
|
|
|
311
|
-
return `<strong>${name}</strong>${delimiter}${time}
|
|
311
|
+
return `<span class="${eventSummaryClass}"><strong>${name}</strong>${delimiter}${time}</span>`
|
|
312
312
|
} else {
|
|
313
313
|
const time = formatTime(event.start, true)
|
|
314
314
|
|
|
315
|
-
return `<strong>${time}</strong> ${name}
|
|
315
|
+
return `<span class="${eventSummaryClass}"><strong>${time}</strong> ${name}</span>`
|
|
316
316
|
}
|
|
317
317
|
}
|
|
318
318
|
|
|
@@ -59,6 +59,27 @@ export default Vue.extend({
|
|
|
59
59
|
if (eventOptions.stop) {
|
|
60
60
|
e.stopPropagation()
|
|
61
61
|
}
|
|
62
|
+
|
|
63
|
+
// Due to TouchEvent target always returns the element that is first placed
|
|
64
|
+
// Even if touch point has since moved outside the interactive area of that element
|
|
65
|
+
// Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target
|
|
66
|
+
// This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at
|
|
67
|
+
if (e && 'touches' in e) {
|
|
68
|
+
const currentTarget = document.elementFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)
|
|
69
|
+
|
|
70
|
+
if (currentTarget &&
|
|
71
|
+
!(e.target as HTMLElement)?.isSameNode(currentTarget) &&
|
|
72
|
+
(e.target as HTMLElement)?.className === currentTarget.className
|
|
73
|
+
) {
|
|
74
|
+
currentTarget.dispatchEvent(new TouchEvent(e.type, {
|
|
75
|
+
changedTouches: e.changedTouches as unknown as Touch[],
|
|
76
|
+
targetTouches: e.targetTouches as unknown as Touch[],
|
|
77
|
+
touches: e.touches as unknown as Touch[],
|
|
78
|
+
}))
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
62
83
|
this.$emit(event, getEvent(e))
|
|
63
84
|
}
|
|
64
85
|
|
|
@@ -80,6 +80,6 @@ describe('events.ts', () => {
|
|
|
80
80
|
end: '2019-02-15',
|
|
81
81
|
}, 0, 'start', 'end')
|
|
82
82
|
|
|
83
|
-
expect(fn).toThrow('undefined is not a valid timestamp. It must be a Date, number of
|
|
83
|
+
expect(fn).toThrow('undefined is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.')
|
|
84
84
|
})
|
|
85
85
|
})
|
|
@@ -128,7 +128,7 @@ export function parseTimestamp (input: VTimestampInput, required = false, now?:
|
|
|
128
128
|
|
|
129
129
|
if (typeof input !== 'string') {
|
|
130
130
|
if (required) {
|
|
131
|
-
throw new Error(`${input} is not a valid timestamp. It must be a Date, number of
|
|
131
|
+
throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)
|
|
132
132
|
}
|
|
133
133
|
return null
|
|
134
134
|
}
|
|
@@ -138,7 +138,7 @@ export function parseTimestamp (input: VTimestampInput, required = false, now?:
|
|
|
138
138
|
|
|
139
139
|
if (!parts) {
|
|
140
140
|
if (required) {
|
|
141
|
-
throw new Error(`${input} is not a valid timestamp. It must be a Date, number of
|
|
141
|
+
throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
return null
|