您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows users to configure scripts
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/446506/1402602/%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_4__.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 _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/consts.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modal/css */ "./ts/modal/css.ts"); /* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../modal/body */ "./ts/modal/body/index.ts"); /* harmony import */ var _modal_header_actions_close__WEBPACK_IMPORTED_MODULE_5__ = __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, idPostfix) { var _a; return __awaiter(this, void 0, void 0, function* () { socket.id = `${_consts__WEBPACK_IMPORTED_MODULE_2__.SOCKET_ID}-${idPostfix}`; (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.setRootId)(socket.id); 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_5__.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 */ HangingPredicateError: () => (/* binding */ HangingPredicateError), /* harmony export */ JoinedError: () => (/* binding */ JoinedError), /* harmony export */ MismatchedOptionsError: () => (/* binding */ MismatchedOptionsError), /* harmony export */ NoNodeColourError: () => (/* binding */ NoNodeColourError), /* harmony export */ NoOptionsError: () => (/* binding */ NoOptionsError), /* harmony export */ NonIntegerError: () => (/* binding */ NonIntegerError), /* 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 NoOptionsError extends Error { constructor() { super('Array type validators may not be empty.'); } } class MismatchedOptionsError extends Error { constructor() { super('Values in array type validators must all be the same type.'); } } class HangingPredicateError extends Error { constructor() { super('If a predicate is declared, a value must also be present.'); } } 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__.validateParentMatch)(['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 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')) { if (isUserTree) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, 'descendantPredicate', false); if (!isChild([...breadcrumbs, 'seed'], candidate.seed)) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.UnexpectedStateError(); } if ((0,_index__WEBPACK_IMPORTED_MODULE_2__.hasOwnProperty)(candidate, 'childPredicate')) { if (isUserTree) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, 'childPredicate', false); if (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')) { if (isUserTree) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, 'descendantPredicate', false); if (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, 'poolId') && typeof candidate.poolId !== 'number') throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'poolId'], typeof candidate.poolId, ['number']); 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 isChild(breadcrumbs, candidate, isUserTree = false) { if (typeof candidate !== 'object') throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs], typeof candidate, ['object']); 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, 'predicate')) { if (isUserTree) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.PropertyError(breadcrumbs, 'predicate', false); if (typeof candidate.predicate !== 'function') { if (!Array.isArray(candidate.predicate)) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'predicate'], typeof candidate.predicate, _types__WEBPACK_IMPORTED_MODULE_0__.PREDICATE_TYPES); for (const [i, option] of candidate.predicate.entries()) { if (!_types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES.includes(typeof option)) throw new _errors__WEBPACK_IMPORTED_MODULE_1__.TypeError([...breadcrumbs, 'predicate', i.toString()], typeof option, _types__WEBPACK_IMPORTED_MODULE_0__.VALUE_TYPES); } } } 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')) { 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__.MIDDLE_KEYS); } else { (0,_index__WEBPACK_IMPORTED_MODULE_2__.validateUnexpectedKeys)(breadcrumbs, candidate, _types__WEBPACK_IMPORTED_MODULE_0__.LEAF_KEYS); } 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 */ validateParentMatch: () => (/* binding */ validateParentMatch), /* 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"); function mutateMatch(model, candidate, validate, property) { try { validate([], model, [], candidate); } catch (error) { if (property in model) { candidate[property] = model[property]; } else { delete candidate[property]; } } } function validatePredicateMatch(isFrozen, modelBreadcrumbs, model, candidateBreadcrumbs, candidate) { if ('predicate' in model !== 'predicate' in candidate) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(candidateBreadcrumbs, 'predicate', 'predicate' in model); if (typeof model.predicate !== typeof candidate.predicate) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...candidateBreadcrumbs, 'predicate'], typeof candidate.predicate, [typeof model.predicate]); if (typeof model.predicate === 'object') { const { length } = candidate.predicate; if (!isFrozen && !model.predicate.includes(candidate.value)) { candidate.value = model.predicate[candidate.predicate.indexOf(candidate.value)]; } if (model.predicate.length !== length) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'predicate', 'length'], length, [model.predicate.length]); for (const [i, option] of model.predicate.entries()) { if (candidate.predicate[i] !== option) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'predicate', i.toString()], candidate.predicate[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]]); } // Tree validators function validateParentMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate, isFrozen = false) { if (isFrozen) { validateValueMatch('poolId', modelBreadcrumbs, model, candidateBreadcrumbs, candidate); validateValueMatch('childPredicate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate); validateValueMatch('descendantPredicate', modelBreadcrumbs, model, candidateBreadcrumbs, candidate); } else { mutateMatch(model, candidate, validateValueMatch.bind(null, 'poolId'), 'poolId'); if ('childPredicate' in model) candidate.childPredicate = model.childPredicate; if ('descendantPredicate' in model) candidate.descendantPredicate = model.descendantPredicate; if ('seed' in model) candidate.seed = model.seed; } if ('seed' in model) { if (isFrozen) { validateChildMatch([...modelBreadcrumbs, 'seed'], model.seed, [...candidateBreadcrumbs, 'seed'], candidate.seed, true); } for (const [i, child] of candidate.children.entries()) { validateChildMatch([...modelBreadcrumbs, 'seed'], model.seed, [...candidateBreadcrumbs, 'children', i.toString()], child, isFrozen); } } else if (!('poolId' in model)) { if (isFrozen && model.children.length !== candidate.children.length) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError([...candidateBreadcrumbs, 'children', 'length'], candidate.children.length, [model.children.length]); if (model.children.length < candidate.children.length) { candidate.children = candidate.children.slice(0, model.children.length); } for (const [i, child] of candidate.children.entries()) { validateChildMatch([...modelBreadcrumbs, 'children', i.toString()], model.children[i], [...candidateBreadcrumbs, 'children', i.toString()], child, isFrozen); } if (model.children.length > candidate.children.length) { candidate.children.push(...model.children.slice(candidate.children.length)); } } } function validateChildMatch(modelBreadcrumbs, model, candidateBreadcrumbs, candidate, isFrozen = true) { if ('value' in model !== 'value' in candidate) { if (isFrozen || '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 (isFrozen) { validateValueMatch('label', modelBreadcrumbs, model, candidateBreadcrumbs, candidate); validatePredicateMatch(true, modelBreadcrumbs, model, candidateBreadcrumbs, candidate); } else { if (typeof model.value !== typeof candidate.value) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...candidateBreadcrumbs, 'value'], typeof candidate.value, [typeof model.value]); mutateMatch(model, candidate, validateValueMatch.bind(null, 'label'), 'label'); if ('predicate' in model) candidate.predicate = model.predicate; } 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, isFrozen); } } 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"); 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 getBoundPredicatePromise(response, { message }) { return __awaiter(this, void 0, void 0, function* () { try { yield (0,_predicate__WEBPACK_IMPORTED_MODULE_1__.getPredicatePromise)(response); } catch (cause) { throw new Error(message /* , {cause} */); } }); } function validateValue(valueBreadcrumbs, value, predicateBreadcrumbs, predicate) { return __awaiter(this, void 0, void 0, function* () { if (typeof predicate === 'function') { yield getBoundPredicatePromise(predicate(value), new _errors__WEBPACK_IMPORTED_MODULE_0__.PredicateError(predicateBreadcrumbs)); return; } if (!predicate.includes(value)) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.PredicateError(predicateBreadcrumbs), new _errors__WEBPACK_IMPORTED_MODULE_0__.ValueError(valueBreadcrumbs, value, predicate)); }); } function validateChild(breadcrumbs, child) { return __awaiter(this, void 0, void 0, function* () { if (!('predicate' in child)) { return; } if (!('value' in child)) { throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.HangingPredicateError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.PropertyError(breadcrumbs, 'value', true)); } if (Array.isArray(child.predicate)) { if (child.predicate.length === 0) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.NoOptionsError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.EmptyArrayError([...breadcrumbs, 'predicate'])); const type = typeof child.predicate[0]; for (let i = 1; i < child.predicate.length; ++i) { if (typeof child.predicate[i] !== type) throw new _errors__WEBPACK_IMPORTED_MODULE_0__.JoinedError(new _errors__WEBPACK_IMPORTED_MODULE_0__.MismatchedOptionsError(), new _errors__WEBPACK_IMPORTED_MODULE_0__.TypeError([...breadcrumbs, 'predicate', i.toString()], typeof child.predicate[i], [type])); } } yield validateValue([...breadcrumbs, 'value'], child.value, [...breadcrumbs, 'predicate'], child.predicate); }); } 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 */ PREDICATE_TYPES: () => (/* binding */ PREDICATE_TYPES), /* harmony export */ ROOT_KEYS: () => (/* binding */ ROOT_KEYS), /* harmony export */ VALUE_TYPES: () => (/* binding */ VALUE_TYPES) /* harmony export */ }); // Value types const VALUE_TYPES = ['boolean', 'number', 'string']; const PREDICATE_TYPES = ['array', 'function']; const INPUT_FORMATS = ['color', 'date', 'datetime-local', 'email', 'month', 'password', 'search', 'tel', 'text', 'time', 'url', 'week']; const CONTRAST_METHODS = ['Black / White', 'Invert']; // Node types const LEAF_KEYS = ['label', 'value', 'predicate', 'input', 'isActive']; const ROOT_KEYS = ['children', 'seed', 'childPredicate', 'descendantPredicate', 'poolId']; 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 _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__.MODAL_BODY_ID}`, [ ['overflow', 'hidden'], ['position', 'relative'], ]); } /***/ }), /***/ "./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 */ "default": () => (/* binding */ generate), /* harmony export */ reset: () => (/* binding */ reset) /* harmony export */ }); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/consts.ts"); /* harmony import */ var _trees__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./trees */ "./ts/modal/body/trees/index.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css */ "./ts/modal/body/css.ts"); /* harmony import */ var _trees_style__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./trees/style */ "./ts/modal/body/trees/style/index.ts"); /* harmony import */ var _trees_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./trees/data */ "./ts/modal/body/trees/data/index.ts"); /* harmony import */ var _trees_style_update__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./trees/style/update */ "./ts/modal/body/trees/style/update/index.ts"); /* harmony import */ var _nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _nodes_actions_active__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/actions/active */ "./ts/modal/body/trees/nodes/actions/active.ts"); let resetTree; function generate({ userTree, defaultTree, userStyles, defaultStyle }) { resetTree = defaultTree; (0,_trees_style_update__WEBPACK_IMPORTED_MODULE_5__["default"])((0,_trees_style__WEBPACK_IMPORTED_MODULE_3__.getActiveStyle)(userStyles, defaultStyle)); (0,_css__WEBPACK_IMPORTED_MODULE_2__["default"])(); const element = document.createElement('div'); element.id = _consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BODY_ID; element.append((0,_trees__WEBPACK_IMPORTED_MODULE_1__["default"])(userTree !== null && userTree !== void 0 ? userTree : defaultTree, userStyles, defaultStyle), (0,_nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_6__.generateEave)()); (0,_nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_6__.onMount)(); (0,_nodes_actions_active__WEBPACK_IMPORTED_MODULE_7__.onMount)(); return element; } function reset() { (0,_trees_data__WEBPACK_IMPORTED_MODULE_4__.setTree)(resetTree); } /***/ }), /***/ "./ts/modal/body/trees/consts.ts": /*!***************************************!*\ !*** ./ts/modal/body/trees/consts.ts ***! \***************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ TREE_CONTAINER_ID: () => (/* binding */ TREE_CONTAINER_ID) /* harmony export */ }); const TREE_CONTAINER_ID = 'tree-container'; /***/ }), /***/ "./ts/modal/body/trees/css.ts": /*!************************************!*\ !*** ./ts/modal/body/trees/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/trees/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css */ "./ts/modal/css.ts"); /* harmony import */ var _nodes_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/css */ "./ts/modal/body/trees/nodes/css.ts"); /* harmony import */ var _nodes_actions_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nodes/actions/css */ "./ts/modal/body/trees/nodes/actions/css.ts"); function generate() { (0,_nodes_css__WEBPACK_IMPORTED_MODULE_2__["default"])(); (0,_nodes_actions_css__WEBPACK_IMPORTED_MODULE_3__["default"])(); (0,_css__WEBPACK_IMPORTED_MODULE_1__.addRule)(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.TREE_CONTAINER_ID}`, [ ['height', '60vh'], ['overflow-y', 'auto'], ['overscroll-behavior', 'contain'], ['display', 'flex'], ['background-color', `var(--nodeBase0)`], ]); } /***/ }), /***/ "./ts/modal/body/trees/data/consts.ts": /*!********************************************!*\ !*** ./ts/modal/body/trees/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/trees/data/index.ts": /*!*******************************************!*\ !*** ./ts/modal/body/trees/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/trees/data/consts.ts"); /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../index */ "./ts/modal/body/trees/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 is necessary to avoid a shrinking iterable 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/trees/index.ts": /*!**************************************!*\ !*** ./ts/modal/body/trees/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 */ TREE_CONTAINER: () => (/* binding */ TREE_CONTAINER), /* harmony export */ "default": () => (/* binding */ generate), /* harmony export */ generateTree: () => (/* binding */ generateTree), /* harmony export */ setActive: () => (/* binding */ setActive) /* harmony export */ }); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/trees/consts.ts"); /* harmony import */ var _style__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style */ "./ts/modal/body/trees/style/index.ts"); /* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data */ "./ts/modal/body/trees/data/index.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./css */ "./ts/modal/body/trees/css.ts"); /* harmony import */ var _nodes_root__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./nodes/root */ "./ts/modal/body/trees/nodes/root.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../consts */ "./ts/modal/consts.ts"); const ROOTS = {}; const TREE_CONTAINER = document.createElement('div'); function setActive(button, actionId, doActivate = true) { if (doActivate) { button.classList.add(_consts__WEBPACK_IMPORTED_MODULE_5__.BUTTON_ACTIVE_CLASS); TREE_CONTAINER.classList.add(actionId); } else { button.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_5__.BUTTON_ACTIVE_CLASS); TREE_CONTAINER.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_4__["default"](data); root.element.elementContainer.id = id; ROOTS[id] = root; return root.element.elementContainer; } function generate(data, userStyles, defaultStyle) { (0,_css__WEBPACK_IMPORTED_MODULE_3__["default"])(); TREE_CONTAINER.id = _consts__WEBPACK_IMPORTED_MODULE_0__.TREE_CONTAINER_ID; TREE_CONTAINER.append((0,_style__WEBPACK_IMPORTED_MODULE_1__["default"])(userStyles, defaultStyle), (0,_data__WEBPACK_IMPORTED_MODULE_2__["default"])(data)); return TREE_CONTAINER; } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/active.ts": /*!*****************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./buttons/position */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/button.ts": /*!*************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../active */ "./ts/modal/body/trees/nodes/actions/active.ts"); /* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts"); /* harmony import */ var _modal_header_actions_alternate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/header/actions/alternate */ "./ts/modal/header/actions/alternate/index.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(); _active__WEBPACK_IMPORTED_MODULE_1__.register(); onClick(node, button, (0,_modal_header_actions_alternate__WEBPACK_IMPORTED_MODULE_3__.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_2__.SVG_NAMESPACE, 'circle'); circle.setAttribute('r', '50'); circle.setAttribute('stroke-width', '10'); const svg = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.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/trees/nodes/actions/buttons/consts.ts": /*!*************************************************************!*\ !*** ./ts/modal/body/trees/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 */ PROSPECTIVE_CLASS: () => (/* binding */ PROSPECTIVE_CLASS) /* harmony export */ }); const BUTTON_CLASS = 'node-button'; const ALT_CLASS = 'node-icon-alt'; const PROSPECTIVE_CLASS = 'node-prospective'; /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/buttons/create/button.ts": /*!********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/consts.ts"); /* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/consts.ts": /*!********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/css.ts": /*!*****************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/index.ts": /*!*******************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/create/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/trees/nodes/actions/buttons/create/button.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/nodes/actions/buttons/button.ts"); /* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/trees/nodes/actions/buttons/position/index.ts"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts"); /* harmony import */ var _nodes_middle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/middle */ "./ts/modal/body/trees/nodes/middle.ts"); /* harmony import */ var _nodes_child__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nodes/child */ "./ts/modal/body/trees/nodes/child.ts"); let activeNode; function reset() { if (!activeNode) { return; } _position__WEBPACK_IMPORTED_MODULE_4__.reset(); activeNode = undefined; } 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__.PROSPECTIVE_CLASS); return child; } function doAction(source, parent, index, button) { const child = getChild(source); child.move(parent, index); Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(parent)) .then(() => { child.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.PROSPECTIVE_CLASS); child.isActive = true; reset(); // Show the new node child.element.scrollIntoView(); }) .catch((reason) => { child.disconnect(); if (reason) { (0,_tooltip__WEBPACK_IMPORTED_MODULE_6__.show)(reason, button); } }); } function onClick(node, button, isAlt) { const previousNode = activeNode; reset(); if (!isAlt) { doAction(node, node, 0, button); } else if (!previousNode || node !== previousNode) { activeNode = node; _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/trees/nodes/actions/buttons/css.ts": /*!**********************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _create_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create/css */ "./ts/modal/body/trees/nodes/actions/buttons/create/css.ts"); /* harmony import */ var _move_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./move/css */ "./ts/modal/body/trees/nodes/actions/buttons/move/css.ts"); /* harmony import */ var _disable_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./disable/css */ "./ts/modal/body/trees/nodes/actions/buttons/disable/css.ts"); /* harmony import */ var _duplicate_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./duplicate/css */ "./ts/modal/body/trees/nodes/actions/buttons/duplicate/css.ts"); /* harmony import */ var _position_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./position/css */ "./ts/modal/body/trees/nodes/actions/buttons/position/css.ts"); /* harmony import */ var _focus_consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../focus/consts */ "./ts/modal/body/trees/nodes/actions/focus/consts.ts"); /* harmony import */ var _highlight_consts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../highlight/consts */ "./ts/modal/body/trees/nodes/actions/highlight/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees_style_update_depth__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/modal/body/trees/style/update/depth */ "./ts/modal/body/trees/style/update/depth.ts"); /* harmony import */ var _modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/modal/header/actions/alternate/consts */ "./ts/modal/header/actions/alternate/consts.ts"); /* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts"); function addColourRule(actionId, strokeVar) { (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)([ `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_focus_consts__WEBPACK_IMPORTED_MODULE_6__.FOCUS_SOURCE_CLASS}):not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_7__.HIGHLIGHT_CLASS}) > ` + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER} ` + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId} > svg`, ], ['fill', `var(${strokeVar})`]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)([ `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_focus_consts__WEBPACK_IMPORTED_MODULE_6__.FOCUS_SOURCE_CLASS}):not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_7__.HIGHLIGHT_CLASS}) > ` + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER} ` + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId}:not(.${_modal_consts__WEBPACK_IMPORTED_MODULE_11__.BUTTON_ACTIVE_CLASS}) > svg > g`, ], ['stroke', `none`]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_highlight_consts__WEBPACK_IMPORTED_MODULE_7__.HIGHLIGHT_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER} > ` + `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${actionId}.${_modal_consts__WEBPACK_IMPORTED_MODULE_11__.BUTTON_ACTIVE_CLASS} > svg > g`, ['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_12__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}`, ['height', '100%']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS} > svg`, [ ['height', '100%'], ['transform', 'scale(1.05)'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER}`, ['white-space', 'nowrap']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(${_focus_consts__WEBPACK_IMPORTED_MODULE_6__.FOCUS_SOURCE_CLASS}):not(${_highlight_consts__WEBPACK_IMPORTED_MODULE_7__.HIGHLIGHT_CLASS}) > ` + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > ${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER} circle`, ['stroke', 'transparent']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)( // Not focused, not hovered `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.ELEMENT_CONTAINER}:not(.${_focus_consts__WEBPACK_IMPORTED_MODULE_6__.FOCUS_SOURCE_CLASS}):not(.${_highlight_consts__WEBPACK_IMPORTED_MODULE_7__.HIGHLIGHT_CLASS}) > ` + `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER} svg`, [['fill', 'none']]); // Hide prospective nodes (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.PROSPECTIVE_CLASS}`, ['display', 'none']); // Hide alt icon components (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ALT_CLASS}:not(.${_modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_10__.ACTION_ID} *)`, ['display', 'none']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_12__.addRule)(`.${_modal_header_actions_alternate_consts__WEBPACK_IMPORTED_MODULE_10__.ACTION_ID} button.${_consts__WEBPACK_IMPORTED_MODULE_0__.ALT_CLASS} + *`, ['display', 'none']); (0,_modal_body_trees_style_update_depth__WEBPACK_IMPORTED_MODULE_9__.addDepthChangeListener)((depth, addRule) => { const depthSelector = `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.DEPTH_CLASS_PREFIX}${depth} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.HEAD_CONTAINER} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_8__.ELEMENT_CLASSES.BUTTON_CONTAINER}`; addRule(`${depthSelector} 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_7__.HIGHLIGHT_CLASS}${depthSelector} .${_modal_consts__WEBPACK_IMPORTED_MODULE_11__.BUTTON_ACTIVE_CLASS} > svg`, ], [ ['stroke', `var(--nodeContrast${depth})`], ['fill', `var(--nodeBase${depth})`], ]); }); } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/buttons/disable/button.ts": /*!*********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/consts.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/consts.ts": /*!*********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/css.ts": /*!******************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/trees/nodes/actions/buttons/css.ts"); /* harmony import */ var _highlight_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../highlight/consts */ "./ts/modal/body/trees/nodes/actions/highlight/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/index.ts": /*!********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/disable/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/trees/nodes/actions/buttons/disable/button.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/nodes/actions/buttons/button.ts"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts"); /* harmony import */ var _modal_consts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/consts */ "./ts/modal/consts.ts"); function updateButton(button, isActive) { button.classList[isActive ? 'remove' : 'add'](_modal_consts__WEBPACK_IMPORTED_MODULE_5__.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) { toggle(node); Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_3__.getSubPredicateResponses)(node.parent)) .then(() => { if (isAlt) { // TODO set up a way to confirm (tooltip + yes/no buttons? require extra button click?) node.disconnect(); } else { updateButton(button, node.isActive); } }) .catch((reason) => { toggle(node); if (typeof reason === 'string') { _tooltip__WEBPACK_IMPORTED_MODULE_4__.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/trees/nodes/actions/buttons/duplicate/button.ts": /*!***********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/consts.ts"); /* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/consts.ts": /*!***********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/css.ts": /*!********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/index.ts": /*!**********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/duplicate/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/trees/nodes/actions/buttons/duplicate/button.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/nodes/actions/buttons/button.ts"); /* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/trees/nodes/actions/buttons/position/index.ts"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts"); let activeNode; function reset() { if (!activeNode) { return; } _position__WEBPACK_IMPORTED_MODULE_4__.reset(); activeNode = undefined; } function validate(copy, button) { Promise.all((0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(copy.parent)) .then(() => { copy.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.PROSPECTIVE_CLASS); reset(); // Show the new node copy.element.scrollIntoView(); }) .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__.PROSPECTIVE_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); } 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/trees/nodes/actions/buttons/move/button.ts": /*!******************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/consts.ts"); /* harmony import */ var _position_button_alt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../position/button/alt */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/consts.ts": /*!******************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/css.ts": /*!***************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/index.ts": /*!*****************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/trees/nodes/actions/buttons/move/button.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/nodes/actions/buttons/button.ts"); /* harmony import */ var _position__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../position */ "./ts/modal/body/trees/nodes/actions/buttons/position/index.ts"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tooltip */ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts"); let activeNode; function reset() { if (!activeNode) { return; } _position__WEBPACK_IMPORTED_MODULE_4__.reset(); activeNode = undefined; } function doAction(node, newParent, index, button) { const oldParent = node.parent; const copy = node.duplicate(); copy.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_2__.PROSPECTIVE_CLASS); copy.move(newParent, index); node.isActive = false; Promise.all([ ...(0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(oldParent), ...(oldParent === newParent ? [] : (0,_edit__WEBPACK_IMPORTED_MODULE_5__.getSubPredicateResponses)(newParent)), ]) .then(() => { copy.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_2__.PROSPECTIVE_CLASS); node.disconnect(); reset(); // Show where the node's been moved to copy.element.scrollIntoView(); }) .catch((reason) => { 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); } 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/trees/nodes/actions/buttons/position/button/alt.ts": /*!**************************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../button */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/button/index.ts": /*!****************************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../button */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/consts.ts": /*!**********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/css.ts": /*!*******************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/consts.ts"); /* harmony import */ var _focus_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../focus/consts */ "./ts/modal/body/trees/nodes/actions/focus/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/index.ts": /*!*********************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/buttons/position/consts.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./button */ "./ts/modal/body/trees/nodes/actions/buttons/position/button/index.ts"); /* harmony import */ var _button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../button */ "./ts/modal/body/trees/nodes/actions/buttons/button.ts"); /* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _modal_body_trees__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/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_trees__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/trees/nodes/actions/css.ts": /*!**************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/edit/css.ts"); /* harmony import */ var _edit_option_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit/option/css */ "./ts/modal/body/trees/nodes/actions/edit/option/css.ts"); /* harmony import */ var _highlight_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./highlight/css */ "./ts/modal/body/trees/nodes/actions/highlight/css.ts"); /* harmony import */ var _focus_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./focus/css */ "./ts/modal/body/trees/nodes/actions/focus/css.ts"); /* harmony import */ var _tooltip_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tooltip/css */ "./ts/modal/body/trees/nodes/actions/tooltip/css.ts"); /* harmony import */ var _buttons_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./buttons/css */ "./ts/modal/body/trees/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/trees/nodes/actions/edit/consts.ts": /*!**********************************************************!*\ !*** ./ts/modal/body/trees/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 VALID_CLASS = 'valid'; const INVALID_CLASS = 'invalid'; const INVALID_BACKGROUND_CLASS = 'background-invalid'; const VALID_BACKGROUND_CLASS = 'background-valid'; const ACTIVE_CLASS = 'edit-active'; /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/edit/css.ts": /*!*******************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/edit/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/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}`, `.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}:not(:focus)`, ], ['cursor', 'pointer']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}`, [ ['flex-grow', '1'], ['padding', '0 0.6em'], ['outline', 'none'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}[type="checkbox"]`, [ ['height', '1em'], ['width', '2.2em'], ['cursor', 'pointer'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.VALUE}[type="color"]`, ['height', '1.3em']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([`.${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_BACKGROUND_CLASS}`], ['right', '0']); (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_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_BACKGROUND_CLASS}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.BACKGROUND_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.VALUE_CONTAINER}`, ['color', 'var(--validFont) !important']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_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.VALUE_CONTAINER}`, ['color', 'var(--invalidFont) !important']); } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/edit/index.ts": /*!*********************************************************!*\ !*** ./ts/modal/body/trees/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 */ unmount: () => (/* binding */ unmount), /* harmony export */ update: () => (/* binding */ update) /* harmony export */ }); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/trees/nodes/actions/edit/consts.ts"); /* harmony import */ var _option__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./option */ "./ts/modal/body/trees/nodes/actions/edit/option/index.ts"); /* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../tooltip */ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts"); /* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _predicate__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/predicate */ "./ts/predicate.ts"); let activeNode; function isActive() { return Boolean(activeNode); } function reset() { if (!activeNode) { return; } activeNode.element.render(activeNode.value); activeNode.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS); activeNode.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS); activeNode.element.valueElement.blur(); activeNode.element.valueContainer.classList.remove(_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.valueElement.checked); case 'number': return Number(node.element.valueElement.value); default: return node.element.valueElement.value; } } function getSubPredicateResponse(predicate, children) { return (0,_predicate__WEBPACK_IMPORTED_MODULE_4__.getPredicatePromise)(predicate(children.map((child) => child.getJSON()))); } function getDescendantPredicateResponses(node) { const responses = []; if ('descendantPredicate' in node) { responses.push(getSubPredicateResponse(node.descendantPredicate, node.children)); } if ('parent' in node) { responses.push(...getDescendantPredicateResponses(node.parent)); } return responses; } function getChildPredicateResponse(node) { if ('childPredicate' in node) { return getSubPredicateResponse(node.childPredicate, node.children); } return Promise.resolve(null); } function getSubPredicateResponses(parent) { return [getChildPredicateResponse(parent), ...getDescendantPredicateResponses(parent)]; } function getOwnPredicateResponse(node) { if (!('predicate' in node)) { return Promise.resolve(); } const { predicate } = node; const value = getValue(node); if (typeof predicate === 'function') { return (0,_predicate__WEBPACK_IMPORTED_MODULE_4__.getPredicatePromise)(predicate(value)); } return Promise[predicate.indexOf(value) > -1 ? 'resolve' : 'reject'](); } function getAllPredicateResponses(node = activeNode) { return [getOwnPredicateResponse(node), ...getSubPredicateResponses(node.parent)]; } function update(node) { const previousValue = node.value; node.value = getValue(node); if (node.hasOptions) { _option__WEBPACK_IMPORTED_MODULE_1__.update(node.value); } Promise.all(getAllPredicateResponses()) .then(() => { node.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS); activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS); _tooltip__WEBPACK_IMPORTED_MODULE_2__.hide(); }) .catch((reason) => { node.element.removeClass(_consts__WEBPACK_IMPORTED_MODULE_0__.VALID_CLASS); activeNode.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_0__.INVALID_CLASS); activeNode.value = previousValue; if (reason) { _tooltip__WEBPACK_IMPORTED_MODULE_2__.show(reason); } }); } function unmount(node) { if (node === activeNode) { reset(); } } function doAction(node) { const previousNode = activeNode; reset(); if (previousNode !== node) { activeNode = node; activeNode.element.valueContainer.classList.add(_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 (node.hasOptions) { _option__WEBPACK_IMPORTED_MODULE_1__.setNode(node); } if (node.input === 'color') { node.element.valueElement.click(); } else { node.element.valueElement.select(); } (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.addSustained)(node); } } function mount(node) { const { backgroundContainer, valueElement, headContainer } = node.element; 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 && activeNode !== node) { doAction(node); } }); headContainer.addEventListener('click', (event) => { event.stopPropagation(); if (activeNode !== node) { doAction(node); } }); // Process new value if (typeof node.value === 'boolean') { valueElement.addEventListener('click', (event) => { event.stopPropagation(); update(node); }); } else { valueElement.addEventListener('input', (event) => { event.stopPropagation(); update(node); }); // Stop if (node.input === 'color') { valueElement.addEventListener('change', (event) => { event.stopPropagation(); reset(); (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.focusHovered)(); }); } } if (node.hasOptions) { _option__WEBPACK_IMPORTED_MODULE_1__.generate(node); } valueElement.addEventListener('keydown', (event) => { switch (event.key) { case 'Enter': case 'Escape': case 'Tab': event.stopPropagation(); reset(); (0,_highlight__WEBPACK_IMPORTED_MODULE_3__.focusHovered)(); } }); } function shouldMount(node) { return 'value' in node; } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/edit/option/consts.ts": /*!*****************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/edit/option/css.ts": /*!**************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/edit/option/consts.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/nodes/actions/edit/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees_style_update_depth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/trees/style/update/depth */ "./ts/modal/body/trees/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', '1'], ['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_trees_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/trees/nodes/actions/edit/option/index.ts": /*!****************************************************************!*\ !*** ./ts/modal/body/trees/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 */ 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/trees/nodes/actions/edit/option/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); const activeOptions = []; let activeIndex = -1; function getTotalOffsetTop(from) { let offsetTop = 2; let node; for (node = from; !node.classList.contains(_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.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 update(value) { const regExp = new RegExp(escapeRegExp(value), 'i'); for (const { parentElement, innerText } of activeOptions) { parentElement.classList[regExp.test(innerText) ? 'add' : 'remove'](_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS); } const wrapper = activeOptions[0].parentElement.parentElement; const totalOffsetTop = getTotalOffsetTop(wrapper); if (_modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop + _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.clientHeight < totalOffsetTop + wrapper.clientHeight) { _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop = totalOffsetTop + wrapper.clientHeight - _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.clientHeight; } } function setValue(node, value, doKill = false) { node.element.valueElement.value = value; node.value = value; if (doKill) { // Simulate an 'enter' button press node.element.valueElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Tab' })); } } function setActive(option, isActive = true) { option.classList[isActive ? 'add' : 'remove'](_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_ACTIVE_CLASS); } function reset() { for (const { parentElement } of activeOptions) { parentElement.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.OPTION_SHOW_CLASS); } if (activeIndex >= 0) { setActive(activeOptions[activeIndex].parentElement, false); activeIndex = -1; } activeOptions.length = 0; } function setNode(node) { activeOptions.push(...node.element.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.predicate) { 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('click', (event) => { event.stopPropagation(); // Necessary to prevent re-focusing the input element event.preventDefault(); setValue(node, value, true); }); container.addEventListener('mouseenter', (event) => { event.stopPropagation(); setActive(container); }); container.addEventListener('mouseleave', (event) => { event.stopPropagation(); setActive(container, false); }); } node.element.valueElement.addEventListener('keydown', ({ key }) => { const priorIndex = activeIndex; let hasChanged = false; switch (key) { case 'Tab': case 'Enter': if (activeIndex >= 0) { 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_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop + _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.clientHeight < totalOffsetTop + parentElement.clientHeight - parentElement.parentElement.scrollTop) { _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop = totalOffsetTop + parentElement.clientHeight - _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.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_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop > totalOffsetTop - parentElement.parentElement.scrollTop) { _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.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.valueContainer.appendChild(wrapper); } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/focus/consts.ts": /*!***********************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/focus/css.ts": /*!********************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/focus/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/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/trees/nodes/actions/focus/index.ts": /*!**********************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/focus/consts.ts"); /* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../buttons/position */ "./ts/modal/body/trees/nodes/actions/buttons/position/index.ts"); /* harmony import */ var _highlight__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _active__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../active */ "./ts/modal/body/trees/nodes/actions/active.ts"); let activeNode; function isActive() { return Boolean(activeNode); } function setTabIndexes(doAdd = true, node = activeNode) { const { 'buttonContainer': { 'children': buttons }, 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); } } 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_2__.removeSustained)(activeNode); setTabIndexes(false); activeNode.element.scrollIntoView(); activeNode = undefined; } function doAction(node, doForce = false) { const toggleOn = node !== activeNode; // Avoid changing the view when it's already been focused if ((0,_buttons_position__WEBPACK_IMPORTED_MODULE_1__.isActive)() || (doForce && !toggleOn)) { return; } reset(); _active__WEBPACK_IMPORTED_MODULE_3__.register(); if (toggleOn) { activeNode = node; node.element.headContainer.focus(); focus(); focusBranch(); (0,_highlight__WEBPACK_IMPORTED_MODULE_2__.addSustained)(node); setTabIndexes(); } } function unmount(node) { if (node === activeNode) { reset(); } } function mount(node) { const { elementContainer } = node.element; // Handle mouse input elementContainer.addEventListener('click', (event) => { event.stopPropagation(); doAction(node); }); // Handle keyboard input elementContainer.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.stopPropagation(); doAction(node); } }); } function shouldMount() { return true; } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/highlight/consts.ts": /*!***************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/highlight/css.ts": /*!************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/highlight/consts.ts"); /* harmony import */ var _buttons_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../buttons/consts */ "./ts/modal/body/trees/nodes/actions/buttons/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees_style_update_depth__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/trees/style/update/depth */ "./ts/modal/body/trees/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__.HIGHLIGHT_CLASS} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_BACKGROUND_CLASS}`, ['width', '100%']); (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', '15%'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_4__.addRule)(`.${_buttons_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_CLASS}:last-child`, [ ['border-top-right-radius', '50%'], ['border-bottom-right-radius', '50%'], ]); (0,_modal_body_trees_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(`${rootSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > .${_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([ `.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS}${headSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.VALUE_CONTAINER}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS}${headSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, ], ['color', `var(--nodeBase${depth})`]); addRule(`${headSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [ ['background-image', `linear-gradient(to left, var(--nodeBase${depth}) 60%, transparent)`], ['background-size', 'auto'], ]); addRule(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.HIGHLIGHT_CLASS}${headSelector} > .${_nodes_consts__WEBPACK_IMPORTED_MODULE_2__.ELEMENT_CLASSES.LABEL_CONTAINER}`, ['background-image', `linear-gradient(to left, var(--nodeContrast${depth}) 60%, transparent)`]); }); // Bug fixer (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/trees/nodes/actions/highlight/index.ts": /*!**************************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/highlight/consts.ts"); /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _focus__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _buttons_position__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../buttons/position */ "./ts/modal/body/trees/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 } = node.element; 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(); 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/trees/nodes/actions/tooltip/consts.ts": /*!*************************************************************!*\ !*** ./ts/modal/body/trees/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_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_ANIMATION = [ [ // keyframes { opacity: 1 }, { opacity: 1 }, { opacity: 0 }, ], { duration: 2000 }, ]; /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/tooltip/css.ts": /*!**********************************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/actions/tooltip/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees_style_update_depth__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/body/trees/style/update/depth */ "./ts/modal/body/trees/style/update/depth.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts"); // todo you need tooltips for deletion/creation/movement. // you'll need a different system to position tooltips underneath/above buttons 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'], ['z-index', '1'], ['width', '100%'], ['pointer-events', 'none'], ['white-space', 'normal'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS}`, ['bottom', '102%']); (0,_modal_css__WEBPACK_IMPORTED_MODULE_3__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CONTAINER_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_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_trees_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)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_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)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS} > .${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}::after`, [ ['bottom', '100%'], ['border-color', 'transparent transparent var(--borderTooltip) transparent'], ]); } /***/ }), /***/ "./ts/modal/body/trees/nodes/actions/tooltip/index.ts": /*!************************************************************!*\ !*** ./ts/modal/body/trees/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 */ reset: () => (/* binding */ reset), /* harmony export */ setNode: () => (/* binding */ setNode), /* harmony export */ show: () => (/* binding */ show) /* harmony export */ }); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/trees/nodes/actions/tooltip/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); let activeParent; function isAboveCenter(element, yPosition = 0) { if (!element.isSameNode(_modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER)) { if (element.classList.contains(_nodes_consts__WEBPACK_IMPORTED_MODULE_1__.ELEMENT_CLASSES.ELEMENT_CONTAINER)) { yPosition += element.offsetTop; } return isAboveCenter(element.parentElement, yPosition); } const scrollPosition = _modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.scrollTop + (_modal_body_trees__WEBPACK_IMPORTED_MODULE_2__.TREE_CONTAINER.clientHeight / 2); return scrollPosition > yPosition; } function generate(parent) { 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); 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 oldElement = parent.querySelector(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_CLASS}`); if (oldElement) { const [animation] = oldElement.getAnimations(); animation.currentTime = 0; return [oldElement.parentElement, oldElement]; } const [container, element] = generate(parent); element.animate(..._consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_ANIMATION).onfinish = () => { container.remove(); }; return [container, element]; } function show(message, parent) { const [container, element] = getAnimated(parent); if (isAboveCenter(container)) { container.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS); container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS); } else { container.classList.remove(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_BOTTOM_CLASS); container.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.TOOLTIP_TOP_CLASS); } element.innerText = message; } 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 { parentElement } = node.element.valueElement; generate(parentElement); activeParent = parentElement; } /***/ }), /***/ "./ts/modal/body/trees/nodes/child.ts": /*!********************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/element.ts"); /* harmony import */ var _actions_highlight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions/highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _actions_edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions/edit */ "./ts/modal/body/trees/nodes/actions/edit/index.ts"); /* harmony import */ var _actions_focus__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions/focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _actions_buttons_disable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/buttons/disable */ "./ts/modal/body/trees/nodes/actions/buttons/disable/index.ts"); /* harmony import */ var _actions_buttons_move__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/buttons/move */ "./ts/modal/body/trees/nodes/actions/buttons/move/index.ts"); /* harmony import */ var _actions_buttons_duplicate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./actions/buttons/duplicate */ "./ts/modal/body/trees/nodes/actions/buttons/duplicate/index.ts"); /* harmony import */ var _style_update_depth__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../style/update/depth */ "./ts/modal/body/trees/style/update/depth.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.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, value] of Object.entries(Object.assign({ isActive: true }, data))) { this[key] = value; } this.hasOptions = Array.isArray(data.predicate); this.attach(parent, index); for (const { shouldMount, mount } of actions) { if (shouldMount(this)) { mount(this); } } } getRoot() { return this.parent.getRoot(); } 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 = { isActive: this.isActive }; for (const property of ['label', 'value', 'input']) { if (property in this) { data[property] = this[property]; } } return data; } } /***/ }), /***/ "./ts/modal/body/trees/nodes/consts.ts": /*!*********************************************!*\ !*** ./ts/modal/body/trees/nodes/consts.ts ***! \*********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* 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', 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-'; /***/ }), /***/ "./ts/modal/body/trees/nodes/css.ts": /*!******************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/consts.ts"); /* harmony import */ var _style_update_depth__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../style/update/depth */ "./ts/modal/body/trees/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 maxes out at the viewport's height 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.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}`, ], [ ['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}`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER}`, ], [['position', 'absolute']]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER}`, [ ['right', '0'], ['top', '0'], ['user-select', 'none'], ['pointer-events', 'none'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER}`, [ ['width', '100%'], ['height', '100%'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.BACKGROUND_CONTAINER} > *`, [ ['height', '100%'], ['width', '0'], ['transition', 'width 500ms'], ['position', 'absolute'], ]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.HEAD_CONTAINER}`, [ // Puts it above the backgrounds ['position', 'relative'], ]); (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', `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.BACKGROUND_CONTAINER}`, ['outline', `1px solid var(--nodeContrast${depth})`]); }); } /***/ }), /***/ "./ts/modal/body/trees/nodes/element.ts": /*!**********************************************!*\ !*** ./ts/modal/body/trees/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/trees/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.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.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.elementContainer.appendChild(this.backgroundContainer); this.headContainer.appendChild(this.buttonContainer); if ('value' in data) { this.valueContainer = document.createElement('label'); this.valueElement = document.createElement('input'); this.valueContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE_CONTAINER); this.valueElement.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.VALUE); this.valueElement.setAttribute('tabIndex', '-1'); if (typeof data.value === 'boolean') { this.valueElement.type = 'checkbox'; // Positions tooltips below checkboxes const valueWrapper = document.createElement('span'); valueWrapper.appendChild(this.valueElement); this.valueContainer.appendChild(valueWrapper); } else { if (typeof data.value === 'number') { this.valueElement.type = 'number'; // Disables a tooltip implying that decimal values are invalid this.valueElement.step = 'any'; } else if ('input' in data) { this.valueElement.type = data.input; } this.valueContainer.appendChild(this.valueElement); } this.render(data.value); this.headContainer.appendChild(this.valueContainer); } this.elementContainer.appendChild(this.headContainer); if ('label' in data) { this.labelContainer = document.createElement('div'); this.labelElement = document.createElement('span'); this.labelContainer.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL_CONTAINER); this.labelElement.classList.add(_consts__WEBPACK_IMPORTED_MODULE_0__.ELEMENT_CLASSES.LABEL); this.labelElement.innerText = data.label; this.labelContainer.appendChild(this.labelElement); this.headContainer.appendChild(this.labelContainer); } this.elementContainer.appendChild(this.childContainer); } render(value) { if (typeof value === 'boolean') { this.valueElement.checked = value; } else { this.valueElement.value = value.toString(); } } 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/trees/nodes/middle.ts": /*!*********************************************!*\ !*** ./ts/modal/body/trees/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/trees/nodes/consts.ts"); /* harmony import */ var _child__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./child */ "./ts/modal/body/trees/nodes/child.ts"); /* harmony import */ var _actions_buttons_create__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions/buttons/create */ "./ts/modal/body/trees/nodes/actions/buttons/create/index.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_buttons_create__WEBPACK_IMPORTED_MODULE_2__]; class Middle extends _child__WEBPACK_IMPORTED_MODULE_1__["default"] { constructor(_a, parent, index) { var { children } = _a, data = __rest(_a, ["children"]); super(data, parent, index); this.children = []; for (const [key, value] of Object.entries(data)) { this[key] = value; } for (const child of children) { if ('children' in child) { new Middle(child, this); } else { new _child__WEBPACK_IMPORTED_MODULE_1__["default"](child, this); } } 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() { return Object.assign({ children: this.children.map((child) => child.getJSON()) }, super.getJSON()); } } /***/ }), /***/ "./ts/modal/body/trees/nodes/root.ts": /*!*******************************************!*\ !*** ./ts/modal/body/trees/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 */ }); /* harmony import */ var _middle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./middle */ "./ts/modal/body/trees/nodes/middle.ts"); /* harmony import */ var _child__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./child */ "./ts/modal/body/trees/nodes/child.ts"); /* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./ts/modal/body/trees/nodes/element.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./consts */ "./ts/modal/body/trees/nodes/consts.ts"); /* harmony import */ var _actions_highlight__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _actions_focus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _actions_buttons_create__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./actions/buttons/create */ "./ts/modal/body/trees/nodes/actions/buttons/create/index.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_4__, _actions_focus__WEBPACK_IMPORTED_MODULE_5__, _actions_buttons_create__WEBPACK_IMPORTED_MODULE_6__]; class Root { constructor(_a) { var { children } = _a, data = __rest(_a, ["children"]); this.children = []; this.depth = 0; this.element = new _element__WEBPACK_IMPORTED_MODULE_2__["default"]({}); this.element.addClass(_consts__WEBPACK_IMPORTED_MODULE_3__.ROOT_CLASS); this.element.addDepthClass(0); for (const [key, value] of Object.entries(data)) { this[key] = value; } this.addChildren(children); for (const { shouldMount, mount } of actions) { if (shouldMount(this)) { mount(this); } } } 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); } } } getRoot() { return this; } updateDepthClass(classCount) { for (const child of this.children) { child.updateDepthClass(classCount); } } getJSON() { return { children: this.children.map((child) => child.getJSON()) }; } } /***/ }), /***/ "./ts/modal/body/trees/style/consts.ts": /*!*********************************************!*\ !*** ./ts/modal/body/trees/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: '#ffd189', headButtonStyle: '#ff75da', headButtonHide: '#00bfff', headButtonAlt: '#ffea00', nodeBase: ['#000000'], nodeContrast: 'Black / White', nodeButtonCreate: '#40ff40', nodeButtonDuplicate: '#40ffff', nodeButtonMove: '#ac60ff', nodeButtonDisable: '#ffd000', nodeButtonDelete: '#ff1111', validBackground: '#d9ffc0', invalidBackground: '#ffb4be', }; /***/ }), /***/ "./ts/modal/body/trees/style/css.ts": /*!******************************************!*\ !*** ./ts/modal/body/trees/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/trees/style/consts.ts"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./ts/modal/body/trees/consts.ts"); /* harmony import */ var _data_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../data/consts */ "./ts/modal/body/trees/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__.TREE_CONTAINER_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__.TREE_CONTAINER_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/trees/style/index.ts": /*!********************************************!*\ !*** ./ts/modal/body/trees/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/trees/style/consts.ts"); /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css */ "./ts/modal/body/trees/style/css.ts"); /* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./update */ "./ts/modal/body/trees/style/update/index.ts"); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! .. */ "./ts/modal/body/trees/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, predicate: [..._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, predicate: [..._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().getJSON(); 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: (styleNodes) => { const activeStyles = styleNodes.filter(({ isActive, 'children': [{ value }], }) => isActive && value); switch (activeStyles.length) { case 0: (0,_update__WEBPACK_IMPORTED_MODULE_2__["default"])(defaultStyle); return true; case 1: (0,_update__WEBPACK_IMPORTED_MODULE_2__["default"])(toRawStyle(activeStyles[0])); return true; default: return 'Only one color scheme may be active at a time.'; } }, }, _consts__WEBPACK_IMPORTED_MODULE_0__.ROOT_ID); } /***/ }), /***/ "./ts/modal/body/trees/style/update/depth.ts": /*!***************************************************!*\ !*** ./ts/modal/body/trees/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/trees/index.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts"); const STYLESHEET = (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.generateStylesheet)(); const callbacks = []; let currentClassCount; function getDepthClassCount() { return currentClassCount; } function addDepthRule(selectors, styles) { (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addRule)(selectors, styles, STYLESHEET); } 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 = STYLESHEET.cssRules.length - 1; i >= 0; --i) { STYLESHEET.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/trees/style/update/index.ts": /*!***************************************************!*\ !*** ./ts/modal/body/trees/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/trees/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 STYLESHEET = (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.generateStylesheet)(); 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 = STYLESHEET.cssRules.length - 1; i >= 0; --i) { STYLESHEET.deleteRule(i); } (0,_depth__WEBPACK_IMPORTED_MODULE_0__.updateDepth)(nodeBase.length); (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addRule)('', ['font-size', `${fontSize}px`], STYLESHEET); 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)]); colourStyles.push(['--validFont', getContrast(colours.validBackground, nodeContrast)]); colourStyles.push(['--invalidFont', getContrast(colours.invalidBackground, nodeContrast)]); (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.addVariables)(colourStyles, STYLESHEET); } /***/ }), /***/ "./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 */ generateStylesheet: () => (/* binding */ generateStylesheet), /* harmony export */ getRuleString: () => (/* binding */ getRuleString), /* harmony export */ getTargetWindow: () => (/* binding */ getTargetWindow), /* harmony export */ setRootId: () => (/* binding */ setRootId) /* harmony export */ }); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./consts */ "./ts/modal/consts.ts"); let targetWindow = window; while (targetWindow.frameElement) { targetWindow = window.parent; } function getTargetWindow() { return targetWindow; } let rootSelector = 'body'; function setRootId(id) { rootSelector = `#${id}`; } function generateStylesheet() { const wrapper = document.createElement('style'); getTargetWindow().document.head.appendChild(wrapper); return wrapper.sheet; } const STYLESHEET = generateStylesheet(); function isStyle(candidate) { return candidate.length > 0 && typeof candidate[0] === 'string'; } function getStyleString([property, value]) { return `${property}:${value};`; } function getRuleString(selectors, rules) { const styleString = isStyle(rules) ? getStyleString(rules) : rules.map(getStyleString).join(''); const selectorString = typeof selectors === 'string' ? selectors : selectors.join(','); return `${rootSelector} ${selectorString}{${styleString}}`; } function addRule(selectors, styles, stylesheet = STYLESHEET) { stylesheet.insertRule(getRuleString(selectors, styles)); } function addVariables(rules, stylesheet = STYLESHEET) { const styleString = rules.map(getStyleString).join(''); stylesheet.insertRule(`:root {${styleString}}`); } function generate() { addRule(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_BACKGROUND_ID}`, [ ['position', 'fixed'], ['left', '0'], ['top', '0'], ['width', '100%'], ['height', '100%'], ['background-color', '#0003'], ]); addRule(`#${_consts__WEBPACK_IMPORTED_MODULE_0__.MODAL_ID}`, [ ['position', 'relative'], ['margin', '12vh auto'], ['padding', '0'], ['width', '80%'], ['font-family', 'Tahoma, Geneva, sans-serif'], ['outline', 'var(--borderModal) solid 2px'], ['box-shadow', '1px 1px 10px 4px #00000015, 0 0 30px 10px #00000065'], ]); 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_trees__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.ts"); let _isActive = false; let keyHeld = false; function isActive() { return _isActive; } function doAction(doActivate = !_isActive) { (0,_modal_body_trees__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 targetWindow = (0,_modal_css__WEBPACK_IMPORTED_MODULE_5__.getTargetWindow)(); targetWindow.addEventListener('keydown', (event) => { if (event.key === 'Control') { keyHeld = true; doAction(true); } }); targetWindow.addEventListener('keyup', (event) => { if (event.key === 'Control') { keyHeld = false; doAction(false); } }); targetWindow.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_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/modal/css */ "./ts/modal/css.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_css__WEBPACK_IMPORTED_MODULE_2__.getTargetWindow)().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_trees_data__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/trees/data */ "./ts/modal/body/trees/data/index.ts"); /* harmony import */ var _modal_body_trees_style__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/modal/body/trees/style */ "./ts/modal/body/trees/style/index.ts"); /* harmony import */ var _nodes_actions_focus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _nodes_actions_edit__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @nodes/actions/edit */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/index.ts"); /* harmony import */ var _nodes_actions_highlight__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @nodes/actions/highlight */ "./ts/modal/body/trees/nodes/actions/highlight/index.ts"); /* harmony import */ var _modal_body_trees__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/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_trees__WEBPACK_IMPORTED_MODULE_10__.TREE_CONTAINER.scroll(0, 0); callback === null || callback === void 0 ? void 0 : callback({ tree: (0,_modal_body_trees_data__WEBPACK_IMPORTED_MODULE_4__.getRoot)().getJSON(), styles: (0,_modal_body_trees_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"); function addColourRule(actionId, colour) { (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${actionId}.${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS} > svg`, [ ['stroke', `var(--headBase)`], ['fill', `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'], ]); (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`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}.${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS} > 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`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:not(:first-child).${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS}`, ], ['border-color', 'var(--headBase)']); (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)([ `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:focus:not(.${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS}) > svg`, `.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS}:hover:not(.${_consts__WEBPACK_IMPORTED_MODULE_1__.BUTTON_ACTIVE_CLASS}) > svg`, ], ['stroke', `var(--headBase)`]); (0,_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`.${_consts__WEBPACK_IMPORTED_MODULE_0__.BUTTON_CLASS} > svg`, [ ['width', '1.81em'], ['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', '6'); edgeTop.setAttribute('d', 'M -55, 0' + 'Q 0,80 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', '7'); const line = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'line'); line.setAttribute('stroke-linecap', 'round'); line.setAttribute('stroke-width', '7'); line.setAttribute('x1', '-26'); line.setAttribute('x2', '26'); line.setAttribute('y1', '0'); line.setAttribute('y2', '0'); line.setAttribute('transform', 'rotate(45 0 0)'); const g = document.createElementNS(_modal_consts__WEBPACK_IMPORTED_MODULE_2__.SVG_NAMESPACE, 'g'); g.append(edgeTop, edgeBottom, circle, line); 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_trees_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/trees/consts */ "./ts/modal/body/trees/consts.ts"); /* harmony import */ var _nodes_actions_buttons_disable_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nodes/actions/buttons/disable/consts */ "./ts/modal/body/trees/nodes/actions/buttons/disable/consts.ts"); function generate() { (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${_modal_body_trees_consts__WEBPACK_IMPORTED_MODULE_3__.TREE_CONTAINER_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_trees__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); let isActive = false; function doAction() { isActive = !isActive; (0,_modal_body_trees__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,_alternate__WEBPACK_IMPORTED_MODULE_4__["default"])(), (0,_hide__WEBPACK_IMPORTED_MODULE_3__["default"])(), (0,_labels__WEBPACK_IMPORTED_MODULE_1__["default"])(), (0,_style__WEBPACK_IMPORTED_MODULE_2__["default"])(), (0,_close__WEBPACK_IMPORTED_MODULE_0__["default"])(background)); 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_trees_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/modal/body/trees/consts */ "./ts/modal/body/trees/consts.ts"); /* harmony import */ var _nodes_consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @nodes/consts */ "./ts/modal/body/trees/nodes/consts.ts"); function generate() { (0,_modal_css__WEBPACK_IMPORTED_MODULE_2__.addRule)(`#${_modal_body_trees_consts__WEBPACK_IMPORTED_MODULE_3__.TREE_CONTAINER_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_trees__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); let isActive = false; function doAction() { isActive = !isActive; (0,_modal_body_trees__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_trees__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/modal/body/trees */ "./ts/modal/body/trees/index.ts"); /* harmony import */ var _nodes_actions_focus__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @nodes/actions/focus */ "./ts/modal/body/trees/nodes/actions/focus/index.ts"); /* harmony import */ var _nodes_actions_edit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @nodes/actions/edit */ "./ts/modal/body/trees/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/trees/nodes/actions/buttons/move/index.ts"); let isActive = false; function doAction() { isActive = !isActive; (0,_modal_body_trees__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', 'var(--headBase)'], ['color', 'var(--headContrast)'], ['border-bottom', '2px solid var(--borderModal)'], ['font-size', '1.6em'], ['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 20px'], ]); } /***/ }), /***/ "./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"); 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)); foreground.append((0,_body__WEBPACK_IMPORTED_MODULE_3__["default"])(config)); } /***/ }), /***/ "./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 */ }); 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 getPredicateResponse(response) { return __awaiter(this, void 0, void 0, function* () { try { return yield response; } catch ({ message }) { throw message; } }); } function getPredicatePromise(_response) { return __awaiter(this, void 0, void 0, function* () { const response = yield getPredicateResponse(_response); if (typeof response === 'string') { throw response; } else if (response) { return; } throw null; }); } /***/ }) /******/ }); /************************************************************************/ /******/ // 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 _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./ts/library/index.ts"); /* harmony import */ var _modal_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modal/css */ "./ts/modal/css.ts"); /* harmony import */ var _modal_body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modal/body */ "./ts/modal/body/index.ts"); const VERSION = 0; const KEY_VERSION = 'TREE_FRAME_VERSION'; const KEY_STYLES = 'TREE_FRAME_USER_STYLES'; const STYLE_OUTER = { position: 'fixed', height: '100vh', width: '100vw', }; const getStrippedForest = (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 = getStrippedForest(child.children); } stripped.push(data); } return stripped; }; const getError = (reason, error) => { const message = `[${TITLE}]${reason.includes('\n') ? '\n\n' : ' '}${reason}`; if (error) { error.message = message; return error; } return new Error(message); }; /** * A node's value. * @typedef {boolean | number | string} NodeValue */ /** * A child node. * @typedef {object} ChildNode * @property {string} [label] The node's purpose. * @property {boolean | number | string} [value] The node's data. * @property {Array<NodeValue> | function(NodeValue): boolean | string} [predicate] A data validator. * @property {"color" | "date" | "datetime-local" | "email" | "month" | "password" | "search" | "tel" | "text" | "time" | "url" | "week"} [input] The desired input type. */ /** * A parent node. * @typedef {object} ParentNode * @property {Array<ChildNode | (ChildNode & ParentNode)>} children The node's children. * @property {ChildNode | (ChildNode & ParentNode)} [seed] - A node that may be added to children. * @property {function(Array<ChildNode>): boolean | string} [childPredicate] A child validator. * @property {function(Array<ChildNode>): boolean | string} [descendantPredicate] A descendant validator. * @property {number} [poolId] Children may be moved between nodes with poolId values that match their parent's. */ /** * A style to pass to the config-editor iFrame. * @typedef {object} InnerStyle * @property {number} [fontSize] The base font size for the whole frame. * @property {string} [borderTooltip] The colour of tooltip borders. * @property {string} [borderModal] The colour of the modal's border. * @property {string} [headBase] The base colour of the modal's header. * @property {'Black / White' | 'Invert'} [headContrast] The method of generating a contrast colour for the modal's header. * @property {string} [headButtonExit] The colour of the modal header's exit button. * @property {string} [headButtonLabel] The colour of the modal header's exit button. * @property {string} [headButtonStyle] The colour of the modal header's style button. * @property {string} [headButtonHide] The colour of the modal header's node-hider button. * @property {string} [headButtonAlt] The colour of the modal header's alt button. * @property {Array<string>} [nodeBase] Base colours for nodes, depending on their depth. * @property {'Black / White' | 'Invert'} [nodeContrast] The method of generating a contrast colour for nodes. * @property {string} [nodeButtonCreate] The colour of nodes' add-child buttons. * @property {string} [nodeButtonDuplicate] The colour of nodes' duplicate buttons. * @property {string} [nodeButtonMove] The colour of nodes' move buttons. * @property {string} [nodeButtonDisable] The colour of nodes' toggle-active buttons. * @property {string} [nodeButtonDelete] The colour of nodes' delete buttons. * @property {string} [validBackground] The colour used to show that a node's value is valid. * @property {string} [invalidBackground] The colour used to show that a node's value is invalid. */ class $Config { /** * @param {string} KEY_TREE The identifier used to store and retrieve the user's config. * @param {ParentNode} TREE_DEFAULT The tree to use as a starting point for the user's config. * @param {function(Array<ChildNode | (ChildNode & ParentNode)>): *} _getConfig Takes a root node's children and returns the data structure expected by your script. * @param {string} TITLE The heading to use in the config-editor iFrame. * @param {InnerStyle} [STYLE_INNER] A custom style to use as the default * @param {object} [_STYLE_OUTER] CSS to assign to the frame element. e.g. {zIndex: 9999}. */ constructor(KEY_TREE, TREE_DEFAULT, _getConfig, TITLE, STYLE_INNER = {}, _STYLE_OUTER = {}) { // PRIVATE FUNCTIONS const getConfig = ({children}) => _getConfig(getStrippedForest(children)); // CORE PERMISSION CHECKS 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 STATE let isOpen = false; const styleOuter = { ...STYLE_OUTER, ..._STYLE_OUTER, }; // PUBLIC FUNCTIONS const setConfig = (tree) => { const config = getConfig(tree); this.get = () => config; }; this.ready = async () => { // Setup root element const target = (() => { const target = document.createElement('div'); for (const [property, value] of Object.entries(styleOuter)) { target.style[property] = value; } target.style.display = 'none'; (0,_modal_css__WEBPACK_IMPORTED_MODULE_1__.getTargetWindow)().document.body.appendChild(target); return target; })(); // Retrieve data & await frame load 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 (version !== -1) { return; } 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); })(); // 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 a frame is open.'); } if (typeof GM.deleteValue !== 'function') { throw getError('Missing GM.deleteValue permission.'); } try { setConfig(TREE_DEFAULT); } 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_0__.edit)(); GM.setValue(KEY_TREE, tree); GM.setValue(KEY_STYLES, styles); GM.setValue(KEY_VERSION, VERSION); setConfig(tree); await open(false); }; // Pass data try { const response = await (0,_index__WEBPACK_IMPORTED_MODULE_0__.init)({ userStyles, defaultTree: TREE_DEFAULT, title: TITLE, defaultStyle: STYLE_INNER, ...(userTree ? {userTree} : {}), }, target, KEY_TREE); 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, ); } setConfig(response.tree); } catch (error) { delete this.reset; await disconnect(); 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"]; /******/ })() ;
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址