fixes #1662

fixes #1662

<script>
  import { getObjectValueByPath } from '../../util/helpers'

  import VCard from '../VCard'
  import VCheckbox from '../VCheckbox'
  import {
    VList,
    VListTile,
    VListTileAction,
    VListTileContent,
    VListTileTitle
  } from '../VList'
  import VMenu from '../VMenu'

  import Filterable from '../../mixins/filterable'
  import Input from '../../mixins/input'
  import Autocomplete from './mixins/autocomplete'
  import Generators from './mixins/generators'

  import ClickOutside from '../../directives/click-outside'

  export default {
    name: 'v-select',

    inheritAttrs: false,

    components: {
      VCard,
      VCheckbox,
      VList,
      VListTile,
      VListTileAction,
      VListTileContent,
      VListTileTitle,
      VMenu
    },

    directives: {
      ClickOutside
    },

    mixins: [Autocomplete, Input, Filterable, Generators],

    data () {
      return {
        cachedItems: [],
        content: {},
        inputValue: (this.multiple || this.tags) && !this.value ? [] : this.value,
        isBooted: false,
        lastItem: 20,
        lazySearch: null,
        isActive: false,
        menuIsActive: false,
        searchTimeout: null,
        selectedIndex: -1,
        selectedItems: [],
        shouldBreak: false
      }
    },

    props: {
      appendIcon: {
        type: String,
        default: 'arrow_drop_down'
      },
      auto: Boolean,
      autocomplete: Boolean,
      bottom: Boolean,
      cacheItems: Boolean,
      chips: Boolean,
      clearable: Boolean,
      close: Boolean,
      debounceSearch: {
        type: [Number, String],
        default: 200
      },
      browserAutocomplete: {
        type: String,
        default: 'on'
      },
      items: {
        type: Array,
        default: () => []
      },
      itemText: {
        type: String,
        default: 'text'
      },
      itemValue: {
        type: String,
        default: 'value'
      },
      itemDisabled: {
        type: String,
        default: 'disabled'
      },
      maxHeight: {
        type: [Number, String],
        default: 300
      },
      minWidth: {
        type: [Boolean, Number, String],
        default: false
      },
      multiple: Boolean,
      multiLine: Boolean,
      offset: Boolean,
      solo: Boolean,
      searchInput: {
        default: null
      },
      singleLine: Boolean,
      tags: Boolean,
      top: Boolean,
      returnObject: Boolean,
      overflow: Boolean,
      segmented: Boolean,
      editable: Boolean
    },

    computed: {
      classes () {
        return {
          'input-group--text-field input-group--select': true,
          'input-group--auto': this.auto,
          'input-group--overflow': this.overflow,
          'input-group--segmented': this.segmented,
          'input-group--editable': this.editable,
          'input-group--autocomplete': this.isAutocomplete,
          'input-group--single-line': this.singleLine || this.isDropdown,
          'input-group--multi-line': this.multiLine,
          'input-group--chips': this.chips,
          'input-group--solo': this.solo,
          'input-group--multiple': this.multiple
        }
      },
      computedContentClass () {
        const children = [
          'menu__content--select',
          this.auto ? 'menu__content--auto' : '',
          this.isDropdown ? 'menu__content--dropdown' : '',
          this.isAutocomplete ? 'menu__content--autocomplete' : ''
        ]

        return children.join(' ')
      },
      computedItems () {
        return this.filterDuplicates(this.items.concat(this.cachedItems))
      },
      filteredItems () {
        // If we are not actively filtering
        // Show all available items
        const items = (this.isAutocomplete &&
          this.isDirty &&
          this.searchValue === this.selectedItem)
          ? this.computedItems
          : this.filterSearch()

        return !this.auto ? items.slice(0, this.lastItem) : items
      },
      hideSelections () {
        return this.isAutocomplete &&
          !this.isMultiple &&
          this.isFocused &&
          this.isDirty &&
          !this.chips
      },
      isAutocomplete () {
        return this.autocomplete || this.editable || this.tags
      },
      isDirty () {
        return this.selectedItems.length > 0
      },
      isDropdown () {
        return this.segmented || this.overflow || this.editable || this.solo
      },
      isMultiple () {
        return this.multiple || this.tags
      },
      searchValue: {
        get () { return this.lazySearch },
        set (val) {
          if (!this.isAutocomplete ||
            this.selectedIndex > -1
          ) return

          this.lazySearch = val

          clearTimeout(this.searchTimeout)

          this.searchTimeout = setTimeout(() => {
            this.$emit('update:searchInput', val)
          }, this.debounceSearch)
        }
      },
      selectedItem () {
        if (this.isMultiple) return null

        return this.selectedItems.find(i => (
          this.getValue(i) === this.getValue(this.inputValue)
        ))
      }
    },

    watch: {
      inputValue (val) {
        // Populate selected items
        this.genSelectedItems(val)

        this.$emit('input', val)
      },
      isActive (val) {
        if (!val) {
          this.searchValue = null
          this.menuIsActive = false
          this.isFocused = false
          this.selectedIndex = -1
        } else {
          this.searchValue = this.getText(this.selectedItem)
        }

        // this.lastItem += !val ? 20 : 0
      },
      isBooted () {
        this.$nextTick(() => {
          if (this.content) {
            this.content.addEventListener('scroll', this.onScroll, false)
          }
        })
      },
      items (val) {
        if (this.cacheItems) {
          this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))
        }

        this.$refs.menu.listIndex = -1

        this.searchValue && this.$nextTick(() => {
          this.$refs.menu.listIndex = 0
        })
      },
      menuIsActive (val) {
        if (!val) return

        this.isBooted = true
        this.isActive = true
      },
      isMultiple (val) {
        this.inputValue = val ? [] : null
      },
      searchValue (val) {
        // Wrap input to next line if overflowing
        if (this.$refs.input.scrollWidth > this.$refs.input.clientWidth) {
          this.shouldBreak = true
          this.$nextTick(this.$refs.menu.updateDimensions)
        } else if (val === null) {
          this.shouldBreak = false
        }

        // Activate menu if inactive and searching
        if (this.isActive && !this.menuIsActive) {
          this.menuIsActive = true
        }

        this.$refs.menu.listIndex = null

        this.$nextTick(() => {
          this.$refs.menu.listIndex = val ? 0 : -1
        })
      },
      selectedItems () {
        clearTimeout(this.searchTimeout)

        if (this.isAutocomplete) {
          this.$nextTick(this.$refs.menu.updateDimensions)
        }
      },
      value (val) {
        this.inputValue = val
        this.validate()
      }
    },

    created () {
      if (this.tags) this.selectedItems = this.inputValue
    },

    mounted () {
      this.$vuetify.load(() => {
        if (this._isDestroyed) return

        this.content = this.$refs.menu.$refs.content
        this.genSelectedItems()
      })
    },

    beforeDestroy () {
      if (this.isBooted) {
        if (this.content) {
          this.content.removeEventListener('scroll', this.onScroll, false)
        }
      }
    },

    methods: {
      blur () {
        this.$emit('blur')
        if (this.isAutocomplete && this.$refs.input) this.$refs.input.blur()
        this.$nextTick(() => (this.isActive = false))
      },
      changeSelectedIndex (keyCode) {
        if (keyCode === 32 ||
          ![8, 37, 39, 46].includes(keyCode)
        ) return

        const indexes = this.selectedItems.length - 1

        if (keyCode === 37) {
          this.selectedIndex = this.selectedIndex === -1
            ? indexes
            : this.selectedIndex - 1
        } else if (keyCode === 39) {
          this.selectedIndex = this.selectedIndex >= indexes
            ? -1
            : this.selectedIndex + 1
        } else if (this.selectedIndex === -1) {
          this.selectedIndex = indexes
          return
        }

        if (![8, 46].includes(keyCode)) return
        const newIndex = this.selectedIndex === indexes
          ? this.selectedIndex - 1
          : this.selectedItems[this.selectedIndex + 1]
          ? this.selectedIndex
          : -1

        this.selectItem(this.selectedItems[this.selectedIndex])
        this.selectedIndex = newIndex
      },
      filterDuplicates (arr) {
        return arr.filter((el, i, self) => i === self.indexOf(el))
      },
      focus () {
        this.isActive = true
        this.isFocused = true

        if (this.$refs.input && this.isAutocomplete) {
          this.$refs.input.focus()
        }

        this.$emit('focus')
      },
      genDirectives () {
        return [{
          name: 'click-outside',
          value: () => (this.isActive = false)
        }]
      },
      genListeners () {
        const listeners = Object.assign({}, this.$listeners)
        delete listeners.input

        return {
          ...listeners,
          click: () => {
            if (this.disabled || this.readonly) return
            this.showMenuItems()
            this.selectedIndex = -1
          },
          focus: () => {
            if (this.disabled || this.readonly) return
            !this.isFocused && this.focus()
          },
          keydown: this.onKeyDown // Located in mixins/autocomplete.js
        }
      },
      genLabel () {
        const singleLine = this.singleLine || this.isDropdown
        if (singleLine && this.isDirty ||
          singleLine && this.isFocused && this.searchValue
        ) return null

        const data = {}

        if (this.id) data.attrs = { for: this.id }

        return this.$createElement('label', data, this.$slots.label || this.label)
      },
      getPropertyFromItem (item, field) {
        if (item !== Object(item)) return item

        const value = getObjectValueByPath(item, field)

        return typeof value === 'undefined' ? item : value
      },
      genSelectedItems (val) {
        val = val || this.inputValue

        let selectedItems = this.computedItems.filter(i => {
          if (!this.isMultiple) {
            return this.getValue(i) === this.getValue(val)
          } else {
            // Always return Boolean
            return val.find((j) => {
              return this.getValue(j) === this.getValue(i)
            }) !== undefined
          }
        })

        if (!selectedItems.length &&
          val != null &&
          this.tags
        ) {
          selectedItems = Array.isArray(val) ? val : [val]
        }

        this.selectedItems = selectedItems
      },
      getText (item) {
        return this.getPropertyFromItem(item, this.itemText)
      },
      getValue (item) {
        return this.getPropertyFromItem(item, this.itemValue)
      },
      inputAppendCallback () {
        if (this.clearable && this.isDirty) {
          const inputValue = this.isMultiple ? [] : null

          this.inputValue = inputValue
          this.searchValue = null
          this.$emit('change', inputValue)
          this.genSelectedItems()
        }

        this.showMenuItems()
        this.isAutocomplete && this.focus()
      },
      onScroll () {
        if (!this.isActive) {
          requestAnimationFrame(() => (this.content.scrollTop = 0))
        } else {
          const showMoreItems = (
            this.content.scrollHeight -
            (this.content.scrollTop +
            this.content.clientHeight)
          ) < 200

          if (showMoreItems) {
            this.lastItem += 20
          }
        }
      },
      selectItem (item) {
        if (!this.isMultiple) {
          this.inputValue = this.returnObject ? item : this.getValue(item)
          this.selectedItems = [item]
        } else {
          const selectedItems = []
          const inputValue = this.inputValue.slice()
          const i = this.inputValue.findIndex((i) => {
            return this.getValue(i) === this.getValue(item)
          })

          i !== -1 && inputValue.splice(i, 1) || inputValue.push(item)
          this.inputValue = inputValue.map((i) => {
            selectedItems.push(i)
            return this.returnObject ? i : this.getValue(i)
          })
          this.selectedItems = selectedItems
        }

        this.searchValue = !this.isMultiple || this.chips
          ? this.getText(this.selectedItem)
          : ''

        this.$emit('change', this.inputValue)

        this.$nextTick(() => {
          if (this.isAutocomplete &&
            this.$refs.input
          ) this.$refs.input.focus()
          else this.$el.focus()
        })
      },
      showMenuItems () {
        this.isActive = true
        this.menuIsActive = true
      }
    },

    render (h) {
      const data = {
        attrs: {
          tabindex: this.isAutocomplete || this.disabled ? -1 : this.tabindex,
          ...(this.isAutocomplete ? null : this.$attrs),
          role: this.isAutocomplete ? null : 'combobox'
        }
      }

      if (!this.isAutocomplete) {
        data.on = this.genListeners()
        data.directives = this.genDirectives()
      } else {
        data.on = {
          click: () => {
            if (this.disabled || this.readonly) return

            // Workaround for clicking select
            // when using autocomplete
            // and click doesn't target the input
            setTimeout(() => {
              this.focus()
              this.menuIsActive = true
            }, 0)
          }
        }
      }

      return this.genInputGroup([
        this.genSelectionsAndSearch(),
        this.genMenu()
      ], data)
    }
  }
