@revolugo/elements 4.13.18-beta.4 → 4.13.18-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/css/revolugo.29.min.css +1 -1
  2. package/dist/css/revolugo.30.min.css +1 -1
  3. package/dist/css/revolugo.32.min.css +1 -1
  4. package/dist/css/revolugo.33.min.css +1 -1
  5. package/dist/css/revolugo.34.min.css +1 -1
  6. package/dist/css/revolugo.35.min.css +1 -0
  7. package/dist/index.min.js +1 -1
  8. package/dist/revolugo.1.js +0 -11
  9. package/dist/revolugo.1.min.js +1 -1
  10. package/dist/revolugo.10.js +13 -0
  11. package/dist/revolugo.10.min.js +2 -2
  12. package/dist/revolugo.11.js +13 -0
  13. package/dist/revolugo.11.min.js +2 -2
  14. package/dist/revolugo.12.js +13 -0
  15. package/dist/revolugo.12.min.js +2 -2
  16. package/dist/revolugo.13.js +13 -0
  17. package/dist/revolugo.13.min.js +2 -2
  18. package/dist/revolugo.14.js +13 -0
  19. package/dist/revolugo.14.min.js +2 -2
  20. package/dist/revolugo.15.js +13 -0
  21. package/dist/revolugo.15.min.js +2 -2
  22. package/dist/revolugo.16.js +13 -0
  23. package/dist/revolugo.16.min.js +2 -2
  24. package/dist/revolugo.17.js +13 -0
  25. package/dist/revolugo.17.min.js +1 -1
  26. package/dist/revolugo.18.js +2 -0
  27. package/dist/revolugo.18.min.js +1 -1
  28. package/dist/revolugo.19.js +2 -0
  29. package/dist/revolugo.19.min.js +1 -1
  30. package/dist/revolugo.20.js +2 -0
  31. package/dist/revolugo.20.min.js +2 -2
  32. package/dist/revolugo.21.js +13 -0
  33. package/dist/revolugo.21.min.js +2 -2
  34. package/dist/revolugo.22.js +2 -0
  35. package/dist/revolugo.22.min.js +1 -1
  36. package/dist/revolugo.23.js +2 -0
  37. package/dist/revolugo.23.min.js +1 -1
  38. package/dist/revolugo.24.js +2 -0
  39. package/dist/revolugo.24.min.js +1 -1
  40. package/dist/revolugo.25.js +11 -0
  41. package/dist/revolugo.25.min.js +1 -1
  42. package/dist/revolugo.26.js +2 -0
  43. package/dist/revolugo.26.min.js +1 -1
  44. package/dist/revolugo.29.js +1460 -997
  45. package/dist/revolugo.29.min.js +1 -1
  46. package/dist/revolugo.30.js +1141 -35810
  47. package/dist/revolugo.30.min.js +1 -1
  48. package/dist/revolugo.31.js +1359 -2190
  49. package/dist/revolugo.31.min.js +1 -1
  50. package/dist/revolugo.32.js +36689 -1836
  51. package/dist/revolugo.32.min.js +1 -1
  52. package/dist/revolugo.33.js +1724 -1437
  53. package/dist/revolugo.33.min.js +1 -1
  54. package/dist/revolugo.34.js +1576 -6567
  55. package/dist/revolugo.34.min.js +1 -1
  56. package/dist/revolugo.35.js +5198 -909
  57. package/dist/revolugo.35.min.js +1 -1
  58. package/dist/revolugo.36.js +680 -1607
  59. package/dist/revolugo.36.min.js +1 -1
  60. package/dist/revolugo.37.js +2986 -250
  61. package/dist/revolugo.37.min.js +1 -1
  62. package/dist/revolugo.38.js +1819 -0
  63. package/dist/revolugo.38.min.js +1 -0
  64. package/dist/revolugo.39.js +579 -0
  65. package/dist/revolugo.39.min.js +1 -0
  66. package/dist/revolugo.4.js +11 -0
  67. package/dist/revolugo.4.min.js +1 -1
  68. package/dist/revolugo.5.js +2 -0
  69. package/dist/revolugo.5.min.js +1 -1
  70. package/dist/revolugo.9.js +13 -0
  71. package/dist/revolugo.9.min.js +2 -2
  72. package/dist/revolugo.en-US.js +7 -0
  73. package/dist/revolugo.en-US.min.js +1 -1
  74. package/dist/revolugo.fr-FR.js +7 -0
  75. package/dist/revolugo.fr-FR.min.js +1 -1
  76. package/dist/revolugo.js +10 -8
  77. package/dist/revolugo.min.js +1 -1
  78. package/package.json +1 -1
  79. /package/dist/css/{revolugo.36.min.css → revolugo.37.min.css} +0 -0
@@ -1,1685 +1,1972 @@
1
1
  (window["revolugo_jsonp"] = window["revolugo_jsonp"] || []).push([[33],{
2
2
 
3
- /***/ "3473":
3
+ /***/ "0ce2":
4
4
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
5
5
 
6
6
  "use strict";
7
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return factory; });
8
7
  /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
9
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("3d78");
10
-
11
-
12
- const availableProps = {
13
- absolute: Boolean,
14
- bottom: Boolean,
15
- fixed: Boolean,
16
- left: Boolean,
17
- right: Boolean,
18
- top: Boolean
19
- };
20
- function factory(selected = []) {
21
- return vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
22
- name: 'positionable',
23
- props: selected.length ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__[/* filterObjectOnKeys */ "k"])(availableProps, selected) : availableProps
24
- });
25
- }
26
- /* harmony default export */ __webpack_exports__["a"] = (factory()); // Add a `*` before the second `/`
27
-
28
- /* Tests /
29
- let single = factory(['top']).extend({
30
- created () {
31
- this.top
32
- this.bottom
33
- this.absolute
34
- }
35
- })
36
-
37
- let some = factory(['top', 'bottom']).extend({
38
- created () {
39
- this.top
40
- this.bottom
41
- this.absolute
42
- }
43
- })
44
-
45
- let all = factory().extend({
46
- created () {
47
- this.top
48
- this.bottom
49
- this.absolute
50
- this.foobar
51
- }
52
- })
53
- /**/
54
-
55
- /***/ }),
56
-
57
- /***/ "3f84":
58
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
59
-
60
- "use strict";
61
- /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("64ad");
62
- // Mixins
63
8
 
64
- /* @vue/component */
9
+ /**
10
+ * Delayable
11
+ *
12
+ * @mixin
13
+ *
14
+ * Changes the open or close delay time for elements
15
+ */
65
16
 
66
- /* harmony default export */ __webpack_exports__["a"] = (_mixins_themeable__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
67
- name: 'v-theme-provider',
17
+ /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend().extend({
18
+ name: 'delayable',
68
19
  props: {
69
- root: Boolean
70
- },
71
- computed: {
72
- isDark() {
73
- return this.root ? this.rootIsDark : _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].options.computed.isDark.call(this);
20
+ openDelay: {
21
+ type: [Number, String],
22
+ default: 0
23
+ },
24
+ closeDelay: {
25
+ type: [Number, String],
26
+ default: 0
74
27
  }
75
28
  },
76
- render() {
77
- /* istanbul ignore next */
78
- return this.$slots.default && this.$slots.default.find(node => !node.isComment && node.text !== ' ');
79
- }
80
- }));
81
-
82
- /***/ }),
83
-
84
- /***/ "4368":
85
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
86
-
87
- "use strict";
88
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
89
-
90
- /* @vue/component */
91
-
92
- /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
93
- name: 'returnable',
94
- props: {
95
- returnValue: null
96
- },
97
29
  data: () => ({
98
- isActive: false,
99
- originalValue: null
30
+ openTimeout: undefined,
31
+ closeTimeout: undefined
100
32
  }),
101
- watch: {
102
- isActive(val) {
103
- if (val) {
104
- this.originalValue = this.returnValue;
105
- } else {
106
- this.$emit('update:return-value', this.originalValue);
107
- }
108
- }
109
- },
110
33
  methods: {
111
- save(value) {
112
- this.originalValue = value;
113
- setTimeout(() => {
114
- this.isActive = false;
115
- });
34
+ /**
35
+ * Clear any pending delay timers from executing
36
+ */
37
+ clearDelay() {
38
+ clearTimeout(this.openTimeout);
39
+ clearTimeout(this.closeTimeout);
40
+ },
41
+ /**
42
+ * Runs callback after a specified delay
43
+ */
44
+ runDelay(type, cb) {
45
+ this.clearDelay();
46
+ const delay = parseInt(this[`${type}Delay`], 10);
47
+ this[`${type}Timeout`] = setTimeout(cb || (() => {
48
+ this.isActive = {
49
+ open: true,
50
+ close: false
51
+ }[type];
52
+ }), delay);
116
53
  }
117
54
  }
118
55
  }));
119
56
 
120
57
  /***/ }),
121
58
 
122
- /***/ "536f":
59
+ /***/ "17d8":
123
60
  /***/ (function(module, exports, __webpack_require__) {
124
61
 
125
- // extracted by mini-css-extract-plugin
62
+ "use strict";
126
63
 
127
- /***/ }),
128
64
 
129
- /***/ "5ae4":
130
- /***/ (function(module, exports, __webpack_require__) {
65
+ class QuickLRU {
66
+ constructor(options = {}) {
67
+ if (!(options.maxSize && options.maxSize > 0)) {
68
+ throw new TypeError('`maxSize` must be a number greater than 0');
69
+ }
70
+
71
+ this.maxSize = options.maxSize;
72
+ this.onEviction = options.onEviction;
73
+ this.cache = new Map();
74
+ this.oldCache = new Map();
75
+ this._size = 0;
76
+ }
77
+
78
+ _set(key, value) {
79
+ this.cache.set(key, value);
80
+ this._size++;
81
+
82
+ if (this._size >= this.maxSize) {
83
+ this._size = 0;
84
+
85
+ if (typeof this.onEviction === 'function') {
86
+ for (const [key, value] of this.oldCache.entries()) {
87
+ this.onEviction(key, value);
88
+ }
89
+ }
90
+
91
+ this.oldCache = this.cache;
92
+ this.cache = new Map();
93
+ }
94
+ }
95
+
96
+ get(key) {
97
+ if (this.cache.has(key)) {
98
+ return this.cache.get(key);
99
+ }
100
+
101
+ if (this.oldCache.has(key)) {
102
+ const value = this.oldCache.get(key);
103
+ this.oldCache.delete(key);
104
+ this._set(key, value);
105
+ return value;
106
+ }
107
+ }
108
+
109
+ set(key, value) {
110
+ if (this.cache.has(key)) {
111
+ this.cache.set(key, value);
112
+ } else {
113
+ this._set(key, value);
114
+ }
115
+
116
+ return this;
117
+ }
118
+
119
+ has(key) {
120
+ return this.cache.has(key) || this.oldCache.has(key);
121
+ }
122
+
123
+ peek(key) {
124
+ if (this.cache.has(key)) {
125
+ return this.cache.get(key);
126
+ }
127
+
128
+ if (this.oldCache.has(key)) {
129
+ return this.oldCache.get(key);
130
+ }
131
+ }
132
+
133
+ delete(key) {
134
+ const deleted = this.cache.delete(key);
135
+ if (deleted) {
136
+ this._size--;
137
+ }
138
+
139
+ return this.oldCache.delete(key) || deleted;
140
+ }
141
+
142
+ clear() {
143
+ this.cache.clear();
144
+ this.oldCache.clear();
145
+ this._size = 0;
146
+ }
147
+
148
+ * keys() {
149
+ for (const [key] of this) {
150
+ yield key;
151
+ }
152
+ }
153
+
154
+ * values() {
155
+ for (const [, value] of this) {
156
+ yield value;
157
+ }
158
+ }
159
+
160
+ * [Symbol.iterator]() {
161
+ for (const item of this.cache) {
162
+ yield item;
163
+ }
164
+
165
+ for (const item of this.oldCache) {
166
+ const [key] = item;
167
+ if (!this.cache.has(key)) {
168
+ yield item;
169
+ }
170
+ }
171
+ }
172
+
173
+ get size() {
174
+ let oldCacheSize = 0;
175
+ for (const key of this.oldCache.keys()) {
176
+ if (!this.cache.has(key)) {
177
+ oldCacheSize++;
178
+ }
179
+ }
180
+
181
+ return Math.min(this._size + oldCacheSize, this.maxSize);
182
+ }
183
+ }
131
184
 
132
- // extracted by mini-css-extract-plugin
185
+ module.exports = QuickLRU;
133
186
 
134
- /***/ }),
135
187
 
136
- /***/ "7b64":
137
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
188
+ /***/ }),
138
189
 
