$Config

Allows users to configure scripts

Fra og med 21.11.2024. Se den nyeste version.

Dette script bør ikke installeres direkte. Det er et bibliotek, som andre scripts kan inkludere med metadirektivet // @require https://update.greasyfork.org/scripts/446506/1488610/%24Config.js

var $Config;
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/******/ 	var __webpack_modules__ = ({

/***/ "./ts/consts.ts":
/*!**********************!*\
  !*** ./ts/consts.ts ***!
  \**********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   SOCKET_ID: () => (/* binding */ SOCKET_ID)
/* harmony export */ });
const SOCKET_ID = 'tree-frame';


/***/ }),

/***/ "./ts/library/index.ts":
/*!*****************************!*\
  !*** ./ts/library/index.ts ***!
  \*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   edit: () => (/* binding */ edit),
/* harmony export */   init: () => (/* binding */ init),
/* harmony export */   reset: () => (/* reexport safe */ _modal_body__WEBPACK_IMPORTED_MODULE_2__.reset)
/* harmony export */ });
/* harmony import */ var _validation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validation */ "./ts/library/validation/index.ts");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modal */ "./ts/modal/index.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modal/body */ "./ts/modal/body/index.ts");
/* harmony import */ var _modal_header_actions_close__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/header/actions/close */ "./ts/modal/header/actions/close/index.ts");
var __awaiter = (undefined && undefined.__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());
    });
};




function init(config, socket) {
    var _a;
    return __awaiter(this, void 0, void 0, function* () {
        try {
            yield (0,_validation__WEBPACK_IMPORTED_MODULE_0__["default"])(config);
            (0,_modal__WEBPACK_IMPORTED_MODULE_1__["default"])(config, socket);
            // Config is valid
            return {
                requireReset: false,
                tree: (_a = config.userTree) !== null && _a !== void 0 ? _a : config.defaultTree,
            };
        }
        catch (error) {
            if (typeof config !== 'object' || !(0,_validation__WEBPACK_IMPORTED_MODULE_0__.hasOwnProperty)(config, 'userTree')) {
                throw error;
            }
            delete config.userTree;
            yield (0,_validation__WEBPACK_IMPORTED_MODULE_0__["default"])(config);
            (0,_modal__WEBPACK_IMPORTED_MODULE_1__["default"])(config, socket);
            // Config is valid with userTree removed
            return {
                requireReset: true,
                tree: config.defaultTree,
                error,
            };
        }
    });
}
function edit() {
    (0,_modal__WEBPACK_IMPORTED_MODULE_1__.getSocket)().focus();
    return new Promise((resolve) => {
        (0,_modal_header_actions_close__WEBPACK_IMPORTED_MODULE_3__.setCallback)(resolve);
    });
}



/***/ }),

/***/ "./ts/library/validation/errors.ts":
/*!*****************************************!*\
  !*** ./ts/library/validation/errors.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   DeactivatedError: () => (/* binding */ DeactivatedError),
/* harmony export */   EmptyArrayError: () => (/* binding */ EmptyArrayError),
/* harmony export */   EmptyStringError: () => (/* binding */ EmptyStringError),
/* harmony export */   FunctionMatchError: () => (/* binding */ FunctionMatchError),
/* harmony export */   HangingOptionsError: () => (/* binding */ HangingOptionsError),
/* harmony export */   HangingPredicateError: () => (/* binding */ HangingPredicateError),
/* harmony export */   JoinedError: () => (/* binding */ JoinedError),
/* harmony export */   NoNodeColourError: () => (/* binding */ NoNodeColourError),
/* harmony export */   NonIntegerError: () => (/* binding */ NonIntegerError),
/* harmony export */   OptionMatchError: () => (/* binding */ OptionMatchError),
/* harmony export */   PoolBranchError: () => (/* binding */ PoolBranchError),
/* harmony export */   PoolSizeError: () => (/* binding */ PoolSizeError),
/* harmony export */   PredicateError: () => (/* binding */ PredicateError),
/* harmony export */   PropertyError: () => (/* binding */ PropertyError),
/* harmony export */   SeedMatchError: () => (/* binding */ SeedMatchError),
/* harmony export */   TypeError: () => (/* binding */ TypeError),
/* harmony export */   UnexpectedStateError: () => (/* binding */ UnexpectedStateError),
/* harmony export */   ValueError: () => (/* binding */ ValueError)
/* harmony export */ });
// Helpers
function getOptionString(array) {
    if (array.length === 0) {
        throw new Error('No valid options.');
    }
    if (array.length === 1) {
        return `'${array[0]}'`;
    }
    return `'${array.slice(0, -1).join('\', \'')}' or '${array[array.length - 1]}'`;
}
function getPath(breadcrumbs) {
    return `/${breadcrumbs.join('/')}`;
}
// Errors
class JoinedError extends Error {
    constructor(...errors) {
        super(errors.map(({ message }) => message).join(JoinedError.separator));
    }
}
JoinedError.separator = '\n\n';
class UnexpectedStateError extends Error {
    constructor() {
        super('Unexpected state reached.');
    }
}
class TypeError extends Error {
    constructor(breadcrumbs, found, expected) {
        super(`Found a value of type '${found}' at ${getPath(breadcrumbs)}. Expected ${getOptionString(expected)}.`);
    }
}
class PropertyError extends Error {
    constructor(breadcrumbs, property, shouldExist) {
        super(`${shouldExist ? 'Missing' : 'Unexpected'} property '${property}' found at ${getPath(breadcrumbs)}.`);
    }
}
class ValueError extends Error {
    constructor(breadcrumbs, found, expected) {
        super(`Found a value of '${found}' at ${getPath(breadcrumbs)}. Expected ${getOptionString(expected)}.`);
    }
}
class NonIntegerError extends Error {
    constructor(breadcrumbs) {
        super(`Found illegal non-integer at ${getPath(breadcrumbs)}.`);
    }
}
class EmptyStringError extends Error {
    constructor(breadcrumbs) {
        super(`Found illegal empty string at ${getPath(breadcrumbs)}.`);
    }
}
class EmptyArrayError extends Error {
    constructor(breadcrumbs) {
        super(`Found illegal empty array at ${getPath(breadcrumbs)}.`);
    }
}
class PredicateError extends Error {
    constructor(breadcrumbs) {
        super(`Predicate failed at ${getPath(breadcrumbs)}. Predicates must succeed.`);
    }
}
class SeedMatchError extends Error {
    constructor() {
        super('All children must be structurally similar to their parent\'s seed.');
    }
}
class PoolBranchError extends Error {
    constructor(ancestorBreadcrumbs, descendantBreadcrumbs, poolId) {
        super('No node may share a poolId value with its ancestor.' + JoinedError.separator
            + `Found poolId value ${poolId} at ${getPath(ancestorBreadcrumbs)} and ${getPath(descendantBreadcrumbs)}.`);
    }
}
class PoolSizeError extends Error {
    constructor(poolId, found, expected) {
        super('Corresponding pools in the default & candidate trees must be the same size unless a pool parent or ancestor has a seed value.' + JoinedError.separator
            + `Found a size of ${found} at pool ${poolId}. Expected a size of ${expected}.`);
    }
}
class FunctionMatchError extends Error {
    constructor() {
        super('Corresponding function values in seed & non-seed branches must be the same pointer.');
    }
}
class OptionMatchError extends Error {
    constructor() {
        super('Options must have the same type as their node\'s value.');
    }
}
class HangingOptionsError extends Error {
    constructor() {
        super('Nodes without a value may not have options.');
    }
}
class HangingPredicateError extends Error {
    constructor() {
        super('Nodes without a value may not have a predicate.');
    }
}
class DeactivatedError extends Error {
    constructor() {
        super('Nodes can\'t be deactivated unless their parent has a seed.');
    }
}
class NoNodeColourError extends Error {
    constructor() {
        super('If the node color property is included, at least one value must be defined.');
    }
}


/***/ }),

/***/ "./ts/library/validation/index.ts":
/*!****************************************!*\
  !*** ./ts/library/validation/index.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   hasOwnProperty: () => (/* binding */ hasOwnProperty),
/* harmony export */   validateUnexpectedKeys: () => (/* binding */ validateUnexpectedKeys)
/* harmony export */ });
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./ts/library/validation/types.ts");
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./ts/library/validation/errors.ts");
/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles */ "./ts/library/validation/styles.ts");
/* harmony import */ var _trees_pools__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./trees/pools */ "./ts/library/validation/trees/pools.ts");
/* harmony import */ var _trees_guards__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./trees/guards */ "./ts/library/validation/trees/guards.ts");
/* harmony import */ var _trees_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./trees/match */ "./ts/library/validation/trees/match.ts");
/* harmony import */ var _trees_predicates__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./trees/predicates */ "./ts/library/validation/trees/predicates.ts");







// Helpers
// Credit to https://fettblog.eu/typescript-hasownproperty/
function hasOwnProperty(object, property) {
    return Object.hasOwnProperty.call(object, property);
}
function validateUnexpectedKeys(breadcrumbs, object, expected) {
    for (const key of Object.keys(object)) {
        if (!expected.includes(key))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, key, false);
    }
}
// Guard
function isConfig(candidate) {
    if (typeof candidate !== 'object')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([], typeof candidate, ['object']);
    validateUnexpectedKeys([], candidate, _types__WEBPACK_IMPORTED_MODULE_0__.CONFIG_KEYS);
    // title
    if (!hasOwnProperty(candidate, 'title'))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError([], 'title', true);
    if (typeof candidate.title !== 'string')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError(['title'], typeof candidate.title, ['string']);
    // defaultStyle
    if (hasOwnProperty(candidate, 'defaultStyle')) {
        if (!(0,_styles__WEBPACK_IMPORTED_MODULE_2__.isStyles)(['defaultStyle'], candidate.defaultStyle))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
        if (hasOwnProperty(candidate.defaultStyle, 'name'))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(['defaultStyle'], 'name', false);
        if (hasOwnProperty(candidate.defaultStyle, 'isActive'))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(['defaultStyle'], 'isActive', false);
    }
    // userStyles
    if (!hasOwnProperty(candidate, 'userStyles'))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError([], 'userStyles', true);
    if (!Array.isArray(candidate.userStyles))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError(['userStyles'], typeof candidate.userStyles, ['array']);
    for (const [i, style] of candidate.userStyles.entries()) {
        if (!(0,_styles__WEBPACK_IMPORTED_MODULE_2__.isStyles)(['userStyles', i.toString()], style))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
        if (!hasOwnProperty(style, 'name'))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(['userStyles', i.toString()], 'name', true);
        if (typeof style.name !== 'string')
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError(['userStyles', i.toString(), 'name'], typeof style.name, ['string']);
        if (!hasOwnProperty(style, 'isActive'))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(['userStyles', i.toString()], 'isActive', true);
        if (typeof style.isActive !== 'boolean')
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError(['userStyles', i.toString(), 'isActive'], typeof style.isActive, ['boolean']);
    }
    // defaultTree
    if (!hasOwnProperty(candidate, 'defaultTree') || !(0,_trees_guards__WEBPACK_IMPORTED_MODULE_4__.isRoot)(['defaultTree'], candidate.defaultTree))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError([], 'defaultTree', true);
    // userTree
    if (hasOwnProperty(candidate, 'userTree') && !(0,_trees_guards__WEBPACK_IMPORTED_MODULE_4__.isRoot)(['userTree'], candidate.userTree, true))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    return true;
}
// Validator
function validateConfig({ title, defaultTree, userTree }) {
    // title
    if (title.length === 0)
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.EmptyStringError(['title']);
    // trees
    (0,_trees_match__WEBPACK_IMPORTED_MODULE_5__.validateSeeds)(['defaultTree'], defaultTree);
    (0,_trees_pools__WEBPACK_IMPORTED_MODULE_3__.validatePools)(['defaultTree'], defaultTree);
    if (userTree) {
        (0,_trees_match__WEBPACK_IMPORTED_MODULE_5__.matchUserTreeParent)(['defaultTree'], defaultTree, ['userTree'], userTree);
        // Has to be done after mutations since new pools may be created
        (0,_trees_match__WEBPACK_IMPORTED_MODULE_5__.validatePoolSizeMatch)(defaultTree, userTree);
    }
    return Promise.all((0,_trees_predicates__WEBPACK_IMPORTED_MODULE_6__.validateParent)(['defaultTree'], defaultTree));
}
// API
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(candidate) {
    if (!isConfig(candidate))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    return validateConfig(candidate);
}


/***/ }),

/***/ "./ts/library/validation/styles.ts":
/*!*****************************************!*\
  !*** ./ts/library/validation/styles.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   isStyles: () => (/* binding */ isStyles)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./errors */ "./ts/library/validation/errors.ts");
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./ts/library/validation/types.ts");


function isStyles(breadcrumbs, candidate) {
    if (typeof candidate !== 'object')
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError(breadcrumbs, typeof candidate, ['object']);
    if (Array.isArray(candidate))
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError(breadcrumbs, 'array', ['object']);
    for (const [key, value] of Object.entries(candidate)) {
        switch (key) {
            // Colours
            case 'modalOutline':
            case 'headBase':
            case 'headButtonExit':
            case 'headButtonLabel':
            case 'headButtonStyle':
            case 'nodeButtonRemove':
            case 'nodeButtonCreate':
            case 'nodeButtonMove':
            case 'nodeButtonDisable':
            case 'validBackground':
            case 'invalidBackground':
            case 'tooltipOutline':
                if (typeof value !== 'string')
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key], typeof value, ['string']);
                break;
            // Numbers
            case 'fontSize':
                if (typeof value !== 'number')
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key], typeof value, ['number']);
                break;
            // Contrast methods
            case 'headContrast':
            case 'nodeContrast':
                if (typeof value !== 'string')
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key], typeof value, ['string']);
                if (!_types__WEBPACK_IMPORTED_MODULE_1__.CONTRAST_METHODS.includes(value))
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...breadcrumbs, key], value, _types__WEBPACK_IMPORTED_MODULE_1__.CONTRAST_METHODS);
                break;
            // Booleans
            case 'isActive':
            case 'borderLeaf':
            case 'borderNode':
                if (typeof value !== 'boolean')
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key], typeof value, ['boolean']);
                break;
            case 'nodeBase':
                if (!Array.isArray(value))
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key], typeof value, ['array']);
                if (value.length === 0)
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.NoNodeColourError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.EmptyArrayError([...breadcrumbs, key]));
                for (const [i, subValue] of value.entries()) {
                    if (typeof subValue !== 'string')
                        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, key, i.toString()], typeof subValue, ['string']);
                }
                break;
        }
    }
    return true;
}


/***/ }),

/***/ "./ts/library/validation/trees/guards.ts":
/*!***********************************************!*\
  !*** ./ts/library/validation/trees/guards.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   isParent: () => (/* binding */ isParent),
/* harmony export */   isRoot: () => (/* binding */ isRoot)
/* harmony export */ });
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../types */ "./ts/library/validation/types.ts");
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../errors */ "./ts/library/validation/errors.ts");
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../index */ "./ts/library/validation/index.ts");



// Type predicates
function isChild(breadcrumbs, candidate, isUserTree = false) {
    if (typeof candidate !== 'object')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs], typeof candidate, ['object']);
    if (isUserTree) {
        (0,_index__WEBPACK_IMPORTED_MODULE_2__.validateUnexpectedKeys)(breadcrumbs, candidate, _types__WEBPACK_IMPORTED_MODULE_0__.SAVED_KEYS);
    }
    else {
        (0,_index__WEBPACK_IMPORTED_MODULE_2__.validateUnexpectedKeys)(breadcrumbs, candidate, 'children' in candidate ? _types__WEBPACK_IMPORTED_MODULE_0__.MIDDLE_KEYS : _types__WEBPACK_IMPORTED_MODULE_0__.LEAF_KEYS);
    }
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'label') && typeof candidate.label !== 'string')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'label'], typeof candidate.label, ['string']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'value') && !_types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES.includes(typeof candidate.value))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'value'], typeof candidate.value, _types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'options')) {
        if (!Array.isArray(candidate.options))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'options'], typeof candidate.options, ['array']);
        for (const [i, option] of candidate.options.entries()) {
            if (!_types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES.includes(typeof option))
                throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'options', i.toString()], typeof option, _types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES);
        }
    }
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'predicate') && typeof candidate.predicate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'predicate'], typeof candidate.predicate, ['function']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'onUpdate') && typeof candidate.onUpdate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'onUpdate'], typeof candidate.onUpdate, ['function']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'input')) {
        if (typeof candidate.input !== 'string')
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'input'], typeof candidate.input, ['string']);
        if (!_types__WEBPACK_IMPORTED_MODULE_0__.INPUT_FORMATS.includes(candidate.input))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.ValueError([...breadcrumbs, 'input'], candidate.input, _types__WEBPACK_IMPORTED_MODULE_0__.INPUT_FORMATS);
    }
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'isActive') && typeof candidate.isActive !== 'boolean')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'isActive'], typeof candidate.isActive, ['boolean']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'children') && !isParent(breadcrumbs, candidate, isUserTree))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    return true;
}
function isParent(breadcrumbs, candidate, isUserTree = false) {
    if (!(0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'children'))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, 'children', true);
    if (!Array.isArray(candidate.children))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'children'], typeof candidate.children, ['array']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'seed') && !isChild([...breadcrumbs, 'seed'], candidate.seed))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'poolId') && typeof candidate.poolId !== 'number')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'poolId'], typeof candidate.poolId, ['number']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'childPredicate') && typeof candidate.childPredicate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'childPredicate'], typeof candidate.childPredicate, ['function']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'descendantPredicate') && typeof candidate.descendantPredicate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'descendantPredicate'], typeof candidate.descendantPredicate, ['function']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'onChildUpdate') && typeof candidate.onChildUpdate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'onChildUpdate'], typeof candidate.onChildUpdate, ['function']);
    if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'onDescendantUpdate') && typeof candidate.onDescendantUpdate !== 'function')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'onDescendantUpdate'], typeof candidate.onDescendantUpdate, ['function']);
    for (const [i, child] of candidate.children.entries()) {
        if (!isChild([...breadcrumbs, 'children', i.toString()], child, isUserTree))
            throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    }
    return true;
}
function isRoot(breadcrumbs, candidate, isUserTree = false) {
    if (typeof candidate !== 'object')
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError(breadcrumbs, typeof candidate, ['object']);
    if (!isParent(breadcrumbs, candidate, isUserTree))
        throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError();
    (0,_index__WEBPACK_IMPORTED_MODULE_2__.validateUnexpectedKeys)(breadcrumbs, candidate, _types__WEBPACK_IMPORTED_MODULE_0__.ROOT_KEYS);
    return true;
}


/***/ }),

/***/ "./ts/library/validation/trees/match.ts":
/*!**********************************************!*\
  !*** ./ts/library/validation/trees/match.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   matchUserTreeParent: () => (/* binding */ matchUserTreeParent),
/* harmony export */   validatePoolSizeMatch: () => (/* binding */ validatePoolSizeMatch),
/* harmony export */   validateSeeds: () => (/* binding */ validateSeeds)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ "./ts/library/validation/errors.ts");

// Helpers
function validateOptionMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    if ('options' in model !== 'options' in candidate)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'options', 'options' in model);
    if ('options' in model) {
        if (model.options.length !== candidate.options.length)
            throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'options', 'length'], candidate.options.length, [model.options.length]);
        for (const [i, option] of model.options.entries()) {
            if (candidate.options[i] !== option)
                throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'options', i.toString()], candidate.options[i], [option]);
        }
    }
}
function validateValueMatch(property, modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    if (property in model !== property in candidate)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, property, property in model);
    if (model[property] !== candidate[property])
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, property], candidate[property], [model[property]]);
}
function assignKeys(from, to) {
    for (const key of Object.keys(from)) {
        if (!(key in to)) {
            to[key] = from[key];
        }
    }
}
// Consistent userTree validators/enforcers
function matchUserTreeChild(modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    if ('value' in model !== 'value' in candidate) {
        if ('value' in candidate)
            throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'value', false);
        candidate.value = model.value;
    }
    else if (typeof model.value !== typeof candidate.value) {
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...candidateBreadcrumbs, 'value'], typeof candidate.value, [typeof model.value]);
    }
    if ('label' in model) {
        candidate.label = model.label;
    }
    else {
        delete candidate.label;
    }
    if ('children' in model !== 'children' in candidate)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'children', 'children' in model);
    if ('children' in model) {
        matchUserTreeParent(modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    }
    else {
        assignKeys(model, candidate);
    }
}
function matchUserTreeParent(modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    assignKeys(model, candidate);
    if ('seed' in model) {
        for (const [i, child] of candidate.children.entries()) {
            matchUserTreeChild([...modelBreadcrumbs, 'seed'], model.seed, [...candidateBreadcrumbs, 'children', i.toString()], child);
        }
        return;
    }
    if ('poolId' in model) {
        return;
    }
    if (model.children.length !== candidate.children.length)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'children', 'length'], candidate.children.length, [model.children.length]);
    for (const [i, child] of candidate.children.entries()) {
        matchUserTreeChild([...modelBreadcrumbs, 'children', i.toString()], model.children[i], [...candidateBreadcrumbs, 'children', i.toString()], child);
    }
    // Done after validation to avoid validating certain matches
    if (model.children.length > candidate.children.length) {
        candidate.children.push(...model.children.slice(candidate.children.length));
    }
}
// defaultTree internal consistency validators
function validateChildMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    if ('value' in model !== 'value' in candidate)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'value', 'value' in model);
    if (typeof model.value !== typeof candidate.value)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...candidateBreadcrumbs, 'value'], typeof candidate.value, [typeof model.value]);
    validateValueMatch('label', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    validateValueMatch('input', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    validateOptionMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    try {
        validateValueMatch('predicate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
        validateValueMatch('onUpdate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    }
    catch (error) {
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.FunctionMatchError(), error);
    }
    if ('children' in model !== 'children' in candidate)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'children', 'children' in model);
    if ('children' in model) {
        validateParentMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    }
}
function validateParentMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate) {
    validateValueMatch('poolId', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    try {
        validateValueMatch('childPredicate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
        validateValueMatch('onChildUpdate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
        validateValueMatch('descendantPredicate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
        validateValueMatch('onDescendantUpdate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate);
    }
    catch (error) {
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.FunctionMatchError(), error);
    }
    if ('seed' in model) {
        validateChildMatch([...modelBreadcrumbs, 'seed'], model.seed, [...candidateBreadcrumbs, 'seed'], candidate.seed);
        for (const [i, child] of candidate.children.entries()) {
            validateChildMatch([...modelBreadcrumbs, 'seed'], model.seed, [...candidateBreadcrumbs, 'children', i.toString()], child);
        }
    }
    else if (!('poolId' in model)) {
        if (model.children.length !== candidate.children.length)
            throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'children', 'length'], candidate.children.length, [model.children.length]);
        for (const [i, child] of candidate.children.entries()) {
            validateChildMatch([...modelBreadcrumbs, 'children', i.toString()], model.children[i], [...candidateBreadcrumbs, 'children', i.toString()], child);
        }
        if (model.children.length > candidate.children.length) {
            candidate.children.push(...model.children.slice(candidate.children.length));
        }
    }
}
// Other validators
function validateSeeds(breadcrumbs, node) {
    if ('children' in node) {
        if ('seed' in node) {
            try {
                for (const [i, child] of node.children.entries()) {
                    validateChildMatch([...breadcrumbs, 'seed'], node.seed, [...breadcrumbs, 'children', i.toString()], child);
                }
            }
            catch (error) {
                throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.SeedMatchError(), error);
            }
            validateSeeds([...breadcrumbs, 'seed'], node.seed);
        }
        else {
            for (const [i, child] of node.children.entries()) {
                if ('isActive' in child && !child.isActive) {
                    throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.DeactivatedError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...breadcrumbs, 'children', i.toString(), 'isActive'], false, [true]));
                }
            }
        }
        for (const [i, child] of node.children.entries()) {
            validateSeeds([...breadcrumbs, 'children', i.toString()], child);
        }
    }
}
function getPoolSizes(node, uncapped = false) {
    const poolSizes = [];
    uncapped = uncapped || 'seed' in node;
    if ('poolId' in node) {
        poolSizes[node.poolId] = uncapped ? -1 : node.children.length;
    }
    if ('children' in node) {
        for (const child of node.children) {
            const subPoolSizes = getPoolSizes(child, uncapped);
            for (const id in subPoolSizes) {
                if (subPoolSizes[id] < 0) {
                    poolSizes[id] = -1;
                }
                else if (id in poolSizes) {
                    poolSizes[id] += subPoolSizes[id];
                }
                else {
                    poolSizes[id] = subPoolSizes[id];
                }
            }
        }
    }
    return poolSizes;
}
function validatePoolSizeMatch(model, candidate) {
    const modelSizes = getPoolSizes(model);
    const candidateSizes = getPoolSizes(candidate);
    for (const id in modelSizes) {
        if (modelSizes[id] !== candidateSizes[id])
            throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PoolSizeError(Number.parseInt(id), candidateSizes[id], modelSizes[id]);
    }
}


