@dimailn/vuetify 2.7.2-alpha55 → 2.7.2-alpha57

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 (61) hide show
  1. package/dist/json/attributes.json +3945 -417
  2. package/dist/json/tags.json +1120 -133
  3. package/dist/json/web-types.json +12516 -2651
  4. package/dist/vuetify.js +72 -78
  5. package/dist/vuetify.js.map +1 -1
  6. package/dist/vuetify.min.css +1 -1
  7. package/dist/vuetify.min.js +2 -2
  8. package/es5/components/VFileInput/VFileInput.js +3 -1
  9. package/es5/components/VFileInput/VFileInput.js.map +1 -1
  10. package/es5/components/VTextField/VTextField.js +3 -1
  11. package/es5/components/VTextField/VTextField.js.map +1 -1
  12. package/es5/directives/click-outside/index.js +19 -21
  13. package/es5/directives/click-outside/index.js.map +1 -1
  14. package/es5/directives/intersect/index.js +12 -17
  15. package/es5/directives/intersect/index.js.map +1 -1
  16. package/es5/directives/mutate/index.js +9 -11
  17. package/es5/directives/mutate/index.js.map +1 -1
  18. package/es5/directives/resize/index.js +8 -10
  19. package/es5/directives/resize/index.js.map +1 -1
  20. package/es5/directives/scroll/index.js +11 -12
  21. package/es5/directives/scroll/index.js.map +1 -1
  22. package/es5/directives/touch/index.js +6 -5
  23. package/es5/directives/touch/index.js.map +1 -1
  24. package/es5/framework.js +1 -1
  25. package/es5/services/theme/utils.js.map +1 -1
  26. package/lib/components/VFileInput/VFileInput.js +2 -0
  27. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  28. package/lib/components/VTextField/VTextField.js +2 -0
  29. package/lib/components/VTextField/VTextField.js.map +1 -1
  30. package/lib/directives/click-outside/index.js +17 -19
  31. package/lib/directives/click-outside/index.js.map +1 -1
  32. package/lib/directives/intersect/index.js +12 -16
  33. package/lib/directives/intersect/index.js.map +1 -1
  34. package/lib/directives/mutate/index.js +9 -11
  35. package/lib/directives/mutate/index.js.map +1 -1
  36. package/lib/directives/resize/index.js +8 -8
  37. package/lib/directives/resize/index.js.map +1 -1
  38. package/lib/directives/scroll/index.js +8 -8
  39. package/lib/directives/scroll/index.js.map +1 -1
  40. package/lib/directives/touch/index.js +6 -5
  41. package/lib/directives/touch/index.js.map +1 -1
  42. package/lib/framework.js +1 -1
  43. package/lib/services/theme/utils.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/VFileInput/VFileInput.ts +1 -1
  46. package/src/components/VMenu/__tests__/VMenuActivatorTest.spec.ts +25 -0
  47. package/src/components/VMenu/__tests__/test-with-directives.spec.ts +50 -0
  48. package/src/components/VTextField/VTextField.ts +1 -1
  49. package/src/directives/click-outside/__tests__/click-outside-shadow-dom.spec.ts +2 -1
  50. package/src/directives/click-outside/__tests__/click-outside.spec.ts +2 -1
  51. package/src/directives/click-outside/index.ts +25 -18
  52. package/src/directives/intersect/__tests__/intersect.spec.ts +31 -13
  53. package/src/directives/intersect/index.ts +15 -19
  54. package/src/directives/mutate/__tests__/mutate.spec.ts +35 -27
  55. package/src/directives/mutate/index.ts +12 -6
  56. package/src/directives/resize/__tests__/resize.spec.ts +4 -4
  57. package/src/directives/resize/index.ts +11 -18
  58. package/src/directives/scroll/__tests__/scroll.spec.ts +5 -29
  59. package/src/directives/scroll/index.ts +14 -7
  60. package/src/directives/touch/index.ts +6 -5
  61. package/src/services/theme/utils.ts +1 -1
