(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BootstrapTable = factory());
})(this, (function () { 'use strict';

  //
  //
  //
  //

  const $ = window.jQuery;
  const deepCopy = arg => {
    if (arg === undefined) {
      return arg
    }
    return $.fn.bootstrapTable.utils.extend(true, Array.isArray(arg) ? [] : {}, arg)
  };

  var script = {
    name: 'BootstrapTable',
    props: {
      columns: {
        type: Array,
        require: true
      },
      data: {
        type: [Array, Object],
        default () {
          return undefined
        }
      },
      options: {
        type: Object,
        default () {
          return {}
        }
      }
    },
    mounted () {
      this.$table = $(this.$el);

      this.$table.on('all.bs.table', (e, name, args) => {
        let eventName = $.fn.bootstrapTable.events[name];
        eventName = eventName.replace(/([A-Z])/g, '-$1').toLowerCase();
        this.$emit('on-all', ...args);
        this.$emit(eventName, ...args);
      });

      this._initTable();
    },
    methods: {
      _initTable () {
        const options = {
          ...deepCopy(this.options),
          columns: deepCopy(this.columns),
          data: deepCopy(this.data)
        };
        if (!this._hasInit) {
          this.$table.bootstrapTable(options);
          this._hasInit = true;
        } else {
          this.refreshOptions(options);
        }
      },
      ...(() => {
        const res = {};
        for (const method of $.fn.bootstrapTable.methods) {
          res[method] = function (...args) {
            return this.$table.bootstrapTable(method, ...args)
          };
        }
        return res
      })()
    },
    watch: {
      options: {
        handler () {
          this._initTable();
        },
        deep: true
      },
      columns: {
        handler () {
          this._initTable();
        },
        deep: true
      },
      data: {
        handler () {
          this.load(deepCopy(this.data));
        },
        deep: true
      }
    }
  };

  function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
      if (typeof shadowMode !== 'boolean') {
          createInjectorSSR = createInjector;
          createInjector = shadowMode;
          shadowMode = false;
      }
      // Vue.extend constructor export interop.
      const options = typeof script === 'function' ? script.options : script;
      // render functions
      if (template && template.render) {
          options.render = template.render;
          options.staticRenderFns = template.staticRenderFns;
          options._compiled = true;
          // functional template
          if (isFunctionalTemplate) {
              options.functional = true;
          }
      }
      // scopedId
      if (scopeId) {
          options._scopeId = scopeId;
      }
      let hook;
      if (moduleIdentifier) {
          // server build
          hook = function (context) {
              // 2.3 injection
              context =
                  context || // cached call
                      (this.$vnode && this.$vnode.ssrContext) || // stateful
                      (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional
              // 2.2 with runInNewContext: true
              if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
                  context = __VUE_SSR_CONTEXT__;
              }
              // inject component styles
              if (style) {
                  style.call(this, createInjectorSSR(context));
              }
              // register component module identifier for async chunk inference
              if (context && context._registeredComponents) {
                  context._registeredComponents.add(moduleIdentifier);
              }
          };
          // used by ssr in case component is cached and beforeCreate
          // never gets called
          options._ssrRegister = hook;
      }
      else if (style) {
          hook = shadowMode
              ? function (context) {
                  style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));
              }
              : function (context) {
                  style.call(this, createInjector(context));
              };
      }
      if (hook) {
          if (options.functional) {
              // register for functional component in vue file
              const originalRender = options.render;
              options.render = function renderWithStyleInjection(h, context) {
                  hook.call(context);
                  return originalRender(h, context);
              };
          }
          else {
              // inject component registration as beforeCreate hook
              const existing = options.beforeCreate;
              options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
          }
      }
      return script;
  }

  /* script */
  const __vue_script__ = script;

  /* template */
  var __vue_render__ = function () {
    var _vm = this;
    var _h = _vm.$createElement;
    var _c = _vm._self._c || _h;
    return _c("table")
  };
  var __vue_staticRenderFns__ = [];
  __vue_render__._withStripped = true;

    /* style */
    const __vue_inject_styles__ = undefined;
    /* scoped */
    const __vue_scope_id__ = undefined;
    /* module identifier */
    const __vue_module_identifier__ = undefined;
    /* functional template */
    const __vue_is_functional_template__ = false;
    /* style inject */
    
    /* style inject SSR */
    
    /* style inject shadow dom */
    

    
    const __vue_component__ = /*#__PURE__*/normalizeComponent(
      { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
      __vue_inject_styles__,
      __vue_script__,
      __vue_scope_id__,
      __vue_is_functional_template__,
      __vue_module_identifier__,
      false,
      undefined,
      undefined,
      undefined
    );

  return __vue_component__;

}));