139
- "use strict";
140
- /* unused harmony export Ripple */
141
- /* harmony import */ var _src_directives_ripple_VRipple_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("536f");
142
- /* harmony import */ var _src_directives_ripple_VRipple_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_src_directives_ripple_VRipple_sass__WEBPACK_IMPORTED_MODULE_0__);
143
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("3d78");
144
- // Styles
145
- // Utilities
190
+ /***/ "2444":
191
+ /***/ (function(module, exports, __webpack_require__) {
146
192
 
193
+ /* global ActiveXObject -- old IE, WSH */
194
+ var anObject = __webpack_require__("50b4");
195
+ var definePropertiesModule = __webpack_require__("de39");
196
+ var enumBugKeys = __webpack_require__("7edb");
197
+ var hiddenKeys = __webpack_require__("23d9");
198
+ var html = __webpack_require__("ce02");
199
+ var documentCreateElement = __webpack_require__("6e0f");
200
+ var sharedKey = __webpack_require__("2cac");
201
+
202
+ var GT = '>';
203
+ var LT = '<';
204
+ var PROTOTYPE = 'prototype';
205
+ var SCRIPT = 'script';
206
+ var IE_PROTO = sharedKey('IE_PROTO');
207
+
208
+ var EmptyConstructor = function () { /* empty */ };
209
+
210
+ var scriptTag = function (content) {
211
+ return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
212
+ };
147
213
 
214
+ // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
215
+ var NullProtoObjectViaActiveX = function (activeXDocument) {
216
+ activeXDocument.write(scriptTag(''));
217
+ activeXDocument.close();
218
+ var temp = activeXDocument.parentWindow.Object;
219
+ activeXDocument = null; // avoid memory leak
220
+ return temp;
221
+ };
148
222
 
149
- const DELAY_RIPPLE = 80;
150
- function transform(el, value) {
151
- el.style.transform = value;
152
- el.style.webkitTransform = value;
153
- }
154
- function isTouchEvent(e) {
155
- return e.constructor.name === 'TouchEvent';
156
- }
157
- function isKeyboardEvent(e) {
158
- return e.constructor.name === 'KeyboardEvent';
159
- }
160
- const calculate = (e, el, value = {}) => {
161
- let localX = 0;
162
- let localY = 0;
163
- if (!isKeyboardEvent(e)) {
164
- const offset = el.getBoundingClientRect();
165
- const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e;
166
- localX = target.clientX - offset.left;
167
- localY = target.clientY - offset.top;
168
- }
169
- let radius = 0;
170
- let scale = 0.3;
171
- if (el._ripple && el._ripple.circle) {
172
- scale = 0.15;
173
- radius = el.clientWidth / 2;
174
- radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4;
175
- } else {
176
- radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2;
177
- }
178
- const centerX = `${(el.clientWidth - radius * 2) / 2}px`;
179
- const centerY = `${(el.clientHeight - radius * 2) / 2}px`;
180
- const x = value.center ? centerX : `${localX - radius}px`;
181
- const y = value.center ? centerY : `${localY - radius}px`;
182
- return {
183
- radius,
184
- scale,
185
- x,
186
- y,
187
- centerX,
188
- centerY
189
- };
223
+ // Create object with fake `null` prototype: use iframe Object with cleared prototype
224
+ var NullProtoObjectViaIFrame = function () {
225
+ // Thrash, waste and sodomy: IE GC bug
226
+ var iframe = documentCreateElement('iframe');
227
+ var JS = 'java' + SCRIPT + ':';
228
+ var iframeDocument;
229
+ iframe.style.display = 'none';
230
+ html.appendChild(iframe);
231
+ // https://github.com/zloirock/core-js/issues/475
232
+ iframe.src = String(JS);
233
+ iframeDocument = iframe.contentWindow.document;
234
+ iframeDocument.open();
235
+ iframeDocument.write(scriptTag('document.F=Object'));
236
+ iframeDocument.close();
237
+ return iframeDocument.F;
190
238
  };
191
- const ripples = {
192
- /* eslint-disable max-statements */
193
- show(e, el, value = {}) {
194
- if (!el._ripple || !el._ripple.enabled) {
195
- return;
196
- }
197
- const container = document.createElement('span');
198
- const animation = document.createElement('span');
199
- container.appendChild(animation);
200
- container.className = 'v-ripple__container';
201
- if (value.class) {
202
- container.className += ` ${value.class}`;
203
- }
204
- const {
205
- radius,
206
- scale,
207
- x,
208
- y,
209
- centerX,
210
- centerY
211
- } = calculate(e, el, value);
212
- const size = `${radius * 2}px`;
213
- animation.className = 'v-ripple__animation';
214
- animation.style.width = size;
215
- animation.style.height = size;
216
- el.appendChild(container);
217
- const computed = window.getComputedStyle(el);
218
- if (computed && computed.position === 'static') {
219
- el.style.position = 'relative';
220
- el.dataset.previousPosition = 'static';
221
- }
222
- animation.classList.add('v-ripple__animation--enter');
223
- animation.classList.add('v-ripple__animation--visible');
224
- transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
225
- animation.dataset.activated = String(performance.now());
226
- setTimeout(() => {
227
- animation.classList.remove('v-ripple__animation--enter');
228
- animation.classList.add('v-ripple__animation--in');
229
- transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
230
- }, 0);
231
- },
232
- hide(el) {
233
- if (!el || !el._ripple || !el._ripple.enabled) return;
234
- const ripples = el.getElementsByClassName('v-ripple__animation');
235
- if (ripples.length === 0) return;
236
- const animation = ripples[ripples.length - 1];
237
- if (animation.dataset.isHiding) return;else animation.dataset.isHiding = 'true';
238
- const diff = performance.now() - Number(animation.dataset.activated);
239
- const delay = Math.max(250 - diff, 0);
240
- setTimeout(() => {
241
- animation.classList.remove('v-ripple__animation--in');
242
- animation.classList.add('v-ripple__animation--out');
243
- setTimeout(() => {
244
- var _a;
245
- const ripples = el.getElementsByClassName('v-ripple__animation');
246
- if (ripples.length === 1 && el.dataset.previousPosition) {
247
- el.style.position = el.dataset.previousPosition;
248
- delete el.dataset.previousPosition;
249
- }
250
- if (((_a = animation.parentNode) === null || _a === void 0 ? void 0 : _a.parentNode) === el) el.removeChild(animation.parentNode);
251
- }, 300);
252
- }, delay);
253
- }
239
+
240
+ // Check for document.domain and active x support
241
+ // No need to use active x approach when document.domain is not set
242
+ // see https://github.com/es-shims/es5-shim/issues/150
243
+ // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
244
+ // avoid IE GC bug
245
+ var activeXDocument;
246
+ var NullProtoObject = function () {
247
+ try {
248
+ activeXDocument = new ActiveXObject('htmlfile');
249
+ } catch (error) { /* ignore */ }
250
+ NullProtoObject = typeof document != 'undefined'
251
+ ? document.domain && activeXDocument
252
+ ? NullProtoObjectViaActiveX(activeXDocument) // old IE
253
+ : NullProtoObjectViaIFrame()
254
+ : NullProtoObjectViaActiveX(activeXDocument); // WSH
255
+ var length = enumBugKeys.length;
256
+ while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
257
+ return NullProtoObject();
254
258
  };
255
- function isRippleEnabled(value) {
256
- return typeof value === 'undefined' || !!value;
257
- }
258
- function rippleShow(e) {
259
- const value = {};
260
- const element = e.currentTarget;
261
- if (!element || !element._ripple || element._ripple.touched || e.rippleStop) return; // Don't allow the event to trigger ripples on any other elements
262
-
263
- e.rippleStop = true;
264
- if (isTouchEvent(e)) {
265
- element._ripple.touched = true;
266
- element._ripple.isTouch = true;
267
- } else {
268
- // It's possible for touch events to fire
269
- // as mouse events on Android/iOS, this
270
- // will skip the event call if it has
271
- // already been registered as touch
272
- if (element._ripple.isTouch) return;
273
- }
274
- value.center = element._ripple.centered || isKeyboardEvent(e);
275
- if (element._ripple.class) {
276
- value.class = element._ripple.class;
277
- }
278
- if (isTouchEvent(e)) {
279
- // already queued that shows or hides the ripple
280
- if (element._ripple.showTimerCommit) return;
281
- element._ripple.showTimerCommit = () => {
282
- ripples.show(e, element, value);
283
- };
284
- element._ripple.showTimer = window.setTimeout(() => {
285
- if (element && element._ripple && element._ripple.showTimerCommit) {
286
- element._ripple.showTimerCommit();
287
- element._ripple.showTimerCommit = null;
288
- }
289
- }, DELAY_RIPPLE);
290
- } else {
291
- ripples.show(e, element, value);
292
- }
293
- }
294
- function rippleHide(e) {
295
- const element = e.currentTarget;
296
- if (!element || !element._ripple) return;
297
- window.clearTimeout(element._ripple.showTimer); // The touch interaction occurs before the show timer is triggered.
298
- // We still want to show ripple effect.
299
-
300
- if (e.type === 'touchend' && element._ripple.showTimerCommit) {
301
- element._ripple.showTimerCommit();
302
- element._ripple.showTimerCommit = null; // re-queue ripple hiding
303
-
304
- element._ripple.showTimer = setTimeout(() => {
305
- rippleHide(e);
306
- });
307
- return;
308
- }
309
- window.setTimeout(() => {
310
- if (element._ripple) {
311
- element._ripple.touched = false;
312
- }
313
- });
314
- ripples.hide(element);
315
- }
316
- function rippleCancelShow(e) {
317
- const element = e.currentTarget;
318
- if (!element || !element._ripple) return;
319
- if (element._ripple.showTimerCommit) {
320
- element._ripple.showTimerCommit = null;
321
- }
322
- window.clearTimeout(element._ripple.showTimer);
323
- }
324
- let keyboardRipple = false;
325
- function keyboardRippleShow(e) {
326
- if (!keyboardRipple && (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_1__[/* keyCodes */ "s"].enter || e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_1__[/* keyCodes */ "s"].space)) {
327
- keyboardRipple = true;
328
- rippleShow(e);
329
- }
330
- }
331
- function keyboardRippleHide(e) {
332
- keyboardRipple = false;
333
- rippleHide(e);
334
- }
335
- function focusRippleHide(e) {
336
- if (keyboardRipple === true) {
337
- keyboardRipple = false;
338
- rippleHide(e);
339
- }
340
- }
341
- function updateRipple(el, binding, wasEnabled) {
342
- const enabled = isRippleEnabled(binding.value);
343
- if (!enabled) {
344
- ripples.hide(el);
345
- }
346
- el._ripple = el._ripple || {};
347
- el._ripple.enabled = enabled;
348
- const value = binding.value || {};
349
- if (value.center) {
350
- el._ripple.centered = true;
351
- }
352
- if (value.class) {
353
- el._ripple.class = binding.value.class;
354
- }
355
- if (value.circle) {
356
- el._ripple.circle = value.circle;
357
- }
358
- if (enabled && !wasEnabled) {
359
- el.addEventListener('touchstart', rippleShow, {
360
- passive: true
361
- });
362
- el.addEventListener('touchend', rippleHide, {
363
- passive: true
364
- });
365
- el.addEventListener('touchmove', rippleCancelShow, {
366
- passive: true
367
- });
368
- el.addEventListener('touchcancel', rippleHide);
369
- el.addEventListener('mousedown', rippleShow);
370
- el.addEventListener('mouseup', rippleHide);
371
- el.addEventListener('mouseleave', rippleHide);
372
- el.addEventListener('keydown', keyboardRippleShow);
373
- el.addEventListener('keyup', keyboardRippleHide);
374
- el.addEventListener('blur', focusRippleHide); // Anchor tags can be dragged, causes other hides to fail - #1537
375
-
376
- el.addEventListener('dragstart', rippleHide, {
377
- passive: true
378
- });
379
- } else if (!enabled && wasEnabled) {
380
- removeListeners(el);
381
- }
382
- }
383
- function removeListeners(el) {
384
- el.removeEventListener('mousedown', rippleShow);
385
- el.removeEventListener('touchstart', rippleShow);
386
- el.removeEventListener('touchend', rippleHide);
387
- el.removeEventListener('touchmove', rippleCancelShow);
388
- el.removeEventListener('touchcancel', rippleHide);
389
- el.removeEventListener('mouseup', rippleHide);
390
- el.removeEventListener('mouseleave', rippleHide);
391
- el.removeEventListener('keydown', keyboardRippleShow);
392
- el.removeEventListener('keyup', keyboardRippleHide);
393
- el.removeEventListener('dragstart', rippleHide);
394
- el.removeEventListener('blur', focusRippleHide);
395
- }
396
- function directive(el, binding, node) {
397
- updateRipple(el, binding, false);
398
- if (false) {}
399
- }
400
- function unbind(el) {
401
- delete el._ripple;
402
- removeListeners(el);
403
- }
404
- function update(el, binding) {
405
- if (binding.value === binding.oldValue) {
406
- return;
407
- }
408
- const wasEnabled = isRippleEnabled(binding.oldValue);
409
- updateRipple(el, binding, wasEnabled);
410
- }
411
- const Ripple = {
412
- bind: directive,
413
- unbind,
414
- update
259
+
260
+ hiddenKeys[IE_PROTO] = true;
261
+
262
+ // `Object.create` method
263
+ // https://tc39.es/ecma262/#sec-object.create
264
+ // eslint-disable-next-line es/no-object-create -- safe
265
+ module.exports = Object.create || function create(O, Properties) {
266
+ var result;
267
+ if (O !== null) {
268
+ EmptyConstructor[PROTOTYPE] = anObject(O);
269
+ result = new EmptyConstructor();
270
+ EmptyConstructor[PROTOTYPE] = null;
271
+ // add "__proto__" for Object.getPrototypeOf polyfill
272
+ result[IE_PROTO] = O;
273
+ } else result = NullProtoObject();
274
+ return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
415
275
  };
416
- /* harmony default export */ __webpack_exports__["a"] = (Ripple);
276
+
417
277
 
418
278
  /***/ }),
419
279
 
420
- /***/ "7c5f":
280
+ /***/ "36e1":
421
281
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
422
282
 
423
283
  "use strict";
424
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
284
+ /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("fbf8");
425
285
 
426
- /**
427
- * This mixin provides `attrs$` and `listeners$` to work around
428
- * vue bug https://github.com/vuejs/vue/issues/10115
429
- */
430
286
 
431
- function makeWatcher(property) {
432
- return function (val, oldVal) {
433
- for (const attr in oldVal) {
434
- if (!Object.prototype.hasOwnProperty.call(val, attr)) {
435
- this.$delete(this.$data[property], attr);
436
- }
437
- }
438
- for (const attr in val) {
439
- this.$set(this.$data[property], attr, val[attr]);
440
- }
441
- };
442
- }
443
- /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
444
- data: () => ({
445
- attrs$: {},
446
- listeners$: {}
447
- }),
448
- created() {
449
- // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115
450
- // Make sure to use `attrs$` instead of `$attrs` (confusing right?)
451
- this.$watch('$attrs', makeWatcher('attrs$'), {
452
- immediate: true
453
- });
454
- this.$watch('$listeners', makeWatcher('listeners$'), {
455
- immediate: true
456
- });
457
- }
458
- }));
287
+ /* harmony default export */ __webpack_exports__["a"] = (_VIcon__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"]);
459
288
 
460
289
  /***/ }),
461
290
 
462
- /***/ "8082":
463
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
291
+ /***/ "45a8":
292
+ /***/ (function(module, exports, __webpack_require__) {
464
293
 
465
294
  "use strict";
466
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
467
295
 
468
- /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
469
- name: 'sizeable',
470
- props: {
471
- large: Boolean,
472
- small: Boolean,
473
- xLarge: Boolean,
474
- xSmall: Boolean
475
- },
476
- computed: {
477
- medium() {
478
- return Boolean(!this.xSmall && !this.small && !this.large && !this.xLarge);
479
- },
480
- sizeableClasses() {
481
- return {
482
- 'v-size--x-small': this.xSmall,
483
- 'v-size--small': this.small,
484
- 'v-size--default': this.medium,
485
- 'v-size--large': this.large,
486
- 'v-size--x-large': this.xLarge
487
- };
488
- }
296
+ var $ = __webpack_require__("4b31");
297
+ var toObject = __webpack_require__("368f");
298
+ var lengthOfArrayLike = __webpack_require__("c944");
299
+ var toIntegerOrInfinity = __webpack_require__("015b");
300
+ var addToUnscopables = __webpack_require__("7310");
301
+
302
+ // `Array.prototype.at` method
303
+ // https://github.com/tc39/proposal-relative-indexing-method
304
+ $({ target: 'Array', proto: true }, {
305
+ at: function at(index) {
306
+ var O = toObject(this);
307
+ var len = lengthOfArrayLike(O);
308
+ var relativeIndex = toIntegerOrInfinity(index);
309
+ var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
310
+ return (k < 0 || k >= len) ? undefined : O[k];
489
311
  }
490
- }));
491
-
492
- /***/ }),
493
-
494
- /***/ "901a":
495
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
496
-
497
- "use strict";
498
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return factory; });
499
- /* harmony import */ var _registrable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("92e2");
500
- // Mixins
312
+ });
501
313
 
502
- function factory(namespace, child, parent) {
503
- return Object(_registrable__WEBPACK_IMPORTED_MODULE_0__[/* inject */ "a"])(namespace, child, parent).extend({
504
- name: 'groupable',
505
- props: {
506
- activeClass: {
507
- type: String,
508
- default() {
509
- if (!this[namespace]) return undefined;
510
- return this[namespace].activeClass;
511
- }
512
- },
513
- disabled: Boolean
514
- },
515
- data() {
516
- return {
517
- isActive: false
518
- };
519
- },
520
- computed: {
521
- groupClasses() {
522
- if (!this.activeClass) return {};
523
- return {
524
- [this.activeClass]: this.isActive
525
- };
526
- }
527
- },
528
- created() {
529
- this[namespace] && this[namespace].register(this);
530
- },
531
- beforeDestroy() {
532
- this[namespace] && this[namespace].unregister(this);
533
- },
534
- methods: {
535
- toggle() {
536
- this.$emit('change');
537
- }
538
- }
539
- });
540
- }
541
- /* eslint-disable-next-line @typescript-eslint/no-redeclare */
314
+ addToUnscopables('at');
542
315
 
543
- const Groupable = factory('itemGroup');
544
- /* unused harmony default export */ var _unused_webpack_default_export = (Groupable);
545
316
 
546
317
  /***/ }),
547
318
 
