@dimailn/vuetify 2.7.2-alpha22 → 2.7.2-alpha24

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 (58) hide show
  1. package/dist/vuetify.js +92 -59
  2. package/dist/vuetify.js.map +1 -1
  3. package/dist/vuetify.min.css +1 -1
  4. package/dist/vuetify.min.js +2 -2
  5. package/es5/components/VBadge/VBadge.js +17 -14
  6. package/es5/components/VBadge/VBadge.js.map +1 -1
  7. package/es5/components/VForm/VForm.js +44 -30
  8. package/es5/components/VForm/VForm.js.map +1 -1
  9. package/es5/components/VInput/VInput.js +4 -0
  10. package/es5/components/VInput/VInput.js.map +1 -1
  11. package/es5/components/VSelect/VSelectList.js +1 -1
  12. package/es5/components/VSelect/VSelectList.js.map +1 -1
  13. package/es5/framework.js +1 -1
  14. package/es5/mixins/activatable/index.js +2 -1
  15. package/es5/mixins/activatable/index.js.map +1 -1
  16. package/es5/mixins/bootable/index.js +1 -2
  17. package/es5/mixins/bootable/index.js.map +1 -1
  18. package/es5/mixins/mouse/index.js +10 -5
  19. package/es5/mixins/mouse/index.js.map +1 -1
  20. package/es5/mixins/selectable/index.js +3 -0
  21. package/es5/mixins/selectable/index.js.map +1 -1
  22. package/es5/mixins/validatable/index.js +8 -5
  23. package/es5/mixins/validatable/index.js.map +1 -1
  24. package/lib/components/VBadge/VBadge.js +14 -13
  25. package/lib/components/VBadge/VBadge.js.map +1 -1
  26. package/lib/components/VForm/VForm.js +40 -26
  27. package/lib/components/VForm/VForm.js.map +1 -1
  28. package/lib/components/VInput/VInput.js +4 -0
  29. package/lib/components/VInput/VInput.js.map +1 -1
  30. package/lib/components/VSelect/VSelectList.js +2 -1
  31. package/lib/components/VSelect/VSelectList.js.map +1 -1
  32. package/lib/framework.js +1 -1
  33. package/lib/mixins/activatable/index.js +2 -1
  34. package/lib/mixins/activatable/index.js.map +1 -1
  35. package/lib/mixins/bootable/index.js +2 -4
  36. package/lib/mixins/bootable/index.js.map +1 -1
  37. package/lib/mixins/mouse/index.js +9 -5
  38. package/lib/mixins/mouse/index.js.map +1 -1
  39. package/lib/mixins/selectable/index.js +4 -0
  40. package/lib/mixins/selectable/index.js.map +1 -1
  41. package/lib/mixins/validatable/index.js +8 -4
  42. package/lib/mixins/validatable/index.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/components/VBadge/VBadge.ts +24 -25
  45. package/src/components/VBadge/__tests__/VBadge.spec.ts +47 -30
  46. package/src/components/VBadge/__tests__/__snapshots__/VBadge.spec.ts.snap +5 -5
  47. package/src/components/VForm/VForm.ts +61 -35
  48. package/src/components/VForm/__tests__/VForm.spec.ts +100 -80
  49. package/src/components/VInput/VInput.ts +4 -0
  50. package/src/components/VSelect/VSelectList.ts +1 -0
  51. package/src/mixins/activatable/index.ts +2 -1
  52. package/src/mixins/bootable/__tests__/bootable.spec.ts +17 -11
  53. package/src/mixins/bootable/index.ts +4 -3
  54. package/src/mixins/mouse/__tests__/mouse.spec.ts +54 -40
  55. package/src/mixins/mouse/index.ts +10 -6
  56. package/src/mixins/selectable/index.ts +4 -0
  57. package/src/mixins/validatable/__tests__/validatable.spec.ts +194 -158
  58. package/src/mixins/validatable/index.ts +16 -18
@@ -7,6 +7,8 @@ exports.default = void 0;
7
7
 
8
8
  var _vue = require("vue");
9
9
 
10
+ var _helpers = require("../../util/helpers");
11
+
10
12
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
11
13
 
12
14
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -14,8 +16,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
14
16
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
15
17
 
16
18
  function mapEventName(str) {
17
- var newStr = "on" + str;
18
- return newStr.charAt(0).toUpperCase() + newStr.slice(1);
19
+ return "on".concat((0, _helpers.upperFirst)(str));
19
20
  }
20
21
 
