{"version":3,"file":"VSkeletonLoader.mjs","names":["Elevatable","Measurable","Themeable","mixins","getSlot","extend","name","props","boilerplate","Boolean","loading","tile","transition","String","type","types","Object","default","computed","attrs","isLoading","$attrs","role","classes","themeClasses","elevationClasses","$scopedSlots","rootTypes","actions","article","avatar","button","card","chip","heading","image","paragraph","sentences","table","text","methods","genBone","children","$createElement","staticClass","genBones","bone","length","split","generator","genStructure","Array","from","map","indexOf","mapBones","push","genSkeleton","on","afterEnter","resetStyles","beforeEnter","onBeforeEnter","beforeLeave","onBeforeLeave","leaveCancelled","bones","replace","el","_initialStyle","display","style","setProperty","render","h","$listeners","class","measurableStyles","undefined"],"sources":["../../../src/components/VSkeletonLoader/VSkeletonLoader.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\n// Styles\nimport './VSkeletonLoader.sass'\n\n// Mixins\nimport Elevatable from '../../mixins/elevatable'\nimport Measurable from '../../mixins/measurable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { getSlot } from '../../util/helpers'\nimport { PropValidator } from 'vue/types/options'\n\nexport interface HTMLSkeletonLoaderElement extends HTMLElement {\n  _initialStyle?: {\n    display: string | null\n    transition: string\n  }\n}\n\n/* @vue/component */\nexport default mixins(\n  Elevatable,\n  Measurable,\n  Themeable,\n).extend({\n  name: 'VSkeletonLoader',\n\n  props: {\n    boilerplate: Boolean,\n    loading: Boolean,\n    tile: Boolean,\n    transition: String,\n    type: String,\n    types: {\n      type: Object,\n      default: () => ({}),\n    } as PropValidator<Record<string, string>>,\n  },\n\n  computed: {\n    attrs (): object {\n      if (!this.isLoading) return this.$attrs\n\n      return !this.boilerplate ? {\n        'aria-busy': true,\n        'aria-live': 'polite',\n        role: 'alert',\n        ...this.$attrs,\n      } : {}\n    },\n    classes (): object {\n      return {\n        'v-skeleton-loader--boilerplate': this.boilerplate,\n        'v-skeleton-loader--is-loading': this.isLoading,\n        'v-skeleton-loader--tile': this.tile,\n        ...this.themeClasses,\n        ...this.elevationClasses,\n      }\n    },\n    isLoading (): boolean {\n      return !('default' in this.$scopedSlots) || this.loading\n    },\n    rootTypes (): Record<string, string> {\n      return {\n        actions: 'button@2',\n        article: 'heading, paragraph',\n        avatar: 'avatar',\n        button: 'button',\n        card: 'image, card-heading',\n        'card-avatar': 'image, list-item-avatar',\n        'card-heading': 'heading',\n        chip: 'chip',\n        'date-picker': 'list-item, card-heading, divider, date-picker-options, date-picker-days, actions',\n        'date-picker-options': 'text, avatar@2',\n        'date-picker-days': 'avatar@28',\n        heading: 'heading',\n        image: 'image',\n        'list-item': 'text',\n        'list-item-avatar': 'avatar, text',\n        'list-item-two-line': 'sentences',\n        'list-item-avatar-two-line': 'avatar, sentences',\n        'list-item-three-line': 'paragraph',\n        'list-item-avatar-three-line': 'avatar, paragraph',\n        paragraph: 'text@3',\n        sentences: 'text@2',\n        table: 'table-heading, table-thead, table-tbody, table-tfoot',\n        'table-heading': 'heading, text',\n        'table-thead': 'heading@6',\n        'table-tbody': 'table-row-divider@6',\n        'table-row-divider': 'table-row, divider',\n        'table-row': 'table-cell@6',\n        'table-cell': 'text',\n        'table-tfoot': 'text@2, avatar@2',\n        text: 'text',\n        ...this.types,\n      }\n    },\n  },\n\n  methods: {\n    genBone (text: string, children: VNode[]) {\n      return this.$createElement('div', {\n        staticClass: `v-skeleton-loader__${text} v-skeleton-loader__bone`,\n      }, children)\n    },\n    genBones (bone: string): VNode[] {\n      // e.g. 'text@3'\n      const [type, length] = bone.split('@') as [string, number]\n      const generator = () => this.genStructure(type)\n\n      // Generate a length array based upon\n      // value after @ in the bone string\n      return Array.from({ length }).map(generator)\n    },\n    // Fix type when this is merged\n    // https://github.com/microsoft/TypeScript/pull/33050\n    genStructure (type?: string): any {\n      let children = []\n      type = type || this.type || ''\n      const bone = this.rootTypes[type] || ''\n\n      // End of recursion, do nothing\n      /* eslint-disable-next-line no-empty, brace-style */\n      if (type === bone) {}\n      // Array of values - e.g. 'heading, paragraph, text@2'\n      else if (type.indexOf(',') > -1) return this.mapBones(type)\n      // Array of values - e.g. 'paragraph@4'\n      else if (type.indexOf('@') > -1) return this.genBones(type)\n      // Array of values - e.g. 'card@2'\n      else if (bone.indexOf(',') > -1) children = this.mapBones(bone)\n      // Array of values - e.g. 'list-item@2'\n      else if (bone.indexOf('@') > -1) children = this.genBones(bone)\n      // Single value - e.g. 'card-heading'\n      else if (bone) children.push(this.genStructure(bone))\n\n      return [this.genBone(type, children)]\n    },\n    genSkeleton () {\n      const children = []\n\n      if (!this.isLoading) children.push(getSlot(this))\n      else children.push(this.genStructure())\n\n      /* istanbul ignore else */\n      if (!this.transition) return children\n\n      /* istanbul ignore next */\n      return this.$createElement('transition', {\n        props: {\n          name: this.transition,\n        },\n        // Only show transition when\n        // content has been loaded\n        on: {\n          afterEnter: this.resetStyles,\n          beforeEnter: this.onBeforeEnter,\n          beforeLeave: this.onBeforeLeave,\n          leaveCancelled: this.resetStyles,\n        },\n      }, children)\n    },\n    mapBones (bones: string) {\n      // Remove spaces and return array of structures\n      return bones.replace(/\\s/g, '').split(',').map(this.genStructure)\n    },\n    onBeforeEnter (el: HTMLSkeletonLoaderElement) {\n      this.resetStyles(el)\n\n      if (!this.isLoading) return\n\n      el._initialStyle = {\n        display: el.style.display,\n        transition: el.style.transition,\n      }\n\n      el.style.setProperty('transition', 'none', 'important')\n    },\n    onBeforeLeave (el: HTMLSkeletonLoaderElement) {\n      el.style.setProperty('display', 'none', 'important')\n    },\n    resetStyles (el: HTMLSkeletonLoaderElement) {\n      if (!el._initialStyle) return\n\n      el.style.display = el._initialStyle.display || ''\n      el.style.transition = el._initialStyle.transition\n\n      delete el._initialStyle\n    },\n  },\n\n  render (h): VNode {\n    return h('div', {\n      staticClass: 'v-skeleton-loader',\n      attrs: this.attrs,\n      on: this.$listeners,\n      class: this.classes,\n      style: this.isLoading ? this.measurableStyles : undefined,\n    }, [this.genSkeleton()])\n  },\n})\n"],"mappings":"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"}