548
- /***/ "92e2":
549
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
319
+ /***/ "5375":
320
+ /***/ (function(module, exports, __webpack_require__) {
550
321
 
551
322
  "use strict";
552
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return inject; });
553
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return provide; });
554
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
555
- /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("6c21");
556
-
557
-
558
- function generateWarning(child, parent) {
559
- return () => Object(_util_console__WEBPACK_IMPORTED_MODULE_1__[/* consoleWarn */ "c"])(`The ${child} component must be used inside a ${parent}`);
560
- }
561
- function inject(namespace, child, parent) {
562
- const defaultImpl = child && parent ? {
563
- register: generateWarning(child, parent),
564
- unregister: generateWarning(child, parent)
565
- } : null;
566
- return vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
567
- name: 'registrable-inject',
568
- inject: {
569
- [namespace]: {
570
- default: defaultImpl
571
- }
572
- }
573
- });
574
- }
575
- function provide(namespace, self = false) {
576
- return vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
577
- name: 'registrable-provide',
578
- provide() {
579
- return {
580
- [namespace]: self ? this : {
581
- register: this.register,
582
- unregister: this.unregister
583
- }
584
- };
585
- }
586
- });
587
- }
588
-
589
- /***/ }),
590
323
 
591
- /***/ "9d92":
592
- /***/ (function(module, exports, __webpack_require__) {
593
324
 
594
- // extracted by mini-css-extract-plugin
325
+ const UPPERCASE = /[\p{Lu}]/u;
326
+ const LOWERCASE = /[\p{Ll}]/u;
327
+ const LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/gu;
328
+ const IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u;
329
+ const SEPARATORS = /[_.\- ]+/;
330
+
331
+ const LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);
332
+ const SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');
333
+ const NUMBERS_AND_IDENTIFIER = new RegExp('\\d+' + IDENTIFIER.source, 'gu');
334
+
335
+ const preserveCamelCase = (string, toLowerCase, toUpperCase) => {
336
+ let isLastCharLower = false;
337
+ let isLastCharUpper = false;
338
+ let isLastLastCharUpper = false;
339
+
340
+ for (let i = 0; i < string.length; i++) {
341
+ const character = string[i];
342
+
343
+ if (isLastCharLower && UPPERCASE.test(character)) {
344
+ string = string.slice(0, i) + '-' + string.slice(i);
345
+ isLastCharLower = false;
346
+ isLastLastCharUpper = isLastCharUpper;
347
+ isLastCharUpper = true;
348
+ i++;
349
+ } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) {
350
+ string = string.slice(0, i - 1) + '-' + string.slice(i - 1);
351
+ isLastLastCharUpper = isLastCharUpper;
352
+ isLastCharUpper = false;
353
+ isLastCharLower = true;
354
+ } else {
355
+ isLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character;
356
+ isLastLastCharUpper = isLastCharUpper;
357
+ isLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character;
358
+ }
359
+ }
360
+
361
+ return string;
362
+ };
595
363
 
596
- /***/ }),
364
+ const preserveConsecutiveUppercase = (input, toLowerCase) => {
365
+ LEADING_CAPITAL.lastIndex = 0;
597
366
 
598
- /***/ "c533":
599
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
367
+ return input.replace(LEADING_CAPITAL, m1 => toLowerCase(m1));
368
+ };
600
369
 
601
- "use strict";
602
- /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("c3d6");
603
- /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);
604
- /* harmony import */ var _src_components_VList_VList_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9d92");
605
- /* harmony import */ var _src_components_VList_VList_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_src_components_VList_VList_sass__WEBPACK_IMPORTED_MODULE_1__);
606
- /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("1163");
370
+ const postProcess = (input, toUpperCase) => {
371
+ SEPARATORS_AND_IDENTIFIER.lastIndex = 0;
372
+ NUMBERS_AND_IDENTIFIER.lastIndex = 0;
607
373
 
608
- // Styles
609
- // Components
374
+ return input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier))
375
+ .replace(NUMBERS_AND_IDENTIFIER, m => toUpperCase(m));
376
+ };
610
377
 
378
+ const camelCase = (input, options) => {
379
+ if (!(typeof input === 'string' || Array.isArray(input))) {
380
+ throw new TypeError('Expected the input to be `string | string[]`');
381
+ }
382
+
383
+ options = {
384
+ pascalCase: false,
385
+ preserveConsecutiveUppercase: false,
386
+ ...options
387
+ };
388
+
389
+ if (Array.isArray(input)) {
390
+ input = input.map(x => x.trim())
391
+ .filter(x => x.length)
392
+ .join('-');
393
+ } else {
394
+ input = input.trim();
395
+ }
396
+
397
+ if (input.length === 0) {
398
+ return '';
399
+ }
400
+
401
+ const toLowerCase = options.locale === false ?
402
+ string => string.toLowerCase() :
403
+ string => string.toLocaleLowerCase(options.locale);
404
+ const toUpperCase = options.locale === false ?
405
+ string => string.toUpperCase() :
406
+ string => string.toLocaleUpperCase(options.locale);
407
+
408
+ if (input.length === 1) {
409
+ return options.pascalCase ? toUpperCase(input) : toLowerCase(input);
410
+ }
411
+
412
+ const hasUpperCase = input !== toLowerCase(input);
413
+
414
+ if (hasUpperCase) {
415
+ input = preserveCamelCase(input, toLowerCase, toUpperCase);
416
+ }
417
+
418
+ input = input.replace(LEADING_SEPARATORS, '');
419
+
420
+ if (options.preserveConsecutiveUppercase) {
421
+ input = preserveConsecutiveUppercase(input, toLowerCase);
422
+ } else {
423
+ input = toLowerCase(input);
424
+ }
425
+
426
+ if (options.pascalCase) {
427
+ input = toUpperCase(input.charAt(0)) + input.slice(1);
428
+ }
429
+
430
+ return postProcess(input, toUpperCase);
431
+ };
611
432
 
612
- /* @vue/component */
433
+ module.exports = camelCase;
434
+ // TODO: Remove this for the next major release
435
+ module.exports.default = camelCase;
613
436
 
614
- /* harmony default export */ __webpack_exports__["a"] = (_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].extend().extend({
615
- name: 'v-list',
616
- provide() {
617
- return {
618
- isInList: true,
619
- list: this
620
- };
621
- },
622
- inject: {
623
- isInMenu: {
624
- default: false
625
- },
626
- isInNav: {
627
- default: false
628
- }
629
- },
630
- props: {
631
- dense: Boolean,
632
- disabled: Boolean,
633
- expand: Boolean,
634
- flat: Boolean,
635
- nav: Boolean,
636
- rounded: Boolean,
637
- subheader: Boolean,
638
- threeLine: Boolean,
639
- twoLine: Boolean
640
- },
641
- data: () => ({
642
- groups: []
643
- }),
644
- computed: {
645
- classes() {
646
- return {
647
- ..._VSheet_VSheet__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].options.computed.classes.call(this),
648
- 'v-list--dense': this.dense,
649
- 'v-list--disabled': this.disabled,
650
- 'v-list--flat': this.flat,
651
- 'v-list--nav': this.nav,
652
- 'v-list--rounded': this.rounded,
653
- 'v-list--subheader': this.subheader,
654
- 'v-list--two-line': this.twoLine,
655
- 'v-list--three-line': this.threeLine
656
- };
657
- }
658
- },
659
- methods: {
660
- register(content) {
661
- this.groups.push(content);
662
- },
663
- unregister(content) {
664
- const index = this.groups.findIndex(g => g._uid === content._uid);
665
- if (index > -1) this.groups.splice(index, 1);
666
- },
667
- listClick(uid) {
668
- if (this.expand) return;
669
- for (const group of this.groups) {
670
- group.toggle(uid);
671
- }
672
- }
673
- },
674
- render(h) {
675
- const data = {
676
- staticClass: 'v-list',
677
- class: this.classes,
678
- style: this.styles,
679
- attrs: {
680
- role: this.isInNav || this.isInMenu ? undefined : 'list',
681
- ...this.attrs$
682
- }
683
- };
684
- return h(this.tag, this.setBackgroundColor(this.color, data), [this.$slots.default]);
685
- }
686
- }));
687
437
 
688
438
  /***/ }),
689
439
 
690
- /***/ "dc7f":
440
+ /***/ "5d2e":
691
441
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
692
442
 
693
443
  "use strict";
694
- /* harmony import */ var _src_components_VList_VListItem_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("f286");
695
- /* harmony import */ var _src_components_VList_VListItem_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_src_components_VList_VListItem_sass__WEBPACK_IMPORTED_MODULE_0__);
696
- /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("de91");
697
- /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("facc");
698
- /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("901a");
699
- /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("64ad");
700
- /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("646d");
701
- /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("7b64");
702
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("3d78");
703
- /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("6c21");
704
- /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("9d7d");
705
- // Styles
706
- // Mixins
707
-
708
-
709
-
444
+ /* harmony import */ var _stackable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("9c0d");
445
+ /* harmony import */ var _positionable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("3473");
446
+ /* harmony import */ var _activatable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("9be2");
447
+ /* harmony import */ var _detachable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("eeb4");
448
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("9d7d");
449
+ /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("3d78");
450
+ // Mixins
710
451
 
711
452
 
712
- // Directives
713
453
 
714
454
  // Utilities
715
455
 
716
456
 
717
- // Types
718
-
719
457
 
720
- const baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"], _mixins_routable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_3__[/* factory */ "a"])('listItemGroup'), Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__[/* factory */ "b"])('inputValue'));
458
+ const baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(_stackable__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"], Object(_positionable__WEBPACK_IMPORTED_MODULE_1__[/* factory */ "b"])(['top', 'right', 'bottom', 'left', 'absolute']), _activatable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"], _detachable__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"]);
721
459
  /* @vue/component */
722
460
 