/***/ }),

/***/ "./ts/library/validation/trees/pools.ts":
/*!**********************************************!*\
  !*** ./ts/library/validation/trees/pools.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   validatePools: () => (/* binding */ validatePools)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ "./ts/library/validation/errors.ts");

function validatePools(breadcrumbs, node, ancestorPools = []) {
    if ('poolId' in node) {
        if (node.poolId in ancestorPools)
            throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PoolBranchError(ancestorPools[node.poolId], breadcrumbs, node.poolId);
        // Slice maintains empty entries, so the 'in' operator still works
        ancestorPools = ancestorPools.slice();
        ancestorPools[node.poolId] = breadcrumbs;
    }
    if ('children' in node) {
        // Recurse
        for (const [i, child] of node.children.entries()) {
            validatePools([...breadcrumbs, 'children', i.toString()], child, ancestorPools);
        }
    }
}


/***/ }),

/***/ "./ts/library/validation/trees/predicates.ts":
/*!***************************************************!*\
  !*** ./ts/library/validation/trees/predicates.ts ***!
  \***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   validateParent: () => (/* binding */ validateParent)
/* harmony export */ });
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../errors */ "./ts/library/validation/errors.ts");
/* harmony import */ var _predicate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../predicate */ "./ts/predicate.ts");


function getBoundPredicatePromise(response, error) {
    return (0,_predicate__WEBPACK_IMPORTED_MODULE_1__.getPredicatePromise)(response)
        .catch(() => Promise.reject(error));
}
function validateChild(breadcrumbs, child) {
    if (!('options' in child) && !('predicate' in child))
        return Promise.resolve();
    if (!('value' in child))
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new ('predicate' in child ? _errors__WEBPACK_IMPORTED_MODULE_0__.HangingPredicateError : _errors__WEBPACK_IMPORTED_MODULE_0__.HangingOptionsError)(), new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(breadcrumbs, 'value', true));
    if ('options' in child) {
        const type = typeof child.value;
        let valueFound = false;
        for (const [i, option] of child.options.entries()) {
            if (typeof option !== type) {
                throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.OptionMatchError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, 'options', i.toString()], typeof option, [type]));
            }
            valueFound || (valueFound = child.value === option);
        }
        if (valueFound)
            return Promise.resolve();
    }
    if ('predicate' in child)
        return getBoundPredicatePromise(child.predicate(child.value), new _errors__WEBPACK_IMPORTED_MODULE_0__.PredicateError([...breadcrumbs, 'predicate']));
    return Promise.reject();
}
function validateParent(breadcrumbs, parent) {
    const promises = [];
    if ('seed' in parent) {
        const { seed } = parent;
        promises.push(validateChild([...breadcrumbs, 'seed'], seed));
        if ('children' in seed) {
            promises.push(...validateParent([...breadcrumbs, 'seed'], seed));
        }
    }
    const { children } = parent;
    if ('poolId' in parent && Math.floor(parent.poolId) !== parent.poolId)
        throw new _errors__WEBPACK_IMPORTED_MODULE_0__.NonIntegerError([...breadcrumbs, 'poolId']);
    if ('childPredicate' in parent) {
        promises.push(getBoundPredicatePromise(parent.childPredicate(children), new _errors__WEBPACK_IMPORTED_MODULE_0__.PredicateError([...breadcrumbs, 'childPredicate'])));
    }
    if ('descendantPredicate' in parent) {
        promises.push(getBoundPredicatePromise(parent.descendantPredicate(children), new _errors__WEBPACK_IMPORTED_MODULE_0__.PredicateError([...breadcrumbs, 'descendantPredicate'])));
    }
    for (const [i, child] of children.entries()) {
        const childBreadcrumbs = [...breadcrumbs, 'children', i.toString()];
        promises.push(validateChild(childBreadcrumbs, child));
        if ('children' in child) {
            promises.push(...validateParent(childBreadcrumbs, child));
        }
    }
    return promises;
}


/***/ }),

/***/ "./ts/library/validation/types.ts":
/*!****************************************!*\
  !*** ./ts/library/validation/types.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   CONFIG_KEYS: () => (/* binding */ CONFIG_KEYS),
/* harmony export */   CONTRAST_METHODS: () => (/* binding */ CONTRAST_METHODS),
/* harmony export */   INPUT_FORMATS: () => (/* binding */ INPUT_FORMATS),
/* harmony export */   LEAF_KEYS: () => (/* binding */ LEAF_KEYS),
/* harmony export */   MIDDLE_KEYS: () => (/* binding */ MIDDLE_KEYS),
/* harmony export */   ROOT_KEYS: () => (/* binding */ ROOT_KEYS),
/* harmony export */   ROOT_OTHER_KEYS: () => (/* binding */ ROOT_OTHER_KEYS),
/* harmony export */   ROOT_PREDICATE_KEYS: () => (/* binding */ ROOT_PREDICATE_KEYS),
/* harmony export */   ROOT_UPDATE_KEYS: () => (/* binding */ ROOT_UPDATE_KEYS),
/* harmony export */   SAVED_KEYS: () => (/* binding */ SAVED_KEYS),
/* harmony export */   VALUE_TYPES: () => (/* binding */ VALUE_TYPES)
/* harmony export */ });
// Basic types
const VALUE_TYPES = ['boolean', 'number', 'string'];
const INPUT_FORMATS = ['color', 'date', 'datetime-local', 'email', 'month', 'password', 'search', 'tel', 'text', 'time', 'url', 'week'];
const CONTRAST_METHODS = ['Black / White', 'Invert'];
// Key categories
const SAVED_KEYS = ['label', 'value', 'isActive', 'children'];
const ROOT_PREDICATE_KEYS = ['childPredicate', 'descendantPredicate'];
const ROOT_UPDATE_KEYS = ['onChildUpdate', 'onDescendantUpdate'];
const ROOT_OTHER_KEYS = ['children', 'seed', 'poolId'];
// Node types
const LEAF_KEYS = ['label', 'value', 'predicate', 'options', 'input', 'isActive', 'onUpdate'];
const ROOT_KEYS = [...ROOT_PREDICATE_KEYS, ...ROOT_UPDATE_KEYS, ...ROOT_OTHER_KEYS];
const MIDDLE_KEYS = [...LEAF_KEYS, ...ROOT_KEYS];
// Config type
const CONFIG_KEYS = ['title', 'defaultTree', 'userTree', 'defaultStyle', 'userStyles'];


/***/ }),

/***/ "./ts/modal/body/consts.ts":
/*!*********************************!*\
  !*** ./ts/modal/body/consts.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   MODAL_BODY_ID: () => (/* binding */ MODAL_BODY_ID)
/* harmony export */ });
const MODAL_BODY_ID = 'modal-body';


/***/ }),

/***/ "./ts/modal/body/css.ts":
/*!******************************!*\
  !*** ./ts/modal/body/css.ts ***!
  \******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/consts.ts");
/* harmony import */ var _nodes_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nodes/css */ "./ts/modal/body/nodes/css.ts");
/* harmony import */ var _nodes_actions_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./nodes/actions/css */ "./ts/modal/body/nodes/actions/css.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../css */ "./ts/modal/css.ts");