</script>

<!-- TODO: Style between input-group and the components inside it should be
           better compartmentalized -->
<style lang="stylus" src="../../stylus/components/_text-fields.styl"></style>
<style lang="stylus" src="../../stylus/components/_input-groups.styl"></style>
<style lang="stylus" src="../../stylus/components/_select.styl"></style>

<script>
  import { getObjectValueByPath } from '../../util/helpers'

  import VCard from '../VCard'
  import VCheckbox from '../VCheckbox'
  import {
    VList,
    VListTile,
    VListTileAction,
    VListTileContent,
    VListTileTitle
  } from '../VList'
  import VMenu from '../VMenu'

  import Filterable from '../../mixins/filterable'
  import Input from '../../mixins/input'
  import Autocomplete from './mixins/autocomplete'
  import Generators from './mixins/generators'

  import ClickOutside from '../../directives/click-outside'

  export default {
    name: 'v-select',

    inheritAttrs: false,

    components: {
      VCard,
      VCheckbox,
      VList,
      VListTile,
      VListTileAction,
      VListTileContent,
      VListTileTitle,
      VMenu
    },

    directives: {
      ClickOutside
    },

    mixins: [Autocomplete, Input, Filterable, Generators],

    data () {
      return {
        cachedItems: [],
        content: {},
        inputValue: (this.multiple || this.tags) && !this.value ? [] : this.value,
        isBooted: false,
        lastItem: 20,
        lazySearch: null,
        isActive: false,
        menuIsActive: false,
        searchTimeout: null,
        selectedIndex: -1,
        selectedItems: [],
        shouldBreak: false
      }
    },

    props: {
      appendIcon: {
        type: String,
        default: 'arrow_drop_down'
      },
      auto: Boolean,
      autocomplete: Boolean,
      bottom: Boolean,
      cacheItems: Boolean,
      chips: Boolean,
      clearable: Boolean,
      close: Boolean,
      debounceSearch: {
        type: [Number, String],
        default: 200
      },
      browserAutocomplete: {
        type: String,
        default: 'on'
      },
      items: {
        type: Array,
        default: () => []
      },
      itemText: {
        type: String,
        default: 'text'
      },
      itemValue: {
        type: String,
        default: 'value'
      },
      itemDisabled: {
        type: String,
        default: 'disabled'
      },
      maxHeight: {
        type: [Number, String],
        default: 300
      },
      minWidth: {
        type: [Boolean, Number, String],
        default: false
      },
      multiple: Boolean,
      multiLine: Boolean,
      offset: Boolean,
      solo: Boolean,
      searchInput: {
        default: null
      },
      singleLine: Boolean,
      tags: Boolean,
      top: Boolean,
      returnObject: Boolean,
      overflow: Boolean,
      segmented: Boolean,
      editable: Boolean
    },

    computed: {
      classes () {
        return {
          'input-group--text-field input-group--select': true,
          'input-group--auto': this.auto,
          'input-group--overflow': this.overflow,
          'input-group--segmented': this.segmented,
          'input-group--editable': this.editable,
          'input-group--autocomplete': this.isAutocomplete,
          'input-group--single-line': this.singleLine || this.isDropdown,
          'input-group--multi-line': this.multiLine,
          'input-group--chips': this.chips,
          'input-group--solo': this.solo,
          'input-group--multiple': this.multiple
        }
      },
      computedContentClass () {
        const children = [
          'menu__content--select',
          this.auto ? 'menu__content--auto' : '',
          this.isDropdown ? 'menu__content--dropdown' : '',
          this.isAutocomplete ? 'menu__content--autocomplete' : ''
        ]

        return children.join(' ')
      },
      computedItems () {
        return this.filterDuplicates(this.items.concat(this.cachedItems))
      },
      filteredItems () {
        // If we are not actively filtering
        // Show all available items
        const items = (this.isAutocomplete &&
          this.isDirty &&
          this.searchValue === this.selectedItem)
          ? this.computedItems
          : this.filterSearch()

        return !this.auto ? items.slice(0, this.lastItem) : items
      },
      hideSelections () {
        return this.isAutocomplete &&
          !this.isMultiple &&
          this.isFocused &&
          this.isDirty &&
          !this.chips
      },
      isAutocomplete () {
        return this.autocomplete || this.editable || this.tags
      },
      isDirty () {
        return this.selectedItems.length > 0
      },
      isDropdown () {
        return this.segmented || this.overflow || this.editable || this.solo
      },
      isMultiple () {
        return this.multiple || this.tags
      },
      searchValue: {
        get () { return this.lazySearch },
        set (val) {
          if (!this.isAutocomplete ||
            this.selectedIndex > -1
          ) return

          this.lazySearch = val

          clearTimeout(this.searchTimeout)

          this.searchTimeout = setTimeout(() => {
            this.$emit('update:searchInput', val)
          }, this.debounceSearch)
        }
      },
      selectedItem () {
        if (this.isMultiple) return null

        return this.selectedItems.find(i => (
          this.getValue(i) === this.getValue(this.inputValue)
        ))
      }
    },

    watch: {
      inputValue (val) {
        // Populate selected items
        this.genSelectedItems(val)

        this.$emit('input', val)
      },
      isActive (val) {
        if (!val) {
          this.searchValue = null
          this.menuIsActive = false
          this.isFocused = false
          this.selectedIndex = -1
        } else {
          this.searchValue = this.getText(this.selectedItem)
        }

        // this.lastItem += !val ? 20 : 0
      },
      isBooted () {
        this.$nextTick(() => {
          if (this.content) {
            this.content.addEventListener('scroll', this.onScroll, false)
          }
        })
      },
      items (val) {
        if (this.cacheItems) {
          this.cachedItems = this.filterDuplicates(this.cachedItems.concat(val))
        }

        this.$refs.menu.listIndex = -1

        this.searchValue && this.$nextTick(() => {
          this.$refs.menu.listIndex = 0
        })
      },
      menuIsActive (val) {
        if (!val) return

        this.isBooted = true
        this.isActive = true
      },
      isMultiple (val) {
        this.inputValue = val ? [] : null
      },
      searchValue (val) {
        // Wrap input to next line if overflowing
        if (this.$refs.input.scrollWidth > this.$refs.input.clientWidth) {
          this.shouldBreak = true
          this.$nextTick(this.$refs.menu.updateDimensions)
        } else if (val === null) {
          this.shouldBreak = false
        }

        // Activate menu if inactive and searching
        if (this.isActive && !this.menuIsActive) {
          this.menuIsActive = true
        }

        this.$refs.menu.listIndex = null

        this.$nextTick(() => {
          this.$refs.menu.listIndex = val ? 0 : -1
        })
      },
      selectedItems () {
        clearTimeout(this.searchTimeout)

        if (this.isAutocomplete) {
          this.$nextTick(this.$refs.menu.updateDimensions)
        }
      },
      value (val) {
        this.inputValue = val
        this.validate()
      }
    },

    created () {
      if (this.tags) this.selectedItems = this.inputValue
    },

    mounted () {
      this.$vuetify.load(() => {
        if (this._isDestroyed) return

        this.content = this.$refs.menu.$refs.content
        this.genSelectedItems()
      })
    },

    beforeDestroy () {
      if (this.isBooted) {
        if (this.content) {
          this.content.removeEventListener('scroll', this.onScroll, false)
        }
      }
    },

    methods: {
      blur () {
        this.$emit('blur')
        if (this.isAutocomplete && this.$refs.input) this.$refs.input.blur()
        this.$nextTick(() => (this.isActive = false))
      },
      changeSelectedIndex (keyCode) {
        if (keyCode === 32 ||
          ![8, 37, 39, 46].includes(keyCode)
        ) return

        const indexes = this.selectedItems.length - 1

        if (keyCode === 37) {
          this.selectedIndex = this.selectedIndex === -1
            ? indexes
            : this.selectedIndex - 1
        } else if (keyCode === 39) {
          this.selectedIndex = this.selectedIndex >= indexes
            ? -1
            : this.selectedIndex + 1
        } else if (this.selectedIndex === -1) {
          this.selectedIndex = indexes
          return
        }

        if (![8, 46].includes(keyCode)) return
        const newIndex = this.selectedIndex === indexes
          ? this.selectedIndex - 1
          : this.selectedItems[this.selectedIndex + 1]
          ? this.selectedIndex
          : -1

        this.selectItem(this.selectedItems[this.selectedIndex])
        this.selectedIndex = newIndex
      },
      filterDuplicates (arr) {
        return arr.filter((el, i, self) => i === self.indexOf(el))
      },
      focus () {
        this.isActive = true
        this.isFocused = true

        if (this.$refs.input && this.isAutocomplete) {
          this.$refs.input.focus()
        }

        this.$emit('focus')
      },
      genDirectives () {
        return [{
          name: 'click-outside',
          value: () => (this.isActive = false)
        }]
      },
      genListeners () {
        const listeners = Object.assign({}, this.$listeners)
        delete listeners.input

        return {
          ...listeners,
          click: () => {
            if (this.disabled || this.readonly) return
            this.showMenuItems()
            this.selectedIndex = -1
          },
          focus: () => {
            if (this.disabled || this.readonly) return
            !this.isFocused && this.focus()
          },
          keydown: this.onKeyDown // Located in mixins/autocomplete.js
        }
      },
      genLabel () {
        const singleLine = this.singleLine || this.isDropdown
        if (singleLine && this.isDirty ||
          singleLine && this.isFocused && this.searchValue
        ) return null

        const data = {}

        if (this.id) data.attrs = { for: this.id }

        return this.$createElement('label', data, this.$slots.label || this.label)
      },
      getPropertyFromItem (item, field) {
        if (item !== Object(item)) return item

        const value = getObjectValueByPath(item, field)

        return typeof value === 'undefined' ? item : value
      },
      genSelectedItems (val) {
        val = val || this.inputValue

        let selectedItems = this.computedItems.filter(i => {
          if (!this.isMultiple) {
            return this.getValue(i) === this.getValue(val)
          } else {
            // Always return Boolean
            return val.find((j) => {
              return this.getValue(j) === this.getValue(i)
            }) !== undefined
          }
        })

        if (!selectedItems.length &&
          val != null &&
          this.tags
        ) {
          selectedItems = Array.isArray(val) ? val : [val]
        }

        this.selectedItems = selectedItems
      },
      getText (item) {
        return this.getPropertyFromItem(item, this.itemText)
      },
      getValue (item) {
        return this.getPropertyFromItem(item, this.itemValue)
      },
      inputAppendCallback () {
        if (this.clearable && this.isDirty) {
          const inputValue = this.isMultiple ? [] : null

          this.inputValue = inputValue
          this.$emit('change', inputValue)
          this.genSelectedItems()
        }

        this.showMenuItems()
        this.isAutocomplete && this.focus()
      },
      onScroll () {
        if (!this.isActive) {
          requestAnimationFrame(() => (this.content.scrollTop = 0))
        } else {
          const showMoreItems = (
            this.content.scrollHeight -
            (this.content.scrollTop +
            this.content.clientHeight)
          ) < 200

          if (showMoreItems) {
            this.lastItem += 20
          }
        }
      },
      selectItem (item) {
        if (!this.isMultiple) {
          this.inputValue = this.returnObject ? item : this.getValue(item)
          this.selectedItems = [item]
        } else {
          const selectedItems = []
          const inputValue = this.inputValue.slice()
          const i = this.inputValue.findIndex((i) => {
            return this.getValue(i) === this.getValue(item)
          })

          i !== -1 && inputValue.splice(i, 1) || inputValue.push(item)
          this.inputValue = inputValue.map((i) => {
            selectedItems.push(i)
            return this.returnObject ? i : this.getValue(i)
          })
          this.selectedItems = selectedItems
        }

        this.searchValue = !this.isMultiple || this.chips
          ? this.getText(this.selectedItem)
          : ''

        this.$emit('change', this.inputValue)

        this.$nextTick(() => {
          if (this.isAutocomplete &&
            this.$refs.input
          ) this.$refs.input.focus()
          else this.$el.focus()
        })
      },
      showMenuItems () {
        this.isActive = true
        this.menuIsActive = true
      }
    },

    render (h) {
      const data = {
        attrs: {
          tabindex: this.isAutocomplete || this.disabled ? -1 : this.tabindex,
          ...(this.isAutocomplete ? null : this.$attrs),
          role: this.isAutocomplete ? null : 'combobox'
        }
      }

      if (!this.isAutocomplete) {
        data.on = this.genListeners()
        data.directives = this.genDirectives()
      } else {
        data.on = {
          click: () => {
            if (this.disabled || this.readonly) return

            // Workaround for clicking select
            // when using autocomplete
            // and click doesn't target the input
            setTimeout(() => {
              this.focus()
              this.menuIsActive = true
            }, 0)
          }
        }
      }

      return this.genInputGroup([
        this.genSelectionsAndSearch(),
        this.genMenu()
      ], data)
    }
  }