723
461
  /* harmony default export */ __webpack_exports__["a"] = (baseMixins.extend().extend({
724
- name: 'v-list-item',
725
- directives: {
726
- Ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"]
727
- },
728
- inject: {
729
- isInGroup: {
730
- default: false
462
+ name: 'menuable',
463
+ props: {
464
+ allowOverflow: Boolean,
465
+ light: Boolean,
466
+ dark: Boolean,
467
+ maxWidth: {
468
+ type: [Number, String],
469
+ default: 'auto'
731
470
  },
732
- isInList: {
733
- default: false
471
+ minWidth: [Number, String],
472
+ nudgeBottom: {
473
+ type: [Number, String],
474
+ default: 0
734
475
  },
735
- isInMenu: {
736
- default: false
476
+ nudgeLeft: {
477
+ type: [Number, String],
478
+ default: 0
737
479
  },
738
- isInNav: {
739
- default: false
740
- }
741
- },
742
- inheritAttrs: false,
743
- props: {
744
- activeClass: {
745
- type: String,
746
- default() {
747
- if (!this.listItemGroup) return '';
748
- return this.listItemGroup.activeClass;
749
- }
480
+ nudgeRight: {
481
+ type: [Number, String],
482
+ default: 0
750
483
  },
751
- dense: Boolean,
752
- inactive: Boolean,
753
- link: Boolean,
754
- selectable: {
755
- type: Boolean
484
+ nudgeTop: {
485
+ type: [Number, String],
486
+ default: 0
756
487
  },
757
- tag: {
758
- type: String,
759
- default: 'div'
488
+ nudgeWidth: {
489
+ type: [Number, String],
490
+ default: 0
760
491
  },
761
- threeLine: Boolean,
762
- twoLine: Boolean,
763
- value: null
492
+ offsetOverflow: Boolean,
493
+ positionX: {
494
+ type: Number,
495
+ default: null
496
+ },
497
+ positionY: {
498
+ type: Number,
499
+ default: null
500
+ },
501
+ zIndex: {
502
+ type: [Number, String],
503
+ default: null
504
+ }
764
505
  },
765
506
  data: () => ({
766
- proxyClass: 'v-list-item--active'
767
- }),
768
- computed: {
769
- classes() {
770
- return {
771
- 'v-list-item': true,
772
- ..._mixins_routable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].options.computed.classes.call(this),
773
- 'v-list-item--dense': this.dense,
774
- 'v-list-item--disabled': this.disabled,
775
- 'v-list-item--link': this.isClickable && !this.inactive,
776
- 'v-list-item--selectable': this.selectable,
777
- 'v-list-item--three-line': this.threeLine,
778
- 'v-list-item--two-line': this.twoLine,
779
- ...this.themeClasses
780
- };
507
+ activatorNode: [],
508
+ absoluteX: 0,
509
+ absoluteY: 0,
510
+ activatedBy: null,
511
+ activatorFixed: false,
512
+ dimensions: {
513
+ activator: {
514
+ top: 0,
515
+ left: 0,
516
+ bottom: 0,
517
+ right: 0,
518
+ width: 0,
519
+ height: 0,
520
+ offsetTop: 0,
521
+ scrollHeight: 0,
522
+ offsetLeft: 0
523
+ },
524
+ content: {
525
+ top: 0,
526
+ left: 0,
527
+ bottom: 0,
528
+ right: 0,
529
+ width: 0,
530
+ height: 0,
531
+ offsetTop: 0,
532
+ scrollHeight: 0
533
+ }
781
534
  },
782
- isClickable() {
783
- return Boolean(_mixins_routable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].options.computed.isClickable.call(this) || this.listItemGroup);
535
+ relativeYOffset: 0,
536
+ hasJustFocused: false,
537
+ hasWindow: false,
538
+ inputActivator: false,
539
+ isContentActive: false,
540
+ pageWidth: 0,
541
+ pageYOffset: 0,
542
+ stackClass: 'v-menu__content--active',
543
+ stackMinZIndex: 6
544
+ }),
545
+ computed: {
546
+ computedLeft() {
547
+ const a = this.dimensions.activator;
548
+ const c = this.dimensions.content;
549
+ const activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0;
550
+ const minWidth = Math.max(a.width, c.width);
551
+ let left = 0;
552
+ left += activatorLeft;
553
+ if (this.left || this.$vuetify.rtl && !this.right) left -= minWidth - a.width;
554
+ if (this.offsetX) {
555
+ const maxWidth = isNaN(Number(this.maxWidth)) ? a.width : Math.min(a.width, Number(this.maxWidth));
556
+ left += this.left ? -maxWidth : a.width;
557
+ }
558
+ if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
559
+ if (this.nudgeRight) left += parseInt(this.nudgeRight);
560
+ return left;
561
+ },
562
+ computedTop() {
563
+ const a = this.dimensions.activator;
564
+ const c = this.dimensions.content;
565
+ let top = 0;
566
+ if (this.top) top += a.height - c.height;
567
+ if (this.attach !== false) top += a.offsetTop;else top += a.top + this.pageYOffset;
568
+ if (this.offsetY) top += this.top ? -a.height : a.height;
569
+ if (this.nudgeTop) top -= parseInt(this.nudgeTop);
570
+ if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
571
+ return top;
572
+ },
573
+ hasActivator() {
574
+ return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator;
575
+ },
576
+ absoluteYOffset() {
577
+ return this.pageYOffset - this.relativeYOffset;
784
578
  }
785
579
  },
786
- created() {
787
- /* istanbul ignore next */
788
- if (this.$attrs.hasOwnProperty('avatar')) {
789
- Object(_util_console__WEBPACK_IMPORTED_MODULE_8__[/* removed */ "e"])('avatar', this);
580
+ watch: {
581
+ disabled(val) {
582
+ val && this.callDeactivate();
583
+ },
584
+ isActive(val) {
585
+ if (this.disabled) return;
586
+ val ? this.callActivate() : this.callDeactivate();
587
+ },
588
+ positionX: 'updateDimensions',
589
+ positionY: 'updateDimensions'
590
+ },
591
+ beforeMount() {
592
+ this.hasWindow = typeof window !== 'undefined';
593
+ if (this.hasWindow) {
594
+ window.addEventListener('resize', this.updateDimensions, false);
595
+ }
596
+ },
597
+ beforeDestroy() {
598
+ if (this.hasWindow) {
599
+ window.removeEventListener('resize', this.updateDimensions, false);
790
600
  }
791
601
  },
792
602
  methods: {
793
- click(e) {
794
- if (e.detail) this.$el.blur();
795
- this.$emit('click', e);
796
- this.to || this.toggle();
797
- },
798
- genAttrs() {
799
- const attrs = {
800
- 'aria-disabled': this.disabled ? true : undefined,
801
- tabindex: this.isClickable && !this.disabled ? 0 : -1,
802
- ...this.$attrs
603
+ absolutePosition() {
604
+ return {
605
+ offsetTop: this.positionY || this.absoluteY,
606
+ offsetLeft: this.positionX || this.absoluteX,
607
+ scrollHeight: 0,
608
+ top: this.positionY || this.absoluteY,
609
+ bottom: this.positionY || this.absoluteY,
610
+ left: this.positionX || this.absoluteX,
611
+ right: this.positionX || this.absoluteX,
612
+ height: 0,
613
+ width: 0
803
614
  };
804
- if (this.$attrs.hasOwnProperty('role')) {// do nothing, role already provided
805
- } else if (this.isInNav) {// do nothing, role is inherit
806
- } else if (this.isInGroup) {
807
- attrs.role = 'option';
808
- attrs['aria-selected'] = String(this.isActive);
809
- } else if (this.isInMenu) {
810
- attrs.role = this.isClickable ? 'menuitem' : undefined;
811
- attrs.id = attrs.id || `list-item-${this._uid}`;
812
- } else if (this.isInList) {
813
- attrs.role = 'listitem';
615
+ },
616
+ activate() {},
617
+ calcLeft(menuWidth) {
618
+ return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__[/* convertToUnit */ "g"])(this.attach !== false ? this.computedLeft : this.calcXOverflow(this.computedLeft, menuWidth));
619
+ },
620
+ calcTop() {
621
+ return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__[/* convertToUnit */ "g"])(this.attach !== false ? this.computedTop : this.calcYOverflow(this.computedTop));
622
+ },
623
+ calcXOverflow(left, menuWidth) {
624
+ const xOverflow = left + menuWidth - this.pageWidth + 12;
625
+ if ((!this.left || this.right) && xOverflow > 0) {
626
+ left = Math.max(left - xOverflow, 0);
627
+ } else {
628
+ left = Math.max(left, 12);
814
629
  }
815
- return attrs;
630
+ return left + this.getOffsetLeft();
631
+ },
632
+ calcYOverflow(top) {
633
+ const documentHeight = this.getInnerHeight();
634
+ const toTop = this.absoluteYOffset + documentHeight;
635
+ const activator = this.dimensions.activator;
636
+ const contentHeight = this.dimensions.content.height;
637
+ const totalHeight = top + contentHeight;
638
+ const isOverflowing = toTop < totalHeight; // If overflowing bottom and offset
639
+ // TODO: set 'bottom' position instead of 'top'
640
+
641
+ if (isOverflowing && this.offsetOverflow &&
642
+ // If we don't have enough room to offset
643
+ // the overflow, don't offset
644
+ activator.top > contentHeight) {
645
+ top = this.pageYOffset + (activator.top - contentHeight); // If overflowing bottom
646
+ } else if (isOverflowing && !this.allowOverflow) {
647
+ top = toTop - contentHeight - 12; // If overflowing top
648
+ } else if (top < this.absoluteYOffset && !this.allowOverflow) {
649
+ top = this.absoluteYOffset + 12;
650
+ }
651
+ return top < 12 ? 12 : top;
652
+ },
653
+ callActivate() {
654
+ if (!this.hasWindow) return;
655
+ this.activate();
816
656
  },
817
- toggle() {
818
- if (this.to && this.inputValue === undefined) {
819
- this.isActive = !this.isActive;
657
+ callDeactivate() {
658
+ this.isContentActive = false;
659
+ this.deactivate();
660
+ },
661
+ checkForPageYOffset() {
662
+ if (this.hasWindow) {
663
+ this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop();
820
664
  }
821
- this.$emit('change');
822
- }
823
- },
824
- render(h) {
825
- let {
826
- tag,
827
- data
828
- } = this.generateRouteLink();
829
- data.attrs = {
830
- ...data.attrs,
831
- ...this.genAttrs()
832
- };
833
- data[this.to ? 'nativeOn' : 'on'] = {
834
- ...data[this.to ? 'nativeOn' : 'on'],
835
- keydown: e => {
836
- if (!this.disabled) {
837
- /* istanbul ignore else */
838
- if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_7__[/* keyCodes */ "s"].enter) this.click(e);
839
- this.$emit('keydown', e);
665
+ },
666
+ checkActivatorFixed() {
667
+ if (this.attach !== false) {
668
+ this.activatorFixed = false;
669
+ return;
670
+ }
671
+ let el = this.getActivator();
672
+ while (el) {
673
+ if (window.getComputedStyle(el).position === 'fixed') {
674
+ this.activatorFixed = true;
675
+ return;
840
676
  }
677
+ el = el.offsetParent;
841
678
  }
842
- };
843
- if (this.inactive) tag = 'div';
844
- if (this.inactive && this.to) {
845
- data.on = data.nativeOn;
846
- delete data.nativeOn;
679
+ this.activatorFixed = false;
680
+ },
681
+ deactivate() {},
682
+ genActivatorListeners() {
683
+ const listeners = _activatable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"].options.methods.genActivatorListeners.call(this);
684
+ const onClick = listeners.click;
685
+ if (onClick) {
686
+ listeners.click = e => {
687
+ if (this.openOnClick) {
688
+ onClick && onClick(e);
689
+ }
690
+ this.absoluteX = e.clientX;
691
+ this.absoluteY = e.clientY;
692
+ };
693
+ }
694
+ return listeners;
695
+ },
696
+ getInnerHeight() {
697
+ if (!this.hasWindow) return 0;
698
+ return window.innerHeight || document.documentElement.clientHeight;
699
+ },
700
+ getOffsetLeft() {
701
+ if (!this.hasWindow) return 0;
702
+ return window.pageXOffset || document.documentElement.scrollLeft;
703
+ },
704
+ getOffsetTop() {
705
+ if (!this.hasWindow) return 0;
706
+ return window.pageYOffset || document.documentElement.scrollTop;
707
+ },
708
+ getRoundedBoundedClientRect(el) {
709
+ const rect = el.getBoundingClientRect();
710
+ return {
711
+ top: Math.round(rect.top),
712
+ left: Math.round(rect.left),
713
+ bottom: Math.round(rect.bottom),
714
+ right: Math.round(rect.right),
715
+ width: Math.round(rect.width),
716
+ height: Math.round(rect.height)
717
+ };
718
+ },
719
+ measure(el) {
720
+ if (!el || !this.hasWindow) return null;
721
+ const rect = this.getRoundedBoundedClientRect(el); // Account for activator margin
722
+
723
+ if (this.attach !== false) {
724
+ const style = window.getComputedStyle(el);
725
+ rect.left = parseInt(style.marginLeft);
726
+ rect.top = parseInt(style.marginTop);
727
+ }
728
+ return rect;
729
+ },
730
+ sneakPeek(cb) {
731
+ requestAnimationFrame(() => {
732
+ const el = this.$refs.content;
733
+ if (!el || el.style.display !== 'none') {
734
+ cb();
735
+ return;
736
+ }
737
+ el.style.display = 'inline-block';
738
+ cb();
739
+ el.style.display = 'none';
740
+ });
741
+ },
742
+ startTransition() {
743
+ return new Promise(resolve => requestAnimationFrame(() => {
744
+ this.isContentActive = this.hasJustFocused = this.isActive;
745
+ resolve();
746
+ }));
747
+ },
748
+ updateDimensions() {
749
+ this.hasWindow = typeof window !== 'undefined';
750
+ this.checkActivatorFixed();
751
+ this.checkForPageYOffset();
752
+ this.pageWidth = document.documentElement.clientWidth;
753
+ const dimensions = {
754
+ activator: {
755
+ ...this.dimensions.activator
756
+ },
757
+ content: {
758
+ ...this.dimensions.content
759
+ }
760
+ }; // Activator should already be shown
761
+
762
+ if (!this.hasActivator || this.absolute) {
763
+ dimensions.activator = this.absolutePosition();
764
+ } else {
765
+ const activator = this.getActivator();
766
+ if (!activator) return;
767
+ dimensions.activator = this.measure(activator);
768
+ dimensions.activator.offsetLeft = activator.offsetLeft;
769
+ if (this.attach !== false) {
770
+ // account for css padding causing things to not line up
771
+ // this is mostly for v-autocomplete, hopefully it won't break anything
772
+ dimensions.activator.offsetTop = activator.offsetTop;
773
+ } else {
774
+ dimensions.activator.offsetTop = 0;
775
+ }
776
+ } // Display and hide to get dimensions
777
+
778
+ this.sneakPeek(() => {
779
+ if (this.$refs.content) {
780
+ if (this.$refs.content.offsetParent) {
781
+ const offsetRect = this.getRoundedBoundedClientRect(this.$refs.content.offsetParent);
782
+ this.relativeYOffset = window.pageYOffset + offsetRect.top;
783
+ dimensions.activator.top -= this.relativeYOffset;
784
+ dimensions.activator.left -= window.pageXOffset + offsetRect.left;
785
+ }
786
+ dimensions.content = this.measure(this.$refs.content);
787
+ }
788
+ this.dimensions = dimensions;
789
+ });
847
790
  }
848
- const children = this.$scopedSlots.default ? this.$scopedSlots.default({
849
- active: this.isActive,
850
- toggle: this.toggle
851
- }) : this.$slots.default;
852
- return h(tag, this.isActive ? this.setTextColor(this.color, data) : data, children);
853
791
  }
854
792
  }));
855
793
 
856
794
  /***/ }),
857
795
 
858
- /***/ "f119":
796
+ /***/ "5ecd":
797
+ /***/ (function(module, exports, __webpack_require__) {
798
+
799
+ !function(e,i){ true?module.exports=i():undefined}(this,(function(){"use strict";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r="("===(f=f||"()")[0],u=")"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}}));
800
+
801
+ /***/ }),
802
+
803
+ /***/ "7310":
804
+ /***/ (function(module, exports, __webpack_require__) {
805
+
806
+ var wellKnownSymbol = __webpack_require__("1860");
807
+ var create = __webpack_require__("2444");
808
+ var defineProperty = __webpack_require__("3ce5").f;
809
+
810
+ var UNSCOPABLES = wellKnownSymbol('unscopables');
811
+ var ArrayPrototype = Array.prototype;
812
+
813
+ // Array.prototype[@@unscopables]
814
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
815
+ if (ArrayPrototype[UNSCOPABLES] == undefined) {
816
+ defineProperty(ArrayPrototype, UNSCOPABLES, {
817
+ configurable: true,
818
+ value: create(null)
819
+ });
820
+ }
821
+
822
+ // add a key to Array.prototype[@@unscopables]
823
+ module.exports = function (key) {
824
+ ArrayPrototype[UNSCOPABLES][key] = true;
825
+ };
826
+
827
+
828
+ /***/ }),
829
+
830
+ /***/ "759d":
859
831
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
860
832
 
861
833
  "use strict";
862
834
  /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("c3d6");
863
835
  /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);
864
- /* harmony import */ var _src_components_VMenu_VMenu_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("ff7f");
865
- /* harmony import */ var _src_components_VMenu_VMenu_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_src_components_VMenu_VMenu_sass__WEBPACK_IMPORTED_MODULE_1__);
866
- /* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("3f84");
867
- /* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("9be2");
868
- /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("0ce2");
869
- /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("759d");
870
- /* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("5d2e");
871
- /* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("4368");
872
- /* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("a0f0");
873
- /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("64ad");
874
- /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("9d2d");
875
- /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("d257");
876
- /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("9d7d");
877
- /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("6c21");
878
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("3d78");
879
- /* harmony import */ var _services_goto__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__("3b2f");
836
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9d7d");
880
837
 
881
- // Styles
882
- // Components
883
838
 
884
- // Mixins
839
+ function searchChildren(children) {
840
+ const results = [];
841
+ for (let index = 0; index < children.length; index++) {
842
+ const child = children[index];
843
+ if (child.isActive && child.isDependent) {
844
+ results.push(child);
845
+ } else {
846
+ results.push(...searchChildren(child.$children));
847
+ }
848
+ }
849
+ return results;
850
+ }
851
+ /* @vue/component */
885
852
 
853
+ /* harmony default export */ __webpack_exports__["a"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])().extend({
854
+ name: 'dependent',
855
+ data() {
856
+ return {
857
+ closeDependents: true,
858
+ isActive: false,
859
+ isDependent: true
860
+ };
861
+ },
862
+ watch: {
863
+ isActive(val) {
864
+ if (val) return;
865
+ const openDependents = this.getOpenDependents();
866
+ for (let index = 0; index < openDependents.length; index++) {
867
+ openDependents[index].isActive = false;
868
+ }
869
+ }
870
+ },
871
+ methods: {
872
+ getOpenDependents() {
873
+ if (this.closeDependents) return searchChildren(this.$children);
874
+ return [];
875
+ },
876
+ getOpenDependentElements() {
877
+ const result = [];
878
+ const openDependents = this.getOpenDependents();
879
+ for (let index = 0; index < openDependents.length; index++) {
880
+ result.push(...openDependents[index].getClickableDependentElements());
881
+ }
882
+ return result;
883
+ },
884
+ getClickableDependentElements() {
885
+ const result = [this.$el];
886
+ if (this.$refs.content) result.push(this.$refs.content);
887
+ if (this.overlay) result.push(this.overlay.$el);
888
+ result.push(...this.getOpenDependentElements());
889
+ return result;
890
+ }
891
+ }
892
+ }));
893
+
894
+ /***/ }),
886
895
 
896
+ /***/ "886c":
897
+ /***/ (function(module, exports, __webpack_require__) {
887
898
 
899
+ // extracted by mini-css-extract-plugin
888
900
 
901
+ /***/ }),
889
902
 
903
+ /***/ "8e6b":
904
+ /***/ (function(module, exports, __webpack_require__) {
890
905
 
906
+ // extracted by mini-css-extract-plugin
891
907
 
892
- // Directives
908
+ /***/ }),
893
909
 
910
+ /***/ "9be2":
911
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
894
912
 
895
- // Utilities
913
+ "use strict";
914
+ /* harmony import */ var _delayable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("0ce2");
915
+ /* harmony import */ var _toggleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("646d");
916
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("9d7d");
917
+ /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("3d78");
918
+ /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("6c21");
919
+ // Mixins
896
920
 
921
+ // Utilities
897
922
 
898
923
 
899
924
 
900
925
 
901
- const baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"])(_mixins_dependent__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"], _mixins_delayable__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"], _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"], _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"]);
926
+ const baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_delayable__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"], _toggleable__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"]);
902
927
  /* @vue/component */
903
928
 