function generate() {
    (0,_nodes_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    (0,_nodes_actions_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BODY_ID}`, [
        ['overflow-y', 'auto'],
        ['overflow-x', 'hidden'],
        ['overscroll-behavior', 'contain'],
        ['background-color', `var(--nodeBase0)`],
        ['flex-grow', '1'],
    ]);
}


/***/ }),

/***/ "./ts/modal/body/data/consts.ts":
/*!**************************************!*\
  !*** ./ts/modal/body/data/consts.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ROOT_ID: () => (/* binding */ ROOT_ID)
/* harmony export */ });
const ROOT_ID = 'root-data';


/***/ }),

/***/ "./ts/modal/body/data/index.ts":
/*!*************************************!*\
  !*** ./ts/modal/body/data/index.ts ***!
  \*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   getRoot: () => (/* binding */ getRoot),
/* harmony export */   setTree: () => (/* binding */ setTree)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/data/consts.ts");
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../index */ "./ts/modal/body/index.ts");


function getRoot() {
    return _index__WEBPACK_IMPORTED_MODULE_1__.ROOTS[_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID];
}
function setTree(data) {
    const root = getRoot();
    // Spread avoids looping on a shrinking array
    for (const child of [...root.children]) {
        child.disconnect();
    }
    root.addChildren(data.children);
}
function generate(data) {
    return (0,_index__WEBPACK_IMPORTED_MODULE_1__.generateTree)(data, _consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID);
}


/***/ }),

/***/ "./ts/modal/body/index.ts":
/*!********************************!*\
  !*** ./ts/modal/body/index.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ROOTS: () => (/* binding */ ROOTS),
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   element: () => (/* binding */ element),
/* harmony export */   generateTree: () => (/* binding */ generateTree),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   setActive: () => (/* binding */ setActive)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css */ "./ts/modal/body/css.ts");
/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style */ "./ts/modal/body/style/index.ts");
/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./data */ "./ts/modal/body/data/index.ts");
/* harmony import */ var _style_update__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./style/update */ "./ts/modal/body/style/update/index.ts");
/* harmony import */ var _nodes_root__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./nodes/root */ "./ts/modal/body/nodes/root.ts");
/* harmony import */ var _nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _nodes_actions_active__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/actions/active */ "./ts/modal/body/nodes/actions/active.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../consts */ "./ts/modal/consts.ts");









const ROOTS = {};
const element = document.createElement('div');
let resetTree;
function setActive(button, actionId, doActivate = true) {
    if (doActivate) {
        button.classList.add(_consts__WEBPACK_IMPORTED_MODULE_8__.BUTTON_ACTIVE_CLASS);
        element.classList.add(actionId);
    }
    else {
        button.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_8__.BUTTON_ACTIVE_CLASS);
        element.classList.remove(actionId);
    }
}
function generateTree(data, id) {
    if (ROOTS[id]) {
        throw new Error(`Attempted to instantiate second tree with id '${id}'.`);
    }
    const root = new _nodes_root__WEBPACK_IMPORTED_MODULE_5__["default"](data);
    root.element.elementContainer.id = id;
    ROOTS[id] = root;
    return root.element.elementContainer;
}
function generate({ userTree, defaultTree, userStyles, defaultStyle }) {
    resetTree = defaultTree;
    (0,_style_update__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_style__WEBPACK_IMPORTED_MODULE_2__.getActiveStyle)(userStyles, defaultStyle));
    (0,_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    element.id = _consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BODY_ID;
    element.append((0,_style__WEBPACK_IMPORTED_MODULE_2__["default"])(userStyles, defaultStyle), (0,_data__WEBPACK_IMPORTED_MODULE_3__["default"])(userTree !== null && userTree !== void 0 ? userTree : defaultTree));
    (0,_nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_6__.onMount)();
    (0,_nodes_actions_active__WEBPACK_IMPORTED_MODULE_7__.onMount)();
    return element;
}
function reset() {
    (0,_data__WEBPACK_IMPORTED_MODULE_3__.setTree)(resetTree);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/active.ts":
/*!***********************************************!*\
  !*** ./ts/modal/body/nodes/actions/active.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   onMount: () => (/* binding */ onMount),
/* harmony export */   register: () => (/* binding */ register),
/* harmony export */   reset: () => (/* binding */ reset)
/* harmony export */ });
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./buttons/position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal */ "./ts/modal/index.ts");





function register() {
    _edit__WEBPACK_IMPORTED_MODULE_0__.reset();
}
function reset() {
    for (const action of [_edit__WEBPACK_IMPORTED_MODULE_0__, _buttons_position__WEBPACK_IMPORTED_MODULE_3__, _focus__WEBPACK_IMPORTED_MODULE_2__, _highlight__WEBPACK_IMPORTED_MODULE_1__]) {
        if (action.isActive()) {
            action.reset();
            return true;
        }
    }
    return false;
}
function onMount() {
    (0,_modal__WEBPACK_IMPORTED_MODULE_4__.getSocket)().addEventListener('keydown', (event) => {
        if (event.key === 'Escape' && reset()) {
            event.stopPropagation();
        }
    });
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/button.ts":
/*!*******************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/button.ts ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addActionButton: () => (/* binding */ addActionButton),
/* harmony export */   getNewButton: () => (/* binding */ getNewButton)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../active */ "./ts/modal/body/nodes/actions/active.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");
/* harmony import */ var _modal_header_actions_alternate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/header/actions/alternate */ "./ts/modal/header/actions/alternate/index.ts");
/* harmony import */ var _predicate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/predicate */ "./ts/predicate.ts");






// Creates an instantiation & adds it to the DOM
function addActionButton(template, onClick, node) {
    const button = template.cloneNode(true);
    button.addEventListener('click', (event) => {
        event.stopPropagation();
        if ((0,_predicate__WEBPACK_IMPORTED_MODULE_5__.isUnresolved)()) {
            (0,_tooltip__WEBPACK_IMPORTED_MODULE_2__.showUnresolved)(button);
            return;
        }
        _active__WEBPACK_IMPORTED_MODULE_1__.register();
        (0,_tooltip__WEBPACK_IMPORTED_MODULE_2__.kill)();
        onClick(node, button, (0,_modal_header_actions_alternate__WEBPACK_IMPORTED_MODULE_4__.isActive)());
    });
    button.addEventListener('keydown', (event) => {
        // Prevent button presses via the Enter key from triggering actions
        if (event.key === 'Enter') {
            event.stopPropagation();
        }
    });
    button.addEventListener('mouseleave', () => {
        button.blur();
    });
    node.element.addButton(button);
    return button;
}
// Creates a template
const getNewButton = (function () {
    const buttonTemplate = document.createElement('button');
    buttonTemplate.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS);
    // Prevent tabbing to buttons until node is focused
    buttonTemplate.setAttribute('tabIndex', '-1');
    const svgTemplate = (() => {
        const circle = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'circle');
        circle.setAttribute('r', '50');
        circle.setAttribute('stroke-width', '10');
        const svg = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'svg');
        svg.setAttribute('viewBox', '-70 -70 140 140');
        svg.append(circle);
        return svg;
    })();
    return function (group, actionId, description) {
        const button = buttonTemplate.cloneNode(true);
        const svg = svgTemplate.cloneNode(true);
        button.classList.add(actionId);
        button.title = description;
        svg.append(group);
        button.append(svg);
        return button;
    };
})();


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/consts.ts":
/*!*******************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/consts.ts ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ALT_CLASS: () => (/* binding */ ALT_CLASS),
/* harmony export */   BUTTON_CLASS: () => (/* binding */ BUTTON_CLASS),
/* harmony export */   TEST_ADD_CLASS: () => (/* binding */ TEST_ADD_CLASS),
/* harmony export */   TEST_REMOVE_CLASS: () => (/* binding */ TEST_REMOVE_CLASS)
/* harmony export */ });
const BUTTON_CLASS = 'node-button';
const ALT_CLASS = 'node-icon-alt';
const TEST_ADD_CLASS = 'node-test-add';
const TEST_REMOVE_CLASS = 'node-test-remove';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/create/button.ts":
/*!**************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/create/button.ts ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/create/consts.ts");
/* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/nodes/actions/buttons/position/button/alt.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const lineHorizontal = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
lineHorizontal.setAttribute('stroke-linecap', 'round');
lineHorizontal.setAttribute('stroke-width', '12');
lineHorizontal.setAttribute('x1', '-25');
lineHorizontal.setAttribute('x2', '25');
const lineVertical = lineHorizontal.cloneNode(true);
lineVertical.setAttribute('transform', 'rotate(90)');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(lineHorizontal, lineVertical);
const BUTTON = (0,_position_button_alt__WEBPACK_IMPORTED_MODULE_1__.getPositionedButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Create', { scale: '1 1.15' });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/create/consts.ts":
/*!**************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/create/consts.ts ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID)
/* harmony export */ });
const ACTION_ID = 'node-create';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/create/css.ts":
/*!***********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/create/css.ts ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/create/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/nodes/actions/buttons/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--nodeButtonCreate');
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/create/index.ts":
/*!*************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/create/index.ts ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/create/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/nodes/actions/buttons/create/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");
/* harmony import */ var _nodes_middle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/middle */ "./ts/modal/body/nodes/middle.ts");
/* harmony import */ var _nodes_child__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nodes/child */ "./ts/modal/body/nodes/child.ts");









function reset() {
    _position__WEBPACK_IMPORTED_MODULE_4__.reset();
}
function getChild(node) {
    const { seed } = node;
    const child = 'children' in seed ? new _nodes_middle__WEBPACK_IMPORTED_MODULE_7__["default"](seed, node, 0) : new _nodes_child__WEBPACK_IMPORTED_MODULE_8__["default"](seed, node, 0);
    child.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
    return child;
}
function doAction(source, parent, index, button, doScroll = true) {
    const child = getChild(source);
    child.move(parent, index);
    Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(child.getAncestors()))
        .then(() => {
        child.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
        child.isActive = true;
        reset();
        if (doScroll) {
            // Show the new node
            child.element.scrollIntoView();
        }
        (0,_edit__WEBPACK_IMPORTED_MODULE_5__.triggerSubUpdateCallbacks)(child.getAncestors());
    })
        .catch((reason) => {
        child.disconnect();
        if (reason) {
            (0,_tooltip__WEBPACK_IMPORTED_MODULE_6__.show)(reason, button);
        }
    });
}
function onClick(node, button, isAlt) {
    reset();
    if (!isAlt) {
        doAction(node, node, 0, button, false);
    }
    else {
        _position__WEBPACK_IMPORTED_MODULE_4__.mount(node, node.seed, node, node.children, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, button, doAction, false);
    }
}
function mount(node) {
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.addActionButton)(_button__WEBPACK_IMPORTED_MODULE_1__["default"], onClick, node);
}
function shouldMount(node) {
    return 'seed' in node;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/css.ts":
/*!****************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/css.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addColourRule: () => (/* binding */ addColourRule),
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _create_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create/css */ "./ts/modal/body/nodes/actions/buttons/create/css.ts");
/* harmony import */ var _move_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./move/css */ "./ts/modal/body/nodes/actions/buttons/move/css.ts");
/* harmony import */ var _disable_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./disable/css */ "./ts/modal/body/nodes/actions/buttons/disable/css.ts");
/* harmony import */ var _duplicate_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./duplicate/css */ "./ts/modal/body/nodes/actions/buttons/duplicate/css.ts");
/* harmony import */ var _position_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./position/css */ "./ts/modal/body/nodes/actions/buttons/position/css.ts");
/* harmony import */ var _highlight_consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../highlight/consts */ "./ts/modal/body/nodes/actions/highlight/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/modal/body/style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/modal/header/actions/alternate/consts */ "./ts/modal/header/actions/alternate/consts.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");












function addColourRule(actionId, strokeVar) {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)([
        `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_6__.HIGHLIGHT_CLASS}) > `
            + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.BUTTON_CONTAINER} > `
            + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId} > svg`,
    ], ['fill', `var(${strokeVar})`]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_highlight_consts__WEBPACK_IMPORTED_MODULE_6__.HIGHLIGHT_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.BUTTON_CONTAINER} > `
        + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId}.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS} > svg > g`, ['stroke', `var(${strokeVar})`]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId}.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS}:hover > svg > circle`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId}.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS}:focus > svg > circle`,
    ], ['stroke', `var(${strokeVar})`]);
}
function generate() {
    (0,_create_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    (0,_move_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_disable_css__WEBPACK_IMPORTED_MODULE_3__["default"])();
    (0,_duplicate_css__WEBPACK_IMPORTED_MODULE_4__["default"])();
    (0,_position_css__WEBPACK_IMPORTED_MODULE_5__["default"])();
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}`, [
        ['height', '100%'],
        ['position', 'relative'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS} > svg`, [
        ['height', '100%'],
        ['transform', 'scale(1.05)'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.BUTTON_CONTAINER}`, [
        ['white-space', 'nowrap'],
        ['z-index', '1'],
    ]);
    // Hide prospective nodes
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)([
        `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.ELEMENT_CONTAINER}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TEST_ADD_CLASS}`,
        `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.ELEMENT_CONTAINER}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TEST_REMOVE_CLASS}`,
    ], [['pointer-events', 'none']]);
    // Hide alt icon components
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ALT_CLASS}:not(.${_modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_9__.ACTION_ID} *)`, ['display', 'none']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_11__.addRule)(`.${_modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_9__.ACTION_ID} button.${_consts__WEBPACK_IMPORTED_MODULE_0__.ALT_CLASS} + *`, ['display', 'none']);
    (0,_modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_8__.addDepthChangeListener)((depth, addRule) => {
        const depthSelector = `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.DEPTH_CLASS_PREFIX}${depth} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.BUTTON_CONTAINER}`;
        addRule(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_7__.ELEMENT_CLASSES.ELEMENT_CONTAINER}.${_highlight_consts__WEBPACK_IMPORTED_MODULE_6__.HIGHLIGHT_CLASS}${depthSelector} > `
            + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:not(.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS}):not(:focus):not(:hover) > svg > g`, ['stroke', `var(--nodeBase${depth})`]);
        addRule(`${depthSelector} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:not(.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS}:hover):not(.${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS}:focus) > svg > circle`, ['stroke', `var(--nodeBase${depth})`]);
        addRule([
            // Not active, focused
            `${depthSelector} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:focus > svg > g`,
            `${depthSelector} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:hover > svg > g`,
        ], [['stroke', `var(--nodeContrast${depth})`]]);
        addRule([`${depthSelector} > .${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS} > svg`], [['stroke', `var(--nodeBase${depth})`]]);
        addRule([
            // Not active, focused
            `${depthSelector} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:focus > svg`,
            `${depthSelector} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:hover > svg`,
            `.${_highlight_consts__WEBPACK_IMPORTED_MODULE_6__.HIGHLIGHT_CLASS}${depthSelector} > .${_modal_consts__WEBPACK_IMPORTED_MODULE_10__.BUTTON_ACTIVE_CLASS} > svg`,
        ], [['fill', `var(--nodeBase${depth})`]]);
    });
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/disable/button.ts":
/*!***************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/disable/button.ts ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BUTTON_ALT: () => (/* binding */ BUTTON_ALT),
/* harmony export */   BUTTON_DEFAULT: () => (/* binding */ BUTTON_DEFAULT)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/disable/consts.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");




const gDefault = (() => {
    const circle = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'circle');
    circle.setAttribute('r', '30');
    circle.setAttribute('stroke-width', '10');
    const line = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'line');
    line.setAttribute('stroke-linecap', 'round');
    line.setAttribute('stroke-width', '10');
    line.setAttribute('x1', '-30');
    line.setAttribute('x2', '30');
    line.setAttribute('transform', 'rotate(45)');
    const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'g');
    g.append(circle, line);
    return g;
})();
const BUTTON_DEFAULT = (0,_button__WEBPACK_IMPORTED_MODULE_2__.getNewButton)(gDefault, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID_DEFAULT, 'Toggle Enabled');
const gAlt = (() => {
    const line0 = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'line');
    line0.setAttribute('stroke-linecap', 'round');
    line0.setAttribute('stroke-width', '12');
    line0.setAttribute('x1', '-20');
    line0.setAttribute('x2', '20');
    line0.setAttribute('y1', '-20');
    line0.setAttribute('y2', '20');
    const line1 = line0.cloneNode(true);
    line1.setAttribute('transform', 'rotate(90)');
    const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_3__.SVG_NAMESPACE, 'g');
    g.append(line0, line1);
    return g;
})();
const BUTTON_ALT = (0,_button__WEBPACK_IMPORTED_MODULE_2__.getNewButton)(gAlt, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID_ALT, 'Delete');
BUTTON_ALT.classList.add(_consts__WEBPACK_IMPORTED_MODULE_1__.ALT_CLASS);


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/disable/consts.ts":
/*!***************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/disable/consts.ts ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID_ALT: () => (/* binding */ ACTION_ID_ALT),
/* harmony export */   ACTION_ID_DEFAULT: () => (/* binding */ ACTION_ID_DEFAULT),
/* harmony export */   DISABLED_CLASS: () => (/* binding */ DISABLED_CLASS)
/* harmony export */ });
const ACTION_ID_DEFAULT = 'node-active';
const ACTION_ID_ALT = 'node-delete';
const DISABLED_CLASS = 'node-disable';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/disable/css.ts":
/*!************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/disable/css.ts ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/disable/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/nodes/actions/buttons/css.ts");
/* harmony import */ var _highlight_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../highlight/consts */ "./ts/modal/body/nodes/actions/highlight/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");





function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID_DEFAULT, '--nodeButtonDisable');
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID_ALT, '--nodeButtonDelete');
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)([
        // Self selectors
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS}:not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_2__.HIGHLIGHT_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.VALUE_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS}:not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_2__.HIGHLIGHT_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.LABEL_CONTAINER}`,
        // Descendant selectors
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS} :not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_2__.HIGHLIGHT_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.VALUE_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS} :not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_2__.HIGHLIGHT_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_3__.ELEMENT_CLASSES.LABEL_CONTAINER}`,
    ], ['opacity', '0.5']);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/disable/index.ts":
/*!**************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/disable/index.ts ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/disable/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/nodes/actions/buttons/disable/button.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");







function updateButton(button, isActive) {
    button.classList[isActive ? 'remove' : 'add'](_modal_consts__WEBPACK_IMPORTED_MODULE_6__.BUTTON_ACTIVE_CLASS);
}
function toggle(node) {
    node.element[`${node.isActive ? 'add' : 'remove'}Class`](_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS);
    node.isActive = !node.isActive;
}
function onClick(node, button, isAlt) {
    if (isAlt) {
        node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_3__.TEST_REMOVE_CLASS);
    }
    else {
        toggle(node);
    }
    Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_4__.getSubPredicateResponses)(node.getAncestors()))
        .then(() => {
        const ancestors = node.getAncestors();
        if (isAlt) {
            // TODO set up a way to confirm (tooltip + yes/no buttons? require extra button click?)
            node.disconnect();
        }
        else {
            updateButton(button, node.isActive);
        }
        (0,_edit__WEBPACK_IMPORTED_MODULE_4__.triggerSubUpdateCallbacks)(ancestors);
    })
        .catch((reason) => {
        if (isAlt) {
            node.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_3__.TEST_REMOVE_CLASS);
        }
        else {
            toggle(node);
        }
        if (typeof reason === 'string') {
            _tooltip__WEBPACK_IMPORTED_MODULE_5__.show(reason, button);
        }
    });
}
function mount(node) {
    (0,_button__WEBPACK_IMPORTED_MODULE_2__.addActionButton)(_button__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ALT, onClick, node);
    const defaultButton = (0,_button__WEBPACK_IMPORTED_MODULE_2__.addActionButton)(_button__WEBPACK_IMPORTED_MODULE_1__.BUTTON_DEFAULT, onClick, node);
    if (!node.isActive) {
        node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.DISABLED_CLASS);
        updateButton(defaultButton, false);
    }
}
function shouldMount(node) {
    return 'seed' in node.parent;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/duplicate/button.ts":
/*!*****************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/duplicate/button.ts ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/duplicate/consts.ts");
/* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/nodes/actions/buttons/position/button/alt.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const RADIUS = 15;
const HEIGHT = 25;
const WIDTH = 10;
const outline0 = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
outline0.setAttribute('stroke-linecap', 'round');
outline0.setAttribute('stroke-width', '8');
outline0.setAttribute('fill', 'none');
outline0.setAttribute('d', `M ${WIDTH / 2 + RADIUS} ${-HEIGHT / 2}`
    + `q 0,-${RADIUS} -${RADIUS},-${RADIUS}`
    + `h -${WIDTH}`
    + `q -${RADIUS},0 -${RADIUS},${RADIUS}`
    + `v ${HEIGHT}`
    + `q 0,${RADIUS} ${RADIUS},${RADIUS}`);
outline0.setAttribute('transform', `translate(-${RADIUS / 2}, -${RADIUS / 2})`);
const outline1 = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
outline1.setAttribute('stroke-linecap', 'round');
outline1.setAttribute('stroke-width', '8');
outline1.setAttribute('fill', 'none');
outline1.setAttribute('d', `M ${WIDTH / 2 + RADIUS} ${-HEIGHT / 2}`
    + `q 0,-${RADIUS} -${RADIUS},-${RADIUS}`
    + `h -${WIDTH}`
    + `q -${RADIUS},0 -${RADIUS},${RADIUS}`
    + `v ${HEIGHT}`
    + `q 0,${RADIUS} ${RADIUS},${RADIUS}`
    + `h ${WIDTH}`
    + `q ${RADIUS},0 ${RADIUS},-${RADIUS}`
    + `v -${HEIGHT}`);
outline1.setAttribute('transform', `translate(${RADIUS / 2}, ${RADIUS / 2})`);
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.setAttribute('transform', `rotate(10)`);
g.append(outline0, outline1);
const BUTTON = (0,_position_button_alt__WEBPACK_IMPORTED_MODULE_1__.getPositionedButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Duplicate', { scale: 0.6, translate: '10 16', rotate: 10 });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/duplicate/consts.ts":
/*!*****************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/duplicate/consts.ts ***!
  \*****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID)
/* harmony export */ });
const ACTION_ID = 'node-copy';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/duplicate/css.ts":
/*!**************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/duplicate/css.ts ***!
  \**************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/duplicate/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/nodes/actions/buttons/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--nodeButtonDuplicate');
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/duplicate/index.ts":
/*!****************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/duplicate/index.ts ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/duplicate/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/nodes/actions/buttons/duplicate/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");







let activeNode;
function reset() {
    if (!activeNode) {
        return;
    }
    _position__WEBPACK_IMPORTED_MODULE_4__.reset();
    activeNode = undefined;
}
function validate(copy, button, doScroll = true) {
    Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(copy.getAncestors()))
        .then(() => {
        copy.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
        reset();
        if (doScroll) {
            // Show the new node
            copy.element.scrollIntoView();
        }
        (0,_edit__WEBPACK_IMPORTED_MODULE_5__.triggerSubUpdateCallbacks)(copy.getAncestors());
    })
        .catch((reason) => {
        copy.disconnect();
        if (reason) {
            (0,_tooltip__WEBPACK_IMPORTED_MODULE_6__.show)(reason, button);
        }
    });
}
function getCopy(node) {
    const copy = node.duplicate();
    copy.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
    return copy;
}
function doAction(node, parent, index, button) {
    const copy = getCopy(node);
    copy.move(parent, index);
    validate(copy, button);
}
function onClick(node, button, isAlt) {
    const previousNode = activeNode;
    reset();
    if (!isAlt) {
        validate(getCopy(node), button, false);
    }
    else if (!previousNode || node !== previousNode) {
        activeNode = node;
        _position__WEBPACK_IMPORTED_MODULE_4__.mount(node, node, node.parent, node.getSiblings(), _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, button, doAction);
    }
}
function mount(node) {
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.addActionButton)(_button__WEBPACK_IMPORTED_MODULE_1__["default"], onClick, node);
}
function shouldMount(node) {
    return 'seed' in node.parent;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/move/button.ts":
/*!************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/move/button.ts ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/move/consts.ts");
/* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/nodes/actions/buttons/position/button/alt.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const arrowTrunk = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
arrowTrunk.setAttribute('stroke-linecap', 'round');
arrowTrunk.setAttribute('stroke-width', '10');
arrowTrunk.setAttribute('y1', '-30');
arrowTrunk.setAttribute('y2', '30');
const arrowBottomLeft = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
arrowBottomLeft.setAttribute('stroke-linecap', 'round');
arrowBottomLeft.setAttribute('stroke-width', '10');
arrowBottomLeft.setAttribute('x2', '-12');
arrowBottomLeft.setAttribute('y1', '27');
arrowBottomLeft.setAttribute('y2', '15');
const arrowBottomRight = arrowBottomLeft.cloneNode(true);
arrowBottomRight.setAttribute('x2', '12');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(arrowTrunk, arrowBottomLeft, arrowBottomRight);
const BUTTON = (0,_position_button_alt__WEBPACK_IMPORTED_MODULE_1__.getPositionedButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Move');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/move/consts.ts":
/*!************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/move/consts.ts ***!
  \************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID)
/* harmony export */ });
const ACTION_ID = 'node-move';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/move/css.ts":
/*!*********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/move/css.ts ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/move/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/nodes/actions/buttons/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--nodeButtonMove');
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/move/index.ts":
/*!***********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/move/index.ts ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount),
/* harmony export */   unmount: () => (/* binding */ unmount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/move/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/nodes/actions/buttons/move/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");







let activeNode;
function reset() {
    if (!activeNode) {
        return;
    }
    _position__WEBPACK_IMPORTED_MODULE_4__.reset();
    activeNode = undefined;
}
function getAncestorBranches(node, copy) {
    if (node.parent === copy.parent) {
        return [node.getAncestors()];
    }
    const oldAncestors = node.getAncestors();
    const newAncestors = copy.getAncestors();
    for (let i = Math.min(oldAncestors.length, newAncestors.length) - 1; i > 1; --i) {
        if (oldAncestors[oldAncestors.length - i] === newAncestors[newAncestors.length - i]) {
            return [oldAncestors.slice(0, -i), newAncestors];
        }
    }
    // Branch is from the root
    return [oldAncestors.slice(0, -1), newAncestors];
}
function doAction(node, newParent, index, button, doScroll = true) {
    const copy = node.duplicate();
    node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_REMOVE_CLASS);
    copy.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
    copy.move(newParent, index);
    const ancestorBranches = getAncestorBranches(node, copy);
    Promise.all(ancestorBranches.map((branch) => Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(branch))))
        .then(() => {
        copy.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_ADD_CLASS);
        node.disconnect();
        reset();
        if (doScroll) {
            // Show where the node's been moved to
            copy.element.scrollIntoView();
        }
        for (const branch of ancestorBranches) {
            (0,_edit__WEBPACK_IMPORTED_MODULE_5__.triggerSubUpdateCallbacks)(branch);
        }
    })
        .catch((reason) => {
        node.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.TEST_REMOVE_CLASS);
        node.isActive = copy.isActive;
        copy.disconnect();
        if (reason) {
            _tooltip__WEBPACK_IMPORTED_MODULE_6__.show(reason, button);
        }
    });
}
function onClick(node, button, isAlt) {
    const previousNode = activeNode;
    reset();
    if (!isAlt) {
        const newIndex = node.getIndex() + 2;
        if (newIndex < node.parent.children.length + 1) {
            doAction(node, node.parent, newIndex, button, false);
        }
        else {
            _tooltip__WEBPACK_IMPORTED_MODULE_6__.show('Node can not be moved down.', button);
        }
    }
    else if (!previousNode || node !== previousNode) {
        // If the only valid target is the current parent
        if (_position__WEBPACK_IMPORTED_MODULE_4__.hasDestinations(node)) {
            activeNode = node;
            _position__WEBPACK_IMPORTED_MODULE_4__.mount(node, node, node.parent, node.getSiblings(), _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, button, doAction, false);
        }
        else {
            _tooltip__WEBPACK_IMPORTED_MODULE_6__.show('No other valid locations found.', button);
        }
    }
}
function unmount(node) {
    if (activeNode && node === activeNode) {
        reset();
    }
}
function mount(node) {
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.addActionButton)(_button__WEBPACK_IMPORTED_MODULE_1__["default"], onClick, node);
}
function shouldMount(node) {
    return Boolean(node.parent.seed) || ('poolId' in node.parent);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/position/button/alt.ts":
/*!********************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/position/button/alt.ts ***!
  \********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   getPositionedButton: () => (/* binding */ getPositionedButton)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const G_ALT = (() => {
    const arrowTrunk = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
    arrowTrunk.setAttribute('stroke-linecap', 'round');
    arrowTrunk.setAttribute('stroke-width', '10');
    arrowTrunk.setAttribute('y1', '-30');
    arrowTrunk.setAttribute('y2', '30');
    const arrowBottomLeft = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
    arrowBottomLeft.setAttribute('stroke-linecap', 'round');
    arrowBottomLeft.setAttribute('stroke-width', '10');
    arrowBottomLeft.setAttribute('x2', '-12');
    arrowBottomLeft.setAttribute('y1', '27');
    arrowBottomLeft.setAttribute('y2', '15');
    const arrowBottomRight = arrowBottomLeft.cloneNode(true);
    arrowBottomRight.setAttribute('x2', '12');
    const arrowTopRight = arrowBottomLeft.cloneNode(true);
    arrowTopRight.setAttribute('transform', 'rotate(180)');
    const arrowTopLeft = arrowBottomRight.cloneNode(true);
    arrowTopLeft.setAttribute('transform', 'rotate(180)');
    const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
    g.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ALT_CLASS);
    g.append(arrowTrunk, arrowBottomLeft, arrowBottomRight, arrowTopRight, arrowTopLeft);
    return g;
})();
function getPositionedButton(gDefault, actionId, description, transform = {}) {
    const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
    const gAlt = G_ALT.cloneNode(true);
    gAlt.setAttribute('transform', Object.entries(transform).map(([key, value]) => `${key}(${value})`).join(' '));
    g.append(gAlt, gDefault);
    return (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, actionId, description);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/position/button/index.ts":
/*!**********************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/position/button/index.ts ***!
  \**********************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BUTTON_PARENT: () => (/* binding */ BUTTON_PARENT),
/* harmony export */   BUTTON_SIBLING: () => (/* binding */ BUTTON_SIBLING)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/buttons/position/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const arrowTrunk = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
arrowTrunk.setAttribute('stroke-linecap', 'round');
arrowTrunk.setAttribute('stroke-width', '10');
arrowTrunk.setAttribute('y1', '-30');
arrowTrunk.setAttribute('y2', '30');
const arrowBottomLeft = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
arrowBottomLeft.setAttribute('stroke-linecap', 'round');
arrowBottomLeft.setAttribute('stroke-width', '10');
arrowBottomLeft.setAttribute('x2', '-12');
arrowBottomLeft.setAttribute('y1', '27');
arrowBottomLeft.setAttribute('y2', '15');
const arrowBottomRight = arrowBottomLeft.cloneNode(true);
arrowBottomRight.setAttribute('x2', '12');
const gMain = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
gMain.append(arrowTrunk, arrowBottomLeft, arrowBottomRight);
const gSibling = gMain.cloneNode(true);
const BUTTON_SIBLING = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(gSibling, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Select After');
const gParent = gMain.cloneNode(true);
gParent.setAttribute('transform', 'rotate(-45)');
const BUTTON_PARENT = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(gParent, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Select Into');


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/position/consts.ts":
/*!****************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/position/consts.ts ***!
  \****************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID)
/* harmony export */ });
const ACTION_ID = 'node-position';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/position/css.ts":
/*!*************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/position/css.ts ***!
  \*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/position/consts.ts");
/* harmony import */ var _focus_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../focus/consts */ "./ts/modal/body/nodes/actions/focus/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");




function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ROOT_CLASS}.${_focus_consts__WEBPACK_IMPORTED_MODULE_1__.FOCUS_CLASS} `
        + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_focus_consts__WEBPACK_IMPORTED_MODULE_1__.FOCUS_CLASS})`, ['display', 'none']);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/buttons/position/index.ts":
/*!***************************************************************!*\
  !*** ./ts/modal/body/nodes/actions/buttons/position/index.ts ***!
  \***************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   getButton: () => (/* binding */ getButton),
/* harmony export */   hasDestinations: () => (/* binding */ hasDestinations),
/* harmony export */   isActive: () => (/* binding */ isActive),
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   reset: () => (/* binding */ reset)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/buttons/position/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/nodes/actions/buttons/position/button/index.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/nodes/actions/buttons/button.ts");
/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");







const destinations = [];
let origin;
function isActive() {
    return Boolean(origin);
}
function setActive(doActivate = true) {
    (0,_modal_body__WEBPACK_IMPORTED_MODULE_5__.setActive)(origin.button, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, doActivate);
    (0,_focus__WEBPACK_IMPORTED_MODULE_3__.reset)();
    (0,_focus__WEBPACK_IMPORTED_MODULE_3__.focus)(doActivate, origin.source, false);
    (0,_focus__WEBPACK_IMPORTED_MODULE_3__.focusBranch)(doActivate, origin.source, doActivate);
    if (doActivate) {
        (0,_focus__WEBPACK_IMPORTED_MODULE_3__.setTabIndexes)(false, origin.source);
        origin.button.setAttribute('tabIndex', '1');
    }
    else {
        origin.button.setAttribute('tabIndex', '-1');
    }
    origin.source.element.headContainer.focus();
}
function reset() {
    if (!origin) {
        return;
    }
    for (const { node, isParent, button } of destinations) {
        (0,_focus__WEBPACK_IMPORTED_MODULE_3__.focusBranch)(false, node, isParent);
        button.remove();
    }
    destinations.length = 0;
    (0,_highlight__WEBPACK_IMPORTED_MODULE_4__.removeSustained)(origin.source);
    setActive(false);
    origin = undefined;
}
function getButton(node, actionId, onClick, isParent) {
    const button = (0,_button__WEBPACK_IMPORTED_MODULE_2__.addActionButton)(isParent ? _button__WEBPACK_IMPORTED_MODULE_1__.BUTTON_PARENT : _button__WEBPACK_IMPORTED_MODULE_1__.BUTTON_SIBLING, onClick, node);
    button.classList.add(actionId);
    button.classList.add(_modal_consts__WEBPACK_IMPORTED_MODULE_6__.BUTTON_ACTIVE_CLASS);
    button.setAttribute('tabIndex', '1');
    return button;
}
function getBoundCallback(callback, parent, index) {
    return (_, button) => callback(parent, index, button);
}
function addButtons(parent, actionId, callback, includeSelf) {
    const isCurrentParent = parent === origin.parent;
    if (isCurrentParent || (origin.isPooled && parent.poolId === origin.parent.poolId)) {
        destinations.push({
            node: parent,
            isParent: true,
            button: getButton(parent, actionId, getBoundCallback(callback, parent, 0), true),
        });
        (0,_focus__WEBPACK_IMPORTED_MODULE_3__.focusBranch)(true, parent);
        for (const target of (!includeSelf && isCurrentParent) ? origin.siblings : parent.children) {
            (0,_focus__WEBPACK_IMPORTED_MODULE_3__.focusBranch)(true, target, false);
            destinations.push({
                node: target,
                isParent: false,
                button: getButton(target, actionId, getBoundCallback(callback, target.parent, target.getIndex() + 1), false),
            });
        }
    }
    // Nodes can't be their own descendants
    if (!isCurrentParent) {
        for (const child of parent.children) {
            if ('children' in child) {
                addButtons(child, actionId, callback, includeSelf);
            }
        }
    }
}
function hasDestinations(node) {
    if (node.parent.children.length > 1) {
        return true;
    }
    if (!('poolId' in node.parent)) {
        return false;
    }
    const hasMatchingPool = (parent, poolId) => {
        if (parent !== node.parent) {
            if (parent.poolId === poolId) {
                return true;
            }
            for (const child of parent.children) {
                if ('children' in child && hasMatchingPool(child, poolId)) {
                    return true;
                }
            }
        }
        return false;
    };
    return hasMatchingPool(node.getRoot(), node.parent.poolId);
}
function mount(source, child, parent, siblings, actionId, button, callback, includeSelf = true) {
    reset();
    origin = {
        source,
        child,
        siblings,
        parent,
        isPooled: 'poolId' in parent,
        button,
        actionId,
    };
    addButtons(parent.getRoot(), actionId, callback.bind(null, source), includeSelf);
    (0,_highlight__WEBPACK_IMPORTED_MODULE_4__.addSustained)(source);
    setActive();
    return destinations.length;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/css.ts":
/*!********************************************!*\
  !*** ./ts/modal/body/nodes/actions/css.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _edit_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./edit/css */ "./ts/modal/body/nodes/actions/edit/css.ts");
/* harmony import */ var _edit_option_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit/option/css */ "./ts/modal/body/nodes/actions/edit/option/css.ts");
/* harmony import */ var _highlight_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./highlight/css */ "./ts/modal/body/nodes/actions/highlight/css.ts");
/* harmony import */ var _focus_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./focus/css */ "./ts/modal/body/nodes/actions/focus/css.ts");
/* harmony import */ var _tooltip_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tooltip/css */ "./ts/modal/body/nodes/actions/tooltip/css.ts");
/* harmony import */ var _buttons_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./buttons/css */ "./ts/modal/body/nodes/actions/buttons/css.ts");






function generate() {
    (0,_edit_css__WEBPACK_IMPORTED_MODULE_0__["default"])();
    (0,_edit_option_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    (0,_highlight_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_focus_css__WEBPACK_IMPORTED_MODULE_3__["default"])();
    (0,_tooltip_css__WEBPACK_IMPORTED_MODULE_4__["default"])();
    (0,_buttons_css__WEBPACK_IMPORTED_MODULE_5__["default"])();
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/consts.ts":
/*!****************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/consts.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTIVE_CLASS: () => (/* binding */ ACTIVE_CLASS),
/* harmony export */   EDITABLE_CLASS: () => (/* binding */ EDITABLE_CLASS),
/* harmony export */   INVALID_BACKGROUND_CLASS: () => (/* binding */ INVALID_BACKGROUND_CLASS),
/* harmony export */   INVALID_CLASS: () => (/* binding */ INVALID_CLASS),
/* harmony export */   VALID_BACKGROUND_CLASS: () => (/* binding */ VALID_BACKGROUND_CLASS),
/* harmony export */   VALID_CLASS: () => (/* binding */ VALID_CLASS)
/* harmony export */ });
const EDITABLE_CLASS = 'editable';
const ACTIVE_CLASS = 'edit-active';
const VALID_CLASS = 'edit-valid';
const INVALID_CLASS = 'edit-invalid';
const VALID_BACKGROUND_CLASS = 'background-valid';
const INVALID_BACKGROUND_CLASS = 'background-invalid';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/css.ts":
/*!*************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/css.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/edit/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");



function generate() {
    // Use pointer when the node has a value and isn't being edited
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.EDITABLE_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER}`, ['cursor', 'pointer']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTIVE_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.INFO_CONTAINER}`, ['pointer-events', 'none']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}`, [
        ['flex-grow', '1'],
        ['outline', 'none'],
        ['min-width', '0'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}[type="checkbox"]`, [
        ['min-height', '1em'],
        ['min-width', '1em'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}[type="color"]`, [
        ['height', '1.3em'],
        ['cursor', 'pointer'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`, ['background-color', 'var(--validBackground)']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS}`, ['background-color', 'var(--invalidBackground)']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS}`], [
        ['transition-property', 'width, padding-left'],
        ['transition-duration', '500ms'],
        ['right', '0'],
        ['width', '0'],
        ['padding-left', '0'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS}`,
    ], ['width', '100%']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS}`,
    ], ['padding-left', '0.8em']);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/index.ts":
/*!***************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/index.ts ***!
  \***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   doAction: () => (/* binding */ doAction),
/* harmony export */   getSubPredicateResponses: () => (/* binding */ getSubPredicateResponses),
/* harmony export */   isActive: () => (/* binding */ isActive),
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount),
/* harmony export */   triggerSubUpdateCallbacks: () => (/* binding */ triggerSubUpdateCallbacks),
/* harmony export */   unmount: () => (/* binding */ unmount),
/* harmony export */   update: () => (/* binding */ update)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/edit/consts.ts");
/* harmony import */ var _option__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./option */ "./ts/modal/body/nodes/actions/edit/option/index.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");
/* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _predicate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/predicate */ "./ts/predicate.ts");
var __awaiter = (undefined && undefined.__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());
    });
};





let activeNode;
function isActive() {
    return Boolean(activeNode);
}
function reset() {
    if (!activeNode) {
        return;
    }
    const { element } = activeNode;
    activeNode.value = activeNode.lastAcceptedValue;
    element.render(activeNode.value);
    element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS);
    element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS);
    element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTIVE_CLASS);
    _tooltip__WEBPACK_IMPORTED_MODULE_2__.reset();
    _option__WEBPACK_IMPORTED_MODULE_1__.reset();
    (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.removeSustained)(activeNode);
    activeNode = undefined;
}
function getValue(node) {
    switch (typeof node.value) {
        case 'boolean':
            return Boolean(node.element.contrast.valueElement.checked);
        case 'number':
            return Number(node.element.contrast.valueElement.value);
        default:
            return node.element.contrast.valueElement.value;
    }
}
function getSubPredicateResponses(ancestors = activeNode.getAncestors()) {
    const responses = [];
    if ('childPredicate' in ancestors[0]) {
        responses.push((0,_predicate__WEBPACK_IMPORTED_MODULE_4__.getPredicatePromise)(ancestors[0].childPredicate()));
    }
    for (const ancestor of ancestors) {
        if ('descendantPredicate' in ancestor) {
            responses.push((0,_predicate__WEBPACK_IMPORTED_MODULE_4__.getPredicatePromise)(ancestor.descendantPredicate()));
        }
    }
    return responses;
}
function getAllPredicateResponses() {
    if (activeNode.forceValid || ('options' in activeNode && activeNode.options.includes(activeNode.value))) {
        return getSubPredicateResponses();
    }
    if ('predicate' in activeNode) {
        return [(0,_predicate__WEBPACK_IMPORTED_MODULE_4__.getPredicatePromise)(activeNode.predicate(activeNode.value)), ...getSubPredicateResponses()];
    }
    return [Promise.reject()];
}
function triggerSubUpdateCallbacks(ancestors = activeNode.getAncestors()) {
    if ('onChildUpdate' in ancestors[0]) {
        ancestors[0].onChildUpdate();
    }
    for (const ancestor of ancestors) {
        if ('onDescendantUpdate' in ancestor) {
            ancestor.onDescendantUpdate();
        }
    }
}
function triggerAllUpdateCallbacks() {
    if ('onUpdate' in activeNode) {
        activeNode.onUpdate(activeNode.value);
    }
    triggerSubUpdateCallbacks();
}
function update() {
    return __awaiter(this, void 0, void 0, function* () {
        const value = getValue(activeNode);
        activeNode.value = value;
        if ('options' in activeNode) {
            _option__WEBPACK_IMPORTED_MODULE_1__.update(activeNode.value);
        }
        activeNode.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS);
        activeNode.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS);
        try {
            yield Promise.all(getAllPredicateResponses());
        }
        catch (reason) {
            activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS);
            if (reason) {
                _tooltip__WEBPACK_IMPORTED_MODULE_2__.show(reason);
            }
            return;
        }
        if ((0,_predicate__WEBPACK_IMPORTED_MODULE_4__.isUnresolved)()) {
            return;
        }
        activeNode.lastAcceptedValue = value;
        activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS);
        _tooltip__WEBPACK_IMPORTED_MODULE_2__.hide();
        triggerAllUpdateCallbacks();
    });
}
function unmount(node) {
    if (node === activeNode) {
        reset();
    }
}
function doAction(node) {
    if (activeNode === node || (0,_predicate__WEBPACK_IMPORTED_MODULE_4__.isUnresolved)()) {
        _tooltip__WEBPACK_IMPORTED_MODULE_2__.showUnresolved(node.element.contrast.container);
        node.element.headContainer.focus();
        return;
    }
    reset();
    _tooltip__WEBPACK_IMPORTED_MODULE_2__.kill();
    activeNode = node;
    activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTIVE_CLASS);
    activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS);
    _tooltip__WEBPACK_IMPORTED_MODULE_2__.setNode(node);
    if ('options' in node) {
        _option__WEBPACK_IMPORTED_MODULE_1__.setNode(node);
    }
    if (node.input === 'color') {
        node.element.contrast.valueElement.click();
    }
    else if (typeof node.value !== 'boolean') {
        const input = node.element.contrast.valueElement;
        input.select();
        input.scrollLeft = input.scrollWidth;
    }
    (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.addSustained)(node);
}
function mount(node) {
    const { backgroundContainer, contrast: { valueElement, valueContainer }, headContainer } = node.element;
    node.lastAcceptedValue = node.value;
    node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.EDITABLE_CLASS);
    backgroundContainer.append(...(() => {
        const valid = document.createElement('div');
        const invalid = document.createElement('div');
        valid.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS);
        invalid.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS);
        return [valid, invalid];
    })());
    // Start
    valueElement.addEventListener('focus', (event) => {
        event.stopPropagation();
        if (event.relatedTarget) {
            doAction(node);
        }
    });
    valueElement.addEventListener('blur', (event) => {
        event.stopPropagation();
        if ((0,_predicate__WEBPACK_IMPORTED_MODULE_4__.isUnresolved)()) {
            valueElement.focus();
            return;
        }
        reset();
    });
    headContainer.addEventListener('click', (event) => {
        event.stopPropagation();
        valueElement.focus();
    });
    // Process new value
    if (typeof node.value === 'boolean') {
        headContainer.addEventListener('mousedown', (event) => {
            event.stopPropagation();
            event.preventDefault();
        });
        headContainer.addEventListener('click', () => {
            valueElement.checked = !valueElement.checked;
            update();
        });
        valueContainer.addEventListener('click', (event) => {
            event.stopPropagation();
        });
        valueElement.addEventListener('click', (event) => {
            event.stopPropagation();
            update();
        });
    }
    else {
        valueElement.addEventListener('input', (event) => {
            event.stopPropagation();
            update();
        });
    }
    if ('options' in node) {
        _option__WEBPACK_IMPORTED_MODULE_1__.generate(node);
    }
    valueElement.addEventListener('keydown', (event) => {
        switch (event.key) {
            case 'Enter':
            case 'Escape':
                event.stopPropagation();
                if ((0,_predicate__WEBPACK_IMPORTED_MODULE_4__.isUnresolved)()) {
                    event.preventDefault();
                }
                else {
                    headContainer.focus();
                }
        }
    });
}
function shouldMount(node) {
    return 'value' in node;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/option/consts.ts":
/*!***********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/option/consts.ts ***!
  \***********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   OPTION_ACTIVE_CLASS: () => (/* binding */ OPTION_ACTIVE_CLASS),
/* harmony export */   OPTION_BACKGROUND_CLASS: () => (/* binding */ OPTION_BACKGROUND_CLASS),
/* harmony export */   OPTION_CLASS: () => (/* binding */ OPTION_CLASS),
/* harmony export */   OPTION_CONTAINER_CLASS: () => (/* binding */ OPTION_CONTAINER_CLASS),
/* harmony export */   OPTION_PARENT_CLASS: () => (/* binding */ OPTION_PARENT_CLASS),
/* harmony export */   OPTION_SHOW_CLASS: () => (/* binding */ OPTION_SHOW_CLASS),
/* harmony export */   OPTION_WRAPPER_CLASS: () => (/* binding */ OPTION_WRAPPER_CLASS)
/* harmony export */ });
const OPTION_CLASS = 'option';
const OPTION_CONTAINER_CLASS = 'option-container';
const OPTION_PARENT_CLASS = 'option-parent';
const OPTION_WRAPPER_CLASS = 'option-wrapper';
const OPTION_BACKGROUND_CLASS = 'option-background';
const OPTION_SHOW_CLASS = 'option-show';
const OPTION_ACTIVE_CLASS = 'option-active';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/option/css.ts":
/*!********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/option/css.ts ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/edit/option/consts.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/nodes/actions/edit/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");





function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_WRAPPER_CLASS}`, [
        ['z-index', '2'],
        ['position', 'absolute'],
        ['bottom', '0'],
        ['display', 'flex'],
        ['width', '100%'],
        ['pointer-events', 'initial'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_PARENT_CLASS}`, [
        ['position', 'absolute'],
        ['display', 'flex'],
        ['flex-direction', 'column'],
        ['width', '100%'],
        ['margin-left', '-1px'],
        ['max-height', 'calc(4.2em + 5px)'],
        ['overflow-y', 'auto'],
        ['border-bottom-left-radius', '12px'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_PARENT_CLASS}:not(.${_consts__WEBPACK_IMPORTED_MODULE_1__.ACTIVE_CLASS} *) `, [['display', 'none']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CONTAINER_CLASS}`, [['position', 'relative']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CONTAINER_CLASS} > *`, [['height', '1.4em']]);
    (0,_modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_3__.addDepthChangeListener)((depth, addRule) => {
        const headSelector = `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.DEPTH_CLASS_PREFIX}${depth} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.HEAD_CONTAINER}`;
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_PARENT_CLASS}`, [['border', `1px solid var(--nodeBase${depth})`]]);
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CONTAINER_CLASS}`, [
            ['background-color', `var(--nodeContrast${depth})`],
            ['color', `var(--nodeBase${depth})`],
            ['border', `1px solid var(--nodeBase${depth})`],
        ]);
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_BACKGROUND_CLASS}`, [['background-color', `var(--nodeBase${depth})`]]);
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_ACTIVE_CLASS} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CLASS}`, [['color', `var(--nodeContrast${depth})`]]);
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_ACTIVE_CLASS} .${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_BACKGROUND_CLASS}`, [['width', '100%']]);
    });
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CLASS}`, [
        ['position', 'relative'],
        ['transition-property', 'all'],
        ['transition-duration', '500ms'],
        ['padding', '0 0.6rem'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_BACKGROUND_CLASS}`, [
        ['position', 'absolute'],
        ['width', '0'],
        ['transition', 'width 500ms ease 0s'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CONTAINER_CLASS}:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS})`, [['display', 'none']]);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/edit/option/index.ts":
