{"version":3,"sources":["webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///../../../src/mixins/bootable/index.ts","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///./src/mixins/shared/slottable/slottableMixin.js","webpack:///../../../src/mixins/dependent/index.ts","webpack:///../../../src/mixins/positionable/index.ts"],"names":["SIZE_MAP","isFontAwesome5","iconType","some","val","includes","isSvgPath","icon","test","length","VIcon","mixins","BindsAttrs","Colorable","Sizeable","Themeable","extend","name","props","dense","Boolean","disabled","left","right","size","Number","String","tag","type","required","default","computed","medium","hasClickListener","this","listeners$","click","methods","getIcon","iconName","$slots","text","trim","remapInternalIcon","getSize","sizes","xSmall","small","large","xLarge","explicitSize","keys","find","key","convertToUnit","getDefaultData","staticClass","class","attrs","undefined","attrs$","on","getSvgWrapperData","fontSize","wrapperData","style","height","width","applyColors","data","themeClasses","setTextColor","color","renderFontIcon","h","newChildren","delimiterIndex","indexOf","isMaterialIcon","push","slice","renderSvgIcon","svgData","xmlns","viewBox","role","d","renderSvgIconComponent","component","nativeOn","render","Vue","$_wrapperFor","functional","children","domProps","textContent","innerHTML","makeWatcher","property","oldVal","attr","Object","prototype","hasOwnProperty","call","$delete","$data","$set","created","$watch","immediate","eager","isBooted","hasContent","isActive","watch","$attrs","removed","showLazyContent","content","$createElement","sizeableClasses","slottableMixin","hasSlot","searchChildren","results","index","child","isDependent","$children","closeDependents","openDependents","getOpenDependents","getOpenDependentElements","result","getClickableDependentElements","$el","$refs","overlay","availableProps","absolute","bottom","fixed","top","factory","selected","filterObjectOnKeys"],"mappings":"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","file":"js/chunk-1458f7ca.5d02c89d.js","sourcesContent":["import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","import Vue from 'vue'\n\n/**\n * This mixin provides `attrs$` and `listeners$` to work around\n * vue bug https://github.com/vuejs/vue/issues/10115\n */\n\nfunction makeWatcher (property: string): ThisType & ((val: any, oldVal: any) => void) {\n return function (this: Vue, val, oldVal) {\n for (const attr in oldVal) {\n if (!Object.prototype.hasOwnProperty.call(val, attr)) {\n this.$delete(this.$data[property], attr)\n }\n }\n for (const attr in val) {\n this.$set(this.$data[property], attr, val[attr])\n }\n }\n}\n\nexport default Vue.extend({\n data: () => ({\n attrs$: {} as Dictionary,\n listeners$: {} as Dictionary,\n }),\n\n created () {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n // Make sure to use `attrs$` instead of `$attrs` (confusing right?)\n this.$watch('$attrs', makeWatcher('attrs$'), { immediate: true })\n this.$watch('$listeners', makeWatcher('listeners$'), { immediate: true })\n },\n})\n","// Utilities\nimport { removed } from '../../util/console'\n\n// Types\nimport Vue, { VNode } from 'vue'\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().extend({\n name: 'bootable',\n\n props: {\n eager: Boolean,\n },\n\n data: () => ({\n isBooted: false,\n }),\n\n computed: {\n hasContent (): boolean | undefined {\n return this.isBooted || this.eager || this.isActive\n },\n },\n\n watch: {\n isActive () {\n this.isBooted = true\n },\n },\n\n created () {\n /* istanbul ignore next */\n if ('lazy' in this.$attrs) {\n removed('lazy', this)\n }\n },\n\n methods: {\n showLazyContent (content?: () => VNode[]): VNode[] {\n return (this.hasContent && content) ? content() : [this.$createElement()]\n },\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'sizeable',\n\n props: {\n large: Boolean,\n small: Boolean,\n xLarge: Boolean,\n xSmall: Boolean,\n },\n\n computed: {\n medium (): boolean {\n return Boolean(\n !this.xSmall &&\n !this.small &&\n !this.large &&\n !this.xLarge\n )\n },\n sizeableClasses (): object {\n return {\n 'v-size--x-small': this.xSmall,\n 'v-size--small': this.small,\n 'v-size--default': this.medium,\n 'v-size--large': this.large,\n 'v-size--x-large': this.xLarge,\n }\n },\n },\n})\n","export const slottableMixin = {\r\n methods: {\r\n /**\r\n * has Slot\r\n * @param {string} name\r\n * @return {boolean}\r\n */\r\n hasSlot(name) {\r\n return !!this.$slots[name];\r\n }\r\n }\r\n};\r\n","import Vue from 'vue'\n\nimport mixins from '../../util/mixins'\nimport { VOverlay } from '../../components/VOverlay'\n\ninterface options {\n $el: HTMLElement\n $refs: {\n content?: HTMLElement\n }\n overlay?: InstanceType\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().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.$el as HTMLElement)\n result.push(...this.getOpenDependentElements())\n\n return result\n },\n },\n})\n","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\n\nexport type Positionable = VueConstructor\n\nexport function factory (selected?: S[]): Positionable\nexport function factory (selected: undefined): OptionsVue\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":""}