904
929
  /* harmony default export */ __webpack_exports__["a"] = (baseMixins.extend({
905
- name: 'v-menu',
906
- directives: {
907
- ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"],
908
- Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"]
909
- },
910
- provide() {
911
- return {
912
- isInMenu: true,
913
- // Pass theme through to default slot
914
- theme: this.theme
915
- };
916
- },
930
+ name: 'activatable',
917
931
  props: {
918
- auto: Boolean,
919
- closeOnClick: {
920
- type: Boolean,
921
- default: true
932
+ activator: {
933
+ default: null,
934
+ validator: val => {
935
+ return ['string', 'object'].includes(typeof val);
936
+ }
922
937
  },
923
- closeOnContentClick: {
938
+ disabled: Boolean,
939
+ internalActivator: Boolean,
940
+ openOnClick: {
924
941
  type: Boolean,
925
942
  default: true
926
943
  },
927
- disabled: Boolean,
928
- disableKeys: Boolean,
929
- maxHeight: {
930
- type: [Number, String],
931
- default: 'auto'
932
- },
933
- offsetX: Boolean,
934
- offsetY: Boolean,
935
944
  openOnHover: Boolean,
936
- origin: {
937
- type: String,
938
- default: 'top left'
939
- },
940
- transition: {
941
- type: [Boolean, String],
942
- default: 'v-menu-transition'
943
- }
944
- },
945
- data() {
946
- return {
947
- calculatedTopAuto: 0,
948
- defaultOffset: 8,
949
- hasJustFocused: false,
950
- listIndex: -1,
951
- resizeTimeout: 0,
952
- selectedIndex: null,
953
- tiles: []
954
- };
955
- },
956
- computed: {
957
- activeTile() {
958
- return this.tiles[this.listIndex];
959
- },
960
- calculatedLeft() {
961
- const menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth));
962
- if (!this.auto) return this.calcLeft(menuWidth) || '0';
963
- return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) || '0';
964
- },
965
- calculatedMaxHeight() {
966
- const height = this.auto ? '200px' : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(this.maxHeight);
967
- return height || '0';
968
- },
969
- calculatedMaxWidth() {
970
- return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(this.maxWidth) || '0';
971
- },
972
- calculatedMinWidth() {
973
- if (this.minWidth) {
974
- return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(this.minWidth) || '0';
975
- }
976
- const minWidth = Math.min(this.dimensions.activator.width + Number(this.nudgeWidth) + (this.auto ? 16 : 0), Math.max(this.pageWidth - 24, 0));
977
- const calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth)) ? minWidth : parseInt(this.calculatedMaxWidth);
978
- return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(Math.min(calculatedMaxWidth, minWidth)) || '0';
979
- },
980
- calculatedTop() {
981
- const top = !this.auto ? this.calcTop() : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* convertToUnit */ "g"])(this.calcYOverflow(this.calculatedTopAuto));
982
- return top || '0';
983
- },
984
- hasClickableTiles() {
985
- return Boolean(this.tiles.find(tile => tile.tabIndex > -1));
986
- },
987
- styles() {
988
- return {
989
- maxHeight: this.calculatedMaxHeight,
990
- minWidth: this.calculatedMinWidth,
991
- maxWidth: this.calculatedMaxWidth,
992
- top: this.calculatedTop,
993
- left: this.calculatedLeft,
994
- transformOrigin: this.origin,
995
- zIndex: this.zIndex || this.activeZIndex
996
- };
997
- }
945
+ openOnFocus: Boolean
998
946
  },
947
+ data: () => ({
948
+ // Do not use this directly, call getActivator() instead
949
+ activatorElement: null,
950
+ activatorNode: [],
951
+ events: ['click', 'mouseenter', 'mouseleave', 'focus'],
952
+ listeners: {}
953
+ }),
999
954
  watch: {
1000
- isActive(val) {
1001
- if (!val) this.listIndex = -1;
1002
- },
1003
- isContentActive(val) {
1004
- this.hasJustFocused = val;
1005
- },
1006
- listIndex(next, prev) {
1007
- if (next in this.tiles) {
1008
- const tile = this.tiles[next];
1009
- tile.classList.add('v-list-item--highlighted');
1010
- const scrollTop = this.$refs.content.scrollTop;
1011
- const contentHeight = this.$refs.content.clientHeight;
1012
- if (scrollTop > tile.offsetTop - 8) {
1013
- Object(_services_goto__WEBPACK_IMPORTED_MODULE_15__[/* default */ "b"])(tile.offsetTop - tile.clientHeight, {
1014
- appOffset: false,
1015
- duration: 300,
1016
- container: this.$refs.content
1017
- });
1018
- } else if (scrollTop + contentHeight < tile.offsetTop + tile.clientHeight + 8) {
1019
- Object(_services_goto__WEBPACK_IMPORTED_MODULE_15__[/* default */ "b"])(tile.offsetTop - contentHeight + tile.clientHeight * 2, {
1020
- appOffset: false,
1021
- duration: 300,
1022
- container: this.$refs.content
1023
- });
1024
- }
1025
- }
1026
- prev in this.tiles && this.tiles[prev].classList.remove('v-list-item--highlighted');
1027
- }
955
+ activator: 'resetActivator',
956
+ openOnFocus: 'resetActivator',
957
+ openOnHover: 'resetActivator'
1028
958
  },
1029
- created() {
1030
- /* istanbul ignore next */
1031
- if (this.$attrs.hasOwnProperty('full-width')) {
1032
- Object(_util_console__WEBPACK_IMPORTED_MODULE_13__[/* removed */ "e"])('full-width', this);
959
+ mounted() {
960
+ const slotType = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__[/* getSlotType */ "p"])(this, 'activator', true);
961
+ if (slotType && ['v-slot', 'normal'].includes(slotType)) {
962
+ Object(_util_console__WEBPACK_IMPORTED_MODULE_4__[/* consoleError */ "b"])(`The activator slot must be bound, try '<template v-slot:activator="{ on }"><v-btn v-on="on">'`, this);
1033
963
  }
964
+ this.addActivatorEvents();
1034
965
  },
1035
- mounted() {
1036
- this.isActive && this.callActivate();
966
+ beforeDestroy() {
967
+ this.removeActivatorEvents();
1037
968
  },
1038
969
  methods: {
1039
- activate() {
1040
- // Update coordinates and dimensions of menu
1041
- // and its activator
1042
- this.updateDimensions(); // Start the transition
1043
-
1044
- requestAnimationFrame(() => {
1045
- // Once transitioning, calculate scroll and top position
1046
- this.startTransition().then(() => {
1047
- if (this.$refs.content) {
1048
- this.calculatedTopAuto = this.calcTopAuto();
1049
- this.auto && (this.$refs.content.scrollTop = this.calcScrollPosition());
1050
- }
1051
- });
1052
- });
1053
- },
1054
- calcScrollPosition() {
1055
- const $el = this.$refs.content;
1056
- const activeTile = $el.querySelector('.v-list-item--active');
1057
- const maxScrollTop = $el.scrollHeight - $el.offsetHeight;
1058
- return activeTile ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2)) : $el.scrollTop;
1059
- },
1060
- calcLeftAuto() {
1061
- return parseInt(this.dimensions.activator.left - this.defaultOffset * 2);
1062
- },
1063
- calcTopAuto() {
1064
- const $el = this.$refs.content;
1065
- const activeTile = $el.querySelector('.v-list-item--active');
1066
- if (!activeTile) {
1067
- this.selectedIndex = null;
1068
- }
1069
- if (this.offsetY || !activeTile) {
1070
- return this.computedTop;
970
+ addActivatorEvents() {
971
+ if (!this.activator || this.disabled || !this.getActivator()) return;
972
+ this.listeners = this.genActivatorListeners();
973
+ const keys = Object.keys(this.listeners);
974
+ for (const key of keys) {
975
+ this.getActivator().addEventListener(key, this.listeners[key]);
1071
976
  }
1072
- this.selectedIndex = Array.from(this.tiles).indexOf(activeTile);
1073
- const tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition();
1074
- const firstTileOffsetTop = $el.querySelector('.v-list-item').offsetTop;
1075
- return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop - 1;
1076
- },
1077
- changeListIndex(e) {
1078
- // For infinite scroll and autocomplete, re-evaluate children
1079
- this.getTiles();
1080
- if (!this.isActive || !this.hasClickableTiles) {
1081
- return;
1082
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].tab) {
1083
- this.isActive = false;
1084
- return;
1085
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].down) {
1086
- this.nextTile();
1087
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].up) {
1088
- this.prevTile();
1089
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].end) {
1090
- this.lastTile();
1091
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].home) {
1092
- this.firstTile();
1093
- } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].enter && this.listIndex !== -1) {
1094
- this.tiles[this.listIndex].click();
1095
- } else {
1096
- return;
1097
- } // One of the conditions was met, prevent default action (#2988)
1098
-
1099
- e.preventDefault();
1100
977
  },
1101
- closeConditional(e) {
1102
- const target = e.target;
1103
- return this.isActive && !this._isDestroyed && this.closeOnClick && !this.$refs.content.contains(target);
978
+ genActivator() {
979
+ const node = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__[/* getSlot */ "o"])(this, 'activator', Object.assign(this.getValueProxy(), {
980
+ on: this.genActivatorListeners(),
981
+ attrs: this.genActivatorAttributes()
982
+ })) || [];
983
+ this.activatorNode = node;
984
+ return node;
1104
985
  },
1105
986
  genActivatorAttributes() {
1106
- const attributes = _mixins_activatable__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].options.methods.genActivatorAttributes.call(this);
1107
- if (this.activeTile && this.activeTile.id) {
1108
- return {
1109
- ...attributes,
1110
- 'aria-activedescendant': this.activeTile.id
1111
- };
1112
- }
1113
- return attributes;
987
+ return {
988
+ role: this.openOnClick && !this.openOnHover ? 'button' : undefined,
989
+ 'aria-haspopup': true,
990
+ 'aria-expanded': String(this.isActive)
991
+ };
1114
992
  },
1115
993
  genActivatorListeners() {
1116
- const listeners = _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].options.methods.genActivatorListeners.call(this);
1117
- if (!this.disableKeys) {
1118
- listeners.keydown = this.onKeyDown;
994
+ if (this.disabled) return {};
995
+ const listeners = {};
996
+ if (this.openOnHover) {
997
+ listeners.mouseenter = e => {
998
+ this.getActivator(e);
999
+ this.runDelay('open');
1000
+ };
1001
+ listeners.mouseleave = e => {
1002
+ this.getActivator(e);
1003
+ this.runDelay('close');
1004
+ };
1005
+ } else if (this.openOnClick) {
1006
+ listeners.click = e => {
1007
+ const activator = this.getActivator(e);
1008
+ if (activator) activator.focus();
1009
+ e.stopPropagation();
1010
+ this.isActive = !this.isActive;
1011
+ };
1012
+ }
1013
+ if (this.openOnFocus) {
1014
+ listeners.focus = e => {
1015
+ this.getActivator(e);
1016
+ e.stopPropagation();
1017
+ this.isActive = !this.isActive;
1018
+ };
1119
1019
  }
1120
1020
  return listeners;
1121
1021
  },
1122
- genTransition() {
1123
- const content = this.genContent();
1124
- if (!this.transition) return content;
1125
- return this.$createElement('transition', {
1126
- props: {
1127
- name: this.transition
1022
+ getActivator(e) {
1023
+ // If we've already fetched the activator, re-use
1024
+ if (this.activatorElement) return this.activatorElement;
1025
+ let activator = null;
1026
+ if (this.activator) {
1027
+ const target = this.internalActivator ? this.$el : document;
1028
+ if (typeof this.activator === 'string') {
1029
+ // Selector
1030
+ activator = target.querySelector(this.activator);
1031
+ } else if (this.activator.$el) {
1032
+ // Component (ref)
1033
+ activator = this.activator.$el;
1034
+ } else {
1035
+ // HTMLElement | Element
1036
+ activator = this.activator;
1128
1037
  }
1129
- }, [content]);
1038
+ } else if (this.activatorNode.length === 1 || this.activatorNode.length && !e) {
1039
+ // Use the contents of the activator slot
1040
+ // There's either only one element in it or we
1041
+ // don't have a click event to use as a last resort
1042
+ const vm = this.activatorNode[0].componentInstance;
1043
+ if (vm && vm.$options.mixins &&
1044
+ // Activatable is indirectly used via Menuable
1045
+ vm.$options.mixins.some(m => m.options && ['activatable', 'menuable'].includes(m.options.name))) {
1046
+ // Activator is actually another activatible component, use its activator (#8846)
1047
+ activator = vm.getActivator();
1048
+ } else {
1049
+ activator = this.activatorNode[0].elm;
1050
+ }
1051
+ } else if (e) {
1052
+ // Activated by a click or focus event
1053
+ activator = e.currentTarget || e.target;
1054
+ } // The activator should only be a valid element (Ignore comments and text nodes)
1055
+
1056
+ this.activatorElement = (activator === null || activator === void 0 ? void 0 : activator.nodeType) === Node.ELEMENT_NODE ? activator : null;
1057
+ return this.activatorElement;
1130
1058
  },
1131
- genDirectives() {
1132
- const directives = [{
1133
- name: 'show',
1134
- value: this.isContentActive
1135
- }]; // Do not add click outside for hover menu
1136
-
1137
- if (!this.openOnHover && this.closeOnClick) {
1138
- directives.push({
1139
- name: 'click-outside',
1140
- value: {
1141
- handler: () => {
1142
- this.isActive = false;
1143
- },
1144
- closeConditional: this.closeConditional,
1145
- include: () => [this.$el, ...this.getOpenDependentElements()]
1146
- }
1147
- });
1148
- }
1149
- return directives;
1059
+ getContentSlot() {
1060
+ return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__[/* getSlot */ "o"])(this, 'default', this.getValueProxy(), true);
1150
1061
  },
1151
- genContent() {
1152
- const options = {
1153
- attrs: {
1154
- ...this.getScopeIdAttrs(),
1155
- role: 'role' in this.$attrs ? this.$attrs.role : 'menu'
1156
- },
1157
- staticClass: 'v-menu__content',
1158
- class: {
1159
- ...this.rootThemeClasses,
1160
- ...this.roundedClasses,
1161
- 'v-menu__content--auto': this.auto,
1162
- 'v-menu__content--fixed': this.activatorFixed,
1163
- menuable__content__active: this.isActive,
1164
- [this.contentClass.trim()]: true
1062
+ getValueProxy() {
1063
+ const self = this;
1064
+ return {
1065
+ get value() {
1066
+ return self.isActive;
1165
1067
  },
1166
- style: this.styles,
1167
- directives: this.genDirectives(),
1168
- ref: 'content',
1169
- on: {
1170
- click: e => {
1171
- const target = e.target;
1172
- if (target.getAttribute('disabled')) return;
1173
- if (this.closeOnContentClick) this.isActive = false;
1174
- },
1175
- keydown: this.onKeyDown
1068
+ set value(isActive) {
1069
+ self.isActive = isActive;
1176
1070
  }
1177
1071
  };
1178
- if (this.$listeners.scroll) {
1179
- options.on = options.on || {};
1180
- options.on.scroll = this.$listeners.scroll;
1181
- }
1182
- if (!this.disabled && this.openOnHover) {
1183
- options.on = options.on || {};
1184
- options.on.mouseenter = this.mouseEnterHandler;
1185
- }
1186
- if (this.openOnHover) {
1187
- options.on = options.on || {};
1188
- options.on.mouseleave = this.mouseLeaveHandler;
1189
- }
1190
- return this.$createElement('div', options, this.getContentSlot());
1191
- },
1192
- getTiles() {
1193
- if (!this.$refs.content) return;
1194
- this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item, .v-divider, .v-subheader'));
1195
- },
1196
- mouseEnterHandler() {
1197
- this.runDelay('open', () => {
1198
- if (this.hasJustFocused) return;
1199
- this.hasJustFocused = true;
1200
- });
1201
- },
1202
- mouseLeaveHandler(e) {
1203
- // Prevent accidental re-activation
1204
- this.runDelay('close', () => {
1205
- var _a;
1206
- if ((_a = this.$refs.content) === null || _a === void 0 ? void 0 : _a.contains(e.relatedTarget)) return;
1207
- requestAnimationFrame(() => {
1208
- this.isActive = false;
1209
- this.callDeactivate();
1210
- });
1211
- });
1212
1072
  },
1213
- nextTile() {
1214
- const tile = this.tiles[this.listIndex + 1];
1215
- if (!tile) {
1216
- if (!this.tiles.length) return;
1217
- this.listIndex = -1;
1218
- this.nextTile();
1219
- return;
1220
- }
1221
- this.listIndex++;
1222
- if (tile.tabIndex === -1) this.nextTile();
1223
- },
1224
- prevTile() {
1225
- const tile = this.tiles[this.listIndex - 1];
1226
- if (!tile) {
1227
- if (!this.tiles.length) return;
1228
- this.listIndex = this.tiles.length;
1229
- this.prevTile();
1230
- return;
1073
+ removeActivatorEvents() {
1074
+ if (!this.activator || !this.activatorElement) return;
1075
+ const keys = Object.keys(this.listeners);
1076
+ for (const key of keys) {
1077
+ this.activatorElement.removeEventListener(key, this.listeners[key]);
1231
1078
  }
1232
- this.listIndex--;
1233
- if (tile.tabIndex === -1) this.prevTile();
1234
- },
1235
- lastTile() {
1236
- const tile = this.tiles[this.tiles.length - 1];
1237
- if (!tile) return;
1238
- this.listIndex = this.tiles.length - 1;
1239
- if (tile.tabIndex === -1) this.prevTile();
1240
- },
1241
- firstTile() {
1242
- const tile = this.tiles[0];
1243
- if (!tile) return;
1244
- this.listIndex = 0;
1245
- if (tile.tabIndex === -1) this.nextTile();
1246
- },
1247
- onKeyDown(e) {
1248
- if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].esc) {
1249
- // Wait for dependent elements to close first
1250
- setTimeout(() => {
1251
- this.isActive = false;
1252
- });
1253
- const activator = this.getActivator();
1254
- this.$nextTick(() => activator && activator.focus());
1255
- } else if (!this.isActive && [_util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].up, _util_helpers__WEBPACK_IMPORTED_MODULE_14__[/* keyCodes */ "s"].down].includes(e.keyCode)) {
1256
- this.isActive = true;
1257
- } // Allow for isActive watcher to generate tile list
1258
-
1259
- this.$nextTick(() => this.changeListIndex(e));
1260
- },
1261
- onResize() {
1262
- if (!this.isActive) return; // Account for screen resize
1263
- // and orientation change
1264
- // eslint-disable-next-line no-unused-expressions
1265
-
1266
- this.$refs.content.offsetWidth;
1267
- this.updateDimensions(); // When resizing to a smaller width
1268
- // content width is evaluated before
1269
- // the new activator width has been
1270
- // set, causing it to not size properly
1271
- // hacky but will revisit in the future
1272
-
1273
- clearTimeout(this.resizeTimeout);
1274
- this.resizeTimeout = window.setTimeout(this.updateDimensions, 100);
1079
+ this.listeners = {};
1080
+ },
1081
+ resetActivator() {
1082
+ this.removeActivatorEvents();
1083
+ this.activatorElement = null;
1084
+ this.getActivator();
1085
+ this.addActivatorEvents();
1275
1086
  }
1276
- },
1277
- render(h) {
1278
- const data = {
1279
- staticClass: 'v-menu',
1280
- class: {
1281
- 'v-menu--attached': this.attach === '' || this.attach === true || this.attach === 'attach'
1282
- },
1283
- directives: [{
1284
- arg: '500',
1285
- name: 'resize',
1286
- value: this.onResize
1287
- }]
1288
- };
1289
- return h('div', data, [!this.activator && this.genActivator(), this.showLazyContent(() => [this.$createElement(_VThemeProvider__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"], {
1290
- props: {
1291
- root: true,
1292
- light: this.light,
1293
- dark: this.dark
1294
- }
1295
- }, [this.genTransition()])])]);
1296
1087
  }
1297
1088
  }));