/*!**********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/edit/option/index.ts ***!
  \**********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   generate: () => (/* binding */ generate),
/* harmony export */   isActive: () => (/* binding */ isActive),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   setNode: () => (/* binding */ setNode),
/* harmony export */   update: () => (/* binding */ update)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/edit/option/consts.ts");
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../index */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");




const activeOptions = [];
let activeIndex = -1;
function isActive() {
    return activeOptions.some(({ parentElement }) => parentElement.classList.contains(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS));
}
function getTotalOffsetTop(from) {
    let offsetTop = 2;
    let node;
    for (node = from; !node.classList.contains(_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ROOT_CLASS); node = node.offsetParent) {
        offsetTop += node.offsetTop;
    }
    return offsetTop;
}
// source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping
function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function setActive(option, isActive = true) {
    option.classList[isActive ? 'add' : 'remove'](_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_ACTIVE_CLASS);
}
function deselect() {
    if (activeIndex === -1) {
        return;
    }
    setActive(activeOptions[activeIndex].parentElement, false);
    activeIndex = -1;
}
function update(value) {
    const stringValue = `${value}`;
    const regExp = new RegExp(escapeRegExp(stringValue), 'i');
    let hasVisibleChild = false;
    for (const { parentElement, innerText } of activeOptions) {
        if (stringValue.length < innerText.length && regExp.test(innerText)) {
            parentElement.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS);
            hasVisibleChild = true;
        }
        else {
            parentElement.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS);
        }
    }
    const wrapper = activeOptions[0].parentElement.parentElement;
    if (!hasVisibleChild) {
        wrapper.style.setProperty('display', 'none');
        return;
    }
    wrapper.style.removeProperty('display');
    const totalOffsetTop = getTotalOffsetTop(wrapper);
    if (_modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop + _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.clientHeight < totalOffsetTop + wrapper.clientHeight) {
        _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop = totalOffsetTop + wrapper.clientHeight - _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.clientHeight;
    }
    deselect();
}
function setValue(node, value) {
    node.element.contrast.valueElement.value = value;
    (0,_index__WEBPACK_IMPORTED_MODULE_1__.update)();
    deselect();
}
function reset() {
    for (const { parentElement } of activeOptions) {
        parentElement.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS);
    }
    deselect();
    activeOptions.length = 0;
}
function setNode(node) {
    // Using Array.from so typescript doesn't complain
    activeOptions.push(...Array.from(node.element.contrast.valueContainer.querySelectorAll(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CLASS}`)));
    update(node.value);
}
function generate(node) {
    const wrapper = document.createElement('div');
    const parent = document.createElement('div');
    for (const value of node.options) {
        const container = document.createElement('div');
        const background = document.createElement('div');
        const option = document.createElement('div');
        option.innerText = value;
        container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CONTAINER_CLASS);
        option.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_CLASS);
        background.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_BACKGROUND_CLASS);
        container.append(background, option);
        parent.appendChild(container);
        container.addEventListener('mousedown', (event) => {
            event.stopPropagation();
            event.preventDefault();
        });
        container.addEventListener('click', (event) => {
            event.stopPropagation();
            setValue(node, value);
        });
        container.addEventListener('mouseenter', (event) => {
            event.stopPropagation();
            setActive(container);
        });
        container.addEventListener('mouseleave', (event) => {
            event.stopPropagation();
            setActive(container, false);
        });
    }
    node.element.contrast.valueElement.addEventListener('keydown', (event) => {
        const priorIndex = activeIndex;
        let hasChanged = false;
        switch (event.key) {
            case 'Tab':
            case 'Enter':
                if (activeIndex >= 0) {
                    event.stopImmediatePropagation();
                    event.preventDefault();
                    setValue(node, activeOptions[activeIndex].innerText);
                }
                return;
            case 'ArrowDown':
                for (let i = activeIndex + 1; i < activeOptions.length; ++i) {
                    const { parentElement } = activeOptions[i];
                    if (parentElement.classList.contains(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS)) {
                        activeIndex = i;
                        hasChanged = true;
                        const optionBottom = parentElement.offsetTop + parentElement.clientHeight;
                        if (parentElement.parentElement.scrollTop < optionBottom) {
                            parentElement.parentElement.scrollTop = optionBottom - parentElement.parentElement.clientHeight;
                        }
                        const totalOffsetTop = getTotalOffsetTop(parentElement);
                        if (_modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop + _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.clientHeight < totalOffsetTop + parentElement.clientHeight - parentElement.parentElement.scrollTop) {
                            _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop = totalOffsetTop + parentElement.clientHeight - _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.clientHeight - parentElement.parentElement.scrollTop;
                        }
                        break;
                    }
                }
                break;
            case 'ArrowUp':
                for (let i = activeIndex - 1; i >= 0; --i) {
                    const { parentElement } = activeOptions[i];
                    if (parentElement.classList.contains(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS)) {
                        activeIndex = i;
                        hasChanged = true;
                        // Scroll option list if necessary
                        if (parentElement.parentElement.scrollTop > parentElement.offsetTop) {
                            parentElement.parentElement.scrollTop = parentElement.offsetTop;
                        }
                        const totalOffsetTop = getTotalOffsetTop(parentElement);
                        // Scroll modal body if necessary
                        if (_modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop > totalOffsetTop - parentElement.parentElement.scrollTop) {
                            _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop = totalOffsetTop - parentElement.parentElement.scrollTop;
                        }
                        break;
                    }
                }
                if (hasChanged) {
                    break;
                }
            // eslint-disable-next-line no-fallthrough
            default:
                if (activeIndex >= 0) {
                    setActive(activeOptions[activeIndex].parentElement, false);
                }
                activeIndex = -1;
                return;
        }
        if (!hasChanged) {
            return;
        }
        if (priorIndex >= 0) {
            setActive(activeOptions[priorIndex].parentElement, false);
        }
        const { parentElement } = activeOptions[activeIndex];
        setActive(parentElement);
    });
    wrapper.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_WRAPPER_CLASS);
    parent.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_PARENT_CLASS);
    wrapper.appendChild(parent);
    node.element.contrast.valueContainer.appendChild(wrapper);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/focus/consts.ts":
/*!*****************************************************!*\
  !*** ./ts/modal/body/nodes/actions/focus/consts.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   FOCUS_CLASS: () => (/* binding */ FOCUS_CLASS),
/* harmony export */   FOCUS_SOURCE_CLASS: () => (/* binding */ FOCUS_SOURCE_CLASS)
/* harmony export */ });
const FOCUS_CLASS = 'node-focus';
const FOCUS_SOURCE_CLASS = 'node-focus-source';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/focus/css.ts":
/*!**************************************************!*\
  !*** ./ts/modal/body/nodes/actions/focus/css.ts ***!
  \**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/focus/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");



function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.ELEMENT_CONTAINER}`, ['cursor', 'zoom-in']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.ELEMENT_CONTAINER}.${_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_SOURCE_CLASS}`, ['cursor', 'zoom-out']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ROOT_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_CLASS}):not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_SOURCE_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.CHILD_CONTAINER} > *)`, ['display', 'none']);
    // Makes it easy to focus down the tree
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_SOURCE_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.MIDDLE_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.HEAD_CONTAINER}`, [['margin-left', '1.8em']]);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/focus/index.ts":
/*!****************************************************!*\
  !*** ./ts/modal/body/nodes/actions/focus/index.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   doAction: () => (/* binding */ doAction),
/* harmony export */   focus: () => (/* binding */ focus),
/* harmony export */   focusBranch: () => (/* binding */ focusBranch),
/* harmony export */   isActive: () => (/* binding */ isActive),
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   setTabIndexes: () => (/* binding */ setTabIndexes),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount),
/* harmony export */   unmount: () => (/* binding */ unmount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/focus/consts.ts");
/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tooltip */ "./ts/modal/body/nodes/actions/tooltip/index.ts");
/* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../buttons/position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../active */ "./ts/modal/body/nodes/actions/active.ts");





let candidateNode;
let activeNode;
function isActive() {
    return Boolean(activeNode);
}
function setTabIndexes(doAdd = true, node = activeNode) {
    const { 'buttonContainer': { 'children': buttons }, contrast: { valueElement } } = node.element;
    for (let i = buttons.length - 1; i >= 0; --i) {
        // Must be set to -1 to prevent tabbing (removeAttribute sets it to 0)
        buttons[i].setAttribute('tabIndex', doAdd ? '1' : '-1');
    }
    if (valueElement) {
        valueElement.setAttribute('tabIndex', doAdd ? '1' : '-1');
    }
}
function focus(doFocus = true, node = activeNode, doForce = true) {
    // Avoid unfocusing the active node if not forced
    if (doForce || node !== activeNode) {
        node.element[`${doFocus ? 'add' : 'remove'}Class`](_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_SOURCE_CLASS);
    }
    if (!('children' in node)) {
        return;
    }
}
function focusBranch(doFocus = true, node = activeNode, focusAncestors = true) {
    node.element[`${doFocus ? 'add' : 'remove'}Class`](_consts__WEBPACK_IMPORTED_MODULE_0__.FOCUS_CLASS);
    if (focusAncestors && 'parent' in node) {
        focusBranch(doFocus, node.parent);
    }
}
function reset() {
    if (!activeNode) {
        return;
    }
    focus(false);
    focusBranch(false);
    (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.removeSustained)(activeNode);
    setTabIndexes(false);
    activeNode.element.scrollIntoView();
    activeNode = undefined;
}
function doAction(node, doForce = false) {
    const toggleOn = node !== activeNode;
    (0,_tooltip__WEBPACK_IMPORTED_MODULE_1__.kill)();
    // Avoid changing the view when it's already been focused
    if ((0,_buttons_position__WEBPACK_IMPORTED_MODULE_2__.isActive)() || (doForce && !toggleOn)) {
        return;
    }
    reset();
    _active__WEBPACK_IMPORTED_MODULE_4__.register();
    if (toggleOn) {
        activeNode = node;
        node.element.headContainer.focus();
        focus();
        focusBranch();
        (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.addSustained)(node);
        setTabIndexes();
    }
}
function unmount(node) {
    if (node === activeNode) {
        reset();
    }
}
function mount(node) {
    const { elementContainer, headContainer } = node.element;
    // Handle keyboard input
    elementContainer.addEventListener('keydown', (event) => {
        if (event.key === 'Enter') {
            event.stopPropagation();
            doAction(node);
        }
    });
    // Handle side click
    elementContainer.addEventListener('mousedown', (event) => {
        event.stopPropagation();
        candidateNode = node;
    });
    elementContainer.addEventListener('mouseup', (event) => {
        event.stopPropagation();
        if (node === candidateNode) {
            doAction(node);
        }
        candidateNode = undefined;
    });
    if ('value' in node) {
        headContainer.addEventListener('mousedown', (event) => {
            event.stopPropagation();
            candidateNode = undefined;
        });
        headContainer.addEventListener('mouseup', (event) => {
            event.stopPropagation();
            candidateNode = undefined;
        });
        return;
    }
    // Handle head click
    headContainer.addEventListener('mousedown', (event) => {
        event.stopPropagation();
        candidateNode = node;
    });
    headContainer.addEventListener('mouseup', (event) => {
        event.stopPropagation();
        if (node === candidateNode && headContainer.isSameNode(event.target)) {
            doAction(node);
        }
        candidateNode = undefined;
    });
}
function shouldMount() {
    return true;
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/highlight/consts.ts":
/*!*********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/highlight/consts.ts ***!
  \*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   EAVE_ID: () => (/* binding */ EAVE_ID),
/* harmony export */   HIGHLIGHT_BACKGROUND_CLASS: () => (/* binding */ HIGHLIGHT_BACKGROUND_CLASS),
/* harmony export */   HIGHLIGHT_CLASS: () => (/* binding */ HIGHLIGHT_CLASS)
/* harmony export */ });
const HIGHLIGHT_CLASS = 'highlight';
const HIGHLIGHT_BACKGROUND_CLASS = 'background-highlight';
const EAVE_ID = 'tree-eave';


/***/ }),

/***/ "./ts/modal/body/nodes/actions/highlight/css.ts":
/*!******************************************************!*\
  !*** ./ts/modal/body/nodes/actions/highlight/css.ts ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/highlight/consts.ts");
/* harmony import */ var _buttons_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../buttons/consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");





function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [
        ['padding-right', '0.4em'],
        // Extend the background further into the value
        ['padding-left', '4em'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_CLASS}:last-child`, [
        ['border-top-right-radius', '0.8em'],
        ['border-bottom-right-radius', '0.8em'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)([`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS}`], [
        ['transition-property', 'width'],
        ['transition-duration', '500ms'],
        ['overflow', 'hidden'],
        ['right', '0'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.HEAD_CONTAINER} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS}`,
        `.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_ADD_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS}`,
        `.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_REMOVE_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS}`,
    ], [['width', '0']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > *`, [['margin-left', '-0.8em']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`, [
        ['transition-property', 'width, padding-left'],
        ['transition-duration', '500ms'],
        ['width', '100%'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS}) > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty):not(.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_ADD_CLASS} *):not(.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_REMOVE_CLASS} *) + * .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`, [['width', '0']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`,
        `.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_ADD_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`,
        `.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.TEST_REMOVE_CLASS} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BUTTON_CONTAINER}:not(:empty) + * .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`,
    ], [['padding-left', '0.8em']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`, [
        ['height', '100%'],
        ['width', '100%'],
        ['padding-left', '0'],
    ]);
    (0,_modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_3__.addDepthChangeListener)((depth, addRule) => {
        const rootSelector = `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.DEPTH_CLASS_PREFIX}${depth}`;
        const headSelector = `${rootSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.HEAD_CONTAINER}`;
        addRule(`${headSelector} .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`, ['background-color', `var(--nodeContrast${depth})`]);
        addRule(`${headSelector} .${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_CLASS}`, ['background-color', `var(--nodeContrast${depth})`]);
        addRule([`${headSelector} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS}`], [
            ['color', `var(--nodeContrast${depth})`],
            ['background-color', `var(--nodeBase${depth})`],
        ]);
        addRule([`${headSelector} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.CONTRAST_CLASS}`], [['color', `var(--nodeBase${depth})`]]);
        addRule(`${headSelector} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.BASE_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [['background-image', `linear-gradient(to right, transparent, 1.9em, var(--nodeBase${depth}) 3.8em)`]]);
        addRule(`${headSelector} .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.CONTRAST_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [['background-image', `linear-gradient(to right, transparent, 1.9em, var(--nodeContrast${depth}) 3.8em)`]]);
    });
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.EAVE_ID}`, [
        ['position', 'absolute'],
        ['bottom', '0'],
        ['width', '100%'],
        ['height', '1px'],
    ]);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/highlight/index.ts":
/*!********************************************************!*\
  !*** ./ts/modal/body/nodes/actions/highlight/index.ts ***!
  \********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addSustained: () => (/* binding */ addSustained),
/* harmony export */   focusHovered: () => (/* binding */ focusHovered),
/* harmony export */   generateEave: () => (/* binding */ generateEave),
/* harmony export */   isActive: () => (/* binding */ isActive),
/* harmony export */   mount: () => (/* binding */ mount),
/* harmony export */   onMount: () => (/* binding */ onMount),
/* harmony export */   removeSustained: () => (/* binding */ removeSustained),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   shouldMount: () => (/* binding */ shouldMount)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/highlight/consts.ts");
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../buttons/position */ "./ts/modal/body/nodes/actions/buttons/position/index.ts");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal */ "./ts/modal/index.ts");





let sustainedNodes = [];
let activeNode;
function focusHovered() {
    if (activeNode) {
        activeNode.element.headContainer.focus();
    }
}
function isActive() {
    return Boolean(activeNode);
}
function removeSustained(node) {
    sustainedNodes.splice(sustainedNodes.indexOf(node), 1);
    // Avoid unhighlighting if it's still sustained by another action
    if (node !== activeNode && !sustainedNodes.includes(node)) {
        node.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS);
    }
}
function addSustained(node) {
    node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS);
    sustainedNodes.push(node);
}
function setActive(node, doFocus = false) {
    if (activeNode && !sustainedNodes.includes(activeNode)) {
        activeNode.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS);
    }
    activeNode = node;
    if (node) {
        node.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS);
        if (doFocus) {
            node.element.headContainer.focus();
        }
    }
}
function mount(node) {
    const { backgroundContainer, headContainer, elementContainer, infoContainer, base } = node.element;
    if (base.valueContainer) {
        (new ResizeObserver(() => {
            base.valueContainer.style.setProperty('width', `${infoContainer.clientWidth}px`);
        })).observe(infoContainer);
    }
    backgroundContainer.appendChild((() => {
        const background = document.createElement('div');
        background.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS);
        return background;
    })());
    headContainer.setAttribute('tabIndex', '1');
    headContainer.addEventListener('focusin', (event) => {
        event.stopPropagation();
        // Filters out events fired from re-focusing the window
        if (event.relatedTarget) {
            setActive(node);
        }
    });
    headContainer.addEventListener('mouseenter', (event) => {
        event.stopPropagation();
        setActive(node, !((0,_edit__WEBPACK_IMPORTED_MODULE_1__.isActive)() || (0,_focus__WEBPACK_IMPORTED_MODULE_2__.isActive)() || (0,_buttons_position__WEBPACK_IMPORTED_MODULE_3__.isActive)()));
    });
    elementContainer.addEventListener('mouseenter', (event) => {
        event.stopPropagation();
        setActive(node);
    });
    elementContainer.addEventListener('mouseleave', (event) => {
        event.stopPropagation();
        if ('parent' in node) {
            setActive(node.parent);
        }
        else {
            setActive();
        }
    });
}
function shouldMount() {
    return true;
}
// Prevents zipping to the end of the tree when mousing over the bottom pixel
function generateEave() {
    const element = document.createElement('div');
    element.id = _consts__WEBPACK_IMPORTED_MODULE_0__.EAVE_ID;
    element.setAttribute('tabIndex', '3');
    // Prevent tabbing away from the modal
    element.addEventListener('keydown', (event) => {
        if (event.key === 'Tab' && !event.shiftKey && element.isSameNode(event.target)) {
            event.preventDefault();
        }
    });
    return element;
}
// Blur focused node & reset focus index
function reset() {
    setActive();
    (0,_modal__WEBPACK_IMPORTED_MODULE_4__.getSocket)().focus();
}
function onMount() {
    const socket = (0,_modal__WEBPACK_IMPORTED_MODULE_4__.getSocket)();
    socket.setAttribute('tabIndex', '1');
    // Prevent tabbing away from the modal
    socket.addEventListener('keydown', (event) => {
        if (event.key === 'Tab' && event.shiftKey && socket.isSameNode(event.target)) {
            event.preventDefault();
        }
    });
    socket.addEventListener('focusin', () => {
        setActive();
    });
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/tooltip/consts.ts":
/*!*******************************************************!*\
  !*** ./ts/modal/body/nodes/actions/tooltip/consts.ts ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   TOOLTIP_ANIMATION: () => (/* binding */ TOOLTIP_ANIMATION),
/* harmony export */   TOOLTIP_BOTTOM_CLASS: () => (/* binding */ TOOLTIP_BOTTOM_CLASS),
/* harmony export */   TOOLTIP_CLASS: () => (/* binding */ TOOLTIP_CLASS),
/* harmony export */   TOOLTIP_CONTAINER_CLASS: () => (/* binding */ TOOLTIP_CONTAINER_CLASS),
/* harmony export */   TOOLTIP_REVERSE_CLASS: () => (/* binding */ TOOLTIP_REVERSE_CLASS),
/* harmony export */   TOOLTIP_TOP_CLASS: () => (/* binding */ TOOLTIP_TOP_CLASS)
/* harmony export */ });
const TOOLTIP_CLASS = 'tooltip';
const TOOLTIP_CONTAINER_CLASS = 'tooltip-container';
const TOOLTIP_TOP_CLASS = 'tooltip-above';
const TOOLTIP_BOTTOM_CLASS = 'tooltip-below';
const TOOLTIP_REVERSE_CLASS = 'tooltip-reverse';
const TOOLTIP_ANIMATION = [
    [
        // keyframes
        { opacity: 1 },
        { opacity: 1 },
        { opacity: 0 },
    ], { duration: 2000 },
];


/***/ }),

/***/ "./ts/modal/body/nodes/actions/tooltip/css.ts":
/*!****************************************************!*\
  !*** ./ts/modal/body/nodes/actions/tooltip/css.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/tooltip/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/body/style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");




function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE_CONTAINER}`, [['position', 'relative']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}`, [
        ['position', 'absolute'],
        ['text-align', 'center'],
        ['padding', '0'],
        ['z-index', '2'],
        ['width', '100%'],
        ['pointer-events', 'none'],
        ['white-space', 'normal'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)([
        `:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}).${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS}`,
    ], ['bottom', '102%']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)([
        `:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}).${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS}`,
    ], ['top', '102%']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}`, [
        ['margin', '0 auto'],
        ['font-size', '0.9em'],
        ['padding', '3px 8px'],
        ['border-radius', '1em'],
        ['width', '10em'],
        ['outline', 'solid 3px var(--borderTooltip)'],
    ]);
    (0,_modal_body_style_update_depth__WEBPACK_IMPORTED_MODULE_2__.addDepthChangeListener)((depth, addRule) => {
        addRule(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.DEPTH_CLASS_PREFIX}${depth} > :not(.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.CHILD_CONTAINER}) .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}`, [
            ['background-color', `var(--nodeBase${depth})`],
            ['color', `var(--nodeContrast${depth})`],
        ]);
    });
    // Don't show when there's no hint to give
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}:empty`], ['display', 'none']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`, [
        ['content', '""'],
        ['position', 'absolute'],
        ['left', '50%'],
        ['margin-left', '-0.5em'],
        ['border-width', '0.5em'],
        ['border-style', 'solid'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)([
        `:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}).${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`,
    ], [
        ['top', '100%'],
        ['border-color', 'var(--borderTooltip) transparent transparent transparent'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)([
        `:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}).${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`,
    ], [
        ['bottom', '100%'],
        ['border-color', 'transparent transparent var(--borderTooltip) transparent'],
    ]);
}


/***/ }),

/***/ "./ts/modal/body/nodes/actions/tooltip/index.ts":
/*!******************************************************!*\
  !*** ./ts/modal/body/nodes/actions/tooltip/index.ts ***!
  \******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   hide: () => (/* binding */ hide),
/* harmony export */   kill: () => (/* binding */ kill),
/* harmony export */   reset: () => (/* binding */ reset),
/* harmony export */   setNode: () => (/* binding */ setNode),
/* harmony export */   show: () => (/* binding */ show),
/* harmony export */   showUnresolved: () => (/* binding */ showUnresolved)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/actions/tooltip/consts.ts");
/* harmony import */ var _edit_option__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../edit/option */ "./ts/modal/body/nodes/actions/edit/option/index.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");




let activeParent;
let animation;
function kill() {
    if (animation) {
        animation.finish();
        animation = undefined;
    }
}
function isBelowCenter(element, yPosition = 0) {
    if (!element.isSameNode(_modal_body__WEBPACK_IMPORTED_MODULE_3__.element)) {
        if (element.classList.contains(_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.ELEMENT_CONTAINER)) {
            yPosition += element.offsetTop;
        }
        return isBelowCenter(element.parentElement, yPosition);
    }
    const scrollPosition = _modal_body__WEBPACK_IMPORTED_MODULE_3__.element.scrollTop + (_modal_body__WEBPACK_IMPORTED_MODULE_3__.element.clientHeight / 2);
    return scrollPosition < yPosition;
}
function generate(parent, doReverse = false) {
    const container = document.createElement('div');
    const element = document.createElement('div');
    container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS);
    element.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS);
    if (doReverse) {
        container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_REVERSE_CLASS);
    }
    container.appendChild(element);
    parent.insertBefore(container, parent.firstChild);
    return [container, element];
}
function getAnimated(parent) {
    if (!parent) {
        const element = activeParent.querySelector(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}`);
        return [element.parentElement, element];
    }
    const [container, element] = generate(parent);
    parent.parentElement.style.setProperty('z-index', '2');
    animation = element.animate(..._consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_ANIMATION);
    animation.onfinish = () => {
        container.remove();
        parent.parentElement.style.removeProperty('z-index');
    };
    return [container, element];
}
function show(message, parent) {
    const [container, element] = getAnimated(parent);
    if ((0,_edit_option__WEBPACK_IMPORTED_MODULE_1__.isActive)() || isBelowCenter(container)) {
        container.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS);
        container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS);
    }
    else {
        container.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS);
        container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS);
    }
    element.innerText = message;
}
function showUnresolved(parent) {
    show('Please wait for validation', parent);
}
function hide() {
    const element = activeParent.querySelector(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}`);
    if (element) {
        element.innerText = '';
    }
}
function reset() {
    activeParent.querySelector(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}`).remove();
    activeParent = undefined;
}
function setNode(node) {
    const { container, valueElement } = node.element.contrast;
    generate(container, valueElement.type === 'color');
    activeParent = container;
}


