var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
import { r as registerInstance, c as createEvent, g as getContext, h, d as getElement } from './core-81c93070.js';
import './_commonjsHelpers-0ffd9bcf.js';
import { b as baseIsEqual, i as isObject, a as isArrayLike, c as isIndex, e as eq, d as isSymbol, P as PieLoader, V as VERSION, p as pieContentFromConfig, f as parseNpm, m as mr, g as addPackageToContent, h as addRubric, D as DEFAULT_ENDPOINTS } from './version-38618663.js';
import { l as lib_3, a as lib_2, b as lib_1 } from './index-a35aa91d.js';
/**
 * Performs a deep comparison between two values to determine if they are
 * equivalent.
 *
 * **Note:** This method supports comparing arrays, array buffers, booleans,
 * date objects, error objects, maps, numbers, `Object` objects, regexes,
 * sets, strings, symbols, and typed arrays. `Object` objects are compared
 * by their own, not inherited, enumerable properties. Functions and DOM
 * nodes are compared by strict equality, i.e. `===`.
 *
 * @static
 * @memberOf _
 * @since 0.1.0
 * @category Lang
 * @param {*} value The value to compare.
 * @param {*} other The other value to compare.
 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
 * @example
 *
 * var object = { 'a': 1 };
 * var other = { 'a': 1 };
 *
 * _.isEqual(object, other);
 * // => true
 *
 * object === other;
 * // => false
 */
function isEqual(value, other) {
    return baseIsEqual(value, other);
}
var isEqual_1 = isEqual;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeCeil = Math.ceil, nativeMax = Math.max;
/**
 * The base implementation of `_.range` and `_.rangeRight` which doesn't
 * coerce arguments.
 *
 * @private
 * @param {number} start The start of the range.
 * @param {number} end The end of the range.
 * @param {number} step The value to increment or decrement by.
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Array} Returns the range of numbers.
 */
function baseRange(start, end, step, fromRight) {
    var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length);
    while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
    }
    return result;
}
var _baseRange = baseRange;
/**
 * Checks if the given arguments are from an iteratee call.
 *
 * @private
 * @param {*} value The potential iteratee value argument.
 * @param {*} index The potential iteratee index or key argument.
 * @param {*} object The potential iteratee object argument.
 * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
 *  else `false`.
 */
function isIterateeCall(value, index, object) {
    if (!isObject(object)) {
        return false;
    }
    var type = typeof index;
    if (type == 'number'
        ? (isArrayLike(object) && isIndex(index, object.length))
        : (type == 'string' && index in object)) {
        return eq(object[index], value);
    }
    return false;
}
var _isIterateeCall = isIterateeCall;
/** Used as references for various `Number` constants. */
var NAN = 0 / 0;
/** Used to match leading and trailing whitespace. */
var reTrim = /^\s+|\s+$/g;
/** Used to detect bad signed hexadecimal string values. */
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
/** Used to detect binary string values. */
var reIsBinary = /^0b[01]+$/i;
/** Used to detect octal string values. */
var reIsOctal = /^0o[0-7]+$/i;
/** Built-in method references without a dependency on `root`. */
var freeParseInt = parseInt;
/**
 * Converts `value` to a number.
 *
 * @static
 * @memberOf _
 * @since 4.0.0
 * @category Lang
 * @param {*} value The value to process.
 * @returns {number} Returns the number.
 * @example
 *
 * _.toNumber(3.2);
 * // => 3.2
 *
 * _.toNumber(Number.MIN_VALUE);
 * // => 5e-324
 *
 * _.toNumber(Infinity);
 * // => Infinity
 *
 * _.toNumber('3.2');
 * // => 3.2
 */
function toNumber(value) {
    if (typeof value == 'number') {
        return value;
    }
    if (isSymbol(value)) {
        return NAN;
    }
    if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
    }
    if (typeof value != 'string') {
        return value === 0 ? value : +value;
    }
    value = value.replace(reTrim, '');
    var isBinary = reIsBinary.test(value);
    return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
}
var toNumber_1 = toNumber;
/** Used as references for various `Number` constants. */
var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308;
/**
 * Converts `value` to a finite number.
 *
 * @static
 * @memberOf _
 * @since 4.12.0
 * @category Lang
 * @param {*} value The value to convert.
 * @returns {number} Returns the converted number.
 * @example
 *
 * _.toFinite(3.2);
 * // => 3.2
 *
 * _.toFinite(Number.MIN_VALUE);
 * // => 5e-324
 *
 * _.toFinite(Infinity);
 * // => 1.7976931348623157e+308
 *
 * _.toFinite('3.2');
 * // => 3.2
 */