1298
1089
 
1299
1090
  /***/ }),
1300
1091
 
1301
- /***/ "f286":
1302
- /***/ (function(module, exports, __webpack_require__) {
1092
+ /***/ "9be7":
1093
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1303
1094
 
1304
- // extracted by mini-css-extract-plugin
1095
+ "use strict";
1096
+ /* harmony import */ var _src_components_VTooltip_VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("886c");
1097
+ /* harmony import */ var _src_components_VTooltip_VTooltip_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_src_components_VTooltip_VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__);
1098
+ /* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("9be2");
1099
+ /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("de91");
1100
+ /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("0ce2");
1101
+ /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("759d");
1102
+ /* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("5d2e");
1103
+ /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("3d78");
1104
+ /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("6c21");
1105
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("9d7d");
1106
+ // Mixins
1305
1107
 
1306
- /***/ }),
1307
1108
 
1308
- /***/ "facc":
1309
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1310
1109
 
1311
- "use strict";
1312
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ad27");
1313
- /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("7b64");
1314
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("3d78");
1315
- // Directives
1316
1110
 
1317
- // Utilities
1318
1111
 
1112
+ // Helpers
1319
1113
 
1320
- /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].extend({
1321
- name: 'routable',
1322
- directives: {
1323
- Ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"]
1324
- },
1325
- props: {
1326
- activeClass: String,
1327
- append: Boolean,
1328
- disabled: Boolean,
1329
- exact: {
1330
- type: Boolean,
1331
- default: undefined
1114
+
1115
+
1116
+
1117
+ /* @vue/component */
1118
+
1119
+ /* harmony default export */ __webpack_exports__["a"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"], _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"], _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], _mixins_menuable__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"]).extend({
1120
+ name: 'v-tooltip',
1121
+ props: {
1122
+ closeDelay: {
1123
+ type: [Number, String],
1124
+ default: 0
1332
1125
  },
1333
- exactPath: Boolean,
1334
- exactActiveClass: String,
1335
- link: Boolean,
1336
- href: [String, Object],
1337
- to: [String, Object],
1338
- nuxt: Boolean,
1339
- replace: Boolean,
1340
- ripple: {
1341
- type: [Boolean, Object],
1342
- default: null
1126
+ disabled: Boolean,
1127
+ openDelay: {
1128
+ type: [Number, String],
1129
+ default: 0
1130
+ },
1131
+ openOnHover: {
1132
+ type: Boolean,
1133
+ default: true
1134
+ },
1135
+ openOnFocus: {
1136
+ type: Boolean,
1137
+ default: true
1138
+ },
1139
+ tag: {
1140
+ type: String,
1141
+ default: 'span'
1343
1142
  },
1344
- tag: String,
1345
- target: String
1143
+ transition: String
1346
1144
  },
1347
1145
  data: () => ({
1348
- isActive: false,
1349
- proxyClass: ''
1146
+ calculatedMinWidth: 0,
1147
+ closeDependents: false
1350
1148
  }),
1351
1149
  computed: {
1150
+ calculatedLeft() {
1151
+ const {
1152
+ activator,
1153
+ content
1154
+ } = this.dimensions;
1155
+ const unknown = !this.bottom && !this.left && !this.top && !this.right;
1156
+ const activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left;
1157
+ let left = 0;
1158
+ if (this.top || this.bottom || unknown) {
1159
+ left = activatorLeft + activator.width / 2 - content.width / 2;
1160
+ } else if (this.left || this.right) {
1161
+ left = activatorLeft + (this.right ? activator.width : -content.width) + (this.right ? 10 : -10);
1162
+ }
1163
+ if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
1164
+ if (this.nudgeRight) left += parseInt(this.nudgeRight);
1165
+ return `${this.calcXOverflow(left, this.dimensions.content.width)}px`;
1166
+ },
1167
+ calculatedTop() {
1168
+ const {
1169
+ activator,
1170
+ content
1171
+ } = this.dimensions;
1172
+ const activatorTop = this.attach !== false ? activator.offsetTop : activator.top;
1173
+ let top = 0;
1174
+ if (this.top || this.bottom) {
1175
+ top = activatorTop + (this.bottom ? activator.height : -content.height) + (this.bottom ? 10 : -10);
1176
+ } else if (this.left || this.right) {
1177
+ top = activatorTop + activator.height / 2 - content.height / 2;
1178
+ }
1179
+ if (this.nudgeTop) top -= parseInt(this.nudgeTop);
1180
+ if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
1181
+ if (this.attach === false) top += this.pageYOffset;
1182
+ return `${this.calcYOverflow(top)}px`;
1183
+ },
1352
1184
  classes() {
1353
- const classes = {};
1354
- if (this.to) return classes;
1355
- if (this.activeClass) classes[this.activeClass] = this.isActive;
1356
- if (this.proxyClass) classes[this.proxyClass] = this.isActive;
1357
- return classes;
1185
+ return {
1186
+ 'v-tooltip--top': this.top,
1187
+ 'v-tooltip--right': this.right,
1188
+ 'v-tooltip--bottom': this.bottom,
1189
+ 'v-tooltip--left': this.left,
1190
+ 'v-tooltip--attached': this.attach === '' || this.attach === true || this.attach === 'attach'
1191
+ };
1358
1192
  },
1359
- computedRipple() {
1360
- var _a;
1361
- return (_a = this.ripple) !== null && _a !== void 0 ? _a : !this.disabled && this.isClickable;
1193
+ computedTransition() {
1194
+ if (this.transition) return this.transition;
1195
+ return this.isActive ? 'scale-transition' : 'fade-transition';
1362
1196
  },
1363
- isClickable() {
1364
- if (this.disabled) return false;
1365
- return Boolean(this.isLink || this.$listeners.click || this.$listeners['!click'] || this.$attrs.tabindex);
1197
+ offsetY() {
1198
+ return this.top || this.bottom;
1366
1199
  },
1367
- isLink() {
1368
- return this.to || this.href || this.link;
1200
+ offsetX() {
1201
+ return this.left || this.right;
1369
1202
  },
1370
- styles: () => ({})
1203
+ styles() {
1204
+ return {
1205
+ left: this.calculatedLeft,
1206
+ maxWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* convertToUnit */ "g"])(this.maxWidth),
1207
+ minWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* convertToUnit */ "g"])(this.minWidth),
1208
+ top: this.calculatedTop,
1209
+ zIndex: this.zIndex || this.activeZIndex
1210
+ };
1211
+ }
1371
1212
  },
1372
- watch: {
1373
- $route: 'onRouteChange'
1213
+ beforeMount() {
1214
+ this.$nextTick(() => {
1215
+ this.value && this.callActivate();
1216
+ });
1374
1217
  },
1375
1218
  mounted() {
1376
- this.onRouteChange();
1219
+ if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* getSlotType */ "p"])(this, 'activator', true) === 'v-slot') {
1220
+ Object(_util_console__WEBPACK_IMPORTED_MODULE_7__[/* consoleError */ "b"])(`v-tooltip's activator slot must be bound, try '<template #activator="data"><v-btn v-on="data.on>'`, this);
1221
+ }
1377
1222
  },
1378
1223
  methods: {
1379
- generateRouteLink() {
1380
- let exact = this.exact;
1381
- let tag;
1382
- const data = {
1383
- attrs: {
1384
- tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined
1385
- },
1386
- class: this.classes,
1387
- style: this.styles,
1388
- props: {},
1389
- directives: [{
1390
- name: 'ripple',
1391
- value: this.computedRipple
1392
- }],
1393
- [this.to ? 'nativeOn' : 'on']: {
1394
- ...this.$listeners,
1395
- ...('click' in this ? {
1396
- click: this.click
1397
- } : undefined) // #14447
1398
- },
1224
+ activate() {
1225
+ // Update coordinates and dimensions of menu
1226
+ // and its activator
1227
+ this.updateDimensions(); // Start the transition
1399
1228
 
1400
- ref: 'link'
1401
- };
1402
- if (typeof this.exact === 'undefined') {
1403
- exact = this.to === '/' || this.to === Object(this.to) && this.to.path === '/';
1229
+ requestAnimationFrame(this.startTransition);
1230
+ },
1231
+ deactivate() {
1232
+ this.runDelay('close');
1233
+ },
1234
+ genActivatorListeners() {
1235
+ const listeners = _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].options.methods.genActivatorListeners.call(this);
1236
+ if (this.openOnFocus) {
1237
+ listeners.focus = e => {
1238
+ this.getActivator(e);
1239
+ this.runDelay('open');
1240
+ };
1241
+ listeners.blur = e => {
1242
+ this.getActivator(e);
1243
+ this.runDelay('close');
1244
+ };
1404
1245
  }
1405
- if (this.to) {
1406
- // Add a special activeClass hook
1407
- // for component level styles
1408
- let activeClass = this.activeClass;
1409
- let exactActiveClass = this.exactActiveClass || activeClass;
1410
- if (this.proxyClass) {
1411
- activeClass = `${activeClass} ${this.proxyClass}`.trim();
1412
- exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim();
1246
+ listeners.keydown = e => {
1247
+ if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* keyCodes */ "s"].esc) {
1248
+ this.getActivator(e);
1249
+ this.runDelay('close');
1413
1250
  }
1414
- tag = this.nuxt ? 'nuxt-link' : 'router-link';
1415
- Object.assign(data.props, {
1416
- to: this.to,
1417
- exact,
1418
- exactPath: this.exactPath,
1419
- activeClass,
1420
- exactActiveClass,
1421
- append: this.append,
1422
- replace: this.replace
1423
- });
1424
- } else {
1425
- tag = this.href && 'a' || this.tag || 'div';
1426
- if (tag === 'a' && this.href) data.attrs.href = this.href;
1427
- }
1428
- if (this.target) data.attrs.target = this.target;
1251
+ };
1252
+ return listeners;
1253
+ },
1254
+ genActivatorAttributes() {
1429
1255
  return {
1430
- tag,
1431
- data
1256
+ 'aria-haspopup': true,
1257
+ 'aria-expanded': String(this.isActive)
1432
1258
  };
1433
1259
  },
1434
- onRouteChange() {
1435
- if (!this.to || !this.$refs.link || !this.$route) return;
1436
- const activeClass = `${this.activeClass || ''} ${this.proxyClass || ''}`.trim();
1437
- const exactActiveClass = `${this.exactActiveClass || ''} ${this.proxyClass || ''}`.trim() || activeClass;
1438
- const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass);
1439
- this.$nextTick(() => {
1440
- /* istanbul ignore else */
1441
- if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__[/* getObjectValueByPath */ "m"])(this.$refs.link, path) === this.isActive) {
1442
- this.toggle();
1260
+ genTransition() {
1261
+ const content = this.genContent();
1262
+ if (!this.computedTransition) return content;
1263
+ return this.$createElement('transition', {
1264
+ props: {
1265
+ name: this.computedTransition
1443
1266
  }
1444
- });
1267
+ }, [content]);
1445
1268
  },
1446
- toggle() {
1447
- this.isActive = !this.isActive;
1269
+ genContent() {
1270
+ return this.$createElement('div', this.setBackgroundColor(this.color, {
1271
+ staticClass: 'v-tooltip__content',
1272
+ class: {
1273
+ [this.contentClass]: true,
1274
+ menuable__content__active: this.isActive,
1275
+ 'v-tooltip__content--fixed': this.activatorFixed
1276
+ },
1277
+ style: this.styles,
1278
+ attrs: this.getScopeIdAttrs(),
1279
+ directives: [{
1280
+ name: 'show',
1281
+ value: this.isContentActive
1282
+ }],
1283
+ ref: 'content'
1284
+ }), this.getContentSlot());
1448
1285
  }
1286
+ },
1287
+ render(h) {
1288
+ return h(this.tag, {
1289
+ staticClass: 'v-tooltip',
1290
+ class: this.classes
1291
+ }, [this.showLazyContent(() => [this.genTransition()]), this.genActivator()]);
1449
1292
  }
1450
1293
  }));