</script>

<!-- TODO: Style between input-group and the components inside it should be
           better compartmentalized -->
<style lang="stylus" src="../../stylus/components/_text-fields.styl"></style>
<style lang="stylus" src="../../stylus/components/_input-groups.styl"></style>
<style lang="stylus" src="../../stylus/components/_select.styl"></style>


fix(MdButton): change type of mdRippleActive prop to null to support SSR

<template>
  <md-ripple :md-disabled="!mdRipple || disabled" :md-event-trigger="false" :md-active="mdRippleActive" @update:mdActive="active => $emit('update:mdRippleActive', active)">
    <div class="md-button-content">
      <slot />
    </div>
  </md-ripple>
</template>

<script>
  import MdRipple from 'components/MdRipple/MdRipple'

  export default {
    name: 'MdButtonContent',
    components: {
      MdRipple
    },
    props: {
      mdRipple: Boolean,
      mdRippleActive: null,
      disabled: Boolean
    }
  }
</script>

<style lang="scss">
  .md-button-content {
    position: relative;
    z-index: 2;
  }
</style>

<template>
  <md-ripple :md-disabled="!mdRipple || disabled" :md-event-trigger="false" :md-active="mdRippleActive" @update:mdActive="active => $emit('update:mdRippleActive', active)">
    <div class="md-button-content">
      <slot />
    </div>
  </md-ripple>