/***/ }),

/***/ "./ts/modal/body/nodes/child.ts":
/*!**************************************!*\
  !*** ./ts/modal/body/nodes/child.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ Child)
/* harmony export */ });
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./ts/modal/body/nodes/element.ts");
/* harmony import */ var _actions_highlight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions/highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _actions_edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions/edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _actions_focus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions/focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _actions_buttons_disable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/buttons/disable */ "./ts/modal/body/nodes/actions/buttons/disable/index.ts");
/* harmony import */ var _actions_buttons_move__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/buttons/move */ "./ts/modal/body/nodes/actions/buttons/move/index.ts");
/* harmony import */ var _actions_buttons_duplicate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./actions/buttons/duplicate */ "./ts/modal/body/nodes/actions/buttons/duplicate/index.ts");
/* harmony import */ var _style_update_depth__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @types */ "./ts/library/validation/types.ts");









const actions = [
    // No button
    _actions_highlight__WEBPACK_IMPORTED_MODULE_1__,
    _actions_focus__WEBPACK_IMPORTED_MODULE_3__,
    _actions_edit__WEBPACK_IMPORTED_MODULE_2__,
    // Button
    _actions_buttons_disable__WEBPACK_IMPORTED_MODULE_4__,
    _actions_buttons_move__WEBPACK_IMPORTED_MODULE_5__,
    _actions_buttons_duplicate__WEBPACK_IMPORTED_MODULE_6__,
];
class Child {
    constructor(data, parent, index) {
        this.isActive = true;
        this.depth = parent.depth + 1;
        this.element = new _element__WEBPACK_IMPORTED_MODULE_0__["default"](data);
        this.element.addDepthClass(this.depth % (0,_style_update_depth__WEBPACK_IMPORTED_MODULE_7__.getDepthClassCount)());
        for (const key of _types__WEBPACK_IMPORTED_MODULE_8__.LEAF_KEYS) {
            if (key in data) {
                this[key] = data[key];
            }
        }
        this.forceValid = !('predicate' in data) && !('options' in data);
        this.attach(parent, index);
        for (const { shouldMount, mount } of actions) {
            if (shouldMount(this)) {
                mount(this);
            }
        }
    }
    getRoot() {
        return this.parent.getRoot();
    }
    getAncestors() {
        return [this.parent, ...this.parent.getAncestors()];
    }
    getIndex() {
        return this.parent.children.indexOf(this);
    }
    getSiblings() {
        const index = this.getIndex();
        const siblings = this.parent.children;
        return [...siblings.slice(0, index), ...siblings.slice(index + 1)];
    }
    updateDepthClass(classCount) {
        this.element.addDepthClass(this.depth % classCount);
    }
    detach() {
        this.parent.children.splice(this.getIndex(), 1);
        this.element.remove();
        this.parent = undefined;
    }
    attach(parent, index = parent.children.length) {
        parent.children.splice(index, 0, this);
        parent.element.addChild(this.element, index);
        this.parent = parent;
    }
    move(parent, to) {
        this.detach();
        this.attach(parent, typeof to === 'number' ? to : to.getIndex() + 1);
    }
    duplicate() {
        return new Child(this.getJSON(), this.parent, this.getIndex() + 1);
    }
    unmount() {
        for (const action of actions) {
            if ('unmount' in action) {
                action.unmount(this);
            }
        }
    }
    disconnect() {
        this.unmount();
        this.detach();
    }
    getJSON() {
        const data = {};
        for (const key of _types__WEBPACK_IMPORTED_MODULE_8__.LEAF_KEYS) {
            if (key in this) {
                data[key] = this[key];
            }
        }
        return data;
    }
    getSaveJSON() {
        const data = {};
        for (const key of _types__WEBPACK_IMPORTED_MODULE_8__.SAVED_KEYS) {
            if (key in this) {
                data[key] = this[key];
            }
        }
        return data;
    }
}