1451
1294
 
1452
1295
  /***/ }),
1453
1296
 
1454
- /***/ "fbf8":
1297
+ /***/ "9c0d":
1455
1298
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1456
1299
 
1457
1300
  "use strict";
1458
1301
  /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("c3d6");
1459
1302
  /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);
1460
- /* harmony import */ var _src_components_VIcon_VIcon_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("5ae4");
1461
- /* harmony import */ var _src_components_VIcon_VIcon_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_src_components_VIcon_VIcon_sass__WEBPACK_IMPORTED_MODULE_1__);
1462
- /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("7c5f");
1463
- /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("de91");
1464
- /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("8082");
1465
- /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("64ad");
1466
- /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("3d78");
1467
- /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("ad27");
1468
- /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("9d7d");
1303
+ /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("ad27");
1304
+ /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("3d78");
1469
1305
 
1470
- // Mixins
1471
1306
 
1472
1307
 
1308
+ /* @vue/component */
1309
+
1310
+ /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].extend().extend({
1311
+ name: 'stackable',
1312
+ data() {
1313
+ return {
1314
+ stackElement: null,
1315
+ stackExclude: null,
1316
+ stackMinZIndex: 0,
1317
+ isActive: false
1318
+ };
1319
+ },
1320
+ computed: {
1321
+ activeZIndex() {
1322
+ if (typeof window === 'undefined') return 0;
1323
+ const content = this.stackElement || this.$refs.content; // Return current zindex if not active
1324
+
1325
+ const index = !this.isActive ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__[/* getZIndex */ "q"])(content) : this.getMaxZIndex(this.stackExclude || [content]) + 2;
1326
+ if (index == null) return index; // Return max current z-index (excluding self) + 2
1327
+ // (2 to leave room for an overlay below, if needed)
1328
+
1329
+ return parseInt(index);
1330
+ }
1331
+ },
1332
+ methods: {
1333
+ getMaxZIndex(exclude = []) {
1334
+ const base = this.$el; // Start with lowest allowed z-index or z-index of
1335
+ // base component's element, whichever is greater
1336
+
1337
+ const zis = [this.stackMinZIndex, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__[/* getZIndex */ "q"])(base)]; // Convert the NodeList to an array to
1338
+ // prevent an Edge bug with Symbol.iterator
1339
+ // https://github.com/vuetifyjs/vuetify/issues/2146
1340
+
1341
+ const activeElements = [...document.getElementsByClassName('v-menu__content--active'), ...document.getElementsByClassName('v-dialog__content--active')]; // Get z-index for all active dialogs
1342
+
1343
+ for (let index = 0; index < activeElements.length; index++) {
1344
+ if (!exclude.includes(activeElements[index])) {
1345
+ zis.push(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__[/* getZIndex */ "q"])(activeElements[index]));
1346
+ }
1347
+ }
1348
+ return Math.max(...zis);
1349
+ }
1350
+ }
1351
+ }));
1352
+
1353
+ /***/ }),
1354
+
1355
+ /***/ "9e3f":
1356
+ /***/ (function(module, exports, __webpack_require__) {
1357
+
1358
+ "use strict";
1359
+
1360
+
1361
+ const isObject = value => typeof value === 'object' && value !== null;
1362
+ const mapObjectSkip = Symbol('skip');
1363
+
1364
+ // Customized for this use-case
1365
+ const isObjectCustom = value =>
1366
+ isObject(value) &&
1367
+ !(value instanceof RegExp) &&
1368
+ !(value instanceof Error) &&
1369
+ !(value instanceof Date);
1370
+
1371
+ const mapObject = (object, mapper, options, isSeen = new WeakMap()) => {
1372
+ options = {
1373
+ deep: false,
1374
+ target: {},
1375
+ ...options
1376
+ };
1377
+
1378
+ if (isSeen.has(object)) {
1379
+ return isSeen.get(object);
1380
+ }
1381
+
1382
+ isSeen.set(object, options.target);
1383
+
1384
+ const {target} = options;
1385
+ delete options.target;
1386
+
1387
+ const mapArray = array => array.map(element => isObjectCustom(element) ? mapObject(element, mapper, options, isSeen) : element);
1388
+ if (Array.isArray(object)) {
1389
+ return mapArray(object);
1390
+ }
1391
+
1392
+ for (const [key, value] of Object.entries(object)) {
1393
+ const mapResult = mapper(key, value, object);
1394
+
1395
+ if (mapResult === mapObjectSkip) {
1396
+ continue;
1397
+ }
1473
1398
 
1399
+ let [newKey, newValue, {shouldRecurse = true} = {}] = mapResult;
1400
+
1401
+ // Drop `__proto__` keys.
1402
+ if (newKey === '__proto__') {
1403
+ continue;
1404
+ }
1405
+
1406
+ if (options.deep && shouldRecurse && isObjectCustom(newValue)) {
1407
+ newValue = Array.isArray(newValue) ?
1408
+ mapArray(newValue) :
1409
+ mapObject(newValue, mapper, options, isSeen);
1410
+ }
1411
+
1412
+ target[newKey] = newValue;
1413
+ }
1414
+
1415
+ return target;
1416
+ };
1417
+
1418
+ module.exports = (object, mapper, options) => {
1419
+ if (!isObject(object)) {
1420
+ throw new TypeError(`Expected an object, got \`${object}\` (${typeof object})`);
1421
+ }
1422
+
1423
+ return mapObject(object, mapper, options);
1424
+ };
1425
+
1426
+ module.exports.mapObjectSkip = mapObjectSkip;
1427
+
1428
+
1429
+ /***/ }),
1430
+
1431
+ /***/ "c9b3":
1432
+ /***/ (function(module, exports, __webpack_require__) {
1433
+
1434
+ "use strict";
1435
+
1436
+ var $ = __webpack_require__("4b31");
1437
+ var uncurryThis = __webpack_require__("d244");
1438
+ var requireObjectCoercible = __webpack_require__("7768");
1439
+ var toIntegerOrInfinity = __webpack_require__("015b");
1440
+ var toString = __webpack_require__("b0b4");
1441
+ var fails = __webpack_require__("8659");
1442
+
1443
+ var charAt = uncurryThis(''.charAt);
1444
+
1445
+ var FORCED = fails(function () {
1446
+ // eslint-disable-next-line es/no-array-string-prototype-at -- safe
1447
+ return '𠮷'.at(-2) !== '\uD842';
1448
+ });
1449
+
1450
+ // `String.prototype.at` method
1451
+ // https://github.com/tc39/proposal-relative-indexing-method
1452
+ $({ target: 'String', proto: true, forced: FORCED }, {
1453
+ at: function at(index) {
1454
+ var S = toString(requireObjectCoercible(this));
1455
+ var len = S.length;
1456
+ var relativeIndex = toIntegerOrInfinity(index);
1457
+ var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
1458
+ return (k < 0 || k >= len) ? undefined : charAt(S, k);
1459
+ }
1460
+ });
1474
1461
 
1475
- // Util
1476
1462
 
1463
+ /***/ }),
1464
+
1465
+ /***/ "cbfb":
1466
+ /***/ (function(module, exports, __webpack_require__) {
1467
+
1468
+ "use strict";
1469
+
1470
+ const mapObj = __webpack_require__("9e3f");
1471
+ const camelCase = __webpack_require__("5375");
1472
+ const QuickLru = __webpack_require__("17d8");
1473
+
1474
+ const has = (array, key) => array.some(x => {
1475
+ if (typeof x === 'string') {
1476
+ return x === key;
1477
+ }
1478
+
1479
+ x.lastIndex = 0;
1480
+ return x.test(key);
1481
+ });
1482
+
1483
+ const cache = new QuickLru({maxSize: 100000});
1484
+
1485
+ // Reproduces behavior from `map-obj`
1486
+ const isObject = value =>
1487
+ typeof value === 'object' &&
1488
+ value !== null &&
1489
+ !(value instanceof RegExp) &&
1490
+ !(value instanceof Error) &&
1491
+ !(value instanceof Date);
1492
+
1493
+ const camelCaseConvert = (input, options) => {
1494
+ if (!isObject(input)) {
1495
+ return input;
1496
+ }
1497
+
1498
+ options = {
1499
+ deep: false,
1500
+ pascalCase: false,
1501
+ ...options
1502
+ };
1503
+
1504
+ const {exclude, pascalCase, stopPaths, deep} = options;
1505
+
1506
+ const stopPathsSet = new Set(stopPaths);
1507
+
1508
+ const makeMapper = parentPath => (key, value) => {
1509
+ if (deep && isObject(value)) {
1510
+ const path = parentPath === undefined ? key : `${parentPath}.${key}`;
1511
+
1512
+ if (!stopPathsSet.has(path)) {
1513
+ value = mapObj(value, makeMapper(path));
1514
+ }
1515
+ }
1516
+
1517
+ if (!(exclude && has(exclude, key))) {
1518
+ const cacheKey = pascalCase ? `${key}_` : key;
1519
+
1520
+ if (cache.has(cacheKey)) {
1521
+ key = cache.get(cacheKey);
1522
+ } else {
1523
+ const returnValue = camelCase(key, {pascalCase, locale: false});
1524
+
1525
+ if (key.length < 100) { // Prevent abuse
1526
+ cache.set(cacheKey, returnValue);
1527
+ }
1528
+
1529
+ key = returnValue;
1530
+ }
1531
+ }
1532
+
1533
+ return [key, value];
1534
+ };
1535
+
1536
+ return mapObj(input, makeMapper(undefined));
1537
+ };
1538
+
1539
+ module.exports = (input, options) => {
1540
+ if (Array.isArray(input)) {
1541
+ return Object.keys(input).map(key => camelCaseConvert(input[key], options));
1542
+ }
1543
+
1544
+ return camelCaseConvert(input, options);
1545
+ };
1546
+
1547
+
1548
+ /***/ }),
1549
+
1550
+ /***/ "ce02":
1551
+ /***/ (function(module, exports, __webpack_require__) {
1552
+
1553
+ var getBuiltIn = __webpack_require__("a542");
1554
+
1555
+ module.exports = getBuiltIn('document', 'documentElement');
1556
+
1557
+
1558
+ /***/ }),
1559
+
1560
+ /***/ "d63e":
1561
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1562
+
1563
+ "use strict";
1564
+ /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6c21");
1565
+ /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("ad27");
1566
+ // Utilities
1477
1567
  // Types
1478
1568
 
1479
1569
 
1570
+ /**
1571
+ * Bootable
1572
+ * @mixin
1573
+ *
1574
+ * Used to add lazy content functionality to components
1575
+ * Looks for change in "isActive" to automatically boot
1576
+ * Otherwise can be set manually
1577
+ */
1480
1578
 