</template>

<script>
  import MdRipple from 'components/MdRipple/MdRipple'

  export default {
    name: 'MdButtonContent',
    components: {
      MdRipple
    },
    props: {
      mdRipple: Boolean,
      mdRippleActive: [Boolean, Event],
      disabled: Boolean
    }
  }
</script>

<style lang="scss">
  .md-button-content {
    position: relative;
    z-index: 2;
  }
</style>


Revert "Name added to input"

Revert "Name added to input"

This reverts commit 4a95641e462f98c69497a314d9fa65c9b83e2370.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jaceks-iRonin/vue-material-test.git/'


Adds login form

Adds login form

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


docs: add placeholder usage component

docs: add placeholder usage component

<template>
  <v-alert
    text
    border="left"
    v-bind="$attrs"
    v-on="$listeners"
  >
    <slot />
  </v-alert>
</template>

<script>
  export default {
    name: 'Usage',
  }
</script>

error: pathspec 'packages/docs-next/src/components/Usage.vue' did not match any file(s) known to git


Optimize InfoWindow

Optimize InfoWindow

<template lang="pug">
div(ref="contents")
  slot
</template>

<script>
import bindEvents from '../base/bindEvent.js'
import {createPoint, createSize} from '../base/factory.js'
export default {
  name: 'map-overlay-info-window',
  props: {
    show: {
      type: Boolean
    },
    position: {
      type: Object
    },
    title: {
      type: String
    },
    width: {
      type: Number
    },
    height: {
      type: Number
    },
    maxWidth: {
      type: Number
    },
    offset: {
      type: Object
    },
    maximize: {
      type: Boolean
    },
    autoPan: {
      type: Boolean
    },
    closeOnClick: {
      type: Boolean
    },
    message: {
      type: String
    }
  },
  watch: {
    show (val) {
      val ? this.openInfoWindow() : this.closeInfoWindow()
    },
    'position.lng' (val, oldVal) {
      this.reloadOverlay()
    },
    'position.lat' (val, oldVal) {
      this.reloadOverlay()
    },
    'offset.width' (val, oldVal) {
      this.reloadOverlay()
    },
    'offset.height' (val) {
      this.reloadOverlay()
    },
    maxWidth () {
      this.reloadOverlay()
    },
    width (val) {
      this.overlay.setWidth(val)
    },
    height (val) {
      this.overlay.setHeight(val)
    },
    title (val) {
      this.overlay.setTitle(val)
    },
    maximize (val) {
      val ? this.overlay.enableMaximize() : this.overlay.disableMaximize()
    },
    autoPan (val) {
      val ? this.overlay.enableAutoPan() : this.overlay.disableAutoPan()
    },
    closeOnClick (val) {
      val ? this.overlay.enableCloseOnClick() : this.overlay.disableCloseOnClick()
    }
  },
  methods: {
    addOverlay () {
      const {show, position, title, width, height, maxWidth, offset, autoPan, closeOnClick, message, maximize} = this
      const {BMap, map} = this.$parent
      const $content = this.$refs.contents
      const overlay = new BMap.InfoWindow($content, {
        width : width,     // 信息窗口宽度
        height: height,     // 信息窗口高度
        title : title, // 信息窗口标题
        maxWidth: maxWidth,
        offset: createSize(BMap, offset),
        enableAutoPan: autoPan,
        enableCloseOnClick: closeOnClick,
        enableMessage: typeof message === 'undefined',//设置允许信息窗发送短息
        message: message
      })

      maximize ? overlay.enableMaximize() : overlay.disableMaximize()
      bindEvents.call(this, overlay)
      this.overlay = overlay
      ;[].forEach.call($content.querySelectorAll('img'), $img => $img.onload = () => overlay.redraw())
      overlay.redraw()
      this.$container = map // map or marker
      show && this.openInfoWindow()
    },
    openInfoWindow () {
      const {$container, position, overlay} = this
      const {BMap, map} = this.$parent
      $container.openInfoWindow(overlay, createPoint(BMap, position))
    },
    closeInfoWindow () {
      this.$container.closeInfoWindow(this.overlay)
    },
    removeOverlay () {
      const {BMap, map} = this.$parent
      map.removeOverlay(this.overlay)
    },
    reloadOverlay () {
      this && this.$nextTick(() => {
        this.removeOverlay()
        this.addOverlay()
      })
    }
  },
  mounted () {
    this.$parent.$on('ready', () => {
      this.addOverlay()
    })
  }
}
</script>

error: pathspec 'src/overlays/InfoWindow.vue' did not match any file(s) known to git


Add project and task filters to Reports component.

<template>

            <button id="export-report" class="btn btn-primary btn-sm" v-on:click="exportReport">

                Export Report
            </button>

            <select class="custom-select form-control-sm" v-model="exportFormat">
                <option value="csv">csv</option>
                <option value="xls">xls</option>
                <option value="xlsx">xlsx</option>
                <option value="tsv">tsv</option>
                <option value="ods">ods</option>
                <option value="json">json</option>
                <option value="yaml">yaml</option>
                <option value="html">html</option>
            </select>

            <pager v-bind:next="next"
                   v-bind:previous="previous"
                   @next-page="getEntries(next)"
                   @previous-page="getEntries(previous)"></pager>

    <form name="report-filters"
          class="row mb-4 pt-3 pb-1 bg-faded rounded"
          v-on:submit.prevent
          v-on:submit="getReport">

                <select2 name="entry-project"
                         v-model="project"
                         v-bind:options="projects"
                         placeholder="Projects"
                         @select2-select="selectProjectOption"></select2>

                <select2 name="entry-task"
                         v-model="task"
                         v-bind:options="tasks"
                         placeholder="Tasks"
                         @select2-select="selectTaskOption"></select2>

            <button id="generate-report" type="submit" class="btn btn-primary btn-sm w-100">
                Generate Report
            </button>

    </form>

                    {{ moment(entryBlock.date) }}

            <entry v-for="(entry, index) in entryBlock.entries"
                v-bind:entry="entry"
                v-bind:index="index"
                v-bind:key="entry.id"
                v-bind:editable="editable">
            </entry>

            Subtotal

            Total

            {{ subtotal }}

            {{ total }}

</template>

<template>

            <button id="export-report" class="btn btn-primary btn-sm" v-on:click="exportReport">

                Export Report
            </button>

            <select class="custom-select form-control-sm" v-model="exportFormat">
                <option value="csv">csv</option>
                <option value="xls">xls</option>
                <option value="xlsx">xlsx</option>
                <option value="tsv">tsv</option>
                <option value="ods">ods</option>
                <option value="json">json</option>
                <option value="yaml">yaml</option>
                <option value="html">html</option>
            </select>

            <pager v-bind:next="next"
                   v-bind:previous="previous"
                   @next-page="getEntries(next)"
                   @previous-page="getEntries(previous)"></pager>

    <form name="report-filters"
          class="row mb-4 pt-3 pb-1 bg-faded rounded"
          v-on:submit.prevent
          v-on:submit="getReport">

            <button id="generate-report" type="submit" class="btn btn-primary btn-sm w-100">
                Generate Report
            </button>

    </form>

                    {{ moment(entryBlock.date) }}

            <entry v-for="(entry, index) in entryBlock.entries"
                v-bind:entry="entry"
                v-bind:index="index"
                v-bind:key="entry.id"
                v-bind:editable="editable">
            </entry>

            Subtotal

            Total

            {{ subtotal }}

            {{ total }}

</template>


关闭处置协议隐藏

关闭处置协议隐藏

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/water-law/vue-admin.git/'