function toFinite(value) {
    if (!value) {
        return value === 0 ? value : 0;
    }
    value = toNumber_1(value);
    if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
    }
    return value === value ? value : 0;
}
var toFinite_1 = toFinite;
/**
 * Creates a `_.range` or `_.rangeRight` function.
 *
 * @private
 * @param {boolean} [fromRight] Specify iterating from right to left.
 * @returns {Function} Returns the new range function.
 */
function createRange(fromRight) {
    return function (start, end, step) {
        if (step && typeof step != 'number' && _isIterateeCall(start, end, step)) {
            end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite_1(start);
        if (end === undefined) {
            end = start;
            start = 0;
        }
        else {
            end = toFinite_1(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite_1(step);
        return _baseRange(start, end, step, fromRight);
    };
}
var _createRange = createRange;
/**
 * Creates an array of numbers (positive and/or negative) progressing from
 * `start` up to, but not including, `end`. A step of `-1` is used if a negative
 * `start` is specified without an `end` or `step`. If `end` is not specified,
 * it's set to `start` with `start` then set to `0`.
 *
 * **Note:** JavaScript follows the IEEE-754 standard for resolving
 * floating-point values which can produce unexpected results.
 *
 * @static
 * @since 0.1.0
 * @memberOf _
 * @category Util
 * @param {number} [start=0] The start of the range.
 * @param {number} end The end of the range.
 * @param {number} [step=1] The value to increment or decrement by.
 * @returns {Array} Returns the range of numbers.
 * @see _.inRange, _.rangeRight
 * @example
 *
 * _.range(4);
 * // => [0, 1, 2, 3]
 *
 * _.range(-4);
 * // => [0, -1, -2, -3]
 *
 * _.range(1, 5);
 * // => [1, 2, 3, 4]
 *
 * _.range(0, 20, 5);
 * // => [0, 5, 10, 15]
 *
 * _.range(0, -4, -1);
 * // => [0, -1, -2, -3]
 *
 * _.range(1, 4, 0);
 * // => [1, 1, 1]
 *
 * _.range(0);
 * // => []
 */
var range = _createRange();
var range_1 = range;
var DataURLImageSupport = /** @class */ (function () {
    function DataURLImageSupport() {
    }
    DataURLImageSupport.prototype.insert = function (file, done, progressFn) {
        var reader = new FileReader();
        reader.onload = function () {
            var dataURL = reader.result;
            setTimeout(function () {
                done(null, dataURL.toString());
            }, 2000);
        };
        var progress = 0;
        progressFn(progress, 0, 100);
        range_1(1, 100).forEach(function (n) {
            setTimeout(function () {
                progressFn(n, n, 100);
            }, n * 20);
        });
        // if external asset support .. add reader.readAsArrayBuffer ..
        reader.readAsDataURL(file);
    };
    DataURLImageSupport.prototype.delete = function (src, done) {
        done();
    };
    return DataURLImageSupport;
}());
var Author = /** @class */ (function () {
    function class_1(hostRef) {
        var _this = this;
        registerInstance(this, hostRef);
        this._modelLoadedState = false;
        /**
         * Allows disabling of the default behaviour which is to look up and load the JS bundle that define the Custom Elements
         * used by the item config.
         * This if for advanced use cases when using the pie-player in a container that is managing loading of Custom Elements and Controllers.
         */
        this.disableBundler = false;
        /**
         * Adds a preview view which will render the content in another tab as it may appear to a student or instructor.
         */
        this.addPreview = false;
        this.elementsLoaded = false;
        this.pieLoader = new PieLoader();
        this.fileInput = null;
        this.imageHandler = null;
        /** external providers can set this if they need to upload the assets to the cloud etc. by default we use data urls */
        this.imageSupport = new DataURLImageSupport();
        this.version = VERSION;
        this.handleFileInputChange = function (e) {
            var input = e.target;
            if (!_this.imageHandler) {
                console.error("no image handler - but file input change triggered?");
                return;
            }
            var files = input.files;
            if (files.length < 1 || !files[0]) {
                _this.imageHandler.cancel();
                _this.imageHandler = null;
            }
            else {
                var file = files[0];
                _this.imageHandler.fileChosen(file);
                _this.fileInput.value = "";
                _this.imageSupport.insert(file, function (e, src) {
                    if (e) {
                        console.warn("error inserting image: ", e.message);
                        console.error(e);
                    }
                    _this.imageHandler.done(e, src);
                    _this.imageHandler = null;
                }, function (percent, bytes, total) { return _this.imageHandler.progress(percent, bytes, total); });
            }
        };
        this.handleInsertImage = function (e) {
            console.log("[handleInsertImage]", e);
            _this.imageHandler = e.detail;
            _this.fileInput.click();
        };
        this.handleDeleteImage = function (e) {
            console.log("[handleDeleteImage ..]", e);
            _this.imageSupport.delete(e.detail.src, e.detail.done);
        };
        this.modelUpdated = createEvent(this, "modelUpdated", 7);
        this.modelLoaded = createEvent(this, "modelLoaded", 7);
        this.doc = getContext(this, "document");
    }
    class_1.prototype.getRenderMarkup = function () {
        var markup = this.pieContentModel ? this.pieContentModel.markup : "";
        if (markup) {
            Object.keys(this.pieContentModel.elements).forEach(function (key) {
                markup = markup.split(key).join(key + "-config");
            });
            return markup;
        }
    };
    class_1.prototype.watchConfig = function (newValue, oldValue) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                if (newValue && !isEqual_1(newValue, oldValue)) {
                    try {
                        this.elementsLoaded = false;
                        this._modelLoadedState = false;
                        this.pieContentModel = pieContentFromConfig(newValue);
                        this.addConfigTags(this.pieContentModel);
                        this.loadPieElements();
                    }
                    catch (error) {
                        console.log("ERROR " + error);
                    }
                }
                return [2 /*return*/];
            });
        });
    };
    class_1.prototype.addConfigTags = function (c) {
        if (!c.markup && c.models) {
            var tags = c.models.map(function (model) {
                return "<" + model.element + "-config id=\"" + model.id + "\"></" + model.element + "-config>";
            });
            c.markup = tags.join("");
        }
    };
    class_1.prototype.watchElementsLoaded = function (newValue, oldValue) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        if (!(newValue && !oldValue)) return [3 /*break*/, 2];
                        return [4 /*yield*/, this.updateModels()];
                    case 1:
                        _a.sent();
                        _a.label = 2;
                    case 2: return [2 /*return*/];
                }
            });
        });
    };
    class_1.prototype.updateModels = function () {
        return __awaiter(this, void 0, void 0, function () {
            var tempDiv, elsWithId;
            var _this = this;
            return __generator(this, function (_a) {
                if (this.pieContentModel &&
                    this.pieContentModel.elements &&
                    this.pieContentModel.markup) {
                    if (!this.pieContentModel.models) {
                        this.pieContentModel.models = [];
                    }
                    tempDiv = this.doc.createElement("div");
                    tempDiv.innerHTML = this.pieContentModel.markup;
                    elsWithId = tempDiv.querySelectorAll("[id]");
                    // set up a model for each pie defined in the markup
                    elsWithId.forEach(function (el) {
                        var pieElName = el.tagName.toLowerCase().split("-config")[0];
                        // initialize emtpy model if this is a pie
                        if (_this.pieContentModel.elements[pieElName]) {
                            var elementId_1 = el.getAttribute("id");
                            if (!_this.pieContentModel.models.find(function (m) { return m.id === elementId_1; })) {
                                var model = { id: elementId_1, element: pieElName };
                                _this.pieContentModel.models.push(model);
                            }
                        }
                    });
                    tempDiv.remove();
                }
                if (this.pieContentModel && this.pieContentModel.models) {
                    this.pieContentModel.models.map(function (model) {
                        var pieEl = _this.el.querySelector("[id='" + model.id + "']");
                        !pieEl && (pieEl = _this.el.querySelector("[pie-id='" + model.id + "']"));
                        if (pieEl) {
                            var pieElName = pieEl.tagName.toLowerCase().split("-config")[0];
                            var packageName = parseNpm(_this.pieContentModel.elements[pieElName])
                                .name;
                            pieEl.model = model;
                            if (_this.configSettings && _this.configSettings[packageName]) {
                                pieEl.configuration = _this.configSettings[packageName];
                            }
                        }
                    });
                    if (this._modelLoadedState === false) {
                        this._modelLoadedState = true;
                        this.modelLoaded.emit(this.pieContentModel);
                    }
                }
                return [2 /*return*/];
            });
        });
    };
    class_1.prototype.componentDidUnload = function () {
        this.el.removeEventListener(lib_3.TYPE, this.handleInsertImage);
        this.el.removeEventListener(lib_2.TYPE, this.handleDeleteImage);
        this.fileInput.removeEventListener("change", this.handleFileInputChange);
    };
    class_1.prototype.componentWillLoad = function () {
        return __awaiter(this, void 0, void 0, function () {
            var _this = this;
            return __generator(this, function (_a) {
                if (this.config) {
                    this.watchConfig(this.config, {});
                }
                // Note: cannot use the @Listen decorator as creates bundling problems due
                // to `.` in event name.
                this.el.addEventListener(lib_1.TYPE, function (e) {
                    // set the internal model
                    // emit a content-item level event with the model
                    if (_this.pieContentModel && e.update) {
                        _this.pieContentModel.models.forEach(function (m) {
                            if (m.id === e.update.id && m.name === e.update.name) {
                                Object.assign(m, e.update);
                            }
                        });
                    }
                    if (_this._modelLoadedState) {
                        _this.modelUpdated.emit(_this.pieContentModel);
                    }
                });
                this.el.addEventListener(lib_3.TYPE, this.handleInsertImage);
                this.el.addEventListener(lib_2.TYPE, this.handleDeleteImage);
                return [2 /*return*/];
            });
        });
    };
    class_1.prototype.componentDidLoad = function () {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, this.afterRender()];
                    case 1:
                        _a.sent();
                        return [2 /*return*/];
                }
            });
        });
    };
    class_1.prototype.componentDidUpdate = function () {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, this.afterRender()];
                    case 1:
                        _a.sent();
                        if (this.fileInput) {
                            this.fileInput.addEventListener("change", this.handleFileInputChange);
                        }
                        return [2 /*return*/];
                }
            });
        });
    };
    class_1.prototype.loadPieElements = function () {
        return __awaiter(this, void 0, void 0, function () {
            var endpoints;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        if (!(this.config && !this.disableBundler)) return [3 /*break*/, 2];
                        endpoints = DEFAULT_ENDPOINTS.stage;
                        if (this.bundleHost &&
                            ["dev", "stage", "prod"].includes(this.bundleHost)) {
                            endpoints = DEFAULT_ENDPOINTS[this.bundleHost];
                        }
                        if (this.bundleEndpoints) {
                            endpoints = this.bundleEndpoints;
                        }
                        return [4 /*yield*/, this.pieLoader.loadCloudPies({
                                content: this.pieContentModel,
                                doc: this.doc,
                                endpoints: endpoints,
                                useCdn: false
                            })];
                    case 1:
                        _a.sent();
                        _a.label = 2;
                    case 2: return [2 /*return*/];
                }
            });
        });
    };
    class_1.prototype.renderMath = function () {
        var _this = this;
        setTimeout(function () {
            mr.renderMath(_this.el);
        }, 50);
    };
    class_1.prototype.afterRender = function () {
        return __awaiter(this, void 0, void 0, function () {
            var elements, loadedInfo;
            var _this = this;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        if (!(this.pieContentModel &&
                            this.pieContentModel.markup &&
                            !this.elementsLoaded)) return [3 /*break*/, 2];
                        elements = Object.keys(this.pieContentModel.elements).map(function (el) { return ({
                            name: el,
                            tag: el + "-config"
                        }); });
                        return [4 /*yield*/, this.pieLoader.elementsHaveLoaded(elements)];
                    case 1:
                        loadedInfo = _a.sent();
                        if (loadedInfo.val &&
                            !!loadedInfo.elements.find(function (el) { return _this.pieContentModel.elements[el.name]; })) {
                            this.elementsLoaded = true;
                            this.renderMath();
                        }
                        _a.label = 2;
                    case 2: return [2 /*return*/];
                }
            });
        });
    };
    /**
     * Utility method to add a `@pie-element/rubric` section to an item config when creating an item should be used before setting the config.
     *
     * @deprecated this method is for temporary use, will be removed at next major release
     *
     * @param config the item config to mutate
     * @param rubricModel
     */
    class_1.prototype.addRubricToConfig = function (config, rubricModel) {
        return __awaiter(this, void 0, void 0, function () {
            var configPieContent;
            return __generator(this, function (_a) {
                if (!rubricModel) {
                    rubricModel = {
                        id: "rubric",
                        element: "pie-rubric",
                        points: ["", "", "", ""],
                        maxPoints: 4,
                        excludeZero: false
                    };
                }
                configPieContent = pieContentFromConfig(config);
                addPackageToContent(configPieContent, "@pie-element/rubric", rubricModel);
                return [2 /*return*/, addRubric(configPieContent)];
            });
        });
    };
    class_1.prototype.render = function () {
        var _this = this;
        if (this.pieContentModel && this.pieContentModel.markup) {
            var markup = this.getRenderMarkup();
            if (this.addPreview) {
                return (h("pie-preview-layout", { config: this.config }, h("div", { slot: "configure" }, h("pie-spinner", { active: !this.elementsLoaded }, h("div", { innerHTML: markup }))), h("input", { type: "file", hidden: true, ref: function (r) { return (_this.fileInput = r); } })));
            }
            else {
                return (h("pie-spinner", { active: !this.elementsLoaded }, h("div", { innerHTML: markup }), h("input", { type: "file", hidden: true, ref: function (r) { return (_this.fileInput = r); } })));
            }
        }
        else {
            return h("pie-spinner", null);
        }
    };
    Object.defineProperty(class_1.prototype, "el", {
        get: function () { return getElement(this); },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(class_1, "watchers", {
        get: function () {
            return {
                "config": ["watchConfig"],
                "elementsLoaded": ["watchElementsLoaded"]
            };
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(class_1, "style", {
        get: function () { return ".pie-loading{position:absolute;height:100%;width:100%;background-color:#fff;bottom:0;left:0;right:0;top:0;z-index:9999;opacity:.4}.pie-loading.fixed{position:fixed}.pie-loading:before{-webkit-box-shadow:0 0 35px rgba(63,81,181,.9);box-shadow:0 0 35px rgba(63,81,181,.9);width:50px;height:50px;-moz-animation:spinPulse 1s infinite ease-in-out;-webkit-animation:spinPulse 1s linear infinite;margin:-25px 0 0 -25px}.pie-loading:after,.pie-loading:before{content:\"\";background-color:transparent;border:5px solid rgba(63,81,181,.9);opacity:.9;border-right:5px solid transparent;border-left:5px solid transparent;border-radius:50px;position:absolute;top:50%;left:50%}.pie-loading:after{-webkit-box-shadow:0 0 15px rgba(63,81,181,.9);box-shadow:0 0 15px rgba(63,81,181,.9);width:30px;height:30px;-moz-animation:spinoffPulse 1s infinite linear;-webkit-animation:spinoffPulse 1s linear infinite;margin:-15px 0 0 -15px}\@-webkit-keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;-webkit-box-shadow:0 0 1px rgba(63,81,181,.9);box-shadow:0 0 1px rgba(63,81,181,.9)}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}to{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}\@keyframes spinPulse{0%{-webkit-transform:rotate(160deg);transform:rotate(160deg);opacity:0;-webkit-box-shadow:0 0 1px rgba(63,81,181,.9);box-shadow:0 0 1px rgba(63,81,181,.9)}50%{-webkit-transform:rotate(145deg);transform:rotate(145deg);opacity:1}to{-webkit-transform:rotate(-320deg);transform:rotate(-320deg);opacity:0}}\@-webkit-keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}\@keyframes spinoffPulse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}"; },
        enumerable: true,
        configurable: true
    });
    return class_1;
}());
export { Author as pie_author };