1481
- var SIZE_MAP;
1482
- (function (SIZE_MAP) {
1483
- SIZE_MAP["xSmall"] = "12px";
1484
- SIZE_MAP["small"] = "16px";
1485
- SIZE_MAP["default"] = "24px";
1486
- SIZE_MAP["medium"] = "28px";
1487
- SIZE_MAP["large"] = "36px";
1488
- SIZE_MAP["xLarge"] = "40px";
1489
- })(SIZE_MAP || (SIZE_MAP = {}));
1490
- function isFontAwesome5(iconType) {
1491
- return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val));
1492
- }
1493
- function isSvgPath(icon) {
1494
- return /^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\dz]$/i.test(icon) && icon.length > 4;
1495
- }
1496
- const VIcon = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"]
1497
- /* @vue/component */).extend({
1498
- name: 'v-icon',
1579
+ /* @vue/component */
1580
+
1581
+ /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].extend().extend({
1582
+ name: 'bootable',
1499
1583
  props: {
1500
- dense: Boolean,
1501
- disabled: Boolean,
1502
- left: Boolean,
1503
- right: Boolean,
1504
- size: [Number, String],
1505
- tag: {
1506
- type: String,
1507
- required: false,
1508
- default: 'i'
1509
- }
1584
+ eager: Boolean
1510
1585
  },
1586
+ data: () => ({
1587
+ isBooted: false
1588
+ }),
1511
1589
  computed: {
1512
- medium() {
1513
- return false;
1514
- },
1515
- hasClickListener() {
1516
- return Boolean(this.listeners$.click || this.listeners$['!click']);
1590
+ hasContent() {
1591
+ return this.isBooted || this.eager || this.isActive;
1592
+ }
1593
+ },
1594
+ watch: {
1595
+ isActive() {
1596
+ this.isBooted = true;
1597
+ }
1598
+ },
1599
+ created() {
1600
+ /* istanbul ignore next */
1601
+ if ('lazy' in this.$attrs) {
1602
+ Object(_util_console__WEBPACK_IMPORTED_MODULE_0__[/* removed */ "e"])('lazy', this);
1517
1603
  }
1518
1604
  },
1519
1605
  methods: {
1520
- getIcon() {
1521
- let iconName = '';
1522
- if (this.$slots.default) iconName = this.$slots.default[0].text.trim();
1523
- return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* remapInternalIcon */ "x"])(this, iconName);
1524
- },
1525
- getSize() {
1526
- const sizes = {
1527
- xSmall: this.xSmall,
1528
- small: this.small,
1529
- medium: this.medium,
1530
- large: this.large,
1531
- xLarge: this.xLarge
1532
- };
1533
- const explicitSize = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* keys */ "t"])(sizes).find(key => sizes[key]);
1534
- return explicitSize && SIZE_MAP[explicitSize] || Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__[/* convertToUnit */ "g"])(this.size);
1606
+ showLazyContent(content) {
1607
+ return this.hasContent && content ? content() : [this.$createElement()];
1608
+ }
1609
+ }
1610
+ }));
1611
+
1612
+ /***/ }),
1613
+
1614
+ /***/ "dcde":
1615
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1616
+
1617
+ "use strict";
1618
+ /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("c3d6");
1619
+ /* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);
1620
+ /* harmony import */ var _src_components_VChip_VChip_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("8e6b");
1621
+ /* harmony import */ var _src_components_VChip_VChip_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_src_components_VChip_VChip_sass__WEBPACK_IMPORTED_MODULE_1__);
1622
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("9d7d");
1623
+ /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("177c");
1624
+ /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("36e1");
1625
+ /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("de91");
1626
+ /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("901a");
1627
+ /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("64ad");
1628
+ /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("646d");
1629
+ /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("facc");
1630
+ /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("8082");
1631
+ /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("6c21");
1632
+
1633
+ // Styles
1634
+
1635
+ // Components
1636
+
1637
+
1638
+ // Mixins
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+ // Utilities
1646
+
1647
+
1648
+ /* @vue/component */
1649
+
1650
+ /* harmony default export */ __webpack_exports__["a"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"], _mixins_routable__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_6__[/* factory */ "a"])('chipGroup'), Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__[/* factory */ "b"])('inputValue')).extend({
1651
+ name: 'v-chip',
1652
+ props: {
1653
+ active: {
1654
+ type: Boolean,
1655
+ default: true
1656
+ },
1657
+ activeClass: {
1658
+ type: String,
1659
+ default() {
1660
+ if (!this.chipGroup) return '';
1661
+ return this.chipGroup.activeClass;
1662
+ }
1535
1663
  },
1536
- // Component data for both font icon and SVG wrapper span
1537
- getDefaultData() {
1664
+ close: Boolean,
1665
+ closeIcon: {
1666
+ type: String,
1667
+ default: '$delete'
1668
+ },
1669
+ closeLabel: {
1670
+ type: String,
1671
+ default: '$vuetify.close'
1672
+ },
1673
+ disabled: Boolean,
1674
+ draggable: Boolean,
1675
+ filter: Boolean,
1676
+ filterIcon: {
1677
+ type: String,
1678
+ default: '$complete'
1679
+ },
1680
+ label: Boolean,
1681
+ link: Boolean,
1682
+ outlined: Boolean,
1683
+ pill: Boolean,
1684
+ tag: {
1685
+ type: String,
1686
+ default: 'span'
1687
+ },
1688
+ textColor: String,
1689
+ value: null
1690
+ },
1691
+ data: () => ({
1692
+ proxyClass: 'v-chip--active'
1693
+ }),
1694
+ computed: {
1695
+ classes() {
1538
1696
  return {
1539
- staticClass: 'v-icon notranslate',
1540
- class: {
1541
- 'v-icon--disabled': this.disabled,
1542
- 'v-icon--left': this.left,
1543
- 'v-icon--link': this.hasClickListener,
1544
- 'v-icon--right': this.right,
1545
- 'v-icon--dense': this.dense
1546
- },
1547
- attrs: {
1548
- 'aria-hidden': !this.hasClickListener,
1549
- disabled: this.hasClickListener && this.disabled,
1550
- type: this.hasClickListener ? 'button' : undefined,
1551
- ...this.attrs$
1552
- },
1553
- on: this.listeners$
1697
+ 'v-chip': true,
1698
+ ..._mixins_routable__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].options.computed.classes.call(this),
1699
+ 'v-chip--clickable': this.isClickable,
1700
+ 'v-chip--disabled': this.disabled,
1701
+ 'v-chip--draggable': this.draggable,
1702
+ 'v-chip--label': this.label,
1703
+ 'v-chip--link': this.isLink,
1704
+ 'v-chip--no-color': !this.color,
1705
+ 'v-chip--outlined': this.outlined,
1706
+ 'v-chip--pill': this.pill,
1707
+ 'v-chip--removable': this.hasClose,
1708
+ ...this.themeClasses,
1709
+ ...this.sizeableClasses,
1710
+ ...this.groupClasses
1554
1711
  };
1555
1712
  },
1556
- getSvgWrapperData() {
1557
- const fontSize = this.getSize();
1558
- const wrapperData = {
1559
- ...this.getDefaultData(),
1560
- style: fontSize ? {
1561
- fontSize,
1562
- height: fontSize,
1563
- width: fontSize
1564
- } : undefined
1565
- };
1566
- this.applyColors(wrapperData);
1567
- return wrapperData;
1713
+ hasClose() {
1714
+ return Boolean(this.close);
1568
1715
  },
1569
- applyColors(data) {
1570
- data.class = {
1571
- ...data.class,
1572
- ...this.themeClasses
1573
- };
1574
- this.setTextColor(this.color, data);
1575
- },
1576
- renderFontIcon(icon, h) {
1577
- const newChildren = [];
1578
- const data = this.getDefaultData();
1579
- let iconType = 'material-icons'; // Material Icon delimiter is _
1580
- // https://material.io/icons/
1581
-
1582
- const delimiterIndex = icon.indexOf('-');
1583
- const isMaterialIcon = delimiterIndex <= -1;
1584
- if (isMaterialIcon) {
1585
- // Material icon uses ligatures.
1586
- newChildren.push(icon);
1587
- } else {
1588
- iconType = icon.slice(0, delimiterIndex);
1589
- if (isFontAwesome5(iconType)) iconType = '';
1716
+ isClickable() {
1717
+ return Boolean(_mixins_routable__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].options.computed.isClickable.call(this) || this.chipGroup);
1718
+ }
1719
+ },
1720
+ created() {
1721
+ const breakingProps = [['outline', 'outlined'], ['selected', 'input-value'], ['value', 'active'], ['@input', '@active.sync']];
1722
+ /* istanbul ignore next */
1723
+
1724
+ breakingProps.forEach(([original, replacement]) => {
1725
+ if (this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_11__[/* breaking */ "a"])(original, replacement, this);
1726
+ });
1727
+ },
1728
+ methods: {
1729
+ click(e) {
1730
+ this.$emit('click', e);
1731
+ this.chipGroup && this.toggle();
1732
+ },
1733
+ genFilter() {
1734
+ const children = [];
1735
+ if (this.isActive) {
1736
+ children.push(this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], {
1737
+ staticClass: 'v-chip__filter',
1738
+ props: {
1739
+ left: true
1740
+ }
1741
+ }, this.filterIcon));
1590
1742
  }
1591
- data.class[iconType] = true;
1592
- data.class[icon] = !isMaterialIcon;
1593
- const fontSize = this.getSize();
1594
- if (fontSize) data.style = {
1595
- fontSize
1596
- };
1597
- this.applyColors(data);
1598
- return h(this.hasClickListener ? 'button' : this.tag, data, newChildren);
1743
+ return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_3__[/* VExpandXTransition */ "b"], children);
1599
1744
  },
1600
- renderSvgIcon(icon, h) {
1601
- const svgData = {
1602
- class: 'v-icon__svg',
1603
- attrs: {
1604
- xmlns: 'http://www.w3.org/2000/svg',
1605
- viewBox: '0 0 24 24',
1606
- role: 'img',
1607
- 'aria-hidden': true
1608
- }
1609
- };
1610
- const size = this.getSize();
1611
- if (size) {
1612
- svgData.style = {
1613
- fontSize: size,
1614
- height: size,
1615
- width: size
1616
- };
1617
- }
1618
- return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [h('svg', svgData, [h('path', {
1745
+ genClose() {
1746
+ return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"], {
1747
+ staticClass: 'v-chip__close',
1748
+ props: {
1749
+ right: true,
1750
+ size: 18
1751
+ },
1619
1752
  attrs: {
1620
- d: icon
1753
+ 'aria-label': this.$vuetify.lang.t(this.closeLabel)
1754
+ },
1755
+ on: {
1756
+ click: e => {
1757
+ e.stopPropagation();
1758
+ e.preventDefault();
1759
+ this.$emit('click:close');
1760
+ this.$emit('update:active', false);
1761
+ }
1621
1762
  }
1622
- })])]);
1763
+ }, this.closeIcon);
1623
1764
  },
1624
- renderSvgIconComponent(icon, h) {
1625
- const data = {
1626
- class: {
1627
- 'v-icon__component': true
1628
- }
1629
- };
1630
- const size = this.getSize();
1631
- if (size) {
1632
- data.style = {
1633
- fontSize: size,
1634
- height: size,
1635
- width: size
1636
- };
1637
- }
1638
- this.applyColors(data);
1639
- const component = icon.component;
1640
- data.props = icon.props;
1641
- data.nativeOn = data.on;
1642
- return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [h(component, data)]);
1765
+ genContent() {
1766
+ return this.$createElement('span', {
1767
+ staticClass: 'v-chip__content'
1768
+ }, [this.filter && this.genFilter(), this.$slots.default, this.hasClose && this.genClose()]);
1643
1769
  }
1644
1770
  },
1645
1771
  render(h) {
1646
- const icon = this.getIcon();
1647
- if (typeof icon === 'string') {
1648
- if (isSvgPath(icon)) {
1649
- return this.renderSvgIcon(icon, h);
1650
- }
1651
- return this.renderFontIcon(icon, h);
1652
- }
1653
- return this.renderSvgIconComponent(icon, h);
1654
- }
1655
- });
1656
- /* harmony default export */ __webpack_exports__["a"] = (vue__WEBPACK_IMPORTED_MODULE_7__[/* default */ "a"].extend({
1657
- name: 'v-icon',
1658
- $_wrapperFor: VIcon,
1659
- functional: true,
1660
- render(h, {
1661
- data,
1662
- children
1663
- }) {
1664
- let iconName = ''; // Support usage of v-text and v-html
1665
-
1666
- if (data.domProps) {
1667
- iconName = data.domProps.textContent || data.domProps.innerHTML || iconName; // Remove nodes so it doesn't
1668
- // overwrite our changes
1669
-
1670
- delete data.domProps.textContent;
1671
- delete data.domProps.innerHTML;
1672
- }
1673
- return h(VIcon, data, iconName ? [iconName] : children);
1772
+ const children = [this.genContent()];
1773
+ let {
1774
+ tag,
1775
+ data
1776
+ } = this.generateRouteLink();
1777
+ data.attrs = {
1778
+ ...data.attrs,
1779
+ draggable: this.draggable ? 'true' : undefined,
1780
+ tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs.tabindex
1781
+ };
1782
+ data.directives.push({
1783
+ name: 'show',
1784
+ value: this.active
1785
+ });
1786
+ data = this.setBackgroundColor(this.color, data);
1787
+ const color = this.textColor || this.outlined && this.color;
1788
+ return h(tag, this.setTextColor(color, data), children);
1674
1789
  }
1675
1790
  }));
1676
1791
 
1677
1792
  /***/ }),
1678
1793
 
1679
- /***/ "ff7f":
1794
+ /***/ "de39":
1680
1795
  /***/ (function(module, exports, __webpack_require__) {
1681
1796
 
1682
- // extracted by mini-css-extract-plugin
1797
+ var DESCRIPTORS = __webpack_require__("1616");
1798
+ var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__("7ded");
1799
+ var definePropertyModule = __webpack_require__("3ce5");
1800
+ var anObject = __webpack_require__("50b4");
1801
+ var toIndexedObject = __webpack_require__("52b6");
1802
+ var objectKeys = __webpack_require__("e23e");
1803
+
1804
+ // `Object.defineProperties` method
1805
+ // https://tc39.es/ecma262/#sec-object.defineproperties
1806
+ // eslint-disable-next-line es/no-object-defineproperties -- safe
1807
+ exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
1808
+ anObject(O);
1809
+ var props = toIndexedObject(Properties);
1810
+ var keys = objectKeys(Properties);
1811
+ var length = keys.length;
1812
+ var index = 0;
1813
+ var key;
1814
+ while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
1815
+ return O;
1816
+ };
1817
+
1818
+
1819
+ /***/ }),
1820
+
1821
+ /***/ "e23e":
1822
+ /***/ (function(module, exports, __webpack_require__) {
1823
+
1824
+ var internalObjectKeys = __webpack_require__("6a9b");
1825
+ var enumBugKeys = __webpack_require__("7edb");
1826
+
1827
+ // `Object.keys` method
1828
+ // https://tc39.es/ecma262/#sec-object.keys
1829
+ // eslint-disable-next-line es/no-object-keys -- safe
1830
+ module.exports = Object.keys || function keys(O) {
1831
+ return internalObjectKeys(O, enumBugKeys);
1832
+ };
1833
+
1834
+
1835
+ /***/ }),
1836
+
1837
+ /***/ "eeb4":
1838
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1839
+
1840
+ "use strict";
1841
+ /* harmony import */ var _bootable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("d63e");
1842
+ /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("3d78");
1843
+ /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("9d7d");
1844
+ /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("6c21");
1845
+ // Mixins
1846
+ // Utilities
1847
+
1848
+
1849
+
1850
+
1851
+ function validateAttachTarget(val) {
1852
+ const type = typeof val;
1853
+ if (type === 'boolean' || type === 'string') return true;
1854
+ return val.nodeType === Node.ELEMENT_NODE;
1855
+ }
1856
+ function removeActivator(activator) {
1857
+ activator.forEach(node => {
1858
+ node.elm && node.elm.parentNode && node.elm.parentNode.removeChild(node.elm);
1859
+ });
1860
+ }
1861
+ /* @vue/component */
1862
+
1863
+ /* harmony default export */ __webpack_exports__["a"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__[/* default */ "a"])(_bootable__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"]).extend({
1864
+ name: 'detachable',
1865
+ props: {
1866
+ attach: {
1867
+ default: false,
1868
+ validator: validateAttachTarget
1869
+ },
1870
+ contentClass: {
1871
+ type: String,
1872
+ default: ''
1873
+ }
1874
+ },
1875
+ data: () => ({
1876
+ activatorNode: null,
1877
+ hasDetached: false
1878
+ }),
1879
+ watch: {
1880
+ attach() {
1881
+ this.hasDetached = false;
1882
+ this.initDetach();
1883
+ },
1884
+ hasContent() {
1885
+ this.$nextTick(this.initDetach);
1886
+ }
1887
+ },
1888
+ beforeMount() {
1889
+ this.$nextTick(() => {
1890
+ if (this.activatorNode) {
1891
+ const activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode];
1892
+ activator.forEach(node => {
1893
+ if (!node.elm) return;
1894
+ if (!this.$el.parentNode) return;
1895
+ const target = this.$el === this.$el.parentNode.firstChild ? this.$el : this.$el.nextSibling;
1896
+ this.$el.parentNode.insertBefore(node.elm, target);
1897
+ });
1898
+ }
1899
+ });
1900
+ },
1901
+ mounted() {
1902
+ this.hasContent && this.initDetach();
1903
+ },
1904
+ deactivated() {
1905
+ this.isActive = false;
1906
+ },
1907
+ beforeDestroy() {
1908
+ if (this.$refs.content && this.$refs.content.parentNode) {
1909
+ this.$refs.content.parentNode.removeChild(this.$refs.content);
1910
+ }
1911
+ },
1912
+ destroyed() {
1913
+ if (this.activatorNode) {
1914
+ const activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode];
1915
+ if (this.$el.isConnected) {
1916
+ // Component has been destroyed but the element still exists, we must be in a transition
1917
+ // Wait for the transition to finish before cleaning up the detached activator
1918
+ const observer = new MutationObserver(list => {
1919
+ if (list.some(record => Array.from(record.removedNodes).includes(this.$el))) {
1920
+ observer.disconnect();
1921
+ removeActivator(activator);
1922
+ }
1923
+ });
1924
+ observer.observe(this.$el.parentNode, {
1925
+ subtree: false,
1926
+ childList: true
1927
+ });
1928
+ } else {
1929
+ removeActivator(activator);
1930
+ }
1931
+ }
1932
+ },
1933
+ methods: {
1934
+ getScopeIdAttrs() {
1935
+ const scopeId = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__[/* getObjectValueByPath */ "m"])(this.$vnode, 'context.$options._scopeId');
1936
+ return scopeId && {
1937
+ [scopeId]: ''
1938
+ };
1939
+ },
1940
+ initDetach() {
1941
+ if (this._isDestroyed || !this.$refs.content || this.hasDetached ||
1942
+ // Leave menu in place if attached
1943
+ // and dev has not changed target
1944
+ this.attach === '' ||
1945
+ // If used as a boolean prop (<v-menu attach>)
1946
+ this.attach === true ||
1947
+ // If bound to a boolean (<v-menu :attach="true">)
1948
+ this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))
1949
+ ) return;
1950
+ let target;
1951
+ if (this.attach === false) {
1952
+ // Default, detach to app
1953
+ target = document.querySelector('[data-app]');
1954
+ } else if (typeof this.attach === 'string') {
1955
+ // CSS selector
1956
+ target = document.querySelector(this.attach);
1957
+ } else {
1958
+ // DOM Element
1959
+ target = this.attach;
1960
+ }
1961
+ if (!target) {
1962
+ Object(_util_console__WEBPACK_IMPORTED_MODULE_3__[/* consoleWarn */ "c"])(`Unable to locate target ${this.attach || '[data-app]'}`, this);
1963
+ return;
1964
+ }
1965
+ target.appendChild(this.$refs.content);
1966
+ this.hasDetached = true;
1967
+ }
1968
+ }
1969
+ }));
1683
1970
 
1684
1971
  /***/ })
1685
1972