Ensure that deal size is saved in specs page

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wappulehti-apy/diilikone-front-2017.git/'


Homepage route added

Homepage route added

<template>

Dê os primeiros passos

                        Monte seu projeto e crie seu time dos sonhos!

                    Novo projeto

Projetos criados

                <project-list></project-list>

</template>

error: pathspec 'web/assets/js/vue/routes/Home.vue' did not match any file(s) known to git


added some comments on schemas

added some comments on schemas

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MrTyx/Habitica-MagicWand.git/'


styled disc

styled disc

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Shuunen/vienyl.git/'


Added unique key to router-view

Added unique key to router-view

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/patrick-jessen/vcms.git/'


Link references to lds.org

Link references to lds.org

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/danielbushman/Jesus-Christ-study.git/'


add radio

add radio

<template>

{{title}}

{{one}}

                 <input type="radio" class="weui_check" v-model="value" id="radio_{{uuid}}_{{index}}" value="{{one}}">

</template>

error: pathspec 'src/components/Radio.vue' did not match any file(s) known to git


Update Customers.vue

Update Customers.vue

Added closing tags for customer-card and customer-row which were missing.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/w33ble/loopback-vue-app.git/'


Add support for header notice durations

Add support for header notice durations

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mplusmuseum/mplusmuseum-stories.git/'


Button component

Button component

<script>
  import f7Icon from './icon.vue';
  import LinkMixin from '../mixins/link.vue';

  export default {
    components: {
      f7Icon,
    },
    mixins: [LinkMixin],
    render(c) {
      const self = this;
      let iconEl;
      let textEl;
      if (self.text) {
        textEl = c('span', {}, self.text);
      }
      if (self.icon || self.iconMaterial || self.iconIon || self.iconFa || self.iconF7 || self.iconIfMd || self.iconIfIos) {
        iconEl = c('f7-icon', {
          props: {
            material: self.iconMaterial,
            ion: self.iconIon,
            fa: self.iconFa,
            f7: self.iconF7,
            icon: self.icon,
            ifMd: self.iconIfMd,
            ifIos: self.iconIfIos,
            size: self.iconSize,
          },
        });
      }
      self.classes.button = true;
      const linkEl = c('a', {
        class: self.classes,
        attrs: self.attrs,
        on: {
          click: self.onClick,
        },
      }, [iconEl, textEl, self.$slots.default]);

      return linkEl;
    },
    methods: {
      onClick(event) {
        this.$emit('click', event);
      },
    },
  };
</script>

error: pathspec 'src/components/button.vue' did not match any file(s) known to git


Basic invoice creation added

Basic invoice creation added

<template>

            <button id="export-report"
                    class="btn btn-primary btn-sm"
                    v-block-during-fetch
                    v-on:click="exportReport">

                Export Report
            </button>

            <select class="custom-select form-control-sm" v-model="exportFormat">
                <option value="csv">csv</option>
                <option value="xls">xls</option>
                <option value="xlsx">xlsx</option>
                <option value="tsv">tsv</option>
                <option value="ods">ods</option>
                <option value="json">json</option>
                <option value="yaml">yaml</option>
                <option value="html">html</option>
            </select>

            <button id="create-invoice"
                    class="btn btn-primary btn-sm ml-2"
                    v-block-during-fetch
                    v-on:click="createInvoice">

                Create Invoice
            </button>

            <pager v-bind:next="next"
                   v-bind:previous="previous"
                   @next-page="getEntries(next)"
                   @previous-page="getEntries(previous)"></pager>

    <form name="report-filters"
          class="row mb-4 pt-3 pb-1 bg-faded rounded"
          v-on:submit.prevent
          v-on:submit="getReport">

                <select2 id="report-filter-user"
                         v-model="user"
                         v-bind:options="users"
                         placeholder="Users"></select2>

                <select2 id="report-filter-project"
                         v-model="project"
                         v-bind:options="projects"
                         placeholder="Projects"></select2>

                <select2 id="report-filter-client"
                         v-model="client"
                         v-bind:options="clients"
                         placeholder="Clients"></select2>

                <select2 id="report-filter-task"
                         v-model="task"
                         v-bind:options="tasks"
                         placeholder="Tasks"></select2>

                        <datepicker id="report-filter-min-date"
                                    type="text"
                                    class="form-control form-control-sm date-input"
                                    v-model="dateMin"
                                    placeholder="Min. date"></datepicker>

                        <datepicker id="report-filter-max-date"
                                    type="text"
                                    class="form-control form-control-sm date-input"
                                    v-model="dateMax"
                                    placeholder="Max. date"></datepicker>

                        <select2 id="report-sort-by"
                                 v-model="orderBy"
                                 v-bind:options="orderByOptions"
                                 selected="date"
                                 placeholder="Order by"></select2>

                        <select2 id="report-order-dir"
                                 v-model="orderDir"
                                 v-bind:options="orderDirOptions"
                                 selected="desc"
                                 placeholder="Order direction"></select2>

                    <input id="report-invoiced"
                        v-model="invoiced"
                        type="checkbox"
                        class="form-check-input">
                    Invoiced?

            <button id="generate-report"
                    type="submit"
                    class="btn btn-primary btn-sm w-100"
                    v-block-during-fetch>
                Generate Report
            </button>

    </form>

                        {{ moment(entryBlock.date) }}

                <entry v-for="(entry, index) in entryBlock.entries"
                    v-bind:entry="entry"
                    v-bind:index="index"
                    v-bind:key="entry.id"
                    v-bind:editable="editable">
                </entry>

                Subtotal

                Total

                {{ subtotal }}

                {{ total }}

</template>


Move class object to new function to be called on each loop

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/praneetloke/vue-material.git/'


load settings from graphql

load settings from graphql

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/notadd/administration.git/'


adding transition

adding transition

<template>

  <button class="icon-button">
    <slot></slot>
    {{ text }}
  </button>

</template>

<script>

  module.exports = {
    props: {
      text: {
        type: String,
        required: true,
      },
    },
  };

</script>

<style lang="stylus">

  @require '~core-theme.styl'

  .icon-button

    svg
      vertical-align: middle
      fill: $core-action-normal
      transition: fill $core-time ease-out

    &:hover svg
      fill: $core-action-dark

</style>

<style lang="stylus" scoped>

  @require '~core-theme.styl'

  .icon-button
    padding-right: 8px

</style>

<template>

  <button class="icon-button">
    <slot></slot>
    {{ text }}
  </button>

</template>

<script>

  module.exports = {
    props: {
      text: {
        type: String,
        required: true,
      },
    },
  };

</script>

<style lang="stylus">

  @require '~core-theme.styl'

  .icon-button

    svg
      vertical-align: middle
      fill: $core-action-normal

    &:hover svg
      fill: $core-action-dark

</style>

<style lang="stylus" scoped>

  @require '~core-theme.styl'

  .icon-button
    padding-right: 8px

</style>


index view

index view

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NewDadaFE/newdada-daojia.git/'


Refactor image block to avoid vue language server parsing errors


😁😁😁媒体库功能完善

😁😁😁媒体库功能完善

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/S-mohan/mblog.git/'


making the height of the clear history button equal to the bar at the bottom of the request/response panes.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/codeweavers/Consign.git/'


Animation adjustments

Animation adjustments

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


remove usernae and password

remove usernae and password

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wfzong/limpid-water.git/'


[widgets] Add a component to display info-tips

<template>

  <help-circle-icon />

    {{ text }}

</template>

error: pathspec 'src/components/widgets/InfoQuestionMark.vue' did not match any file(s) known to git


update

update

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rookieroo/vueDemo.git/'


index

index


Fix incorrect postdate

Fix incorrect postdate

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ICJIA/icjia-gata.git/'


Add DrawerListTileDialog.vue

Add DrawerListTileDialog.vue

<template>
  <v-dialog
    v-model="isVisible"
  >
    <drawer-list-tile slot="activator" :icon="icon">
      {{ title }}
    </drawer-list-tile>

    <base-card @click="handleClick">
      <template slot="title">{{ title }}</template>
      <slot/>
      <template slot="button-label">{{ buttonLabel }}</template>
    </base-card>
  </v-dialog>
</template>
<script>
import BaseCard from "~/components/organisms/BaseCard.vue"
import DrawerListTile from "~/components/molecules/DrawerListTile.vue"

export default {
  name: "DrawerListTileDialog",
  components: {
    BaseCard,
    DrawerListTile
  },
  props: {
    icon: {
      type: String,
      required: true
    },
    title: {
      type: String,
      required: true
    },
    buttonLabel: {
      type: String,
      required: true
    }
  },
  data: function() {
    return {
      isVisible: false
    }
  },
  methods: {
    handleClick(ev) {
      this.isVisible = false
      this.$emit("click", ev)
    }
  }
}
</script>