/***/ }),

/***/ "./ts/modal/body/nodes/consts.ts":
/*!***************************************!*\
  !*** ./ts/modal/body/nodes/consts.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BASE_CLASS: () => (/* binding */ BASE_CLASS),
/* harmony export */   CHECKBOX_WRAPPER_CLASS: () => (/* binding */ CHECKBOX_WRAPPER_CLASS),
/* harmony export */   CONTRAST_CLASS: () => (/* binding */ CONTRAST_CLASS),
/* harmony export */   DEPTH_CLASS_PREFIX: () => (/* binding */ DEPTH_CLASS_PREFIX),
/* harmony export */   ELEMENT_CLASSES: () => (/* binding */ ELEMENT_CLASSES),
/* harmony export */   MIDDLE_CLASS: () => (/* binding */ MIDDLE_CLASS),
/* harmony export */   ROOT_CLASS: () => (/* binding */ ROOT_CLASS)
/* harmony export */ });
const ROOT_CLASS = 'root';
const MIDDLE_CLASS = 'middle';
const ELEMENT_CLASSES = {
    ELEMENT_CONTAINER: 'node',
    BACKGROUND_CONTAINER: 'node-background-container',
    CHILD_CONTAINER: 'node-child-container',
    BUTTON_CONTAINER: 'node-button-container',
    INFO_CONTAINER: 'node-info-container',
    HEAD_CONTAINER: 'node-head-container',
    VALUE_CONTAINER: 'node-value-container',
    VALUE: 'node-value',
    LABEL_CONTAINER: 'node-label-container',
    LABEL: 'node-label',
};
const DEPTH_CLASS_PREFIX = 'node-depth-';
const BASE_CLASS = 'node-base';
const CONTRAST_CLASS = 'node-contrast';
const CHECKBOX_WRAPPER_CLASS = 'checkbox-wrapper';


/***/ }),

/***/ "./ts/modal/body/nodes/css.ts":
/*!************************************!*\
  !*** ./ts/modal/body/nodes/css.ts ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _style_update_depth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/update/depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");



function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_CLASS}`, [
        ['flex-grow', '1'],
        // Apparently it has min-height 100% without a content-related height value
        ['height', 'fit-content'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_CLASS}):first-child`, ['margin-top', '0.7px']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_CLASS}) > .${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.CHILD_CONTAINER}`, ['margin-left', '1.8em']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.ELEMENT_CONTAINER}`, ['position', 'relative']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.ELEMENT_CONTAINER} > :not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.CHILD_CONTAINER})`, ['height', '1.6em']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.ELEMENT_CONTAINER}`, [['user-select', 'none']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.INFO_CONTAINER} > *`], [
        ['position', 'absolute'],
        ['width', '100%'],
        ['height', '100%'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER}`], [
        ['position', 'absolute'],
        ['white-space', 'nowrap'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.INFO_CONTAINER}`, [['position', 'relative']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BASE_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER}`], [
        ['position', 'absolute'],
        ['right', '0'],
        ['overflow', 'hidden'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER}`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.INFO_CONTAINER}`,
    ], [
        ['flex-grow', '1'],
        ['display', 'flex'],
        ['align-items', 'center'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER}`], [['position', 'absolute']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [
        ['right', '0'],
        ['pointer-events', 'none'],
        ['height', '100%'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER}`, [
        ['user-select', 'none'],
        ['height', '100%'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER}`], [['width', '100%']]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > *`, [
        ['height', '100%'],
        ['position', 'absolute'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.CHECKBOX_WRAPPER_CLASS}`], [
        ['padding-right', '0.6em'],
        ['padding-left', '0.6em'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER}`, [
        // Puts it above the backgrounds
        ['position', 'relative'],
        ['user-select', 'none'],
    ]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER} > *`, [['height', '100%']]);
    (0,_style_update_depth__WEBPACK_IMPORTED_MODULE_1__.addDepthChangeListener)((depth, addRule) => {
        addRule(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.DEPTH_CLASS_PREFIX}${depth}`, [
            ['color', `var(--nodeContrast${depth})`],
            ['background-color', `var(--nodeBase${depth})`],
        ]);
        addRule(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.DEPTH_CLASS_PREFIX}${depth}`, ['outline', `1px solid var(--nodeContrast${depth})`]);
        addRule(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.DEPTH_CLASS_PREFIX}${depth} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER}`, ['outline', `1px solid var(--nodeContrast${depth})`]);
    });
}


/***/ }),

/***/ "./ts/modal/body/nodes/element.ts":
/*!****************************************!*\
  !*** ./ts/modal/body/nodes/element.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ Element)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/consts.ts");

class Element {
    constructor(data) {
        this.elementContainer = document.createElement('div');
        this.backgroundContainer = document.createElement('div');
        this.headContainer = document.createElement('span');
        this.buttonContainer = document.createElement('span');
        this.infoContainer = document.createElement('span');
        this.base = { container: document.createElement('span') };
        this.contrast = { container: document.createElement('span') };
        this.childContainer = document.createElement('div');
        this.elementContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.ELEMENT_CONTAINER);
        this.backgroundContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER);
        this.childContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.CHILD_CONTAINER);
        this.infoContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.INFO_CONTAINER);
        this.headContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER);
        this.buttonContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BUTTON_CONTAINER);
        this.base.container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.BASE_CLASS);
        this.contrast.container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.CONTRAST_CLASS);
        if ('value' in data) {
            this.addValueContainer(this.contrast, data);
            this.addValueContainer(this.base, data);
            this.render(data.value);
        }
        if ('label' in data) {
            this.addLabelContainer(this.contrast, data.label);
            this.addLabelContainer(this.base, data.label);
        }
        this.infoContainer.append(this.backgroundContainer, this.contrast.container, this.base.container);
        this.headContainer.append(this.buttonContainer, this.infoContainer);
        this.elementContainer.appendChild(this.headContainer);
        this.elementContainer.appendChild(this.childContainer);
    }
    addLabelContainer({ container }, label) {
        const labelContainer = document.createElement('div');
        const labelElement = document.createElement('span');
        labelContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER);
        labelElement.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL);
        labelElement.innerText = label;
        labelContainer.appendChild(labelElement);
        container.appendChild(labelContainer);
    }
    addValueContainer(field, data) {
        field.valueContainer = document.createElement('label');
        field.valueContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER);
        if ('value' in data) {
            field.valueElement = document.createElement('input');
            field.valueElement.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE);
            field.valueElement.setAttribute('tabIndex', '-1');
            if (typeof data.value === 'boolean') {
                field.valueElement.type = 'checkbox';
                // Positions tooltips below checkboxes
                const valueWrapper = document.createElement('span');
                valueWrapper.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.CHECKBOX_WRAPPER_CLASS);
                valueWrapper.appendChild(field.valueElement);
                field.valueContainer.appendChild(valueWrapper);
            }
            else {
                if (typeof data.value === 'number') {
                    field.valueElement.type = 'number';
                    // Disables a tooltip implying that decimal values are invalid
                    field.valueElement.step = 'any';
                }
                else if ('input' in data) {
                    field.valueElement.type = data.input;
                }
                field.valueContainer.appendChild(field.valueElement);
            }
        }
        field.container.appendChild(field.valueContainer);
    }
    render(value) {
        if (typeof value === 'boolean') {
            this.base.valueElement.checked = value;
            this.contrast.valueElement.checked = value;
        }
        else {
            this.base.valueElement.value = value.toString();
            this.contrast.valueElement.value = value.toString();
        }
    }
    hasClass(...names) {
        for (const name of names) {
            if (this.elementContainer.classList.contains(name)) {
                return true;
            }
        }
        return false;
    }
    addClass(...names) {
        for (const name of names) {
            this.elementContainer.classList.add(name);
        }
    }
    removeClass(...names) {
        for (const name of names) {
            this.elementContainer.classList.remove(name);
        }
    }
    addDepthClass(depth) {
        if (this.depthClass) {
            this.removeClass(this.depthClass);
        }
        const depthClass = `${_consts__WEBPACK_IMPORTED_MODULE_0__.DEPTH_CLASS_PREFIX}${depth}`;
        this.addClass(depthClass);
        this.depthClass = depthClass;
    }
    addChild(child, index) {
        var _a;
        this.childContainer.insertBefore(child.elementContainer, (_a = this.childContainer.children[index]) !== null && _a !== void 0 ? _a : null);
    }
    addButton(button) {
        this.buttonContainer.appendChild(button);
    }
    remove() {
        this.elementContainer.remove();
    }
    scrollIntoView() {
        this.backgroundContainer.scrollIntoView({ block: 'center' });
    }
}


/***/ }),

/***/ "./ts/modal/body/nodes/middle.ts":
/*!***************************************!*\
  !*** ./ts/modal/body/nodes/middle.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ Middle)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _root__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./root */ "./ts/modal/body/nodes/root.ts");
/* harmony import */ var _child__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./child */ "./ts/modal/body/nodes/child.ts");
/* harmony import */ var _actions_buttons_create__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions/buttons/create */ "./ts/modal/body/nodes/actions/buttons/create/index.ts");
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @types */ "./ts/library/validation/types.ts");





const MIDDLE_KEYS = _types__WEBPACK_IMPORTED_MODULE_4__.MIDDLE_KEYS.filter((key) => key !== 'children');
const actions = [_actions_buttons_create__WEBPACK_IMPORTED_MODULE_3__];
class Middle extends _child__WEBPACK_IMPORTED_MODULE_2__["default"] {
    constructor(data, parent, index) {
        super(data, parent, index);
        this.children = [];
        _root__WEBPACK_IMPORTED_MODULE_1__.setup.call(this, data);
        this.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.MIDDLE_CLASS);
        for (const { shouldMount, mount } of actions) {
            if (shouldMount(this)) {
                mount(this);
            }
        }
    }
    duplicate() {
        return new Middle(this.getJSON(), this.parent, this.getIndex() + 1);
    }
    unmount() {
        super.unmount();
        for (const action of actions) {
            if ('unmount' in action) {
                action.unmount(this);
            }
        }
    }
    disconnect() {
        this.unmount();
        for (const child of this.children) {
            child.disconnect();
        }
        this.detach();
    }
    updateDepthClass(classCount) {
        super.updateDepthClass(classCount);
        for (const child of this.children) {
            child.updateDepthClass(classCount);
        }
    }
    getJSON() {
        const data = {};
        for (const key of MIDDLE_KEYS) {
            if (key in this) {
                data[key] = this[key];
            }
        }
        return Object.assign(Object.assign(Object.assign({}, super.getJSON()), data), { children: this.children.map((child) => child.getJSON()) });
    }
    // typescript doesn't recognise Middle as a valid Child unless I make the argument optional
    getSaveJSON(isSave) {
        return Object.assign(Object.assign({}, super.getSaveJSON()), _root__WEBPACK_IMPORTED_MODULE_1__.getSaveJSON.call(this, isSave));
    }
}


/***/ }),

/***/ "./ts/modal/body/nodes/queue.ts":
/*!**************************************!*\
  !*** ./ts/modal/body/nodes/queue.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   onceVisualsUpdate: () => (/* binding */ onceVisualsUpdate)
/* harmony export */ });
const queue = [];
// No idea if this works on all machines/browsers
function onceVisualsUpdate(callback) {
    if (queue.push(callback) > 1) {
        return;
    }
    // Wait for update to start
    requestAnimationFrame(() => {
        // Wait for everything else to update
        window.setTimeout(() => {
            for (const callback of queue) {
                callback();
            }
            queue.length = 0;
        }, 0);
    });
}


/***/ }),

/***/ "./ts/modal/body/nodes/root.ts":
/*!*************************************!*\
  !*** ./ts/modal/body/nodes/root.ts ***!
  \*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ Root),
/* harmony export */   getSaveJSON: () => (/* binding */ getSaveJSON),
/* harmony export */   setup: () => (/* binding */ setup)
/* harmony export */ });
/* harmony import */ var _middle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./middle */ "./ts/modal/body/nodes/middle.ts");
/* harmony import */ var _child__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./child */ "./ts/modal/body/nodes/child.ts");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./ts/modal/body/nodes/element.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/nodes/consts.ts");
/* harmony import */ var _queue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./queue */ "./ts/modal/body/nodes/queue.ts");
/* harmony import */ var _actions_highlight__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _actions_focus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./actions/focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _actions_buttons_create__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./actions/buttons/create */ "./ts/modal/body/nodes/actions/buttons/create/index.ts");
/* harmony import */ var _actions_buttons_consts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./actions/buttons/consts */ "./ts/modal/body/nodes/actions/buttons/consts.ts");
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @types */ "./ts/library/validation/types.ts");
var __rest = (undefined && undefined.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};










const actions = [_actions_highlight__WEBPACK_IMPORTED_MODULE_5__, _actions_focus__WEBPACK_IMPORTED_MODULE_6__, _actions_buttons_create__WEBPACK_IMPORTED_MODULE_7__];
function getChildSaveJson({ children }, isSave) {
    return children
        .filter((child) => {
        if (isSave) {
            return !child.element.hasClass(_actions_buttons_consts__WEBPACK_IMPORTED_MODULE_8__.TEST_ADD_CLASS);
        }
        return (!('isActive' in child) || child.isActive) && !child.element.hasClass(_actions_buttons_consts__WEBPACK_IMPORTED_MODULE_8__.TEST_REMOVE_CLASS);
    })
        .map((child) => child.getSaveJSON(isSave));
}
function addChildren(children) {
    for (const child of children) {
        if ('children' in child) {
            new _middle__WEBPACK_IMPORTED_MODULE_0__["default"](child, this);
        }
        else {
            new _child__WEBPACK_IMPORTED_MODULE_1__["default"](child, this);
        }
    }
}
function setup(_a) {
    var { children } = _a, data = __rest(_a, ["children"]);
    for (const key of _types__WEBPACK_IMPORTED_MODULE_9__.ROOT_PREDICATE_KEYS) {
        if (key in data) {
            this[key] = () => data[key](getChildSaveJson(this, false));
        }
    }
    for (const key of _types__WEBPACK_IMPORTED_MODULE_9__.ROOT_UPDATE_KEYS) {
        if (key in data) {
            this[key] = () => (0,_queue__WEBPACK_IMPORTED_MODULE_4__.onceVisualsUpdate)(() => data[key](getChildSaveJson(this, false)));
        }
    }
    for (const key of _types__WEBPACK_IMPORTED_MODULE_9__.ROOT_OTHER_KEYS) {
        if (key in data) {
            this[key] = data[key];
        }
    }
    addChildren.call(this, children);
}
function getSaveJSON(isSave = true) {
    return { children: getChildSaveJson(this, isSave) };
}
class Root {
    constructor(data) {
        this.children = [];
        this.depth = 0;
        this.addChildren = addChildren.bind(this);
        this.getSaveJSON = getSaveJSON.bind(this);
        this.element = new _element__WEBPACK_IMPORTED_MODULE_2__["default"]({});
        this.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_3__.ROOT_CLASS);
        this.element.addDepthClass(0);
        setup.call(this, data);
        for (const { shouldMount, mount } of actions) {
            if (shouldMount(this)) {
                mount(this);
            }
        }
    }
    getRoot() {
        return this;
    }
    getAncestors() {
        return [];
    }
    updateDepthClass(classCount) {
        for (const child of this.children) {
            child.updateDepthClass(classCount);
        }
    }
}


/***/ }),

/***/ "./ts/modal/body/style/consts.ts":
/*!***************************************!*\
  !*** ./ts/modal/body/style/consts.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   DEFAULT_STYLE: () => (/* binding */ DEFAULT_STYLE),
/* harmony export */   ROOT_ID: () => (/* binding */ ROOT_ID)
/* harmony export */ });
const ROOT_ID = 'root-style';
const DEFAULT_STYLE = {
    fontSize: 18,
    borderTooltip: '#570000',
    borderModal: '#ffffff',
    headBase: '#000000',
    headContrast: 'Black / White',
    headButtonExit: '#f10000',
    headButtonLabel: '#906300',
    headButtonStyle: '#900091',
    headButtonHide: '#00749a',
    headButtonAlt: '#838f00',
    nodeBase: ['#000000'],
    nodeContrast: 'Black / White',
    nodeButtonCreate: '#40ff40',
    nodeButtonDuplicate: '#40ffff',
    nodeButtonMove: '#ac60ff',
    nodeButtonDisable: '#ffd000',
    nodeButtonDelete: '#ff1111',
    validBackground: '#d9ffc0',
    invalidBackground: '#ffb4be',
};


/***/ }),

/***/ "./ts/modal/body/style/css.ts":
/*!************************************!*\
  !*** ./ts/modal/body/style/css.ts ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/style/consts.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/consts.ts");
/* harmony import */ var _data_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/consts */ "./ts/modal/body/data/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");
/* harmony import */ var _modal_header_actions_style_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/header/actions/style/consts */ "./ts/modal/header/actions/style/consts.ts");





function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_1__.MODAL_BODY_ID}.${_modal_header_actions_style_consts__WEBPACK_IMPORTED_MODULE_4__.ACTION_ID} > #${_data_consts__WEBPACK_IMPORTED_MODULE_2__.ROOT_ID}`, ['display', 'none']);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_1__.MODAL_BODY_ID}:not(.${_modal_header_actions_style_consts__WEBPACK_IMPORTED_MODULE_4__.ACTION_ID}) > #${_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID}`, ['display', 'none']);
}


/***/ }),

/***/ "./ts/modal/body/style/index.ts":
/*!**************************************!*\
  !*** ./ts/modal/body/style/index.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   getActiveStyle: () => (/* binding */ getActiveStyle),
/* harmony export */   getRoot: () => (/* binding */ getRoot),
/* harmony export */   getUserStyles: () => (/* binding */ getUserStyles),
/* harmony export */   toJSON: () => (/* binding */ toJSON),
/* harmony export */   toRawStyle: () => (/* binding */ toRawStyle)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/style/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css */ "./ts/modal/body/style/css.ts");
/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./update */ "./ts/modal/body/style/update/index.ts");
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! .. */ "./ts/modal/body/index.ts");
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @types */ "./ts/library/validation/types.ts");





