var $;
var dataTable;
export function setJQuery(jq) {
    $ = jq;
    dataTable = jq.fn.dataTable;
}
var StateRestore = /** @class */ (function () {
    function StateRestore(settings, opts, identifier, state, isPreDefined, successCallback) {
        if (state === void 0) { state = undefined; }
        if (isPreDefined === void 0) { isPreDefined = false; }
        if (successCallback === void 0) { successCallback = function () { return null; }; }
        // Check that the required version of DataTables is included
        if (!dataTable || !dataTable.versionCheck || !dataTable.versionCheck('1.10.0')) {
            throw new Error('StateRestore requires DataTables 1.10 or newer');
        }
        // Check that Select is included
        // eslint-disable-next-line no-extra-parens
        if (!dataTable.Buttons) {
            throw new Error('StateRestore requires Buttons');
        }
        var table = new dataTable.Api(settings);
        this.classes = $.extend(true, {}, StateRestore.classes);
        // Get options from user
        this.c = $.extend(true, {}, StateRestore.defaults, opts);
        this.s = {
            dt: table,
            identifier: identifier,
            isPreDefined: isPreDefined,
            savedState: null,
            tableId: state && state.stateRestore ? state.stateRestore.tableId : undefined
        };
        this.dom = {
            background: $('
'),
            closeButton: $('×
'),
            confirmation: $(''),
            confirmationButton: $('