error: pathspec 'components/organisms/DrawerListTileDialog.vue' did not match any file(s) known to git


regular commit

regular commit

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Chan-Chun/Introduction.git/'


Adds global style

Adds global style


添加距离的计算属性

添加距离的计算属性

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/HydeSong/MOYA.git/'


переводит клиент на русский, добавляет обработку ошибок

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/taxnuke/url-shortener.git/'


fixed the preview won't update when data changes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/BayesZou/vue-resume-editor.git/'


Listen to focus and blur events for tooltips


hotfix: updating slogan

hotfix: updating slogan

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mejiamanuel57/RAMdomizer.git/'


Style tweaks

Style tweaks

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JosefFriedrich-nodejs/baldr.git/'


Create main.vue

Create main.vue

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/hunterway55/vue-notification.git/'


Small tweak on revealer

Small tweak on revealer

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LokeCarlsson/lokecarlsson.git/'


Add ECharts' events; Do something in beforeDestory hook

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/GalenTian/vue-template.git/'


Create 404.vue

Create 404.vue

<template>

404 page not found

</template>

error: pathspec 'src/pages/404.vue' did not match any file(s) known to git


[Table] Fix for better pagination integration and filter's regex

<template>

                <slot :name="key" :value="item[key]" :item="item" :index="index">{{item[key]}}</slot>

</template>


Update carbon

Update carbon

<script>
window.BSANativeCallback = (a) => {
  const total = a.ads.length;

  if (!total) {
    const src = document.createElement('script');
    src.src = `//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=grapesjscom`;
    src.setAttribute('id', '_carbonads_js');
    const adCont = document.getElementById('native-carbon');
    adCont && adCont.appendChild(src);
  }
}

module.exports = {
  render (h) {
    return h('div', { class: 'carbon-ads', attrs: { id: 'native-carbon' }})
  },
  mounted () {
    this.load()
  },
  watch: {
    '$route' (to, from) {
      if (
        to.path !== from.path &&
        this.$el.querySelector('#carbonads')
      ) {
        this.$el.innerHTML = '';
        this.load();
      }
    }
  },
  methods: {
    initCarbon() {
      const { _bsa } = window;
      if(typeof _bsa !== 'undefined' && _bsa) {
        _bsa.init('default', 'CK7I62QJ', 'placement:grapesjscomdocs', {
          target: '#native-carbon',
        });
      }
    },
    load () {
      const s = document.createElement('script');
      // s.id = '_carbonads_js';
      // s.src = `//cdn.carbonads.com/carbon.js?serve=CKYI5KJU&placement=grapesjscom`;
      s.src = `//m.servedby-buysellads.com/monetization.js`;
      s.onload = () => this.initCarbon();
      this.$el.appendChild(s);
    }
  }
}
</script>

<style lang="stylus">
@import "~@default-theme/styles/config.styl"

.carbon-ads
  min-height 102px
  padding 1.5rem 1.5rem 0
  margin-bottom -0.5rem
  font-size 0.75rem
  a
    color #444
    font-weight normal
    display inline
  .carbon-img
    float left
    margin-right 1rem
    border 1px solid $borderColor
    img
      display block
  .carbon-poweredby
    color #999
    display block
    margin-top 0.5em

@media (max-width: $MQMobile)
  .carbon-ads
    .carbon-img img
      width 100px
      height 77px
</style>

<script>
module.exports = {
  render (h) {
    return h('div', { class: 'carbon-ads', attrs: { id: 'native-carbon' }})
  },
  mounted () {
    this.load()
  },
  watch: {
    '$route' (to, from) {
      if (
        to.path !== from.path &&
        this.$el.querySelector('#carbonads')
      ) {
        this.$el.innerHTML = '';
        this.load();
      }
    }
  },
  methods: {
    initCarbon() {
      const { _bsa } = window;
      if(typeof _bsa !== 'undefined' && _bsa) {
        _bsa.init('default', 'CK7I62QJ', 'placement:grapesjscomdocs', {
          target: '#native-carbon',
        });
      }
    },
    load () {
      const s = document.createElement('script');
      // s.id = '_carbonads_js';
      // s.src = `//cdn.carbonads.com/carbon.js?serve=CKYI5KJU&placement=grapesjscom`;
      s.src = `//m.servedby-buysellads.com/monetization.js`;
      s.onload = () => this.initCarbon();
      this.$el.appendChild(s);
    }
  }
}
</script>

<style lang="stylus">
@import "~@default-theme/styles/config.styl"

.carbon-ads
  min-height 102px
  padding 1.5rem 1.5rem 0
  margin-bottom -0.5rem
  font-size 0.75rem
  a
    color #444
    font-weight normal
    display inline
  .carbon-img
    float left
    margin-right 1rem
    border 1px solid $borderColor
    img
      display block
  .carbon-poweredby
    color #999
    display block
    margin-top 0.5em

@media (max-width: $MQMobile)
  .carbon-ads
    .carbon-img img
      width 100px
      height 77px
</style>


Fix page

Fix page

<template>

    <Content :custom="false"/>

      {{ editLinkText }}
      <OutboundLink/>

          ← <router-link v-if="prev" class="prev" :to="prev.path">
            {{ prev.title || prev.path }}
          </router-link>

          <router-link v-if="next" :to="next.path">
            {{ next.title || next.path }}
          </router-link> →

    <slot name="bottom"/>

</template>


✨ Add barchart component

✨ Add barchart component

<template>
  <svg :id="chartId" class="chart">
  </svg>
</template>

<script>
  import * as d3 from "d3";

  const zeroMargin = { top: 0, right: 0, bottom: 0, left: 0 }

  export default {
    props: {
      chartId: {
        default: 'barChart'
      },
      width: {
        default: 270,
        type: Number
      },
      height: {
        default: 130,
        type: Number
      },
      axis: {
        default: false,
        type: Boolean
      },
      axisPadding: {
        default: 5,
        type: Number
      },
      xDomain: {
        default: null
      },
      xDomain: {
        default: null
      },
      tickSize: {
        default: 10,
        type: Number
      },
      barPadding: {
        default: 13,
        type: Number
      },
      color: {
        default: ['RGB(0, 177, 240)', 'rgb(243, 43, 101)']
      },
      colorInterpolate: {
        default: d3.interpolateHcl
      },
      ease: {
        default: 'linear'
      },
      type: {
        default: 'rounded'
      },
      data: {
        required: true
      }
    },

    data (){
      return {
        margin: {
          left: 60,
          bottom: 35,
          top: 15,
          right: 0
        },
        dataset: [],
        chart: null,
        x: null,
        y: null,
        xBisect: null,
        xAxis: null,
        yAxis: null
      }
    },
    computed: {
      chartSelector () {
        return '#' + this.chartId
      }
    },
    mounted () {
      // this.dataset = _.map(this.data, 'duration')
      if (!this.axis) this.margin = zeroMargin

      // @TODO: Remove Tmp Data
      //
      for (var i = 10; i; i--) {
        this.dataset.push({
          bin: new Date(Date.now() - (i * 3600000)),
          value: Math.max(250, Math.random() * 3000 | 0)
        })
      }
      this.init()
      this.renderAxis()
      this.renderBars()
    },

    methods: {
      dimensions () {
        const w = this.width - this.margin.left - this.margin.right
        const h = this.height - this.margin.top - this.margin.bottom
        return [w, h]
      },

      init () {
        const [w, h] = this.dimensions()

        this.chart = d3.select(this.chartSelector)
                      .attr('width', this.width)
                      .attr('height', this.height)
                      .append('g')
                      .attr('transform', `translate(${this.margin.left}, ${this.margin.top})`)

        if (this.color) {
          const color = d3.scaleLinear()
            .interpolate(this.colorInterpolate)
            .range(this.color)
        }

        this.x = d3.scaleTime()
          .range([0, w])
        this.y = d3.scaleLinear()
          .range([h, 0])

        this.xAxis = d3.axisBottom()
          .scale(this.x)
          .ticks(5)
          .tickPadding(8)
          .tickSize(this.tickSize)

        this.yAxis = d3.axisLeft()
          .scale(this.y)
          .ticks(3)
          .tickPadding(8)
          .tickSize(this.tickSize)

        if (this.axis) {
          this.chart.append('g')
            .attr('class', 'x axis')
            .attr('transform', `translate(0, ${h+this.axisPadding})`)
            .call(this.xAxis)

          this.chart.append('g')
            .attr('class', 'y axis')
            .attr('transform', `translate(${-this.axisPadding}, 0)`)
            .call(this.yAxis)
        }

        this.xBisect = d3.bisector(d => d.bin).left
      },

      renderAxis () {
        const yExtent = this.yDomain || d3.extent(this.dataset, d => d.value)
        const xd = this.x.domain(this.xDomain || d3.extent(this.dataset, d => d.bin))
        const yd = this.y.domain(yExtent)

        // if (this.color) this.color.domain(yExtent)

        if (this.nice) {
          xd.nice()
          yd.nice()
        }

        this.chart.select('.x.axis').call(this.xAxis)
        this.chart.select('.y.axis').call(this.yAxis)
      },
      renderBars () {
        const [w, h] = this.dimensions()
        const width = w / this.dataset.length
        const barWidth = width - this.barPadding

        if (barWidth < 1) throw new Error('BarChart is too small for the amount of data provided')

        const column = this.chart.selectAll('.column')
          .data(this.dataset)

        column.enter()
              .append('rect')
              .attr('class', 'column')
              .attr('x', d => this.x(d.bin))
              .attr('rx', this.type == 'rounded' ? barWidth / 2 : 0)
              .attr('ry', this.type == 'rounded' ? barWidth / 2 : 0)
              .attr('width', barWidth)
              .attr('height', h)

         column.exit().remove()

        const bar = this.chart.selectAll('.bar')
          .data(this.dataset)

        // enter
        bar.enter()
          .append('rect')
          .attr('class', 'bar')
          .attr('x', d => this.x(d.bin))
          .attr('y', d => this.y(d.value))
          .attr('rx', this.type == 'rounded' ? barWidth / 2 : 0)
          .attr('ry', this.type == 'rounded' ? barWidth / 2 : 0)
          .attr('width', barWidth)
          .attr('height', d => h - this.y(d.value))

        if (this.color) bar.style('fill', d => color(d.value))
        // exit
        bar.exit().remove()
      }
    }
  }