function getRoot() {
    return ___WEBPACK_IMPORTED_MODULE_3__.ROOTS[_consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID];
}
// Fill any missing entries
function getFilledStyle(style = {}) {
    return Object.assign(Object.assign({}, _consts__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_STYLE), style);
}
function getActiveStyle(userStyles, devStyle) {
    const activeUserStyle = userStyles.find(({ isActive }) => isActive);
    return activeUserStyle !== null && activeUserStyle !== void 0 ? activeUserStyle : getFilledStyle(devStyle);
}
function toJSON(style) {
    const filledStyle = Object.assign(Object.assign({}, _consts__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_STYLE), style);
    const toDepthColour = (value) => ({ value, input: 'color' });
    return {
        label: 'Name',
        value: filledStyle.name,
        children: [
            {
                label: 'Style Is Active?',
                value: filledStyle.isActive,
            },
            {
                label: 'Modal',
                children: [
                    {
                        label: 'Font Size (px)',
                        value: filledStyle.fontSize,
                        predicate: (value) => value > 0 ? true : 'Font size must be greater than zero',
                    },
                    {
                        label: 'Border Color',
                        value: filledStyle.borderModal,
                        input: 'color',
                    },
                ],
            },
            {
                label: 'Header',
                children: [
                    {
                        label: 'General',
                        children: [
                            {
                                label: 'Base Color',
                                value: filledStyle.headBase,
                                input: 'color',
                            },
                            {
                                label: 'Contrast Method',
                                value: filledStyle.headContrast,
                                options: [..._types__WEBPACK_IMPORTED_MODULE_4__.CONTRAST_METHODS],
                            },
                        ],
                    },
                    {
                        label: 'Buttons',
                        children: [
                            {
                                label: 'Exit Color',
                                value: filledStyle.headButtonExit,
                                input: 'color',
                            },
                            {
                                label: 'Label Color',
                                value: filledStyle.headButtonLabel,
                                input: 'color',
                            },
                            {
                                label: 'Style Color',
                                value: filledStyle.headButtonStyle,
                                input: 'color',
                            },
                            {
                                label: 'Hide Color',
                                value: filledStyle.headButtonHide,
                                input: 'color',
                            },
                            {
                                label: 'Alt Buttons Color',
                                value: filledStyle.headButtonAlt,
                                input: 'color',
                            },
                        ],
                    },
                ],
            },
            {
                label: 'Body',
                children: [
                    {
                        label: 'General',
                        children: [
                            {
                                label: 'Depth Base Colors',
                                seed: toDepthColour(_consts__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_STYLE.nodeBase[0]),
                                children: filledStyle.nodeBase.map(toDepthColour),
                                childPredicate: (children) => children.length > 0 ? true : 'At least one color must be provided.',
                            },
                            {
                                label: 'Contrast Method',
                                value: filledStyle.nodeContrast,
                                options: [..._types__WEBPACK_IMPORTED_MODULE_4__.CONTRAST_METHODS],
                            },
                        ],
                    },
                    {
                        label: 'Buttons',
                        children: [
                            {
                                label: 'Create Color',
                                value: filledStyle.nodeButtonCreate,
                                input: 'color',
                            },
                            {
                                label: 'Duplicate Color',
                                value: filledStyle.nodeButtonDuplicate,
                                input: 'color',
                            },
                            {
                                label: 'Move Color',
                                value: filledStyle.nodeButtonMove,
                                input: 'color',
                            },
                            {
                                label: 'Disable Color',
                                value: filledStyle.nodeButtonDisable,
                                input: 'color',
                            },
                            {
                                label: 'Delete Color',
                                value: filledStyle.nodeButtonDelete,
                                input: 'color',
                            },
                        ],
                    },
                    {
                        label: 'Miscellaneous',
                        children: [
                            {
                                label: 'Valid Color',
                                value: filledStyle.validBackground,
                                input: 'color',
                            },
                            {
                                label: 'Invalid Color',
                                value: filledStyle.invalidBackground,
                                input: 'color',
                            },
                            {
                                label: 'Tooltip Color',
                                value: filledStyle.borderTooltip,
                                input: 'color',
                            },
                        ],
                    },
                ],
            },
        ],
    };
}
function toRawStyle(json) {
    const [, modal, header, body] = json.children.map(({ children }) => children);
    const [headerGeneral, headerButtons] = header.map(({ children }) => children);
    const [bodyGeneral, bodyButtons, bodyMisc] = body.map(({ children }) => children);
    return {
        fontSize: modal[0].value,
        borderModal: modal[1].value,
        headBase: headerGeneral[0].value,
        headContrast: headerGeneral[1].value,
        headButtonExit: headerButtons[0].value,
        headButtonLabel: headerButtons[1].value,
        headButtonStyle: headerButtons[2].value,
        headButtonHide: headerButtons[3].value,
        headButtonAlt: headerButtons[4].value,
        nodeBase: bodyGeneral[0].children
            .filter(({ isActive }) => isActive)
            .map((child) => child.value),
        nodeContrast: bodyGeneral[1].value,
        nodeButtonCreate: bodyButtons[0].value,
        nodeButtonDuplicate: bodyButtons[1].value,
        nodeButtonMove: bodyButtons[2].value,
        nodeButtonDisable: bodyButtons[3].value,
        nodeButtonDelete: bodyButtons[4].value,
        validBackground: bodyMisc[0].value,
        invalidBackground: bodyMisc[1].value,
        borderTooltip: bodyMisc[2].value,
    };
}
// For returning updated styles to the userscript
function getUserStyles() {
    const { 'children': styleNodes } = getRoot().getSaveJSON();
    const styles = [];
    for (const json of styleNodes) {
        styles.push(Object.assign({ name: json.value, isActive: json.children[0].value }, toRawStyle(json)));
    }
    return styles;
}
function generate(userStyles, devStyle) {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    const defaultStyle = getFilledStyle(devStyle);
    return (0,___WEBPACK_IMPORTED_MODULE_3__.generateTree)({
        children: userStyles.map(toJSON),
        seed: toJSON(Object.assign({ name: 'New Style', isActive: false }, defaultStyle)),
        descendantPredicate: (styles) => {
            let count = 0;
            for (const { isActive, children: [{ value }] } of styles) {
                if (isActive && value && ++count > 1) {
                    return 'Only one color scheme may be active at a time.';
                }
            }
            return true;
        },
        onDescendantUpdate: (styles) => {
            for (const style of styles) {
                if (style.isActive && style.children[0].value) {
                    (0,_update__WEBPACK_IMPORTED_MODULE_2__["default"])(toRawStyle(style));
                    return;
                }
            }
            (0,_update__WEBPACK_IMPORTED_MODULE_2__["default"])(defaultStyle);
        },
    }, _consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID);
}


/***/ }),

/***/ "./ts/modal/body/style/update/depth.ts":
/*!*********************************************!*\
  !*** ./ts/modal/body/style/update/depth.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addDepthChangeListener: () => (/* binding */ addDepthChangeListener),
/* harmony export */   getDepthClassCount: () => (/* binding */ getDepthClassCount),
/* harmony export */   updateDepth: () => (/* binding */ updateDepth)
/* harmony export */ });
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../index */ "./ts/modal/body/index.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");


const styleNode = document.createElement('style');
(0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.registerStyleNode)(styleNode);
const callbacks = [];
let currentClassCount;
function getDepthClassCount() {
    return currentClassCount;
}
function addDepthRule(selectors, styles) {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addRule)(selectors, styles, styleNode);
}
function addDepthChangeListener(callback) {
    callbacks.push((depth) => callback(depth, addDepthRule));
    for (let i = 0; i < currentClassCount; ++i) {
        callback(i, addDepthRule);
    }
}
function updateDepth(depth) {
    for (let i = styleNode.sheet.cssRules.length - 1; i >= 0; --i) {
        styleNode.sheet.deleteRule(i);
    }
    for (const root of Object.values(_index__WEBPACK_IMPORTED_MODULE_0__.ROOTS)) {
        root.updateDepthClass(depth);
    }
    for (let i = 0; i < depth; ++i) {
        for (const callback of callbacks) {
            callback(i, addDepthRule);
        }
    }
    currentClassCount = depth;
}


/***/ }),

/***/ "./ts/modal/body/style/update/index.ts":
/*!*********************************************!*\
  !*** ./ts/modal/body/style/update/index.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ updateStylesheet)
/* harmony export */ });
/* harmony import */ var _depth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./depth */ "./ts/modal/body/style/update/depth.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");
var __rest = (undefined && undefined.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};


const styleNode = document.createElement('style');
(0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.registerStyleNode)(styleNode);
function getContrast(hex, method) {
    const r = parseInt(hex.slice(1, 3), 16);
    const g = parseInt(hex.slice(3, 5), 16);
    const b = parseInt(hex.slice(5, 7), 16);
    switch (method) {
        case 'Black / White': {
            // https://stackoverflow.com/a/3943023/112731
            const luminosity = r * 0.299 + g * 0.587 + b * 0.114;
            return luminosity > 145 ? 'black' : 'white';
        }
    }
    const toHexPart = (rgb) => {
        const x = (255 - rgb).toString(16);
        return x.length === 2 ? x : `0${x}`;
    };
    return `#${toHexPart(r)}${toHexPart((g))}${toHexPart(b)}`;
}
function updateStylesheet(_a) {
    var { fontSize, headContrast, nodeBase, nodeContrast } = _a, colours = __rest(_a, ["fontSize", "headContrast", "nodeBase", "nodeContrast"]);
    for (let i = styleNode.sheet.cssRules.length - 1; i >= 0; --i) {
        styleNode.sheet.deleteRule(i);
    }
    (0,_depth__WEBPACK_IMPORTED_MODULE_0__.updateDepth)(nodeBase.length);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addRule)('body', ['font-size', `${fontSize}px`], styleNode);
    const colourStyles = Object.entries(colours).map(([property, value]) => [`--${property}`, value]);
    for (const [depth, baseColour] of nodeBase.entries()) {
        const contrastColour = getContrast(baseColour, nodeContrast);
        colourStyles.push([`--nodeBase${depth}`, baseColour]);
        colourStyles.push([`--nodeContrast${depth}`, contrastColour]);
    }
    colourStyles.push(['--headContrast', getContrast(colours.headBase, headContrast)]);
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addVariables)(colourStyles, styleNode);
}


/***/ }),

/***/ "./ts/modal/consts.ts":
/*!****************************!*\
  !*** ./ts/modal/consts.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BUTTON_ACTIVE_CLASS: () => (/* binding */ BUTTON_ACTIVE_CLASS),
/* harmony export */   MODAL_BACKGROUND_ID: () => (/* binding */ MODAL_BACKGROUND_ID),
/* harmony export */   MODAL_ID: () => (/* binding */ MODAL_ID),
/* harmony export */   SVG_NAMESPACE: () => (/* binding */ SVG_NAMESPACE)
/* harmony export */ });
const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
// Indicates 'on' state for actions that can be turned on and off
const BUTTON_ACTIVE_CLASS = 'active';
const MODAL_BACKGROUND_ID = 'modal-background';
const MODAL_ID = 'modal-content';


/***/ }),

/***/ "./ts/modal/css.ts":
/*!*************************!*\
  !*** ./ts/modal/css.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addRule: () => (/* binding */ addRule),
/* harmony export */   addVariables: () => (/* binding */ addVariables),
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   getRuleString: () => (/* binding */ getRuleString),
/* harmony export */   registerStyleNode: () => (/* binding */ registerStyleNode)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/consts.ts");
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./ts/modal/index.ts");


const styleNode = document.createElement('style');
const undockedStyleNodes = [styleNode];
function registerStyleNode(node) {
    undockedStyleNodes.push(node);
}
function mountStyleNodes() {
    const { head } = (0,_index__WEBPACK_IMPORTED_MODULE_1__.getSocket)().ownerDocument;
    for (const node of undockedStyleNodes) {
        head.appendChild(node);
    }
}
function isStyle(candidate) {
    return candidate.length > 0 && typeof candidate[0] === 'string';
}
function getStyleString([property, value]) {
    return `${property}:${value};`;
}
function getRuleStrings(styles) {
    return isStyle(styles) ? getStyleString(styles) : styles.map(getStyleString).join('');
}
function getRuleString(selectors, styles) {
    const styleString = getRuleStrings(styles);
    const selectorString = typeof selectors === 'string' ? selectors : selectors.join(',');
    return `${selectorString}{${styleString}}`;
}
function addRule(selectors, styles, { sheet } = styleNode) {
    sheet.insertRule(getRuleString(selectors, styles));
}
function addVariables(rules, { sheet } = styleNode) {
    const styleString = rules.map(getStyleString).join('');
    sheet.insertRule(`:root{${styleString}}`);
}
function generate() {
    mountStyleNodes();
    addRule(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BACKGROUND_ID}`, [
        ['position', 'fixed'],
        ['left', '0'],
        ['top', '0'],
        ['width', '100%'],
        ['height', '100%'],
        ['background-color', '#0003'],
        ['display', 'flex'],
        ['align-content', 'center'],
        ['flex-wrap', 'wrap'],
        ['justify-content', 'center'],
    ]);
    addRule(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_ID}`, [
        ['width', '80%'],
        ['height', '80%'],
        ['font-family', 'Tahoma, Geneva, sans-serif'],
        ['outline', 'var(--borderModal) solid 2px'],
        ['box-shadow', '1px 1px 10px 4px #00000015, 0 0 30px 10px #00000065'],
        ['display', 'flex'],
        ['flex-direction', 'column'],
        ['position', 'relative'],
    ]);
    addRule('button', [
        ['display', 'inline-flex'],
        ['cursor', 'pointer'],
        ['background', 'none'],
        ['font-size', 'inherit'],
        ['padding', '0'],
        ['margin', '0'],
        ['border', 'none'],
        ['outline-offset', '-2px'],
    ]);
    addRule('button *', [['pointer-events', 'none']]);
    addRule('svg', [['fill', 'none']]);
    addRule('input', [
        ['font', 'inherit'],
        ['background', 'inherit'],
        ['color', 'inherit'],
        ['border', 'none'],
    ]);
    addRule(':focus-visible:not(button):not(input)', [['outline', 'none']]);
    addRule('label', [['cursor', 'inherit']]);
}


/***/ }),

/***/ "./ts/modal/header/actions/alternate/button.ts":
/*!*****************************************************!*\
  !*** ./ts/modal/header/actions/alternate/button.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/alternate/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const ALPHA = Math.PI / 5;
const RADIUS = 46;
const points = [];
// https://stackoverflow.com/questions/14580033/algorithm-for-drawing-a-5-point-star
for (let i = 0; i < 12; ++i) {
    const r = RADIUS * (i % 2 + 1) / 2;
    const omega = ALPHA * i;
    points.push([r * Math.sin(omega), r * Math.cos(omega)]);
}
const outline = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
outline.setAttribute('stroke-linecap', 'round');
outline.setAttribute('stroke-width', '7');
outline.setAttribute('d', points.map(([x, y], i) => `${i === 0 ? 'M' : 'L'} ${x},${y}`).join());
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(outline);
const BUTTON = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Toggle Special Buttons');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/header/actions/alternate/consts.ts":
/*!*****************************************************!*\
  !*** ./ts/modal/header/actions/alternate/consts.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID)
/* harmony export */ });
const ACTION_ID = 'modal-alt';


/***/ }),

/***/ "./ts/modal/header/actions/alternate/css.ts":
/*!**************************************************!*\
  !*** ./ts/modal/header/actions/alternate/css.ts ***!
  \**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/alternate/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/header/actions/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--headButtonAlt');
}


/***/ }),

/***/ "./ts/modal/header/actions/alternate/index.ts":
/*!****************************************************!*\
  !*** ./ts/modal/header/actions/alternate/index.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   isActive: () => (/* binding */ isActive)
/* harmony export */ });
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./ts/modal/header/actions/alternate/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/alternate/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/alternate/css.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal */ "./ts/modal/index.ts");






let _isActive = false;
let keyHeld = false;
function isActive() {
    return _isActive;
}
function doAction(doActivate = !_isActive) {
    (0,_modal_body__WEBPACK_IMPORTED_MODULE_4__.setActive)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], _consts__WEBPACK_IMPORTED_MODULE_1__.ACTION_ID, doActivate);
    _isActive = doActivate;
}
function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.bindAction)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], doAction);
    _button__WEBPACK_IMPORTED_MODULE_0__["default"].title += ' (Ctrl)';
    const { ownerDocument: target } = (0,_modal__WEBPACK_IMPORTED_MODULE_5__.getSocket)();
    target.addEventListener('keydown', (event) => {
        if (event.key === 'Control') {
            keyHeld = true;
            doAction(true);
        }
    });
    target.addEventListener('keyup', (event) => {
        if (event.key === 'Control') {
            keyHeld = false;
            doAction(false);
        }
    });
    target.addEventListener('blur', () => {
        if (keyHeld) {
            keyHeld = false;
            doAction(false);
        }
    });
    return _button__WEBPACK_IMPORTED_MODULE_0__["default"];
}


/***/ }),

/***/ "./ts/modal/header/actions/button.ts":
/*!*******************************************!*\
  !*** ./ts/modal/header/actions/button.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   bindAction: () => (/* binding */ bindAction),
/* harmony export */   getNewButton: () => (/* binding */ getNewButton)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/consts.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../consts */ "./ts/modal/consts.ts");
/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal */ "./ts/modal/index.ts");



// Adds the template to the DOM
function bindAction(button, doAction, hotkey) {
    const bound = (event) => {
        event.stopPropagation();
        button.blur();
        doAction();
    };
    button.addEventListener('click', bound);
    if (hotkey) {
        button.title += ` (Alt+${hotkey})`;
        (0,_modal__WEBPACK_IMPORTED_MODULE_2__.getSocket)().ownerDocument.addEventListener('keydown', (event) => {
            if (event.altKey && event.key.toUpperCase() === hotkey) {
                bound(event);
            }
        });
    }
    return bound;
}
// Creates a template
const getNewButton = (function () {
    const buttonTemplate = document.createElement('button');
    const svgTemplate = document.createElementNS(_consts__WEBPACK_IMPORTED_MODULE_1__.SVG_NAMESPACE, 'svg');
    buttonTemplate.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS);
    // Prevent tabbing to buttons until node is focused
    buttonTemplate.setAttribute('tabIndex', '2');
    svgTemplate.setAttribute('viewBox', `-70 -70 140 140`);
    return function (group, actionId, description) {
        const button = buttonTemplate.cloneNode(true);
        const svg = svgTemplate.cloneNode(true);
        button.id = actionId;
        button.title = description;
        svg.append(group);
        button.append(svg);
        return button;
    };
})();


/***/ }),

/***/ "./ts/modal/header/actions/close/button.ts":
/*!*************************************************!*\
  !*** ./ts/modal/header/actions/close/button.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/close/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const line0 = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line');
line0.setAttribute('stroke-linecap', 'round');
line0.setAttribute('stroke-width', '12');
line0.setAttribute('x1', '-30');
line0.setAttribute('x2', '30');
line0.setAttribute('y1', '-30');
line0.setAttribute('y2', '30');
const line1 = line0.cloneNode(true);
line1.setAttribute('transform', 'rotate(90 0 0)');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(line0, line1);
const BUTTON = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Save & Exit');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/header/actions/close/consts.ts":
/*!*************************************************!*\
  !*** ./ts/modal/header/actions/close/consts.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID),
/* harmony export */   HOTKEY: () => (/* binding */ HOTKEY)
/* harmony export */ });
const ACTION_ID = 'modal-close';
const HOTKEY = 'X';


/***/ }),

/***/ "./ts/modal/header/actions/close/css.ts":
/*!**********************************************!*\
  !*** ./ts/modal/header/actions/close/css.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/close/consts.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");


function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addRule)([
        `#${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID}:focus > svg`,
        `#${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID}:hover > svg`,
    ], ['background-color', 'var(--headButtonExit)']);
}


/***/ }),

/***/ "./ts/modal/header/actions/close/index.ts":
/*!************************************************!*\
  !*** ./ts/modal/header/actions/close/index.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   setCallback: () => (/* binding */ setCallback)
/* harmony export */ });
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./ts/modal/header/actions/close/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/close/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/close/css.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_body_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/data */ "./ts/modal/body/data/index.ts");
/* harmony import */ var _modal_body_style__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/body/style */ "./ts/modal/body/style/index.ts");
/* harmony import */ var _nodes_actions_focus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _nodes_actions_edit__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/actions/edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _nodes_actions_buttons_move__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nodes/actions/buttons/move */ "./ts/modal/body/nodes/actions/buttons/move/index.ts");
/* harmony import */ var _nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @nodes/actions/highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");











let callback;
function setCallback(_callback) {
    callback = _callback;
}
// TODO Maybe add a white, 0.5 opacity foreground over everything with a loading symbol.
//  Do the same when waiting for a config.
//  Prevent interaction during loading by adding a stopPropagation click listener to the foreground.
function doAction() {
    (0,_nodes_actions_focus__WEBPACK_IMPORTED_MODULE_6__.reset)();
    (0,_nodes_actions_edit__WEBPACK_IMPORTED_MODULE_7__.reset)();
    (0,_nodes_actions_buttons_move__WEBPACK_IMPORTED_MODULE_8__.reset)();
    (0,_nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_9__.reset)();
    _modal_body__WEBPACK_IMPORTED_MODULE_10__.element.scroll(0, 0);
    callback === null || callback === void 0 ? void 0 : callback({
        tree: (0,_modal_body_data__WEBPACK_IMPORTED_MODULE_4__.getRoot)().getSaveJSON(),
        styles: (0,_modal_body_style__WEBPACK_IMPORTED_MODULE_5__.getUserStyles)(),
    });
    callback = undefined;
}
function generate(background) {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.bindAction)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], doAction, _consts__WEBPACK_IMPORTED_MODULE_1__.HOTKEY);
    background.addEventListener('click', (event) => {
        if (background.isSameNode(event.target)) {
            doAction();
        }
    });
    return _button__WEBPACK_IMPORTED_MODULE_0__["default"];
}


/***/ }),

/***/ "./ts/modal/header/actions/consts.ts":
/*!*******************************************!*\
  !*** ./ts/modal/header/actions/consts.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BUTTON_CLASS: () => (/* binding */ BUTTON_CLASS),
/* harmony export */   BUTTON_CONTAINER_ID: () => (/* binding */ BUTTON_CONTAINER_ID)
/* harmony export */ });
const BUTTON_CLASS = 'modal-button';
const BUTTON_CONTAINER_ID = 'modal-button-container';


/***/ }),

/***/ "./ts/modal/header/actions/css.ts":
/*!****************************************!*\
  !*** ./ts/modal/header/actions/css.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   addColourRule: () => (/* binding */ addColourRule),
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/consts.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../consts */ "./ts/modal/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../css */ "./ts/modal/css.ts");



const ACTIVE_SELECTOR = `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS}`;
function addColourRule(actionId, colour) {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${actionId}${ACTIVE_SELECTOR} > svg`, [['fill', `var(${colour})`]]);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`#${actionId}${ACTIVE_SELECTOR}:not(:hover):not(:focus) > svg`], [['stroke', `var(${colour})`]]);
}
function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CONTAINER_ID}`, [
        ['display', 'inline-flex'],
        ['flex-direction', 'row-reverse'],
        ['max-width', '80%'],
        ['overflow-x', 'scroll'],
        ['scrollbar-width', 'none'],
        ['overscroll-behavior', 'contain'],
    ]);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:focus > svg`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:hover > svg`,
        `${ACTIVE_SELECTOR} > svg`,
    ], ['background-color', `var(--headContrast)`]);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}`, ['border-left', '2px solid var(--headContrast)']);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:not(:first-child):focus`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:not(:first-child):hover`,
        `${ACTIVE_SELECTOR}:not(:first-child)`,
    ], ['border-color', 'var(--headBase)']);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:focus > svg`,
        `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:hover > svg`,
    ], ['stroke', `var(--headBase)`]);
    (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS} > svg`, [
        ['width', '1.7em'],
        ['stroke', 'var(--headContrast)'],
        ['fill', `var(--headContrast)`],
        // Fixes pixel gap between button border & svg
        ['margin-left', '-0.5px'],
    ]);
}


/***/ }),

/***/ "./ts/modal/header/actions/hide/button.ts":
/*!************************************************!*\
  !*** ./ts/modal/header/actions/hide/button.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/hide/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const edgeTop = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
edgeTop.setAttribute('stroke-linecap', 'round');
edgeTop.setAttribute('stroke-width', '7');
edgeTop.setAttribute('d', 'M -55, 0'
    + 'Q 0,60 55,0');
edgeTop.setAttribute('fill', 'none');
const edgeBottom = edgeTop.cloneNode(true);
edgeBottom.setAttribute('transform', 'scale(1,-1)');
const circle = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'circle');
circle.setAttribute('cx', '0');
circle.setAttribute('cy', '0');
circle.setAttribute('r', '26');
circle.setAttribute('stroke-width', '6');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(edgeTop, edgeBottom, circle);
const BUTTON = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Toggle Disabled Node Visibility');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/header/actions/hide/consts.ts":
/*!************************************************!*\
  !*** ./ts/modal/header/actions/hide/consts.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID),
/* harmony export */   HOTKEY: () => (/* binding */ HOTKEY)
/* harmony export */ });
const ACTION_ID = 'modal-hide';
const HOTKEY = 'H';