21
22
  var _default = (0, _vue.defineComponent)({
@@ -26,8 +27,11 @@ var _default = (0, _vue.defineComponent)({
26
27
  var listeners = Object.keys(this.$attrs).filter(function (key) {
27
28
  return key.endsWith(suffix);
28
29
  }).reduce(function (acc, key) {
29
- acc[key] = {
30
- event: key.slice(0, -suffix.length)
30
+ var eventName = suffix ? key.slice(0, -suffix.length) : key;
31
+ var cleanEventName = eventName.startsWith('on') ? eventName.slice(2).toLowerCase() : eventName.toLowerCase();
32
+ acc[cleanEventName] = {
33
+ event: cleanEventName,
34
+ originalKey: key
31
35
  };
32
36
  return acc;
33
37
  }, {});
@@ -45,7 +49,8 @@ var _default = (0, _vue.defineComponent)({
45
49
 
46
50
  var _loop = function _loop(event) {
47
51
  var eventOptions = events[event];
48
- if (!_this.$attrs[mapEventName(event)]) return "continue"; // TODO somehow pull in modifiers
52
+ var attrName = eventOptions.originalKey || (event.includes(':') ? event : mapEventName(event));
53
+ if (!_this.$attrs[attrName]) return "continue"; // TODO somehow pull in modifiers
49
54
 
50
55
  var prefix = eventOptions.passive ? '&' : (eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : '');
51
56
  var key = prefix + eventOptions.event;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/mouse/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {defineComponent} from 'vue'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nfunction mapEventName(str) {\n let newStr = \"on\" + str;\n return newStr.charAt(0).toUpperCase() + newStr.slice(1);\n}\n\nexport default defineComponent({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const listeners = Object.keys(this.$attrs)\n .filter(key => key.endsWith(suffix))\n .reduce((acc, key) => {\n acc[key] = { event: key.slice(0, -suffix.length) }\n return acc\n }, {} as MouseEvents)\n\n return this.getMouseEventHandlers({\n ...listeners,\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n }, getData, eventFirst)\n },\n getMouseEventHandlers (events: MouseEvents, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n if (!this.$attrs[mapEventName(event)]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && 'touches' in e) {\n const classSeparator = ' '\n\n const eventTargetClasses = (e.currentTarget as HTMLElement)?.className.split(classSeparator)\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n // Get \"the same kind\" current hovering target by checking\n // If element has the same class of initial touch start element (which has touch event listener registered)\n const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)))\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget)\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n // TODO: VCalendar emits the calendar event as the first argument,\n // but it really should be the native event instead so modifiers can be used\n if (eventFirst) {\n this.$emit(event, e, getData(e))\n } else {\n this.$emit(event, getData(e), e)\n }\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/mouse/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineComponent } from 'vue'\nimport { upperFirst } from '../../util/helpers'\n\nexport type MouseHandler = (e: MouseEvent | TouchEvent) => any\n\nexport type MouseEvents = {\n [event: string]: {\n event: string\n passive?: boolean\n capture?: boolean\n once?: boolean\n stop?: boolean\n prevent?: boolean\n button?: number\n result?: any\n originalKey?: string\n }\n}\n\nexport type MouseEventsMap = {\n [event: string]: MouseHandler | MouseHandler[]\n}\n\nfunction mapEventName (str: string): string {\n return `on${upperFirst(str)}`\n}\n\nexport default defineComponent({\n name: 'mouse',\n\n methods: {\n getDefaultMouseEventHandlers (suffix: string, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const listeners = Object.keys(this.$attrs)\n .filter(key => key.endsWith(suffix))\n .reduce((acc, key) => {\n const eventName = suffix ? key.slice(0, -suffix.length) : key\n const cleanEventName = eventName.startsWith('on') ? eventName.slice(2).toLowerCase() : eventName.toLowerCase()\n acc[cleanEventName] = { event: cleanEventName, originalKey: key }\n return acc\n }, {} as MouseEvents)\n\n return this.getMouseEventHandlers({\n ...listeners,\n ['contextmenu' + suffix]: { event: 'contextmenu', prevent: true, result: false },\n }, getData, eventFirst)\n },\n getMouseEventHandlers (events: MouseEvents, getData: MouseHandler, eventFirst = false): MouseEventsMap {\n const on: MouseEventsMap = {}\n\n for (const event in events) {\n const eventOptions = events[event]\n\n const attrName = eventOptions.originalKey || (event.includes(':') ? event : mapEventName(event))\n if (!this.$attrs[attrName]) continue\n\n // TODO somehow pull in modifiers\n\n const prefix = eventOptions.passive ? '&' : ((eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : ''))\n const key = prefix + eventOptions.event\n\n const handler: MouseHandler = e => {\n const mouseEvent: MouseEvent = e as MouseEvent\n if (eventOptions.button === undefined || (mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button)) {\n if (eventOptions.prevent) {\n e.preventDefault()\n }\n if (eventOptions.stop) {\n e.stopPropagation()\n }\n\n // Due to TouchEvent target always returns the element that is first placed\n // Even if touch point has since moved outside the interactive area of that element\n // Ref: https://developer.mozilla.org/en-US/docs/Web/API/Touch/target\n // This block of code aims to make sure touchEvent is always dispatched from the element that is being pointed at\n if (e && 'touches' in e) {\n const classSeparator = ' '\n\n const eventTargetClasses = (e.currentTarget as HTMLElement)?.className.split(classSeparator)\n const currentTargets = document.elementsFromPoint(e.changedTouches[0].clientX, e.changedTouches[0].clientY)\n\n // Get \"the same kind\" current hovering target by checking\n // If element has the same class of initial touch start element (which has touch event listener registered)\n const currentTarget = currentTargets.find(t => t.className.split(classSeparator).some(c => eventTargetClasses.includes(c)))\n\n if (currentTarget &&\n !(e.target as HTMLElement)?.isSameNode(currentTarget)\n ) {\n currentTarget.dispatchEvent(new TouchEvent(e.type, {\n changedTouches: e.changedTouches as unknown as Touch[],\n targetTouches: e.targetTouches as unknown as Touch[],\n touches: e.touches as unknown as Touch[],\n }))\n return\n }\n }\n\n // TODO: VCalendar emits the calendar event as the first argument,\n // but it really should be the native event instead so modifiers can be used\n if (eventFirst) {\n this.$emit(event, e, getData(e))\n } else {\n this.$emit(event, getData(e), e)\n }\n }\n\n return eventOptions.result\n }\n\n if (key in on) {\n /* istanbul ignore next */\n if (Array.isArray(on[key])) {\n (on[key] as MouseHandler[]).push(handler)\n } else {\n on[key] = [on[key], handler] as MouseHandler[]\n }\n } else {\n on[key] = handler\n }\n }\n\n return on\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
@@ -49,6 +49,9 @@ var _default = (0, _mixins.default)(_VInput.default, _rippleable.default, _compa
49
49
  lazyValue: this.modelValue
50
50
  };
51
51
  },
52
+ created: function created() {
53
+ this.$_emitChangeEvent = true;
54
+ },
52
55
  computed: {
53
56
  computedColor: function computedColor() {
54
57
  if (!this.isActive) return undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/selectable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { h } from 'vue'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n props: {\n id: String,\n value: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.modelValue,\n lazyValue: this.modelValue,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n modelValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.methods.genLabel.call(this)\n\n if (!label) return label\n\n // Label shouldn't cause the input to focus\n label!.onClick = this.onClick\n\n return label\n },\n genInput (type: string, attrs: object) {\n return h('input', {\n ...Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n value: this.value,\n checked: this.isActive,\n onBlur: this.onBlur,\n onChange: this.onChange,\n onFocus: this.onFocus,\n onKeydown: this.onKeydown,\n onClick: prevent,\n ref: 'input'\n })\n },\n onClick (e: Event) {\n e.preventDefault()\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus (e: FocusEvent) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: FocusEvent) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/selectable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Components\nimport VInput from '../../components/VInput'\n\n// Mixins\nimport Rippleable from '../rippleable'\nimport Comparable from '../comparable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { h } from 'vue'\n\nexport function prevent (e: Event) {\n e.preventDefault()\n}\n\n/* @vue/component */\nexport default mixins(\n VInput,\n Rippleable,\n Comparable\n).extend({\n name: 'selectable',\n\n props: {\n id: String,\n value: null as any,\n falseValue: null as any,\n trueValue: null as any,\n multiple: {\n type: Boolean,\n default: null,\n },\n label: String,\n },\n\n data () {\n return {\n hasColor: this.modelValue,\n lazyValue: this.modelValue,\n }\n },\n\n created() {\n this.$_emitChangeEvent = true\n },\n\n computed: {\n computedColor (): string | undefined {\n if (!this.isActive) return undefined\n if (this.color) return this.color\n if (this.isDark && !this.appIsDark) return 'white'\n return 'primary'\n },\n isMultiple (): boolean {\n return this.multiple === true || (this.multiple === null && Array.isArray(this.internalValue))\n },\n isActive (): boolean {\n const value = this.value\n const input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) return false\n\n return input.some(item => this.valueComparator(item, value))\n }\n\n if (this.trueValue === undefined || this.falseValue === undefined) {\n return value\n ? this.valueComparator(value, input)\n : Boolean(input)\n }\n\n return this.valueComparator(input, this.trueValue)\n },\n isDirty (): boolean {\n return this.isActive\n },\n rippleState (): string | undefined {\n return !this.isDisabled && !this.validationState\n ? undefined\n : this.validationState\n },\n },\n\n watch: {\n modelValue (val) {\n this.lazyValue = val\n this.hasColor = val\n },\n },\n\n methods: {\n genLabel () {\n const label = VInput.methods.genLabel.call(this)\n\n if (!label) return label\n\n // Label shouldn't cause the input to focus\n label!.onClick = this.onClick\n\n return label\n },\n genInput (type: string, attrs: object) {\n return h('input', {\n ...Object.assign({\n 'aria-checked': this.isActive.toString(),\n disabled: this.isDisabled,\n id: this.computedId,\n role: type,\n type,\n }, attrs),\n value: this.value,\n checked: this.isActive,\n onBlur: this.onBlur,\n onChange: this.onChange,\n onFocus: this.onFocus,\n onKeydown: this.onKeydown,\n onClick: prevent,\n ref: 'input'\n })\n },\n onClick (e: Event) {\n e.preventDefault()\n this.onChange()\n this.$emit('click', e)\n },\n onChange () {\n if (!this.isInteractive) return\n\n const value = this.value\n let input = this.internalValue\n\n if (this.isMultiple) {\n if (!Array.isArray(input)) {\n input = []\n }\n\n const length = input.length\n\n input = input.filter((item: any) => !this.valueComparator(item, value))\n\n if (input.length === length) {\n input.push(value)\n }\n } else if (this.trueValue !== undefined && this.falseValue !== undefined) {\n input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue\n } else if (value) {\n input = this.valueComparator(input, value) ? null : value\n } else {\n input = !input\n }\n\n this.validate(true, input)\n this.internalValue = input\n this.hasColor = input\n },\n onFocus (e: FocusEvent) {\n this.isFocused = true\n this.$emit('focus', e)\n },\n onBlur (e: FocusEvent) {\n this.isFocused = false\n this.$emit('blur', e)\n },\n /** @abstract */\n onKeydown (e: Event) {},\n },\n})\n"],"sourceRoot":"","file":"index.js"}
@@ -15,17 +15,17 @@ var _helpers = require("../../util/helpers");
15
15
 
16
16
  var _console = require("../../util/console");
17
17
 
18
- var _mixins = _interopRequireDefault(require("../../util/mixins"));
18
+ var _vue = require("vue");
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
 
22
22
  function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
23
23
 
24
- var baseMixins = (0, _mixins.default)(_colorable.default, (0, _registrable.inject)('form'), _themeable.default);
25
24
  /* @vue/component */
26
-
27
- var _default2 = baseMixins.extend({
25
+ var _default2 = (0, _vue.defineComponent)({
28
26
  name: 'validatable',
27
+ extends: (0, _registrable.inject)('form'),
28
+ mixins: [_colorable.default, _themeable.default],
29
29
  props: {
30
30
  disabled: {
31
31
  type: Boolean,
@@ -71,6 +71,8 @@ var _default2 = baseMixins.extend({
71
71
  }
72
72
  },
73
73
  data: function data() {
74
+ var _a;
75
+
74
76
  return {
75
77
  errorBucket: [],
76
78
  hasColor: false,
@@ -78,7 +80,7 @@ var _default2 = baseMixins.extend({
78
80
  hasInput: false,
79
81
  isFocused: false,
80
82
  isResetting: false,
81
- lazyValue: this.value,
83
+ lazyValue: (_a = this.modelValue) !== null && _a !== void 0 ? _a : null,
82
84
  valid: false
83
85
  };
84
86
  },
@@ -127,6 +129,7 @@ var _default2 = baseMixins.extend({
127
129
  set: function set(val) {
128
130
  this.lazyValue = val;
129
131
  this.$emit('input', val);
132
+ this.$emit('update:modelValue', val);
130
133
  }
131
134
  },
132
135
  isDisabled: function isDisabled() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: {\n type: Boolean,\n default: null,\n },\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n readonly: {\n type: Boolean,\n default: null,\n },\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n validateOnBlur: Boolean,\n modelValue: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled ?? (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly ?? (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n modelValue (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeUnmount () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
1
+ {"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport { defineComponent, PropType } from 'vue'\n\n// Types\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\n/* @vue/component */\nexport default defineComponent({\n name: 'validatable',\n\n extends: RegistrableInject<'form', any>('form'),\n\n mixins: [Colorable, Themeable],\n\n props: {\n disabled: {\n type: Boolean,\n default: null,\n },\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array] as PropType<InputMessage | null>,\n default: () => [],\n },\n messages: {\n type: [String, Array] as PropType<InputMessage | null>,\n default: () => [],\n },\n readonly: {\n type: Boolean,\n default: null,\n },\n rules: {\n type: Array as PropType<InputValidationRules>,\n default: () => [],\n },\n success: Boolean,\n successMessages: {\n type: [String, Array] as PropType<InputMessage | null>,\n default: () => [],\n },\n validateOnBlur: Boolean,\n modelValue: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.modelValue ?? null,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n this.$emit('update:modelValue', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled ?? (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly ?? (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n modelValue (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeUnmount () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
@@ -1,4 +1,4 @@
1
- import { Transition, h } from 'vue'; // Styles
1
+ import { Transition, h, defineComponent, withDirectives, vShow } from 'vue'; // Styles
2
2
 
3
3
  import "../../../src/components/VBadge/VBadge.sass"; // Components
4
4
 
@@ -6,15 +6,16 @@ import VIcon from '../VIcon/VIcon'; // Mixins
6
6
 
7
7
  import Colorable from '../../mixins/colorable';
8
8
  import Themeable from '../../mixins/themeable';
9
- import Toggleable from '../../mixins/toggleable';
9
+ import { factory as ToggleableFactory } from '../../mixins/toggleable';
10
10
  import Transitionable from '../../mixins/transitionable';
11
11
  import { factory as PositionableFactory } from '../../mixins/positionable';
12
12
  import mergeData from '../../util/mergeData'; // Utilities
13
13
 
14
- import mixins from '../../util/mixins';
15
14
  import { convertToUnit, getSlot } from '../../util/helpers';
16
- export default mixins(Colorable, PositionableFactory(['left', 'bottom']), Themeable, Toggleable, Transitionable).extend({
15
+ const Toggleable = ToggleableFactory('modelValue', 'update:modelValue');
16
+ export default defineComponent({
17
17
  name: 'v-badge',
18
+ mixins: [Colorable, PositionableFactory(['left', 'bottom']), Themeable, Toggleable, Transitionable],
18
19
  props: {
19
20
  avatar: Boolean,
20
21
  bordered: Boolean,
@@ -40,7 +41,7 @@ export default mixins(Colorable, PositionableFactory(['left', 'bottom']), Themea
40
41
  type: String,
41
42
  default: 'scale-rotate-transition'
42
43
  },
43
- value: {
44
+ modelValue: {
44
45
  default: true
45
46
  }
46
47
  },
@@ -129,19 +130,17 @@ export default mixins(Colorable, PositionableFactory(['left', 'bottom']), Themea
129
130
  'aria-label': label,
130
131
  'aria-live': this.$attrs['aria-live'] || 'polite',
131
132
  title: this.$attrs.title,
132
- role: this.$attrs.role || 'status',
133
- directives: [{
134
- name: 'show',
135
- value: this.isActive
136
- }]
133
+ role: this.$attrs.role || 'status'
137
134
  });
138
- const badge = h('span', data, [this.genBadgeContent()]);
135
+ const badge = withDirectives(h('span', data, [this.genBadgeContent()]), [[vShow, this.isActive]]);
139
136
  if (!this.transition) return badge;
140
137
  return h(Transition, {
141
138
  name: this.transition,
142
139
  origin: this.origin,
143
140
  mode: this.mode
144
- }, [badge]);
141
+ }, {
142
+ default: () => [badge]
143
+ });
145
144
  },
146
145
 
147
146
  genBadgeContent() {
@@ -150,7 +149,9 @@ export default mixins(Colorable, PositionableFactory(['left', 'bottom']), Themea
150
149
  const slot = getSlot(this, 'badge');
151
150
  if (slot) return slot;
152
151
  if (this.content) return String(this.content);
153
- if (this.icon) return h(VIcon, this.icon);
152
+ if (this.icon) return h(VIcon, {
153
+ icon: this.icon
154
+ });
154
155
  return undefined;
155
156
  },
156
157
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VBadge/VBadge.ts"],"names":[],"mappings":"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","sourcesContent":["import {Transition, h} from 'vue'\n// Styles\nimport './VBadge.sass'\n\n// Components\nimport VIcon from '../VIcon/VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport Toggleable from '../../mixins/toggleable'\nimport Transitionable from '../../mixins/transitionable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport mergeData from '../../util/mergeData'\n// Utilities\nimport mixins from '../../util/mixins'\nimport {\n convertToUnit,\n getSlot,\n} from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n PositionableFactory(['left', 'bottom']),\n Themeable,\n Toggleable,\n Transitionable,\n/* @vue/component */\n).extend({\n name: 'v-badge',\n\n props: {\n avatar: Boolean,\n bordered: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n content: { required: false },\n dot: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n icon: String,\n inline: Boolean,\n offsetX: [Number, String],\n offsetY: [Number, String],\n overlap: Boolean,\n tile: Boolean,\n transition: {\n type: String,\n default: 'scale-rotate-transition',\n },\n value: { default: true },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-badge--avatar': this.avatar,\n 'v-badge--bordered': this.bordered,\n 'v-badge--bottom': this.bottom,\n 'v-badge--dot': this.dot,\n 'v-badge--icon': this.icon != null,\n 'v-badge--inline': this.inline,\n 'v-badge--left': this.left,\n 'v-badge--overlap': this.overlap,\n 'v-badge--tile': this.tile,\n ...this.themeClasses,\n }\n },\n computedBottom (): string {\n return this.bottom ? 'auto' : this.computedYOffset\n },\n computedLeft (): string {\n if (this.isRtl) {\n return this.left ? this.computedXOffset : 'auto'\n }\n\n return this.left ? 'auto' : this.computedXOffset\n },\n computedRight (): string {\n if (this.isRtl) {\n return this.left ? 'auto' : this.computedXOffset\n }\n\n return !this.left ? 'auto' : this.computedXOffset\n },\n computedTop (): string {\n return this.bottom ? this.computedYOffset : 'auto'\n },\n computedXOffset (): string {\n return this.calcPosition(this.offsetX)\n },\n computedYOffset (): string {\n return this.calcPosition(this.offsetY)\n },\n isRtl (): boolean {\n return this.$vuetify.rtl\n },\n // Default fallback if offsetX\n // or offsetY are undefined.\n offset (): number {\n if (this.overlap) return this.dot ? 8 : 12\n return this.dot ? 2 : 4\n },\n styles (): object {\n if (this.inline) return {}\n\n return {\n bottom: this.computedBottom,\n left: this.computedLeft,\n right: this.computedRight,\n top: this.computedTop,\n }\n },\n },\n\n methods: {\n calcPosition (offset: string | number): string {\n return `calc(100% - ${convertToUnit(offset || this.offset)})`\n },\n genBadge () {\n const lang = this.$vuetify.lang\n const label = this.$attrs['aria-label'] || lang.t(this.label)\n\n const data = this.setBackgroundColor(this.color, {\n class: 'v-badge__badge',\n style: this.styles,\n 'aria-atomic': this.$attrs['aria-atomic'] || 'true',\n 'aria-label': label,\n 'aria-live': this.$attrs['aria-live'] || 'polite',\n title: this.$attrs.title,\n role: this.$attrs.role || 'status',\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n })\n\n const badge = h('span', data, [this.genBadgeContent()])\n\n if (!this.transition) return badge\n\n return h(Transition, {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n }, [badge])\n },\n genBadgeContent () {\n // Dot prop shows no content\n if (this.dot) return undefined\n\n const slot = getSlot(this, 'badge')\n\n if (slot) return slot\n if (this.content) return String(this.content)\n if (this.icon) return h(VIcon, this.icon)\n\n return undefined\n },\n genBadgeWrapper () {\n return h('span', {\n class: 'v-badge__wrapper',\n }, [this.genBadge()])\n },\n },\n\n render (): VNode {\n const badge = [this.genBadgeWrapper()]\n const children = [getSlot(this)]\n const {\n 'aria-atomic': _x,\n 'aria-label': _y,\n 'aria-live': _z,\n role,\n title,\n ...attrs\n } = this.$attrs\n\n if (this.inline && this.left) children.unshift(badge)\n else children.push(badge)\n\n return h('span', mergeData({\n class: ['v-badge', this.classes]\n }, attrs)\n , children)\n },\n})\n"],"sourceRoot":"","file":"VBadge.js"}
1
+ {"version":3,"sources":["../../../src/components/VBadge/VBadge.ts"],"names":[],"mappings":"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","sourcesContent":["import { Transition, h, defineComponent, VNode, withDirectives, vShow } from 'vue'\n// Styles\nimport './VBadge.sass'\n\n// Components\nimport VIcon from '../VIcon/VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Transitionable from '../../mixins/transitionable'\nimport { factory as PositionableFactory } from '../../mixins/positionable'\nimport mergeData from '../../util/mergeData'\n// Utilities\nimport {\n convertToUnit,\n getSlot,\n} from '../../util/helpers'\n\nconst Toggleable = ToggleableFactory('modelValue', 'update:modelValue')\n\nexport default defineComponent({\n name: 'v-badge',\n\n mixins: [\n Colorable,\n PositionableFactory(['left', 'bottom']),\n Themeable,\n Toggleable,\n Transitionable,\n ],\n\n props: {\n avatar: Boolean,\n bordered: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n content: { required: false },\n dot: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n icon: String,\n inline: Boolean,\n offsetX: [Number, String],\n offsetY: [Number, String],\n overlap: Boolean,\n tile: Boolean,\n transition: {\n type: String,\n default: 'scale-rotate-transition',\n },\n modelValue: { default: true },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-badge--avatar': this.avatar,\n 'v-badge--bordered': this.bordered,\n 'v-badge--bottom': this.bottom,\n 'v-badge--dot': this.dot,\n 'v-badge--icon': this.icon != null,\n 'v-badge--inline': this.inline,\n 'v-badge--left': this.left,\n 'v-badge--overlap': this.overlap,\n 'v-badge--tile': this.tile,\n ...this.themeClasses,\n }\n },\n computedBottom (): string {\n return this.bottom ? 'auto' : this.computedYOffset\n },\n computedLeft (): string {\n if (this.isRtl) {\n return this.left ? this.computedXOffset : 'auto'\n }\n\n return this.left ? 'auto' : this.computedXOffset\n },\n computedRight (): string {\n if (this.isRtl) {\n return this.left ? 'auto' : this.computedXOffset\n }\n\n return !this.left ? 'auto' : this.computedXOffset\n },\n computedTop (): string {\n return this.bottom ? this.computedYOffset : 'auto'\n },\n computedXOffset (): string {\n return this.calcPosition(this.offsetX)\n },\n computedYOffset (): string {\n return this.calcPosition(this.offsetY)\n },\n isRtl (): boolean {\n return this.$vuetify.rtl\n },\n // Default fallback if offsetX\n // or offsetY are undefined.\n offset (): number {\n if (this.overlap) return this.dot ? 8 : 12\n return this.dot ? 2 : 4\n },\n styles (): object {\n if (this.inline) return {}\n\n return {\n bottom: this.computedBottom,\n left: this.computedLeft,\n right: this.computedRight,\n top: this.computedTop,\n }\n },\n },\n\n methods: {\n calcPosition (offset: string | number): string {\n return `calc(100% - ${convertToUnit(offset || this.offset)})`\n },\n genBadge () {\n const lang = this.$vuetify.lang\n const label = this.$attrs['aria-label'] || lang.t(this.label)\n\n const data = this.setBackgroundColor(this.color, {\n class: 'v-badge__badge',\n style: this.styles,\n 'aria-atomic': this.$attrs['aria-atomic'] || 'true',\n 'aria-label': label,\n 'aria-live': this.$attrs['aria-live'] || 'polite',\n title: this.$attrs.title,\n role: this.$attrs.role || 'status',\n })\n\n const badge = withDirectives(\n h('span', data, [this.genBadgeContent()]),\n [[vShow, this.isActive]]\n )\n\n if (!this.transition) return badge\n\n return h(Transition, {\n name: this.transition,\n origin: this.origin,\n mode: this.mode,\n }, {\n default: () => [badge],\n })\n },\n genBadgeContent () {\n // Dot prop shows no content\n if (this.dot) return undefined\n\n const slot = getSlot(this, 'badge')\n\n if (slot) return slot\n if (this.content) return String(this.content)\n if (this.icon) return h(VIcon, { icon: this.icon })\n\n return undefined\n },\n genBadgeWrapper () {\n return h('span', {\n class: 'v-badge__wrapper',\n }, [this.genBadge()])\n },\n },\n\n render (): VNode {\n const badge = [this.genBadgeWrapper()]\n const children = [getSlot(this)]\n const {\n 'aria-atomic': _x,\n 'aria-label': _y,\n 'aria-live': _z,\n role,\n title,\n ...attrs\n } = this.$attrs\n\n if (this.inline && this.left) children.unshift(badge)\n else children.push(badge)\n\n return h('span', mergeData({\n class: ['v-badge', this.classes],\n }, attrs), children)\n },\n})\n"],"sourceRoot":"","file":"VBadge.js"}
@@ -2,7 +2,8 @@ import { h } from 'vue'; // Mixins
2
2
 
3
3
  import mixins from '../../util/mixins';
4
4
  import BindsAttrs from '../../mixins/binds-attrs';
5
- import { provide as RegistrableProvide } from '../../mixins/registrable';
5
+ import { provide as RegistrableProvide } from '../../mixins/registrable'; // Helpers
6
+
6
7
  import { getSlot } from '../../util/helpers';
7
8
  /* @vue/component */
8
9
 
@@ -34,6 +35,7 @@ export default mixins(BindsAttrs, RegistrableProvide('form')
34
35
  handler(val) {
35
36
  const errors = Object.values(val).includes(true);
36
37
  this.$emit('input', !errors);
38
+ this.$emit('update:modelValue', !errors);
37
39
  },
38
40
 
39
41
  deep: true,
@@ -41,31 +43,42 @@ export default mixins(BindsAttrs, RegistrableProvide('form')
41
43
  }
42
44
  },
43
45
  methods: {
46
+ getInputUid(input) {
47
+ return input.$.uid;
48
+ },
49
+
44
50
  watchInput(input) {
45
- const watcher = input => {
46
- return input.$watch('hasError', val => {
47
- this.errorBag[input.$.uid] = val;
48
- }, {
49
- immediate: true
50
- });
51
+ const inputId = this.getInputUid(input);
52
+
53
+ const createErrorWatcher = inputComponent => {
54
+ if (typeof inputComponent.$watch === 'function') {
55
+ return inputComponent.$watch('hasError', hasError => {
56
+ this.errorBag[inputId] = hasError;
57
+ }, {
58
+ immediate: true
59
+ });
60
+ } else {
61
+ // Fallback для Vue 3
62
+ return () => {};
63
+ }
51
64
  };
52
65
 
53
66
  const watchers = {
54
- _uid: input.$.uid,
67
+ _uid: inputId,
55
68
  valid: () => {},
56
69
  shouldValidate: () => {}
57
70
  };
58
71
 
59
72
  if (this.lazyValidation) {
60
- // Only start watching inputs if we need to
61
- watchers.shouldValidate = input.$watch('shouldValidate', val => {
62
- if (!val) return; // Only watch if we're not already doing it
63
-
64
- if (this.errorBag.hasOwnProperty(input.$.uid)) return;
65
- watchers.valid = watcher(input);
66
- });
73
+ if (typeof input.$watch === 'function') {
74
+ watchers.shouldValidate = input.$watch('shouldValidate', shouldValidate => {
75
+ if (!shouldValidate) return;
76
+ if (this.errorBag.hasOwnProperty(inputId)) return;
77
+ watchers.valid = createErrorWatcher(input);
78
+ });
79
+ }
67
80
  } else {
68
- watchers.valid = watcher(input);
81
+ watchers.valid = createErrorWatcher(input);
69
82
  }
70
83
 
71
84
  return watchers;
@@ -103,18 +116,19 @@ export default mixins(BindsAttrs, RegistrableProvide('form')
103
116
  },
104
117
 
105
118
  unregister(input) {
106
- const found = this.inputs.find(i => i.$.uid === input.$.uid);
107
- if (!found) return;
108
- const unwatch = this.watchers.find(i => i._uid === found.$.uid);
109
-
110
- if (unwatch) {
111
- unwatch.valid();
112
- unwatch.shouldValidate();
119
+ const inputId = this.getInputUid(input);
120
+ const foundInput = this.inputs.find(inputComponent => this.getInputUid(inputComponent) === inputId);
121
+ if (!foundInput) return;
122
+ const inputWatcher = this.watchers.find(watcher => watcher._uid === inputId);
123
+
124
+ if (inputWatcher) {
125
+ inputWatcher.valid();
126
+ inputWatcher.shouldValidate();
113
127
  }
114
128
 
115
- this.watchers = this.watchers.filter(i => i._uid !== found.$.uid);
116
- this.inputs = this.inputs.filter(i => i.$.uid !== found.$.uid);
117
- delete this.errorBag[found.$.uid];
129
+ this.watchers = this.watchers.filter(watcher => watcher._uid !== inputId);
130
+ this.inputs = this.inputs.filter(inputComponent => this.getInputUid(inputComponent) !== inputId);
131
+ delete this.errorBag[inputId];
118
132
  }
119
133
 
120
134
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/VForm/VForm.ts"],"names":[],"mappings":"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","sourcesContent":["import {h} from 'vue'\n// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { VNode } from 'vue'\nimport { getSlot } from '../../util/helpers'\n\ntype ErrorBag = Record<number, boolean>\ntype VInputInstance = InstanceType<typeof VInput>\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (val) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n watchInput (input: any): Watchers {\n const watcher = (input: any): (() => void) => {\n return input.$watch('hasError', (val: boolean) => {\n this.errorBag[input.$.uid] = val\n }, { immediate: true })\n }\n\n const watchers: Watchers = {\n _uid: input.$.uid,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n // Only start watching inputs if we need to\n watchers.shouldValidate = input.$watch('shouldValidate', (val: boolean) => {\n if (!val) return\n\n // Only watch if we're not already doing it\n if (this.errorBag.hasOwnProperty(input.$.uid)) return\n\n watchers.valid = watcher(input)\n })\n } else {\n watchers.valid = watcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (): boolean {\n return this.inputs.filter(input => !input.validate(true)).length === 0\n },\n /** @public */\n reset (): void {\n this.inputs.forEach(input => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag () {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation () {\n this.inputs.forEach(input => input.resetValidation())\n this.resetErrorBag()\n },\n register (input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n unregister (input: VInputInstance) {\n const found = this.inputs.find(i => i.$.uid === input.$.uid)\n\n if (!found) return\n\n const unwatch = this.watchers.find(i => i._uid === found.$.uid)\n if (unwatch) {\n unwatch.valid()\n unwatch.shouldValidate()\n }\n\n this.watchers = this.watchers.filter(i => i._uid !== found.$.uid)\n this.inputs = this.inputs.filter(i => i.$.uid !== found.$.uid)\n delete this.errorBag[found.$.uid]\n },\n },\n\n render (): VNode {\n return h('form', {\n class: 'v-form',\n novalidate: true,\n ...this.attrs$,\n onSubmit: (e: Event) => this.$emit('submit', e),\n }, getSlot(this))\n },\n})\n"],"sourceRoot":"","file":"VForm.js"}
1
+ {"version":3,"sources":["../../../src/components/VForm/VForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { h, VNode } from 'vue'\n// Components\nimport VInput from '../VInput/VInput'\n\n// Mixins\nimport mixins from '../../util/mixins'\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport { provide as RegistrableProvide } from '../../mixins/registrable'\n\n// Helpers\nimport { getSlot } from '../../util/helpers'\n\ntype ErrorBag = Record<number, boolean>\ntype VInputInstance = InstanceType<typeof VInput>\ntype Watchers = {\n _uid: number\n valid: () => void\n shouldValidate: () => void\n}\n\ninterface VFormContext {\n inputs: VInputInstance[]\n watchers: Watchers[]\n errorBag: ErrorBag\n lazyValidation: boolean\n $emit: (event: string, ...args: any[]) => void\n getInputUid: (input: VInputInstance) => number\n watchInput: (input: VInputInstance) => Watchers\n resetErrorBag: () => void\n}\n\n/* @vue/component */\nexport default mixins(\n BindsAttrs,\n RegistrableProvide('form')\n /* @vue/component */\n).extend({\n name: 'v-form',\n\n provide (): object {\n return { form: this }\n },\n\n inheritAttrs: false,\n\n props: {\n disabled: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n value: Boolean,\n },\n\n data: () => ({\n inputs: [] as VInputInstance[],\n watchers: [] as Watchers[],\n errorBag: {} as ErrorBag,\n }),\n\n watch: {\n errorBag: {\n handler (this: VFormContext, val: ErrorBag) {\n const errors = Object.values(val).includes(true)\n\n this.$emit('input', !errors)\n this.$emit('update:modelValue', !errors)\n },\n deep: true,\n immediate: true,\n },\n },\n\n methods: {\n getInputUid (input: VInputInstance): number {\n return input.$.uid\n },\n\n watchInput (this: VFormContext, input: VInputInstance): Watchers {\n const inputId = this.getInputUid(input)\n\n const createErrorWatcher = (inputComponent: VInputInstance): (() => void) => {\n if (typeof inputComponent.$watch === 'function') {\n return inputComponent.$watch('hasError', (hasError: boolean) => {\n this.errorBag[inputId] = hasError\n }, { immediate: true })\n } else {\n // Fallback для Vue 3\n return () => {}\n }\n }\n\n const watchers: Watchers = {\n _uid: inputId,\n valid: () => {},\n shouldValidate: () => {},\n }\n\n if (this.lazyValidation) {\n if (typeof input.$watch === 'function') {\n watchers.shouldValidate = input.$watch('shouldValidate', (shouldValidate: boolean) => {\n if (!shouldValidate) return\n\n if (this.errorBag.hasOwnProperty(inputId)) return\n\n watchers.valid = createErrorWatcher(input)\n })\n }\n } else {\n watchers.valid = createErrorWatcher(input)\n }\n\n return watchers\n },\n /** @public */\n validate (this: VFormContext): boolean {\n return this.inputs.filter((input: VInputInstance) => !input.validate(true)).length === 0\n },\n /** @public */\n reset (this: VFormContext): void {\n this.inputs.forEach((input: VInputInstance) => input.reset())\n this.resetErrorBag()\n },\n resetErrorBag (this: VFormContext) {\n if (this.lazyValidation) {\n // Account for timeout in validatable\n setTimeout(() => {\n this.errorBag = {}\n }, 0)\n }\n },\n /** @public */\n resetValidation (this: VFormContext) {\n this.inputs.forEach((input: VInputInstance) => input.resetValidation())\n this.resetErrorBag()\n },\n\n register (this: VFormContext, input: VInputInstance) {\n this.inputs.push(input)\n this.watchers.push(this.watchInput(input))\n },\n\n unregister (this: VFormContext, input: VInputInstance) {\n const inputId = this.getInputUid(input)\n const foundInput = this.inputs.find((inputComponent: VInputInstance) => this.getInputUid(inputComponent) === inputId)\n\n if (!foundInput) return\n\n const inputWatcher = this.watchers.find((watcher: Watchers) => watcher._uid === inputId)\n if (inputWatcher) {\n inputWatcher.valid()\n inputWatcher.shouldValidate()\n }\n\n this.watchers = this.watchers.filter((watcher: Watchers) => watcher._uid !== inputId)\n this.inputs = this.inputs.filter((inputComponent: VInputInstance) => this.getInputUid(inputComponent) !== inputId)\n\n delete this.errorBag[inputId]\n },\n },\n\n render (): VNode {\n return h('form', {\n class: 'v-form',\n novalidate: true,\n ...this.attrs$,\n onSubmit: (e: Event) => this.$emit('submit', e),\n }, getSlot(this))\n },\n})\n"],"sourceRoot":"","file":"VForm.js"}
@@ -91,6 +91,10 @@ export default baseMixins.extend({
91
91
  set(val) {
92
92
  this.lazyValue = val;
93
93
  this.$emit(this.$_modelEvent, val);
94
+
95
+ if ('$_emitChangeEvent' in this) {
96
+ this.$emit('change', val);
97
+ }
94
98
  }
95
99
 
96
100
  },