</script>

<style>
.chart {
  /*border: 1px dotted #ddd;*/
}

.chart .column {
  fill: rgb(230, 237, 244);
}

.chart .bar {
  fill: rgb(243, 42, 100);
}

.chart .axis text {
  font: 9px sans-serif;
}

.chart .axis path,
.chart .axis line {
  fill: none;
  stroke: rgb(230, 237, 244);
  stroke-width: 1.5px;
  shape-rendering: crispEdges;
}

.chart .axis path {
  display: none;
}
</style>

error: pathspec 'web/client/components/stat/Bar.vue' did not match any file(s) known to git


Add card image for articles

Add card image for articles

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/mplusmuseum/mplusmuseum-stories.git/'


Don't show reorder icon if exam is random-ordered

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JimmehCai/VTIC.git/'


Fix form content alignment

Fix form content alignment

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wappulehti-apy/diilikone-front-2017.git/'


Fixed variables import

Fixed variables import

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/moso/moso-vue.git/'


添加字段编辑功能

添加字段编辑功能

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/www295686243/LavaCms.git/'


basic editing and enable save after change

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/chrisamow/url-ingstad.git/'


Write a loading spinner

Write a loading spinner

error: pathspec 'client/src/components/General/LoadingSpinner.vue' did not match any file(s) known to git


