text: import {VantComponent} from '../common/component';
  import {pickerProps} from './shared';
  
  VantComponent({
      classes: ['active-class', 'toolbar-class', 'column-class'],
      props: Object.assign(Object.assign({}, pickerProps), { valueKey: {
              type: String,
              value: 'text'
          }, toolbarPosition: {
              type: String,
              value: 'top'
          }, defaultIndex: {
              type: Number,
              value: 0
          }, columns: {
              type: Array,
              value: [],
              observer(columns = []) {
                  this.simple = columns.length && !columns[0].values;
                  this.children = this.selectAllComponents('.van-picker__column');
                  if (Array.isArray(this.children) && this.children.length) {
                      this.setColumns().catch(() => { });
                  }
              }
          } }),
      beforeCreate() {
          this.children = [];
      },
      methods: {
          noop() { },
          setColumns() {
              const { data } = this;
              const columns = this.simple ? [{ values: data.columns }] : data.columns;
              const stack = columns.map((column, index) => this.setColumnValues(index, column.values));
              return Promise.all(stack);
          },
          emit(event) {
              const { type } = event.currentTarget.dataset;
              if (this.simple) {
                  this.$emit(type, {
                      value: this.getColumnValue(0),
                      index: this.getColumnIndex(0)
                  });
              }
              else {
                  this.$emit(type, {
                      value: this.getValues(),
                      index: this.getIndexes()
                  });
              }
          },
          onChange(event) {
              if (this.simple) {
                  this.$emit('change', {
                      picker: this,
                      value: this.getColumnValue(0),
                      index: this.getColumnIndex(0)
                  });
              }
              else {
                  this.$emit('change', {
                      picker: this,
                      value: this.getValues(),
                      index: event.currentTarget.dataset.index
                  });
              }
          },
          // get column instance by index
          getColumn(index) {
              return this.children[index];
          },
          // get column value by index
          getColumnValue(index) {
              const column = this.getColumn(index);
              return column && column.getValue();
          },
          // set column value by index
          setColumnValue(index, value) {
              const column = this.getColumn(index);
              if (column == null) {
                  return Promise.reject(new Error('setColumnValue: 对应列不存在'));
              }
              return column.setValue(value);
          },
          // get column option index by column index
          getColumnIndex(columnIndex) {
              return (this.getColumn(columnIndex) || {}).data.currentIndex;
          },
          // set column option index by column index
          setColumnIndex(columnIndex, optionIndex) {
              const column = this.getColumn(columnIndex);
              if (column == null) {
                  return Promise.reject(new Error('setColumnIndex: 对应列不存在'));
              }
              return column.setIndex(optionIndex);
          },
          // get options of column by index
          getColumnValues(index) {
              return (this.children[index] || {}).data.options;
          },
          // set options of column by index
          setColumnValues(index, options, needReset = true) {
              const column = this.children[index];
              if (column == null) {
                  return Promise.reject(new Error('setColumnValues: 对应列不存在'));
              }
              const isSame = JSON.stringify(column.data.options) === JSON.stringify(options);
              if (isSame) {
                  return Promise.resolve();
              }
              return column.set({ options }).then(() => {
                  if (needReset) {
                      column.setIndex(0);
                  }
              });
          },
          // get values of all columns
          getValues() {
              return this.children.map((child) => child.getValue());
          },
          // set values of all columns
          setValues(values) {
              const stack = values.map((value, index) => this.setColumnValue(index, value));
              return Promise.all(stack);
          },
          // get indexes of all columns
          getIndexes() {
              return this.children.map((child) => child.data.currentIndex);
          },
          // set indexes of all columns
          setIndexes(indexes) {
              const stack = indexes.map((optionIndex, columnIndex) => this.setColumnIndex(columnIndex, optionIndex));
              return Promise.all(stack);
          }
      }
  });
  