@@ -1,3 +1,5 @@
1
+ const intersectState = new WeakMap();
2
+
1
3
  function mounted(el, binding, vnode) {
2
4
  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {
3
5
  return;
@@ -14,26 +16,22 @@ function mounted(el, binding, vnode) {
14
16
  };
15
17
  if (!handler) return;
16
18
  const observer = new IntersectionObserver((entries = [], observer) => {
17
- var _a;
18
-
19
- const _observe = (_a = el._observe) === null || _a === void 0 ? void 0 : _a[vnode.ctx.uid];
20
-
21
- if (!_observe) return; // Just in case, should never fire
19
+ const state = intersectState.get(el);
20
+ if (!state) return; // Just in case, should never fire
22
21
 
23
22
  const isIntersecting = entries.some(entry => entry.isIntersecting); // If is not quiet or has already been
24
23
  // initted, invoke the user callback
25
24
 
26
- if (handler && typeof handler === 'function' && (!modifiers.quiet || _observe.init) && (!modifiers.once || isIntersecting || _observe.init)) {
25
+ if (handler && typeof handler === 'function' && (!modifiers.quiet || state.init) && (!modifiers.once || isIntersecting || state.init)) {
27
26
  handler(entries, observer, isIntersecting);
28
27
  }
29
28
 
30
- if (isIntersecting && modifiers.once) unmounted(el, binding, vnode);else _observe.init = true;
29
+ if (isIntersecting && modifiers.once) unmounted(el, binding, vnode);else state.init = true;
31
30
  }, options);
32
- el._observe = Object(el._observe);
33
- el._observe[vnode.ctx.uid] = {
31
+ intersectState.set(el, {
34
32
  init: false,
35
33
  observer
36
- };
34
+ });
37
35
  observer.observe(el);
38
36
  }
39
37
 
@@ -46,12 +44,10 @@ function updated(el, binding, vnode) {
46
44
  }
47
45
 
48
46
  function unmounted(el, binding, vnode) {
49
- var _a;
50
-
51
- const observe = (_a = el._observe) === null || _a === void 0 ? void 0 : _a[vnode.ctx.uid];
52
- if (!observe) return;
53
- observe.observer.unobserve(el);
54
- delete el._observe[vnode.ctx.uid];
47
+ const state = intersectState.get(el);
48
+ if (!state) return;
49
+ state.observer.unobserve(el);
50
+ intersectState.delete(el);
55
51
  }
56
52
 
57
53
  export const Intersect = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/directives/intersect/index.ts"],"names":[],"mappings":"AA6BA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,MAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,EAAE,0BAA0B,MAA5B,CAArC,EAA0E;AAAE;AAAQ;;AAEpF,QAAM,SAAS,GAAG,OAAO,CAAC,SAAR,IAAqB,EAAvC;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM;AAAE,IAAA,OAAF;AAAW,IAAA;AAAX,MACJ,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,KAAK,IAAvC,IAA+C,aAAa,KAA5D,GACI,KADJ,GAEI;AAAE,IAAA,OAAO,EAAE,KAAX;AAAkB,IAAA,OAAO,EAAE;AAA3B,GAHN;AAKA,MAAI,CAAC,OAAL,EAAc;AAEd,QAAM,QAAQ,GAAG,IAAI,oBAAJ,CACf,CACE,OAAA,GAAuC,EADzC,EAEE,QAFF,KAGI;;;AACF,UAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,EAAE,CAAC,QAAH,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,KAAA,CAAX,GAAW,EAAA,CAAG,KAAK,CAAC,GAAN,CAAW,GAAd,CAA5B;;AACA,QAAI,CAAC,QAAL,EAAe,OAFb,CAEoB;;AAEtB,UAAM,cAAc,GAAG,OAAO,CAAC,IAAR,CAAa,KAAK,IAAI,KAAK,CAAC,cAA5B,CAAvB,CAJE,CAMF;AACA;;AACA,QACE,OAAO,IACP,OAAO,OAAP,KAAmB,UADnB,KAEC,CAAC,SAAS,CAAC,KAAX,IAAoB,QAAQ,CAAC,IAF9B,MAGC,CAAC,SAAS,CAAC,IAAX,IAAmB,cAAnB,IAAqC,QAAQ,CAAC,IAH/C,CADF,EAKE;AACA,MAAA,OAAO,CAAC,OAAD,EAAU,QAAV,EAAoB,cAApB,CAAP;AACD;;AAED,QAAI,cAAc,IAAI,SAAS,CAAC,IAAhC,EAAsC,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAT,CAAtC,KACK,QAAQ,CAAC,IAAT,GAAgB,IAAhB;AACN,GAvBc,EAwBf,OAxBe,CAAjB;AA2BA,EAAA,EAAE,CAAC,QAAH,GAAc,MAAM,CAAC,EAAE,CAAC,QAAJ,CAApB;AACA,EAAA,EAAE,CAAC,QAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,IAA+B;AAAE,IAAA,IAAI,EAAE,KAAR;AAAe,IAAA;AAAf,GAA/B;AAEA,EAAA,QAAQ,CAAC,OAAT,CAAiB,EAAjB;AACD;;AAED,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ;AACA,MAAI,OAAO,CAAC,KAAR,KAAkB,OAAO,CAAC,QAA9B,EAAwC;AACtC,IAAA,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAT;AACA,IAAA,OAAO,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAP;AACD;AACF;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;;;AAEZ,QAAM,OAAO,GAAG,CAAA,EAAA,GAAA,EAAE,CAAC,QAAH,MAAW,IAAX,IAAW,EAAA,KAAA,KAAA,CAAX,GAAW,KAAA,CAAX,GAAW,EAAA,CAAG,KAAK,CAAC,GAAN,CAAW,GAAd,CAA3B;AACA,MAAI,CAAC,OAAL,EAAc;AAEd,EAAA,OAAO,CAAC,QAAR,CAAiB,SAAjB,CAA2B,EAA3B;AACA,SAAO,EAAE,CAAC,QAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,CAAP;AACD;;AAED,OAAO,MAAM,SAAS,GAIlB;AACF,EAAA,OADE;AAEF,EAAA,OAFE;AAGF,EAAA;AAHE,CAJG;AAUP,eAAe,SAAf","sourcesContent":["import { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ntype ObserveHandler = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n isIntersecting: boolean\n) => void;\n\ninterface ObserveDirectiveBinding\n extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?:\n | ObserveHandler\n | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers?: {\n once?: boolean\n quiet?: boolean\n }\n}\n\n// Расширяем HTMLElement для хранения данных наблюдателя\ndeclare global {\n interface HTMLElement {\n _observe?: Record<\n number,\n { init: boolean, observer: IntersectionObserver }\n >\n }\n}\n\nfunction mounted (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) { return }\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } =\n typeof value === 'object' && value !== null && 'handler' in value\n ? value\n : { handler: value, options: {} }\n\n if (!handler) return\n\n const observer = new IntersectionObserver(\n (\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n const _observe = el._observe?.[vnode.ctx!.uid]\n if (!_observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler &&\n typeof handler === 'function' &&\n (!modifiers.quiet || _observe.init) &&\n (!modifiers.once || isIntersecting || _observe.init)\n ) {\n handler(entries, observer, isIntersecting)\n }\n\n if (isIntersecting && modifiers.once) unmounted(el, binding, vnode)\n else _observe.init = true\n },\n options\n )\n\n el._observe = Object(el._observe)\n el._observe![vnode.ctx!.uid] = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction updated (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n // Если значение изменилось, пересоздаем observer\n if (binding.value !== binding.oldValue) {\n unmounted(el, binding, vnode)\n mounted(el, binding, vnode)\n }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n const observe = el._observe?.[vnode.ctx!.uid]\n if (!observe) return\n\n observe.observer.unobserve(el)\n delete el._observe![vnode.ctx!.uid]\n}\n\nexport const Intersect: ObjectDirective<\n HTMLElement,\n | ObserveHandler\n | { handler: ObserveHandler, options?: IntersectionObserverInit }\n> = {\n mounted,\n updated,\n unmounted\n}\n\nexport default Intersect\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/directives/intersect/index.ts"],"names":[],"mappings":"AAwBA,MAAM,cAAc,GAAG,IAAI,OAAJ,EAAvB;;AAEA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,MAAI,OAAO,MAAP,KAAkB,WAAlB,IAAiC,EAAE,0BAA0B,MAA5B,CAArC,EAA0E;AAAE;AAAQ;;AAEpF,QAAM,SAAS,GAAG,OAAO,CAAC,SAAR,IAAqB,EAAvC;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM;AAAE,IAAA,OAAF;AAAW,IAAA;AAAX,MACJ,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,KAAK,IAAvC,IAA+C,aAAa,KAA5D,GACI,KADJ,GAEI;AAAE,IAAA,OAAO,EAAE,KAAX;AAAkB,IAAA,OAAO,EAAE;AAA3B,GAHN;AAKA,MAAI,CAAC,OAAL,EAAc;AAEd,QAAM,QAAQ,GAAG,IAAI,oBAAJ,CACf,CACE,OAAA,GAAuC,EADzC,EAEE,QAFF,KAGI;AACF,UAAM,KAAK,GAAG,cAAc,CAAC,GAAf,CAAmB,EAAnB,CAAd;AACA,QAAI,CAAC,KAAL,EAAY,OAFV,CAEiB;;AAEnB,UAAM,cAAc,GAAG,OAAO,CAAC,IAAR,CAAa,KAAK,IAAI,KAAK,CAAC,cAA5B,CAAvB,CAJE,CAMF;AACA;;AACA,QACE,OAAO,IACP,OAAO,OAAP,KAAmB,UADnB,KAEC,CAAC,SAAS,CAAC,KAAX,IAAoB,KAAK,CAAC,IAF3B,MAGC,CAAC,SAAS,CAAC,IAAX,IAAmB,cAAnB,IAAqC,KAAK,CAAC,IAH5C,CADF,EAKE;AACA,MAAA,OAAO,CAAC,OAAD,EAAU,QAAV,EAAoB,cAApB,CAAP;AACD;;AAED,QAAI,cAAc,IAAI,SAAS,CAAC,IAAhC,EAAsC,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAT,CAAtC,KACK,KAAK,CAAC,IAAN,GAAa,IAAb;AACN,GAvBc,EAwBf,OAxBe,CAAjB;AA2BA,EAAA,cAAc,CAAC,GAAf,CAAmB,EAAnB,EAAuB;AAAE,IAAA,IAAI,EAAE,KAAR;AAAe,IAAA;AAAf,GAAvB;AAEA,EAAA,QAAQ,CAAC,OAAT,CAAiB,EAAjB;AACD;;AAED,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ;AACA,MAAI,OAAO,CAAC,KAAR,KAAkB,OAAO,CAAC,QAA9B,EAAwC;AACtC,IAAA,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAT;AACA,IAAA,OAAO,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAP;AACD;AACF;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,KAAK,GAAG,cAAc,CAAC,GAAf,CAAmB,EAAnB,CAAd;AACA,MAAI,CAAC,KAAL,EAAY;AAEZ,EAAA,KAAK,CAAC,QAAN,CAAe,SAAf,CAAyB,EAAzB;AACA,EAAA,cAAc,CAAC,MAAf,CAAsB,EAAtB;AACD;;AAED,OAAO,MAAM,SAAS,GAIlB;AACF,EAAA,OADE;AAEF,EAAA,OAFE;AAGF,EAAA;AAHE,CAJG;AAUP,eAAe,SAAf","sourcesContent":["import { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ntype ObserveHandler = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n isIntersecting: boolean\n) => void;\n\ninterface ObserveDirectiveBinding\n extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?:\n | ObserveHandler\n | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers?: {\n once?: boolean\n quiet?: boolean\n }\n}\n\ninterface IntersectState {\n init: boolean\n observer: IntersectionObserver\n}\n\nconst intersectState = new WeakMap<HTMLElement, IntersectState>()\n\nfunction mounted (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) { return }\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } =\n typeof value === 'object' && value !== null && 'handler' in value\n ? value\n : { handler: value, options: {} }\n\n if (!handler) return\n\n const observer = new IntersectionObserver(\n (\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n const state = intersectState.get(el)\n if (!state) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler &&\n typeof handler === 'function' &&\n (!modifiers.quiet || state.init) &&\n (!modifiers.once || isIntersecting || state.init)\n ) {\n handler(entries, observer, isIntersecting)\n }\n\n if (isIntersecting && modifiers.once) unmounted(el, binding, vnode)\n else state.init = true\n },\n options\n )\n\n intersectState.set(el, { init: false, observer })\n\n observer.observe(el)\n}\n\nfunction updated (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n // Если значение изменилось, пересоздаем observer\n if (binding.value !== binding.oldValue) {\n unmounted(el, binding, vnode)\n mounted(el, binding, vnode)\n }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ObserveDirectiveBinding,\n vnode: VNode\n) {\n const state = intersectState.get(el)\n if (!state) return\n\n state.observer.unobserve(el)\n intersectState.delete(el)\n}\n\nexport const Intersect: ObjectDirective<\n HTMLElement,\n | ObserveHandler\n | { handler: ObserveHandler, options?: IntersectionObserverInit }\n> = {\n mounted,\n updated,\n unmounted\n}\n\nexport default Intersect\n"],"sourceRoot":"","file":"index.js"}
@@ -1,3 +1,5 @@
1
+ const mutateState = new WeakMap();
2
+
1
3
  function mounted(el, binding, vnode) {
2
4
  const modifiers = binding.modifiers || {};
3
5
  const value = binding.value;
@@ -23,27 +25,23 @@ function mounted(el, binding, vnode) {
23
25
  };
24
26
  const observer = new MutationObserver((mutationsList, observer) => {
25
27
  /* istanbul ignore if */
26
- if (!el._mutate) return; // Just in case, should never fire
28
+ if (!mutateState.has(el)) return; // Just in case, should never fire
27
29
 
28
30
  callback(mutationsList, observer); // If has the once modifier, unbind
29
31
 
30
32
  once && unmounted(el, binding, vnode);
31
33
  });
32
34
  observer.observe(el, options);
33
- el._mutate = Object(el._mutate);
34
- el._mutate[vnode.ctx.uid] = {
35
+ mutateState.set(el, {
35
36
  observer
36
- };
37
+ });
37
38
  }
38
39
 
39
40
  function unmounted(el, binding, vnode) {
40
- var _a;
41
-
42
- if (!((_a = el._mutate) === null || _a === void 0 ? void 0 : _a[vnode.ctx.uid])) return;
43
-
44
- el._mutate[vnode.ctx.uid].observer.disconnect();
45
-
46
- delete el._mutate[vnode.ctx.uid];
41
+ const state = mutateState.get(el);
42
+ if (!state) return;
43
+ state.observer.disconnect();
44
+ mutateState.delete(el);
47
45
  }
48
46
 
49
47
  export const Mutate = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/directives/mutate/index.ts"],"names":[],"mappings":"AAmBA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,SAAS,GAAI,OAAO,CAAC,SAAR,IAAyC,EAA5D;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM,QAAQ,GAAG,OAAO,KAAP,KAAiB,QAAjB,GAA4B,KAAK,CAAC,OAAlC,GAA4C,KAA7D;AACA,QAAM;AAAE,IAAA,IAAF;AAAQ,OAAG;AAAX,MAA4B,SAAlC;AACA,QAAM,YAAY,GAAG,MAAM,CAAC,IAAP,CAAY,YAAZ,EAA0B,MAA1B,GAAmC,CAAxD,CANY,CAQZ;;AACA,QAAM,OAAO,GACX,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,CAAC,OAAnC,GACI,KAAK,CAAC,OADV,GAEI,YAAY,GACV;AACA;AACE,IAAA,UAAU,EAAE,YAAY,CAAC,IAF3B;AAGE,IAAA,SAAS,EAAE,YAAY,CAAC,KAH1B;AAIE,IAAA,OAAO,EAAE,YAAY,CAAC,GAJxB;AAKE,IAAA,aAAa,EAAE,YAAY,CAAC;AAL9B,GADU,GAQV;AACA;AACE,IAAA,UAAU,EAAE,IAFd;AAGE,IAAA,SAAS,EAAE,IAHb;AAIE,IAAA,OAAO,EAAE,IAJX;AAKE,IAAA,aAAa,EAAE;AALjB,GAXR;AAmBA,QAAM,QAAQ,GAAG,IAAI,gBAAJ,CACf,CAAC,aAAD,EAAkC,QAAlC,KAAgE;AAC9D;AACA,QAAI,CAAC,EAAE,CAAC,OAAR,EAAiB,OAF6C,CAEtC;;AAExB,IAAA,QAAQ,CAAC,aAAD,EAAgB,QAAhB,CAAR,CAJ8D,CAM9D;;AACA,IAAA,IAAI,IAAI,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAjB;AACD,GATc,CAAjB;AAYA,EAAA,QAAQ,CAAC,OAAT,CAAiB,EAAjB,EAAqB,OAArB;AACA,EAAA,EAAE,CAAC,OAAH,GAAa,MAAM,CAAC,EAAE,CAAC,OAAJ,CAAnB;AACA,EAAA,EAAE,CAAC,OAAH,CAAY,KAAK,CAAC,GAAN,CAAW,GAAvB,IAA8B;AAAE,IAAA;AAAF,GAA9B;AACD;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;;;AAEZ,MAAI,EAAC,CAAA,EAAA,GAAA,EAAE,CAAC,OAAH,MAAU,IAAV,IAAU,EAAA,KAAA,KAAA,CAAV,GAAU,KAAA,CAAV,GAAU,EAAA,CAAG,KAAK,CAAC,GAAN,CAAW,GAAd,CAAX,CAAJ,EAAmC;;AAEnC,EAAA,EAAE,CAAC,OAAH,CAAW,KAAK,CAAC,GAAN,CAAW,GAAtB,EAA4B,QAA5B,CAAqC,UAArC;;AACA,SAAO,EAAE,CAAC,OAAH,CAAW,KAAK,CAAC,GAAN,CAAW,GAAtB,CAAP;AACD;;AAED,OAAO,MAAM,MAAM,GAAG;AACpB,EAAA,OADoB;AAEpB,EAAA;AAFoB,CAAf;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, VNode } from 'vue'\n\ntype MutateHandler = (\n mutationsList: MutationRecord[],\n observer: MutationObserver\n) => void;\n\ntype MutateValue =\n | MutateHandler\n | { handler: MutateHandler, options?: MutationObserverInit };\n\ntype MutateModifiers = {\n once?: boolean\n attr?: boolean\n child?: boolean\n sub?: boolean\n char?: boolean\n};\n\nfunction mounted (\n el: HTMLElement,\n binding: DirectiveBinding<MutateValue>,\n vnode: VNode\n) {\n const modifiers = (binding.modifiers as MutateModifiers) || {}\n const value = binding.value\n const callback = typeof value === 'object' ? value.handler : value!\n const { once, ...modifierKeys } = modifiers\n const hasModifiers = Object.keys(modifierKeys).length > 0\n\n // Options take top priority\n const options =\n typeof value === 'object' && value.options\n ? value.options\n : hasModifiers\n ? {\n // If we have modifiers, use only those provided\n attributes: modifierKeys.attr,\n childList: modifierKeys.child,\n subtree: modifierKeys.sub,\n characterData: modifierKeys.char\n }\n : {\n // Defaults to everything on\n attributes: true,\n childList: true,\n subtree: true,\n characterData: true\n }\n\n const observer = new MutationObserver(\n (mutationsList: MutationRecord[], observer: MutationObserver) => {\n /* istanbul ignore if */\n if (!el._mutate) return // Just in case, should never fire\n\n callback(mutationsList, observer)\n\n // If has the once modifier, unbind\n once && unmounted(el, binding, vnode)\n }\n )\n\n observer.observe(el, options)\n el._mutate = Object(el._mutate)\n el._mutate![vnode.ctx!.uid] = { observer }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: DirectiveBinding<MutateValue>,\n vnode: VNode\n) {\n if (!el._mutate?.[vnode.ctx!.uid]) return\n\n el._mutate[vnode.ctx!.uid]!.observer.disconnect()\n delete el._mutate[vnode.ctx!.uid]\n}\n\nexport const Mutate = {\n mounted,\n unmounted\n}\n\nexport default Mutate\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/directives/mutate/index.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,GAAG,IAAI,OAAJ,EAApB;;AAEA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,SAAS,GAAI,OAAO,CAAC,SAAR,IAAyC,EAA5D;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM,QAAQ,GAAG,OAAO,KAAP,KAAiB,QAAjB,GAA4B,KAAK,CAAC,OAAlC,GAA4C,KAA7D;AACA,QAAM;AAAE,IAAA,IAAF;AAAQ,OAAG;AAAX,MAA4B,SAAlC;AACA,QAAM,YAAY,GAAG,MAAM,CAAC,IAAP,CAAY,YAAZ,EAA0B,MAA1B,GAAmC,CAAxD,CANY,CAQZ;;AACA,QAAM,OAAO,GACX,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,CAAC,OAAnC,GACI,KAAK,CAAC,OADV,GAEI,YAAY,GACV;AACA;AACE,IAAA,UAAU,EAAE,YAAY,CAAC,IAF3B;AAGE,IAAA,SAAS,EAAE,YAAY,CAAC,KAH1B;AAIE,IAAA,OAAO,EAAE,YAAY,CAAC,GAJxB;AAKE,IAAA,aAAa,EAAE,YAAY,CAAC;AAL9B,GADU,GAQV;AACA;AACE,IAAA,UAAU,EAAE,IAFd;AAGE,IAAA,SAAS,EAAE,IAHb;AAIE,IAAA,OAAO,EAAE,IAJX;AAKE,IAAA,aAAa,EAAE;AALjB,GAXR;AAmBA,QAAM,QAAQ,GAAG,IAAI,gBAAJ,CACf,CAAC,aAAD,EAAkC,QAAlC,KAAgE;AAC9D;AACA,QAAI,CAAC,WAAW,CAAC,GAAZ,CAAgB,EAAhB,CAAL,EAA0B,OAFoC,CAE7B;;AAEjC,IAAA,QAAQ,CAAC,aAAD,EAAgB,QAAhB,CAAR,CAJ8D,CAM9D;;AACA,IAAA,IAAI,IAAI,SAAS,CAAC,EAAD,EAAK,OAAL,EAAc,KAAd,CAAjB;AACD,GATc,CAAjB;AAYA,EAAA,QAAQ,CAAC,OAAT,CAAiB,EAAjB,EAAqB,OAArB;AACA,EAAA,WAAW,CAAC,GAAZ,CAAgB,EAAhB,EAAoB;AAAE,IAAA;AAAF,GAApB;AACD;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,KAAK,GAAG,WAAW,CAAC,GAAZ,CAAgB,EAAhB,CAAd;AACA,MAAI,CAAC,KAAL,EAAY;AAEZ,EAAA,KAAK,CAAC,QAAN,CAAe,UAAf;AACA,EAAA,WAAW,CAAC,MAAZ,CAAmB,EAAnB;AACD;;AAED,OAAO,MAAM,MAAM,GAAG;AACpB,EAAA,OADoB;AAEpB,EAAA;AAFoB,CAAf;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, VNode } from 'vue'\n\ntype MutateHandler = (\n mutationsList: MutationRecord[],\n observer: MutationObserver\n) => void;\n\ntype MutateValue =\n | MutateHandler\n | { handler: MutateHandler, options?: MutationObserverInit };\n\ntype MutateModifiers = {\n once?: boolean\n attr?: boolean\n child?: boolean\n sub?: boolean\n char?: boolean\n};\n\ninterface MutateState {\n observer: MutationObserver\n}\n\nconst mutateState = new WeakMap<HTMLElement, MutateState>()\n\nfunction mounted (\n el: HTMLElement,\n binding: DirectiveBinding<MutateValue>,\n vnode: VNode\n) {\n const modifiers = (binding.modifiers as MutateModifiers) || {}\n const value = binding.value\n const callback = typeof value === 'object' ? value.handler : value!\n const { once, ...modifierKeys } = modifiers\n const hasModifiers = Object.keys(modifierKeys).length > 0\n\n // Options take top priority\n const options =\n typeof value === 'object' && value.options\n ? value.options\n : hasModifiers\n ? {\n // If we have modifiers, use only those provided\n attributes: modifierKeys.attr,\n childList: modifierKeys.child,\n subtree: modifierKeys.sub,\n characterData: modifierKeys.char\n }\n : {\n // Defaults to everything on\n attributes: true,\n childList: true,\n subtree: true,\n characterData: true\n }\n\n const observer = new MutationObserver(\n (mutationsList: MutationRecord[], observer: MutationObserver) => {\n /* istanbul ignore if */\n if (!mutateState.has(el)) return // Just in case, should never fire\n\n callback(mutationsList, observer)\n\n // If has the once modifier, unbind\n once && unmounted(el, binding, vnode)\n }\n )\n\n observer.observe(el, options)\n mutateState.set(el, { observer })\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: DirectiveBinding<MutateValue>,\n vnode: VNode\n) {\n const state = mutateState.get(el)\n if (!state) return\n\n state.observer.disconnect()\n mutateState.delete(el)\n}\n\nexport const Mutate = {\n mounted,\n unmounted\n}\n\nexport default Mutate\n"],"sourceRoot":"","file":"index.js"}
@@ -1,14 +1,15 @@
1
+ const resizeState = new WeakMap();
2
+
1
3
  function mounted(el, binding, vnode) {
2
4
  const callback = binding.value;
3
5
  const options = binding.options || {
4
6
  passive: true
5
7
  };
6
8
  window.addEventListener('resize', callback, options);
7
- el._onResize = Object(el._onResize);
8
- el._onResize[vnode.ctx.uid] = {
9
+ resizeState.set(el, {
9
10
  callback,
10
11
  options
11
- };
12
+ });
12
13
 
13
14
  if (!binding.modifiers || !binding.modifiers.quiet) {
14
15
  callback();
@@ -16,15 +17,14 @@ function mounted(el, binding, vnode) {
16
17
  }
17
18
 
18
19
  function unmounted(el, binding, vnode) {
19
- var _a;
20
-
21
- if (!((_a = el._onResize) === null || _a === void 0 ? void 0 : _a[vnode.ctx.uid])) return;
20
+ const state = resizeState.get(el);
21
+ if (!state) return;
22
22
  const {
23
23
  callback,
24
24
  options
25
- } = el._onResize[vnode.ctx.uid];
25
+ } = state;
26
26
  window.removeEventListener('resize', callback, options);
27
- delete el._onResize[vnode.ctx.uid];
27
+ resizeState.delete(el);
28
28
  }
29
29
 
30
30
  export const Resize = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/directives/resize/index.ts"],"names":[],"mappings":"AAmBA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,QAAQ,GAAG,OAAO,CAAC,KAAzB;AACA,QAAM,OAAO,GAAG,OAAO,CAAC,OAAR,IAAmB;AAAE,IAAA,OAAO,EAAE;AAAX,GAAnC;AAEA,EAAA,MAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,QAAlC,EAA4C,OAA5C;AAEA,EAAA,EAAE,CAAC,SAAH,GAAe,MAAM,CAAC,EAAE,CAAC,SAAJ,CAArB;AACA,EAAA,EAAE,CAAC,SAAH,CAAc,KAAK,CAAC,GAAN,CAAW,GAAzB,IAAgC;AAC9B,IAAA,QAD8B;AAE9B,IAAA;AAF8B,GAAhC;;AAKA,MAAI,CAAC,OAAO,CAAC,SAAT,IAAsB,CAAC,OAAO,CAAC,SAAR,CAAkB,KAA7C,EAAoD;AAClD,IAAA,QAAQ;AACT;AACF;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;;;AAEZ,MAAI,EAAC,CAAA,EAAA,GAAA,EAAE,CAAC,SAAH,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAG,KAAK,CAAC,GAAN,CAAW,GAAd,CAAb,CAAJ,EAAqC;AAErC,QAAM;AAAE,IAAA,QAAF;AAAY,IAAA;AAAZ,MAAwB,EAAE,CAAC,SAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,CAA9B;AAEA,EAAA,MAAM,CAAC,mBAAP,CAA2B,QAA3B,EAAqC,QAArC,EAA+C,OAA/C;AAEA,SAAO,EAAE,CAAC,SAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,CAAP;AACD;;AAED,OAAO,MAAM,MAAM,GAAoB;AACrC,EAAA,OADqC;AAErC,EAAA;AAFqC,CAAhC;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ninterface ResizeDirectiveBinding extends DirectiveBinding {\n value: () => void\n options?: boolean | AddEventListenerOptions\n}\n\ndeclare global {\n interface HTMLElement {\n _onResize?: Record<\n number,\n {\n callback: () => void\n options: boolean | AddEventListenerOptions\n }\n >\n }\n}\n\nfunction mounted (\n el: HTMLElement,\n binding: ResizeDirectiveBinding,\n vnode: VNode\n) {\n const callback = binding.value\n const options = binding.options || { passive: true }\n\n window.addEventListener('resize', callback, options)\n\n el._onResize = Object(el._onResize)\n el._onResize![vnode.ctx!.uid] = {\n callback,\n options\n }\n\n if (!binding.modifiers || !binding.modifiers.quiet) {\n callback()\n }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ResizeDirectiveBinding,\n vnode: VNode\n) {\n if (!el._onResize?.[vnode.ctx!.uid]) return\n\n const { callback, options } = el._onResize[vnode.ctx!.uid]!\n\n window.removeEventListener('resize', callback, options)\n\n delete el._onResize[vnode.ctx!.uid]\n}\n\nexport const Resize: ObjectDirective = {\n mounted,\n unmounted\n}\n\nexport default Resize\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/directives/resize/index.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,GAAG,IAAI,OAAJ,EAApB;;AAEA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,QAAQ,GAAG,OAAO,CAAC,KAAzB;AACA,QAAM,OAAO,GAAG,OAAO,CAAC,OAAR,IAAmB;AAAE,IAAA,OAAO,EAAE;AAAX,GAAnC;AAEA,EAAA,MAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,QAAlC,EAA4C,OAA5C;AAEA,EAAA,WAAW,CAAC,GAAZ,CAAgB,EAAhB,EAAoB;AAClB,IAAA,QADkB;AAElB,IAAA;AAFkB,GAApB;;AAKA,MAAI,CAAC,OAAO,CAAC,SAAT,IAAsB,CAAC,OAAO,CAAC,SAAR,CAAkB,KAA7C,EAAoD;AAClD,IAAA,QAAQ;AACT;AACF;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,KAAK,GAAG,WAAW,CAAC,GAAZ,CAAgB,EAAhB,CAAd;AACA,MAAI,CAAC,KAAL,EAAY;AACZ,QAAM;AAAE,IAAA,QAAF;AAAY,IAAA;AAAZ,MAAwB,KAA9B;AAEA,EAAA,MAAM,CAAC,mBAAP,CAA2B,QAA3B,EAAqC,QAArC,EAA+C,OAA/C;AACA,EAAA,WAAW,CAAC,MAAZ,CAAmB,EAAnB;AACD;;AAED,OAAO,MAAM,MAAM,GAAoB;AACrC,EAAA,OADqC;AAErC,EAAA;AAFqC,CAAhC;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, ObjectDirective, VNode } from 'vue'\n\ninterface ResizeDirectiveBinding extends DirectiveBinding {\n value: () => void\n options?: boolean | AddEventListenerOptions\n}\n\ninterface ResizeState {\n callback: () => void\n options: boolean | AddEventListenerOptions\n}\n\nconst resizeState = new WeakMap<HTMLElement, ResizeState>()\n\nfunction mounted (\n el: HTMLElement,\n binding: ResizeDirectiveBinding,\n vnode: VNode\n) {\n const callback = binding.value\n const options = binding.options || { passive: true }\n\n window.addEventListener('resize', callback, options)\n\n resizeState.set(el, {\n callback,\n options\n })\n\n if (!binding.modifiers || !binding.modifiers.quiet) {\n callback()\n }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ResizeDirectiveBinding,\n vnode: VNode\n) {\n const state = resizeState.get(el)\n if (!state) return\n const { callback, options } = state\n\n window.removeEventListener('resize', callback, options)\n resizeState.delete(el)\n}\n\nexport const Resize: ObjectDirective = {\n mounted,\n unmounted\n}\n\nexport default Resize\n"],"sourceRoot":"","file":"index.js"}
@@ -1,3 +1,5 @@
1
+ const scrollState = new WeakMap();
2
+
1
3
  function mounted(el, binding, vnode) {
2
4
  const {
3
5
  self = false
@@ -10,26 +12,24 @@ function mounted(el, binding, vnode) {
10
12
  const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
11
13
  if (!target) return;
12
14
  target.addEventListener('scroll', handler, options);
13
- el._onScroll = Object(el._onScroll);
14
- el._onScroll[vnode.ctx.uid] = {
15
+ scrollState.set(el, {
15
16
  handler,
16
17
  options,
17
18
  // Don't reference self
18
19
  target: self ? undefined : target
19
- };
20
+ });
20
21
  }
21
22
 
22
23
  function unmounted(el, binding, vnode) {
23
- var _a;
24
-
25
- if (!((_a = el._onScroll) === null || _a === void 0 ? void 0 : _a[vnode.ctx.uid])) return;
24
+ const state = scrollState.get(el);
25
+ if (!state) return;
26
26
  const {
27
27
  handler,
28
28
  options,
29
29
  target = el
30
- } = el._onScroll[vnode.ctx.uid];
30
+ } = state;
31
31
  target.removeEventListener('scroll', handler, options);
32
- delete el._onScroll[vnode.ctx.uid];
32
+ scrollState.delete(el);
33
33
  }
34
34
 
35
35
  export const Scroll = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/directives/scroll/index.ts"],"names":[],"mappings":"AAeA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM;AAAE,IAAA,IAAI,GAAG;AAAT,MAAmB,OAAO,CAAC,SAAR,IAAqB,EAA9C;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM,OAAO,GAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,CAAC,OAApC,IAAgD;AAC9D,IAAA,OAAO,EAAE;AADqD,GAAhE;AAGA,QAAM,OAAO,GACX,OAAO,KAAP,KAAiB,UAAjB,IAA+B,iBAAiB,KAAhD,GACI,KADJ,GAEI,KAAK,CAAC,OAHZ;AAKA,QAAM,MAAM,GAAG,IAAI,GACf,EADe,GAEf,OAAO,CAAC,GAAR,GACE,QAAQ,CAAC,aAAT,CAAuB,OAAO,CAAC,GAA/B,CADF,GAEE,MAJN;AAMA,MAAI,CAAC,MAAL,EAAa;AAEb,EAAA,MAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,OAAlC,EAA2C,OAA3C;AAEA,EAAA,EAAE,CAAC,SAAH,GAAe,MAAM,CAAC,EAAE,CAAC,SAAJ,CAArB;AACA,EAAA,EAAE,CAAC,SAAH,CAAc,KAAK,CAAC,GAAN,CAAW,GAAzB,IAAgC;AAC9B,IAAA,OAD8B;AAE9B,IAAA,OAF8B;AAG9B;AACA,IAAA,MAAM,EAAE,IAAI,GAAG,SAAH,GAAe;AAJG,GAAhC;AAMD;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;;;AAEZ,MAAI,EAAC,CAAA,EAAA,GAAA,EAAE,CAAC,SAAH,MAAY,IAAZ,IAAY,EAAA,KAAA,KAAA,CAAZ,GAAY,KAAA,CAAZ,GAAY,EAAA,CAAG,KAAK,CAAC,GAAN,CAAW,GAAd,CAAb,CAAJ,EAAqC;AAErC,QAAM;AAAE,IAAA,OAAF;AAAW,IAAA,OAAX;AAAoB,IAAA,MAAM,GAAG;AAA7B,MAAoC,EAAE,CAAC,SAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,CAA1C;AAEA,EAAA,MAAM,CAAC,mBAAP,CAA2B,QAA3B,EAAqC,OAArC,EAA8C,OAA9C;AACA,SAAO,EAAE,CAAC,SAAH,CAAa,KAAK,CAAC,GAAN,CAAW,GAAxB,CAAP;AACD;;AAED,OAAO,MAAM,MAAM,GAAoB;AACrC,EAAA,OADqC;AAErC,EAAA;AAFqC,CAAhC;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, VNode, ObjectDirective } from 'vue'\n\ninterface ScrollDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value:\n | EventListener\n | {\n handler: EventListener\n options?: boolean | AddEventListenerOptions\n }\n | (EventListenerObject & { options?: boolean | AddEventListenerOptions })\n modifiers?: {\n self?: boolean\n }\n}\n\nfunction mounted (\n el: HTMLElement,\n binding: ScrollDirectiveBinding,\n vnode: VNode\n) {\n const { self = false } = binding.modifiers || {}\n const value = binding.value\n const options = (typeof value === 'object' && value.options) || {\n passive: true\n }\n const handler =\n typeof value === 'function' || 'handleEvent' in value\n ? value\n : value.handler\n\n const target = self\n ? el\n : binding.arg\n ? document.querySelector(binding.arg)\n : window\n\n if (!target) return\n\n target.addEventListener('scroll', handler, options)\n\n el._onScroll = Object(el._onScroll)\n el._onScroll![vnode.ctx!.uid] = {\n handler,\n options,\n // Don't reference self\n target: self ? undefined : target\n }\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ScrollDirectiveBinding,\n vnode: VNode\n) {\n if (!el._onScroll?.[vnode.ctx!.uid]) return\n\n const { handler, options, target = el } = el._onScroll[vnode.ctx!.uid]!\n\n target.removeEventListener('scroll', handler, options)\n delete el._onScroll[vnode.ctx!.uid]\n}\n\nexport const Scroll: ObjectDirective = {\n mounted,\n unmounted\n}\n\nexport default Scroll\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/directives/scroll/index.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,GAAG,IAAI,OAAJ,EAApB;;AAEA,SAAS,OAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM;AAAE,IAAA,IAAI,GAAG;AAAT,MAAmB,OAAO,CAAC,SAAR,IAAqB,EAA9C;AACA,QAAM,KAAK,GAAG,OAAO,CAAC,KAAtB;AACA,QAAM,OAAO,GAAI,OAAO,KAAP,KAAiB,QAAjB,IAA6B,KAAK,CAAC,OAApC,IAAgD;AAC9D,IAAA,OAAO,EAAE;AADqD,GAAhE;AAGA,QAAM,OAAO,GACX,OAAO,KAAP,KAAiB,UAAjB,IAA+B,iBAAiB,KAAhD,GACI,KADJ,GAEI,KAAK,CAAC,OAHZ;AAKA,QAAM,MAAM,GAAG,IAAI,GACf,EADe,GAEf,OAAO,CAAC,GAAR,GACE,QAAQ,CAAC,aAAT,CAAuB,OAAO,CAAC,GAA/B,CADF,GAEE,MAJN;AAMA,MAAI,CAAC,MAAL,EAAa;AAEb,EAAA,MAAM,CAAC,gBAAP,CAAwB,QAAxB,EAAkC,OAAlC,EAA2C,OAA3C;AAEA,EAAA,WAAW,CAAC,GAAZ,CAAgB,EAAhB,EAAoB;AAClB,IAAA,OADkB;AAElB,IAAA,OAFkB;AAGlB;AACA,IAAA,MAAM,EAAE,IAAI,GAAG,SAAH,GAAe;AAJT,GAApB;AAMD;;AAED,SAAS,SAAT,CACE,EADF,EAEE,OAFF,EAGE,KAHF,EAGc;AAEZ,QAAM,KAAK,GAAG,WAAW,CAAC,GAAZ,CAAgB,EAAhB,CAAd;AACA,MAAI,CAAC,KAAL,EAAY;AACZ,QAAM;AAAE,IAAA,OAAF;AAAW,IAAA,OAAX;AAAoB,IAAA,MAAM,GAAG;AAA7B,MAAoC,KAA1C;AAEA,EAAA,MAAM,CAAC,mBAAP,CAA2B,QAA3B,EAAqC,OAArC,EAA8C,OAA9C;AACA,EAAA,WAAW,CAAC,MAAZ,CAAmB,EAAnB;AACD;;AAED,OAAO,MAAM,MAAM,GAAoB;AACrC,EAAA,OADqC;AAErC,EAAA;AAFqC,CAAhC;AAKP,eAAe,MAAf","sourcesContent":["import { DirectiveBinding, VNode, ObjectDirective } from 'vue'\n\ninterface ScrollDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value:\n | EventListener\n | {\n handler: EventListener\n options?: boolean | AddEventListenerOptions\n }\n | (EventListenerObject & { options?: boolean | AddEventListenerOptions })\n modifiers?: {\n self?: boolean\n }\n}\n\ninterface ScrollState {\n handler: EventListener | EventListenerObject\n options: boolean | AddEventListenerOptions\n target?: EventTarget\n}\n\nconst scrollState = new WeakMap<HTMLElement, ScrollState>()\n\nfunction mounted (\n el: HTMLElement,\n binding: ScrollDirectiveBinding,\n vnode: VNode\n) {\n const { self = false } = binding.modifiers || {}\n const value = binding.value\n const options = (typeof value === 'object' && value.options) || {\n passive: true\n }\n const handler =\n typeof value === 'function' || 'handleEvent' in value\n ? value\n : value.handler\n\n const target = self\n ? el\n : binding.arg\n ? document.querySelector(binding.arg)\n : window\n\n if (!target) return\n\n target.addEventListener('scroll', handler, options)\n\n scrollState.set(el, {\n handler,\n options,\n // Don't reference self\n target: self ? undefined : target\n })\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: ScrollDirectiveBinding,\n vnode: VNode\n) {\n const state = scrollState.get(el)\n if (!state) return\n const { handler, options, target = el } = state\n\n target.removeEventListener('scroll', handler, options)\n scrollState.delete(el)\n}\n\nexport const Scroll: ObjectDirective = {\n mounted,\n unmounted\n}\n\nexport default Scroll\n"],"sourceRoot":"","file":"index.js"}
@@ -71,6 +71,8 @@ function createHandlers(value) {
71
71
  };
72
72
  }
73
73
 
74
+ const touchState = new WeakMap();
75
+
74
76
  function mounted(el, binding, vnode) {
75
77
  const value = binding.value;
76
78
  const target = value.parent ? el.parentElement : el;
@@ -80,8 +82,7 @@ function mounted(el, binding, vnode) {
80
82
 
81
83
  if (!target) return;
82
84
  const handlers = createHandlers(binding.value);
83
- target._touchHandlers = Object(target._touchHandlers);
84
- target._touchHandlers[vnode.ctx.uid] = handlers;
85
+ touchState.set(target, handlers);
85
86
  keys(handlers).forEach(eventName => {
86
87
  target.addEventListener(eventName, handlers[eventName], options);
87
88
  });
@@ -89,14 +90,14 @@ function mounted(el, binding, vnode) {
89
90
 
90
91
  function unmounted(el, binding, vnode) {
91
92
  const target = binding.value.parent ? el.parentElement : el;
92
- if (!target || !target._touchHandlers) return;
93
- const handlers = target._touchHandlers[vnode.ctx.uid];
93
+ if (!target) return;
94
+ const handlers = touchState.get(target);
94
95
 
95
96
  if (handlers) {
96
97
  keys(handlers).forEach(eventName => {
97
98
  target.removeEventListener(eventName, handlers[eventName]);
98
99
  });
99
- delete target._touchHandlers[vnode.ctx.uid];
100
+ touchState.delete(target);
100
101
  }
101
102
  }
102
103
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/directives/touch/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DirectiveBinding, VNode, ObjectDirective } from 'vue'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'vuetify/types'\nimport makeDirectiveActivatable from '../../util/make-directive-activatable'\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left &&\n touchendX < touchstartX - minDistance &&\n wrapper.left(wrapper)\n wrapper.right &&\n touchendX > touchstartX + minDistance &&\n wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper)\n wrapper.down &&\n touchendY > touchstartY + minDistance &&\n wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start && wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end && wrapper.end(Object.assign(event, wrapper))\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper)\n }\n}\n\nfunction mounted (\n el: HTMLElement,\n binding: DirectiveBinding<TouchValue>,\n vnode: VNode\n) {\n const value = binding.value\n const target = value.parent ? el.parentElement : el\n const options = value.options || { passive: true }\n\n // Needed to pass unit tests\n if (!target) return\n\n const handlers = createHandlers(binding.value)\n target._touchHandlers = Object(target._touchHandlers)\n target._touchHandlers![vnode.ctx!.uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(\n eventName,\n handlers[eventName] as EventListener,\n options\n )\n })\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: DirectiveBinding<TouchValue>,\n vnode: VNode\n) {\n const target = binding.value.parent ? el.parentElement : el\n if (!target || !target._touchHandlers) return\n\n const handlers = target._touchHandlers[vnode.ctx!.uid]\n if (handlers) {\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n delete target._touchHandlers[vnode.ctx!.uid]\n }\n}\n\nexport const Touch: ObjectDirective<HTMLElement, TouchValue> = {\n mounted,\n unmounted\n}\n\nexport default makeDirectiveActivatable(Touch)\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/directives/touch/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DirectiveBinding, VNode, ObjectDirective } from 'vue'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'vuetify/types'\nimport makeDirectiveActivatable from '../../util/make-directive-activatable'\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left &&\n touchendX < touchstartX - minDistance &&\n wrapper.left(wrapper)\n wrapper.right &&\n touchendX > touchstartX + minDistance &&\n wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper)\n wrapper.down &&\n touchendY > touchstartY + minDistance &&\n wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start && wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end && wrapper.end(Object.assign(event, wrapper))\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper)\n }\n}\n\nconst touchState = new WeakMap<EventTarget, TouchStoredHandlers>()\n\nfunction mounted (\n el: HTMLElement,\n binding: DirectiveBinding<TouchValue>,\n vnode: VNode\n) {\n const value = binding.value\n const target = value.parent ? el.parentElement : el\n const options = value.options || { passive: true }\n\n // Needed to pass unit tests\n if (!target) return\n\n const handlers = createHandlers(binding.value)\n touchState.set(target, handlers)\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(\n eventName,\n handlers[eventName] as EventListener,\n options\n )\n })\n}\n\nfunction unmounted (\n el: HTMLElement,\n binding: DirectiveBinding<TouchValue>,\n vnode: VNode\n) {\n const target = binding.value.parent ? el.parentElement : el\n if (!target) return\n\n const handlers = touchState.get(target)\n if (handlers) {\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n touchState.delete(target)\n }\n}\n\nexport const Touch: ObjectDirective<HTMLElement, TouchValue> = {\n mounted,\n unmounted\n}\n\nexport default makeDirectiveActivatable(Touch)\n"],"sourceRoot":"","file":"index.js"}
package/lib/framework.js CHANGED
@@ -46,7 +46,7 @@ export default class Vuetify {
46
46
  }
47
47
  Vuetify.install = install;
48
48
  Vuetify.installed = false;
49
- Vuetify.version = "2.7.2-alpha55";
49
+ Vuetify.version = "2.7.2-alpha57";
50
50
  Vuetify.config = {
51
51
  silent: false
52
52
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/theme/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { keys } from '../../util/helpers'\nimport { colorToInt, intToHex, colorToHex, ColorInt } from '../../util/colorUtils'\nimport * as sRGB from '../../util/color/transformSRGB'\nimport * as LAB from '../../util/color/transformCIELAB'\nimport {\n VuetifyParsedTheme,\n VuetifyThemeItem\n} from 'vuetify/types/services/theme'\n\nexport function parse (\n theme: Record<string, VuetifyThemeItem>,\n isItem = false,\n variations = true\n): VuetifyParsedTheme {\n const { anchor, ...variant } = theme\n const colors = Object.keys(variant)\n const parsedTheme: any = {}\n\n for (let i = 0; i < colors.length; ++i) {\n const name = colors[i]\n const value = theme[name]\n\n if (value == null) continue\n\n if (!variations) {\n parsedTheme[name] = { base: intToHex(colorToInt(value)) }\n } else if (isItem) {\n /* istanbul ignore else */\n if (name === 'base' || name.startsWith('lighten') || name.startsWith('darken')) {\n parsedTheme[name] = colorToHex(value)\n }\n } else if (typeof value === 'object') {\n parsedTheme[name] = parse(value, true, variations)\n } else {\n parsedTheme[name] = genVariations(name, colorToInt(value))\n }\n }\n\n if (!isItem) {\n parsedTheme.anchor = anchor || parsedTheme.base || parsedTheme.primary.base\n }\n\n return parsedTheme\n}\n\n/**\n * Generate the CSS for a base color (.primary)\n */\nconst genBaseColor = (name: string, value: string): string => {\n return `\n.v-application .${name} {\n background-color: ${value} !important;\n border-color: ${value} !important;\n}\n.v-application .${name}--text {\n color: ${value} !important;\n caret-color: ${value} !important;\n}`\n}\n\n/**\n * Generate the CSS for a variant color (.primary.darken-2)\n */\nconst genVariantColor = (name: string, variant: string, value: string): string => {\n const [type, n] = variant.split(/(\\d)/, 2)\n return `\n.v-application .${name}.${type}-${n} {\n background-color: ${value} !important;\n border-color: ${value} !important;\n}\n.v-application .${name}--text.text--${type}-${n} {\n color: ${value} !important;\n caret-color: ${value} !important;\n}`\n}\n\nconst genColorVariableName = (name: string, variant = 'base'): string => `--v-${name}-${variant}`\n\nconst genColorVariable = (name: string, variant = 'base'): string => `var(${genColorVariableName(name, variant)})`\n\nexport function genStyles (theme: VuetifyParsedTheme, cssVar = false): string {\n const { anchor, ...variant } = theme\n const colors = Object.keys(variant)\n\n if (!colors.length) return ''\n\n let variablesCss = ''\n let css = ''\n\n const aColor = cssVar ? genColorVariable('anchor') : anchor\n css += `.v-application a { color: ${aColor}; }`\n cssVar && (variablesCss += ` ${genColorVariableName('anchor')}: ${anchor};\\n`)\n\n for (let i = 0; i < colors.length; ++i) {\n const name = colors[i]\n const value = theme[name]\n\n css += genBaseColor(name, cssVar ? genColorVariable(name) : value.base)\n cssVar && (variablesCss += ` ${genColorVariableName(name)}: ${value.base};\\n`)\n\n const variants = keys(value)\n for (let i = 0; i < variants.length; ++i) {\n const variant = variants[i]\n const variantValue = value[variant]\n if (variant === 'base') continue\n\n css += genVariantColor(name, variant, cssVar ? genColorVariable(name, variant) : variantValue)\n cssVar && (variablesCss += ` ${genColorVariableName(name, variant)}: ${variantValue};\\n`)\n }\n }\n\n if (cssVar) {\n variablesCss = `:root {\\n${variablesCss}}\\n\\n`\n }\n\n return variablesCss + css\n}\n\nexport function genVariations (name: string, value: ColorInt): Record<string, string> {\n const values: Record<string, string> = {\n base: intToHex(value)\n }\n\n for (let i = 5; i > 0; --i) {\n values[`lighten${i}`] = intToHex(lighten(value, i))\n }\n\n for (let i = 1; i <= 4; ++i) {\n values[`darken${i}`] = intToHex(darken(value, i))\n }\n\n return values\n}\n\nexport function lighten (value: ColorInt, amount: number): ColorInt {\n const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] + amount * 10\n return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n\nexport function darken (value: ColorInt, amount: number): ColorInt {\n const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] - amount * 10\n return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n"],"sourceRoot":"","file":"utils.js"}
1
+ {"version":3,"sources":["../../../src/services/theme/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { keys } from '../../util/helpers'\nimport { colorToInt, intToHex, colorToHex, ColorInt } from '../../util/colorUtils'\nimport * as sRGB from '../../util/color/transformSRGB'\nimport * as LAB from '../../util/color/transformCIELAB'\nimport {\n VuetifyParsedTheme,\n VuetifyThemeItem\n} from 'vuetify/types/services/theme'\n\nexport function parse (\n theme: Record<string, VuetifyThemeItem>,\n isItem = false,\n variations = true\n): VuetifyParsedTheme {\n const { anchor, ...variant } = theme\n const colors = Object.keys(variant)\n const parsedTheme: any = {}\n\n for (let i = 0; i < colors.length; ++i) {\n const name = colors[i]\n const value = theme[name]\n\n if (value == null) continue\n\n if (!variations) {\n parsedTheme[name] = { base: intToHex(colorToInt(value)) }\n } else if (isItem) {\n /* istanbul ignore else */\n if (name === 'base' || name.startsWith('lighten') || name.startsWith('darken')) {\n parsedTheme[name] = colorToHex(value)\n }\n } else if (typeof value === 'object') {\n parsedTheme[name] = parse(value, true, variations)\n } else {\n parsedTheme[name] = genVariations(name, colorToInt(value))\n }\n }\n\n if (!isItem) {\n parsedTheme.anchor = anchor || parsedTheme.base || parsedTheme.primary.base\n }\n\n return parsedTheme\n}\n\n/**\n * Generate the CSS for a base color (.primary)\n */\nconst genBaseColor = (name: string, value: string): string => {\n return `\n.v-application .${name} {\n background-color: ${value} !important;\n border-color: ${value} !important;\n}\n.v-application .${name}--text {\n color: ${value} !important;\n caret-color: ${value} !important;\n}`\n}\n\n/**\n * Generate the CSS for a variant color (.primary.darken-2)\n */\nconst genVariantColor = (name: string, variant: string, value: string): string => {\n const [type, n] = variant.split(/(\\d)/, 2)\n return `\n.v-application .${name}.${type}-${n} {\n background-color: ${value} !important;\n border-color: ${value} !important;\n}\n.v-application .${name}--text.text--${type}-${n} {\n color: ${value} !important;\n caret-color: ${value} !important;\n}`\n}\n\nconst genColorVariableName = (name: string, variant = 'base'): string => `--v-${name}-${variant}`\n\nconst genColorVariable = (name: string, variant = 'base'): string => `var(${genColorVariableName(name, variant)})`\n\nexport function genStyles (theme: VuetifyParsedTheme, cssVar = false): string {\n const { anchor, ...variant } = theme\n const colors = Object.keys(variant)\n\n if (!colors.length) return ''\n\n let variablesCss = ''\n let css = ''\n\n const aColor = cssVar ? genColorVariable('anchor') : anchor\n css += `.v-application a { color: ${aColor}; }`\n cssVar && (variablesCss += ` ${genColorVariableName('anchor')}: ${anchor};\\n`)\n\n for (let i = 0; i < colors.length; ++i) {\n const name = colors[i]\n const value = theme[name]\n\n css += genBaseColor(name, cssVar ? genColorVariable(name) : value.base)\n cssVar && (variablesCss += ` ${genColorVariableName(name)}: ${value.base};\\n`)\n\n const variants = keys(value)\n for (let i = 0; i < variants.length; ++i) {\n const variant = variants[i] as string\n const variantValue = value[variant]\n if (variant === 'base') continue\n\n css += genVariantColor(name, variant, cssVar ? genColorVariable(name, variant) : variantValue)\n cssVar && (variablesCss += ` ${genColorVariableName(name, variant)}: ${variantValue};\\n`)\n }\n }\n\n if (cssVar) {\n variablesCss = `:root {\\n${variablesCss}}\\n\\n`\n }\n\n return variablesCss + css\n}\n\nexport function genVariations (name: string, value: ColorInt): Record<string, string> {\n const values: Record<string, string> = {\n base: intToHex(value)\n }\n\n for (let i = 5; i > 0; --i) {\n values[`lighten${i}`] = intToHex(lighten(value, i))\n }\n\n for (let i = 1; i <= 4; ++i) {\n values[`darken${i}`] = intToHex(darken(value, i))\n }\n\n return values\n}\n\nexport function lighten (value: ColorInt, amount: number): ColorInt {\n const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] + amount * 10\n return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n\nexport function darken (value: ColorInt, amount: number): ColorInt {\n const lab = LAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] - amount * 10\n return sRGB.fromXYZ(LAB.toXYZ(lab))\n}\n"],"sourceRoot":"","file":"utils.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dimailn/vuetify",
3
3
  "description": "Vue Material Component Framework",
4
- "version": "2.7.2-alpha55",
4
+ "version": "2.7.2-alpha57",
5
5
  "author": {
6
6
  "name": "John Leider",
7
7
  "email": "john@vuetifyjs.com"
@@ -203,7 +203,7 @@ export default defineComponent({
203
203
  // Create input without calling VTextField.genInput to avoid value setting
204
204
  const listeners = Object.assign({}, this.listeners$)
205
205
  delete listeners.change // Change should not be bound externally
206
- const { title, value, ...inputAttrs } = this.attrs$
206
+ const { title, value, class: _class, style: _style, ...inputAttrs } = this.attrs$
207
207
 
208
208
  const input = h('input', {
209
209
  ...inputAttrs,
@@ -0,0 +1,25 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import VMenu from '../VMenu'
3
+ import { h } from 'vue'
4
+
5
+ describe('activator test', () => {
6
+ it('passes onClick to the slot', async () => {
7
+ const el = document.createElement('div')
8
+ el.setAttribute('data-app', 'true')
9
+ document.body.appendChild(el)
10
+
11
+ const wrapper = mount(VMenu, {
12
+ props: {
13
+ attach: true
14
+ },
15
+ slots: {
16
+ activator: (props: any) => h('button', { class: 'activator', ...props.attrs }, 'Activator'),
17
+ default: () => h('div', 'Content')
18
+ }
19
+ })
20
+
21
+ const btn = wrapper.find('.activator')
22
+ await btn.trigger('click')
23
+ console.log('isActive:', (wrapper.vm as any).isActive)
24
+ })
25
+ })
@@ -0,0 +1,50 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import { h, defineComponent, withDirectives, resolveComponent } from 'vue'
3
+
4
+ const MyDir = { mounted: () => {} }
5
+
6
+ const VBtn = defineComponent({
7
+ name: 'v-btn',
8
+ render () {
9
+ return withDirectives(h('button', { ref: 'btn' }, 'btn'), [[MyDir]])
10
+ }
11
+ })
12
+
13
+ const VMenu = defineComponent({
14
+ name: 'v-menu',
15
+ data: () => ({ activatorNode: [] as any[] }),
16
+ render () {
17
+ const act = this.$slots.activator ? this.$slots.activator({ attrs: { class: 'act' } }) : []
18
+ this.activatorNode = act
19
+ return h('div', [this.activatorNode])
20
+ }
21
+ })
22
+
23
+ describe('test', () => {
24
+ it('works', () => {
25
+ const AppBtn = defineComponent({
26
+ setup (props, { slots, attrs }) {
27
+ return () => h(VBtn, attrs, slots)
28
+ }
29
+ })
30
+
31
+ const AppMenu = defineComponent({
32
+ setup (props, { slots }) {
33
+ return () => h(VMenu, null, {
34
+ activator: (props: any) => slots.activator ? slots.activator(props) : null
35
+ })
36
+ }
37
+ })
38
+
39
+ const App = defineComponent({
40
+ render () {
41
+ return h(AppMenu, null, {
42
+ activator: ({ attrs }: any) => h(AppBtn, attrs)
43
+ })
44
+ }
45
+ })
46
+
47
+ const wrapper = mount(App)
48
+ console.log(wrapper.html())
49
+ })
50
+ })
@@ -391,7 +391,7 @@ export default baseMixins.extend({
391
391
  genInput () {
392
392
  const listeners = Object.assign({}, this.listeners$)
393
393
  delete listeners.change // Change should not be bound externally
394
- const { title, onChange: _onChange, ...inputAttrs } = this.attrs$ as Record<string, any>
394
+ const { title, onChange: _onChange, class: _class, style: _style, ...inputAttrs } = this.attrs$ as Record<string, any>
395
395
 
396
396
  const node = h('input', {
397
397
  style: {},
@@ -9,12 +9,13 @@ function bootstrap (args?: object) {
9
9
  const shadowEl = document.createElement('div')
10
10
 
11
11
  const binding = {
12
+ instance: { $: { uid: 1 } },
12
13
  value: {
13
14
  handler: jest.fn(),
14
15
  ...args
15
16
  }
16
17
  } as any
17
- const vnode = { ctx: { uid: 1 } } as any
18
+ const vnode = {} as any
18
19
 
19
20
  let shadowClickHandler
20
21
  let outsideClickHandler
@@ -6,12 +6,13 @@ function bootstrap (args?: object) {
6
6
  const el = document.createElement('div')
7
7
 
8
8
  const binding = {
9
+ instance: { $: { uid: 1 } },
9
10
  value: {
10
11
  handler: jest.fn(),
11
12
  ...args
12
13
  }
13
14
  } as any
14
- const vnode = { ctx: { uid: 1 } } as any
15
+ const vnode = {} as any
15
16
 
16
17
  let clickHandler
17
18
  let mousedownHandler
@@ -12,6 +12,14 @@ type ClickOutsideDirective = VNodeDirective & {
12
12
  value?: ((e: Event) => void) | ClickOutsideBindingArgs
13
13
  }
14
14
 
15
+ interface ClickOutsideState {
16
+ onClick: (e: Event) => void
17
+ onMousedown: (e: Event) => void
18
+ lastMousedownWasOutside: boolean
19
+ }
20
+
21
+ const clickOutsideState = new WeakMap<HTMLElement, ClickOutsideState>()
22
+
15
23
  function defaultConditional () {
16
24
  return true
17
25
  }
@@ -55,8 +63,10 @@ function checkIsActive (e: PointerEvent, binding: ClickOutsideDirective): boolea
55
63
 
56
64
  function directive (e: PointerEvent, el: HTMLElement, binding: ClickOutsideDirective) {
57
65
  const handler = typeof binding.value === 'function' ? binding.value : binding.value!.handler
66
+ const state = clickOutsideState.get(el)
67
+ if (!state) return
58
68
 
59
- el._clickOutside!.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {
69
+ state.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {
60
70
  checkIsActive(e, binding) && handler && handler(e)
61
71
  }, 0)
62
72
  }
@@ -80,39 +90,36 @@ export const ClickOutside = {
80
90
  mounted (el: HTMLElement, binding: ClickOutsideDirective, vnode: VNode) {
81
91
  const onClick = (e: Event) => directive(e as PointerEvent, el, binding)
82
92
  const onMousedown = (e: Event) => {
83
- el._clickOutside!.lastMousedownWasOutside = checkEvent(e as PointerEvent, el, binding)
93
+ const state = clickOutsideState.get(el)
94
+ if (!state) return
95
+ state.lastMousedownWasOutside = checkEvent(e as PointerEvent, el, binding)
84
96
  }
85
97
 
98
+ clickOutsideState.set(el, {
99
+ onClick,
100
+ onMousedown,
101
+ lastMousedownWasOutside: true
102
+ })
103
+
86
104
  handleShadow(el, (app: HTMLElement) => {
87
105
  app.addEventListener('click', onClick, true)
88
106
  app.addEventListener('mousedown', onMousedown, true)
89
107
  })
90
-
91
- if (!el._clickOutside) {
92
- el._clickOutside = {
93
- lastMousedownWasOutside: true
94
- }
95
- }
96
-
97
- el._clickOutside[vnode.ctx.uid] = {
98
- onClick,
99
- onMousedown
100
- }
101
108
  },
102
109
 
103
110
  unmounted (el: HTMLElement, binding: ClickOutsideDirective, vnode: VNode) {
104
- if (!el._clickOutside) return
111
+ const state = clickOutsideState.get(el)
112
+ if (!state) return
105
113
 
106
114
  handleShadow(el, (app: HTMLElement) => {
107
- if (!app || !el._clickOutside?.[vnode.ctx.uid]) return
108
-
109
- const { onClick, onMousedown } = el._clickOutside[vnode.ctx.uid]!
115
+ if (!app) return
110
116
 
117
+ const { onClick, onMousedown } = state
111
118
  app.removeEventListener('click', onClick, true)
112
119
  app.removeEventListener('mousedown', onMousedown, true)
113
120
  })
114
121
 
115
- delete el._clickOutside[vnode.ctx.uid]
122
+ clickOutsideState.delete(el)
116
123
  }
117
124
  }
118
125