fix(MdField): Consider number `0` as hasValue (#1407)

fix #1406

<template>

    <slot />

    {{ valueLength }} / {{ MdField.maxlength || MdField.counter }}

    <transition name="md-input-action" appear>
      <md-button tabindex="-1" class="md-icon-button md-dense md-input-action md-clear" @click="clearInput" v-if="hasValue && mdClearable" :disabled="MdField.disabled">
        <md-clear-icon />
      </md-button>
    </transition>

    <transition name="md-input-action" appear>
      <md-button tabindex="-1" class="md-icon-button md-dense md-input-action md-toggle-password" @click="togglePassword" v-if="hasPasswordToggle">
        <md-password-off-icon v-if="MdField.togglePassword" />
        <md-password-on-icon v-else />
      </md-button>
    </transition>

</template>


Adds call to toggleLoader

Adds call to toggleLoader

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


feat: electron-vue init 文件

feat: electron-vue init 文件

<template>

Web SDK electron-vue

      appkey:
      <input type="text" v-model="appkey" size="20">

      token:<input type="text" size="110" v-model="token">

      navi:<input type="text" size="50" v-model="navi">此配置项仅针对私有部署，公有云请置空，格式为 10.10.10.10:8080

      <button @click="init">初始化链接</button>

初始化以及消息接收:

        {{data}}

</template>

error: pathspec 'electron-vue/src/renderer/components/Init.vue' did not match any file(s) known to git


Fix bug where clicking on the People nav loaded the dashboard.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ux4c/ux4c-admin.git/'


Load request body.

Load request body.

The request body is loaded when the LOAD_REQUEST mutation is fired.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/codeweavers/Consign.git/'


Allow for empty values in writing secrets

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/04n0/goldfish.git/'


took unnecessary code from folder component

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lenda/kibitzing.git/'


fix highlighting bg inconsistencies

fix highlighting bg inconsistencies

<template>

          {{ getOptionLabel(option) }}
          <button v-if="multiple" @click="deselect(option)" type="button" class="close">
            ×
          </button>

      <input
              ref="search"
              :debounce="debounce"
              v-model="search"
              @keydown.delete="maybeDeleteValue"
              @keyup.esc="onEscape"
              @keydown.up.prevent="typeAheadUp"
              @keydown.down.prevent="typeAheadDown"
              @keyup.enter.prevent="typeAheadSelect"
              @blur="open = false"
              @focus="open = true"
              type="search"
              class="form-control"
              :placeholder="searchPlaceholder"
              :readonly="!searchable"
              :style="{ width: isValueEmpty ? '100%' : 'auto' }"
      >

      <slot name="spinner">

Loading...

      </slot>

          {{ getOptionLabel(option) }}

      <transition name="fade">

      </transition>
      <transition name="fade">

          <slot name="no-options">Sorry, no matching options.</slot>

      </transition>

</template>


Prevent scrolling when viewport becomes too large.


Fix issue with object type

Fix issue with object type

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JonathanTroyer/OC-Summer-2017-Table-Web.git/'


Update invoicing vue for naming

Update invoicing vue for naming

<template>

            Client

            Amount

            Created

            Paid?

</template>

<template>

Invoices

            Project

            Amount

            Status

</template>


Panel 沾满容器

Panel 沾满容器

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/zhaoyingjie/newBlog_Frontend.git/'


UI glitch

UI glitch

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/barprive/barprive.com.git/'


Revert "新增"

Revert "新增"

This reverts commit 9d3ceecac71439394ab43335d37013c1346c8987.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tykgit/tykWarehouse.git/'


bugfix

bugfix

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/quqiufeng/element_example.git/'


EBEAST: vc/modaldialog.vue: reduce modal dialog wrappers

Signed-off-by: Tim Janik <6ec6ff229c4e1c5bbd5933ee92e6c5832ff023bb@gnu.org>

<docs>
  # VC-MODALDIALOG
  A dialog component that disables and dims everything else for exclusive dialog use.
  Using *vc-modaldialog* with *v-if* enables a modal dialog that dims all other
  elements while it is visible and constrains the focus chain. A *close* event is
  emitted on clicks outside of the dialog area, if *Escape* is pressed or the default
  *Close* button is actiavted.
  ## Events:
  *close*
  : A *close* event is emitted once the "Close" button activated.
  ## Slots:
  *header*
  : The *header* slot can be used to hold the modal dialog title.
  *default*
  : The *default* slot holds the main content.
  *footer*
  : By default, the *footer* slot holds a *Close* button which emits the *close* event.
  ## CSS Classes:
  *vc-modaldialog-mask*
  : The *vc-modaldialog-mask* CSS class is used as backdrop beneath the dialog contents to mask non-modal contents.
  *vc-modaldialog*
  : The *vc-modaldialog* CSS class contains styling for the actual dialog contents.
</docs>

<template>
  <transition name="vc-modaldialog-transition">

	<slot name="header">
	  Modal Dialog
	</slot>

	<slot name="default"></slot>

	<slot name="footer">
	  <vc-button class="vc-modaldialog-button" ref="bclose" @click="close">
	    Close
	  </vc-button>
	</slot>

  </transition>
</template>

<docs>
  # VC-MODALDIALOG
  A dialog component that disables and dims everything else for exclusive dialog use.
  Using *vc-modaldialog* with *v-if* enables a modal dialog that dims all other
  elements while it is visible and constrains the focus chain. A *close* event is
  emitted on clicks outside of the dialog area, if *Escape* is pressed or the default
  *Close* button is actiavted.
  ## Events:
  *close*
  : A *close* event is emitted once the "Close" button activated.
  ## Slots:
  *header*
  : The *header* slot can be used to hold the modal dialog title.
  *default*
  : The *default* slot holds the main content.
  *footer*
  : By default, the *footer* slot holds a *Close* button which emits the *close* event.
  ## CSS Classes:
  *vc-modaldialog-mask*
  : The *vc-modaldialog-mask* CSS class is used as backdrop beneath the dialog contents to mask non-modal contents.
  *vc-modaldialog-container*
  : The *vc-modaldialog-container* CSS class contains styling for the actual dialog contents.
</docs>

<template>
  <transition name="vc-modaldialog-transition">

	    <slot name="header">
	      Modal Dialog
	    </slot>

	    <slot name="default"></slot>

	    <slot name="footer">
	      <vc-button class="vc-modaldialog-button" ref="bclose" @click="close">
		Close
	      </vc-button>
	    </slot>

  </transition>
</template>


Changed Sidebar alphabetically.

Changed Sidebar alphabetically.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-admin.git/'


Added input box for variable wrap_ttl.

Added input box for variable wrap_ttl.


add header content

add header content

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/kcikkick/Nodeboot_vue2.0.git/'


add table

add table

<template>

		<el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
			<el-form :inline="true" :model="filters">
				<el-form-item>
					<el-input v-model="filters.name" placeholder="姓名"></el-input>
				</el-form-item>
				<el-form-item>
					<el-button type="primary" v-on:click="getUsers">查询</el-button>
				</el-form-item>
				<el-form-item>
					<el-button type="primary" @click="handleAdd">新增</el-button>
				</el-form-item>
			</el-form>
		</el-col>

		<el-table :data="users" highlight-current-row v-loading="listLoading" @selection-change="selsChange" style="width: 100%;">
			<el-table-column type="selection" width="55">
			</el-table-column>
			<el-table-column type="index" width="60">
			</el-table-column>
			<el-table-column prop="name" label="姓名" width="120" sortable>
			</el-table-column>
			<el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>
			</el-table-column>
			<el-table-column prop="age" label="年龄" width="100" sortable>
			</el-table-column>
			<el-table-column prop="birth" label="生日" width="120" sortable>
			</el-table-column>
			<el-table-column prop="addr" label="地址" min-width="180" sortable>
			</el-table-column>
			<el-table-column label="操作" width="150">
				<template scope="scope">
					<el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
					<el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">删除</el-button>
				</template>
			</el-table-column>
		</el-table>

		<el-col :span="24" class="toolbar">
			<el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
			<el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="20" :total="total" style="float:right;">
			</el-pagination>
		</el-col>

		<el-dialog title="编辑" v-model="editFormVisible" :close-on-click-modal="false">
			<el-form :model="editForm" label-width="80px" :rules="editFormRules" ref="editForm">
				<el-form-item label="姓名" prop="name">
					<el-input v-model="editForm.name" auto-complete="off"></el-input>
				</el-form-item>
				<el-form-item label="性别">
					<el-radio-group v-model="editForm.sex">
						<el-radio class="radio" :label="1">男</el-radio>
						<el-radio class="radio" :label="0">女</el-radio>
					</el-radio-group>
				</el-form-item>
				<el-form-item label="年龄">
					<el-input-number v-model="editForm.age" :min="0" :max="200"></el-input-number>
				</el-form-item>
				<el-form-item label="生日">
					<el-date-picker type="date" placeholder="选择日期" v-model="editForm.birth"></el-date-picker>
				</el-form-item>
				<el-form-item label="地址">
					<el-input type="textarea" v-model="editForm.addr"></el-input>
				</el-form-item>
			</el-form>

				<el-button @click.native="editFormVisible = false">取消</el-button>
				<el-button type="primary" @click.native="editSubmit" :loading="editLoading">提交</el-button>

		</el-dialog>

		<el-dialog title="新增" v-model="addFormVisible" :close-on-click-modal="false">
			<el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
				<el-form-item label="姓名" prop="name">
					<el-input v-model="addForm.name" auto-complete="off"></el-input>
				</el-form-item>
				<el-form-item label="性别">
					<el-radio-group v-model="addForm.sex">
						<el-radio class="radio" :label="1">男</el-radio>
						<el-radio class="radio" :label="0">女</el-radio>
					</el-radio-group>
				</el-form-item>
				<el-form-item label="年龄">
					<el-input-number v-model="addForm.age" :min="0" :max="200"></el-input-number>
				</el-form-item>
				<el-form-item label="生日">
					<el-date-picker type="date" placeholder="选择日期" v-model="addForm.birth"></el-date-picker>
				</el-form-item>
				<el-form-item label="地址">
					<el-input type="textarea" v-model="addForm.addr"></el-input>
				</el-form-item>
			</el-form>

				<el-button @click.native="addFormVisible = false">取消</el-button>
				<el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>

		</el-dialog>

</template>

error: pathspec 'src/views/nav1/Table.vue' did not match any file(s) known to git


Change grant sort to expiration date/asc

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ICJIA/icjia-gata.git/'


Fix refresh data button to left bottom of page with an alert.


reset form column's with in component Mail

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/notadd/administration.git/'


Cursor

Cursor

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JosefFriedrich-nodejs/baldr.git/'


Update the stored date on route changes for `/events`

This is to keep the data on the Events view in sync with the router
params and application as a whole.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/astronote/astronote-docker.git/'


Refactoring the date string

Refactoring the date string

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/egoconf/egoconf.git/'


Create a new entryBlock when adding an Entry with a new date.

<template>

            <router-link to="/reports/" class="btn btn-primary btn-sm">

                Create Reports
            </router-link>
            <pager :next="next"
                   :previous="previous"
                   @next-page="getEntries(next)"
                   @previous-page="getEntries(previous)"></pager>

            Date

            Task

            Project

            Note

            Duration

    <form name="entry-add"
          class="row mb-4 py-2 bg-faded rounded-bottom"
          v-if="global.perms.add_entry"
          v-on:submit.prevent
          v-on:submit="submitEntry">

            <datepicker-input @date-select="dateSelect"></datepicker-input>

            <tasks-select @task-select="taskSelect"></tasks-select>

            <projects-select @project-select="projectSelect"></projects-select>

            <input name="entry-note"
                   type="text"
                   class="form-control form-control-sm"
                   v-model="note"
                   placeholder="Note" />

            <input name="entry-duration"
                   type="text"
                   class="form-control form-control-sm text-right font-weight-bold"
                   v-model="duration"
                   placeholder="0:00"
                   required />

            <button name="entry-add-submit"
                    type="submit"
                    class="btn btn-success btn-sm w-100">
                Add
            </button>

    </form>

                    {{ moment(entryBlock.date) }}

            <entry v-for="(entry, index) in entryBlock.entries"
                v-bind:entry="entry"
                v-bind:index="index"
                v-bind:key="entry.id"
                v-bind:editable="editable">
            </entry>

            Subtotal

            Total

            {{ subtotal }}

            {{ total }}

</template>


Better solution on form-name

Better solution on form-name

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/LokeCarlsson/lokecarlsson.git/'


change-colr

change-colr

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/wu38607/whj-website.git/'


fix(users): fix pin regeneration

fix(users): fix pin regeneration

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/buckless-team/admin.git/'


Hover on action links.

Hover on action links.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ux4c/ux4c-admin.git/'


Added toolbar style

Added toolbar style

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/moso/moso-vue.git/'


add h-entry microformat classes

add h-entry microformat classes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/stefanjudis/stefan-judis-website.git/'


Adicionando loading para tela de callback

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/saitolabs/thematchmaker.git/'


return 'TBD' if date is invalid

return 'TBD' if date is invalid

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/NathanielDavid/Sumie.git/'


file documentation

file documentation

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jaceks-iRonin/vue-material-test.git/'


update

update

update

<template lang="html">

test

</template>

error: pathspec 'generators/vue/templates/src/js/test.vue' did not match any file(s) known to git


updated docs

updated docs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/praneetloke/vue-material.git/'


Changes

Changes

1. Showing the description if available
2. Enabled Author and Date

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/chetanraj/rssrdr-vue.git/'


Reset 'exam' object once finished

Reset 'exam' object once finished

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/JimmehCai/VTIC.git/'


learnt about transition between two elements

error: pathspec '02' did not match any file(s) known to git
error: pathspec 'vue-cli/14/src/App.vue' did not match any file(s) known to git


[tree]:add node-expand and node-collapse event

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/iamnewsea/element-pzx.git/'


Real darkness

Real darkness

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/m31271n/darkness.git/'


change name

change name

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/MervynFang/rxjsxvue.git/'


Adjust background color, Looks to state for onboarding bool