/***/ }),

/***/ "./ts/modal/header/actions/hide/css.ts":
/*!*********************************************!*\
  !*** ./ts/modal/header/actions/hide/css.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/hide/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/header/actions/css.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");
/* harmony import */ var _modal_body_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/consts */ "./ts/modal/body/consts.ts");
/* harmony import */ var _nodes_actions_buttons_disable_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nodes/actions/buttons/disable/consts */ "./ts/modal/body/nodes/actions/buttons/disable/consts.ts");





function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${_modal_body_consts__WEBPACK_IMPORTED_MODULE_3__.MODAL_BODY_ID}:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID}) .${_nodes_actions_buttons_disable_consts__WEBPACK_IMPORTED_MODULE_4__.DISABLED_CLASS}`, ['display', 'none']);
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--headButtonHide');
}


/***/ }),

/***/ "./ts/modal/header/actions/hide/index.ts":
/*!***********************************************!*\
  !*** ./ts/modal/header/actions/hide/index.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./ts/modal/header/actions/hide/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/hide/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/hide/css.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");





let isActive = false;
function doAction() {
    isActive = !isActive;
    (0,_modal_body__WEBPACK_IMPORTED_MODULE_4__.setActive)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], _consts__WEBPACK_IMPORTED_MODULE_1__.ACTION_ID, isActive);
}
function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.bindAction)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], doAction, _consts__WEBPACK_IMPORTED_MODULE_1__.HOTKEY);
    _button__WEBPACK_IMPORTED_MODULE_0__["default"].click();
    return _button__WEBPACK_IMPORTED_MODULE_0__["default"];
}


/***/ }),

/***/ "./ts/modal/header/actions/index.ts":
/*!******************************************!*\
  !*** ./ts/modal/header/actions/index.ts ***!
  \******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _close__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./close */ "./ts/modal/header/actions/close/index.ts");
/* harmony import */ var _labels__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./labels */ "./ts/modal/header/actions/labels/index.ts");
/* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style */ "./ts/modal/header/actions/style/index.ts");
/* harmony import */ var _hide__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hide */ "./ts/modal/header/actions/hide/index.ts");
/* harmony import */ var _alternate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./alternate */ "./ts/modal/header/actions/alternate/index.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/css.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/consts.ts");







function generate(background) {
    (0,_css__WEBPACK_IMPORTED_MODULE_5__["default"])();
    const element = document.createElement('span');
    element.id = _consts__WEBPACK_IMPORTED_MODULE_6__.BUTTON_CONTAINER_ID;
    element.append((0,_close__WEBPACK_IMPORTED_MODULE_0__["default"])(background), (0,_style__WEBPACK_IMPORTED_MODULE_2__["default"])(), (0,_labels__WEBPACK_IMPORTED_MODULE_1__["default"])(), (0,_hide__WEBPACK_IMPORTED_MODULE_3__["default"])(), (0,_alternate__WEBPACK_IMPORTED_MODULE_4__["default"])());
    return element;
}


/***/ }),

/***/ "./ts/modal/header/actions/labels/button.ts":
/*!**************************************************!*\
  !*** ./ts/modal/header/actions/labels/button.ts ***!
  \**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/labels/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const outline = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
outline.setAttribute('stroke-linecap', 'round');
outline.setAttribute('stroke-width', '7');
outline.setAttribute('d', 'M 20,-30'
    + 'L -40,-30'
    + 'L -40,30'
    + 'L 20,30'
    + 'L 50,0'
    + 'L 20,-30');
const circle = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'circle');
circle.setAttribute('stroke-width', '5');
circle.setAttribute('r', '5');
circle.setAttribute('cx', '20');
circle.setAttribute('cy', '0');
const loop = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
loop.setAttribute('fill', 'none');
loop.setAttribute('stroke-linecap', 'round');
loop.setAttribute('stroke-width', '6');
loop.setAttribute('d', 'M 20,0'
    + 'C -70,50 -30,50 15,30');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.setAttribute('transform', 'rotate(-60 0 0)');
g.append(outline, circle, loop);
const BUTTON = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Toggle Labels');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/header/actions/labels/consts.ts":
/*!**************************************************!*\
  !*** ./ts/modal/header/actions/labels/consts.ts ***!
  \**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID),
/* harmony export */   HOTKEY: () => (/* binding */ HOTKEY)
/* harmony export */ });
const ACTION_ID = 'modal-labels';
const HOTKEY = 'N';


/***/ }),

/***/ "./ts/modal/header/actions/labels/css.ts":
/*!***********************************************!*\
  !*** ./ts/modal/header/actions/labels/css.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/labels/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/header/actions/css.ts");
/* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts");
/* harmony import */ var _modal_body_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/consts */ "./ts/modal/body/consts.ts");
/* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/nodes/consts.ts");





function generate() {
    (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${_modal_body_consts__WEBPACK_IMPORTED_MODULE_3__.MODAL_BODY_ID}:not(.${_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID}) .${_nodes_consts__WEBPACK_IMPORTED_MODULE_4__.ELEMENT_CLASSES.LABEL_CONTAINER}`, ['display', 'none']);
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--headButtonLabel');
}


/***/ }),

/***/ "./ts/modal/header/actions/labels/index.ts":
/*!*************************************************!*\
  !*** ./ts/modal/header/actions/labels/index.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./ts/modal/header/actions/labels/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/labels/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/labels/css.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");





let isActive = false;
function doAction() {
    isActive = !isActive;
    (0,_modal_body__WEBPACK_IMPORTED_MODULE_4__.setActive)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], _consts__WEBPACK_IMPORTED_MODULE_1__.ACTION_ID, isActive);
}
function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.bindAction)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], doAction, _consts__WEBPACK_IMPORTED_MODULE_1__.HOTKEY);
    _button__WEBPACK_IMPORTED_MODULE_0__["default"].click();
    return _button__WEBPACK_IMPORTED_MODULE_0__["default"];
}


/***/ }),

/***/ "./ts/modal/header/actions/style/button.ts":
/*!*************************************************!*\
  !*** ./ts/modal/header/actions/style/button.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/style/consts.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts");



const handle = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'rect');
handle.setAttribute('stroke-linecap', 'round');
handle.setAttribute('stroke-width', '6');
handle.setAttribute('x', '-5');
handle.setAttribute('y', '15');
handle.setAttribute('width', '15');
handle.setAttribute('height', '40');
handle.setAttribute('rx', '5');
const frame = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
frame.setAttribute('fill', 'none');
frame.setAttribute('stroke-linecap', 'round');
frame.setAttribute('stroke-width', '3');
frame.setAttribute('d', 'M 2.5,15'
    + 'L 2.5,0'
    + 'L -36,-15'
    + 'L -36,-35'
    + 'L -30,-35');
const curveLeft = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'path');
curveLeft.setAttribute('fill', 'none');
curveLeft.setAttribute('stroke-linecap', 'round');
curveLeft.setAttribute('stroke-width', '6');
curveLeft.setAttribute('d', 'M -25 -30'
    + 'Q -30,-35 -25,-40');
const curveRight = curveLeft.cloneNode(true);
curveRight.setAttribute('transform', 'scale(-1,1) translate(-10,0)');
const roller = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'rect');
roller.setAttribute('stroke-linecap', 'round');
roller.setAttribute('stroke-width', '6');
roller.setAttribute('x', '-22.5');
roller.setAttribute('y', '-47.5');
roller.setAttribute('width', '55');
roller.setAttribute('height', '25');
roller.setAttribute('rx', '1');
const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g');
g.append(handle, frame, curveLeft, curveRight, roller);
const BUTTON = (0,_button__WEBPACK_IMPORTED_MODULE_1__.getNewButton)(g, _consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, 'Toggle Style Editor');
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BUTTON);


/***/ }),

/***/ "./ts/modal/header/actions/style/consts.ts":
/*!*************************************************!*\
  !*** ./ts/modal/header/actions/style/consts.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   ACTION_ID: () => (/* binding */ ACTION_ID),
/* harmony export */   HOTKEY: () => (/* binding */ HOTKEY)
/* harmony export */ });
const ACTION_ID = 'modal-style';
const HOTKEY = 'C';


/***/ }),

/***/ "./ts/modal/header/actions/style/css.ts":
/*!**********************************************!*\
  !*** ./ts/modal/header/actions/style/css.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/style/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/header/actions/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addColourRule)(_consts__WEBPACK_IMPORTED_MODULE_0__.ACTION_ID, '--headButtonStyle');
}


/***/ }),

/***/ "./ts/modal/header/actions/style/index.ts":
/*!************************************************!*\
  !*** ./ts/modal/header/actions/style/index.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./button */ "./ts/modal/header/actions/style/button.ts");
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/actions/style/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/header/actions/style/css.ts");
/* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/header/actions/button.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body */ "./ts/modal/body/index.ts");
/* harmony import */ var _nodes_actions_focus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nodes/actions/focus */ "./ts/modal/body/nodes/actions/focus/index.ts");
/* harmony import */ var _nodes_actions_edit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/edit */ "./ts/modal/body/nodes/actions/edit/index.ts");
/* harmony import */ var _nodes_actions_buttons_move__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/actions/buttons/move */ "./ts/modal/body/nodes/actions/buttons/move/index.ts");








let isActive = false;
function doAction() {
    isActive = !isActive;
    (0,_modal_body__WEBPACK_IMPORTED_MODULE_4__.setActive)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], _consts__WEBPACK_IMPORTED_MODULE_1__.ACTION_ID, isActive);
    (0,_nodes_actions_focus__WEBPACK_IMPORTED_MODULE_5__.reset)();
    (0,_nodes_actions_edit__WEBPACK_IMPORTED_MODULE_6__.reset)();
    (0,_nodes_actions_buttons_move__WEBPACK_IMPORTED_MODULE_7__.reset)();
    // Reset tab index
    document.body.focus();
}
function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])();
    (0,_button__WEBPACK_IMPORTED_MODULE_3__.bindAction)(_button__WEBPACK_IMPORTED_MODULE_0__["default"], doAction, _consts__WEBPACK_IMPORTED_MODULE_1__.HOTKEY);
    return _button__WEBPACK_IMPORTED_MODULE_0__["default"];
}


/***/ }),

/***/ "./ts/modal/header/consts.ts":
/*!***********************************!*\
  !*** ./ts/modal/header/consts.ts ***!
  \***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   HEADER_ID: () => (/* binding */ HEADER_ID)
/* harmony export */ });
const HEADER_ID = 'modal-header';


/***/ }),

/***/ "./ts/modal/header/css.ts":
/*!********************************!*\
  !*** ./ts/modal/header/css.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.HEADER_ID}`, [
        ['display', 'flex'],
        ['align-items', 'center'],
        ['background-color', 'var(--headBase)'],
        ['color', 'var(--headContrast)'],
        ['border-bottom', '2px solid var(--borderModal)'],
        ['font-size', '1.5em'],
        ['text-align', 'center'],
    ]);
}


/***/ }),

/***/ "./ts/modal/header/index.ts":
/*!**********************************!*\
  !*** ./ts/modal/header/index.ts ***!
  \**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/consts.ts");
/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title */ "./ts/modal/header/title/index.ts");
/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./ts/modal/header/actions/index.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./css */ "./ts/modal/header/css.ts");




function generate({ title }, background) {
    (0,_css__WEBPACK_IMPORTED_MODULE_3__["default"])();
    const element = document.createElement('div');
    element.id = _consts__WEBPACK_IMPORTED_MODULE_0__.HEADER_ID;
    element.append((0,_title__WEBPACK_IMPORTED_MODULE_1__["default"])(title), (0,_actions__WEBPACK_IMPORTED_MODULE_2__["default"])(background));
    return element;
}


/***/ }),

/***/ "./ts/modal/header/title/consts.ts":
/*!*****************************************!*\
  !*** ./ts/modal/header/title/consts.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   TITLE_CONTAINER_ID: () => (/* binding */ TITLE_CONTAINER_ID),
/* harmony export */   TITLE_ID: () => (/* binding */ TITLE_ID)
/* harmony export */ });
const TITLE_CONTAINER_ID = 'title-container';
const TITLE_ID = 'title';


/***/ }),

/***/ "./ts/modal/header/title/css.ts":
/*!**************************************!*\
  !*** ./ts/modal/header/title/css.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/title/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css */ "./ts/modal/css.ts");


function generate() {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.TITLE_CONTAINER_ID}`, [
        ['flex-grow', '1'],
        ['white-space', 'nowrap'],
        ['overflow', 'hidden'],
        ['text-overflow', 'ellipsis'],
        ['padding', '0 0.5em'],
    ]);
}


/***/ }),

/***/ "./ts/modal/header/title/index.ts":
/*!****************************************!*\
  !*** ./ts/modal/header/title/index.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/header/title/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css */ "./ts/modal/header/title/css.ts");


function generate(title) {
    (0,_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    const titleContainer = document.createElement('span');
    const titleElement = document.createElement('span');
    titleContainer.id = _consts__WEBPACK_IMPORTED_MODULE_0__.TITLE_CONTAINER_ID;
    titleElement.id = _consts__WEBPACK_IMPORTED_MODULE_0__.TITLE_ID;
    titleElement.innerText = title;
    // In case the text is too long to fit
    titleElement.title = title;
    titleContainer.append(titleElement);
    return titleContainer;
}


/***/ }),

/***/ "./ts/modal/index.ts":
/*!***************************!*\
  !*** ./ts/modal/index.ts ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ generate),
/* harmony export */   getSocket: () => (/* binding */ getSocket)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/consts.ts");
/* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css */ "./ts/modal/css.ts");
/* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./header */ "./ts/modal/header/index.ts");
/* harmony import */ var _body__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./body */ "./ts/modal/body/index.ts");
/* harmony import */ var _nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nodes/actions/highlight */ "./ts/modal/body/nodes/actions/highlight/index.ts");





let socket;
function getSocket() {
    return socket;
}
function generate(config, _socket) {
    socket = _socket;
    (0,_css__WEBPACK_IMPORTED_MODULE_1__["default"])();
    const background = document.createElement('div');
    const foreground = document.createElement('div');
    background.id = _consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BACKGROUND_ID;
    foreground.id = _consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_ID;
    background.append(foreground);
    socket.append(background);
    foreground.append((0,_header__WEBPACK_IMPORTED_MODULE_2__["default"])(config, background), (0,_body__WEBPACK_IMPORTED_MODULE_3__["default"])(config), (0,_nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_4__.generateEave)());
}


/***/ }),

/***/ "./ts/predicate.ts":
/*!*************************!*\
  !*** ./ts/predicate.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   getPredicatePromise: () => (/* binding */ getPredicatePromise),
/* harmony export */   isUnresolved: () => (/* binding */ isUnresolved)
/* harmony export */ });
var __awaiter = (undefined && undefined.__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());
    });
};
let count = 0;
function isUnresolved() {
    return count > 0;
}
function getPredicatePromise(_response) {
    return __awaiter(this, void 0, void 0, function* () {
        count++;
        try {
            const response = yield _response;
            count--;
            return typeof response === 'string' ? Promise.reject(response) : Promise[response ? 'resolve' : 'reject']();
        }
        catch (response) {
            count--;
            if (response instanceof Error) {
                return Promise.reject(response.message);
            }
            return Promise.reject(typeof response === 'string' ? response : undefined);
        }
    });
}


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it declares '$Config' on top-level, which conflicts with the current library output.
(() => {
/*!*******************************!*\
  !*** ./ts/library/$Config.js ***!
  \*******************************/
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (/* binding */ $Config)
/* harmony export */ });
/* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../consts */ "./ts/consts.ts");
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./ts/library/index.ts");
/* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modal/body */ "./ts/modal/body/index.ts");





const VERSION = 1;

const KEY_VERSION = 'TREE_FRAME_VERSION';

const KEY_STYLES = 'TREE_FRAME_USER_STYLES';

const STYLE_OUTER = {
	position: 'fixed',
	height: '100vh',
	width: '100vw',
};

const getStripped = (children) => {
	const stripped = [];
	
	for (const child of children) {
		if (child.isActive === false) {
			continue;
		}
		
		const data = {};
		
		if ('value' in child) {
			data.value = child.value;
		}
		
		if ('label' in child) {
			data.label = child.label;
		}
		
		if ('children' in child) {
			data.children = getStripped(child.children);
		}
		
		stripped.push(data);
	}
	
	return stripped;
};

class $Config {
	constructor(TITLE, KEY_TREE, TREE_DEFAULT, _getConfig, STYLE_INNER = {}, _STYLE_OUTER = {}) {
		// PERMISSION CHECKS
		
		const getError = (reason, error) => {
			const message = `[${TITLE}]${reason.includes('\n') ? '\n\n' : ' '}${reason}`;
			
			if (error) {
				error.message = message;
				
				return error;
			}
			
			return new Error(message);
		};
		
		if (typeof GM.getValue !== 'function') {
			throw getError('Missing GM.getValue permission.');
		}
		
		if (typeof GM.setValue !== 'function') {
			throw getError('Missing GM.setValue permission.');
		}
		
		if (typeof KEY_TREE !== 'string' || !(/^[a-z_][a-z0-9_]*$/i.test(KEY_TREE))) {
			throw getError(`'${KEY_TREE}' is not a valid storage key.`);
		}
		
		// PRIVATE
		
		let isOpen = false;
		
		const styleOuter = {
			...STYLE_OUTER,
			..._STYLE_OUTER,
		};
		
		const getConfig = ({children}) => _getConfig(getStripped(children));
		
		// PUBLIC
		
		this.ready = async () => {
			// Setup root element
			const target = (() => {
				let targetWindow = window;
				
				while (targetWindow.frameElement) {
					targetWindow = window.parent;
				}
				
				const id = `${_consts__WEBPACK_IMPORTED_MODULE_0__.SOCKET_ID}-${KEY_TREE}`;
				
				for (const child of targetWindow.document.body.children) {
					if (child.id === id) {
						child.remove();
						
						break;
					}
				}
				
				const target = document.createElement('iframe');
				
				target.id = id;
				
				for (const [property, value] of Object.entries(styleOuter)) {
					target.style[property] = value;
				}
				
				target.style.display = 'none';
				
				targetWindow.document.body.appendChild(target);
				
				return target;
			})();
			
			// Retrieve data
			
			const [userTree, userStyles, version] = await Promise.all([
				GM.getValue(KEY_TREE),
				GM.getValue(KEY_STYLES, []),
				GM.getValue(KEY_VERSION, -1),
			]);
			
			// Patch to current version
			
			(() => {
				if (!userTree) {
					return;
				}
				
				switch (version) {
					case -1: {
						const patch = (node) => {
							delete node.predicate;
							delete node.childPredicate;
							delete node.descendantPredicate;
							delete node.seed;
							
							if ('children' in node) {
								for (const child of node.children) {
									patch(child);
								}
							}
						};
						
						patch(userTree);
					}
					
					// eslint-disable-next-line no-fallthrough
					case 0: {
						const patch = (node) => {
							delete node.input;
							
							if ('children' in node) {
								for (const child of node.children) {
									patch(child);
								}
							}
						};
						
						patch(userTree);
					}
				}
			})();
			
			// Listen for post-init communication
			
			const open = (doOpen = true) => new Promise((resolve) => {
				isOpen = doOpen;
				
				target.style.display = doOpen ? (styleOuter.display ?? 'initial') : 'none';
				
				// Delay script execution until visual update
				setTimeout(resolve, 0);
			});
			
			const disconnect = () => new Promise((resolve) => {
				isOpen = false;
				
				target.remove();
				
				// Delay script execution until visual update
				setTimeout(resolve, 0);
			});
			
			/**
			 * @name $Config#reset
			 * @description Deletes the user's data.
			 * @returns {Promise<void>} Resolves upon completing the deletion.
			 */
			this.reset = async () => {
				if (isOpen) {
					throw getError('Cannot reset while the UI is open.');
				}
				
				if (typeof GM.deleteValue !== 'function') {
					throw getError('Missing GM.deleteValue permission.');
				}
				
				try {
					const config = getConfig(TREE_DEFAULT);
					
					this.get = () => config;
				} catch (error) {
					throw getError('Unable to parse default config.', error);
				}
				
				await GM.deleteValue(KEY_TREE);
				
				// It may have previously been a rejected promise
				this.ready = () => Promise.resolve();
				
				(0,_modal_body__WEBPACK_IMPORTED_MODULE_2__.reset)();
			};
			
			/**
			 * @name $Config#edit
			 * @description Allows the user to edit the active config.
			 * @returns {Promise<void>} Resolves when the user closes the config editor.
			 */
			this.edit = async () => {
				if (isOpen) {
					throw getError('A config editor is already open.');
				}
				
				open();
				
				const {tree, styles} = await (0,_index__WEBPACK_IMPORTED_MODULE_1__.edit)();
				
				GM.setValue(KEY_TREE, tree);
				GM.setValue(KEY_STYLES, styles);
				GM.setValue(KEY_VERSION, VERSION);
				
				const config = getConfig(tree);
				
				this.get = () => config;
				
				await open(false);
			};
			
			// Pass data
			
			try {
				const response = await (0,_index__WEBPACK_IMPORTED_MODULE_1__.init)({
					userStyles,
					defaultTree: TREE_DEFAULT,
					title: TITLE,
					defaultStyle: STYLE_INNER,
					...(userTree ? {userTree} : {}),
				}, target.contentDocument.body);
				
				if (response.requireReset) {
					throw getError(
						'Your config is invalid.'
						+ '\nThis could be due to a script update or your data being corrupted.'
						+ `\n\nReason:\n${response.error.message.replaceAll(/\n+/g, '\n')}`,
						response.error,
					);
				}
				
				const config = getConfig(response.tree);
				
				this.get = () => config;
				
				this.ready = () => Promise.resolve();
			} catch (error) {
				delete this.reset;
				
				await disconnect();
				
				this.ready = () => Promise.reject();
				
				throw getError(
					'Your config is invalid.'
					+ '\nThis could be due to a script update or your data being corrupted.'
					+ `\n\nReason:\n${error.message.replaceAll(/\n+/g, '\n')}`,
					error,
				);
			}
		};
	}
}

})();

$Config = __webpack_exports__["default"];
/******/ })()
;