vuetify eingebunden + erster Versuch Combobox

This commit is contained in:
2019-04-17 15:58:15 +02:00
parent 24642ca1a8
commit 56f4a3f940
1846 changed files with 219701 additions and 53848 deletions
+65
View File
@@ -0,0 +1,65 @@
import { factory as PositionableFactory } from './positionable';
// Util
import mixins from '../util/mixins';
export default function applicationable(value) {
var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
/* @vue/component */
return mixins(PositionableFactory(['absolute', 'fixed'])).extend({
name: 'applicationable',
props: {
app: Boolean
},
computed: {
applicationProperty: function applicationProperty() {
return value;
}
},
watch: {
// If previous value was app
// reset the provided prop
app: function app(x, prev) {
prev ? this.removeApplication(true) : this.callUpdate();
},
applicationProperty: function applicationProperty(newVal, oldVal) {
this.$vuetify.application.unbind(this._uid, oldVal);
}
},
activated: function activated() {
this.callUpdate();
},
created: function created() {
for (var i = 0, length = events.length; i < length; i++) {
this.$watch(events[i], this.callUpdate);
}
this.callUpdate();
},
mounted: function mounted() {
this.callUpdate();
},
deactivated: function deactivated() {
this.removeApplication();
},
destroyed: function destroyed() {
this.removeApplication();
},
methods: {
callUpdate: function callUpdate() {
if (!this.app) return;
this.$vuetify.application.bind(this._uid, this.applicationProperty, this.updateApplication());
},
removeApplication: function removeApplication() {
var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!force && !this.app) return;
this.$vuetify.application.unbind(this._uid, this.applicationProperty);
},
updateApplication: function updateApplication() {
return 0;
}
}
});
}
//# sourceMappingURL=applicationable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/applicationable.ts"],"names":[],"mappings":"AAAA,SAAS,WAAW,mBAApB,QAA+C,gBAA/C;AAGA;AACA,OAAO,MAAP,MAAmB,gBAAnB;AAEA,eAAc,SAAU,eAAV,CAA2B,KAA3B,EAAmE;AAAA,QAArB,MAAqB,uEAAF,EAAE;;AAC/E;AACA,WAAO,OAAO,oBAAoB,CAAC,UAAD,EAAa,OAAb,CAApB,CAAP,EAAmD,MAAnD,CAA0D;AAC/D,cAAM,iBADyD;AAG/D,eAAO;AACL,iBAAK;AADA,SAHwD;AAO/D,kBAAU;AACR,+BADQ,iCACW;AACjB,uBAAO,KAAP;AACD;AAHO,SAPqD;AAa/D,eAAO;AACL;AACA;AACA,eAHK,eAGA,CAHA,EAGY,IAHZ,EAGyB;AAC5B,uBACI,KAAK,iBAAL,CAAuB,IAAvB,CADJ,GAEI,KAAK,UAAL,EAFJ;AAGD,aAPI;AAQL,+BARK,+BAQgB,MARhB,EAQwB,MARxB,EAQ8B;AACjC,qBAAK,QAAL,CAAc,WAAd,CAA0B,MAA1B,CAAiC,KAAK,IAAtC,EAA4C,MAA5C;AACD;AAVI,SAbwD;AA0B/D,iBA1B+D,uBA0BtD;AACP,iBAAK,UAAL;AACD,SA5B8D;AA8B/D,eA9B+D,qBA8BxD;AACL,iBAAK,IAAI,IAAI,CAAR,EAAW,SAAS,OAAO,MAAhC,EAAwC,IAAI,MAA5C,EAAoD,GAApD,EAAyD;AACvD,qBAAK,MAAL,CAAY,OAAO,CAAP,CAAZ,EAAuB,KAAK,UAA5B;AACD;AACD,iBAAK,UAAL;AACD,SAnC8D;AAqC/D,eArC+D,qBAqCxD;AACL,iBAAK,UAAL;AACD,SAvC8D;AAyC/D,mBAzC+D,yBAyCpD;AACT,iBAAK,iBAAL;AACD,SA3C8D;AA6C/D,iBA7C+D,uBA6CtD;AACP,iBAAK,iBAAL;AACD,SA/C8D;;AAiD/D,iBAAS;AACP,sBADO,wBACG;AACR,oBAAI,CAAC,KAAK,GAAV,EAAe;AAEf,qBAAK,QAAL,CAAc,WAAd,CAA0B,IAA1B,CACE,KAAK,IADP,EAEE,KAAK,mBAFP,EAGE,KAAK,iBAAL,EAHF;AAKD,aATM;AAUP,6BAVO,+BAUyB;AAAA,oBAAb,KAAa,uEAAL,KAAK;;AAC9B,oBAAI,CAAC,KAAD,IAAU,CAAC,KAAK,GAApB,EAAyB;AAEzB,qBAAK,QAAL,CAAc,WAAd,CAA0B,MAA1B,CACE,KAAK,IADP,EAEE,KAAK,mBAFP;AAID,aAjBM;;AAkBP,+BAAmB;AAAA,uBAAM,CAAN;AAAA;AAlBZ;AAjDsD,KAA1D,CAAP;AAsED","sourcesContent":["import { factory as PositionableFactory } from './positionable'\nimport { TargetProp } from '../components/Vuetify/mixins/application'\n\n// Util\nimport mixins from '../util/mixins'\n\nexport default function applicationable (value: TargetProp, events: string[] = []) {\n /* @vue/component */\n return mixins(PositionableFactory(['absolute', 'fixed'])).extend({\n name: 'applicationable',\n\n props: {\n app: Boolean\n },\n\n computed: {\n applicationProperty (): TargetProp {\n return value\n }\n },\n\n watch: {\n // If previous value was app\n // reset the provided prop\n app (x: boolean, prev: boolean) {\n prev\n ? this.removeApplication(true)\n : this.callUpdate()\n },\n applicationProperty (newVal, oldVal) {\n this.$vuetify.application.unbind(this._uid, oldVal)\n }\n },\n\n activated () {\n this.callUpdate()\n },\n\n created () {\n for (let i = 0, length = events.length; i < length; i++) {\n this.$watch(events[i], this.callUpdate)\n }\n this.callUpdate()\n },\n\n mounted () {\n this.callUpdate()\n },\n\n deactivated () {\n this.removeApplication()\n },\n\n destroyed () {\n this.removeApplication()\n },\n\n methods: {\n callUpdate () {\n if (!this.app) return\n\n this.$vuetify.application.bind(\n this._uid,\n this.applicationProperty,\n this.updateApplication()\n )\n },\n removeApplication (force = false) {\n if (!force && !this.app) return\n\n this.$vuetify.application.unbind(\n this._uid,\n this.applicationProperty\n )\n },\n updateApplication: () => 0\n }\n })\n}\n"],"sourceRoot":""}
+37
View File
@@ -0,0 +1,37 @@
import Vue from 'vue';
/**
* Bootable
* @mixin
*
* Used to add lazy content functionality to components
* Looks for change in "isActive" to automatically boot
* Otherwise can be set manually
*/
/* @vue/component */
export default Vue.extend().extend({
name: 'bootable',
props: {
lazy: Boolean
},
data: function data() {
return {
isBooted: false
};
},
computed: {
hasContent: function hasContent() {
return this.isBooted || !this.lazy || this.isActive;
}
},
watch: {
isActive: function isActive() {
this.isBooted = true;
}
},
methods: {
showLazyContent: function showLazyContent(content) {
return this.hasContent ? content : undefined;
}
}
});
//# sourceMappingURL=bootable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/bootable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAA2B,KAA3B;AAMA;;;;;;;;AAQA;AACA,eAAe,IAAI,MAAJ,GAA+B,MAA/B,CAAsC;AACnD,UAAM,UAD6C;AAGnD,WAAO;AACL,cAAM;AADD,KAH4C;AAOnD,UAAM;AAAA,eAAO;AACX,sBAAU;AADC,SAAP;AAAA,KAP6C;AAWnD,cAAU;AACR,kBADQ,wBACE;AACR,mBAAO,KAAK,QAAL,IAAiB,CAAC,KAAK,IAAvB,IAA+B,KAAK,QAA3C;AACD;AAHO,KAXyC;AAiBnD,WAAO;AACL,gBADK,sBACG;AACN,iBAAK,QAAL,GAAgB,IAAhB;AACD;AAHI,KAjB4C;AAuBnD,aAAS;AACP,uBADO,2BACU,OADV,EAC2B;AAChC,mBAAO,KAAK,UAAL,GAAkB,OAAlB,GAA4B,SAAnC;AACD;AAHM;AAvB0C,CAAtC,CAAf","sourcesContent":["import Vue, { VNode } from 'vue'\n\ninterface Toggleable extends Vue {\n isActive?: boolean\n}\n\n/**\n * Bootable\n * @mixin\n *\n * Used to add lazy content functionality to components\n * Looks for change in \"isActive\" to automatically boot\n * Otherwise can be set manually\n */\n/* @vue/component */\nexport default Vue.extend<Vue & Toggleable>().extend({\n name: 'bootable',\n\n props: {\n lazy: Boolean\n },\n\n data: () => ({\n isBooted: false\n }),\n\n computed: {\n hasContent (): boolean | undefined {\n return this.isBooted || !this.lazy || this.isActive\n }\n },\n\n watch: {\n isActive () {\n this.isBooted = true\n }\n },\n\n methods: {\n showLazyContent (content?: VNode[]): VNode[] | undefined {\n return this.hasContent ? content : undefined\n }\n }\n})\n"],"sourceRoot":""}
+24
View File
@@ -0,0 +1,24 @@
// Extensions
import { BaseItemGroup } from '../components/VItemGroup/VItemGroup';
/* @vue/component */
export default BaseItemGroup.extend({
name: 'button-group',
provide: function provide() {
return {
btnToggle: this
};
},
props: {
activeClass: {
type: String,
default: 'v-btn--active'
}
},
computed: {
classes: function classes() {
return BaseItemGroup.options.computed.classes.call(this);
}
}
});
//# sourceMappingURL=button-group.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/button-group.ts"],"names":[],"mappings":";AACA,SAAS,aAAT,QAA8B,qCAA9B;AAEA;AACA,eAAe,cAAc,MAAd,CAAqB;AAClC,UAAM,cAD4B;AAGlC,WAHkC,qBAG3B;AACL,eAAO;AACL,uBAAW;AADN,SAAP;AAGD,KAPiC;;AASlC,WAAO;AACL,qBAAa;AACX,kBAAM,MADK;AAEX,qBAAS;AAFE;AADR,KAT2B;AAgBlC,cAAU;AACR,eADQ,qBACD;AACL,mBAAO,cAAc,OAAd,CAAsB,QAAtB,CAA+B,OAA/B,CAAuC,IAAvC,CAA4C,IAA5C,CAAP;AACD;AAHO;AAhBwB,CAArB,CAAf","sourcesContent":["// Extensions\nimport { BaseItemGroup } from '../components/VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'button-group',\n\n provide (): object {\n return {\n btnToggle: this\n }\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-btn--active'\n }\n },\n\n computed: {\n classes (): object {\n return BaseItemGroup.options.computed.classes.call(this)\n }\n }\n})\n"],"sourceRoot":""}
+53
View File
@@ -0,0 +1,53 @@
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
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; }
import Vue from 'vue';
function isCssColor(color) {
return !!color && !!color.match(/^(#|(rgb|hsl)a?\()/);
}
export default Vue.extend({
name: 'colorable',
props: {
color: String
},
methods: {
setBackgroundColor: function setBackgroundColor(color) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (isCssColor(color)) {
data.style = _extends({}, data.style, {
'background-color': '' + color,
'border-color': '' + color
});
} else if (color) {
data.class = _extends({}, data.class, _defineProperty({}, color, true));
}
return data;
},
setTextColor: function setTextColor(color) {
var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
if (isCssColor(color)) {
data.style = _extends({}, data.style, {
'color': '' + color,
'caret-color': '' + color
});
} else if (color) {
var _color$toString$trim$ = color.toString().trim().split(' ', 2),
_color$toString$trim$2 = _slicedToArray(_color$toString$trim$, 2),
colorName = _color$toString$trim$2[0],
colorModifier = _color$toString$trim$2[1];
data.class = _extends({}, data.class, _defineProperty({}, colorName + '--text', true));
if (colorModifier) {
data.class['text--' + colorModifier] = true;
}
}
return data;
}
}
});
//# sourceMappingURL=colorable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/colorable.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAGA,SAAS,UAAT,CAAqB,KAArB,EAA2C;AACzC,WAAO,CAAC,CAAC,KAAF,IAAW,CAAC,CAAC,MAAM,KAAN,CAAY,oBAAZ,CAApB;AACD;AAED,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,WADkB;AAGxB,WAAO;AACL,eAAO;AADF,KAHiB;AAOxB,aAAS;AACP,0BADO,8BACa,KADb,EACyD;AAAA,gBAApB,IAAoB,uEAAF,EAAE;;AAC9D,gBAAI,WAAW,KAAX,CAAJ,EAAuB;AACrB,qBAAK,KAAL,gBACK,KAAK,KADV;AAEE,6CAAuB,KAFzB;AAGE,yCAAmB;AAHrB;AAKD,aAND,MAMO,IAAI,KAAJ,EAAW;AAChB,qBAAK,KAAL,gBACK,KAAK,KADV,sBAEG,KAFH,EAEW,IAFX;AAID;AAED,mBAAO,IAAP;AACD,SAhBM;AAkBP,oBAlBO,wBAkBO,KAlBP,EAkBmD;AAAA,gBAApB,IAAoB,uEAAF,EAAE;;AACxD,gBAAI,WAAW,KAAX,CAAJ,EAAuB;AACrB,qBAAK,KAAL,gBACK,KAAK,KADV;AAEE,kCAAY,KAFd;AAGE,wCAAkB;AAHpB;AAKD,aAND,MAMO,IAAI,KAAJ,EAAW;AAAA,4CACmB,MAAM,QAAN,GAAiB,IAAjB,GAAwB,KAAxB,CAA8B,GAA9B,EAAmC,CAAnC,CADnB;AAAA;AAAA,oBACT,SADS;AAAA,oBACE,aADF;;AAEhB,qBAAK,KAAL,gBACK,KAAK,KADV,sBAEG,YAAY,QAFf,EAE0B,IAF1B;AAIA,oBAAI,aAAJ,EAAmB;AACjB,yBAAK,KAAL,CAAW,WAAW,aAAtB,IAAuC,IAAvC;AACD;AACF;AACD,mBAAO,IAAP;AACD;AApCM;AAPe,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\nimport { VNodeData } from 'vue/types/vnode'\n\nfunction isCssColor (color?: string | false): boolean {\n return !!color && !!color.match(/^(#|(rgb|hsl)a?\\()/)\n}\n\nexport default Vue.extend({\n name: 'colorable',\n\n props: {\n color: String\n },\n\n methods: {\n setBackgroundColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n 'background-color': `${color}`,\n 'border-color': `${color}`\n }\n } else if (color) {\n data.class = {\n ...data.class,\n [color]: true\n }\n }\n\n return data\n },\n\n setTextColor (color?: string | false, data: VNodeData = {}): VNodeData {\n if (isCssColor(color)) {\n data.style = {\n ...data.style as object,\n 'color': `${color}`,\n 'caret-color': `${color}`\n }\n } else if (color) {\n const [colorName, colorModifier] = color.toString().trim().split(' ', 2) as (string | undefined)[]\n data.class = {\n ...data.class,\n [colorName + '--text']: true\n }\n if (colorModifier) {\n data.class['text--' + colorModifier] = true\n }\n }\n return data\n }\n }\n})\n"],"sourceRoot":""}
+12
View File
@@ -0,0 +1,12 @@
import Vue from 'vue';
import { deepEqual } from '../util/helpers';
export default Vue.extend({
name: 'comparable',
props: {
valueComparator: {
type: Function,
default: deepEqual
}
}
});
//# sourceMappingURL=comparable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/comparable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,SAAS,SAAT,QAA0B,iBAA1B;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAExB,WAAO;AACL,yBAAiB;AACf,kBAAM,QADS;AAEf,qBAAS;AAFM;AADZ;AAFiB,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../util/helpers'\n\nexport default Vue.extend({\n name: 'comparable',\n props: {\n valueComparator: {\n type: Function,\n default: deepEqual\n } as any as PropValidator<typeof deepEqual>\n }\n})\n"],"sourceRoot":""}
+475
View File
@@ -0,0 +1,475 @@
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
import VBtn from '../components/VBtn';
import VIcon from '../components/VIcon';
import VSelect from '../components/VSelect';
import Filterable from './filterable';
import Themeable from './themeable';
import Loadable from './loadable';
import { getObjectValueByPath, isObject } from '../util/helpers';
import { consoleWarn } from '../util/console';
/**
* DataIterable
*
* @mixin
*
* Base behavior for data table and data iterator
* providing selection, pagination, sorting and filtering.
*
*/
/* @vue/component */
export default {
name: 'data-iterable',
mixins: [Filterable, Loadable, Themeable],
props: {
expand: Boolean,
hideActions: Boolean,
disableInitialSort: Boolean,
mustSort: Boolean,
noResultsText: {
type: String,
default: '$vuetify.dataIterator.noResultsText'
},
nextIcon: {
type: String,
default: '$vuetify.icons.next'
},
prevIcon: {
type: String,
default: '$vuetify.icons.prev'
},
rowsPerPageItems: {
type: Array,
default: function _default() {
return [5, 10, 25, {
text: '$vuetify.dataIterator.rowsPerPageAll',
value: -1
}];
}
},
rowsPerPageText: {
type: String,
default: '$vuetify.dataIterator.rowsPerPageText'
},
selectAll: [Boolean, String],
search: {
required: false
},
filter: {
type: Function,
default: function _default(val, search) {
return val != null && typeof val !== 'boolean' && val.toString().toLowerCase().indexOf(search) !== -1;
}
},
customFilter: {
type: Function,
default: function _default(items, search, filter) {
search = search.toString().toLowerCase();
if (search.trim() === '') return items;
return items.filter(function (i) {
return Object.keys(i).some(function (j) {
return filter(i[j], search);
});
});
}
},
customSort: {
type: Function,
default: function _default(items, index, isDescending) {
if (index === null) return items;
return items.sort(function (a, b) {
var sortA = getObjectValueByPath(a, index);
var sortB = getObjectValueByPath(b, index);
if (isDescending) {
var _ref = [sortB, sortA];
sortA = _ref[0];
sortB = _ref[1];
}
// Check if both are numbers
if (!isNaN(sortA) && !isNaN(sortB)) {
return sortA - sortB;
}
// Check if both cannot be evaluated
if (sortA === null && sortB === null) {
return 0;
}
var _map = [sortA, sortB].map(function (s) {
return (s || '').toString().toLocaleLowerCase();
});
var _map2 = _slicedToArray(_map, 2);
sortA = _map2[0];
sortB = _map2[1];
if (sortA > sortB) return 1;
if (sortA < sortB) return -1;
return 0;
});
}
},
value: {
type: Array,
default: function _default() {
return [];
}
},
items: {
type: Array,
required: true,
default: function _default() {
return [];
}
},
totalItems: {
type: Number,
default: null
},
itemKey: {
type: String,
default: 'id'
},
pagination: {
type: Object,
default: function _default() {}
}
},
data: function data() {
return {
searchLength: 0,
defaultPagination: {
descending: false,
page: 1,
rowsPerPage: 5,
sortBy: null,
totalItems: 0
},
expanded: {},
actionsClasses: 'v-data-iterator__actions',
actionsRangeControlsClasses: 'v-data-iterator__actions__range-controls',
actionsSelectClasses: 'v-data-iterator__actions__select',
actionsPaginationClasses: 'v-data-iterator__actions__pagination'
};
},
computed: {
computedPagination: function computedPagination() {
return this.hasPagination ? this.pagination : this.defaultPagination;
},
computedRowsPerPageItems: function computedRowsPerPageItems() {
var _this = this;
return this.rowsPerPageItems.map(function (item) {
return isObject(item) ? Object.assign({}, item, {
text: _this.$vuetify.t(item.text)
}) : { value: item, text: Number(item).toLocaleString(_this.$vuetify.lang.current) };
});
},
hasPagination: function hasPagination() {
var pagination = this.pagination || {};
return Object.keys(pagination).length > 0;
},
hasSelectAll: function hasSelectAll() {
return this.selectAll !== undefined && this.selectAll !== false;
},
itemsLength: function itemsLength() {
if (this.hasSearch) return this.searchLength;
return this.totalItems || this.items.length;
},
indeterminate: function indeterminate() {
return this.hasSelectAll && this.someItems && !this.everyItem;
},
everyItem: function everyItem() {
var _this2 = this;
return this.filteredItems.length && this.filteredItems.every(function (i) {
return _this2.isSelected(i);
});
},
someItems: function someItems() {
var _this3 = this;
return this.filteredItems.some(function (i) {
return _this3.isSelected(i);
});
},
getPage: function getPage() {
var rowsPerPage = this.computedPagination.rowsPerPage;
return rowsPerPage === Object(rowsPerPage) ? rowsPerPage.value : rowsPerPage;
},
pageStart: function pageStart() {
return this.getPage === -1 ? 0 : (this.computedPagination.page - 1) * this.getPage;
},
pageStop: function pageStop() {
return this.getPage === -1 ? this.itemsLength : this.computedPagination.page * this.getPage;
},
filteredItems: function filteredItems() {
return this.filteredItemsImpl();
},
selected: function selected() {
var selected = {};
for (var index = 0; index < this.value.length; index++) {
var key = getObjectValueByPath(this.value[index], this.itemKey);
selected[key] = true;
}
return selected;
},
hasSearch: function hasSearch() {
return this.search != null;
}
},
watch: {
items: function items() {
var _this4 = this;
if (this.pageStart >= this.itemsLength) {
this.resetPagination();
}
var newItemKeys = new Set(this.items.map(function (item) {
return getObjectValueByPath(item, _this4.itemKey);
}));
var selection = this.value.filter(function (item) {
return newItemKeys.has(getObjectValueByPath(item, _this4.itemKey));
});
if (selection.length !== this.value.length) {
this.$emit('input', selection);
}
},
search: function search() {
var _this5 = this;
this.$nextTick(function () {
_this5.updatePagination({ page: 1, totalItems: _this5.itemsLength });
});
},
'computedPagination.sortBy': 'resetPagination',
'computedPagination.descending': 'resetPagination'
},
methods: {
initPagination: function initPagination() {
if (!this.rowsPerPageItems.length) {
consoleWarn('The prop \'rows-per-page-items\' can not be empty', this);
} else {
this.defaultPagination.rowsPerPage = this.rowsPerPageItems[0];
}
this.defaultPagination.totalItems = this.items.length;
this.updatePagination(Object.assign({}, this.defaultPagination, this.pagination));
},
updatePagination: function updatePagination(val) {
var pagination = this.hasPagination ? this.pagination : this.defaultPagination;
var updatedPagination = Object.assign({}, pagination, val);
this.$emit('update:pagination', updatedPagination);
if (!this.hasPagination) {
this.defaultPagination = updatedPagination;
}
},
isSelected: function isSelected(item) {
return this.selected[getObjectValueByPath(item, this.itemKey)];
},
isExpanded: function isExpanded(item) {
return this.expanded[getObjectValueByPath(item, this.itemKey)];
},
filteredItemsImpl: function filteredItemsImpl() {
if (this.totalItems) return this.items;
var items = this.items.slice();
if (this.hasSearch) {
for (var _len = arguments.length, additionalFilterArgs = Array(_len), _key = 0; _key < _len; _key++) {
additionalFilterArgs[_key] = arguments[_key];
}
items = this.customFilter.apply(this, [items, this.search, this.filter].concat(_toConsumableArray(additionalFilterArgs)));
this.searchLength = items.length;
}
items = this.customSort(items, this.computedPagination.sortBy, this.computedPagination.descending);
return this.hideActions && !this.hasPagination ? items : items.slice(this.pageStart, this.pageStop);
},
resetPagination: function resetPagination() {
this.computedPagination.page !== 1 && this.updatePagination({ page: 1 });
},
sort: function sort(index) {
var _computedPagination = this.computedPagination,
sortBy = _computedPagination.sortBy,
descending = _computedPagination.descending;
if (sortBy === null) {
this.updatePagination({ sortBy: index, descending: false });
} else if (sortBy === index && !descending) {
this.updatePagination({ descending: true });
} else if (sortBy !== index) {
this.updatePagination({ sortBy: index, descending: false });
} else if (!this.mustSort) {
this.updatePagination({ sortBy: null, descending: null });
} else {
this.updatePagination({ sortBy: index, descending: false });
}
},
toggle: function toggle(value) {
var _this6 = this;
var selected = Object.assign({}, this.selected);
for (var index = 0; index < this.filteredItems.length; index++) {
var key = getObjectValueByPath(this.filteredItems[index], this.itemKey);
selected[key] = value;
}
this.$emit('input', this.items.filter(function (i) {
var key = getObjectValueByPath(i, _this6.itemKey);
return selected[key];
}));
},
createProps: function createProps(item, index) {
var _this7 = this;
var props = { item: item, index: index };
var keyProp = this.itemKey;
var itemKey = getObjectValueByPath(item, keyProp);
Object.defineProperty(props, 'selected', {
get: function get() {
return _this7.selected[itemKey];
},
set: function set(value) {
if (itemKey == null) {
consoleWarn('"' + keyProp + '" attribute must be defined for item', _this7);
}
var selected = _this7.value.slice();
if (value) selected.push(item);else selected = selected.filter(function (i) {
return getObjectValueByPath(i, keyProp) !== itemKey;
});
_this7.$emit('input', selected);
}
});
Object.defineProperty(props, 'expanded', {
get: function get() {
return _this7.expanded[itemKey];
},
set: function set(value) {
if (itemKey == null) {
consoleWarn('"' + keyProp + '" attribute must be defined for item', _this7);
}
if (!_this7.expand) {
for (var key in _this7.expanded) {
_this7.expanded.hasOwnProperty(key) && _this7.$set(_this7.expanded, key, false);
}
}
_this7.$set(_this7.expanded, itemKey, value);
}
});
return props;
},
genItems: function genItems() {
if (!this.itemsLength && !this.items.length) {
var noData = this.$slots['no-data'] || this.$vuetify.t(this.noDataText);
return [this.genEmptyItems(noData)];
}
if (!this.filteredItems.length) {
var noResults = this.$slots['no-results'] || this.$vuetify.t(this.noResultsText);
return [this.genEmptyItems(noResults)];
}
return this.genFilteredItems();
},
genPrevIcon: function genPrevIcon() {
var _this8 = this;
return this.$createElement(VBtn, {
props: {
disabled: this.computedPagination.page === 1,
icon: true,
flat: true
},
on: {
click: function click() {
var page = _this8.computedPagination.page;
_this8.updatePagination({ page: page - 1 });
}
},
attrs: {
'aria-label': this.$vuetify.t('$vuetify.dataIterator.prevPage')
}
}, [this.$createElement(VIcon, this.$vuetify.rtl ? this.nextIcon : this.prevIcon)]);
},
genNextIcon: function genNextIcon() {
var _this9 = this;
var pagination = this.computedPagination;
var disabled = pagination.rowsPerPage < 0 || pagination.page * pagination.rowsPerPage >= this.itemsLength || this.pageStop < 0;
return this.$createElement(VBtn, {
props: {
disabled: disabled,
icon: true,
flat: true
},
on: {
click: function click() {
var page = _this9.computedPagination.page;
_this9.updatePagination({ page: page + 1 });
}
},
attrs: {
'aria-label': this.$vuetify.t('$vuetify.dataIterator.nextPage')
}
}, [this.$createElement(VIcon, this.$vuetify.rtl ? this.prevIcon : this.nextIcon)]);
},
genSelect: function genSelect() {
var _this10 = this;
return this.$createElement('div', {
'class': this.actionsSelectClasses
}, [this.$vuetify.t(this.rowsPerPageText), this.$createElement(VSelect, {
attrs: {
'aria-label': this.$vuetify.t(this.rowsPerPageText)
},
props: {
items: this.computedRowsPerPageItems,
value: this.computedPagination.rowsPerPage,
hideDetails: true,
menuProps: {
auto: true,
dark: this.dark,
light: this.light,
minWidth: '75px'
}
},
on: {
input: function input(val) {
_this10.updatePagination({
page: 1,
rowsPerPage: val
});
}
}
})]);
},
genPagination: function genPagination() {
var _this11 = this;
var pagination = '–';
if (this.itemsLength) {
var _$vuetify;
var stop = this.itemsLength < this.pageStop || this.pageStop < 0 ? this.itemsLength : this.pageStop;
pagination = this.$scopedSlots.pageText ? this.$scopedSlots.pageText({
pageStart: this.pageStart + 1,
pageStop: stop,
itemsLength: this.itemsLength
}) : (_$vuetify = this.$vuetify).t.apply(_$vuetify, ['$vuetify.dataIterator.pageText'].concat(_toConsumableArray([this.pageStart + 1, stop, this.itemsLength].map(function (n) {
return Number(n).toLocaleString(_this11.$vuetify.lang.current);
}))));
}
return this.$createElement('div', {
'class': this.actionsPaginationClasses
}, [pagination]);
},
genActions: function genActions() {
var rangeControls = this.$createElement('div', {
'class': this.actionsRangeControlsClasses
}, [this.genPagination(), this.genPrevIcon(), this.genNextIcon()]);
return [this.$createElement('div', {
'class': this.actionsClasses
}, [this.$slots['actions-prepend'] ? this.$createElement('div', {}, this.$slots['actions-prepend']) : null, this.rowsPerPageItems.length > 1 ? this.genSelect() : null, rangeControls, this.$slots['actions-append'] ? this.$createElement('div', {}, this.$slots['actions-append']) : null])];
}
}
};
//# sourceMappingURL=data-iterable.js.map
File diff suppressed because one or more lines are too long
+50
View File
@@ -0,0 +1,50 @@
import Vue from 'vue';
/**
* Delayable
*
* @mixin
*
* Changes the open or close delay time for elements
*/
export default Vue.extend().extend({
name: 'delayable',
props: {
openDelay: {
type: [Number, String],
default: 0
},
closeDelay: {
type: [Number, String],
default: 0
}
},
data: function data() {
return {
openTimeout: undefined,
closeTimeout: undefined
};
},
methods: {
/**
* Clear any pending delay timers from executing
*/
clearDelay: function clearDelay() {
clearTimeout(this.openTimeout);
clearTimeout(this.closeTimeout);
},
/**
* Runs callback after a specified delay
*/
runDelay: function runDelay(type, cb) {
var _this = this;
this.clearDelay();
var delay = parseInt(this[type + 'Delay'], 10);
this[type + 'Timeout'] = setTimeout(cb || function () {
_this.isActive = { open: true, close: false }[type];
}, delay);
}
}
});
//# sourceMappingURL=delayable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/delayable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA;;;;;;;AAOA,eAAe,IAAI,MAAJ,GAA2C,MAA3C,CAAkD;AAC/D,UAAM,WADyD;AAG/D,WAAO;AACL,mBAAW;AACT,kBAAM,CAAC,MAAD,EAAS,MAAT,CADG;AAET,qBAAS;AAFA,SADN;AAKL,oBAAY;AACV,kBAAM,CAAC,MAAD,EAAS,MAAT,CADI;AAEV,qBAAS;AAFC;AALP,KAHwD;AAc/D,UAAM;AAAA,eAAO;AACX,yBAAa,SADF;AAEX,0BAAc;AAFH,SAAP;AAAA,KAdyD;AAmB/D,aAAS;AACP;;;AAGA,kBAJO,wBAIG;AACR,yBAAa,KAAK,WAAlB;AACA,yBAAa,KAAK,YAAlB;AACD,SAPM;;AAQP;;;AAGA,gBAXO,oBAWG,IAXH,EAW2B,EAX3B,EAW0C;AAAA;;AAC/C,iBAAK,UAAL;AAEA,gBAAM,QAAQ,SAAU,KAAgB,IAAhB,WAAV,EAAwC,EAAxC,CAAd;AAEE,iBAAgB,IAAhB,gBAAiC,WAAW,MAAO,YAAK;AACxD,sBAAK,QAAL,GAAgB,EAAE,MAAM,IAAR,EAAc,OAAO,KAArB,GAA6B,IAA7B,CAAhB;AACD,aAFkC,EAE/B,KAF+B,CAAjC;AAGH;AAnBM;AAnBsD,CAAlD,CAAf","sourcesContent":["import Vue from 'vue'\n\n/**\n * Delayable\n *\n * @mixin\n *\n * Changes the open or close delay time for elements\n */\nexport default Vue.extend<Vue & { isActive?: boolean }>().extend({\n name: 'delayable',\n\n props: {\n openDelay: {\n type: [Number, String],\n default: 0\n },\n closeDelay: {\n type: [Number, String],\n default: 0\n }\n },\n\n data: () => ({\n openTimeout: undefined as number | undefined,\n closeTimeout: undefined as number | undefined\n }),\n\n methods: {\n /**\n * Clear any pending delay timers from executing\n */\n clearDelay (): void {\n clearTimeout(this.openTimeout)\n clearTimeout(this.closeTimeout)\n },\n /**\n * Runs callback after a specified delay\n */\n runDelay (type: 'open' | 'close', cb?: () => void): void {\n this.clearDelay()\n\n const delay = parseInt((this as any)[`${type}Delay`], 10)\n\n ;(this as any)[`${type}Timeout`] = setTimeout(cb || (() => {\n this.isActive = { open: true, close: false }[type]\n }), delay)\n }\n }\n})\n"],"sourceRoot":""}
+58
View File
@@ -0,0 +1,58 @@
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
import mixins from '../util/mixins';
function searchChildren(children) {
var results = [];
for (var index = 0; index < children.length; index++) {
var child = children[index];
if (child.isActive && child.isDependent) {
results.push(child);
} else {
results.push.apply(results, _toConsumableArray(searchChildren(child.$children)));
}
}
return results;
}
/* @vue/component */
export default mixins().extend({
name: 'dependent',
data: function data() {
return {
closeDependents: true,
isActive: false,
isDependent: true
};
},
watch: {
isActive: function isActive(val) {
if (val) return;
var openDependents = this.getOpenDependents();
for (var index = 0; index < openDependents.length; index++) {
openDependents[index].isActive = false;
}
}
},
methods: {
getOpenDependents: function getOpenDependents() {
if (this.closeDependents) return searchChildren(this.$children);
return [];
},
getOpenDependentElements: function getOpenDependentElements() {
var result = [];
var openDependents = this.getOpenDependents();
for (var index = 0; index < openDependents.length; index++) {
result.push.apply(result, _toConsumableArray(openDependents[index].getClickableDependentElements()));
}
return result;
},
getClickableDependentElements: function getClickableDependentElements() {
var result = [this.$el];
if (this.$refs.content) result.push(this.$refs.content);
if (this.overlay) result.push(this.overlay);
result.push.apply(result, _toConsumableArray(this.getOpenDependentElements()));
return result;
}
}
});
//# sourceMappingURL=dependent.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/dependent.ts"],"names":[],"mappings":";;AAEA,OAAO,MAAP,MAAmB,gBAAnB;AAeA,SAAS,cAAT,CAAyB,QAAzB,EAAwC;AACtC,QAAM,UAAU,EAAhB;AACA,SAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,SAAS,MAArC,EAA6C,OAA7C,EAAsD;AACpD,YAAM,QAAQ,SAAS,KAAT,CAAd;AACA,YAAI,MAAM,QAAN,IAAkB,MAAM,WAA5B,EAAyC;AACvC,oBAAQ,IAAR,CAAa,KAAb;AACD,SAFD,MAEO;AACL,oBAAQ,IAAR,mCAAgB,eAAe,MAAM,SAArB,CAAhB;AACD;AACF;AAED,WAAO,OAAP;AACD;AAED;AACA,eAAe,SAAkB,MAAlB,CAAyB;AACtC,UAAM,WADgC;AAGtC,QAHsC,kBAGlC;AACF,eAAO;AACL,6BAAiB,IADZ;AAEL,sBAAU,KAFL;AAGL,yBAAa;AAHR,SAAP;AAKD,KATqC;;AAWtC,WAAO;AACL,gBADK,oBACK,GADL,EACQ;AACX,gBAAI,GAAJ,EAAS;AAET,gBAAM,iBAAiB,KAAK,iBAAL,EAAvB;AACA,iBAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,eAAe,MAA3C,EAAmD,OAAnD,EAA4D;AAC1D,+BAAe,KAAf,EAAsB,QAAtB,GAAiC,KAAjC;AACD;AACF;AARI,KAX+B;AAsBtC,aAAS;AACP,yBADO,+BACU;AACf,gBAAI,KAAK,eAAT,EAA0B,OAAO,eAAe,KAAK,SAApB,CAAP;AAE1B,mBAAO,EAAP;AACD,SALM;AAMP,gCANO,sCAMiB;AACtB,gBAAM,SAAS,EAAf;AACA,gBAAM,iBAAiB,KAAK,iBAAL,EAAvB;AAEA,iBAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,eAAe,MAA3C,EAAmD,OAAnD,EAA4D;AAC1D,uBAAO,IAAP,kCAAe,eAAe,KAAf,EAAsB,6BAAtB,EAAf;AACD;AAED,mBAAO,MAAP;AACD,SAfM;AAgBP,qCAhBO,2CAgBsB;AAC3B,gBAAM,SAAS,CAAC,KAAK,GAAN,CAAf;AACA,gBAAI,KAAK,KAAL,CAAW,OAAf,EAAwB,OAAO,IAAP,CAAY,KAAK,KAAL,CAAW,OAAvB;AACxB,gBAAI,KAAK,OAAT,EAAkB,OAAO,IAAP,CAAY,KAAK,OAAjB;AAClB,mBAAO,IAAP,kCAAe,KAAK,wBAAL,EAAf;AAEA,mBAAO,MAAP;AACD;AAvBM;AAtB6B,CAAzB,CAAf","sourcesContent":["import Vue from 'vue'\n\nimport mixins from '../util/mixins'\n\ninterface options extends Vue {\n $el: HTMLElement\n $refs: {\n content: HTMLElement\n }\n overlay?: HTMLElement\n}\n\ninterface DependentInstance extends Vue {\n isActive?: boolean\n isDependent?: boolean\n}\n\nfunction searchChildren (children: Vue[]): DependentInstance[] {\n const results = []\n for (let index = 0; index < children.length; index++) {\n const child = children[index] as DependentInstance\n if (child.isActive && child.isDependent) {\n results.push(child)\n } else {\n results.push(...searchChildren(child.$children))\n }\n }\n\n return results\n}\n\n/* @vue/component */\nexport default mixins<options>().extend({\n name: 'dependent',\n\n data () {\n return {\n closeDependents: true,\n isActive: false,\n isDependent: true\n }\n },\n\n watch: {\n isActive (val) {\n if (val) return\n\n const openDependents = this.getOpenDependents()\n for (let index = 0; index < openDependents.length; index++) {\n openDependents[index].isActive = false\n }\n }\n },\n\n methods: {\n getOpenDependents (): any[] {\n if (this.closeDependents) return searchChildren(this.$children)\n\n return []\n },\n getOpenDependentElements (): HTMLElement[] {\n const result = []\n const openDependents = this.getOpenDependents()\n\n for (let index = 0; index < openDependents.length; index++) {\n result.push(...openDependents[index].getClickableDependentElements())\n }\n\n return result\n },\n getClickableDependentElements (): HTMLElement[] {\n const result = [this.$el]\n if (this.$refs.content) result.push(this.$refs.content)\n if (this.overlay) result.push(this.overlay)\n result.push(...this.getOpenDependentElements())\n\n return result\n }\n }\n})\n"],"sourceRoot":""}
+107
View File
@@ -0,0 +1,107 @@
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
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; }
import Bootable from './bootable';
import { consoleWarn } from '../util/console';
function validateAttachTarget(val) {
var type = typeof val === 'undefined' ? 'undefined' : _typeof(val);
if (type === 'boolean' || type === 'string') return true;
return val.nodeType === Node.ELEMENT_NODE;
}
/* @vue/component */
export default {
name: 'detachable',
mixins: [Bootable],
props: {
attach: {
type: null,
default: false,
validator: validateAttachTarget
},
contentClass: {
default: ''
}
},
data: function data() {
return {
hasDetached: false
};
},
watch: {
attach: function attach() {
this.hasDetached = false;
this.initDetach();
},
hasContent: 'initDetach'
},
beforeMount: function beforeMount() {
var _this = this;
this.$nextTick(function () {
if (_this.activatorNode) {
var activator = Array.isArray(_this.activatorNode) ? _this.activatorNode : [_this.activatorNode];
activator.forEach(function (node) {
node.elm && _this.$el.parentNode.insertBefore(node.elm, _this.$el);
});
}
});
},
mounted: function mounted() {
!this.lazy && this.initDetach();
},
deactivated: function deactivated() {
this.isActive = false;
},
beforeDestroy: function beforeDestroy() {
// IE11 Fix
try {
if (this.$refs.content) {
this.$refs.content.parentNode.removeChild(this.$refs.content);
}
if (this.activatorNode) {
var activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode];
activator.forEach(function (node) {
node.elm && node.elm.parentNode.removeChild(node.elm);
});
}
} catch (e) {
console.log(e);
}
},
methods: {
getScopeIdAttrs: function getScopeIdAttrs() {
var scopeId = this.$vnode && this.$vnode.context.$options._scopeId;
return scopeId && _defineProperty({}, scopeId, '');
},
initDetach: function initDetach() {
if (this._isDestroyed || !this.$refs.content || this.hasDetached ||
// Leave menu in place if attached
// and dev has not changed target
this.attach === '' || // If used as a boolean prop (<v-menu attach>)
this.attach === true || // If bound to a boolean (<v-menu :attach="true">)
this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))
) return;
var target = void 0;
if (this.attach === false) {
// Default, detach to app
target = document.querySelector('[data-app]');
} else if (typeof this.attach === 'string') {
// CSS selector
target = document.querySelector(this.attach);
} else {
// DOM Element
target = this.attach;
}
if (!target) {
consoleWarn('Unable to locate target ' + (this.attach || '[data-app]'), this);
return;
}
target.insertBefore(this.$refs.content, target.firstChild);
this.hasDetached = true;
}
}
};
//# sourceMappingURL=detachable.js.map
File diff suppressed because one or more lines are too long
+19
View File
@@ -0,0 +1,19 @@
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; }
import Vue from 'vue';
export default Vue.extend({
name: 'elevatable',
props: {
elevation: [Number, String]
},
computed: {
computedElevation: function computedElevation() {
return this.elevation;
},
elevationClasses: function elevationClasses() {
if (!this.computedElevation) return {};
return _defineProperty({}, 'elevation-' + this.computedElevation, true);
}
}
});
//# sourceMappingURL=elevatable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/elevatable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAGxB,WAAO;AACL,mBAAW,CAAC,MAAD,EAAS,MAAT;AADN,KAHiB;AAOxB,cAAU;AACR,yBADQ,+BACS;AACf,mBAAO,KAAK,SAAZ;AACD,SAHO;AAIR,wBAJQ,8BAIQ;AACd,gBAAI,CAAC,KAAK,iBAAV,EAA6B,OAAO,EAAP;AAE7B,sDAAuB,KAAK,iBAA5B,EAAkD,IAAlD;AACD;AARO;AAPc,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'elevatable',\n\n props: {\n elevation: [Number, String]\n },\n\n computed: {\n computedElevation (): string | number | undefined {\n return this.elevation\n },\n elevationClasses (): Record<string, boolean> {\n if (!this.computedElevation) return {}\n\n return { [`elevation-${this.computedElevation}`]: true }\n }\n }\n})\n"],"sourceRoot":""}
+12
View File
@@ -0,0 +1,12 @@
import Vue from 'vue';
/* @vue/component */
export default Vue.extend({
name: 'filterable',
props: {
noDataText: {
type: String,
default: '$vuetify.noDataText'
}
}
});
//# sourceMappingURL=filterable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/filterable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA;AACA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAGxB,WAAO;AACL,oBAAY;AACV,kBAAM,MADI;AAEV,qBAAS;AAFC;AADP;AAHiB,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'filterable',\n\n props: {\n noDataText: {\n type: String,\n default: '$vuetify.noDataText'\n }\n }\n})\n"],"sourceRoot":""}
+47
View File
@@ -0,0 +1,47 @@
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; }
// Mixins
import { inject as RegistrableInject } from './registrable';
export function factory(namespace, child, parent) {
return RegistrableInject(namespace, child, parent).extend({
name: 'groupable',
props: {
activeClass: {
type: String,
default: function _default() {
if (!this[namespace]) return undefined;
return this[namespace].activeClass;
}
},
disabled: Boolean
},
data: function data() {
return {
isActive: false
};
},
computed: {
groupClasses: function groupClasses() {
if (!this.activeClass) return {};
return _defineProperty({}, this.activeClass, this.isActive);
}
},
created: function created() {
this[namespace] && this[namespace].register(this);
},
beforeDestroy: function beforeDestroy() {
this[namespace] && this[namespace].unregister(this);
},
methods: {
toggle: function toggle() {
this.$emit('change');
}
}
});
}
/* eslint-disable-next-line no-redeclare */
var Groupable = factory('itemGroup');
export default Groupable;
//# sourceMappingURL=groupable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/groupable.ts"],"names":[],"mappings":";;;AACA,SAAsB,UAAU,iBAAhC,QAAyD,eAAzD;AAeA,OAAM,SAAU,OAAV,CACJ,SADI,EAEJ,KAFI,EAGJ,MAHI,EAGW;AAEf,WAAO,kBAAkB,SAAlB,EAA6B,KAA7B,EAAoC,MAApC,EAA4C,MAA5C,CAAmD;AACxD,cAAM,WADkD;AAGxD,eAAO;AACL,yBAAa;AACX,sBAAM,MADK;AAEX,uBAFW,sBAEJ;AACL,wBAAI,CAAC,KAAK,SAAL,CAAL,EAAsB,OAAO,SAAP;AAEtB,2BAAO,KAAK,SAAL,EAAgB,WAAvB;AACD;AANU,aADR;AASL,sBAAU;AATL,SAHiD;AAexD,YAfwD,kBAepD;AACF,mBAAO;AACL,0BAAU;AADL,aAAP;AAGD,SAnBuD;;AAqBxD,kBAAU;AACR,wBADQ,0BACI;AACV,oBAAI,CAAC,KAAK,WAAV,EAAuB,OAAO,EAAP;AAEvB,2CACG,KAAK,WADR,EACsB,KAAK,QAD3B;AAGD;AAPO,SArB8C;AA+BxD,eA/BwD,qBA+BjD;AACL,iBAAK,SAAL,KAAoB,KAAK,SAAL,EAAwB,QAAxB,CAAiC,IAAjC,CAApB;AACD,SAjCuD;AAmCxD,qBAnCwD,2BAmC3C;AACX,iBAAK,SAAL,KAAoB,KAAK,SAAL,EAAwB,UAAxB,CAAmC,IAAnC,CAApB;AACD,SArCuD;;AAuCxD,iBAAS;AACP,kBADO,oBACD;AACJ,qBAAK,KAAL,CAAW,QAAX;AACD;AAHM;AAvC+C,KAAnD,CAAP;AA6CD;AAED;AACA,IAAM,YAAY,QAAQ,WAAR,CAAlB;AAEA,eAAe,SAAf","sourcesContent":["// Mixins\nimport { Registrable, inject as RegistrableInject } from './registrable'\n\n// Utilities\nimport { ExtractVue } from '../util/mixins'\nimport { PropValidator } from 'vue/types/options'\nimport { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Groupable<T extends string> = VueConstructor<ExtractVue<Registrable<T>> & {\n activeClass: string\n isActive: boolean\n groupClasses: object\n toggle (): void\n}>\n\nexport function factory<T extends string> (\n namespace: T,\n child?: string,\n parent?: string\n): Groupable<T> {\n return RegistrableInject(namespace, child, parent).extend({\n name: 'groupable',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this[namespace]) return undefined\n\n return this[namespace].activeClass\n }\n } as any as PropValidator<string>,\n disabled: Boolean\n },\n\n data () {\n return {\n isActive: false\n }\n },\n\n computed: {\n groupClasses (): object {\n if (!this.activeClass) return {}\n\n return {\n [this.activeClass]: this.isActive\n }\n }\n },\n\n created () {\n this[namespace] && (this[namespace] as any).register(this)\n },\n\n beforeDestroy () {\n this[namespace] && (this[namespace] as any).unregister(this)\n },\n\n methods: {\n toggle () {\n this.$emit('change')\n }\n }\n })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n"],"sourceRoot":""}
+34
View File
@@ -0,0 +1,34 @@
import Vue from 'vue';
import VProgressLinear from '../components/VProgressLinear';
/**
* Loadable
*
* @mixin
*
* Used to add linear progress bar to components
* Can use a default bar with a specific color
* or designate a custom progress linear bar
*/
/* @vue/component */
export default Vue.extend().extend({
name: 'loadable',
props: {
loading: {
type: [Boolean, String],
default: false
}
},
methods: {
genProgress: function genProgress() {
if (this.loading === false) return null;
return this.$slots.progress || this.$createElement(VProgressLinear, {
props: {
color: this.loading === true || this.loading === '' ? this.color || 'primary' : this.loading,
height: 2,
indeterminate: true
}
});
}
}
});
//# sourceMappingURL=loadable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/loadable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAA2B,KAA3B;AACA,OAAO,eAAP,MAA4B,+BAA5B;AAMA;;;;;;;;;AASA;AACA,eAAe,IAAI,MAAJ,GAAwB,MAAxB,CAA+B;AAC5C,UAAM,UADsC;AAG5C,WAAO;AACL,iBAAS;AACP,kBAAM,CAAC,OAAD,EAAU,MAAV,CADC;AAEP,qBAAS;AAFF;AADJ,KAHqC;AAU5C,aAAS;AACP,mBADO,yBACI;AACT,gBAAI,KAAK,OAAL,KAAiB,KAArB,EAA4B,OAAO,IAAP;AAE5B,mBAAO,KAAK,MAAL,CAAY,QAAZ,IAAwB,KAAK,cAAL,CAAoB,eAApB,EAAqC;AAClE,uBAAO;AACL,2BAAQ,KAAK,OAAL,KAAiB,IAAjB,IAAyB,KAAK,OAAL,KAAiB,EAA3C,GACF,KAAK,KAAL,IAAc,SADZ,GAEH,KAAK,OAHJ;AAIL,4BAAQ,CAJH;AAKL,mCAAe;AALV;AAD2D,aAArC,CAA/B;AASD;AAbM;AAVmC,CAA/B,CAAf","sourcesContent":["import Vue, { VNode } from 'vue'\nimport VProgressLinear from '../components/VProgressLinear'\n\ninterface colorable extends Vue {\n color?: string\n}\n\n/**\n * Loadable\n *\n * @mixin\n *\n * Used to add linear progress bar to components\n * Can use a default bar with a specific color\n * or designate a custom progress linear bar\n */\n/* @vue/component */\nexport default Vue.extend<colorable>().extend({\n name: 'loadable',\n\n props: {\n loading: {\n type: [Boolean, String],\n default: false\n }\n },\n\n methods: {\n genProgress (): VNode | VNode[] | null {\n if (this.loading === false) return null\n\n return this.$slots.progress || this.$createElement(VProgressLinear, {\n props: {\n color: (this.loading === true || this.loading === '')\n ? (this.color || 'primary')\n : this.loading,\n height: 2,\n indeterminate: true\n }\n })\n }\n }\n})\n"],"sourceRoot":""}
+135
View File
@@ -0,0 +1,135 @@
/**
* Maskable
*
* @mixin
*
* Creates an input mask that is
* generated from a masked str
*
* Example: mask="#### #### #### ####"
*/
import { isMaskDelimiter, maskText as _maskText, unmaskText as _unmaskText } from '../util/mask';
/* @vue/component */
export default {
name: 'maskable',
props: {
dontFillMaskBlanks: Boolean,
mask: {
type: [Object, String],
default: null
},
returnMaskedValue: Boolean,
value: { required: false }
},
data: function data(vm) {
return {
selection: 0,
lazySelection: 0,
lazyValue: vm.value,
preDefined: {
'credit-card': '#### - #### - #### - ####',
'date': '##/##/####',
'date-with-time': '##/##/#### ##:##',
'phone': '(###) ### - ####',
'social': '###-##-####',
'time': '##:##',
'time-with-seconds': '##:##:##'
}
};
},
computed: {
masked: function masked() {
var preDefined = this.preDefined[this.mask];
var mask = preDefined || this.mask || '';
return mask.split('');
}
},
watch: {
/**
* Make sure the cursor is in the correct
* location when the mask changes
*/
mask: function mask() {
var _this = this;
if (!this.$refs.input) return;
var oldValue = this.$refs.input.value;
var newValue = this.maskText(_unmaskText(this.lazyValue));
var position = 0;
var selection = this.selection;
for (var index = 0; index < selection; index++) {
isMaskDelimiter(oldValue[index]) || position++;
}
selection = 0;
if (newValue) {
for (var _index = 0; _index < newValue.length; _index++) {
isMaskDelimiter(newValue[_index]) || position--;
selection++;
if (position <= 0) break;
}
}
this.$nextTick(function () {
_this.$refs.input.value = newValue;
_this.setCaretPosition(selection);
});
}
},
beforeMount: function beforeMount() {
if (!this.mask || this.value == null || !this.returnMaskedValue) return;
var value = this.maskText(this.value);
// See if masked value does not
// match the user given value
if (value === this.value) return;
this.$emit('input', value);
},
methods: {
setCaretPosition: function setCaretPosition(selection) {
var _this2 = this;
this.selection = selection;
window.setTimeout(function () {
_this2.$refs.input && _this2.$refs.input.setSelectionRange(_this2.selection, _this2.selection);
}, 0);
},
updateRange: function updateRange() {
/* istanbul ignore next */
if (!this.$refs.input) return;
var newValue = this.maskText(this.lazyValue);
var selection = 0;
this.$refs.input.value = newValue;
if (newValue) {
for (var index = 0; index < newValue.length; index++) {
if (this.lazySelection <= 0) break;
isMaskDelimiter(newValue[index]) || this.lazySelection--;
selection++;
}
}
this.setCaretPosition(selection);
// this.$emit() must occur only when all internal values are correct
this.$emit('input', this.returnMaskedValue ? this.$refs.input.value : this.lazyValue);
},
maskText: function maskText(text) {
return this.mask ? _maskText(text, this.masked, this.dontFillMaskBlanks) : text;
},
unmaskText: function unmaskText(text) {
return this.mask && !this.returnMaskedValue ? _unmaskText(text) : text;
},
// When the input changes and is
// re-created, ensure that the
// caret location is correct
setSelectionRange: function setSelectionRange() {
this.$nextTick(this.updateRange);
},
resetSelections: function resetSelections(input) {
if (!input.selectionEnd) return;
this.selection = input.selectionEnd;
this.lazySelection = 0;
for (var index = 0; index < this.selection; index++) {
isMaskDelimiter(input.value[index]) || this.lazySelection++;
}
}
}
};
//# sourceMappingURL=maskable.js.map
File diff suppressed because one or more lines are too long
+34
View File
@@ -0,0 +1,34 @@
// Helpers
import { convertToUnit } from '../util/helpers';
// Types
import Vue from 'vue';
export default Vue.extend({
name: 'measurable',
props: {
height: [Number, String],
maxHeight: [Number, String],
maxWidth: [Number, String],
minHeight: [Number, String],
minWidth: [Number, String],
width: [Number, String]
},
computed: {
measurableStyles: function measurableStyles() {
var styles = {};
var height = convertToUnit(this.height);
var minHeight = convertToUnit(this.minHeight);
var minWidth = convertToUnit(this.minWidth);
var maxHeight = convertToUnit(this.maxHeight);
var maxWidth = convertToUnit(this.maxWidth);
var width = convertToUnit(this.width);
if (height) styles.height = height;
if (minHeight) styles.minHeight = minHeight;
if (minWidth) styles.minWidth = minWidth;
if (maxHeight) styles.maxHeight = maxHeight;
if (maxWidth) styles.maxWidth = maxWidth;
if (width) styles.width = width;
return styles;
}
}
});
//# sourceMappingURL=measurable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/measurable.ts"],"names":[],"mappings":";AACA,SAAS,aAAT,QAA8B,iBAA9B;AAEA;AACA,OAAO,GAAP,MAAgB,KAAhB;AAKA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAGxB,WAAO;AACL,gBAAQ,CAAC,MAAD,EAAS,MAAT,CADH;AAEL,mBAAW,CAAC,MAAD,EAAS,MAAT,CAFN;AAGL,kBAAU,CAAC,MAAD,EAAS,MAAT,CAHL;AAIL,mBAAW,CAAC,MAAD,EAAS,MAAT,CAJN;AAKL,kBAAU,CAAC,MAAD,EAAS,MAAT,CALL;AAML,eAAO,CAAC,MAAD,EAAS,MAAT;AANF,KAHiB;AAYxB,cAAU;AACR,wBADQ,8BACQ;AACd,gBAAM,SAAiC,EAAvC;AAEA,gBAAM,SAAS,cAAc,KAAK,MAAnB,CAAf;AACA,gBAAM,YAAY,cAAc,KAAK,SAAnB,CAAlB;AACA,gBAAM,WAAW,cAAc,KAAK,QAAnB,CAAjB;AACA,gBAAM,YAAY,cAAc,KAAK,SAAnB,CAAlB;AACA,gBAAM,WAAW,cAAc,KAAK,QAAnB,CAAjB;AACA,gBAAM,QAAQ,cAAc,KAAK,KAAnB,CAAd;AAEA,gBAAI,MAAJ,EAAY,OAAO,MAAP,GAAgB,MAAhB;AACZ,gBAAI,SAAJ,EAAe,OAAO,SAAP,GAAmB,SAAnB;AACf,gBAAI,QAAJ,EAAc,OAAO,QAAP,GAAkB,QAAlB;AACd,gBAAI,SAAJ,EAAe,OAAO,SAAP,GAAmB,SAAnB;AACf,gBAAI,QAAJ,EAAc,OAAO,QAAP,GAAkB,QAAlB;AACd,gBAAI,KAAJ,EAAW,OAAO,KAAP,GAAe,KAAf;AAEX,mBAAO,MAAP;AACD;AAnBO;AAZc,CAAX,CAAf","sourcesContent":["// Helpers\nimport { convertToUnit } from '../util/helpers'\n\n// Types\nimport Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type NumberOrNumberString = PropValidator<string | number | undefined>\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record<string, string> = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n }\n }\n})\n"],"sourceRoot":""}
+344
View File
@@ -0,0 +1,344 @@
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
import Vue from 'vue';
import Positionable from './positionable';
import Stackable from './stackable';
/* eslint-disable object-property-newline */
var dimensions = {
activator: {
top: 0, left: 0,
bottom: 0, right: 0,
width: 0, height: 0,
offsetTop: 0, scrollHeight: 0
},
content: {
top: 0, left: 0,
bottom: 0, right: 0,
width: 0, height: 0,
offsetTop: 0, scrollHeight: 0
},
hasWindow: false
};
/* eslint-enable object-property-newline */
/**
* Menuable
*
* @mixin
*
* Used for fixed or absolutely positioning
* elements within the DOM
* Can calculate X and Y axis overflows
* As well as be manually positioned
*/
/* @vue/component */
export default Vue.extend({
name: 'menuable',
mixins: [Positionable, Stackable],
props: {
activator: {
default: null,
validator: function validator(val) {
return ['string', 'object'].includes(typeof val === 'undefined' ? 'undefined' : _typeof(val));
}
},
allowOverflow: Boolean,
inputActivator: Boolean,
light: Boolean,
dark: Boolean,
maxWidth: {
type: [Number, String],
default: 'auto'
},
minWidth: [Number, String],
nudgeBottom: {
type: [Number, String],
default: 0
},
nudgeLeft: {
type: [Number, String],
default: 0
},
nudgeRight: {
type: [Number, String],
default: 0
},
nudgeTop: {
type: [Number, String],
default: 0
},
nudgeWidth: {
type: [Number, String],
default: 0
},
offsetOverflow: Boolean,
positionX: {
type: Number,
default: null
},
positionY: {
type: Number,
default: null
},
zIndex: {
type: [Number, String],
default: null
}
},
data: function data() {
return {
absoluteX: 0,
absoluteY: 0,
activatorFixed: false,
dimensions: Object.assign({}, dimensions),
isContentActive: false,
pageWidth: 0,
pageYOffset: 0,
stackClass: 'v-menu__content--active',
stackMinZIndex: 6
};
},
computed: {
computedLeft: function computedLeft() {
var a = this.dimensions.activator;
var c = this.dimensions.content;
var activatorLeft = (this.isAttached ? a.offsetLeft : a.left) || 0;
var minWidth = Math.max(a.width, c.width);
var left = 0;
left += this.left ? activatorLeft - (minWidth - a.width) : activatorLeft;
if (this.offsetX) {
var maxWidth = isNaN(this.maxWidth) ? a.width : Math.min(a.width, this.maxWidth);
left += this.left ? -maxWidth : a.width;
}
if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
if (this.nudgeRight) left += parseInt(this.nudgeRight);
return left;
},
computedTop: function computedTop() {
var a = this.dimensions.activator;
var c = this.dimensions.content;
var top = 0;
if (this.top) top += a.height - c.height;
if (this.isAttached) top += a.offsetTop;else top += a.top + this.pageYOffset;
if (this.offsetY) top += this.top ? -a.height : a.height;
if (this.nudgeTop) top -= parseInt(this.nudgeTop);
if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
return top;
},
hasActivator: function hasActivator() {
return !!this.$slots.activator || !!this.$scopedSlots.activator || this.activator || this.inputActivator;
},
isAttached: function isAttached() {
return this.attach !== false;
}
},
watch: {
disabled: function disabled(val) {
val && this.callDeactivate();
},
isActive: function isActive(val) {
if (this.disabled) return;
val ? this.callActivate() : this.callDeactivate();
},
positionX: 'updateDimensions',
positionY: 'updateDimensions'
},
beforeMount: function beforeMount() {
this.checkForWindow();
},
methods: {
absolutePosition: function absolutePosition() {
return {
offsetTop: 0,
offsetLeft: 0,
scrollHeight: 0,
top: this.positionY || this.absoluteY,
bottom: this.positionY || this.absoluteY,
left: this.positionX || this.absoluteX,
right: this.positionX || this.absoluteX,
height: 0,
width: 0
};
},
activate: function activate() {},
calcLeft: function calcLeft(menuWidth) {
return (this.isAttached ? this.computedLeft : this.calcXOverflow(this.computedLeft, menuWidth)) + 'px';
},
calcTop: function calcTop() {
return (this.isAttached ? this.computedTop : this.calcYOverflow(this.computedTop)) + 'px';
},
calcXOverflow: function calcXOverflow(left, menuWidth) {
var xOverflow = left + menuWidth - this.pageWidth + 12;
if ((!this.left || this.right) && xOverflow > 0) {
left = Math.max(left - xOverflow, 0);
} else {
left = Math.max(left, 12);
}
return left + this.getOffsetLeft();
},
calcYOverflow: function calcYOverflow(top) {
var documentHeight = this.getInnerHeight();
var toTop = this.pageYOffset + documentHeight;
var activator = this.dimensions.activator;
var contentHeight = this.dimensions.content.height;
var totalHeight = top + contentHeight;
var isOverflowing = toTop < totalHeight;
// If overflowing bottom and offset
// TODO: set 'bottom' position instead of 'top'
if (isOverflowing && this.offsetOverflow &&
// If we don't have enough room to offset
// the overflow, don't offset
activator.top > contentHeight) {
top = this.pageYOffset + (activator.top - contentHeight);
// If overflowing bottom
} else if (isOverflowing && !this.allowOverflow) {
top = toTop - contentHeight - 12;
// If overflowing top
} else if (top < this.pageYOffset && !this.allowOverflow) {
top = this.pageYOffset + 12;
}
return top < 12 ? 12 : top;
},
callActivate: function callActivate() {
if (!this.hasWindow) return;
this.activate();
},
callDeactivate: function callDeactivate() {
this.isContentActive = false;
this.deactivate();
},
checkForWindow: function checkForWindow() {
if (!this.hasWindow) {
this.hasWindow = typeof window !== 'undefined';
}
},
checkForPageYOffset: function checkForPageYOffset() {
if (this.hasWindow) {
this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop();
}
},
checkActivatorFixed: function checkActivatorFixed() {
if (this.attach !== false) return;
var el = this.getActivator();
while (el) {
if (window.getComputedStyle(el).position === 'fixed') {
this.activatorFixed = true;
return;
}
el = el.offsetParent;
}
this.activatorFixed = false;
},
deactivate: function deactivate() {},
getActivator: function getActivator(e) {
if (this.inputActivator) {
return this.$el.querySelector('.v-input__slot');
}
if (this.activator) {
return typeof this.activator === 'string' ? document.querySelector(this.activator) : this.activator;
}
if (this.$refs.activator) {
return this.$refs.activator.children.length > 0 ? this.$refs.activator.children[0] : this.$refs.activator;
}
if (e) {
this.activatedBy = e.currentTarget || e.target;
return this.activatedBy;
}
if (this.activatedBy) return this.activatedBy;
if (this.activatorNode) {
var activator = Array.isArray(this.activatorNode) ? this.activatorNode[0] : this.activatorNode;
var el = activator && activator.elm;
if (el) return el;
}
},
getInnerHeight: function getInnerHeight() {
if (!this.hasWindow) return 0;
return window.innerHeight || document.documentElement.clientHeight;
},
getOffsetLeft: function getOffsetLeft() {
if (!this.hasWindow) return 0;
return window.pageXOffset || document.documentElement.scrollLeft;
},
getOffsetTop: function getOffsetTop() {
if (!this.hasWindow) return 0;
return window.pageYOffset || document.documentElement.scrollTop;
},
getRoundedBoundedClientRect: function getRoundedBoundedClientRect(el) {
var rect = el.getBoundingClientRect();
return {
top: Math.round(rect.top),
left: Math.round(rect.left),
bottom: Math.round(rect.bottom),
right: Math.round(rect.right),
width: Math.round(rect.width),
height: Math.round(rect.height)
};
},
measure: function measure(el) {
if (!el || !this.hasWindow) return null;
var rect = this.getRoundedBoundedClientRect(el);
// Account for activator margin
if (this.isAttached) {
var style = window.getComputedStyle(el);
rect.left = parseInt(style.marginLeft);
rect.top = parseInt(style.marginTop);
}
return rect;
},
sneakPeek: function sneakPeek(cb) {
var _this = this;
requestAnimationFrame(function () {
var el = _this.$refs.content;
if (!el || _this.isShown(el)) return cb();
el.style.display = 'inline-block';
cb();
el.style.display = 'none';
});
},
startTransition: function startTransition() {
var _this2 = this;
return new Promise(function (resolve) {
return requestAnimationFrame(function () {
_this2.isContentActive = _this2.hasJustFocused = _this2.isActive;
resolve();
});
});
},
isShown: function isShown(el) {
return el.style.display !== 'none';
},
updateDimensions: function updateDimensions() {
var _this3 = this;
this.checkForWindow();
this.checkActivatorFixed();
this.checkForPageYOffset();
this.pageWidth = document.documentElement.clientWidth;
var dimensions = {};
// Activator should already be shown
if (!this.hasActivator || this.absolute) {
dimensions.activator = this.absolutePosition();
} else {
var activator = this.getActivator();
dimensions.activator = this.measure(activator);
dimensions.activator.offsetLeft = activator.offsetLeft;
if (this.isAttached) {
// account for css padding causing things to not line up
// this is mostly for v-autocomplete, hopefully it won't break anything
dimensions.activator.offsetTop = activator.offsetTop;
} else {
dimensions.activator.offsetTop = 0;
}
}
// Display and hide to get dimensions
this.sneakPeek(function () {
dimensions.content = _this3.measure(_this3.$refs.content);
_this3.dimensions = dimensions;
});
}
}
});
//# sourceMappingURL=menuable.js.map
File diff suppressed because one or more lines are too long
+175
View File
@@ -0,0 +1,175 @@
// Styles
import '../../src/stylus/components/_overlay.styl';
// Utilities
import { keyCodes, addPassiveEventListener } from '../util/helpers';
// Types
import Vue from 'vue';
/* @vue/component */
export default Vue.extend().extend({
name: 'overlayable',
props: {
hideOverlay: Boolean
},
data: function data() {
return {
overlay: null,
overlayOffset: 0,
overlayTimeout: undefined,
overlayTransitionDuration: 500 + 150 // transition + delay
};
},
watch: {
hideOverlay: function hideOverlay(value) {
if (value) this.removeOverlay();else this.genOverlay();
}
},
beforeDestroy: function beforeDestroy() {
this.removeOverlay();
},
methods: {
genOverlay: function genOverlay() {
var _this = this;
// If fn is called and timeout is active
// or overlay already exists
// cancel removal of overlay and re-add active
if (!this.isActive || this.hideOverlay || this.isActive && this.overlayTimeout || this.overlay) {
clearTimeout(this.overlayTimeout);
return this.overlay && this.overlay.classList.add('v-overlay--active');
}
this.overlay = document.createElement('div');
this.overlay.className = 'v-overlay';
if (this.absolute) this.overlay.className += ' v-overlay--absolute';
this.hideScroll();
var parent = this.absolute ? this.$el.parentNode : document.querySelector('[data-app]');
parent && parent.insertBefore(this.overlay, parent.firstChild);
// eslint-disable-next-line no-unused-expressions
this.overlay.clientHeight; // Force repaint
requestAnimationFrame(function () {
// https://github.com/vuetifyjs/vuetify/issues/4678
if (!_this.overlay) return;
_this.overlay.className += ' v-overlay--active';
if (_this.activeZIndex !== undefined) {
_this.overlay.style.zIndex = String(_this.activeZIndex - 1);
}
});
return true;
},
/** removeOverlay(false) will not restore the scollbar afterwards */
removeOverlay: function removeOverlay() {
var _this2 = this;
var showScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!this.overlay) {
return showScroll && this.showScroll();
}
this.overlay.classList.remove('v-overlay--active');
this.overlayTimeout = window.setTimeout(function () {
// IE11 Fix
try {
if (_this2.overlay && _this2.overlay.parentNode) {
_this2.overlay.parentNode.removeChild(_this2.overlay);
}
_this2.overlay = null;
showScroll && _this2.showScroll();
} catch (e) {
console.log(e);
}
clearTimeout(_this2.overlayTimeout);
_this2.overlayTimeout = undefined;
}, this.overlayTransitionDuration);
},
scrollListener: function scrollListener(e) {
if (e.type === 'keydown') {
if (['INPUT', 'TEXTAREA', 'SELECT'].includes(e.target.tagName) ||
// https://github.com/vuetifyjs/vuetify/issues/4715
e.target.isContentEditable) return;
var up = [keyCodes.up, keyCodes.pageup];
var down = [keyCodes.down, keyCodes.pagedown];
if (up.includes(e.keyCode)) {
e.deltaY = -1;
} else if (down.includes(e.keyCode)) {
e.deltaY = 1;
} else {
return;
}
}
if (e.target === this.overlay || e.type !== 'keydown' && e.target === document.body || this.checkPath(e)) e.preventDefault();
},
hasScrollbar: function hasScrollbar(el) {
if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
var style = window.getComputedStyle(el);
return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight;
},
shouldScroll: function shouldScroll(el, delta) {
if (el.scrollTop === 0 && delta < 0) return true;
return el.scrollTop + el.clientHeight === el.scrollHeight && delta > 0;
},
isInside: function isInside(el, parent) {
if (el === parent) {
return true;
} else if (el === null || el === document.body) {
return false;
} else {
return this.isInside(el.parentNode, parent);
}
},
checkPath: function checkPath(e) {
var path = e.path || this.composedPath(e);
var delta = e.deltaY;
if (e.type === 'keydown' && path[0] === document.body) {
var dialog = this.$refs.dialog;
var selected = window.getSelection().anchorNode;
if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
return this.shouldScroll(dialog, delta);
}
return true;
}
for (var index = 0; index < path.length; index++) {
var el = path[index];
if (el === document) return true;
if (el === document.documentElement) return true;
if (el === this.$refs.content) return true;
if (this.hasScrollbar(el)) return this.shouldScroll(el, delta);
}
return true;
},
/**
* Polyfill for Event.prototype.composedPath
*/
composedPath: function composedPath(e) {
if (e.composedPath) return e.composedPath();
var path = [];
var el = e.target;
while (el) {
path.push(el);
if (el.tagName === 'HTML') {
path.push(document);
path.push(window);
return path;
}
el = el.parentElement;
}
return path;
},
hideScroll: function hideScroll() {
if (this.$vuetify.breakpoint.smAndDown) {
document.documentElement.classList.add('overflow-y-hidden');
} else {
addPassiveEventListener(window, 'wheel', this.scrollListener, { passive: false });
window.addEventListener('keydown', this.scrollListener);
}
},
showScroll: function showScroll() {
document.documentElement.classList.remove('overflow-y-hidden');
window.removeEventListener('wheel', this.scrollListener);
window.removeEventListener('keydown', this.scrollListener);
}
}
});
//# sourceMappingURL=overlayable.js.map
File diff suppressed because one or more lines are too long
+30
View File
@@ -0,0 +1,30 @@
// Mixins
import Colorable from './colorable';
// Utilities
import mixins from '../util/mixins';
/* @vue/component */
export default mixins(Colorable).extend({
methods: {
genPickerButton: function genPickerButton(prop, value, content) {
var _this = this;
var readonly = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var staticClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
var active = this[prop] === value;
var click = function click(event) {
event.stopPropagation();
_this.$emit('update:' + prop, value);
};
return this.$createElement('div', {
staticClass: ('v-picker__title__btn ' + staticClass).trim(),
'class': {
'v-picker__title__btn--active': active,
'v-picker__title__btn--readonly': readonly
},
on: active || readonly ? undefined : { click: click }
}, Array.isArray(content) ? content : [content]);
}
}
});
//# sourceMappingURL=picker-button.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/picker-button.ts"],"names":[],"mappings":";AACA,OAAO,SAAP,MAAsB,aAAtB;AAEA;AACA,OAAO,MAAP,MAAmB,gBAAnB;AAKA;AACA,eAAe,OACb,SADa,EAEb,MAFa,CAEN;AACP,aAAS;AACP,uBADO,2BAEL,IAFK,EAGL,KAHK,EAIL,OAJK,EAMW;AAAA;;AAAA,gBADhB,QACgB,uEADL,KACK;AAAA,gBAAhB,WAAgB,uEAAF,EAAE;;AAEhB,gBAAM,SAAU,KAAa,IAAb,MAAuB,KAAvC;AACA,gBAAM,QAAQ,SAAR,KAAQ,CAAC,KAAD,EAAiB;AAC7B,sBAAM,eAAN;AACA,sBAAK,KAAL,aAAqB,IAArB,EAA6B,KAA7B;AACD,aAHD;AAKA,mBAAO,KAAK,cAAL,CAAoB,KAApB,EAA2B;AAChC,6BAAa,2BAAwB,WAAxB,EAAsC,IAAtC,EADmB;AAEhC,yBAAS;AACP,oDAAgC,MADzB;AAEP,sDAAkC;AAF3B,iBAFuB;AAMhC,oBAAK,UAAU,QAAX,GAAuB,SAAvB,GAAmC,EAAE,YAAF;AANP,aAA3B,EAOJ,MAAM,OAAN,CAAc,OAAd,IAAyB,OAAzB,GAAmC,CAAC,OAAD,CAP/B,CAAP;AAQD;AAtBM;AADF,CAFM,CAAf","sourcesContent":["// Mixins\nimport Colorable from './colorable'\n\n// Utilities\nimport mixins from '../util/mixins'\n\n// Types\nimport { VNodeChildren } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Colorable\n).extend({\n methods: {\n genPickerButton (\n prop: string,\n value: any,\n content: VNodeChildren,\n readonly = false,\n staticClass = ''\n ) {\n const active = (this as any)[prop] === value\n const click = (event: Event) => {\n event.stopPropagation()\n this.$emit(`update:${prop}`, value)\n }\n\n return this.$createElement('div', {\n staticClass: `v-picker__title__btn ${staticClass}`.trim(),\n 'class': {\n 'v-picker__title__btn--active': active,\n 'v-picker__title__btn--readonly': readonly\n },\n on: (active || readonly) ? undefined : { click }\n }, Array.isArray(content) ? content : [content])\n }\n }\n})\n"],"sourceRoot":""}
+58
View File
@@ -0,0 +1,58 @@
// Components
import VPicker from '../components/VPicker';
// Mixins
import Colorable from './colorable';
import Themeable from './themeable';
// Utils
import mixins from '../util/mixins';
export default mixins(Colorable, Themeable
/* @vue/component */
).extend({
name: 'picker',
props: {
fullWidth: Boolean,
headerColor: String,
landscape: Boolean,
noTitle: Boolean,
width: {
type: [Number, String],
default: 290
}
},
methods: {
genPickerTitle: function genPickerTitle() {
return null;
},
genPickerBody: function genPickerBody() {
return null;
},
genPickerActionsSlot: function genPickerActionsSlot() {
return this.$scopedSlots.default ? this.$scopedSlots.default({
save: this.save,
cancel: this.cancel
}) : this.$slots.default;
},
genPicker: function genPicker(staticClass) {
var children = [];
if (!this.noTitle) {
var title = this.genPickerTitle();
title && children.push(title);
}
var body = this.genPickerBody();
body && children.push(body);
children.push(this.$createElement('template', { slot: 'actions' }, [this.genPickerActionsSlot()]));
return this.$createElement(VPicker, {
staticClass: staticClass,
props: {
color: this.headerColor || this.color,
dark: this.dark,
fullWidth: this.fullWidth,
landscape: this.landscape,
light: this.light,
width: this.width
}
}, children);
}
}
});
//# sourceMappingURL=picker.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/picker.ts"],"names":[],"mappings":";AACA,OAAO,OAAP,MAAoB,uBAApB;AAEA;AACA,OAAO,SAAP,MAAsB,aAAtB;AACA,OAAO,SAAP,MAAsB,aAAtB;AAEA;AACA,OAAO,MAAP,MAAmB,gBAAnB;AAKA,eAAe,OACb,SADa,EAEb;AACF;AAHe,EAIb,MAJa,CAIN;AACP,UAAM,QADC;AAGP,WAAO;AACL,mBAAW,OADN;AAEL,qBAAa,MAFR;AAGL,mBAAW,OAHN;AAIL,iBAAS,OAJJ;AAKL,eAAO;AACL,kBAAM,CAAC,MAAD,EAAS,MAAT,CADD;AAEL,qBAAS;AAFJ;AALF,KAHA;AAcP,aAAS;AACP,sBADO,4BACO;AACZ,mBAAO,IAAP;AACD,SAHM;AAIP,qBAJO,2BAIM;AACX,mBAAO,IAAP;AACD,SANM;AAOP,4BAPO,kCAOa;AAClB,mBAAO,KAAK,YAAL,CAAkB,OAAlB,GAA4B,KAAK,YAAL,CAAkB,OAAlB,CAA0B;AAC3D,sBAAO,KAAa,IADuC;AAE3D,wBAAS,KAAa;AAFqC,aAA1B,CAA5B,GAGF,KAAK,MAAL,CAAY,OAHjB;AAID,SAZM;AAaP,iBAbO,qBAaI,WAbJ,EAauB;AAC5B,gBAAM,WAAoB,EAA1B;AAEA,gBAAI,CAAC,KAAK,OAAV,EAAmB;AACjB,oBAAM,QAAQ,KAAK,cAAL,EAAd;AACA,yBAAS,SAAS,IAAT,CAAc,KAAd,CAAT;AACD;AAED,gBAAM,OAAO,KAAK,aAAL,EAAb;AACA,oBAAQ,SAAS,IAAT,CAAc,IAAd,CAAR;AAEA,qBAAS,IAAT,CAAc,KAAK,cAAL,CAAoB,UAApB,EAAgC,EAAE,MAAM,SAAR,EAAhC,EAAqD,CAAC,KAAK,oBAAL,EAAD,CAArD,CAAd;AAEA,mBAAO,KAAK,cAAL,CAAoB,OAApB,EAA6B;AAClC,wCADkC;AAElC,uBAAO;AACL,2BAAO,KAAK,WAAL,IAAoB,KAAK,KAD3B;AAEL,0BAAM,KAAK,IAFN;AAGL,+BAAW,KAAK,SAHX;AAIL,+BAAW,KAAK,SAJX;AAKL,2BAAO,KAAK,KALP;AAML,2BAAO,KAAK;AANP;AAF2B,aAA7B,EAUJ,QAVI,CAAP;AAWD;AArCM;AAdF,CAJM,CAAf","sourcesContent":["// Components\nimport VPicker from '../components/VPicker'\n\n// Mixins\nimport Colorable from './colorable'\nimport Themeable from './themeable'\n\n// Utils\nimport mixins from '../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'picker',\n\n props: {\n fullWidth: Boolean,\n headerColor: String,\n landscape: Boolean,\n noTitle: Boolean,\n width: {\n type: [Number, String],\n default: 290\n }\n },\n\n methods: {\n genPickerTitle (): VNode | null {\n return null\n },\n genPickerBody (): VNode | null {\n return null\n },\n genPickerActionsSlot () {\n return this.$scopedSlots.default ? this.$scopedSlots.default({\n save: (this as any).save,\n cancel: (this as any).cancel\n }) : this.$slots.default\n },\n genPicker (staticClass: string) {\n const children: VNode[] = []\n\n if (!this.noTitle) {\n const title = this.genPickerTitle()\n title && children.push(title)\n }\n\n const body = this.genPickerBody()\n body && children.push(body)\n\n children.push(this.$createElement('template', { slot: 'actions' }, [this.genPickerActionsSlot()]))\n\n return this.$createElement(VPicker, {\n staticClass,\n props: {\n color: this.headerColor || this.color,\n dark: this.dark,\n fullWidth: this.fullWidth,\n landscape: this.landscape,\n light: this.light,\n width: this.width\n }\n }, children)\n }\n }\n})\n"],"sourceRoot":""}
+47
View File
@@ -0,0 +1,47 @@
import Vue from 'vue';
import { filterObjectOnKeys } from '../util/helpers';
var availableProps = {
absolute: Boolean,
bottom: Boolean,
fixed: Boolean,
left: Boolean,
right: Boolean,
top: Boolean
};
export function factory() {
var selected = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return Vue.extend({
name: 'positionable',
props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps
});
}
export default factory();
// Add a `*` before the second `/`
/* Tests /
let single = factory(['top']).extend({
created () {
this.top
this.bottom
this.absolute
}
})
let some = factory(['top', 'bottom']).extend({
created () {
this.top
this.bottom
this.absolute
}
})
let all = factory().extend({
created () {
this.top
this.bottom
this.absolute
this.foobar
}
})
/**/
//# sourceMappingURL=positionable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/positionable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AACA,SAAS,kBAAT,QAAmC,iBAAnC;AAGA,IAAM,iBAAiB;AACrB,YAAU,OADW;AAErB,UAAQ,OAFa;AAGrB,SAAO,OAHc;AAIrB,QAAM,OAJe;AAKrB,SAAO,OALc;AAMrB,OAAK;AANgB,CAAvB;AAcA,OAAM,SAAU,OAAV,GAAuC;AAAA,MAApB,QAAoB,uEAAF,EAAE;;AAC3C,SAAO,IAAI,MAAJ,CAAW;AAChB,UAAM,cADU;AAEhB,WAAO,SAAS,MAAT,GAAkB,mBAAmB,cAAnB,EAAmC,QAAnC,CAAlB,GAAiE;AAFxD,GAAX,CAAP;AAID;AAED,eAAe,SAAf;AAEA;AACA","sourcesContent":["import Vue from 'vue'\nimport { filterObjectOnKeys } from '../util/helpers'\nimport { OptionsVue, VueConstructor } from 'vue/types/vue'\n\nconst availableProps = {\n absolute: Boolean,\n bottom: Boolean,\n fixed: Boolean,\n left: Boolean,\n right: Boolean,\n top: Boolean\n}\ntype props = Record<keyof typeof availableProps, boolean>\n\nexport type Positionable<S extends keyof props> = VueConstructor<Vue & { [P in S]: boolean }, { [P in S]: BooleanConstructor }>\n\nexport function factory <S extends keyof props> (selected?: S[]): Positionable<S>\nexport function factory (selected: undefined): OptionsVue<Vue, {}, {}, {}, props, typeof availableProps>\nexport function factory (selected: any[] = []): any {\n return Vue.extend({\n name: 'positionable',\n props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps\n })\n}\n\nexport default factory()\n\n// Add a `*` before the second `/`\n/* Tests /\nlet single = factory(['top']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet some = factory(['top', 'bottom']).extend({\n created () {\n this.top\n this.bottom\n this.absolute\n }\n})\n\nlet all = factory().extend({\n created () {\n this.top\n this.bottom\n this.absolute\n this.foobar\n }\n})\n/**/\n"],"sourceRoot":""}
+43
View File
@@ -0,0 +1,43 @@
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; }
import Vue from 'vue';
export function factory() {
var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'value';
var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'change';
return Vue.extend({
name: 'proxyable',
model: {
prop: prop,
event: event
},
props: _defineProperty({}, prop, {
required: false
}),
data: function data() {
return {
internalLazyValue: this[prop]
};
},
computed: {
internalValue: {
get: function get() {
return this.internalLazyValue;
},
set: function set(val) {
if (val === this.internalLazyValue) return;
this.internalLazyValue = val;
this.$emit(event, val);
}
}
},
watch: _defineProperty({}, prop, function (val) {
this.internalLazyValue = val;
})
});
}
/* eslint-disable-next-line no-redeclare */
var Proxyable = factory();
export default Proxyable;
//# sourceMappingURL=proxyable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/proxyable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAoC,KAApC;AASA,OAAM,SAAU,OAAV,GAEY;AAAA,QADhB,IACgB,uEADT,OACS;AAAA,QAAhB,KAAgB,uEAAR,QAAQ;;AAEhB,WAAO,IAAI,MAAJ,CAAW;AAChB,cAAM,WADU;AAGhB,eAAO;AACL,sBADK;AAEL;AAFK,SAHS;AAQhB,mCACG,IADH,EACU;AACN,sBAAU;AADJ,SADV,CARgB;AAchB,YAdgB,kBAcZ;AACF,mBAAO;AACL,mCAAmB,KAAK,IAAL;AADd,aAAP;AAGD,SAlBe;;AAoBhB,kBAAU;AACR,2BAAe;AACb,mBADa,iBACV;AACD,2BAAO,KAAK,iBAAZ;AACD,iBAHY;AAIb,mBAJa,eAIR,GAJQ,EAIA;AACX,wBAAI,QAAQ,KAAK,iBAAjB,EAAoC;AAEpC,yBAAK,iBAAL,GAAyB,GAAzB;AAEA,yBAAK,KAAL,CAAW,KAAX,EAAkB,GAAlB;AACD;AAVY;AADP,SApBM;AAmChB,mCACG,IADH,YACU,GADV,EACa;AACT,iBAAK,iBAAL,GAAyB,GAAzB;AACD,SAHH;AAnCgB,KAAX,CAAP;AAyCD;AAED;AACA,IAAM,YAAY,SAAlB;AAEA,eAAe,SAAf","sourcesContent":["import Vue, { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Proxyable<T extends string = 'value'> = VueConstructor<Vue & {\n internalLazyValue: unknown\n internalValue: unknown\n} & Record<T, any>>\n\nexport function factory<T extends string = 'value'> (prop?: T, event?: string): Proxyable<T>\nexport function factory (\n prop = 'value',\n event = 'change'\n) {\n return Vue.extend({\n name: 'proxyable',\n\n model: {\n prop,\n event\n },\n\n props: {\n [prop]: {\n required: false\n }\n },\n\n data () {\n return {\n internalLazyValue: this[prop] as unknown\n }\n },\n\n computed: {\n internalValue: {\n get (): unknown {\n return this.internalLazyValue\n },\n set (val: any) {\n if (val === this.internalLazyValue) return\n\n this.internalLazyValue = val\n\n this.$emit(event, val)\n }\n }\n },\n\n watch: {\n [prop] (val) {\n this.internalLazyValue = val\n }\n }\n })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Proxyable = factory()\n\nexport default Proxyable\n"],"sourceRoot":""}
+37
View File
@@ -0,0 +1,37 @@
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; }
import Vue from 'vue';
import { consoleWarn } from '../util/console';
function generateWarning(child, parent) {
return function () {
return consoleWarn('The ' + child + ' component must be used inside a ' + parent);
};
}
export function inject(namespace, child, parent) {
var defaultImpl = child && parent ? {
register: generateWarning(child, parent),
unregister: generateWarning(child, parent)
} : null;
return Vue.extend({
name: 'registrable-inject',
inject: _defineProperty({}, namespace, {
default: defaultImpl
})
});
}
export function provide(namespace) {
return Vue.extend({
name: 'registrable-provide',
methods: {
register: null,
unregister: null
},
provide: function provide() {
return _defineProperty({}, namespace, {
register: this.register,
unregister: this.unregister
});
}
});
}
//# sourceMappingURL=registrable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/registrable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,SAAS,WAAT,QAA4B,iBAA5B;AAEA,SAAS,eAAT,CAA0B,KAA1B,EAAyC,MAAzC,EAAuD;AACrD,WAAO;AAAA,eAAM,qBAAmB,KAAnB,yCAA4D,MAA5D,CAAN;AAAA,KAAP;AACD;AASD,OAAM,SAAU,MAAV,CAAoC,SAApC,EAAkD,KAAlD,EAAkE,MAAlE,EAAiF;AACrF,QAAM,cAAc,SAAS,MAAT,GAAkB;AACpC,kBAAU,gBAAgB,KAAhB,EAAuB,MAAvB,CAD0B;AAEpC,oBAAY,gBAAgB,KAAhB,EAAuB,MAAvB;AAFwB,KAAlB,GAGhB,IAHJ;AAKA,WAAO,IAAI,MAAJ,CAAW;AAChB,cAAM,oBADU;AAGhB,oCACG,SADH,EACe;AACX,qBAAS;AADE,SADf;AAHgB,KAAX,CAAP;AASD;AAED,OAAM,SAAU,OAAV,CAAmB,SAAnB,EAAoC;AACxC,WAAO,IAAI,MAAJ,CAAW;AAChB,cAAM,qBADU;AAGhB,iBAAS;AACP,sBAAU,IADH;AAEP,wBAAY;AAFL,SAHO;AAOhB,eAPgB,qBAOT;AACL,uCACG,SADH,EACe;AACX,0BAAU,KAAK,QADJ;AAEX,4BAAY,KAAK;AAFN,aADf;AAMD;AAde,KAAX,CAAP;AAgBD","sourcesContent":["import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable<T extends string> = VueConstructor<Vue & {\n [K in T]: {\n register (...props: any[]): void\n unregister (self: any): void\n }\n}>\n\nexport function inject<T extends string> (namespace: T, child?: string, parent?: string): Registrable<T> {\n const defaultImpl = child && parent ? {\n register: generateWarning(child, parent),\n unregister: generateWarning(child, parent)\n } : null\n\n return Vue.extend({\n name: 'registrable-inject',\n\n inject: {\n [namespace]: {\n default: defaultImpl\n }\n }\n })\n}\n\nexport function provide (namespace: string) {\n return Vue.extend({\n name: 'registrable-provide',\n\n methods: {\n register: null,\n unregister: null\n },\n provide () {\n return {\n [namespace]: {\n register: this.register,\n unregister: this.unregister\n }\n }\n }\n })\n}\n"],"sourceRoot":""}
+34
View File
@@ -0,0 +1,34 @@
import Vue from 'vue';
/* @vue/component */
export default Vue.extend({
name: 'returnable',
props: {
returnValue: null
},
data: function data() {
return {
isActive: false,
originalValue: null
};
},
watch: {
isActive: function isActive(val) {
if (val) {
this.originalValue = this.returnValue;
} else {
this.$emit('update:returnValue', this.originalValue);
}
}
},
methods: {
save: function save(value) {
var _this = this;
this.originalValue = value;
setTimeout(function () {
_this.isActive = false;
});
}
}
});
//# sourceMappingURL=returnable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/returnable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA;AACA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAGxB,WAAO;AACL,qBAAa;AADR,KAHiB;AAOxB,UAAM;AAAA,eAAO;AACX,sBAAU,KADC;AAEX,2BAAe;AAFJ,SAAP;AAAA,KAPkB;AAYxB,WAAO;AACL,gBADK,oBACK,GADL,EACQ;AACX,gBAAI,GAAJ,EAAS;AACP,qBAAK,aAAL,GAAqB,KAAK,WAA1B;AACD,aAFD,MAEO;AACL,qBAAK,KAAL,CAAW,oBAAX,EAAiC,KAAK,aAAtC;AACD;AACF;AAPI,KAZiB;AAsBxB,aAAS;AACP,YADO,gBACD,KADC,EACS;AAAA;;AACd,iBAAK,aAAL,GAAqB,KAArB;AACA,uBAAW,YAAK;AACd,sBAAK,QAAL,GAAgB,KAAhB;AACD,aAFD;AAGD;AANM;AAtBe,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'returnable',\n\n props: {\n returnValue: null as any\n },\n\n data: () => ({\n isActive: false,\n originalValue: null as any\n }),\n\n watch: {\n isActive (val) {\n if (val) {\n this.originalValue = this.returnValue\n } else {\n this.$emit('update:returnValue', this.originalValue)\n }\n }\n },\n\n methods: {\n save (value: any) {\n this.originalValue = value\n setTimeout(() => {\n this.isActive = false\n })\n }\n }\n})\n"],"sourceRoot":""}
+33
View File
@@ -0,0 +1,33 @@
// Directives
import Ripple from '../directives/ripple';
// Types
import Vue from 'vue';
export default Vue.extend({
name: 'rippleable',
directives: { Ripple: Ripple },
props: {
ripple: {
type: [Boolean, Object],
default: true
}
},
methods: {
genRipple: function genRipple() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (!this.ripple) return null;
data.staticClass = 'v-input--selection-controls__ripple';
data.directives = data.directives || [];
data.directives.push({
name: 'ripple',
value: { center: true }
});
data.on = Object.assign({
click: this.onChange
}, this.$listeners);
return this.$createElement('div', data);
},
onChange: function onChange() {}
}
});
//# sourceMappingURL=rippleable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/rippleable.ts"],"names":[],"mappings":";AACA,OAAO,MAAP,MAAmB,sBAAnB;AAEA;AACA,OAAO,GAAP,MAAsD,KAAtD;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,YADkB;AAGxB,gBAAY,EAAE,cAAF,EAHY;AAKxB,WAAO;AACL,gBAAQ;AACN,kBAAM,CAAC,OAAD,EAAU,MAAV,CADA;AAEN,qBAAS;AAFH;AADH,KALiB;AAYxB,aAAS;AACP,iBADO,uBACwB;AAAA,gBAApB,IAAoB,uEAAF,EAAE;;AAC7B,gBAAI,CAAC,KAAK,MAAV,EAAkB,OAAO,IAAP;AAElB,iBAAK,WAAL,GAAmB,qCAAnB;AAEA,iBAAK,UAAL,GAAkB,KAAK,UAAL,IAAmB,EAArC;AACA,iBAAK,UAAL,CAAgB,IAAhB,CAAqB;AACnB,sBAAM,QADa;AAEnB,uBAAO,EAAE,QAAQ,IAAV;AAFY,aAArB;AAIA,iBAAK,EAAL,GAAU,OAAO,MAAP,CAAc;AACtB,uBAAO,KAAK;AADU,aAAd,EAEP,KAAK,UAFE,CAAV;AAIA,mBAAO,KAAK,cAAL,CAAoB,KAApB,EAA2B,IAA3B,CAAP;AACD,SAhBM;AAiBP,gBAjBO,sBAiBC,CAAM;AAjBP;AAZe,CAAX,CAAf","sourcesContent":["// Directives\nimport Ripple from '../directives/ripple'\n\n// Types\nimport Vue, { VNode, VNodeData, VNodeDirective } from 'vue'\n\nexport default Vue.extend({\n name: 'rippleable',\n\n directives: { Ripple },\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true\n }\n },\n\n methods: {\n genRipple (data: VNodeData = {}): VNode | null {\n if (!this.ripple) return null\n\n data.staticClass = 'v-input--selection-controls__ripple'\n\n data.directives = data.directives || []\n data.directives.push({\n name: 'ripple',\n value: { center: true }\n } as VNodeDirective)\n data.on = Object.assign({\n click: this.onChange\n }, this.$listeners)\n\n return this.$createElement('div', data)\n },\n onChange () {}\n }\n})\n"],"sourceRoot":""}
+83
View File
@@ -0,0 +1,83 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
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; }
import Vue from 'vue';
import Ripple from '../directives/ripple';
export default Vue.extend({
name: 'routable',
directives: {
Ripple: Ripple
},
props: {
activeClass: String,
append: Boolean,
disabled: Boolean,
exact: {
type: Boolean,
default: undefined
},
exactActiveClass: String,
href: [String, Object],
to: [String, Object],
nuxt: Boolean,
replace: Boolean,
ripple: [Boolean, Object],
tag: String,
target: String
},
computed: {
computedRipple: function computedRipple() {
return this.ripple && !this.disabled ? this.ripple : false;
}
},
methods: {
click: function click(e) {
this.$emit('click', e);
},
generateRouteLink: function generateRouteLink(classes) {
var exact = this.exact;
var tag = void 0;
var data = _defineProperty({
attrs: { disabled: this.disabled },
class: classes,
props: {},
directives: [{
name: 'ripple',
value: this.computedRipple
}]
}, this.to ? 'nativeOn' : 'on', _extends({}, this.$listeners, {
click: this.click
}));
if (typeof this.exact === 'undefined') {
exact = this.to === '/' || this.to === Object(this.to) && this.to.path === '/';
}
if (this.to) {
// Add a special activeClass hook
// for component level styles
var activeClass = this.activeClass;
var exactActiveClass = this.exactActiveClass || activeClass;
// TODO: apply only in VListTile
if (this.proxyClass) {
activeClass += ' ' + this.proxyClass;
exactActiveClass += ' ' + this.proxyClass;
}
tag = this.nuxt ? 'nuxt-link' : 'router-link';
Object.assign(data.props, {
to: this.to,
exact: exact,
activeClass: activeClass,
exactActiveClass: exactActiveClass,
append: this.append,
replace: this.replace
});
} else {
tag = this.href && 'a' || this.tag || 'a';
if (tag === 'a' && this.href) data.attrs.href = this.href;
}
if (this.target) data.attrs.target = this.target;
return { tag: tag, data: data };
}
}
});
//# sourceMappingURL=routable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/routable.ts"],"names":[],"mappings":";;;;AAAA,OAAO,GAAP,MAA+B,KAA/B;AAGA,OAAO,MAAP,MAAsC,sBAAtC;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,UADkB;AAGxB,gBAAY;AACV;AADU,KAHY;AAOxB,WAAO;AACL,qBAAa,MADR;AAEL,gBAAQ,OAFH;AAGL,kBAAU,OAHL;AAIL,eAAO;AACL,kBAAM,OADD;AAEL,qBAAS;AAFJ,SAJF;AAQL,0BAAkB,MARb;AASL,cAAM,CAAC,MAAD,EAAS,MAAT,CATD;AAUL,YAAI,CAAC,MAAD,EAAS,MAAT,CAVC;AAWL,cAAM,OAXD;AAYL,iBAAS,OAZJ;AAaL,gBAAQ,CAAC,OAAD,EAAU,MAAV,CAbH;AAcL,aAAK,MAdA;AAeL,gBAAQ;AAfH,KAPiB;AAyBxB,cAAU;AACR,sBADQ,4BACM;AACZ,mBAAQ,KAAK,MAAL,IAAe,CAAC,KAAK,QAAtB,GAAkC,KAAK,MAAvC,GAAgD,KAAvD;AACD;AAHO,KAzBc;AA+BxB,aAAS;AACP,aADO,iBACA,CADA,EACa;AAClB,iBAAK,KAAL,CAAW,OAAX,EAAoB,CAApB;AACD,SAHM;AAIP,yBAJO,6BAIY,OAJZ,EAIwB;AAC7B,gBAAI,QAAQ,KAAK,KAAjB;AACA,gBAAI,YAAJ;AAEA,gBAAM;AACJ,uBAAO,EAAE,UAAU,KAAK,QAAjB,EADH;AAEJ,uBAAO,OAFH;AAGJ,uBAAO,EAHH;AAIJ,4BAAY,CAAC;AACX,0BAAM,QADK;AAEX,2BAAO,KAAK;AAFD,iBAAD;AAJR,eAQH,KAAK,EAAL,GAAU,UAAV,GAAuB,IARpB,eASC,KAAK,UATN;AAUF,uBAAO,KAAK;AAVV,eAAN;AAcA,gBAAI,OAAO,KAAK,KAAZ,KAAsB,WAA1B,EAAuC;AACrC,wBAAQ,KAAK,EAAL,KAAY,GAAZ,IACL,KAAK,EAAL,KAAY,OAAO,KAAK,EAAZ,CAAZ,IAA+B,KAAK,EAAL,CAAQ,IAAR,KAAiB,GADnD;AAED;AAED,gBAAI,KAAK,EAAT,EAAa;AACX;AACA;AACA,oBAAI,cAAc,KAAK,WAAvB;AACA,oBAAI,mBAAmB,KAAK,gBAAL,IAAyB,WAAhD;AAEA;AACA,oBAAK,KAAa,UAAlB,EAA8B;AAC5B,mCAAe,MAAO,KAAa,UAAnC;AACA,wCAAoB,MAAO,KAAa,UAAxC;AACD;AAED,sBAAM,KAAK,IAAL,GAAY,WAAZ,GAA0B,aAAhC;AACA,uBAAO,MAAP,CAAc,KAAK,KAAnB,EAA0B;AACxB,wBAAI,KAAK,EADe;AAExB,gCAFwB;AAGxB,4CAHwB;AAIxB,sDAJwB;AAKxB,4BAAQ,KAAK,MALW;AAMxB,6BAAS,KAAK;AANU,iBAA1B;AAQD,aArBD,MAqBO;AACL,sBAAO,KAAK,IAAL,IAAa,GAAd,IAAsB,KAAK,GAA3B,IAAkC,GAAxC;AAEA,oBAAI,QAAQ,GAAR,IAAe,KAAK,IAAxB,EAA8B,KAAK,KAAL,CAAY,IAAZ,GAAmB,KAAK,IAAxB;AAC/B;AAED,gBAAI,KAAK,MAAT,EAAiB,KAAK,KAAL,CAAY,MAAZ,GAAqB,KAAK,MAA1B;AAEjB,mBAAO,EAAE,QAAF,EAAO,UAAP,EAAP;AACD;AAzDM;AA/Be,CAAX,CAAf","sourcesContent":["import Vue, { VNodeData } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nimport Ripple, { RippleOptions } from '../directives/ripple'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean,\n default: undefined\n } as PropValidator<boolean | undefined>,\n exactActiveClass: String,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: [Boolean, Object],\n tag: String,\n target: String\n },\n\n computed: {\n computedRipple (): RippleOptions | boolean {\n return (this.ripple && !this.disabled) ? this.ripple : false\n }\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n },\n generateRouteLink (classes: any) {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: { disabled: this.disabled },\n class: classes,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n click: this.click\n }\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n // TODO: apply only in VListTile\n if ((this as any).proxyClass) {\n activeClass += ' ' + (this as any).proxyClass\n exactActiveClass += ' ' + (this as any).proxyClass\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'a'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n }\n }\n})\n"],"sourceRoot":""}
+134
View File
@@ -0,0 +1,134 @@
// Components
import VInput from '../components/VInput';
// Mixins
import Rippleable from './rippleable';
import Comparable from './comparable';
/* @vue/component */
export default VInput.extend({
name: 'selectable',
mixins: [Rippleable, Comparable],
model: {
prop: 'inputValue',
event: 'change'
},
props: {
color: {
type: String,
default: 'accent'
},
id: String,
inputValue: null,
falseValue: null,
trueValue: null,
multiple: {
type: Boolean,
default: null
},
label: String
},
data: function data(vm) {
return {
lazyValue: vm.inputValue
};
},
computed: {
computedColor: function computedColor() {
return this.isActive ? this.color : this.validationState;
},
isMultiple: function isMultiple() {
return this.multiple === true || this.multiple === null && Array.isArray(this.internalValue);
},
isActive: function isActive() {
var _this = this;
var value = this.value;
var input = this.internalValue;
if (this.isMultiple) {
if (!Array.isArray(input)) return false;
return input.some(function (item) {
return _this.valueComparator(item, value);
});
}
if (this.trueValue === undefined || this.falseValue === undefined) {
return value ? this.valueComparator(value, input) : Boolean(input);
}
return this.valueComparator(input, this.trueValue);
},
isDirty: function isDirty() {
return this.isActive;
}
},
watch: {
inputValue: function inputValue(val) {
this.lazyValue = val;
}
},
methods: {
genLabel: function genLabel() {
if (!this.hasLabel) return null;
var label = VInput.options.methods.genLabel.call(this);
label.data.on = { click: this.onChange };
return label;
},
genInput: function genInput(type, attrs) {
return this.$createElement('input', {
attrs: Object.assign({
'aria-label': this.label,
'aria-checked': this.isActive.toString(),
disabled: this.isDisabled,
id: this.id,
role: type,
type: type
}, attrs),
domProps: {
value: this.value,
checked: this.isActive
},
on: {
blur: this.onBlur,
change: this.onChange,
focus: this.onFocus,
keydown: this.onKeydown
},
ref: 'input'
});
},
onBlur: function onBlur() {
this.isFocused = false;
},
onChange: function onChange() {
var _this2 = this;
if (this.isDisabled) return;
var value = this.value;
var input = this.internalValue;
if (this.isMultiple) {
if (!Array.isArray(input)) {
input = [];
}
var length = input.length;
input = input.filter(function (item) {
return !_this2.valueComparator(item, value);
});
if (input.length === length) {
input.push(value);
}
} else if (this.trueValue !== undefined && this.falseValue !== undefined) {
input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue;
} else if (value) {
input = this.valueComparator(input, value) ? null : value;
} else {
input = !input;
}
this.validate(true, input);
this.internalValue = input;
},
onFocus: function onFocus() {
this.isFocused = true;
},
/** @abstract */
onKeydown: function onKeydown(e) {}
}
});
//# sourceMappingURL=selectable.js.map
File diff suppressed because one or more lines are too long
+14
View File
@@ -0,0 +1,14 @@
import Vue from 'vue';
export default Vue.extend({
name: 'sizeable',
props: {
large: Boolean,
medium: Boolean,
size: {
type: [Number, String]
},
small: Boolean,
xLarge: Boolean
}
});
//# sourceMappingURL=sizeable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/sizeable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,UADkB;AAGxB,WAAO;AACL,eAAO,OADF;AAEL,gBAAQ,OAFH;AAGL,cAAM;AACJ,kBAAM,CAAC,MAAD,EAAS,MAAT;AADF,SAHD;AAML,eAAO,OANF;AAOL,gBAAQ;AAPH;AAHiB,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'sizeable',\n\n props: {\n large: Boolean,\n medium: Boolean,\n size: {\n type: [Number, String]\n },\n small: Boolean,\n xLarge: Boolean\n }\n})\n"],"sourceRoot":""}
+29
View File
@@ -0,0 +1,29 @@
import Vue from 'vue';
/**
* SSRBootable
*
* @mixin
*
* Used in layout components (drawer, toolbar, content)
* to avoid an entry animation when using SSR
*/
export default Vue.extend({
name: 'ssr-bootable',
data: function data() {
return {
isBooted: false
};
},
mounted: function mounted() {
var _this = this;
// Use setAttribute instead of dataset
// because dataset does not work well
// with unit tests
window.requestAnimationFrame(function () {
_this.$el.setAttribute('data-booted', 'true');
_this.isBooted = true;
});
}
});
//# sourceMappingURL=ssr-bootable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/ssr-bootable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA;;;;;;;;AAQA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,cADkB;AAGxB,UAAM;AAAA,eAAO;AACX,sBAAU;AADC,SAAP;AAAA,KAHkB;AAOxB,WAPwB,qBAOjB;AAAA;;AACL;AACA;AACA;AACA,eAAO,qBAAP,CAA6B,YAAK;AAChC,kBAAK,GAAL,CAAS,YAAT,CAAsB,aAAtB,EAAqC,MAArC;AACA,kBAAK,QAAL,GAAgB,IAAhB;AACD,SAHD;AAID;AAfuB,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\n/**\n * SSRBootable\n *\n * @mixin\n *\n * Used in layout components (drawer, toolbar, content)\n * to avoid an entry animation when using SSR\n */\nexport default Vue.extend({\n name: 'ssr-bootable',\n\n data: () => ({\n isBooted: false\n }),\n\n mounted () {\n // Use setAttribute instead of dataset\n // because dataset does not work well\n // with unit tests\n window.requestAnimationFrame(() => {\n this.$el.setAttribute('data-booted', 'true')\n this.isBooted = true\n })\n }\n})\n"],"sourceRoot":""}
+52
View File
@@ -0,0 +1,52 @@
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
import Vue from 'vue';
import { getZIndex } from '../util/helpers';
/* @vue/component */
export default Vue.extend().extend({
name: 'stackable',
data: function data() {
return {
stackClass: 'unpecified',
stackElement: null,
stackExclude: null,
stackMinZIndex: 0,
isActive: false
};
},
computed: {
activeZIndex: function activeZIndex() {
if (typeof window === 'undefined') return 0;
var content = this.stackElement || this.$refs.content;
// Return current zindex if not active
var index = !this.isActive ? getZIndex(content) : this.getMaxZIndex(this.stackExclude || [content]) + 2;
if (index == null) return index;
// Return max current z-index (excluding self) + 2
// (2 to leave room for an overlay below, if needed)
return parseInt(index);
}
},
methods: {
getMaxZIndex: function getMaxZIndex() {
var exclude = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var base = this.$el;
// Start with lowest allowed z-index or z-index of
// base component's element, whichever is greater
var zis = [this.stackMinZIndex, getZIndex(base)];
// Convert the NodeList to an array to
// prevent an Edge bug with Symbol.iterator
// https://github.com/vuetifyjs/vuetify/issues/2146
var activeElements = [].concat(_toConsumableArray(document.getElementsByClassName(this.stackClass)));
// Get z-index for all active dialogs
for (var index = 0; index < activeElements.length; index++) {
if (!exclude.includes(activeElements[index])) {
zis.push(getZIndex(activeElements[index]));
}
}
return Math.max.apply(Math, zis);
}
}
});
//# sourceMappingURL=stackable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/stackable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,SAAS,SAAT,QAA0B,iBAA1B;AAQA;AACA,eAAe,IAAI,MAAJ,GAAsB,MAAtB,CAA6B;AAC1C,UAAM,WADoC;AAG1C,QAH0C,kBAGtC;AACF,eAAO;AACL,wBAAY,YADP;AAEL,0BAAc,IAFT;AAGL,0BAAc,IAHT;AAIL,4BAAgB,CAJX;AAKL,sBAAU;AALL,SAAP;AAOD,KAXyC;;AAY1C,cAAU;AACR,oBADQ,0BACI;AACV,gBAAI,OAAO,MAAP,KAAkB,WAAtB,EAAmC,OAAO,CAAP;AAEnC,gBAAM,UAAU,KAAK,YAAL,IAAqB,KAAK,KAAL,CAAW,OAAhD;AACA;AAEA,gBAAM,QAAQ,CAAC,KAAK,QAAN,GACV,UAAU,OAAV,CADU,GAEV,KAAK,YAAL,CAAkB,KAAK,YAAL,IAAqB,CAAC,OAAD,CAAvC,IAAoD,CAFxD;AAIA,gBAAI,SAAS,IAAb,EAAmB,OAAO,KAAP;AAEnB;AACA;AACA,mBAAO,SAAS,KAAT,CAAP;AACD;AAhBO,KAZgC;AA8B1C,aAAS;AACP,oBADO,0BAC8B;AAAA,gBAAvB,OAAuB,uEAAF,EAAE;;AACnC,gBAAM,OAAO,KAAK,GAAlB;AACA;AACA;AACA,gBAAM,MAAM,CAAC,KAAK,cAAN,EAAsB,UAAU,IAAV,CAAtB,CAAZ;AACA;AACA;AACA;AACA,gBAAM,8CAAqB,SAAS,sBAAT,CAAgC,KAAK,UAArC,CAArB,EAAN;AAEA;AACA,iBAAK,IAAI,QAAQ,CAAjB,EAAoB,QAAQ,eAAe,MAA3C,EAAmD,OAAnD,EAA4D;AAC1D,oBAAI,CAAC,QAAQ,QAAR,CAAiB,eAAe,KAAf,CAAjB,CAAL,EAA8C;AAC5C,wBAAI,IAAJ,CAAS,UAAU,eAAe,KAAf,CAAV,CAAT;AACD;AACF;AAED,mBAAO,KAAK,GAAL,aAAY,GAAZ,CAAP;AACD;AAnBM;AA9BiC,CAA7B,CAAf","sourcesContent":["import Vue from 'vue'\n\nimport { getZIndex } from '../util/helpers'\n\ninterface options extends Vue {\n $refs: {\n content: Element\n }\n}\n\n/* @vue/component */\nexport default Vue.extend<options>().extend({\n name: 'stackable',\n\n data () {\n return {\n stackClass: 'unpecified',\n stackElement: null as Element | null,\n stackExclude: null as Element[] | null,\n stackMinZIndex: 0,\n isActive: false\n }\n },\n computed: {\n activeZIndex (): number {\n if (typeof window === 'undefined') return 0\n\n const content = this.stackElement || this.$refs.content\n // Return current zindex if not active\n\n const index = !this.isActive\n ? getZIndex(content)\n : this.getMaxZIndex(this.stackExclude || [content]) + 2\n\n if (index == null) return index\n\n // Return max current z-index (excluding self) + 2\n // (2 to leave room for an overlay below, if needed)\n return parseInt(index)\n }\n },\n methods: {\n getMaxZIndex (exclude: Element[] = []) {\n const base = this.$el\n // Start with lowest allowed z-index or z-index of\n // base component's element, whichever is greater\n const zis = [this.stackMinZIndex, getZIndex(base)]\n // Convert the NodeList to an array to\n // prevent an Edge bug with Symbol.iterator\n // https://github.com/vuetifyjs/vuetify/issues/2146\n const activeElements = [...document.getElementsByClassName(this.stackClass)]\n\n // Get z-index for all active dialogs\n for (let index = 0; index < activeElements.length; index++) {\n if (!exclude.includes(activeElements[index])) {\n zis.push(getZIndex(activeElements[index]))\n }\n }\n\n return Math.max(...zis)\n }\n }\n})\n"],"sourceRoot":""}
+96
View File
@@ -0,0 +1,96 @@
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
import Vue from 'vue';
export function functionalThemeClasses(context) {
var vm = _extends({}, context.props, context.injections);
var isDark = Themeable.options.computed.isDark.call(vm);
return Themeable.options.computed.themeClasses.call({ isDark: isDark });
}
/* @vue/component */
var Themeable = Vue.extend().extend({
name: 'themeable',
provide: function provide() {
return {
theme: this.themeableProvide
};
},
inject: {
theme: {
default: {
isDark: false
}
}
},
props: {
dark: {
type: Boolean,
default: null
},
light: {
type: Boolean,
default: null
}
},
data: function data() {
return {
themeableProvide: {
isDark: false
}
};
},
computed: {
isDark: function isDark() {
if (this.dark === true) {
// explicitly dark
return true;
} else if (this.light === true) {
// explicitly light
return false;
} else {
// inherit from parent, or default false if there is none
return this.theme.isDark;
}
},
themeClasses: function themeClasses() {
return {
'theme--dark': this.isDark,
'theme--light': !this.isDark
};
},
/** Used by menus and dialogs, inherits from v-app instead of the parent */
rootIsDark: function rootIsDark() {
if (this.dark === true) {
// explicitly dark
return true;
} else if (this.light === true) {
// explicitly light
return false;
} else {
// inherit from v-app
return this.$vuetify.dark;
}
},
rootThemeClasses: function rootThemeClasses() {
return {
'theme--dark': this.rootIsDark,
'theme--light': !this.rootIsDark
};
}
},
watch: {
isDark: {
handler: function handler(newVal, oldVal) {
if (newVal !== oldVal) {
this.themeableProvide.isDark = this.isDark;
}
},
immediate: true
}
}
});
export default Themeable;
//# sourceMappingURL=themeable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/themeable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAgB,KAAhB;AAUA,OAAM,SAAU,sBAAV,CAAkC,OAAlC,EAAwD;AAC5D,QAAM,kBACD,QAAQ,KADP,EAED,QAAQ,UAFP,CAAN;AAIA,QAAM,SAAS,UAAU,OAAV,CAAkB,QAAlB,CAA2B,MAA3B,CAAkC,IAAlC,CAAuC,EAAvC,CAAf;AACA,WAAO,UAAU,OAAV,CAAkB,QAAlB,CAA2B,YAA3B,CAAwC,IAAxC,CAA6C,EAAE,cAAF,EAA7C,CAAP;AACD;AAED;AACA,IAAM,YAAY,IAAI,MAAJ,GAAwB,MAAxB,CAA+B;AAC/C,UAAM,WADyC;AAG/C,WAH+C,qBAGxC;AACL,eAAO;AACL,mBAAO,KAAK;AADP,SAAP;AAGD,KAP8C;;AAS/C,YAAQ;AACN,eAAO;AACL,qBAAS;AACP,wBAAQ;AADD;AADJ;AADD,KATuC;AAiB/C,WAAO;AACL,cAAM;AACJ,kBAAM,OADF;AAEJ,qBAAS;AAFL,SADD;AAKL,eAAO;AACL,kBAAM,OADD;AAEL,qBAAS;AAFJ;AALF,KAjBwC;AA4B/C,QA5B+C,kBA4B3C;AACF,eAAO;AACL,8BAAkB;AAChB,wBAAQ;AADQ;AADb,SAAP;AAKD,KAlC8C;;AAoC/C,cAAU;AACR,cADQ,oBACF;AACJ,gBAAI,KAAK,IAAL,KAAc,IAAlB,EAAwB;AACtB;AACA,uBAAO,IAAP;AACD,aAHD,MAGO,IAAI,KAAK,KAAL,KAAe,IAAnB,EAAyB;AAC9B;AACA,uBAAO,KAAP;AACD,aAHM,MAGA;AACL;AACA,uBAAO,KAAK,KAAL,CAAW,MAAlB;AACD;AACF,SAZO;AAaR,oBAbQ,0BAaI;AACV,mBAAO;AACL,+BAAe,KAAK,MADf;AAEL,gCAAgB,CAAC,KAAK;AAFjB,aAAP;AAID,SAlBO;;AAmBR;AACA,kBApBQ,wBAoBE;AACR,gBAAI,KAAK,IAAL,KAAc,IAAlB,EAAwB;AACtB;AACA,uBAAO,IAAP;AACD,aAHD,MAGO,IAAI,KAAK,KAAL,KAAe,IAAnB,EAAyB;AAC9B;AACA,uBAAO,KAAP;AACD,aAHM,MAGA;AACL;AACA,uBAAO,KAAK,QAAL,CAAc,IAArB;AACD;AACF,SA/BO;AAgCR,wBAhCQ,8BAgCQ;AACd,mBAAO;AACL,+BAAe,KAAK,UADf;AAEL,gCAAgB,CAAC,KAAK;AAFjB,aAAP;AAID;AArCO,KApCqC;AA4E/C,WAAO;AACL,gBAAQ;AACN,mBADM,mBACG,MADH,EACW,MADX,EACiB;AACrB,oBAAI,WAAW,MAAf,EAAuB;AACrB,yBAAK,gBAAL,CAAsB,MAAtB,GAA+B,KAAK,MAApC;AACD;AACF,aALK;;AAMN,uBAAW;AANL;AADH;AA5EwC,CAA/B,CAAlB;AAwFA,eAAe,SAAf","sourcesContent":["import Vue from 'vue'\nimport { PropValidator, RenderContext } from 'vue/types/options'\n\n/* eslint-disable-next-line no-use-before-define */\ninterface Themeable extends Vue {\n theme: {\n isDark: boolean\n }\n}\n\nexport function functionalThemeClasses (context: RenderContext): object {\n const vm = {\n ...context.props,\n ...context.injections\n }\n const isDark = Themeable.options.computed.isDark.call(vm)\n return Themeable.options.computed.themeClasses.call({ isDark })\n}\n\n/* @vue/component */\nconst Themeable = Vue.extend<Themeable>().extend({\n name: 'themeable',\n\n provide (): object {\n return {\n theme: this.themeableProvide\n }\n },\n\n inject: {\n theme: {\n default: {\n isDark: false\n }\n }\n },\n\n props: {\n dark: {\n type: Boolean,\n default: null\n } as PropValidator<boolean | null>,\n light: {\n type: Boolean,\n default: null\n } as PropValidator<boolean | null>\n },\n\n data () {\n return {\n themeableProvide: {\n isDark: false\n }\n }\n },\n\n computed: {\n isDark (): boolean {\n if (this.dark === true) {\n // explicitly dark\n return true\n } else if (this.light === true) {\n // explicitly light\n return false\n } else {\n // inherit from parent, or default false if there is none\n return this.theme.isDark\n }\n },\n themeClasses (): object {\n return {\n 'theme--dark': this.isDark,\n 'theme--light': !this.isDark\n }\n },\n /** Used by menus and dialogs, inherits from v-app instead of the parent */\n rootIsDark (): boolean {\n if (this.dark === true) {\n // explicitly dark\n return true\n } else if (this.light === true) {\n // explicitly light\n return false\n } else {\n // inherit from v-app\n return this.$vuetify.dark\n }\n },\n rootThemeClasses (): Dictionary<boolean> {\n return {\n 'theme--dark': this.rootIsDark,\n 'theme--light': !this.rootIsDark\n }\n }\n },\n\n watch: {\n isDark: {\n handler (newVal, oldVal) {\n if (newVal !== oldVal) {\n this.themeableProvide.isDark = this.isDark\n }\n },\n immediate: true\n }\n }\n})\n\nexport default Themeable\n"],"sourceRoot":""}
+30
View File
@@ -0,0 +1,30 @@
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; }
import Vue from 'vue';
export function factory() {
var _watch;
var prop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'value';
var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'input';
return Vue.extend({
name: 'toggleable',
model: { prop: prop, event: event },
props: _defineProperty({}, prop, { required: false }),
data: function data() {
return {
isActive: !!this[prop]
};
},
watch: (_watch = {}, _defineProperty(_watch, prop, function (val) {
this.isActive = !!val;
}), _defineProperty(_watch, 'isActive', function isActive(val) {
!!val !== this[prop] && this.$emit(event, val);
}), _watch)
});
}
/* eslint-disable-next-line no-redeclare */
var Toggleable = factory();
export default Toggleable;
//# sourceMappingURL=toggleable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/toggleable.ts"],"names":[],"mappings":";;AAAA,OAAO,GAAP,MAAoC,KAApC;AAMA,OAAM,SAAU,OAAV,GAAkD;AAAA;;AAAA,QAA/B,IAA+B,uEAAxB,OAAwB;AAAA,QAAf,KAAe,uEAAP,OAAO;;AACtD,WAAO,IAAI,MAAJ,CAAW;AAChB,cAAM,YADU;AAGhB,eAAO,EAAE,UAAF,EAAQ,YAAR,EAHS;AAKhB,mCACG,IADH,EACU,EAAE,UAAU,KAAZ,EADV,CALgB;AAShB,YATgB,kBASZ;AACF,mBAAO;AACL,0BAAU,CAAC,CAAC,KAAK,IAAL;AADP,aAAP;AAGD,SAbe;;AAehB,qDACG,IADH,YACU,GADV,EACa;AACT,iBAAK,QAAL,GAAgB,CAAC,CAAC,GAAlB;AACD,SAHH,yDAIY,GAJZ,EAIe;AACX,aAAC,CAAC,GAAF,KAAU,KAAK,IAAL,CAAV,IAAwB,KAAK,KAAL,CAAW,KAAX,EAAkB,GAAlB,CAAxB;AACD,SANH;AAfgB,KAAX,CAAP;AAwBD;AAED;AACA,IAAM,aAAa,SAAnB;AAEA,eAAe,UAAf","sourcesContent":["import Vue, { VueConstructor } from 'vue'\n\n/* eslint-disable-next-line no-use-before-define */\nexport type Toggleable<T extends string = 'value'> = VueConstructor<Vue & { isActive: boolean } & Record<T, any>>\n\nexport function factory<T extends string = 'value'> (prop?: T, event?: string): Toggleable<T>\nexport function factory (prop = 'value', event = 'input') {\n return Vue.extend({\n name: 'toggleable',\n\n model: { prop, event },\n\n props: {\n [prop]: { required: false }\n },\n\n data () {\n return {\n isActive: !!this[prop]\n }\n },\n\n watch: {\n [prop] (val) {\n this.isActive = !!val\n },\n isActive (val) {\n !!val !== this[prop] && this.$emit(event, val)\n }\n }\n })\n}\n\n/* eslint-disable-next-line no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n"],"sourceRoot":""}
+10
View File
@@ -0,0 +1,10 @@
import Vue from 'vue';
export default Vue.extend({
name: 'transitionable',
props: {
mode: String,
origin: String,
transition: String
}
});
//# sourceMappingURL=transitionable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/transitionable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,gBADkB;AAGxB,WAAO;AACL,cAAM,MADD;AAEL,gBAAQ,MAFH;AAGL,oBAAY;AAHP;AAHiB,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'transitionable',\n\n props: {\n mode: String,\n origin: String,\n transition: String\n }\n})\n"],"sourceRoot":""}
+53
View File
@@ -0,0 +1,53 @@
import Vue from 'vue';
export default Vue.extend({
name: 'translatable',
props: {
height: Number
},
data: function data() {
return {
elOffsetTop: 0,
parallax: 0,
parallaxDist: 0,
percentScrolled: 0,
scrollTop: 0,
windowHeight: 0,
windowBottom: 0
};
},
computed: {
imgHeight: function imgHeight() {
return this.objHeight();
}
},
beforeDestroy: function beforeDestroy() {
window.removeEventListener('scroll', this.translate, false);
window.removeEventListener('resize', this.translate, false);
},
methods: {
calcDimensions: function calcDimensions() {
var offset = this.$el.getBoundingClientRect();
this.scrollTop = window.pageYOffset;
this.parallaxDist = this.imgHeight - this.height;
this.elOffsetTop = offset.top + this.scrollTop;
this.windowHeight = window.innerHeight;
this.windowBottom = this.scrollTop + this.windowHeight;
},
listeners: function listeners() {
window.addEventListener('scroll', this.translate, false);
window.addEventListener('resize', this.translate, false);
},
/** @abstract **/
objHeight: function objHeight() {
throw new Error('Not implemented !');
},
translate: function translate() {
this.calcDimensions();
this.percentScrolled = (this.windowBottom - this.elOffsetTop) / (parseInt(this.height) + this.windowHeight);
this.parallax = Math.round(this.parallaxDist * this.percentScrolled);
}
}
});
//# sourceMappingURL=translatable.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../src/mixins/translatable.ts"],"names":[],"mappings":"AAAA,OAAO,GAAP,MAAgB,KAAhB;AAEA,eAAe,IAAI,MAAJ,CAAW;AACxB,UAAM,cADkB;AAGxB,WAAO;AACL,gBAAQ;AADH,KAHiB;AAOxB,UAAM;AAAA,eAAO;AACX,yBAAa,CADF;AAEX,sBAAU,CAFC;AAGX,0BAAc,CAHH;AAIX,6BAAiB,CAJN;AAKX,uBAAW,CALA;AAMX,0BAAc,CANH;AAOX,0BAAc;AAPH,SAAP;AAAA,KAPkB;AAiBxB,cAAU;AACR,iBADQ,uBACC;AACP,mBAAO,KAAK,SAAL,EAAP;AACD;AAHO,KAjBc;AAuBxB,iBAvBwB,2BAuBX;AACX,eAAO,mBAAP,CAA2B,QAA3B,EAAqC,KAAK,SAA1C,EAAqD,KAArD;AACA,eAAO,mBAAP,CAA2B,QAA3B,EAAqC,KAAK,SAA1C,EAAqD,KAArD;AACD,KA1BuB;;AA4BxB,aAAS;AACP,sBADO,4BACO;AACZ,gBAAM,SAAS,KAAK,GAAL,CAAS,qBAAT,EAAf;AAEA,iBAAK,SAAL,GAAiB,OAAO,WAAxB;AACA,iBAAK,YAAL,GAAoB,KAAK,SAAL,GAAiB,KAAK,MAA1C;AACA,iBAAK,WAAL,GAAmB,OAAO,GAAP,GAAa,KAAK,SAArC;AACA,iBAAK,YAAL,GAAoB,OAAO,WAA3B;AACA,iBAAK,YAAL,GAAoB,KAAK,SAAL,GAAiB,KAAK,YAA1C;AACD,SATM;AAUP,iBAVO,uBAUE;AACP,mBAAO,gBAAP,CAAwB,QAAxB,EAAkC,KAAK,SAAvC,EAAkD,KAAlD;AACA,mBAAO,gBAAP,CAAwB,QAAxB,EAAkC,KAAK,SAAvC,EAAkD,KAAlD;AACD,SAbM;;AAcP;AACA,iBAfO,uBAeE;AACP,kBAAM,IAAI,KAAJ,CAAU,mBAAV,CAAN;AACD,SAjBM;AAkBP,iBAlBO,uBAkBE;AACP,iBAAK,cAAL;AAEA,iBAAK,eAAL,GACE,CAAC,KAAK,YAAL,GAAoB,KAAK,WAA1B,KACC,SAAS,KAAK,MAAd,IAAwB,KAAK,YAD9B,CADF;AAKA,iBAAK,QAAL,GAAgB,KAAK,KAAL,CAAW,KAAK,YAAL,GAAoB,KAAK,eAApC,CAAhB;AACD;AA3BM;AA5Be,CAAX,CAAf","sourcesContent":["import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'translatable',\n\n props: {\n height: Number\n },\n\n data: () => ({\n elOffsetTop: 0,\n parallax: 0,\n parallaxDist: 0,\n percentScrolled: 0,\n scrollTop: 0,\n windowHeight: 0,\n windowBottom: 0\n }),\n\n computed: {\n imgHeight (): number {\n return this.objHeight()\n }\n },\n\n beforeDestroy () {\n window.removeEventListener('scroll', this.translate, false)\n window.removeEventListener('resize', this.translate, false)\n },\n\n methods: {\n calcDimensions () {\n const offset = this.$el.getBoundingClientRect()\n\n this.scrollTop = window.pageYOffset\n this.parallaxDist = this.imgHeight - this.height\n this.elOffsetTop = offset.top + this.scrollTop\n this.windowHeight = window.innerHeight\n this.windowBottom = this.scrollTop + this.windowHeight\n },\n listeners () {\n window.addEventListener('scroll', this.translate, false)\n window.addEventListener('resize', this.translate, false)\n },\n /** @abstract **/\n objHeight (): number {\n throw new Error('Not implemented !')\n },\n translate () {\n this.calcDimensions()\n\n this.percentScrolled = (\n (this.windowBottom - this.elOffsetTop) /\n (parseInt(this.height) + this.windowHeight)\n )\n\n this.parallax = Math.round(this.parallaxDist * this.percentScrolled)\n }\n }\n})\n"],"sourceRoot":""}
+217
View File
@@ -0,0 +1,217 @@
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
// Mixins
import Colorable from './colorable';
import { inject as RegistrableInject } from './registrable';
// Utilities
import { deepEqual } from '../util/helpers';
import { consoleError } from '../util/console';
import mixins from '../util/mixins';
/* @vue/component */
export default mixins(Colorable, RegistrableInject('form')).extend({
name: 'validatable',
props: {
disabled: Boolean,
error: Boolean,
errorCount: {
type: [Number, String],
default: 1
},
errorMessages: {
type: [String, Array],
default: function _default() {
return [];
}
},
messages: {
type: [String, Array],
default: function _default() {
return [];
}
},
readonly: Boolean,
rules: {
type: Array,
default: function _default() {
return [];
}
},
success: Boolean,
successMessages: {
type: [String, Array],
default: function _default() {
return [];
}
},
validateOnBlur: Boolean,
value: { required: false }
},
data: function data() {
return {
errorBucket: [],
hasColor: false,
hasFocused: false,
hasInput: false,
isFocused: false,
isResetting: false,
lazyValue: this.value,
valid: false
};
},
computed: {
hasError: function hasError() {
return this.internalErrorMessages.length > 0 || this.errorBucket.length > 0 || this.error;
},
// TODO: Add logic that allows the user to enable based
// upon a good validation
hasSuccess: function hasSuccess() {
return this.internalSuccessMessages.length > 0 || this.success;
},
externalError: function externalError() {
return this.internalErrorMessages.length > 0 || this.error;
},
hasMessages: function hasMessages() {
return this.validationTarget.length > 0;
},
hasState: function hasState() {
return this.hasSuccess || this.shouldValidate && this.hasError;
},
internalErrorMessages: function internalErrorMessages() {
return this.genInternalMessages(this.errorMessages);
},
internalMessages: function internalMessages() {
return this.genInternalMessages(this.messages);
},
internalSuccessMessages: function internalSuccessMessages() {
return this.genInternalMessages(this.successMessages);
},
internalValue: {
get: function get() {
return this.lazyValue;
},
set: function set(val) {
this.lazyValue = val;
this.$emit('input', val);
}
},
shouldValidate: function shouldValidate() {
if (this.externalError) return true;
if (this.isResetting) return false;
return this.validateOnBlur ? this.hasFocused && !this.isFocused : this.hasInput || this.hasFocused;
},
validations: function validations() {
return this.validationTarget.slice(0, Number(this.errorCount));
},
validationState: function validationState() {
if (this.hasError && this.shouldValidate) return 'error';
if (this.hasSuccess) return 'success';
if (this.hasColor) return this.color;
return undefined;
},
validationTarget: function validationTarget() {
if (this.internalErrorMessages.length > 0) {
return this.internalErrorMessages;
} else if (this.successMessages.length > 0) {
return this.internalSuccessMessages;
} else if (this.messages.length > 0) {
return this.internalMessages;
} else if (this.shouldValidate) {
return this.errorBucket;
} else return [];
}
},
watch: {
rules: {
handler: function handler(newVal, oldVal) {
if (deepEqual(newVal, oldVal)) return;
this.validate();
},
deep: true
},
internalValue: function internalValue() {
// If it's the first time we're setting input,
// mark it with hasInput
this.hasInput = true;
this.validateOnBlur || this.$nextTick(this.validate);
},
isFocused: function isFocused(val) {
// Should not check validation
// if disabled or readonly
if (!val && !this.disabled && !this.readonly) {
this.hasFocused = true;
this.validateOnBlur && this.validate();
}
},
isResetting: function isResetting() {
var _this = this;
setTimeout(function () {
_this.hasInput = false;
_this.hasFocused = false;
_this.isResetting = false;
_this.validate();
}, 0);
},
hasError: function hasError(val) {
if (this.shouldValidate) {
this.$emit('update:error', val);
}
},
value: function value(val) {
this.lazyValue = val;
}
},
beforeMount: function beforeMount() {
this.validate();
},
created: function created() {
this.form && this.form.register(this);
},
beforeDestroy: function beforeDestroy() {
this.form && this.form.unregister(this);
},
methods: {
genInternalMessages: function genInternalMessages(messages) {
if (!messages) return [];else if (Array.isArray(messages)) return messages;else return [messages];
},
/** @public */
reset: function reset() {
this.isResetting = true;
this.internalValue = Array.isArray(this.internalValue) ? [] : undefined;
},
/** @public */
resetValidation: function resetValidation() {
this.isResetting = true;
},
/** @public */
validate: function validate() {
var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var value = arguments[1];
var errorBucket = [];
value = value || this.internalValue;
if (force) this.hasInput = this.hasFocused = true;
for (var index = 0; index < this.rules.length; index++) {
var rule = this.rules[index];
var valid = typeof rule === 'function' ? rule(value) : rule;
if (typeof valid === 'string') {
errorBucket.push(valid);
} else if (typeof valid !== 'boolean') {
consoleError('Rules should return a string or boolean, received \'' + (typeof valid === 'undefined' ? 'undefined' : _typeof(valid)) + '\' instead', this);
}
}
this.errorBucket = errorBucket;
this.valid = errorBucket.length === 0;
return this.valid;
}
}
});
//# sourceMappingURL=validatable.js.map
File diff suppressed because one or more lines are too long