cloudcmd 19.23.0 → 19.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ChangeLog +5 -0
- package/HELP.md +2 -1
- package/README.md +1 -1
- package/dist/cloudcmd.common.js +3 -3
- package/dist/cloudcmd.common.js.map +1 -1
- package/dist/cloudcmd.js.map +1 -1
- package/dist/modules/cloud.js.map +1 -1
- package/dist/modules/command-line.js.map +1 -1
- package/dist/modules/config-putout.js.map +1 -1
- package/dist/modules/config.js.map +1 -1
- package/dist/modules/contact.js.map +1 -1
- package/dist/modules/edit-file-vim.js.map +1 -1
- package/dist/modules/edit-file.js.map +1 -1
- package/dist/modules/edit-names-vim.js.map +1 -1
- package/dist/modules/edit-names.js.map +1 -1
- package/dist/modules/edit.js.map +1 -1
- package/dist/modules/help.js.map +1 -1
- package/dist/modules/konsole.js.map +1 -1
- package/dist/modules/markdown.js.map +1 -1
- package/dist/modules/menu.js.map +1 -1
- package/dist/modules/operation.js.map +1 -1
- package/dist/modules/polyfill.js.map +1 -1
- package/dist/modules/putout.js +3 -3
- package/dist/modules/putout.js.map +1 -1
- package/dist/modules/terminal-run.js.map +1 -1
- package/dist/modules/terminal.js.map +1 -1
- package/dist/modules/upload.js.map +1 -1
- package/dist/modules/user-menu.js.map +1 -1
- package/dist/modules/view.js.map +1 -1
- package/dist/sw.js +1 -1
- package/dist/sw.js.map +1 -1
- package/dist-dev/sw.js +1 -1
- package/package.json +1 -1
- package/server/cloudcmd.js +1 -1
package/dist/modules/menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"./modules/menu.js","sources":["file://cloudcmd/webpack/runtime/create_fake_namespace_object","file://cloudcmd/webpack/runtime/on_chunk_loaded","file://cloudcmd/webpack/runtime/jsonp_chunk_loading","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/@cloudcmd/create-element/lib/create-element.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/currify/lib/currify.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/emitify/lib/emitify.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/execon/lib/exec.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/itype/lib/itype.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jonny/lib/jonny.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/wraptile/lib/wraptile.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jonny/node_modules/try-catch/lib/try-catch.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/es6-promisify/dist/promisify.mjs","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/fullstore/lib/fullstore.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/rendy/lib/rendy.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/build-items.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/element-funcs.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/supermenu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/template.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/try-to-catch/lib/try-to-catch.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/smalltalk/lib/smalltalk.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/dialog.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/images.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/io/send-request.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/io/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/load.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/rest.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-all-submenu-items/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-wrongly-selected/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/hide-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/set-position/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/build-menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/select/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-all/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/vim.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/add-listeners.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/emit.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/render.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jessy/lib/jessy.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/menu/get-menu-path.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/click/click.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/escape/escape.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/down/down.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/up.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/run/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/right.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/enter/enter.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/left.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/shift-g/shift-g.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/gg/gg.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/j/j.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/k/k.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/item-click/item-click.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/position/calculate.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/context-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/set-position/set-position.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/hydrate-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/bundle.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/mouse-leave/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/hooks.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/convert-menu-to-state/convert-menu-to-state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/cursor.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/move-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/add-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/apply-visibility/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/reset-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/put-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/enter-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/leave-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transformer.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/next.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/prev.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/show.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/hide.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/first.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/last.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/right.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/left.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/reset.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/getter/get-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/getter/getter.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/render/rules/build-menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/emit.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/vim.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/listen.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/compiler/compiler.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/dom.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/bundle.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/create-bundle-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/hydrate-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/render/render.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/engine.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/cloudmenu.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/pick-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/common/cloudfunc.js","file://cloudcmd//Users/coderaiser/cloudcmd/common/entity.js","file://cloudcmd/webpack/runtime/define_property_getters","file://cloudcmd/webpack/runtime/global","file://cloudcmd/webpack/runtime/has_own_property","file://cloudcmd/webpack/runtime/make_namespace_object","file://cloudcmd/webpack/runtime/runtime_id"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif (chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor (var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--)\n\t\t\tdeferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (\n\t\t\t\t(priority & (1 === 0) || notFulfilled >= priority) &&\n\t\t\t\tObject.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))\n\t\t\t) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif (priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif (fulfilled) {\n\t\t\tdeferred.splice(i--, 1);\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};\n","__webpack_require__.b = document.baseURI || self.location.href;\n\n // object to store loaded and loading chunks\n // undefined = chunk not loaded, null = chunk preloaded/prefetched\n // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n var jsonpInstalledChunks = {854: 0,};\n __webpack_require__.O.j = (chunkId) => (jsonpInstalledChunks[chunkId] === 0);\n// install a JSONP callback for chunk loading\nvar __rspack_jsonp = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif (chunkIds.some((id) => (jsonpInstalledChunks[id] !== 0))) {\n\t\tfor (moduleId in moreModules) {\n\t\t\tif (__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif (runtime) var result = runtime(__webpack_require__);\n\t}\n\tif (parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor (; i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif (\n\t\t\t__webpack_require__.o(jsonpInstalledChunks, chunkId) &&\n\t\t\tjsonpInstalledChunks[chunkId]\n\t\t) {\n\t\t\tjsonpInstalledChunks[chunkId][0]();\n\t\t}\n\t\tjsonpInstalledChunks[chunkId] = 0;\n\t}\n\t\n\treturn __webpack_require__.O(result);\n\t\n};\n\nvar jsonpChunkLoadingGlobal = globalThis[\"rspackChunkcloudcmd\"] ||= [];\njsonpChunkLoadingGlobal.forEach(__rspack_jsonp.bind(null, 0));\njsonpChunkLoadingGlobal.push = __rspack_jsonp.bind(null, jsonpChunkLoadingGlobal.push.bind(jsonpChunkLoadingGlobal));\n","'use strict';\n\nconst currify = require('currify');\nconst query = (a) => document.querySelector(`[data-name=\"${a}\"]`);\n\nconst setAttribute = currify((el, obj, name) => el.setAttribute(name, obj[name]));\nconst set = currify((el, obj, name) => el[name] = obj[name]);\nconst not = currify((f, a) => !f(a));\nconst isCamelCase = (a) => a != a.toLowerCase();\n\nmodule.exports = (name, options = {}) => {\n const {\n dataName,\n notAppend,\n parent = document.body,\n uniq = true,\n ...restOptions\n } = options;\n \n const elFound = isElementPresent(dataName);\n \n if (uniq && elFound)\n return elFound;\n \n const el = document.createElement(name);\n \n if (dataName)\n el.dataset.name = dataName;\n \n Object.keys(restOptions)\n .filter(isCamelCase)\n .map(set(el, options));\n \n Object.keys(restOptions)\n .filter(not(isCamelCase))\n .map(setAttribute(el, options));\n \n if (!notAppend)\n parent.appendChild(el);\n \n return el;\n};\n\nmodule.exports.isElementPresent = isElementPresent;\n\nfunction isElementPresent(dataName) {\n if (!dataName)\n return;\n \n return query(dataName);\n}\n\n","'use strict';\n\nconst f = (fn) => [\n /*eslint no-unused-vars: 0*/\n function (a) {return fn(...arguments);},\n function (a, b) {return fn(...arguments);},\n function (a, b, c) {return fn(...arguments);},\n function (a, b, c, d) {return fn(...arguments);},\n function (a, b, c, d, e) {return fn(...arguments);},\n];\n\nconst currify = (fn, ...args) => {\n check(fn);\n \n if (args.length >= fn.length)\n return fn(...args);\n \n const again = (...args2) => {\n return currify(fn, ...[...args, ...args2]);\n };\n \n const count = fn.length - args.length - 1;\n const func = f(again)[count];\n \n return func || again;\n};\n\nmodule.exports = currify;\n\nfunction check(fn) {\n if (typeof fn !== 'function')\n throw Error('fn should be function!');\n}\n\n","'use strict';\n\nmodule.exports = Emitify;\n\nfunction Emitify() {\n if (!(this instanceof Emitify))\n return new Emitify();\n \n this._all = {};\n}\n\nEmitify.prototype.on = function(event, callback) {\n const funcs = this._all[event];\n \n check(event, callback);\n \n if (funcs)\n funcs.push(callback);\n else\n this._all[event] = [callback];\n \n return this;\n};\n\nEmitify.prototype.addListener =\nEmitify.prototype.on;\n\nEmitify.prototype.once = function(event, callback) {\n const self = this;\n \n check(event, callback);\n \n this.on(event, function fn(...args) {\n callback(...args);\n self.off(event, fn);\n });\n \n return this;\n};\n\nEmitify.prototype.off = function(event, callback) {\n const events = this._all[event] || [];\n let index = events.indexOf(callback);\n \n check(event, callback);\n \n while (~index) {\n events.splice(index, 1);\n index = events.indexOf(callback);\n }\n \n return this;\n};\n\nEmitify.prototype.removeListener =\nEmitify.prototype.off;\n\nEmitify.prototype.emit = function(event, ...args) {\n const funcs = this._all[event];\n \n checkEvent(event);\n \n if (!funcs && event === 'error')\n throw args[0];\n \n if (!funcs)\n return this;\n \n for (const fn of funcs) {\n fn(...args);\n }\n \n return this;\n};\n\nEmitify.prototype.removeAllListeners = function(event) {\n checkEvent(event);\n \n this._all[event] = [];\n \n return this;\n};\n\nfunction checkEvent(event) {\n if (typeof event !== 'string')\n throw Error('event should be string!');\n}\n\nfunction checkFn(callback) {\n if (typeof callback !== 'function')\n throw Error('callback should be function!');\n}\n\nfunction check(event, callback) {\n checkEvent(event);\n checkFn(callback);\n}\n\n","(function(global) {\n 'use strict';\n \n if (typeof module === 'object' && module.exports)\n module.exports = new ExecProto();\n else\n global.exec = new ExecProto();\n \n function ExecProto() {\n var slice = Array.prototype.slice,\n /**\n * function do save exec of function\n * @param callback\n * @param arg1\n * ...\n * @param argN\n */\n exec = function(callback) {\n var ret,\n isFunc = typeof callback === 'function',\n args = slice.call(arguments, 1);\n \n if (isFunc)\n ret = callback.apply(null, args);\n \n return ret;\n };\n \n /*\n * return function that calls callback with arguments\n */\n exec.with = function(callback) {\n var slice = Array.prototype.slice,\n args = slice.call(arguments, 1);\n \n return function() {\n var array = slice.call(arguments), \n all = args.concat(array);\n \n return callback.apply(null, all);\n };\n };\n \n /**\n * return save exec function\n * @param callback\n */\n exec.ret = function() {\n var result,\n args = slice.call(arguments);\n \n args.unshift(exec);\n result = exec.with.apply(null, args);\n \n return result;\n };\n \n /**\n * function do conditional save exec of function\n * @param condition\n * @param callback\n * @param func\n */\n exec.if = function(condition, callback, func) {\n var ret;\n \n if (condition)\n exec(callback);\n else\n exec(func, callback);\n \n return ret;\n };\n \n /**\n * exec function if it exist in object\n * \n * @param obj\n * @param name\n * @param arg\n */\n exec.ifExist = function(obj, name, arg) {\n var ret,\n func = obj && obj[name];\n \n if (func)\n func = func.apply(obj, arg);\n \n return ret;\n };\n \n exec.parallel = function(funcs, callback) {\n var ERROR = 'could not be empty!',\n keys = [],\n callbackWas = false,\n arr = [],\n obj = {},\n count = 0,\n countFuncs = 0,\n type = getType(funcs);\n \n if (!funcs)\n throw Error('funcs ' + ERROR);\n \n if (!callback)\n throw Error('callback ' + ERROR);\n \n switch(type) {\n case 'array':\n countFuncs = funcs.length;\n \n funcs.forEach(function(func, num) {\n exec(func, function() {\n checkFunc(num, arguments);\n });\n });\n break;\n \n case 'object':\n keys = Object.keys(funcs);\n countFuncs = keys.length;\n \n keys.forEach(function(name) {\n var func = funcs[name];\n \n exec(func, function() {\n checkFunc(name, arguments, obj);\n });\n });\n break;\n }\n \n function checkFunc(num, data) {\n var args = slice.call(data, 1),\n isLast = false,\n error = data[0],\n length = args.length;\n \n ++count;\n \n isLast = count === countFuncs;\n \n if (!error)\n if (length >= 2)\n arr[num] = args;\n else\n arr[num] = args[0];\n \n if (!callbackWas && (error || isLast)) {\n callbackWas = true;\n \n if (type === 'array')\n callback.apply(null, [error].concat(arr));\n else\n callback(error, arr);\n }\n }\n };\n \n /**\n * load functions thrue callbacks one-by-one\n * @param funcs {Array} - array of functions\n */\n exec.series = function(funcs, callback) {\n var fn,\n i = funcs.length,\n check = function(error) {\n var done;\n \n --i;\n \n if (!i || error) {\n done = true;\n exec(callback, error);\n }\n \n return done;\n };\n \n if (!Array.isArray(funcs))\n throw Error('funcs should be array!');\n \n fn = funcs.shift();\n \n exec(fn, function(error) {\n if (!check(error))\n exec.series(funcs, callback);\n });\n };\n \n exec.each = function(array, iterator, callback) {\n var listeners = array.map(function(item) {\n return iterator.bind(null, item);\n });\n \n if (!listeners.length)\n callback();\n else\n exec.parallel(listeners, callback);\n };\n \n exec.eachSeries = function(array, iterator, callback) {\n var listeners = array.map(function(item) {\n return iterator.bind(null, item);\n });\n \n if (typeof callback !== 'function')\n throw Error('callback should be function');\n \n if (!listeners.length)\n callback();\n else\n exec.series(listeners, callback);\n };\n \n /**\n * function execute param function in\n * try...catch block\n * \n * @param callback\n */\n exec.try = function(callback) {\n var ret;\n try {\n ret = callback();\n } catch(error) {\n ret = error;\n }\n \n return ret;\n };\n \n function getType(variable) {\n var regExp = new RegExp('\\\\s([a-zA-Z]+)'),\n str = {}.toString.call(variable),\n typeBig = str.match(regExp)[1],\n result = typeBig.toLowerCase();\n \n return result;\n } \n \n return exec;\n }\n})(this);\n","'use strict';\n\nmodule.exports = type;\n\nfor (const name of ['null', 'arrayBuffer', 'file', 'array', 'object']) {\n type[name] = typeOf.bind(null, name);\n}\n\nfor (const name of ['string', 'undefined', 'boolean', 'number', 'function']) {\n type[name] = typeOfSimple.bind(null, name);\n}\n\n/**\n * get type of variable\n *\n * @param variable\n */\nfunction type(variable) {\n const regExp = /\\s([a-zA-Z]+)/;\n const str = {}.toString.call(variable);\n const typeBig = str.match(regExp)[1];\n const result = typeBig.toLowerCase();\n \n return result;\n}\n\n/**\n * functions check is variable is type of name\n *\n * @param variable\n */\nfunction typeOf(name, variable) {\n return type(variable) === name;\n}\n\nfunction typeOfSimple(name, variable) {\n return typeof variable === name;\n}\n\n","'use strict';\n\nconst tryCatch = require('try-catch');\n\nconst {\n parse,\n stringify,\n} = JSON;\n\nmodule.exports.parse = (...args) => {\n const [, data] = tryCatch(parse, ...args);\n \n return data;\n};\n\nmodule.exports.stringify = (...args) => {\n const [, data] = tryCatch(stringify, ...args);\n \n return data;\n};\n\n","'use strict';\n\nconst wrap = (fn) => (...a) => (...b) => fn(...a, ...b);\n\nmodule.exports = (fn, ...a) => {\n check(fn);\n \n if (a.length)\n return wrap(fn)(...a);\n \n return wrap(fn);\n};\n\nfunction check(fn) {\n if (typeof fn !== 'function')\n throw Error('fn should be a function!');\n}\n\n","'use strict';\n\nmodule.exports = (fn, ...args) => {\n try {\n return [null, fn(...args)];\n } catch(e) {\n return [e];\n }\n};\n\n","var customArgumentsToken=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\";export function promisify(a){if(\"function\"!=typeof a)throw new TypeError(\"Argument to promisify must be a function\");var b=a[customArgumentsToken],c=promisify.Promise||Promise;if(\"function\"!=typeof c)throw new Error(\"No Promise implementation found; do you need a polyfill?\");return function(){for(var d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return new c((c,d)=>{e.push(function(a){if(a)return d(a);for(var e=arguments.length,f=Array(1<e?e-1:0),g=1;g<e;g++)f[g-1]=arguments[g];if(1===f.length||!b)return c(f[0]);var h={};f.forEach((a,c)=>{var d=b[c];d&&(h[d]=a)}),c(h)}),a.apply(this,e)})}}promisify.argumentNames=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\",promisify.Promise=void 0;\n","export function fullstore(value) {\n const data = {\n value,\n };\n \n return (...args) => {\n const [value] = args;\n \n if (!args.length)\n return data.value;\n \n data.value = value;\n \n return value;\n };\n}\n","const isString = (a) => typeof a === 'string';\nconst constant = (a) => () => a;\nconst {keys} = Object;\n\nexport const rendy = (template, values, modifiers = null) => {\n check(template, values);\n \n let result = template;\n const names = !modifiers ? keys(values) : template.match(/{{(.*?)}}/g);\n \n for (const key of names) {\n const [parsedKey, value] = parseValue(key, values, modifiers);\n const str = constant(value);\n \n while (result.includes(parsedKey))\n result = result.replace(parsedKey, str);\n }\n \n if (result.includes('{{'))\n result = result.replace(/{{.*?}}/g, '');\n \n return result;\n};\n\nfunction check(template, values) {\n if (!isString(template))\n throw Error('template should be a string!');\n \n if (typeof values !== 'object')\n throw Error('values should be an object!');\n}\n\nfunction parseValue(key, values, modifiers) {\n if (!modifiers)\n return [\n `{{ ${key} }}`,\n values[key],\n ];\n \n const preparedKey = key\n .replaceAll('{{', '')\n .replaceAll('}}', '')\n .replaceAll(' ', '');\n \n const value = values[preparedKey] || '';\n \n if (!preparedKey.includes('|'))\n return [key, value];\n \n const [name, modifierName] = preparedKey.split('|');\n const fn = modifiers[modifierName];\n const currentValue = values[name];\n \n if (!fn)\n return [key, currentValue];\n \n return [key, fn(currentValue)];\n}\n","import {rendy} from 'rendy';\nimport * as TEMPLATE from './template.js';\n\nconst isObj = (a) => typeof a === 'object';\nconst DATA_MENU = 'data-menu=\"js-submenu\"';\n\nconst {entries} = Object;\n\nexport default function buildItems(menuData, menuFuncs, options, path = '') {\n let items = '';\n \n if (path)\n path += '.';\n \n for (const [name, data] of entries(menuData)) {\n let nameIcon;\n let subitems = '';\n let className = '';\n let attribute = '';\n \n const pathName = path + name;\n \n if (!isObj(data)) {\n menuFuncs[pathName] = data;\n } else {\n subitems = rendy(TEMPLATE.MAIN, {\n items: buildItems(data, menuFuncs, options, pathName),\n });\n \n className = ' menu-submenu';\n attribute = ` ${DATA_MENU}`;\n }\n \n if (options.icon) {\n nameIcon = name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n \n className += ` icon icon-${nameIcon}`;\n }\n \n items += rendy(TEMPLATE.ITEM, {\n name,\n subitems,\n className,\n attribute,\n path: pathName,\n });\n }\n \n return items;\n}\n","export default class ElementFuncsProto {\n getItem(element) {\n if (this.isName(element))\n return element.parentElement;\n \n return element;\n }\n \n getName(element) {\n if (!element)\n return null;\n \n if (this.isName(element))\n return element;\n \n return element.querySelector('[data-menu-path]');\n }\n \n isName(element) {\n if (!element)\n return false;\n \n return element.hasAttribute('data-menu-path');\n }\n \n isItem(element) {\n return this.checkElementsName(element, 'js-menu-item');\n }\n \n isMenu(element) {\n return this.checkElementsName(element, 'js-menu');\n }\n \n checkElementsName(element, nameElement, attribute) {\n if (!attribute)\n attribute = 'data-name';\n \n if (element) {\n const name = element.getAttribute(attribute);\n \n if (name === nameElement)\n return true;\n }\n \n return false;\n }\n \n isSubMenu(element) {\n const attribute = 'data-menu';\n const value = 'js-submenu';\n const item = this.getItem(element);\n \n return this.checkElementsName(item, value, attribute);\n }\n}\n","import '../css/supermenu.css';\nimport createElement from '@cloudcmd/create-element';\nimport buildItems from './build-items.js';\nimport ElementFuncsProto from './element-funcs.js';\n\nconst isNumber = (a) => typeof a === 'number';\nconst exec = (f, ...a) => f?.(...a);\n\nexport function supermenu(element, options, menuData) {\n if (!(this instanceof supermenu))\n return new supermenu(element, options, menuData);\n \n const ElementFuncs = new ElementFuncsProto();\n \n let Options = {};\n let Element;\n let ElementHeight;\n let ElementWidth;\n let ElementEvent;\n \n if (menuData) {\n Element = element;\n ElementEvent = Element;\n Options = options;\n } else if (options) {\n Element = element;\n ElementEvent = Element;\n menuData = options;\n } else {\n Element = document.body;\n ElementEvent = window;\n menuData = element;\n }\n \n const MenuFuncs = {};\n const ElementMenu = createMenu(menuData);\n \n ElementEvent.addEventListener('click', onClick);\n \n function createMenu(menuData) {\n const items = buildItems(menuData, MenuFuncs, Options);\n \n const menu = createElement('ul', {\n dataName: 'js-menu',\n className: 'menu menu-hidden',\n innerHTML: items,\n parent: Element,\n uniq: false,\n });\n \n return menu;\n }\n \n this.show = showMenuElement;\n this.hide = hideMenuElement;\n \n this.addContextMenuListener = () => {\n ElementEvent.addEventListener('contextmenu', onContextMenu);\n };\n \n this.removeContextMenuListener = () => {\n ElementEvent.addEventListener('contextmenu', onContextMenu);\n };\n \n this.remove = removeElement;\n \n function removeElement() {\n ElementEvent.removeEventListener('click', onClick);\n ElementEvent.removeEventListener('contextmenu', onContextMenu);\n \n Element.removeChild(ElementMenu);\n }\n \n function checkElement(target, position) {\n let element = ElementFuncs.getItem(target);\n let isName = ElementFuncs.isName(element);\n let isItem = ElementFuncs.isItem(element);\n let isSub = ElementFuncs.isSubMenu(element);\n \n if (!isName || !isItem) {\n element = document.elementFromPoint(position.x, position.y);\n isSub = ElementFuncs.isSubMenu(element);\n isName = ElementFuncs.isName(element);\n isItem = ElementFuncs.isItem(element);\n }\n \n return {\n name: isName,\n item: isItem,\n sub: isSub,\n };\n }\n \n function onClick(event, checkResult) {\n event.stopPropagation();\n \n const {\n afterClick,\n beforeClick,\n beforeHide,\n afterHide,\n name,\n } = Options;\n \n const element = event.target;\n \n const is = checkResult || checkElement(element, {\n x: event.clientX,\n y: event.clientY,\n });\n \n const notClick = exec(beforeClick, name);\n \n if (is.sub)\n return event.preventDefault();\n \n exec(beforeHide);\n hideMenuElement();\n exec(afterHide);\n \n if (!notClick && (is.name || is.item)) {\n const itemData = getMenuItemData(element);\n \n exec(itemData);\n exec(afterClick);\n }\n }\n \n function onContextMenu(event) {\n event.preventDefault();\n \n const element = event.target;\n const x = event.clientX;\n const y = event.clientY;\n \n const is = checkElement(element, {\n x,\n y,\n });\n \n if (is.name || is.item || is.sub)\n return onClick(event, is);\n \n hideMenuElement();\n showMenuElement(x, y);\n }\n \n function setMenuPosition(x, y) {\n const isNumberX = isNumber(x);\n const isNumberY = isNumber(y);\n const heightMenu = getMenuHeight();\n const widthMenu = getMenuWidth();\n const heightInner = globalThis.innerHeight;\n const widthInner = globalThis.innerWidth;\n \n if (widthInner < widthMenu + x) {\n x -= widthMenu;\n \n if (x < 0)\n x = 0;\n }\n \n if (heightInner < heightMenu + y) {\n y -= heightMenu;\n \n if (y < 0)\n y = 0;\n }\n \n if (isNumberX)\n ElementMenu.style.left = `${x}px`;\n \n if (isNumberY)\n ElementMenu.style.top = y - 14 + 'px';\n }\n \n function showMenuElement(x, y) {\n const {\n name,\n beforeShow,\n afterShow,\n } = Options;\n \n const params = {\n x,\n y,\n name,\n };\n \n const isShow = exec(beforeShow, params);\n \n if (isShow || isShow !== false) {\n ElementMenu.classList.remove('menu-hidden');\n setMenuPosition(params.x, params.y);\n exec(afterShow, params);\n }\n }\n \n function hideMenuElement() {\n const notHide = exec(Options.beforeClose);\n \n if (!notHide)\n ElementMenu.classList.add('menu-hidden');\n }\n \n function getMenuItemData(element) {\n const nameElement = ElementFuncs.getName(element);\n \n if (!nameElement)\n return null;\n \n const path = nameElement.getAttribute('data-menu-path');\n \n return MenuFuncs[path];\n }\n \n function getMenuHeight() {\n if (!ElementHeight) {\n const {height} = getComputedStyle(ElementMenu);\n \n ElementHeight = parseInt(height, 10);\n }\n \n return ElementHeight;\n }\n \n function getMenuWidth() {\n if (!ElementWidth) {\n const {width} = getComputedStyle(ElementMenu);\n \n ElementWidth = parseInt(width, 10);\n }\n \n return ElementWidth;\n }\n}\n","export const MAIN = '<ul data-name=\"js-menu\" class=\"menu menu-hidden\">{{ items }}</ul>';\nexport const ITEM = '<li data-name=\"js-menu-item\" class=\"menu-item{{ className }}\"{{ attribute }}>' +\n '<label data-menu-path=\"{{ path }}\">{{ name }}</label>' +\n '{{ subitems }}' +\n '</li>';\n","const isFn = (a) => typeof a === 'function';\n\nexport const tryToCatch = async (fn, ...args) => {\n check(fn);\n \n try {\n return [null, await fn(...args)];\n } catch(e) {\n return [e];\n }\n};\n\nfunction check(fn) {\n if (!isFn(fn))\n throw Error('fn should be a function!');\n}\n","import '../css/smalltalk.css';\nimport currify from 'currify';\nimport createElement from '@cloudcmd/create-element';\nimport {fullstore} from 'fullstore';\n\nconst isBool = (a) => typeof a === 'boolean';\n\nconst keyDown = currify(keyDown_);\n\nconst BUTTON_OK = {\n ok: 'OK',\n};\n\nconst BUTTON_OK_CANCEL = {\n ok: 'OK',\n cancel: 'Cancel',\n};\n\nconst zIndex = fullstore(100);\n\nexport const alert = (title, msg, options) => {\n const buttons = getButtons(options) || BUTTON_OK;\n return showDialog(title, msg, '', buttons, options);\n};\n\nexport const prompt = (title, msg, value = '', options) => {\n const type = getType(options);\n const val = String(value).replace(/\"/g, '"');\n \n const valueStr = `<input type=\"${type}\" value=\"${val}\" data-name=\"js-input\">`;\n const buttons = getButtons(options) || BUTTON_OK_CANCEL;\n \n return showDialog(title, msg, valueStr, buttons, options);\n};\n\nexport const confirm = (title, msg, options) => {\n const buttons = getButtons(options) || BUTTON_OK_CANCEL;\n \n return showDialog(title, msg, '', buttons, options);\n};\n\nexport const progress = (title, message, options) => {\n const valueStr = `\n <progress value=\"0\" data-name=\"js-progress\" class=\"progress\" max=\"100\"></progress>\n <span data-name=\"js-counter\">0%</span>\n `;\n \n const buttons = {\n cancel: 'Abort',\n };\n \n const promise = showDialog(title, message, valueStr, buttons, options);\n const {ok, dialog} = promise;\n const resolve = ok();\n \n for (const el of find(dialog, ['cancel'])) {\n el.focus();\n }\n \n Object.assign(promise, {\n setProgress(count) {\n const [elProgress] = find(dialog, ['progress']);\n const [elCounter] = find(dialog, ['counter']);\n \n elProgress.value = count;\n elCounter.textContent = `${count}%`;\n \n if (count === 100) {\n remove(dialog);\n resolve();\n }\n },\n \n remove() {\n remove(dialog);\n },\n });\n \n return promise;\n};\n\nfunction getButtons(options = {}) {\n const {buttons} = options;\n \n if (!buttons)\n return null;\n \n return buttons;\n}\n\nfunction getType(options = {}) {\n const {type} = options;\n \n if (type === 'password')\n return 'password';\n \n return 'text';\n}\n\nfunction getTemplate(title, msg, value, buttons) {\n const encodedMsg = msg.replace(/\\n/g, '<br>');\n \n return `<div class=\"page\">\n <div data-name=\"js-close\" class=\"close-button\"></div>\n <header>${title}</header>\n <div class=\"content-area\">${encodedMsg}${value}</div>\n <div class=\"action-area\">\n <div class=\"button-strip\">\n ${parseButtons(buttons)}\n </div>\n </div>\n </div>`;\n}\n\nfunction parseButtons(buttons) {\n const names = Object.keys(buttons);\n const parse = currify((buttons, name, i) => `<button\n tabindex=${i}\n data-name=\"js-${name.toLowerCase()}\">\n ${buttons[name]}\n </button>`);\n \n return names\n .map(parse(buttons))\n .join('');\n}\n\nfunction showDialog(title, msg, value, buttons, options) {\n const ok = fullstore();\n const cancel = fullstore();\n \n const closeButtons = [\n 'cancel',\n 'close',\n 'ok',\n ];\n \n const promise = new Promise((resolve, reject) => {\n const noCancel = options && isBool(options.cancel) && !options.cancel;\n const empty = () => {};\n const rejectError = () => reject(Error());\n \n ok(resolve);\n cancel(noCancel ? empty : rejectError);\n });\n \n const innerHTML = getTemplate(title, msg, value, buttons);\n \n const dialog = createElement('div', {\n innerHTML,\n className: 'smalltalk',\n style: `z-index: ${zIndex(zIndex() + 1)}`,\n });\n \n for (const el of find(dialog, ['ok', 'input']))\n el.focus();\n \n for (const el of find(dialog, ['input'])) {\n el.setSelectionRange(0, value.length);\n }\n \n addListenerAll('click', dialog, closeButtons, (event) => {\n closeDialog(event.target, dialog, ok(), cancel());\n });\n \n for (const event of ['click', 'contextmenu'])\n dialog.addEventListener(event, (e) => {\n e.stopPropagation();\n \n for (const el of find(dialog, ['ok', 'input']))\n el.focus();\n });\n \n dialog.addEventListener('keydown', keyDown(dialog, ok(), cancel()));\n \n return Object.assign(promise, {\n dialog,\n ok,\n });\n}\n\nfunction keyDown_(dialog, ok, cancel, event) {\n const KEY = {\n ENTER: 13,\n ESC: 27,\n TAB: 9,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n };\n \n const {keyCode} = event;\n const el = event.target;\n \n const namesAll = [\n 'ok',\n 'cancel',\n 'input',\n ];\n \n const names = find(dialog, namesAll).map(getDataName);\n \n switch(keyCode) {\n case KEY.ENTER:\n closeDialog(el, dialog, ok, cancel);\n event.preventDefault();\n break;\n \n case KEY.ESC:\n remove(dialog);\n cancel();\n break;\n \n case KEY.TAB:\n if (event.shiftKey)\n tab(dialog, names);\n \n tab(dialog, names);\n event.preventDefault();\n break;\n \n default:\n [\n 'left',\n 'right',\n 'up',\n 'down',\n ]\n .filter((name) => keyCode === KEY[name.toUpperCase()])\n .forEach(() => {\n changeButtonFocus(dialog, names);\n });\n \n break;\n }\n \n event.stopPropagation();\n}\n\nfunction getDataName(el) {\n return el\n .getAttribute('data-name')\n .replace('js-', '');\n}\n\nconst getName = (activeName) => {\n if (activeName === 'cancel')\n return 'ok';\n \n return 'cancel';\n};\n\nfunction changeButtonFocus(dialog, names) {\n const active = document.activeElement;\n const activeName = getDataName(active);\n const isButton = /ok|cancel/.test(activeName);\n const count = names.length - 1;\n \n if (activeName === 'input' || !count || !isButton)\n return;\n \n const name = getName(activeName);\n \n for (const el of find(dialog, [name])) {\n el.focus();\n }\n}\n\nconst getIndex = (count, index) => {\n if (index === count)\n return 0;\n \n return index + 1;\n};\n\nfunction tab(dialog, names) {\n const active = document.activeElement;\n const activeName = getDataName(active);\n const count = names.length - 1;\n \n const activeIndex = names.indexOf(activeName);\n const index = getIndex(count, activeIndex);\n \n const name = names[index];\n \n for (const el of find(dialog, [name]))\n el.focus();\n}\n\nfunction closeDialog(el, dialog, ok, cancel) {\n const name = el\n .getAttribute('data-name')\n .replace('js-', '');\n \n if (/close|cancel/.test(name)) {\n cancel();\n remove(dialog);\n \n return;\n }\n \n let value = null;\n \n for (const el of find(dialog, ['input'])) {\n ({value} = el);\n }\n \n ok(value);\n remove(dialog);\n}\n\nconst query = currify((element, name) => element.querySelector(`[data-name=\"js-${name}\"]`));\n\nfunction find(element, names) {\n const elements = names\n .map(query(element))\n .filter(Boolean);\n \n return elements;\n}\n\nfunction addListenerAll(event, parent, elements, fn) {\n for (const el of find(parent, elements)) {\n el.addEventListener(event, fn);\n }\n}\n\nfunction remove(dialog) {\n const {parentElement} = dialog;\n \n if (parentElement)\n parentElement.removeChild(dialog);\n}\n","import {tryToCatch} from 'try-to-catch';\nimport * as smalltalk from 'smalltalk';\n\nconst title = 'Cloud Commander';\n\nexport const alert = (...a) => smalltalk.alert(title, ...a, {\n cancel: false,\n});\n\nexport const prompt = (...a) => tryToCatch(smalltalk.prompt, title, ...a);\nexport const confirm = (...a) => tryToCatch(smalltalk.confirm, title, ...a);\nexport const progress = (...a) => smalltalk.progress(title, ...a);\n\nalert.noFiles = () => {\n return smalltalk.alert(title, 'No files selected!', {\n cancel: false,\n });\n};\n","/* global DOM */\nimport createElement from '@cloudcmd/create-element';\n\nconst LOADING = 'loading';\nconst HIDDEN = 'hidden';\nconst ERROR = 'error';\n\nconst getLoadingType = () => isSVG() ? '-svg' : '-gif';\n\nexport const get = getElement;\n\n/**\n * check SVG SMIL animation support\n */\nfunction isSVG() {\n const createNS = document.createElementNS;\n const SVG_URL = 'http://www.w3.org/2000/svg';\n \n if (!createNS)\n return false;\n \n const create = createNS.bind(document);\n const svgNode = create(SVG_URL, 'animate');\n const name = svgNode.toString();\n \n return /SVGAnimate/.test(name);\n}\n\nfunction getElement() {\n return createElement('span', {\n id: 'js-status-image',\n className: 'icon',\n dataName: 'progress',\n notAppend: true,\n });\n}\n\n/* Функция создаёт картинку загрузки */\nexport const loading = () => {\n const element = getElement();\n const {classList} = element;\n const loadingImage = LOADING + getLoadingType();\n \n classList.add(LOADING, loadingImage);\n classList.remove(ERROR, HIDDEN);\n \n return element;\n};\n\n/* Функция создаёт картинку ошибки загрузки */\nexport const error = () => {\n const element = getElement();\n const {classList} = element;\n const loadingImage = LOADING + getLoadingType();\n \n classList.add(ERROR);\n classList.remove(HIDDEN, LOADING, loadingImage);\n \n return element;\n};\n\nshow.load = show;\nshow.error = (text) => {\n const image = Images.error();\n \n DOM.show(image);\n image.title = text;\n \n return image;\n};\n\n/**\n* Function shows loading spinner\n* position = {top: true};\n*/\nexport function show(position, panel) {\n const image = Images.loading();\n const parent = image.parentElement;\n const refreshButton = DOM.getRefreshButton(panel);\n \n let current;\n \n if (position === 'top') {\n current = refreshButton.parentElement;\n } else {\n current = DOM.getCurrentFile();\n \n if (current)\n current = DOM.getByDataName('js-name', current);\n else\n current = refreshButton.parentElement;\n }\n \n if (!parent || parent && parent !== current)\n current.appendChild(image);\n \n DOM.show(image);\n \n return image;\n}\n\n/**\n* hide load image\n*/\nexport function hide() {\n const element = Images.get();\n \n DOM.hide(element);\n \n return Images;\n}\n\nexport const setProgress = (value, title) => {\n const DATA = 'data-progress';\n const element = Images.get();\n \n if (!element)\n return Images;\n \n element.setAttribute(DATA, `${value}%`);\n \n if (title)\n element.title = title;\n \n return Images;\n};\n\nexport const clearProgress = () => {\n const DATA = 'data-progress';\n const element = Images.get();\n \n if (!element)\n return Images;\n \n element.setAttribute(DATA, '');\n element.title = '';\n \n return Images;\n};\n\nconst Images = {\n clearProgress,\n setProgress,\n show,\n hide,\n get,\n error,\n loading,\n};\n","/* global CloudCmd */\nimport {promisify} from 'es6-promisify';\nimport * as Images from '#dom/images';\nimport * as load from '#dom/load';\n\nexport const sendRequest = promisify((params, callback) => {\n const p = params;\n const {prefixURL} = CloudCmd;\n \n p.url = prefixURL + p.url;\n p.url = encodeURI(p.url);\n \n p.url = replaceHash(p.url);\n \n load.ajax({\n method: p.method,\n url: p.url,\n data: p.data,\n dataType: p.dataType,\n error: (jqXHR) => {\n const response = jqXHR.responseText;\n \n const {statusText, status} = jqXHR;\n \n const text = status === 404 ? response : statusText;\n \n callback(Error(text));\n },\n success: (data) => {\n Images.hide();\n \n if (!p.notLog)\n CloudCmd.log(data);\n \n callback(null, data);\n },\n });\n});\n\nexport const _replaceHash = replaceHash;\n\nfunction replaceHash(url) {\n /*\n * if we send ajax request -\n * no need in hash so we escape #\n */\n return url.replace(/#/g, '%23');\n}\n","import {FS} from '#common/cloudfunc';\nimport {sendRequest as _sendRequest} from './send-request.js';\n\nconst {assign} = Object;\n\nconst imgPosition = {\n top: true,\n};\n\nexport const remove = async (url, data, overrides = {}) => {\n const {\n sendRequest = _sendRequest,\n } = overrides;\n \n const request = {\n method: 'DELETE',\n url: FS + url,\n imgPosition: {\n top: Boolean(data),\n },\n };\n \n if (data)\n assign(request, {\n data,\n url: `${request.url}?files`,\n });\n \n return await sendRequest(request);\n};\n\nexport const patch = async (url, data) => {\n return await _sendRequest({\n method: 'PATCH',\n url: FS + url,\n data,\n imgPosition,\n });\n};\n\nexport const write = async (url, data) => {\n return await _sendRequest({\n method: 'PUT',\n url: FS + url,\n data,\n imgPosition,\n });\n};\n\nexport const createDirectory = async (url, overrides = {}) => {\n const {\n sendRequest = _sendRequest,\n } = overrides;\n \n return await sendRequest({\n method: 'PUT',\n url: `${FS}${url}?dir`,\n imgPosition,\n });\n};\n\nexport const read = async (url, dataType = 'text') => {\n const notLog = !url.includes('?');\n \n return await _sendRequest({\n method: 'GET',\n url: FS + url,\n notLog,\n dataType,\n });\n};\n\nexport const copy = async (from, to, names) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/copy',\n data: {\n from,\n to,\n names,\n },\n imgPosition,\n });\n};\n\nexport const pack = async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/pack',\n data,\n });\n};\n\nexport const extract = async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/extract',\n data,\n });\n};\n\nexport const move = async (from, to, names) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/move',\n data: {\n from,\n to,\n names,\n },\n imgPosition,\n });\n};\n\nexport const rename = async (from, to) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/rename',\n data: {\n from,\n to,\n },\n imgPosition,\n });\n};\n\nexport const Config = {\n read: async () => {\n return await _sendRequest({\n method: 'GET',\n url: '/config',\n imgPosition,\n notLog: true,\n });\n },\n \n write: async (data) => {\n return await _sendRequest({\n method: 'PATCH',\n url: '/config',\n data,\n imgPosition,\n });\n },\n};\n\nexport const Markdown = {\n read: async (url) => {\n return await _sendRequest({\n method: 'GET',\n url: `/markdown${url}`,\n imgPosition,\n notLog: true,\n });\n },\n \n render: async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/markdown',\n data,\n imgPosition,\n notLog: true,\n });\n },\n};\n","import itype from 'itype';\nimport jonny from 'jonny';\nimport Emitify from 'emitify';\nimport exec from 'execon';\nimport * as Images from '#dom/images';\n\n/**\n * Function gets id by src\n * @param src\n *\n * Example: http://domain.com/1.js -> 1_js\n */\nexport function getIdBySrc(src) {\n const isStr = itype.string(src);\n \n if (!isStr)\n return;\n \n if (src.includes(':'))\n src += '-join';\n \n const num = src.lastIndexOf('/') + 1;\n const sub = src.substr(src, num);\n \n const id = src\n .replace(sub, '')\n .replace(/\\./g, '-');\n \n return id;\n}\n\n/**\n * load file countent via ajax\n *\n * @param params\n */\nexport const ajax = (params) => {\n const p = params;\n const isObject = itype.object(p.data);\n const isArray = itype.array(p.data);\n const isArrayBuf = itype(p.data) === 'arraybuffer';\n const type = p.type || p.method || 'GET';\n \n const {headers = {}} = p;\n \n const xhr = new XMLHttpRequest();\n \n xhr.open(type, p.url, true);\n \n for (const name of Object.keys(headers)) {\n const value = headers[name];\n xhr.setRequestHeader(name, value);\n }\n \n if (p.responseType)\n xhr.responseType = p.responseType;\n \n let data;\n \n if (!isArrayBuf && isObject || isArray)\n data = jonny.stringify(p.data);\n else\n ({data} = p);\n \n xhr.onreadystatechange = (event) => {\n const xhr = event.target;\n const OK = 200;\n \n if (xhr.readyState !== xhr.DONE)\n return;\n \n Images.clearProgress();\n \n const TYPE_JSON = 'application/json';\n const type = xhr.getResponseHeader('content-type');\n \n if (xhr.status !== OK)\n return exec(p.error, xhr);\n \n const notText = p.dataType !== 'text';\n const isContain = type.includes(TYPE_JSON);\n \n let data = xhr.response;\n \n if (type && isContain && notText)\n data = jonny.parse(xhr.response) || xhr.response;\n \n exec(p.success, data, xhr.statusText, xhr);\n };\n \n xhr.send(data);\n};\n\nexport const put = (url, body) => {\n const emitter = Emitify();\n const xhr = new XMLHttpRequest();\n \n url = encodeURI(url).replace(/#/g, '#');\n \n xhr.open('put', url, true);\n \n xhr.upload.onprogress = (event) => {\n if (!event.lengthComputable)\n return;\n \n const percent = event.loaded / event.total * 100;\n const count = Math.round(percent);\n \n emitter.emit('progress', count);\n };\n \n xhr.onreadystatechange = () => {\n const over = xhr.readyState === xhr.DONE;\n const OK = 200;\n \n if (!over)\n return;\n \n if (xhr.status === OK) {\n emitter.emit('progress', 100);\n return emitter.emit('end');\n }\n \n const error = Error(xhr.responseText);\n emitter.emit('error', error);\n };\n \n xhr.send(body);\n \n return emitter;\n};\n","import {tryToCatch} from 'try-to-catch';\nimport * as Dialog from '#dom/dialog';\nimport * as Images from '#dom/images';\nimport {encode} from '#common/entity';\nimport * as IO from './io/index.js';\n\nconst handleError = (promise) => async (...args) => {\n const [e, data] = await tryToCatch(promise, ...args);\n \n if (!e)\n return [e, data];\n \n const encoded = encode(e.message);\n \n Images.show.error(encoded);\n Dialog.alert(encoded);\n \n return [e, data];\n};\n\nexport const remove = handleError(IO.remove);\nexport const patch = handleError(IO.patch);\nexport const write = handleError(IO.write);\nexport const createDirectory = handleError(IO.createDirectory);\nexport const read = handleError(IO.read);\nexport const copy = handleError(IO.copy);\nexport const pack = handleError(IO.pack);\nexport const extract = handleError(IO.extract);\nexport const move = handleError(IO.move);\nexport const rename = handleError(IO.rename);\n\nexport const Config = {\n read: handleError(IO.Config.read),\n write: handleError(IO.Config.write),\n};\n\nexport const Markdown = {\n read: handleError(IO.Markdown.read),\n render: handleError(IO.Markdown.render),\n};\n","import exec from 'execon';\nimport wrap from 'wraptile';\nimport createElement from '@cloudcmd/create-element';\nimport {getIdBySrc} from '#dom/load';\nimport * as RESTful from '#dom/rest';\nimport {FS} from '#common/cloudfunc';\nimport {createCloudMenu} from './cloudmenu.js';\n\nconst {CloudCmd, DOM} = globalThis;\nconst {config, Key} = CloudCmd;\n\nconst {\n Buffer,\n Events,\n Dialog,\n Images,\n} = DOM;\n\nconst Info = DOM.CurrentInfo;\nconst alertNoFiles = Dialog.alert.noFiles;\nconst uploadTo = wrap(_uploadTo);\n\nlet MenuShowedName;\nlet MenuContext;\nlet MenuContextFile;\n\nexport const ENABLED = false;\n\nCloudCmd.Menu = {\n init,\n show,\n hide,\n};\n\nexport async function init() {\n const {isAuth, menuDataFile} = getFileMenuData();\n \n const fm = DOM.getFM();\n const menuData = getMenuData(isAuth);\n \n const options = getOptions({\n type: 'context',\n });\n \n const optionsFile = getOptions({\n type: 'file',\n });\n \n const {name} = fm.dataset;\n \n MenuContext = await createCloudMenu(name, options, menuData);\n MenuContextFile = await createCloudMenu(name, optionsFile, menuDataFile);\n \n MenuContext.addContextMenuListener();\n MenuContextFile.addContextMenuListener();\n \n Events.addKey(listener);\n}\n\nexport function hide() {\n MenuContext.hide();\n MenuContextFile.hide();\n}\n\nexport function show(position) {\n const {x, y} = getPosition(position);\n \n MenuContext.show(x, y);\n MenuContextFile.show(x, y);\n \n Images.hide();\n}\n\nfunction getPosition(position) {\n if (position)\n return {\n x: position.x,\n y: position.y,\n };\n \n return getCurrentPosition();\n}\n\nfunction getMenuNameByEl(el) {\n if (!el)\n return 'context';\n \n const name = DOM.getCurrentName(el);\n \n if (name === '..')\n return 'context';\n \n return 'contextFile';\n}\n\nfunction getOptions({type}) {\n let name;\n let func;\n \n if (type === 'context') {\n name = 'context';\n func = Key.unsetBind;\n } else if (type === 'file') {\n name = 'contextFile';\n }\n \n const options = {\n icon: true,\n infiniteScroll: false,\n beforeClose: Key.setBind,\n beforeHide: Key.setBind,\n beforeShow: exec.with(beforeShow, func),\n beforeClick,\n name,\n };\n \n return options;\n}\n\nfunction getMenuData(isAuth) {\n const menu = {\n 'Paste': Buffer.paste,\n 'New': {\n File: DOM.promptNewFile,\n Directory: DOM.promptNewDir,\n },\n 'Upload': () => {\n CloudCmd.Upload.show();\n },\n 'Upload From Cloud': uploadFromCloud,\n 'Toggle File Selection': DOM.toggleSelectedFile,\n '(Un)Select All': DOM.toggleAllSelectedFiles,\n };\n \n if (isAuth)\n menu['Log Out'] = CloudCmd.logOut;\n \n return menu;\n}\n\nfunction getFileMenuData() {\n const isAuth = CloudCmd.config('auth');\n \n const menuBottom = getMenuData(isAuth);\n const menuTop = {\n 'View': () => {\n CloudCmd.View.show();\n },\n 'Edit': () => {\n const name = config('vim') ? 'EditFileVim' : 'EditFile';\n CloudCmd[name].show();\n },\n 'Rename': () => {\n setTimeout(DOM.renameCurrent, 100);\n },\n 'Delete': () => {\n CloudCmd.Operation.show('delete');\n },\n 'Pack': () => {\n CloudCmd.Operation.show('pack');\n },\n 'Extract': () => {\n CloudCmd.Operation.show('extract');\n },\n 'Download': preDownload,\n 'Upload To Cloud': uploadTo('Cloud'),\n 'Cut': () => {\n isCurrent(Buffer.cut, alertNoFiles);\n },\n 'Copy': () => {\n isCurrent(Buffer.copy, alertNoFiles);\n },\n };\n \n const menuDataFile = {\n ...menuTop,\n ...menuBottom,\n };\n \n return {\n isAuth,\n menuDataFile,\n };\n}\n\nfunction isCurrent(yesFn, noFn) {\n if (Info.name !== '..')\n return yesFn();\n \n noFn();\n}\n\nfunction isPath(x, y) {\n const {panel} = Info;\n const isEmptyRoot = !panel;\n \n if (isEmptyRoot)\n return false;\n \n const el = document.elementFromPoint(x, y);\n const elements = panel.querySelectorAll('[data-name=\"js-path\"] *');\n \n return !~[].indexOf.call(elements, el);\n}\n\nfunction beforeShow(callback, params) {\n Key.unsetBind();\n \n const {\n name,\n position = {\n x: params.x,\n y: params.y,\n },\n } = params;\n \n const {x, y} = position;\n \n const el = DOM.getCurrentByPosition({\n x,\n y,\n });\n \n const menuName = getMenuNameByEl(el);\n \n let isShow = menuName !== 'contextFile';\n \n if (params.name === 'contextFile')\n isShow = !isShow;\n \n if (isShow)\n MenuShowedName = name;\n \n exec(callback);\n \n if (isShow)\n isShow = isPath(x, y);\n \n return isShow;\n}\n\nconst beforeClick = (name) => MenuShowedName !== name;\n\nasync function _uploadTo(nameModule) {\n const [error, data] = await Info.getData();\n \n if (error)\n return;\n \n const {name} = Info;\n \n CloudCmd.execFromModule(nameModule, 'uploadFile', name, data);\n CloudCmd.log(`Uploading to ${name}...`);\n}\n\nfunction uploadFromCloud() {\n Images.show.load('top');\n \n CloudCmd.execFromModule('Cloud', 'saveFile', async (currentName, data) => {\n const path = DOM.getCurrentDirPath() + currentName;\n const [e] = await RESTful.write(path, data);\n \n if (e)\n return;\n \n await CloudCmd.refresh({\n currentName,\n });\n });\n}\n\nfunction preDownload() {\n download(config('packer'));\n}\n\nfunction download(type) {\n const TIME = 30 * 1000;\n const {prefixURL} = CloudCmd;\n const PACK = '/pack';\n const date = Date.now();\n const files = DOM.getActiveFiles();\n \n if (!files.length)\n return alertNoFiles();\n \n for (const file of files) {\n const selected = DOM.isSelected(file);\n const isDir = DOM.isCurrentIsDir(file);\n const path = DOM.getCurrentPath(file);\n \n CloudCmd.log(`downloading file ${path}...`);\n \n /*\n * if we send ajax request -\n * no need in hash so we escape #\n * and all other characters, like \"%\"\n */\n const encodedPath = encodeURI(path).replace(/#/g, '#');\n const id = getIdBySrc(path);\n \n let src;\n \n if (isDir)\n src = prefixURL + PACK + encodedPath + DOM.getPackerExt(type);\n else\n src = prefixURL + FS + encodedPath + '?download';\n \n const element = createElement('iframe', {\n id: id + '-' + date,\n async: false,\n className: 'hidden',\n src,\n });\n \n const {body} = document;\n const removeChild = body.removeChild.bind(body, element);\n \n setTimeout(removeChild, TIME);\n \n if (selected)\n DOM.toggleSelectedFile(file);\n }\n}\n\nfunction getCurrentPosition() {\n const current = Info.element;\n const rect = current.getBoundingClientRect();\n \n const position = {\n x: Math.round(rect.left + rect.width / 3),\n y: Math.round(rect.top),\n };\n \n return position;\n}\n\nfunction listener(event) {\n const {F9, ESC} = Key;\n \n const key = event.keyCode;\n const isBind = Key.isBind();\n \n if (key === ESC) {\n Key.setBind();\n return hide();\n }\n \n if (isBind && key === F9) {\n const position = getCurrentPosition();\n MenuContext.show(position.x, position.y);\n \n event.preventDefault();\n }\n}\n","import {operator, types} from 'putout';\n\nconst {isJSXElement} = types;\nconst {\n hasTagName,\n removeClassName,\n} = operator;\n\nexport const report = () => `Unselect all submenu items`;\n\nexport const fix = (path) => {\n removeClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {showSubmenu} = options;\n \n if (showSubmenu)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath.parentPath.parentPath))\n return;\n \n push(path);\n },\n});\n","import {operator} from 'putout';\n\nconst {\n getAttributeValue,\n hasTagName,\n removeClassName,\n containsClassName,\n} = operator;\n\nexport const report = () => `Unselect wrongly selected`;\n\nexport const fix = (path) => {\n removeClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {index = 1, command} = options;\n \n if (command === 'hide')\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (hasTagName(path.parentPath.parentPath, 'li'))\n return;\n \n if (!containsClassName(path, 'menu-item-selected'))\n return;\n \n const dataMenuIndex = Number(getAttributeValue(path, 'data-menu-index'));\n \n if (index === dataMenuIndex)\n return;\n \n push(path);\n },\n});\n","import {operator} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst CLASS = 'menu-submenu-show';\n\nexport const report = () => `Hide submenu`;\n\nexport const fix = (path) => {\n removeClassName(path, CLASS);\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {name = 'menu', showSubmenu} = options;\n const {parentPath} = path;\n \n if (showSubmenu)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!hasDataName(parentPath, name))\n return false;\n \n if (containsClassName(path, CLASS))\n push(path);\n },\n});\n","import {operator, types} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n addClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst {isJSXElement} = types;\n\nexport const report = ({insideSubmenu}) => `${insideSubmenu ? 'Show' : 'Hide'} submenu`;\n\nexport const fix = ({path, prev, next, insideSubmenu}) => {\n unselect(prev);\n unselect(next);\n \n if (!insideSubmenu) {\n removeClassName(path, 'menu-item-selected');\n return;\n }\n \n addClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath))\n return;\n \n const {\n insideSubmenu = true,\n submenuIndex = 1,\n } = options;\n \n const parentMenu = path.parentPath.parentPath.parentPath;\n \n if (!isJSXElement(parentMenu))\n return;\n \n if (!isParentSelected(path.parentPath.parentPath))\n return;\n \n if (!hasDataName(path.parentPath, 'menu'))\n return;\n \n const children = path.parentPath\n .get('children')\n .filter(isJSXElement);\n \n const prev = children[submenuIndex - 1];\n const current = children[submenuIndex];\n const next = children[submenuIndex + 1];\n \n if (!current)\n return;\n \n push({\n path: current,\n insideSubmenu,\n prev,\n next,\n });\n },\n});\n\nfunction isParentSelected(path) {\n return containsClassName(path, 'menu-item-selected');\n}\n\nfunction unselect(path) {\n if (!path)\n return;\n \n removeClassName(path, 'menu-item-selected');\n}\n","import {types, operator} from 'putout';\n\nconst {\n setAttributeValue,\n getAttributeValue,\n getAttributePath,\n hasDataName,\n} = operator;\n\nconst {\n stringLiteral,\n jsxIdentifier,\n jsxAttribute,\n} = types;\n\nexport const report = () => `Set position`;\n\nexport const fix = ({path, attr, x, y}) => {\n const style = `left: ${x}px; top: ${y}px;`;\n \n if (attr) {\n setAttributeValue(path, 'style', style);\n return;\n }\n \n const {attributes} = path.node.openingElement;\n const attribute = jsxAttribute(jsxIdentifier('style'), stringLiteral(style));\n \n attributes.push(attribute);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n position = {},\n } = options;\n \n const {\n x = 0,\n y = 20,\n } = position;\n \n if (!hasDataName(path, name))\n return;\n \n const styleAttributeValue = getAttributeValue(path, 'style');\n \n if (!styleAttributeValue) {\n push({\n path,\n x,\n y,\n });\n return;\n }\n \n const [x1, y1] = parsePosition(styleAttributeValue);\n \n if (x === x1 && y === y1)\n return;\n \n const styleAttributePath = getAttributePath(path, 'style');\n \n push({\n path,\n attr: styleAttributePath,\n x,\n y,\n });\n },\n});\n\nfunction parsePosition(str) {\n const [x, y] = str\n .split(/;|left|\\s|:|top|px/)\n .filter(Boolean);\n \n return [\n Number(x),\n Number(y),\n ];\n}\n","import {\n template,\n operator,\n types,\n} from 'putout';\n\nconst {jsxText} = types;\n\nconst {\n setAttributeValue,\n hasDataName,\n addClassName,\n} = operator;\n\nconst {entries} = Object;\n\nconst isObject = (a) => a && typeof a === 'object';\n\nexport const report = () => `Build menu`;\n\nconst createMenuItem = template(`\n <li data-name=\"menu-item\" data-menu-index=\"\" className=\"menu-item\" data-menu-path=\"\">\n <label data-menu-path=\"\">NAME</label>\n </li>\n`);\n\nconst createMenu = template(`\n <ul data-name=\"menu\" className=\"menu menu-hidden\"></ul>\n`);\n\nconst DefaultMenu = {\n hello: null,\n world: null,\n};\n\nconst NEWLINE = jsxText('\\n');\nconst INDENT = jsxText(' ');\n\nexport const fix = ({path, menu, icon, name = ''}) => {\n const {children} = path.node;\n let i = 0;\n \n for (const [key, value] of entries(menu)) {\n const menuItem = createMenuItem();\n \n menuItem.children[1].children[0].value = key;\n \n if (icon)\n setIcon(key, menuItem);\n \n setDataMenuIndex(i++, menuItem);\n setDataMenuPath(key, name, menuItem);\n \n setDataMenuPath(key, name, menuItem.children[1]);\n children.push(INDENT, menuItem);\n \n if (isObject(value)) {\n setSubmenu(menuItem);\n menuItem.children.push(createMenu());\n \n const elementPath = path.get('children').at(-1)\n .get('children.3');\n \n fix({\n path: elementPath,\n icon,\n menu: value,\n name: key,\n });\n }\n }\n \n children.push(NEWLINE);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n menu = DefaultMenu,\n icon = false,\n } = options;\n \n if (!hasDataName(path, name))\n return;\n \n if (path.node.children.length)\n return;\n \n push({\n path,\n menu,\n icon,\n });\n },\n});\n\nfunction setSubmenu(menuItem) {\n addClassName(menuItem, 'menu-submenu');\n}\n\nfunction setDataMenuPath(key, name, menuItem) {\n const dataMenuPath = name ? `${name}.${key}` : key;\n setAttributeValue(menuItem, 'data-menu-path', dataMenuPath);\n}\n\nfunction setDataMenuIndex(index, menuItem) {\n setAttributeValue(menuItem, 'data-menu-index', index);\n}\n\nfunction setIcon(name, menuItem) {\n addClassName(menuItem, `icon ${getIconName(name)}`);\n}\n\nfunction getIconName(name) {\n return 'icon-' + name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n}\n","import {operator} from 'putout';\n\nconst {\n containsClassName,\n hasDataName,\n addClassName,\n removeClassName,\n} = operator;\n\nexport const report = ({command}) => {\n const [first, ...rest] = command;\n \n return `${first.toUpperCase()}${rest.join('')} menu`;\n};\n\nexport const fix = ({path, command}) => {\n if (command === 'show') {\n removeClassName(path, 'menu-hidden');\n return;\n }\n \n addClassName(path, 'menu-hidden');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {name, command} = options;\n \n if (!hasDataName(path, name))\n return;\n \n const shown = !containsClassName(path, 'menu-hidden');\n \n if (command === 'show' && !shown || command === 'hide' && shown)\n push({\n command,\n path,\n });\n },\n});\n","import {operator, types} from 'putout';\n\nconst {isJSXElement} = types;\nconst {\n hasTagName,\n addClassName,\n hasDataName,\n removeClassName,\n hasAttributeValue,\n containsClassName,\n getAttributeValue,\n} = operator;\n\nconst SELECTED = 'menu-item-selected';\nconst SHOW = 'menu-submenu-show';\n\nexport const report = () => `Select item`;\n\nexport const fix = ({path, prev, next, showSubmenu}) => {\n addClassName(path, SELECTED);\n addShowSubmenu(path, {\n showSubmenu,\n });\n unselect(prev);\n unselect(next);\n \n removeShowSubmenu(next);\n removeShowSubmenu(prev);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n index = 1,\n showSubmenu,\n insideSubmenu,\n } = options;\n \n if (index < 0)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n const {parentPath} = path;\n \n if (!isJSXElement(parentPath))\n return;\n \n if (!hasDataName(parentPath, name))\n return;\n \n if (!insideSubmenu && !hasAttributeValue(path, 'data-menu-index', String(index)))\n return;\n \n if (!insideSubmenu && containsClassName(path, 'menu-item-selected'))\n return;\n \n const children = parentPath.get('children').filter(isJSXElement);\n \n const prev = children[index - 1];\n const current = children[index];\n const next = children[index + 1];\n \n if (!current)\n return;\n \n push({\n path: current,\n prev,\n next,\n showSubmenu,\n });\n },\n});\n\nfunction unselect(path) {\n removeClassName(path, SELECTED);\n}\n\nfunction addShowSubmenu(path, {showSubmenu}) {\n const menuPath = getAttributeValue(path, 'data-menu-path');\n \n if (menuPath.includes('.'))\n return;\n \n // only submenu items can show a submenu\n if (!containsClassName(path, 'menu-submenu'))\n return;\n \n if (showSubmenu)\n return addClassName(path, SHOW);\n}\n\nfunction removeShowSubmenu(path) {\n removeClassName(path, SHOW);\n}\n","import {operator, types} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst {isJSXElement} = types;\nconst SELECTED = 'menu-item-selected';\n\nexport const report = () => `Unselect all`;\n\nexport const fix = (path) => {\n removeClassName(path, SELECTED);\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {\n index,\n name = 'menu',\n command,\n } = options;\n \n if (command === 'hide')\n return;\n \n if (index !== -1)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath))\n return;\n \n if (!hasDataName(path.parentPath, name))\n return;\n \n const children = path.parentPath\n .get('children')\n .filter(isJSXElement);\n \n for (const child of children) {\n if (containsClassName(child, SELECTED))\n push(child);\n }\n },\n});\n","import * as unselectAllSubmenuItems from './unselect-all-submenu-items/index.js';\nimport * as unselectWronglySelected from './unselect-wrongly-selected/index.js';\nimport * as hideSubmenu from './hide-submenu/index.js';\nimport * as submenu from './submenu/index.js';\nimport * as setPosition from './set-position/index.js';\nimport * as buildMenu from './build-menu/index.js';\nimport * as menu from './menu/index.js';\nimport * as select from './select/index.js';\nimport * as unselectAll from './unselect-all/index.js';\n\nexport const rules = {\n 'menu': menu,\n 'build-menu': buildMenu,\n 'set-position': setPosition,\n 'select': select,\n 'unselect-all': unselectAll,\n 'submenu': submenu,\n 'hide-submenu': hideSubmenu,\n 'unselect-wrongly-selected': unselectWronglySelected,\n 'unselect-all-submenu-items': unselectAllSubmenuItems,\n};\n","import {fullstore} from 'fullstore';\n\nconst {assign} = Object;\nconst {stringify, parse} = JSON;\n\nconst wrap = (render, {prev, options, stateElement, readState, writeState}) => () => {\n const {textContent} = stateElement;\n \n if (stateElement.textContent === prev())\n return;\n \n const state = readState();\n prev(textContent);\n writeState(state);\n \n render({\n state,\n options,\n });\n};\n\nexport const createState = (state, {options, listener, stateName = 'aleman-state'}) => {\n const stateElement = document.querySelector(`[data-name=\"${stateName}\"]`);\n \n const prev = fullstore();\n const readState = createReadState(stateElement);\n const writeState = createWriteState(prev, stateElement);\n \n const fn = wrap(listener, {\n options,\n prev,\n stateElement,\n readState,\n writeState,\n });\n \n const observer = new MutationObserver(fn);\n const str = stringify(state, null, 4);\n \n // Do not pollute window.history\n // history[str] = true;\n stateElement.textContent = str;\n globalThis.alemanSync = fn;\n \n document.addEventListener('keydown', ({key}) => {\n if (key === '`')\n fn();\n });\n \n observer.observe(stateElement, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n \n return {\n readState,\n writeState,\n };\n};\n\nexport const createReadState = (stateElement) => () => {\n return parse(stateElement.textContent);\n};\n\nexport const createWriteState = (prev, stateElement) => (newState) => {\n const prevStateStr = stateElement.textContent;\n const prevState = parse(stateElement.textContent);\n \n assign(prevState, newState);\n const str = stringify(prevState, null, 4);\n \n if (str === prevStateStr)\n return;\n \n stateElement.textContent = str;\n setTimeout(() => {\n prev(str);\n });\n};\n","const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';\n\nexport const createVimParser = (buffer = []) => ({key}) => {\n if (/F\\d/.test(key)) {\n buffer = [];\n return [''];\n }\n \n if (key === '^')\n return ['^'];\n \n if (key === '$')\n return ['$'];\n \n if (!buffer.length && key === 'g') {\n buffer.push('g');\n return [''];\n }\n \n if (!buffer.length && /\\d/.test(key)) {\n buffer.push(Number(key));\n return [''];\n }\n \n if (!buffer.length && key === 'j')\n buffer.push(1);\n \n if (!buffer.length && key === 'k')\n buffer.push(1);\n \n const [count] = buffer;\n \n if (isNumber(count) && key === 'j') {\n buffer = [];\n return ['j', count];\n }\n \n if (isNumber(count) && key === 'k') {\n buffer = [];\n return ['k', count];\n }\n \n if (count === 'g' && key === 'g') {\n buffer = [];\n return ['gg'];\n }\n \n buffer = [];\n \n return [''];\n};\n","import {createVimParser} from './vim.js';\nimport {\n emitBefore,\n emitIf,\n emitRun,\n} from './emit.js';\n\nconst queryElement = ({name}) => {\n return document.querySelector(`[data-name=\"${name}\"]`);\n};\n\nconst maybeEvents = ({events}) => {\n if (events)\n return events;\n \n return ['keydown'];\n};\n\nexport const addListeners = ({namedAddons, options, readState, writeState}) => {\n for (const addon of namedAddons) {\n const element = queryElement(addon);\n const events = maybeEvents(addon);\n \n for (const event of events) {\n element.addEventListener(event, createListener({\n addon,\n options,\n readState,\n writeState,\n }));\n }\n }\n};\n\nconst hasName = ({name}) => name;\n\nexport const splitAddons = (addons) => {\n const globalAddons = [];\n const namedAddons = [];\n \n for (const addon of addons) {\n if (hasName(addon)) {\n namedAddons.push(addon);\n continue;\n }\n \n globalAddons.push(addon);\n }\n \n return {\n globalAddons,\n namedAddons,\n };\n};\n\nexport const addGlobalListeners = ({globalAddons, options, readState, writeState, document = globalThis.document}) => {\n for (const addon of globalAddons) {\n const events = maybeEvents(addon);\n \n for (const event of events) {\n document.addEventListener(event, createListener({\n addon,\n options,\n readState,\n writeState,\n }));\n }\n }\n};\n\nconst createListener = ({options, addon, readState, writeState, parseVim = createVimParser()}) => (event) => {\n const {\n preventDefault,\n stopPropagation,\n after,\n afterIf,\n } = addon;\n \n const [isEmitBefore, count] = emitBefore(addon, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return false;\n \n const state = readState();\n \n const is = emitIf(addon, {\n event,\n state,\n options,\n });\n \n if (!is)\n return;\n \n if (preventDefault)\n event.preventDefault();\n \n if (stopPropagation)\n event.stopPropagation();\n \n const newState = emitRun(addon, {\n count,\n event,\n state,\n options,\n });\n \n writeState(newState);\n \n const isAfterIf = !afterIf || afterIf({\n state: newState,\n options,\n });\n \n if (after && isAfterIf)\n requestAnimationFrame(() => {\n writeState(after({\n event,\n state: newState,\n options,\n }));\n });\n};\n","export const emit = (addon, {state, options, event, parseVim}) => {\n const [isEmitBefore, count] = emitBefore(addon, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return state;\n \n if (!emitIf(addon, {state, event, options}))\n return state;\n \n if (addon.events && !addon.events.includes(event.type))\n return state;\n \n return emitRun(addon, {\n event,\n state,\n options,\n count,\n });\n};\nexport const emitIf = (addon, {state, event, options}) => {\n if (!addon.filter)\n return true;\n \n return addon.filter({\n state,\n event,\n options,\n });\n};\n\nexport const emitRun = (addon, {count, state, event, options}) => {\n return addon.listener({\n count,\n event,\n state,\n options,\n });\n};\n\nexport const emitBefore = (addon, {event, parseVim}) => {\n const {keys, commands} = addon;\n \n if (keys && !keys.includes(event.key))\n return [false];\n \n const [command, count] = parseVim(event);\n \n if (commands && !commands.includes(command))\n return [false];\n \n return [true, count];\n};\n","import {\n parse,\n transform,\n print,\n findPlaces,\n} from 'putout';\nimport {branch, merge} from '@putout/processor-html';\n\nconst {entries} = Object;\n\nexport const SKIP = false;\nexport const TRANSFORM = true;\n\nexport const createRender = (html, {options, rules, type}) => {\n const {ast, source} = parseAccordingToType(html, type);\n \n return function render(state) {\n const currentRules = {};\n const plugins = entries(rules);\n \n for (const [name] of plugins) {\n currentRules[name] = ['on', {\n ...state,\n ...options,\n }];\n }\n \n const places = findPlaces(ast, {\n rules: currentRules,\n plugins,\n });\n \n if (!places.length)\n return [\n SKIP,\n source,\n places,\n ];\n \n transform(ast, {\n rules: currentRules,\n plugins,\n });\n \n const code = print(ast, {\n printer: ['putout', {\n format: {\n newline: '\\n',\n endOfFile: '',\n },\n }],\n });\n \n if (type === 'jsx')\n return [\n TRANSFORM,\n code,\n places,\n ];\n \n const prefix = '<template>';\n const suffix = '<\\\\template>\\n';\n \n const result = merge('', [code])\n .slice(prefix.length, -suffix.length)\n .trim();\n \n return [\n TRANSFORM,\n result,\n places,\n ];\n };\n};\n\nfunction parseAccordingToType(html, type) {\n if (type === 'jsx')\n return {\n ast: parse(html),\n source: html,\n };\n \n const {source} = branch(html)[0];\n const withDiv = `<template>${source}</template>`;\n \n const ast = parse(withDiv);\n \n return {\n ast,\n source,\n };\n}\n","const isString = (a) => typeof a === 'string';\nconst isUndefined = (a) => typeof a === 'undefined';\nconst isEmpty = (obj) => !Object.keys(obj).length;\n\nexport function jessy(selector, divider, value) {\n if (!value) {\n value = divider;\n divider = '.';\n }\n \n check(selector, value);\n \n if (!selector)\n return value;\n \n if (isEmpty(value))\n return undefined;\n \n const selects = selector\n .split(divider)\n .filter(Boolean);\n \n for (const [i, name] of selects.entries()) {\n const nestedName = selects\n .slice(i)\n .join(divider);\n \n if (!isUndefined(value[nestedName])) {\n value = value[nestedName];\n break;\n }\n \n if (!value[name]) {\n value = undefined;\n break;\n }\n \n value = value[name];\n }\n \n return value;\n}\n\nfunction check(selector, obj) {\n if (!isString(selector))\n throw Error('selector should be string!');\n \n if (typeof obj !== 'object')\n throw Error('obj should be object!');\n}\n","export function getMenuPath(event) {\n let menuItemElement = document.elementFromPoint(event.clientX, event.clientY);\n const {menuPath} = menuItemElement.dataset;\n \n if (!menuPath)\n menuItemElement = menuItemElement.querySelector('[data-menu-path]');\n \n if (!menuPath)\n return '';\n \n return menuItemElement.dataset.menuPath;\n}\n","import {jessy} from 'jessy';\nimport {getMenuPath as _getMenuPath} from '../menu/get-menu-path.js';\n\nconst isFn = (a) => typeof a === 'function';\n\nexport const events = ['click'];\nexport const preventDefault = true;\n\nexport const filter = ({event, state, options}) => {\n const {\n menu,\n getMenuPath = _getMenuPath,\n } = options;\n \n if (state.command === 'hide')\n return false;\n \n const menuPath = getMenuPath(event);\n \n if (!menuPath)\n return true;\n \n const fn = jessy(menuPath, menu);\n \n return isFn(fn);\n};\n\nexport const listener = ({options, state}) => {\n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n index: -1,\n showSubmenu: false,\n insideSubmenu: false,\n };\n};\n","export const keys = ['Escape'];\n\nexport const listener = ({state, options}) => {\n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n showSubmenu: false,\n index: -1,\n };\n};\n","const isObject = (a) => a && typeof a === 'object';\n\nexport function getSubmenu({index, options}) {\n const {menu} = options;\n const currentName = Object.keys(menu)[index];\n const submenu = menu[currentName];\n \n if (isObject(submenu))\n return submenu;\n \n return {};\n}\n","import {getSubmenu} from '../submenu/index.js';\n\nexport const keys = ['ArrowDown'];\nexport const preventDefault = true;\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = ({state, options}) => {\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const {menu, infiniteScroll} = options;\n const n = Object.keys(menu).length - 1;\n \n if (!insideSubmenu && (infiniteScroll && index === n || index < n))\n ++index;\n \n if (!insideSubmenu && infiniteScroll && index > n)\n index -= n + 1;\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length - 1;\n \n if (insideSubmenu)\n if (submenuIndex < submenuCount)\n ++submenuIndex;\n else if (infiniteScroll && submenuIndex === submenuCount)\n submenuIndex = 0;\n \n const showSubmenu = submenuCount > -1;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","import {getSubmenu} from './submenu/index.js';\n\nexport const keys = ['ArrowUp'];\n\nexport const preventDefault = true;\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = ({state, options}) => {\n const {menu, infiniteScroll} = options;\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const count = Object.keys(menu).length;\n \n if (insideSubmenu && submenuIndex > 0)\n --submenuIndex;\n \n if (infiniteScroll && !index)\n index = count - 1;\n else if (!insideSubmenu && index > 0)\n --index;\n \n if (index === -1)\n index = count - 1;\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length;\n const showSubmenu = submenuCount > 0;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","const isObject = (a) => a && typeof a === 'object';\nconst {values} = Object;\n\nexport const run = ({options, state}) => {\n const {index, submenuIndex} = state;\n const {menu} = options;\n \n const fn = values(menu)[index];\n \n if (isObject(fn) && submenuIndex === -1)\n return [false];\n \n if (isObject(fn))\n return [true, setTimeout(values(fn)[submenuIndex])];\n \n return [true, setTimeout(fn)];\n};\n","import {getSubmenu} from './submenu/index.js';\n\nexport const keys = [\n 'ArrowRight',\n 'l',\n];\nexport const preventDefault = true;\n\nexport const filter = ({state, options}) => {\n const {index} = state;\n const submenu = getSubmenu({\n index,\n options,\n });\n \n return Object.keys(submenu).length;\n};\n\nexport const listener = () => ({\n submenuIndex: 0,\n insideSubmenu: true,\n showSubmenu: true,\n});\n","import {run} from '../run/index.js';\nimport * as right from '../right.js';\n\nexport const keys = ['Enter'];\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const stopPropagation = true;\nexport const preventDefault = true;\n\nexport const listener = ({options, state}) => {\n const [result] = run({\n options,\n state,\n });\n \n if (!result)\n return right.listener({\n options,\n state,\n });\n \n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n index: -1,\n insideSubmenu: false,\n };\n};\n","export const keys = [\n 'ArrowLeft',\n 'h',\n];\nexport const preventDefault = true;\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = () => ({\n submenuIndex: -1,\n insideSubmenu: false,\n showSubmenu: false,\n});\n","import {getSubmenu} from '../submenu/index.js';\n\nexport const keys = [\n 'G',\n '$',\n];\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const preventDefault = true;\n\nexport const listener = ({state, options}) => {\n const {menu} = options;\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const menuValues = Object.values(menu);\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length;\n \n if (insideSubmenu)\n submenuIndex = submenuCount - 1;\n else\n index = menuValues.length - 1;\n \n const showSubmenu = submenuCount > 0;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","import * as up from '../up.js';\n\nexport const {filter} = up;\nexport const commands = [\n 'gg',\n '^',\n];\n\nexport function listener({state, options}) {\n const {\n insideSubmenu,\n index,\n submenuIndex,\n } = state;\n \n const newState = {\n ...state,\n index: insideSubmenu ? index : 1,\n submenuIndex: insideSubmenu ? 1 : submenuIndex,\n };\n \n return up.listener({\n state: newState,\n options,\n });\n}\n","import * as down from '../down/down.js';\nimport {getSubmenu} from '../submenu/index.js';\n\nexport const {filter} = down;\nexport const commands = ['j'];\n\nexport function listener({count, state, options}) {\n const {menu, infiniteScroll} = options;\n const {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const menuCount = Object.keys(menu).length;\n \n const submenuCount = Object.keys(getSubmenu({\n index,\n options,\n })).length;\n \n let newIndex = insideSubmenu ? index : index + count;\n let newSubmenuIndex = insideSubmenu ? submenuIndex + count : submenuIndex;\n \n if (newIndex > menuCount - 1)\n newIndex = infiniteScroll ? 0 : menuCount - 1;\n \n if (infiniteScroll && newSubmenuIndex === submenuCount)\n newSubmenuIndex = 0;\n else if (newSubmenuIndex > submenuCount - 1)\n newSubmenuIndex = submenuCount - 1;\n \n const showSubmenu = submenuCount > -1;\n \n return {\n index: newIndex,\n submenuIndex: newSubmenuIndex,\n showSubmenu,\n };\n}\n","import * as up from '../up.js';\n\nexport const {filter} = up;\nexport const commands = ['k'];\n\nexport function listener({count, state, options}) {\n const {\n insideSubmenu,\n index,\n submenuIndex,\n } = state;\n \n let newIndex = insideSubmenu ? index : index - count + 1;\n let newSubmenuIndex = insideSubmenu ? submenuIndex - count + 1 : submenuIndex;\n \n const {infiniteScroll} = options;\n \n if (newIndex <= 0)\n newIndex = infiniteScroll ? -1 : 0;\n \n if (newSubmenuIndex < -1)\n newSubmenuIndex = -1;\n \n const newState = {\n ...state,\n index: newIndex,\n submenuIndex: newSubmenuIndex,\n };\n \n return up.listener({\n state: newState,\n options,\n });\n}\n","import * as click from './click/click.js';\nimport * as escape from './escape/escape.js';\nimport * as down from './down/down.js';\nimport * as up from './up.js';\nimport * as enter from './enter/enter.js';\nimport * as left from './left.js';\nimport * as right from './right.js';\nimport * as shiftG from './shift-g/shift-g.js';\nimport * as gg from './gg/gg.js';\nimport * as j from './j/j.js';\nimport * as k from './k/k.js';\n\nexport const addons = [\n click,\n escape,\n down,\n up,\n enter,\n left,\n right,\n shiftG,\n gg,\n j,\n k,\n];\n","import {jessy} from 'jessy';\nimport {getMenuPath as _getMenuPath} from '../menu/get-menu-path.js';\n\nconst isFn = (a) => typeof a === 'function';\n\nexport const createItemClick = (name) => ({\n name,\n events: ['click'],\n listener,\n filter,\n stopPropagation: true,\n});\n\nconst filter = ({event, state, options}) => {\n if (state.command !== 'show')\n return;\n \n const {\n getMenuPath = _getMenuPath,\n menu,\n } = options;\n \n const menuPath = getMenuPath(event);\n const fn = jessy(menuPath, menu);\n \n return isFn(fn);\n};\n\nconst listener = ({event, state, options}) => {\n const {\n menu,\n getMenuPath = _getMenuPath,\n } = options;\n \n const menuPath = getMenuPath(event);\n const fn = jessy(menuPath, menu);\n \n setTimeout(fn);\n \n options.beforeHide?.(state);\n \n return {\n index: -1,\n command: 'hide',\n showSubmenu: false,\n };\n};\n","export function calculate(event, sizes) {\n let {clientX, clientY} = event;\n const {\n heightMenu,\n widthMenu,\n innerHeight,\n innerWidth,\n } = sizes;\n \n if (innerWidth < widthMenu + clientX + clientX / 2) {\n clientX -= widthMenu;\n \n if (clientX < 0)\n clientX = 0;\n }\n \n if (innerHeight < heightMenu + clientY) {\n clientY -= heightMenu;\n \n if (clientY < 0)\n clientY = 0;\n }\n \n return {\n x: clientX,\n y: clientY - 14,\n };\n}\n","import {setPosition} from './set-position/set-position.js';\n\nexport const createContextMenu = (name) => ({\n name,\n events,\n preventDefault,\n after,\n afterIf,\n listener,\n});\n\nconst events = [\n 'contextmenu',\n];\n\nconst preventDefault = true;\n\nconst listener = ({event, state, options}) => {\n const {beforeShow} = options;\n const {x, y} = {\n x: event.clientX,\n y: event.clientY,\n };\n \n const is = !beforeShow || beforeShow?.({\n ...state,\n position: {\n x,\n y,\n },\n });\n \n const command = is ? 'show' : 'hide';\n \n return {\n command,\n showSubmenu: false,\n position: {\n x,\n y: y - 14,\n },\n };\n};\n\nconst after = ({event, options}) => {\n const {name} = options;\n return setPosition(name, event);\n};\n\nconst afterIf = ({state}) => state.command === 'show';\n","import {calculate} from '../../../lunes/engine/position/calculate.js';\n\nexport const setPosition = (name, event) => {\n const element = document.querySelector(`[data-name=\"${name}\"]`);\n const heightMenu = getMenuHeight(element);\n const widthMenu = getMenuWidth(element);\n const {innerHeight, innerWidth} = globalThis;\n \n const {x, y} = calculate(event, {\n heightMenu,\n widthMenu,\n innerWidth,\n innerHeight,\n });\n \n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n \n return {\n position: {\n x,\n y,\n },\n };\n};\n\nfunction getMenuHeight(element) {\n const {height} = getComputedStyle(element);\n return parseInt(height, 10);\n}\n\nfunction getMenuWidth(element) {\n const {width} = getComputedStyle(element);\n return parseInt(width, 10);\n}\n","import {rules} from './rules/index.js';\nimport {hydrate} from '../aleman/index.js';\nimport {initState} from './state.js';\nimport {addons} from './addons/index.js';\nimport {createMouseEnter} from './addons/mouse-leave/index.js';\nimport {createItemClick} from './addons/item-click/item-click.js';\nimport * as click from './addons/click/click.js';\nimport {createContextMenu} from './addons/context-menu.js';\n\nconst {assign} = Object;\n\nexport const hydrateMenu = (elementName, {hydrateElement, options, menu}) => {\n assign(options, {\n menu,\n });\n \n const {name} = options;\n const state = initState(options);\n const contextMenu = createContextMenu(elementName);\n \n const {run} = hydrate(hydrateElement, {\n options,\n state,\n addons: [\n contextMenu,\n createMouseEnter(name),\n createItemClick(name),\n ...addons,\n ],\n rules,\n stateName: `aleman-state-${name}`,\n });\n \n return {\n show: (clientX, clientY) => {\n const event = {\n clientX,\n clientY,\n };\n \n run(event, contextMenu);\n },\n hide: () => run({}, click),\n };\n};\n","import css from './menu.css';\nimport {hydrateMenu} from './hydrate-menu.js';\n\nexport const createMenu = (elementName, options, menu) => {\n options.name = options.name || 'menu';\n const {name} = options;\n const hydrateElement = createHydrate(name);\n \n loadStyle();\n createStateElement(name);\n \n return hydrateMenu(elementName, {\n hydrateElement,\n options,\n menu,\n });\n};\n\nfunction loadStyle() {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const style = document.createElement('style');\n \n style.dataset.name = name;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\nfunction createHydrate(name) {\n const hydrateElement = findByName(name);\n \n if (hydrateElement)\n return hydrateElement;\n \n const section = document.createElement('section');\n \n section.dataset.name = `aleman-hydrate-${name}`;\n section.innerHTML = `<ul data-name=\"${name}\" class=\"menu menu-hidden\"></ul>`;\n document.body.append(section);\n \n return section;\n}\n\nfunction createStateElement(name) {\n const elementName = `aleman-state-${name}`;\n \n if (findByName(elementName))\n return;\n \n const section = document.createElement('section');\n \n section.dataset.name = elementName;\n section.classList.add('menu-hidden');\n document.body.append(section);\n}\n\nfunction findByName(name) {\n return document.querySelector(`[data-name=${name}]`);\n}\n","export const initState = ({name = 'menu'}) => ({\n name,\n command: 'hide',\n insideSubmenu: false,\n submenuIndex: 0,\n showSubmenu: false,\n index: -1,\n position: {\n x: 0,\n y: 20,\n },\n});\n","import {createState} from './state.js';\nimport {\n addGlobalListeners,\n addListeners,\n splitAddons,\n} from './add-listeners.js';\nimport {createRender} from './render.js';\n\nexport const hydrate = (element, config) => {\n const {\n addons,\n options,\n state,\n rules,\n stateName = 'aleman-state',\n } = config;\n \n const render = createRender(element.innerHTML, {\n options,\n rules,\n });\n \n const {globalAddons, namedAddons} = splitAddons(addons);\n \n const listener = () => {\n const state = readState();\n const [is, result] = render(state);\n \n if (!is)\n return;\n \n element.innerHTML = result;\n addListeners({\n readState,\n writeState,\n namedAddons,\n options,\n });\n };\n \n const {readState, writeState} = createState(state, {\n stateName,\n listener,\n });\n \n addGlobalListeners({\n readState,\n writeState,\n globalAddons,\n options,\n });\n \n return {\n run: (event, addon) => {\n const state = readState();\n const newState = addon.listener({\n state,\n event,\n options,\n writeState,\n });\n \n writeState({\n ...state,\n ...newState,\n });\n \n if (addon.afterIf?.({state: newState, options}))\n requestAnimationFrame(() => {\n writeState(addon.after({\n event,\n options,\n state: newState,\n }));\n });\n },\n };\n};\n","export const createMouseEnter = (name) => ({\n name,\n events: ['mouseleave'],\n listener: () => ({\n index: -1,\n showSubmenu: false,\n insideSubmenu: false,\n submenuIndex: 0,\n }),\n});\n","const noop = () => {};\n\nconst NAMES = [\n 'beforeShow',\n 'afterShow',\n 'beforeHide',\n 'beforeClose',\n 'afterHide',\n 'beforeClick',\n 'afterClick',\n];\n\nexport const createHooks = (options) => {\n const hooks = {};\n \n for (const name of NAMES)\n hooks[name] = options[name] || noop;\n \n return hooks;\n};\n","const {entries} = Object;\nconst isObject = (a) => a && typeof a === 'object';\nconst isIdentifier = (a) => /^[a-z_$][\\w$]*$/i.test(a);\nconst quote = (a) => `'${a.replaceAll('\\\\', '\\\\\\\\').replaceAll(`'`, `\\\\'`)}'`;\nconst getKey = (a) => isIdentifier(a) ? a : quote(a);\n\nexport function convertMenuToState(menu, {submenu} = {}) {\n const result = [];\n \n for (const [key, value] of entries(menu)) {\n if (!isObject(value)) {\n result.push(isIdentifier(key) ? key : `${quote(key)}: null`);\n continue;\n }\n \n result.push(`${getKey(key)}: ${convertMenuToState(value, {\n submenu: true,\n })}`);\n }\n \n const noCursor = submenu ? '' : `'no-cursor', `;\n \n return `['off', ${noCursor} {${result.join(', ')}}]`;\n}\n","import {types, operator} from 'putout';\n\nconst isUndefined = (a) => typeof a === 'undefined';\nconst {remove} = operator;\n\nconst {\n stringLiteral,\n isArrayExpression,\n isIdentifier,\n identifier,\n isObjectProperty,\n isExpressionStatement,\n isNullLiteral,\n nullLiteral,\n} = types;\n\nexport const getKeyName = ({key}) => key.name || key.value;\n\nexport const itemOf = ({parentPath}) => {\n if (isArrayExpression(parentPath))\n return parentPath.parentPath;\n \n return parentPath;\n};\n\nexport const pathOf = (path) => {\n const names = [];\n \n for (let current = itemOf(path); current; current = current.parentPath)\n if (isObjectProperty(current))\n names.unshift(getKeyName(current.node));\n \n return names.join('.');\n};\n\nexport const isCursorPath = (path, {cursorPath}) => isUndefined(cursorPath) || pathOf(path) === cursorPath;\n\nexport const siblings = (item) => item.parentPath.get('properties');\n\nexport const first = (path) => path\n .getNextSibling()\n .get('properties')\n .at(0);\n\nexport const last = (path) => path\n .getNextSibling()\n .get('properties')\n .at(-1);\n\nexport const next = (item, {infiniteScroll}) => {\n const nextItem = item.getNextSibling();\n \n if (nextItem.node)\n return nextItem;\n \n return infiniteScroll ? siblings(item).at(0) : item;\n};\n\nexport const prev = (item, {infiniteScroll}) => {\n const prevItem = item.getPrevSibling();\n \n if (prevItem.node)\n return prevItem;\n \n return infiniteScroll ? siblings(item).at(-1) : item;\n};\n\nexport const findRoot = (path) => path.findParent((current) => {\n return isArrayExpression(current) && isExpressionStatement(current.parentPath);\n});\n\nexport const rootProperties = (root) => root.get('elements').at(-1)\n .get('properties');\n\nexport function setCursor(path) {\n const valuePath = path.get('value');\n \n if (isIdentifier(valuePath) || isNullLiteral(valuePath)) {\n path.node.value = stringLiteral('cursor');\n path.node.shorthand = false;\n \n return;\n }\n \n if (isArrayExpression(valuePath))\n valuePath.node.elements.splice(1, 0, stringLiteral('cursor'));\n}\n\nexport function clearCursor(path) {\n const {parentPath} = path;\n \n if (isObjectProperty(parentPath)) {\n const {key} = parentPath.node;\n \n if (isIdentifier(key)) {\n parentPath.node.value = identifier(key.name);\n parentPath.node.shorthand = true;\n \n return;\n }\n \n parentPath.node.value = nullLiteral();\n \n return;\n }\n \n if (isArrayExpression(parentPath))\n remove(path);\n}\n\nexport const closeSubmenus = (root) => {\n root.traverse({\n ArrayExpression(path) {\n path.node.elements[0] = stringLiteral('off');\n },\n });\n};\n\nexport const markNoCursor = (root) => {\n root.node.elements.splice(1, 0, stringLiteral('no-cursor'));\n};\n","import {types} from 'putout';\nimport {\n next,\n prev,\n itemOf,\n setCursor,\n clearCursor,\n getKeyName,\n} from '../cursor.js';\n\nconst operations = {\n prev,\n next,\n};\n\nconst {isArrayExpression} = types;\n\nexport const report = () => `Move cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const {operation = 'next', cursor} = options;\n const {parentPath} = path;\n \n if (!operations[operation])\n return false;\n \n if (isArrayExpression(parentPath))\n return getKeyName(parentPath.parentPath.node) === cursor;\n \n return getKeyName(parentPath.node) === cursor;\n};\n\nexport const fix = (path, {options}) => {\n const {\n operation = 'next',\n count = 1,\n infiniteScroll = false,\n } = options;\n \n const move = operations[operation];\n const from = itemOf(path);\n let item = from;\n \n for (let i = 0; i < count; i++)\n item = move(item, {\n infiniteScroll,\n });\n \n if (item === from)\n return;\n \n clearCursor(path);\n setCursor(item);\n};\n","import {operator} from 'putout';\nimport {\n first,\n last,\n setCursor,\n} from '../cursor.js';\n\nconst {remove} = operator;\n\nconst operations = {\n last,\n first,\n};\n\nexport const report = () => `Add cursor`;\n\nexport const include = () => [\n '\"no-cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const {operation} = options;\n return operations[operation];\n};\n\nexport const fix = (path, {options}) => {\n const {operation} = options;\n \n const getCursor = operations[operation];\n const cursorPath = getCursor(path);\n \n setCursor(cursorPath);\n remove(path);\n};\n","import {types} from 'putout';\n\nconst {isExpressionStatement} = types;\n\nexport const report = () => `Apply visibility`;\n\nexport const match = ({options}) => {\n const {operation = 'show'} = options;\n \n return {\n '\"off\"': (vars, path) => {\n if (operation !== 'show')\n return false;\n \n return isExpressionStatement(path.parentPath.parentPath);\n },\n '\"on\"': (vars, path) => {\n if (operation !== 'hide')\n return false;\n \n return isExpressionStatement(path.parentPath.parentPath);\n },\n };\n};\n\nexport const replace = () => ({\n '\"off\"': '\"on\"',\n '\"on\"': '\"off\"',\n});\n","import {\n findRoot,\n closeSubmenus,\n clearCursor,\n markNoCursor,\n} from '../cursor.js';\n\nexport const report = () => `Reset cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const fix = (path) => {\n const root = findRoot(path);\n \n clearCursor(path);\n closeSubmenus(root);\n markNoCursor(root);\n};\n","import {operator} from 'putout';\nimport {\n findRoot,\n rootProperties,\n closeSubmenus,\n clearCursor,\n setCursor,\n} from '../cursor.js';\n\nconst {remove} = operator;\n\nexport const report = () => `Put cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n '\"no-cursor\"',\n];\n\nexport const filter = (path, {options}) => ['first', 'last'].includes(options.operation);\n\nexport const fix = (path, {options}) => {\n const {operation} = options;\n const root = findRoot(path);\n const properties = rootProperties(root);\n const target = operation === 'first' ? properties.at(0) : properties.at(-1);\n \n if (path.node.value === 'no-cursor')\n remove(path);\n else\n clearCursor(path);\n \n closeSubmenus(root);\n setCursor(target);\n};\n","import {types, operator} from 'putout';\nimport {setCursor, isCursorPath} from '../cursor.js';\n\nconst {\n isArrayExpression,\n stringLiteral,\n} = types;\n\nconst {remove} = operator;\n\nexport const report = () => `Enter submenu`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => isArrayExpression(path.parentPath) && isCursorPath(path, options);\n\nexport const fix = (path) => {\n const array = path.parentPath;\n const properties = array.get('elements').at(-1)\n .get('properties');\n \n if (!properties.length)\n return;\n \n remove(path);\n array.node.elements[0] = stringLiteral('on');\n setCursor(properties.at(0));\n};\n","import {types} from 'putout';\nimport {\n itemOf,\n setCursor,\n clearCursor,\n isCursorPath,\n} from '../cursor.js';\n\nconst {\n isArrayExpression,\n isExpressionStatement,\n stringLiteral,\n} = types;\n\nconst submenuOf = (path) => itemOf(path).parentPath.parentPath;\n\nexport const report = () => `Leave submenu`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const array = submenuOf(path);\n \n return isArrayExpression(array) && !isExpressionStatement(array.parentPath) && isCursorPath(path, options);\n};\n\nexport const fix = (path) => {\n const array = submenuOf(path);\n \n clearCursor(path);\n array.node.elements[0] = stringLiteral('off');\n setCursor(array.parentPath);\n};\n","import {putout} from 'putout';\nimport {next} from './transforms/next.js';\nimport {prev} from './transforms/prev.js';\nimport {hide} from './transforms/hide.js';\nimport {show} from './transforms/show.js';\nimport {first} from './transforms/first.js';\nimport {last} from './transforms/last.js';\nimport {right} from './transforms/right.js';\nimport {left} from './transforms/left.js';\nimport {reset} from './transforms/reset.js';\n\nconst transforms = {\n next,\n prev,\n show,\n hide,\n first,\n last,\n right,\n left,\n reset,\n};\n\nexport const transform = (state, operation, options) => {\n const createConfig = transforms[operation];\n const config = createConfig(options);\n \n const {code} = putout(state, {\n fixCount: 1,\n ...config,\n });\n \n return code;\n};\n","import * as moveCursor from '../rules/move-cursor/index.js';\nimport * as addCursor from '../rules/add-cursor/index.js';\n\nexport const next = (options) => ({\n rules: {\n 'add-cursor': ['on', {\n operation: 'first',\n }],\n 'move-cursor': ['on', options],\n },\n plugins: [\n ['move-cursor', moveCursor],\n ['add-cursor', addCursor],\n ],\n});\n","import * as moveCursor from '../rules/move-cursor/index.js';\nimport * as addCursor from '../rules/add-cursor/index.js';\n\nexport const prev = (options) => ({\n rules: {\n 'add-cursor': ['on', {\n operation: 'last',\n }],\n 'move-cursor': ['on', options],\n },\n plugins: [\n ['move-cursor', moveCursor],\n ['add-cursor', addCursor],\n ],\n});\n","import * as applyVisibility from '../rules/apply-visibility/index.js';\n\nexport const show = (options) => ({\n rules: {\n 'apply-visibility': ['on', options],\n },\n plugins: [\n ['apply-visibility', applyVisibility],\n ],\n});\n","import * as applyVisibility from '../rules/apply-visibility/index.js';\nimport * as resetCursor from '../rules/reset-cursor/index.js';\n\nexport const hide = (options) => ({\n rules: {\n 'apply-visibility': ['on', options],\n 'reset-cursor': 'on',\n },\n plugins: [\n ['apply-visibility', applyVisibility],\n ['reset-cursor', resetCursor],\n ],\n});\n","import * as putCursor from '../rules/put-cursor/index.js';\n\nexport const first = () => ({\n rules: {\n 'put-cursor': ['on', {\n operation: 'first',\n }],\n },\n plugins: [\n ['put-cursor', putCursor],\n ],\n});\n","import * as putCursor from '../rules/put-cursor/index.js';\n\nexport const last = () => ({\n rules: {\n 'put-cursor': ['on', {\n operation: 'last',\n }],\n },\n plugins: [\n ['put-cursor', putCursor],\n ],\n});\n","import * as enterSubmenu from '../rules/enter-submenu/index.js';\n\nexport const right = (options) => ({\n rules: {\n 'enter-submenu': ['on', options],\n },\n plugins: [\n ['enter-submenu', enterSubmenu],\n ],\n});\n","import * as leaveSubmenu from '../rules/leave-submenu/index.js';\n\nexport const left = (options) => ({\n rules: {\n 'leave-submenu': ['on', options],\n },\n plugins: [\n ['leave-submenu', leaveSubmenu],\n ],\n});\n","import * as resetCursor from '../rules/reset-cursor/index.js';\n\nexport const reset = () => ({\n rules: {\n 'reset-cursor': 'on',\n },\n plugins: [\n ['reset-cursor', resetCursor],\n ],\n});\n","import {pathOf} from '../../transformer/rules/cursor.js';\n\nexport const report = pathOf;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const fix = () => {};\n","import {putout} from 'putout';\nimport * as getCursorPlugin from './get-cursor/index.js';\n\nexport const getCursorPath = (state) => {\n const {places} = putout(state, {\n fix: false,\n plugins: [\n ['lunes/get-cursor', getCursorPlugin],\n ],\n });\n \n if (!places.length)\n return '';\n \n const {message} = places[0];\n \n return message;\n};\n\nexport const getCursor = (state) => getCursorPath(state)\n .split('.')\n .at(-1);\n","import {fullstore} from 'fullstore';\nimport {convertMenuToState} from './convert-menu-to-state/convert-menu-to-state.js';\nimport {transform} from './transformer/transformer.js';\nimport {getCursorPath} from './getter/getter.js';\n\nconst SHOWN = /^\\[\\s*'on'/;\nconst ALWAYS = [\n 'show',\n 'hide',\n];\n\nconst MOVES = [\n 'next',\n 'prev',\n];\n\nexport const isShown = (state) => SHOWN.test(state);\n\nexport const createState = (menu, {infiniteScroll = false} = {}) => {\n const state = convertMenuToState(menu);\n const stateStore = fullstore(state);\n \n return {\n read: stateStore,\n isShown: () => isShown(stateStore()),\n commit: createCommit(stateStore, {\n infiniteScroll,\n }),\n };\n};\n\nconst createCommit = (stateStore, {infiniteScroll}) => {\n const commit = (operation, options = {}) => {\n const state = stateStore();\n \n if (!ALWAYS.includes(operation) && !isShown(state))\n return state;\n \n const cursorPath = getCursorPath(state);\n const {count = 1} = options;\n \n if (MOVES.includes(operation) && !cursorPath && count > 1) {\n commit(operation, {\n ...options,\n count: 1,\n });\n \n return commit(operation, {\n ...options,\n count: count - 1,\n });\n }\n \n const newState = transform(state, operation, {\n infiniteScroll,\n ...options,\n operation,\n cursorPath,\n cursor: cursorPath\n .split('.')\n .at(-1),\n });\n \n stateStore(newState);\n \n return newState;\n };\n \n return commit;\n};\n","import {\n template,\n types,\n operator,\n} from 'putout';\nimport {getKeyName} from '../../../state/transformer/rules/cursor.js';\n\nconst {\n isExpressionStatement,\n isObjectProperty,\n jsxText,\n isArrayExpression,\n} = types;\n\nconst {\n replaceWith,\n removeClassName,\n setAttributeValue,\n} = operator;\n\nconst isOn = ({node}) => node.elements[0].value === 'on';\n\nconst isSelected = ({node}) => {\n if (isObjectProperty(node))\n return node.value.value;\n \n return node.elements[1].value === 'cursor';\n};\n\nconst getMenuPath = (path) => {\n const names = [];\n \n for (let current = path; current; current = current.parentPath)\n if (isObjectProperty(current))\n names.unshift(getKeyName(current.node));\n \n return names.join('.');\n};\n\nexport const report = () => `Build menu`;\nexport const include = () => [\n 'ObjectProperty',\n 'ArrayExpression',\n];\n\nconst ENTITIES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '{': '{',\n '}': '}',\n '\"': '"',\n};\n\nconst escapeText = (a) => a.replace(/[&<>{}]/g, (char) => ENTITIES[char]);\nconst escapeAttribute = (a) => a.replace(/[&<>{}\"]/g, (char) => ENTITIES[char]);\n\nconst getIconName = (name) => 'icon-' + name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n\nconst createIconClass = (path, icon) => icon ? ` icon ${getIconName(getKeyName(path.node))}` : '';\n\nconst createMenuItem = (path, {icon} = {}) => {\n const name = escapeText(getKeyName(path.node));\n const valuePath = path.get('value');\n \n if (isArrayExpression(valuePath)) {\n const objectPath = valuePath.get('elements').at(-1);\n const children = [];\n \n for (const prop of objectPath.get('properties').map((property) => createMenuItem(property, {icon}))) {\n children.push(prop);\n children.push(jsxText('\\n'));\n }\n \n const submenu = createSubmenu(valuePath, {icon});\n \n submenu.children[3].children = [\n jsxText('\\n'),\n ...children,\n ];\n \n return submenu;\n }\n \n const classSelected = isSelected(path) ? ' menu-item-selected' : '';\n const classIcon = createIconClass(path, icon);\n \n const node = template.ast.fresh(`\n <li data-name=\"menu-item\" className=\"menu-item${classIcon}${classSelected}\">\n <label data-menu-path=\"${escapeAttribute(getMenuPath(path))}\">${name}</label>\n </li>\n `);\n \n return node;\n};\n\nconst createUL = (path) => {\n const node = template.ast.fresh(`\n <ul className=\"menu menu-hidden\"></ul>\n `);\n \n if (isOn(path))\n removeClassName(node, 'menu-hidden');\n \n return node;\n};\n\nconst createSubmenu = (path, {icon} = {}) => {\n const name = escapeText(getKeyName(path.parentPath.node));\n const menuHidden = isOn(path) ? '' : ' menu-hidden';\n const classShow = isOn(path) ? ' menu-submenu-show' : '';\n const classSelected = isSelected(path) || isOn(path) ? ' menu-item-selected' : '';\n const classIcon = icon ? ` icon ${getIconName(getKeyName(path.parentPath.node))}` : '';\n \n const node = template.ast.fresh(`\n <li data-name=\"menu-item\" className=\"menu-item${classIcon} menu-submenu${classSelected}${classShow}\">\n <label data-menu-path=\"${escapeAttribute(getMenuPath(path))}\">${name}</label>\n <ul className=\"menu${menuHidden}\"></ul>\n </li>\n `);\n \n return node;\n};\n\nexport const fix = (path, {options}) => {\n const {position, icon} = options;\n const {top, left} = position;\n \n if (isObjectProperty(path)) {\n replaceWith(path, createMenuItem(path, {icon}));\n return;\n }\n \n if (isArrayExpression(path)) {\n const ul = createUL(path);\n \n if (isExpressionStatement(path.parentPath)) {\n replaceWith(path, ul);\n setAttributeValue(ul, 'style', `left: ${left}px; top: ${top}px`);\n }\n \n const {properties} = path.node.elements.at(-1);\n const children = [];\n \n for (const prop of properties) {\n children.push(prop);\n children.push(jsxText('\\n'));\n }\n \n ul.children = [\n jsxText('\\n'),\n ...children,\n ];\n \n return;\n }\n};\n","export const emitBefore = (addon, {event, parseVim}) => {\n const {keys, commands} = addon;\n \n if (keys && !keys.includes(event.key))\n return [false];\n \n const [command, count] = parseVim(event);\n \n if (commands && !commands.includes(command))\n return [false];\n \n return [true, count];\n};\n","const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';\n\nexport const createVimParser = (buffer = []) => ({key}) => {\n if (/F\\d/.test(key)) {\n buffer = [];\n return [''];\n }\n \n if (key === '^')\n return ['^'];\n \n if (key === '$')\n return ['$'];\n \n if (!buffer.length && key === 'g') {\n buffer.push('g');\n return [''];\n }\n \n if (!buffer.length && /\\d/.test(key)) {\n buffer.push(Number(key));\n return [''];\n }\n \n if (!buffer.length && key === 'j')\n buffer.push(1);\n \n if (!buffer.length && key === 'k')\n buffer.push(1);\n \n const [count] = buffer;\n \n if (isNumber(count) && key === 'j') {\n buffer = [];\n return ['j', count];\n }\n \n if (isNumber(count) && key === 'k') {\n buffer = [];\n return ['k', count];\n }\n \n if (count === 'g' && key === 'g') {\n buffer = [];\n return ['gg'];\n }\n \n buffer = [];\n \n return [''];\n};\n","import {emitBefore} from './emit.js';\nimport {createVimParser} from './vim.js';\n\nconst {values} = Object;\nconst {isArray} = Array;\nconst getDefault = (a) => a.default;\n\nconst maybeEvents = ({events}) => {\n if (events)\n return events;\n \n return ['keydown'];\n};\n\nconst maybeActions = (actions) => {\n if (isArray(actions))\n return actions;\n \n return values(actions).map(getDefault);\n};\n\nexport const listen = (actions = [], overrides = {}) => ({\n [Symbol.asyncIterator]() {\n const {\n addEventListener = globalThis.addEventListener,\n removeEventListener = globalThis.removeEventListener,\n parseVim = createVimParser(),\n isShown = () => true,\n isTarget = () => true,\n } = overrides;\n \n const queue = [];\n let resolveNext;\n const handlers = [];\n \n for (const action of maybeActions(actions)) {\n const events = maybeEvents(action);\n \n for (const event of events) {\n const {\n preventDefault,\n stopPropagation,\n operations,\n } = action;\n \n const fn = (event) => {\n if (action.when === 'shown' && !isShown())\n return;\n \n if (action.scoped && !isTarget(event))\n return;\n \n const [isEmitBefore, count] = emitBefore(action, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return;\n \n if (preventDefault)\n event.preventDefault();\n \n if (stopPropagation)\n event.stopPropagation();\n \n const value = [\n operations, {\n count,\n position: {},\n event,\n },\n ];\n \n if (resolveNext) {\n resolveNext({\n value,\n done: false,\n });\n resolveNext = null;\n \n return;\n }\n \n queue.push(value);\n };\n \n addEventListener(event, fn);\n \n handlers.push({\n event,\n fn,\n });\n }\n }\n \n const cleanup = () => {\n for (const {event, fn} of handlers) {\n removeEventListener(event, fn);\n }\n };\n \n return {\n next() {\n if (queue.length)\n return Promise.resolve({\n value: queue.shift(),\n done: false,\n });\n \n return new Promise((resolve) => {\n resolveNext = resolve;\n });\n },\n \n return() {\n cleanup();\n \n if (resolveNext)\n resolveNext({\n done: true,\n });\n \n resolveNext = null;\n \n return Promise.resolve({\n done: true,\n });\n },\n };\n },\n});\n","import {fullstore} from 'fullstore';\n\nconst hasPosition = (position) => typeof position?.top === 'number';\n\nconst DEFAULT_POSITION = {\n top: 0,\n left: 0,\n};\n\nconst fromEvent = (event) => {\n if (typeof event?.clientX !== 'number')\n return null;\n \n return {\n top: event.clientY,\n left: event.clientX,\n };\n};\n\nconst isSame = (a, b) => a.top === b.top && a.left === b.left;\n\nexport const createCompiler = (element, {commit, render, getPosition = () => null, mainOptions = fullstore()}) => (operation, options = {}) => {\n const {event} = options;\n const state = commit(operation, options);\n const saved = mainOptions() || {};\n const isShow = operation === 'show';\n \n const position = hasPosition(options.position) ? options.position : isShow && fromEvent(event) || saved.position || DEFAULT_POSITION;\n \n element.innerHTML = render(state, {\n ...options,\n position,\n });\n \n const fixed = isShow && event && getPosition(event);\n \n if (fixed && !isSame(fixed, position))\n element.innerHTML = render(state, {\n ...options,\n position: fixed,\n });\n \n mainOptions({\n position: fixed || position,\n });\n};\n","export const findByName = (name) => document.querySelector(`[data-name=${name}]`);\n\nexport const createHydrate = (name) => {\n const hydrateElement = findByName(name);\n \n if (hydrateElement)\n return hydrateElement;\n \n const section = document.createElement('section');\n \n section.dataset.name = `aleman-hydrate-${name}`;\n section.innerHTML = `<ul data-name=\"${name}\" class=\"menu menu-hidden\"></ul>`;\n document.body.append(section);\n \n return section;\n};\n\nexport const addStyleText = (css) => {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const style = document.createElement('style');\n \n style.dataset.name = name;\n style.textContent = css;\n document.head.appendChild(style);\n};\n\nexport const addStyleLink = () => {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const link = document.createElement('link');\n \n link.dataset.name = name;\n link.rel = 'stylesheet';\n link.href = new URL('menu.css', import.meta.url).pathname;\n document.head.appendChild(link);\n};\n","import css from './menu.css';\nimport {hydrateMenu} from './hydrate-menu.js';\nimport {createBundleMenu} from './create-bundle-menu.js';\n\nexport const createMenu = createBundleMenu({\n css,\n hydrateMenu,\n});\n","import {createHydrate, addStyleText} from './dom.js';\n\nexport const createBundleMenu = ({css, hydrateMenu}) => (elementName, options, menu) => {\n options.name = options.name || 'menu';\n \n const hydrateElement = createHydrate(options.name);\n \n addStyleText(css);\n \n return hydrateMenu(elementName, {\n hydrateElement,\n options,\n menu,\n });\n};\n","import {jessy} from 'jessy';\nimport {createHooks} from './hooks.js';\nimport {createState} from './state/state.js';\nimport {getCursorPath} from './state/getter/getter.js';\nimport {render} from './render/render.js';\nimport * as actions from './actions/index.js';\nimport {createLoop} from './engine/engine.js';\nimport {createCompiler} from './compiler/compiler.js';\nimport {calculate} from './engine/position/calculate.js';\n\nconst isFn = (a) => typeof a === 'function';\nconst isCancel = (a) => Object.is(a, false);\n\nexport const hydrateMenu = (elementName, {hydrateElement, options, menu}) => {\n const {\n commit,\n read,\n isShown,\n } = createState(menu, options);\n \n const {name} = options;\n const hooks = createHooks(options);\n \n const getPosition = (event) => {\n const menuElement = hydrateElement.querySelector('ul.menu');\n \n if (!menuElement)\n return null;\n \n const {height, width} = getComputedStyle(menuElement);\n \n const {x, y} = calculate(event, {\n heightMenu: parseInt(height, 10),\n widthMenu: parseInt(width, 10),\n innerHeight: globalThis.innerHeight,\n innerWidth: globalThis.innerWidth,\n });\n \n return {\n top: y,\n left: x,\n };\n };\n \n const compile = createCompiler(hydrateElement, {\n commit,\n read,\n render: (state, renderOptions) => render(state, {\n ...renderOptions,\n icon: options.icon,\n }),\n getPosition,\n });\n \n const showMenu = (showOptions) => {\n const {event} = showOptions;\n const {clientX: x, clientY: y} = event;\n \n const params = {\n x,\n y,\n name,\n position: {\n x,\n y,\n },\n };\n \n if (isCancel(hooks.beforeShow(params))) {\n if (isShown())\n compile('hide');\n \n return;\n }\n \n compile('show', showOptions);\n hooks.afterShow(params);\n };\n \n const hideMenu = () => {\n if (!isShown())\n return;\n \n hooks.beforeHide();\n \n if (hooks.beforeClose())\n return;\n \n compile('hide');\n hooks.afterHide();\n };\n \n const clickItem = (fn) => {\n const isSkip = hooks.beforeClick(name);\n \n hideMenu();\n \n if (isSkip)\n return;\n \n fn();\n hooks.afterClick();\n };\n \n const dispatch = (operation, dispatchOptions) => {\n if (operation === 'show')\n return showMenu(dispatchOptions);\n \n if (operation === 'hide')\n return hideMenu();\n \n if (operation === 'run')\n return runItem(getCursorPath(read()));\n \n compile(operation, dispatchOptions);\n };\n \n const runItem = (path) => {\n const fn = path && jessy(path, menu);\n \n if (isFn(fn))\n clickItem(fn);\n };\n \n createLoop(hydrateElement, {\n compile: dispatch,\n actions,\n isShown,\n overrides: {\n isTarget: (event) => Boolean(event.target.closest(`[data-name=\"${elementName}\"]`)),\n },\n });\n \n hydrateElement.addEventListener('click', (event) => {\n const label = event.target.closest('label[data-menu-path]');\n \n if (label)\n runItem(label.dataset.menuPath);\n });\n \n globalThis.addEventListener('click', (event) => {\n if (hydrateElement.contains(event.target))\n return;\n \n hideMenu();\n });\n \n hydrateElement.addEventListener('mouseleave', (event) => {\n if (event.target.parentElement !== hydrateElement)\n return;\n \n compile('reset');\n }, true);\n \n return {\n show: (x = 0, y = 0) => {\n showMenu({\n event: {\n clientX: x,\n clientY: y,\n },\n });\n },\n hide: hideMenu,\n };\n};\n","import {putout} from 'putout';\nimport {merge} from '@putout/processor-html';\nimport * as buildMenu from './rules/build-menu/index.js';\n\nexport const render = (state, options) => {\n const {code} = putout(state, {\n rules: {\n 'lunes/build-menu': ['on', options],\n },\n plugins: [\n ['lunes/build-menu', buildMenu],\n ],\n });\n \n return merge('', [code]);\n};\n","import {listen} from './listen.js';\n\nexport const createLoop = (element, {actions, compile, isShown, overrides = {}}) => {\n const iterator = listen(actions, {\n ...overrides,\n isShown,\n })[Symbol.asyncIterator]();\n \n loop(iterator, compile);\n \n return () => iterator.return();\n};\n\nconst loop = async (iterator, compile) => {\n const iterable = {\n [Symbol.asyncIterator]: () => iterator,\n };\n \n for await (const [operations, options] of iterable) {\n for (const operation of operations)\n compile(operation, options);\n }\n};\n","import {supermenu} from 'supermenu';\nimport {createMenu as createAlemanMenu} from 'aleman/menu/bundle';\nimport {createMenu as createLunesMenu} from 'aleman/lunes/bundle';\nimport {pickMenu} from './pick-menu.js';\n\nconst noop = () => {};\nconst {CloudCmd} = globalThis;\n\nexport const createCloudMenu = async (fm, options, menuData) => {\n const createMenu = pickMenu(CloudCmd.config('menu'), {\n supermenu: createSupermenu,\n aleman: createAlemanMenu,\n lunes: createLunesMenu,\n });\n \n const menu = await createMenu(fm, options, menuData);\n \n menu.addContextMenuListener = menu.addContextMenuListener || noop;\n \n return menu;\n};\n\nfunction createSupermenu(name, options, menuData) {\n const element = document.querySelector('[data-name=\"js-fm\"]');\n return supermenu(element, options, menuData);\n}\n","export const pickMenu = (name, {supermenu, ...menus}) => menus[name] || supermenu;\n","import {rendy} from 'rendy';\nimport currify from 'currify';\nimport {fullstore} from 'fullstore';\nimport {encode} from '#common/entity';\n\nconst id = (a) => a;\nconst NAME = 'Cloud Commander';\n\nexport const dateFormatter = fullstore(id);\nexport const getHeaderField = currify(_getHeaderField);\nexport const FS = '/fs';\n\nconst Path = fullstore();\n\nPath('/');\n\nconst filterOutDotFiles = ({showDotFiles}) => ({name}) => {\n if (showDotFiles)\n return true;\n \n return !name.startsWith('.');\n};\n\nexport const apiURL = '/api/v1';\nexport const MAX_FILE_SIZE = 500 * 1024;\n\nexport const formatMsg = (msg, name, status) => {\n status = status || 'ok';\n name = name || '';\n \n if (name)\n name = `(\"${name}\")`;\n \n return `${msg}: ${status}${name}`;\n};\n\n/**\n * Функция возвращает заголовок веб страницы\n * @path\n */\nexport const getTitle = (options) => {\n options = options || {};\n \n const {path = Path(), name} = options;\n \n const array = [\n name || NAME,\n path,\n ];\n \n return array\n .filter(Boolean)\n .join(' - ');\n};\n\n/** Функция получает адреса каждого каталога в пути\n * возвращаеться массив каталогов\n * @param url - адрес каталога\n */\nexport function getPathLink(url, prefix, template) {\n if (!url)\n throw Error('url could not be empty!');\n \n if (!template)\n throw Error('template could not be empty!');\n \n const names = url\n .split('/')\n .slice(1, -1);\n \n const allNames = [\n '/',\n ...names,\n ];\n \n const lines = [];\n const n = allNames.length;\n \n let path = '/';\n \n for (let i = 0; i < n; i++) {\n const name = allNames[i];\n const isLast = i === n - 1;\n \n if (i)\n path += `${name}/`;\n \n if (i && isLast) {\n lines.push(`${name}/`);\n continue;\n }\n \n const slash = i ? '/' : '';\n \n lines.push(rendy(template, {\n path,\n name,\n slash,\n prefix,\n }));\n }\n \n return lines.join('');\n}\n\nexport function _getDataName(name) {\n const encoded = btoa(encodeURI(name));\n return `data-name=\"js-file-${encoded}\" `;\n}\n\n/**\n * Функция строит таблицу файлв из JSON-информации о файлах\n * @param params - информация о файлах\n *\n */\nexport const buildFromJSON = (params) => {\n const {\n prefix,\n template,\n sort = 'name',\n order = 'asc',\n showDotFiles,\n } = params;\n \n const formatDate = dateFormatter();\n \n const templateFile = template.file;\n const templateLink = template.link;\n const json = params.data;\n \n const path = encode(json.path);\n const {files} = json;\n \n /*\n * Строим путь каталога в котором мы находимся\n * со всеми подкаталогами\n */\n const htmlPath = getPathLink(path, prefix, template.pathLink);\n \n let fileTable = rendy(template.path, {\n link: prefix + FS + path,\n fullPath: path,\n path: htmlPath,\n });\n \n const owner = 'owner';\n const mode = 'mode';\n \n const getFieldName = getHeaderField(sort, order);\n \n const name = getFieldName('name');\n const size = getFieldName('size');\n const date = getFieldName('date');\n const time = getFieldName('time');\n \n const header = rendy(templateFile, {\n tag: 'div',\n attribute: 'data-name=\"js-fm-header\" ',\n className: 'fm-header',\n type: '',\n name,\n size,\n date,\n time,\n owner,\n mode,\n });\n \n /* сохраняем путь */\n Path(path);\n \n fileTable += `${header}<ul data-name=\"js-files\" class=\"files\">`;\n \n /* Если мы не в корне */\n if (path !== '/') {\n const dotDot = getDotDot(path);\n const link = prefix + FS + dotDot;\n \n const linkResult = rendy(template.link, {\n link,\n title: '..',\n name: '..',\n });\n \n const dataName = _getDataName('..');\n const attribute = `draggable=\"true\" ${dataName}`;\n \n /* Сохраняем путь к каталогу верхнего уровня*/\n fileTable += rendy(template.file, {\n tag: 'li',\n attribute,\n className: '',\n type: 'directory',\n name: linkResult,\n size: '<dir>',\n date: '--.--.----',\n time: '--:--:--',\n owner: '.',\n mode: '--- --- ---',\n });\n }\n \n fileTable += files\n .filter(filterOutDotFiles({\n showDotFiles,\n }))\n .map(updateField)\n .map((file) => {\n const name = encode(file.name);\n const link = prefix + FS + path + name;\n \n const {\n type,\n mode,\n date,\n time,\n owner,\n size,\n } = file;\n \n const linkResult = rendy(templateLink, {\n link,\n title: name,\n name,\n attribute: getAttribute(file.type),\n });\n \n const dataName = _getDataName(file.name);\n const attribute = `draggable=\"true\" ${dataName}`;\n \n return rendy(templateFile, {\n tag: 'li',\n attribute,\n className: '',\n type,\n name: linkResult,\n size,\n date: formatDate(date),\n time,\n owner,\n mode,\n });\n })\n .join('');\n \n fileTable += '</ul>';\n \n return fileTable;\n};\n\nconst updateField = (file) => ({\n ...file,\n date: file.date || '--.--.----',\n time: file.time || '--:--:--',\n owner: file.owner || 'root',\n size: getSize(file),\n});\n\nfunction getAttribute(type) {\n if (type === 'directory')\n return '';\n \n return 'target=\"_blank\" ';\n}\n\nexport const _getSize = getSize;\n\nfunction getSize({size, type}) {\n if (type === 'directory')\n return '<dir>';\n \n if (/link/.test(type))\n return '<link>';\n \n return size;\n}\n\nfunction _getHeaderField(sort, order, name) {\n const arrow = order === 'asc' ? '↑' : '↓';\n \n if (sort !== name)\n return name;\n \n if (sort === 'name' && order === 'asc')\n return name;\n \n return `${name}${arrow}`;\n}\n\nexport function getDotDot(path) {\n // убираем последний слеш и каталог в котором мы сейчас находимся\n const lastSlash = path.substr(path, path.lastIndexOf('/'));\n const dotDot = lastSlash.substr(lastSlash, lastSlash.lastIndexOf('/'));\n \n if (!dotDot)\n return '/';\n \n return dotDot;\n}\n","const Entities = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '{': '{',\n '}': '}',\n};\n\nconst keys = Object.keys(Entities);\n\nexport const encode = (str) => {\n for (const code of keys) {\n const char = Entities[code];\n const reg = RegExp(char, 'g');\n \n str = str.replace(reg, code);\n }\n \n return str;\n};\n\nexport const decode = (str) => {\n for (const code of keys) {\n const char = Entities[code];\n const reg = RegExp(code, 'g');\n \n str = str.replace(reg, char);\n }\n \n return str;\n};\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.g = (() => {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = \"854\";"],"names":["e","n","i","document","Object","Error","arguments","Array","r","c","RegExp","t","JSON","TypeError","Promise","d","window","getComputedStyle","parseInt","globalThis","f","Boolean","title","alert","a","smalltalk","LOADING","HIDDEN","ERROR","getLoadingType","isSVG","createNS","name","svgNode","create","getElement","createElement","show","position","panel","current","image","Images","parent","refreshButton","DOM","hide","element","text","clearProgress","setProgress","value","get","error","classList","loadingImage","loading","sendRequest","promisify","params","callback","prefixURL","CloudCmd","p","encodeURI","url","load","jqXHR","response","statusText","status","data","assign","imgPosition","remove","overrides","_sendRequest","request","FS","patch","write","createDirectory","read","dataType","notLog","copy","from","to","names","pack","extract","move","rename","Config","Markdown","isObject","itype","isArray","isArrayBuf","type","headers","xhr","XMLHttpRequest","jonny","event","exec","notText","isContain","src","num","sub","handleError","promise","args","tryToCatch","encoded","encode","Dialog","IO","MenuShowedName","MenuContext","MenuContextFile","Number","String","m","s","o","requestAnimationFrame","setTimeout","MutationObserver","Symbol","noop","createCloudMenu","fm","options","menuData","createMenu","pickMenu","supermenu","menus","createSupermenu","createAlemanMenu","createLunesMenu","menu","config","Key","Buffer","Events","Info","alertNoFiles","uploadTo","wrap","nameModule","getOptions","func","beforeShow","beforeClick","getMenuData","isAuth","uploadFromCloud","isCurrent","yesFn","noFn","el","x","y","isShow","menuName","isPath","elements","init","menuBottom","menuDataFile","preDownload","optionsFile","listener","getCurrentPosition","currentName","path","RESTful","download","date","Date","files","file","selected","isDir","encodedPath","id","getIdBySrc","body","rect","Math","F9","ESC","key","isBind","currify","sort","order","Path","fullstore","Entities","keys","str","code","reg","Function","self"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"./modules/menu.js","sources":["file://cloudcmd/webpack/runtime/create_fake_namespace_object","file://cloudcmd/webpack/runtime/on_chunk_loaded","file://cloudcmd/webpack/runtime/jsonp_chunk_loading","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/@cloudcmd/create-element/lib/create-element.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/currify/lib/currify.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/emitify/lib/emitify.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/execon/lib/exec.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/itype/lib/itype.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jonny/lib/jonny.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/wraptile/lib/wraptile.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jonny/node_modules/try-catch/lib/try-catch.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/es6-promisify/dist/promisify.mjs","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/fullstore/lib/fullstore.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/rendy/lib/rendy.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/build-items.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/element-funcs.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/supermenu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/supermenu/lib/template.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/try-to-catch/lib/try-to-catch.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/smalltalk/lib/smalltalk.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/dialog.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/images.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/io/send-request.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/io/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/load.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/dom/rest.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-all-submenu-items/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-wrongly-selected/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/hide-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/set-position/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/build-menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/select/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/unselect-all/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/rules/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/vim.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/add-listeners.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/emit.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/render.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/jessy/lib/jessy.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/menu/get-menu-path.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/click/click.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/escape/escape.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/down/down.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/up.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/run/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/right.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/enter/enter.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/left.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/shift-g/shift-g.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/gg/gg.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/j/j.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/k/k.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/item-click/item-click.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/position/calculate.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/context-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/set-position/set-position.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/hydrate-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/bundle.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/aleman/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/menu/addons/mouse-leave/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/hooks.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/convert-menu-to-state/convert-menu-to-state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/cursor.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/move-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/add-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/apply-visibility/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/reset-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/put-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/enter-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/rules/leave-submenu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transformer.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/next.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/prev.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/show.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/hide.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/first.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/last.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/right.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/left.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/transformer/transforms/reset.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/getter/get-cursor/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/getter/getter.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/state/state.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/render/rules/build-menu/index.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/emit.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/vim.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/listen.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/compiler/compiler.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/dom.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/bundle.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/create-bundle-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/hydrate-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/render/render.js","file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/aleman/lunes/engine/engine.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/cloudmenu.js","file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/menu/pick-menu.js","file://cloudcmd//Users/coderaiser/cloudcmd/common/cloudfunc.js","file://cloudcmd//Users/coderaiser/cloudcmd/common/entity.js","file://cloudcmd/webpack/bootstrap","file://cloudcmd/webpack/runtime/define_property_getters","file://cloudcmd/webpack/runtime/global","file://cloudcmd/webpack/runtime/has_own_property","file://cloudcmd/webpack/runtime/make_namespace_object","file://cloudcmd/webpack/runtime/runtime_id","file://cloudcmd/webpack/startup"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif (chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor (var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--)\n\t\t\tdeferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (\n\t\t\t\t(priority & (1 === 0) || notFulfilled >= priority) &&\n\t\t\t\tObject.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))\n\t\t\t) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif (priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif (fulfilled) {\n\t\t\tdeferred.splice(i--, 1);\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};\n","__webpack_require__.b = document.baseURI || self.location.href;\n\n // object to store loaded and loading chunks\n // undefined = chunk not loaded, null = chunk preloaded/prefetched\n // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n var jsonpInstalledChunks = {854: 0,};\n __webpack_require__.O.j = (chunkId) => (jsonpInstalledChunks[chunkId] === 0);\n// install a JSONP callback for chunk loading\nvar __rspack_jsonp = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif (chunkIds.some((id) => (jsonpInstalledChunks[id] !== 0))) {\n\t\tfor (moduleId in moreModules) {\n\t\t\tif (__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif (runtime) var result = runtime(__webpack_require__);\n\t}\n\tif (parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor (; i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif (\n\t\t\t__webpack_require__.o(jsonpInstalledChunks, chunkId) &&\n\t\t\tjsonpInstalledChunks[chunkId]\n\t\t) {\n\t\t\tjsonpInstalledChunks[chunkId][0]();\n\t\t}\n\t\tjsonpInstalledChunks[chunkId] = 0;\n\t}\n\t\n\treturn __webpack_require__.O(result);\n\t\n};\n\nvar jsonpChunkLoadingGlobal = globalThis[\"rspackChunkcloudcmd\"] ||= [];\njsonpChunkLoadingGlobal.forEach(__rspack_jsonp.bind(null, 0));\njsonpChunkLoadingGlobal.push = __rspack_jsonp.bind(null, jsonpChunkLoadingGlobal.push.bind(jsonpChunkLoadingGlobal));\n","'use strict';\n\nconst currify = require('currify');\nconst query = (a) => document.querySelector(`[data-name=\"${a}\"]`);\n\nconst setAttribute = currify((el, obj, name) => el.setAttribute(name, obj[name]));\nconst set = currify((el, obj, name) => el[name] = obj[name]);\nconst not = currify((f, a) => !f(a));\nconst isCamelCase = (a) => a != a.toLowerCase();\n\nmodule.exports = (name, options = {}) => {\n const {\n dataName,\n notAppend,\n parent = document.body,\n uniq = true,\n ...restOptions\n } = options;\n \n const elFound = isElementPresent(dataName);\n \n if (uniq && elFound)\n return elFound;\n \n const el = document.createElement(name);\n \n if (dataName)\n el.dataset.name = dataName;\n \n Object.keys(restOptions)\n .filter(isCamelCase)\n .map(set(el, options));\n \n Object.keys(restOptions)\n .filter(not(isCamelCase))\n .map(setAttribute(el, options));\n \n if (!notAppend)\n parent.appendChild(el);\n \n return el;\n};\n\nmodule.exports.isElementPresent = isElementPresent;\n\nfunction isElementPresent(dataName) {\n if (!dataName)\n return;\n \n return query(dataName);\n}\n\n","'use strict';\n\nconst f = (fn) => [\n /*eslint no-unused-vars: 0*/\n function (a) {return fn(...arguments);},\n function (a, b) {return fn(...arguments);},\n function (a, b, c) {return fn(...arguments);},\n function (a, b, c, d) {return fn(...arguments);},\n function (a, b, c, d, e) {return fn(...arguments);},\n];\n\nconst currify = (fn, ...args) => {\n check(fn);\n \n if (args.length >= fn.length)\n return fn(...args);\n \n const again = (...args2) => {\n return currify(fn, ...[...args, ...args2]);\n };\n \n const count = fn.length - args.length - 1;\n const func = f(again)[count];\n \n return func || again;\n};\n\nmodule.exports = currify;\n\nfunction check(fn) {\n if (typeof fn !== 'function')\n throw Error('fn should be function!');\n}\n\n","'use strict';\n\nmodule.exports = Emitify;\n\nfunction Emitify() {\n if (!(this instanceof Emitify))\n return new Emitify();\n \n this._all = {};\n}\n\nEmitify.prototype.on = function(event, callback) {\n const funcs = this._all[event];\n \n check(event, callback);\n \n if (funcs)\n funcs.push(callback);\n else\n this._all[event] = [callback];\n \n return this;\n};\n\nEmitify.prototype.addListener =\nEmitify.prototype.on;\n\nEmitify.prototype.once = function(event, callback) {\n const self = this;\n \n check(event, callback);\n \n this.on(event, function fn(...args) {\n callback(...args);\n self.off(event, fn);\n });\n \n return this;\n};\n\nEmitify.prototype.off = function(event, callback) {\n const events = this._all[event] || [];\n let index = events.indexOf(callback);\n \n check(event, callback);\n \n while (~index) {\n events.splice(index, 1);\n index = events.indexOf(callback);\n }\n \n return this;\n};\n\nEmitify.prototype.removeListener =\nEmitify.prototype.off;\n\nEmitify.prototype.emit = function(event, ...args) {\n const funcs = this._all[event];\n \n checkEvent(event);\n \n if (!funcs && event === 'error')\n throw args[0];\n \n if (!funcs)\n return this;\n \n for (const fn of funcs) {\n fn(...args);\n }\n \n return this;\n};\n\nEmitify.prototype.removeAllListeners = function(event) {\n checkEvent(event);\n \n this._all[event] = [];\n \n return this;\n};\n\nfunction checkEvent(event) {\n if (typeof event !== 'string')\n throw Error('event should be string!');\n}\n\nfunction checkFn(callback) {\n if (typeof callback !== 'function')\n throw Error('callback should be function!');\n}\n\nfunction check(event, callback) {\n checkEvent(event);\n checkFn(callback);\n}\n\n","(function(global) {\n 'use strict';\n \n if (typeof module === 'object' && module.exports)\n module.exports = new ExecProto();\n else\n global.exec = new ExecProto();\n \n function ExecProto() {\n var slice = Array.prototype.slice,\n /**\n * function do save exec of function\n * @param callback\n * @param arg1\n * ...\n * @param argN\n */\n exec = function(callback) {\n var ret,\n isFunc = typeof callback === 'function',\n args = slice.call(arguments, 1);\n \n if (isFunc)\n ret = callback.apply(null, args);\n \n return ret;\n };\n \n /*\n * return function that calls callback with arguments\n */\n exec.with = function(callback) {\n var slice = Array.prototype.slice,\n args = slice.call(arguments, 1);\n \n return function() {\n var array = slice.call(arguments), \n all = args.concat(array);\n \n return callback.apply(null, all);\n };\n };\n \n /**\n * return save exec function\n * @param callback\n */\n exec.ret = function() {\n var result,\n args = slice.call(arguments);\n \n args.unshift(exec);\n result = exec.with.apply(null, args);\n \n return result;\n };\n \n /**\n * function do conditional save exec of function\n * @param condition\n * @param callback\n * @param func\n */\n exec.if = function(condition, callback, func) {\n var ret;\n \n if (condition)\n exec(callback);\n else\n exec(func, callback);\n \n return ret;\n };\n \n /**\n * exec function if it exist in object\n * \n * @param obj\n * @param name\n * @param arg\n */\n exec.ifExist = function(obj, name, arg) {\n var ret,\n func = obj && obj[name];\n \n if (func)\n func = func.apply(obj, arg);\n \n return ret;\n };\n \n exec.parallel = function(funcs, callback) {\n var ERROR = 'could not be empty!',\n keys = [],\n callbackWas = false,\n arr = [],\n obj = {},\n count = 0,\n countFuncs = 0,\n type = getType(funcs);\n \n if (!funcs)\n throw Error('funcs ' + ERROR);\n \n if (!callback)\n throw Error('callback ' + ERROR);\n \n switch(type) {\n case 'array':\n countFuncs = funcs.length;\n \n funcs.forEach(function(func, num) {\n exec(func, function() {\n checkFunc(num, arguments);\n });\n });\n break;\n \n case 'object':\n keys = Object.keys(funcs);\n countFuncs = keys.length;\n \n keys.forEach(function(name) {\n var func = funcs[name];\n \n exec(func, function() {\n checkFunc(name, arguments, obj);\n });\n });\n break;\n }\n \n function checkFunc(num, data) {\n var args = slice.call(data, 1),\n isLast = false,\n error = data[0],\n length = args.length;\n \n ++count;\n \n isLast = count === countFuncs;\n \n if (!error)\n if (length >= 2)\n arr[num] = args;\n else\n arr[num] = args[0];\n \n if (!callbackWas && (error || isLast)) {\n callbackWas = true;\n \n if (type === 'array')\n callback.apply(null, [error].concat(arr));\n else\n callback(error, arr);\n }\n }\n };\n \n /**\n * load functions thrue callbacks one-by-one\n * @param funcs {Array} - array of functions\n */\n exec.series = function(funcs, callback) {\n var fn,\n i = funcs.length,\n check = function(error) {\n var done;\n \n --i;\n \n if (!i || error) {\n done = true;\n exec(callback, error);\n }\n \n return done;\n };\n \n if (!Array.isArray(funcs))\n throw Error('funcs should be array!');\n \n fn = funcs.shift();\n \n exec(fn, function(error) {\n if (!check(error))\n exec.series(funcs, callback);\n });\n };\n \n exec.each = function(array, iterator, callback) {\n var listeners = array.map(function(item) {\n return iterator.bind(null, item);\n });\n \n if (!listeners.length)\n callback();\n else\n exec.parallel(listeners, callback);\n };\n \n exec.eachSeries = function(array, iterator, callback) {\n var listeners = array.map(function(item) {\n return iterator.bind(null, item);\n });\n \n if (typeof callback !== 'function')\n throw Error('callback should be function');\n \n if (!listeners.length)\n callback();\n else\n exec.series(listeners, callback);\n };\n \n /**\n * function execute param function in\n * try...catch block\n * \n * @param callback\n */\n exec.try = function(callback) {\n var ret;\n try {\n ret = callback();\n } catch(error) {\n ret = error;\n }\n \n return ret;\n };\n \n function getType(variable) {\n var regExp = new RegExp('\\\\s([a-zA-Z]+)'),\n str = {}.toString.call(variable),\n typeBig = str.match(regExp)[1],\n result = typeBig.toLowerCase();\n \n return result;\n } \n \n return exec;\n }\n})(this);\n","'use strict';\n\nmodule.exports = type;\n\nfor (const name of ['null', 'arrayBuffer', 'file', 'array', 'object']) {\n type[name] = typeOf.bind(null, name);\n}\n\nfor (const name of ['string', 'undefined', 'boolean', 'number', 'function']) {\n type[name] = typeOfSimple.bind(null, name);\n}\n\n/**\n * get type of variable\n *\n * @param variable\n */\nfunction type(variable) {\n const regExp = /\\s([a-zA-Z]+)/;\n const str = {}.toString.call(variable);\n const typeBig = str.match(regExp)[1];\n const result = typeBig.toLowerCase();\n \n return result;\n}\n\n/**\n * functions check is variable is type of name\n *\n * @param variable\n */\nfunction typeOf(name, variable) {\n return type(variable) === name;\n}\n\nfunction typeOfSimple(name, variable) {\n return typeof variable === name;\n}\n\n","'use strict';\n\nconst tryCatch = require('try-catch');\n\nconst {\n parse,\n stringify,\n} = JSON;\n\nmodule.exports.parse = (...args) => {\n const [, data] = tryCatch(parse, ...args);\n \n return data;\n};\n\nmodule.exports.stringify = (...args) => {\n const [, data] = tryCatch(stringify, ...args);\n \n return data;\n};\n\n","'use strict';\n\nconst wrap = (fn) => (...a) => (...b) => fn(...a, ...b);\n\nmodule.exports = (fn, ...a) => {\n check(fn);\n \n if (a.length)\n return wrap(fn)(...a);\n \n return wrap(fn);\n};\n\nfunction check(fn) {\n if (typeof fn !== 'function')\n throw Error('fn should be a function!');\n}\n\n","'use strict';\n\nmodule.exports = (fn, ...args) => {\n try {\n return [null, fn(...args)];\n } catch(e) {\n return [e];\n }\n};\n\n","var customArgumentsToken=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\";export function promisify(a){if(\"function\"!=typeof a)throw new TypeError(\"Argument to promisify must be a function\");var b=a[customArgumentsToken],c=promisify.Promise||Promise;if(\"function\"!=typeof c)throw new Error(\"No Promise implementation found; do you need a polyfill?\");return function(){for(var d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return new c((c,d)=>{e.push(function(a){if(a)return d(a);for(var e=arguments.length,f=Array(1<e?e-1:0),g=1;g<e;g++)f[g-1]=arguments[g];if(1===f.length||!b)return c(f[0]);var h={};f.forEach((a,c)=>{var d=b[c];d&&(h[d]=a)}),c(h)}),a.apply(this,e)})}}promisify.argumentNames=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\",promisify.Promise=void 0;\n","export function fullstore(value) {\n const data = {\n value,\n };\n \n return (...args) => {\n const [value] = args;\n \n if (!args.length)\n return data.value;\n \n data.value = value;\n \n return value;\n };\n}\n","const isString = (a) => typeof a === 'string';\nconst constant = (a) => () => a;\nconst {keys} = Object;\n\nexport const rendy = (template, values, modifiers = null) => {\n check(template, values);\n \n let result = template;\n const names = !modifiers ? keys(values) : template.match(/{{(.*?)}}/g);\n \n for (const key of names) {\n const [parsedKey, value] = parseValue(key, values, modifiers);\n const str = constant(value);\n \n while (result.includes(parsedKey))\n result = result.replace(parsedKey, str);\n }\n \n if (result.includes('{{'))\n result = result.replace(/{{.*?}}/g, '');\n \n return result;\n};\n\nfunction check(template, values) {\n if (!isString(template))\n throw Error('template should be a string!');\n \n if (typeof values !== 'object')\n throw Error('values should be an object!');\n}\n\nfunction parseValue(key, values, modifiers) {\n if (!modifiers)\n return [\n `{{ ${key} }}`,\n values[key],\n ];\n \n const preparedKey = key\n .replaceAll('{{', '')\n .replaceAll('}}', '')\n .replaceAll(' ', '');\n \n const value = values[preparedKey] || '';\n \n if (!preparedKey.includes('|'))\n return [key, value];\n \n const [name, modifierName] = preparedKey.split('|');\n const fn = modifiers[modifierName];\n const currentValue = values[name];\n \n if (!fn)\n return [key, currentValue];\n \n return [key, fn(currentValue)];\n}\n","import {rendy} from 'rendy';\nimport * as TEMPLATE from './template.js';\n\nconst isObj = (a) => typeof a === 'object';\nconst DATA_MENU = 'data-menu=\"js-submenu\"';\n\nconst {entries} = Object;\n\nexport default function buildItems(menuData, menuFuncs, options, path = '') {\n let items = '';\n \n if (path)\n path += '.';\n \n for (const [name, data] of entries(menuData)) {\n let nameIcon;\n let subitems = '';\n let className = '';\n let attribute = '';\n \n const pathName = path + name;\n \n if (!isObj(data)) {\n menuFuncs[pathName] = data;\n } else {\n subitems = rendy(TEMPLATE.MAIN, {\n items: buildItems(data, menuFuncs, options, pathName),\n });\n \n className = ' menu-submenu';\n attribute = ` ${DATA_MENU}`;\n }\n \n if (options.icon) {\n nameIcon = name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n \n className += ` icon icon-${nameIcon}`;\n }\n \n items += rendy(TEMPLATE.ITEM, {\n name,\n subitems,\n className,\n attribute,\n path: pathName,\n });\n }\n \n return items;\n}\n","export default class ElementFuncsProto {\n getItem(element) {\n if (this.isName(element))\n return element.parentElement;\n \n return element;\n }\n \n getName(element) {\n if (!element)\n return null;\n \n if (this.isName(element))\n return element;\n \n return element.querySelector('[data-menu-path]');\n }\n \n isName(element) {\n if (!element)\n return false;\n \n return element.hasAttribute('data-menu-path');\n }\n \n isItem(element) {\n return this.checkElementsName(element, 'js-menu-item');\n }\n \n isMenu(element) {\n return this.checkElementsName(element, 'js-menu');\n }\n \n checkElementsName(element, nameElement, attribute) {\n if (!attribute)\n attribute = 'data-name';\n \n if (element) {\n const name = element.getAttribute(attribute);\n \n if (name === nameElement)\n return true;\n }\n \n return false;\n }\n \n isSubMenu(element) {\n const attribute = 'data-menu';\n const value = 'js-submenu';\n const item = this.getItem(element);\n \n return this.checkElementsName(item, value, attribute);\n }\n}\n","import '../css/supermenu.css';\nimport createElement from '@cloudcmd/create-element';\nimport buildItems from './build-items.js';\nimport ElementFuncsProto from './element-funcs.js';\n\nconst isNumber = (a) => typeof a === 'number';\nconst exec = (f, ...a) => f?.(...a);\n\nexport function supermenu(element, options, menuData) {\n if (!(this instanceof supermenu))\n return new supermenu(element, options, menuData);\n \n const ElementFuncs = new ElementFuncsProto();\n \n let Options = {};\n let Element;\n let ElementHeight;\n let ElementWidth;\n let ElementEvent;\n \n if (menuData) {\n Element = element;\n ElementEvent = Element;\n Options = options;\n } else if (options) {\n Element = element;\n ElementEvent = Element;\n menuData = options;\n } else {\n Element = document.body;\n ElementEvent = window;\n menuData = element;\n }\n \n const MenuFuncs = {};\n const ElementMenu = createMenu(menuData);\n \n ElementEvent.addEventListener('click', onClick);\n \n function createMenu(menuData) {\n const items = buildItems(menuData, MenuFuncs, Options);\n \n const menu = createElement('ul', {\n dataName: 'js-menu',\n className: 'menu menu-hidden',\n innerHTML: items,\n parent: Element,\n uniq: false,\n });\n \n return menu;\n }\n \n this.show = showMenuElement;\n this.hide = hideMenuElement;\n \n this.addContextMenuListener = () => {\n ElementEvent.addEventListener('contextmenu', onContextMenu);\n };\n \n this.removeContextMenuListener = () => {\n ElementEvent.addEventListener('contextmenu', onContextMenu);\n };\n \n this.remove = removeElement;\n \n function removeElement() {\n ElementEvent.removeEventListener('click', onClick);\n ElementEvent.removeEventListener('contextmenu', onContextMenu);\n \n Element.removeChild(ElementMenu);\n }\n \n function checkElement(target, position) {\n let element = ElementFuncs.getItem(target);\n let isName = ElementFuncs.isName(element);\n let isItem = ElementFuncs.isItem(element);\n let isSub = ElementFuncs.isSubMenu(element);\n \n if (!isName || !isItem) {\n element = document.elementFromPoint(position.x, position.y);\n isSub = ElementFuncs.isSubMenu(element);\n isName = ElementFuncs.isName(element);\n isItem = ElementFuncs.isItem(element);\n }\n \n return {\n name: isName,\n item: isItem,\n sub: isSub,\n };\n }\n \n function onClick(event, checkResult) {\n event.stopPropagation();\n \n const {\n afterClick,\n beforeClick,\n beforeHide,\n afterHide,\n name,\n } = Options;\n \n const element = event.target;\n \n const is = checkResult || checkElement(element, {\n x: event.clientX,\n y: event.clientY,\n });\n \n const notClick = exec(beforeClick, name);\n \n if (is.sub)\n return event.preventDefault();\n \n exec(beforeHide);\n hideMenuElement();\n exec(afterHide);\n \n if (!notClick && (is.name || is.item)) {\n const itemData = getMenuItemData(element);\n \n exec(itemData);\n exec(afterClick);\n }\n }\n \n function onContextMenu(event) {\n event.preventDefault();\n \n const element = event.target;\n const x = event.clientX;\n const y = event.clientY;\n \n const is = checkElement(element, {\n x,\n y,\n });\n \n if (is.name || is.item || is.sub)\n return onClick(event, is);\n \n hideMenuElement();\n showMenuElement(x, y);\n }\n \n function setMenuPosition(x, y) {\n const isNumberX = isNumber(x);\n const isNumberY = isNumber(y);\n const heightMenu = getMenuHeight();\n const widthMenu = getMenuWidth();\n const heightInner = globalThis.innerHeight;\n const widthInner = globalThis.innerWidth;\n \n if (widthInner < widthMenu + x) {\n x -= widthMenu;\n \n if (x < 0)\n x = 0;\n }\n \n if (heightInner < heightMenu + y) {\n y -= heightMenu;\n \n if (y < 0)\n y = 0;\n }\n \n if (isNumberX)\n ElementMenu.style.left = `${x}px`;\n \n if (isNumberY)\n ElementMenu.style.top = y - 14 + 'px';\n }\n \n function showMenuElement(x, y) {\n const {\n name,\n beforeShow,\n afterShow,\n } = Options;\n \n const params = {\n x,\n y,\n name,\n };\n \n const isShow = exec(beforeShow, params);\n \n if (isShow || isShow !== false) {\n ElementMenu.classList.remove('menu-hidden');\n setMenuPosition(params.x, params.y);\n exec(afterShow, params);\n }\n }\n \n function hideMenuElement() {\n const notHide = exec(Options.beforeClose);\n \n if (!notHide)\n ElementMenu.classList.add('menu-hidden');\n }\n \n function getMenuItemData(element) {\n const nameElement = ElementFuncs.getName(element);\n \n if (!nameElement)\n return null;\n \n const path = nameElement.getAttribute('data-menu-path');\n \n return MenuFuncs[path];\n }\n \n function getMenuHeight() {\n if (!ElementHeight) {\n const {height} = getComputedStyle(ElementMenu);\n \n ElementHeight = parseInt(height, 10);\n }\n \n return ElementHeight;\n }\n \n function getMenuWidth() {\n if (!ElementWidth) {\n const {width} = getComputedStyle(ElementMenu);\n \n ElementWidth = parseInt(width, 10);\n }\n \n return ElementWidth;\n }\n}\n","export const MAIN = '<ul data-name=\"js-menu\" class=\"menu menu-hidden\">{{ items }}</ul>';\nexport const ITEM = '<li data-name=\"js-menu-item\" class=\"menu-item{{ className }}\"{{ attribute }}>' +\n '<label data-menu-path=\"{{ path }}\">{{ name }}</label>' +\n '{{ subitems }}' +\n '</li>';\n","const isFn = (a) => typeof a === 'function';\n\nexport const tryToCatch = async (fn, ...args) => {\n check(fn);\n \n try {\n return [null, await fn(...args)];\n } catch(e) {\n return [e];\n }\n};\n\nfunction check(fn) {\n if (!isFn(fn))\n throw Error('fn should be a function!');\n}\n","import '../css/smalltalk.css';\nimport currify from 'currify';\nimport createElement from '@cloudcmd/create-element';\nimport {fullstore} from 'fullstore';\n\nconst isBool = (a) => typeof a === 'boolean';\n\nconst keyDown = currify(keyDown_);\n\nconst BUTTON_OK = {\n ok: 'OK',\n};\n\nconst BUTTON_OK_CANCEL = {\n ok: 'OK',\n cancel: 'Cancel',\n};\n\nconst zIndex = fullstore(100);\n\nexport const alert = (title, msg, options) => {\n const buttons = getButtons(options) || BUTTON_OK;\n return showDialog(title, msg, '', buttons, options);\n};\n\nexport const prompt = (title, msg, value = '', options) => {\n const type = getType(options);\n const val = String(value).replace(/\"/g, '"');\n \n const valueStr = `<input type=\"${type}\" value=\"${val}\" data-name=\"js-input\">`;\n const buttons = getButtons(options) || BUTTON_OK_CANCEL;\n \n return showDialog(title, msg, valueStr, buttons, options);\n};\n\nexport const confirm = (title, msg, options) => {\n const buttons = getButtons(options) || BUTTON_OK_CANCEL;\n \n return showDialog(title, msg, '', buttons, options);\n};\n\nexport const progress = (title, message, options) => {\n const valueStr = `\n <progress value=\"0\" data-name=\"js-progress\" class=\"progress\" max=\"100\"></progress>\n <span data-name=\"js-counter\">0%</span>\n `;\n \n const buttons = {\n cancel: 'Abort',\n };\n \n const promise = showDialog(title, message, valueStr, buttons, options);\n const {ok, dialog} = promise;\n const resolve = ok();\n \n for (const el of find(dialog, ['cancel'])) {\n el.focus();\n }\n \n Object.assign(promise, {\n setProgress(count) {\n const [elProgress] = find(dialog, ['progress']);\n const [elCounter] = find(dialog, ['counter']);\n \n elProgress.value = count;\n elCounter.textContent = `${count}%`;\n \n if (count === 100) {\n remove(dialog);\n resolve();\n }\n },\n \n remove() {\n remove(dialog);\n },\n });\n \n return promise;\n};\n\nfunction getButtons(options = {}) {\n const {buttons} = options;\n \n if (!buttons)\n return null;\n \n return buttons;\n}\n\nfunction getType(options = {}) {\n const {type} = options;\n \n if (type === 'password')\n return 'password';\n \n return 'text';\n}\n\nfunction getTemplate(title, msg, value, buttons) {\n const encodedMsg = msg.replace(/\\n/g, '<br>');\n \n return `<div class=\"page\">\n <div data-name=\"js-close\" class=\"close-button\"></div>\n <header>${title}</header>\n <div class=\"content-area\">${encodedMsg}${value}</div>\n <div class=\"action-area\">\n <div class=\"button-strip\">\n ${parseButtons(buttons)}\n </div>\n </div>\n </div>`;\n}\n\nfunction parseButtons(buttons) {\n const names = Object.keys(buttons);\n const parse = currify((buttons, name, i) => `<button\n tabindex=${i}\n data-name=\"js-${name.toLowerCase()}\">\n ${buttons[name]}\n </button>`);\n \n return names\n .map(parse(buttons))\n .join('');\n}\n\nfunction showDialog(title, msg, value, buttons, options) {\n const ok = fullstore();\n const cancel = fullstore();\n \n const closeButtons = [\n 'cancel',\n 'close',\n 'ok',\n ];\n \n const promise = new Promise((resolve, reject) => {\n const noCancel = options && isBool(options.cancel) && !options.cancel;\n const empty = () => {};\n const rejectError = () => reject(Error());\n \n ok(resolve);\n cancel(noCancel ? empty : rejectError);\n });\n \n const innerHTML = getTemplate(title, msg, value, buttons);\n \n const dialog = createElement('div', {\n innerHTML,\n className: 'smalltalk',\n style: `z-index: ${zIndex(zIndex() + 1)}`,\n });\n \n for (const el of find(dialog, ['ok', 'input']))\n el.focus();\n \n for (const el of find(dialog, ['input'])) {\n el.setSelectionRange(0, value.length);\n }\n \n addListenerAll('click', dialog, closeButtons, (event) => {\n closeDialog(event.target, dialog, ok(), cancel());\n });\n \n for (const event of ['click', 'contextmenu'])\n dialog.addEventListener(event, (e) => {\n e.stopPropagation();\n \n for (const el of find(dialog, ['ok', 'input']))\n el.focus();\n });\n \n dialog.addEventListener('keydown', keyDown(dialog, ok(), cancel()));\n \n return Object.assign(promise, {\n dialog,\n ok,\n });\n}\n\nfunction keyDown_(dialog, ok, cancel, event) {\n const KEY = {\n ENTER: 13,\n ESC: 27,\n TAB: 9,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n };\n \n const {keyCode} = event;\n const el = event.target;\n \n const namesAll = [\n 'ok',\n 'cancel',\n 'input',\n ];\n \n const names = find(dialog, namesAll).map(getDataName);\n \n switch(keyCode) {\n case KEY.ENTER:\n closeDialog(el, dialog, ok, cancel);\n event.preventDefault();\n break;\n \n case KEY.ESC:\n remove(dialog);\n cancel();\n break;\n \n case KEY.TAB:\n if (event.shiftKey)\n tab(dialog, names);\n \n tab(dialog, names);\n event.preventDefault();\n break;\n \n default:\n [\n 'left',\n 'right',\n 'up',\n 'down',\n ]\n .filter((name) => keyCode === KEY[name.toUpperCase()])\n .forEach(() => {\n changeButtonFocus(dialog, names);\n });\n \n break;\n }\n \n event.stopPropagation();\n}\n\nfunction getDataName(el) {\n return el\n .getAttribute('data-name')\n .replace('js-', '');\n}\n\nconst getName = (activeName) => {\n if (activeName === 'cancel')\n return 'ok';\n \n return 'cancel';\n};\n\nfunction changeButtonFocus(dialog, names) {\n const active = document.activeElement;\n const activeName = getDataName(active);\n const isButton = /ok|cancel/.test(activeName);\n const count = names.length - 1;\n \n if (activeName === 'input' || !count || !isButton)\n return;\n \n const name = getName(activeName);\n \n for (const el of find(dialog, [name])) {\n el.focus();\n }\n}\n\nconst getIndex = (count, index) => {\n if (index === count)\n return 0;\n \n return index + 1;\n};\n\nfunction tab(dialog, names) {\n const active = document.activeElement;\n const activeName = getDataName(active);\n const count = names.length - 1;\n \n const activeIndex = names.indexOf(activeName);\n const index = getIndex(count, activeIndex);\n \n const name = names[index];\n \n for (const el of find(dialog, [name]))\n el.focus();\n}\n\nfunction closeDialog(el, dialog, ok, cancel) {\n const name = el\n .getAttribute('data-name')\n .replace('js-', '');\n \n if (/close|cancel/.test(name)) {\n cancel();\n remove(dialog);\n \n return;\n }\n \n let value = null;\n \n for (const el of find(dialog, ['input'])) {\n ({value} = el);\n }\n \n ok(value);\n remove(dialog);\n}\n\nconst query = currify((element, name) => element.querySelector(`[data-name=\"js-${name}\"]`));\n\nfunction find(element, names) {\n const elements = names\n .map(query(element))\n .filter(Boolean);\n \n return elements;\n}\n\nfunction addListenerAll(event, parent, elements, fn) {\n for (const el of find(parent, elements)) {\n el.addEventListener(event, fn);\n }\n}\n\nfunction remove(dialog) {\n const {parentElement} = dialog;\n \n if (parentElement)\n parentElement.removeChild(dialog);\n}\n","import {tryToCatch} from 'try-to-catch';\nimport * as smalltalk from 'smalltalk';\n\nconst title = 'Cloud Commander';\n\nexport const alert = (...a) => smalltalk.alert(title, ...a, {\n cancel: false,\n});\n\nexport const prompt = (...a) => tryToCatch(smalltalk.prompt, title, ...a);\nexport const confirm = (...a) => tryToCatch(smalltalk.confirm, title, ...a);\nexport const progress = (...a) => smalltalk.progress(title, ...a);\n\nalert.noFiles = () => {\n return smalltalk.alert(title, 'No files selected!', {\n cancel: false,\n });\n};\n","/* global DOM */\nimport createElement from '@cloudcmd/create-element';\n\nconst LOADING = 'loading';\nconst HIDDEN = 'hidden';\nconst ERROR = 'error';\n\nconst getLoadingType = () => isSVG() ? '-svg' : '-gif';\n\nexport const get = getElement;\n\n/**\n * check SVG SMIL animation support\n */\nfunction isSVG() {\n const createNS = document.createElementNS;\n const SVG_URL = 'http://www.w3.org/2000/svg';\n \n if (!createNS)\n return false;\n \n const create = createNS.bind(document);\n const svgNode = create(SVG_URL, 'animate');\n const name = svgNode.toString();\n \n return /SVGAnimate/.test(name);\n}\n\nfunction getElement() {\n return createElement('span', {\n id: 'js-status-image',\n className: 'icon',\n dataName: 'progress',\n notAppend: true,\n });\n}\n\n/* Функция создаёт картинку загрузки */\nexport const loading = () => {\n const element = getElement();\n const {classList} = element;\n const loadingImage = LOADING + getLoadingType();\n \n classList.add(LOADING, loadingImage);\n classList.remove(ERROR, HIDDEN);\n \n return element;\n};\n\n/* Функция создаёт картинку ошибки загрузки */\nexport const error = () => {\n const element = getElement();\n const {classList} = element;\n const loadingImage = LOADING + getLoadingType();\n \n classList.add(ERROR);\n classList.remove(HIDDEN, LOADING, loadingImage);\n \n return element;\n};\n\nshow.load = show;\nshow.error = (text) => {\n const image = Images.error();\n \n DOM.show(image);\n image.title = text;\n \n return image;\n};\n\n/**\n* Function shows loading spinner\n* position = {top: true};\n*/\nexport function show(position, panel) {\n const image = Images.loading();\n const parent = image.parentElement;\n const refreshButton = DOM.getRefreshButton(panel);\n \n let current;\n \n if (position === 'top') {\n current = refreshButton.parentElement;\n } else {\n current = DOM.getCurrentFile();\n \n if (current)\n current = DOM.getByDataName('js-name', current);\n else\n current = refreshButton.parentElement;\n }\n \n if (!parent || parent && parent !== current)\n current.appendChild(image);\n \n DOM.show(image);\n \n return image;\n}\n\n/**\n* hide load image\n*/\nexport function hide() {\n const element = Images.get();\n \n DOM.hide(element);\n \n return Images;\n}\n\nexport const setProgress = (value, title) => {\n const DATA = 'data-progress';\n const element = Images.get();\n \n if (!element)\n return Images;\n \n element.setAttribute(DATA, `${value}%`);\n \n if (title)\n element.title = title;\n \n return Images;\n};\n\nexport const clearProgress = () => {\n const DATA = 'data-progress';\n const element = Images.get();\n \n if (!element)\n return Images;\n \n element.setAttribute(DATA, '');\n element.title = '';\n \n return Images;\n};\n\nconst Images = {\n clearProgress,\n setProgress,\n show,\n hide,\n get,\n error,\n loading,\n};\n","/* global CloudCmd */\nimport {promisify} from 'es6-promisify';\nimport * as Images from '#dom/images';\nimport * as load from '#dom/load';\n\nexport const sendRequest = promisify((params, callback) => {\n const p = params;\n const {prefixURL} = CloudCmd;\n \n p.url = prefixURL + p.url;\n p.url = encodeURI(p.url);\n \n p.url = replaceHash(p.url);\n \n load.ajax({\n method: p.method,\n url: p.url,\n data: p.data,\n dataType: p.dataType,\n error: (jqXHR) => {\n const response = jqXHR.responseText;\n \n const {statusText, status} = jqXHR;\n \n const text = status === 404 ? response : statusText;\n \n callback(Error(text));\n },\n success: (data) => {\n Images.hide();\n \n if (!p.notLog)\n CloudCmd.log(data);\n \n callback(null, data);\n },\n });\n});\n\nexport const _replaceHash = replaceHash;\n\nfunction replaceHash(url) {\n /*\n * if we send ajax request -\n * no need in hash so we escape #\n */\n return url.replace(/#/g, '%23');\n}\n","import {FS} from '#common/cloudfunc';\nimport {sendRequest as _sendRequest} from './send-request.js';\n\nconst {assign} = Object;\n\nconst imgPosition = {\n top: true,\n};\n\nexport const remove = async (url, data, overrides = {}) => {\n const {\n sendRequest = _sendRequest,\n } = overrides;\n \n const request = {\n method: 'DELETE',\n url: FS + url,\n imgPosition: {\n top: Boolean(data),\n },\n };\n \n if (data)\n assign(request, {\n data,\n url: `${request.url}?files`,\n });\n \n return await sendRequest(request);\n};\n\nexport const patch = async (url, data) => {\n return await _sendRequest({\n method: 'PATCH',\n url: FS + url,\n data,\n imgPosition,\n });\n};\n\nexport const write = async (url, data) => {\n return await _sendRequest({\n method: 'PUT',\n url: FS + url,\n data,\n imgPosition,\n });\n};\n\nexport const createDirectory = async (url, overrides = {}) => {\n const {\n sendRequest = _sendRequest,\n } = overrides;\n \n return await sendRequest({\n method: 'PUT',\n url: `${FS}${url}?dir`,\n imgPosition,\n });\n};\n\nexport const read = async (url, dataType = 'text') => {\n const notLog = !url.includes('?');\n \n return await _sendRequest({\n method: 'GET',\n url: FS + url,\n notLog,\n dataType,\n });\n};\n\nexport const copy = async (from, to, names) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/copy',\n data: {\n from,\n to,\n names,\n },\n imgPosition,\n });\n};\n\nexport const pack = async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/pack',\n data,\n });\n};\n\nexport const extract = async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/extract',\n data,\n });\n};\n\nexport const move = async (from, to, names) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/move',\n data: {\n from,\n to,\n names,\n },\n imgPosition,\n });\n};\n\nexport const rename = async (from, to) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/rename',\n data: {\n from,\n to,\n },\n imgPosition,\n });\n};\n\nexport const Config = {\n read: async () => {\n return await _sendRequest({\n method: 'GET',\n url: '/config',\n imgPosition,\n notLog: true,\n });\n },\n \n write: async (data) => {\n return await _sendRequest({\n method: 'PATCH',\n url: '/config',\n data,\n imgPosition,\n });\n },\n};\n\nexport const Markdown = {\n read: async (url) => {\n return await _sendRequest({\n method: 'GET',\n url: `/markdown${url}`,\n imgPosition,\n notLog: true,\n });\n },\n \n render: async (data) => {\n return await _sendRequest({\n method: 'PUT',\n url: '/markdown',\n data,\n imgPosition,\n notLog: true,\n });\n },\n};\n","import itype from 'itype';\nimport jonny from 'jonny';\nimport Emitify from 'emitify';\nimport exec from 'execon';\nimport * as Images from '#dom/images';\n\n/**\n * Function gets id by src\n * @param src\n *\n * Example: http://domain.com/1.js -> 1_js\n */\nexport function getIdBySrc(src) {\n const isStr = itype.string(src);\n \n if (!isStr)\n return;\n \n if (src.includes(':'))\n src += '-join';\n \n const num = src.lastIndexOf('/') + 1;\n const sub = src.substr(src, num);\n \n const id = src\n .replace(sub, '')\n .replace(/\\./g, '-');\n \n return id;\n}\n\n/**\n * load file countent via ajax\n *\n * @param params\n */\nexport const ajax = (params) => {\n const p = params;\n const isObject = itype.object(p.data);\n const isArray = itype.array(p.data);\n const isArrayBuf = itype(p.data) === 'arraybuffer';\n const type = p.type || p.method || 'GET';\n \n const {headers = {}} = p;\n \n const xhr = new XMLHttpRequest();\n \n xhr.open(type, p.url, true);\n \n for (const name of Object.keys(headers)) {\n const value = headers[name];\n xhr.setRequestHeader(name, value);\n }\n \n if (p.responseType)\n xhr.responseType = p.responseType;\n \n let data;\n \n if (!isArrayBuf && isObject || isArray)\n data = jonny.stringify(p.data);\n else\n ({data} = p);\n \n xhr.onreadystatechange = (event) => {\n const xhr = event.target;\n const OK = 200;\n \n if (xhr.readyState !== xhr.DONE)\n return;\n \n Images.clearProgress();\n \n const TYPE_JSON = 'application/json';\n const type = xhr.getResponseHeader('content-type');\n \n if (xhr.status !== OK)\n return exec(p.error, xhr);\n \n const notText = p.dataType !== 'text';\n const isContain = type.includes(TYPE_JSON);\n \n let data = xhr.response;\n \n if (type && isContain && notText)\n data = jonny.parse(xhr.response) || xhr.response;\n \n exec(p.success, data, xhr.statusText, xhr);\n };\n \n xhr.send(data);\n};\n\nexport const put = (url, body) => {\n const emitter = Emitify();\n const xhr = new XMLHttpRequest();\n \n url = encodeURI(url).replace(/#/g, '#');\n \n xhr.open('put', url, true);\n \n xhr.upload.onprogress = (event) => {\n if (!event.lengthComputable)\n return;\n \n const percent = event.loaded / event.total * 100;\n const count = Math.round(percent);\n \n emitter.emit('progress', count);\n };\n \n xhr.onreadystatechange = () => {\n const over = xhr.readyState === xhr.DONE;\n const OK = 200;\n \n if (!over)\n return;\n \n if (xhr.status === OK) {\n emitter.emit('progress', 100);\n return emitter.emit('end');\n }\n \n const error = Error(xhr.responseText);\n emitter.emit('error', error);\n };\n \n xhr.send(body);\n \n return emitter;\n};\n","import {tryToCatch} from 'try-to-catch';\nimport * as Dialog from '#dom/dialog';\nimport * as Images from '#dom/images';\nimport {encode} from '#common/entity';\nimport * as IO from './io/index.js';\n\nconst handleError = (promise) => async (...args) => {\n const [e, data] = await tryToCatch(promise, ...args);\n \n if (!e)\n return [e, data];\n \n const encoded = encode(e.message);\n \n Images.show.error(encoded);\n Dialog.alert(encoded);\n \n return [e, data];\n};\n\nexport const remove = handleError(IO.remove);\nexport const patch = handleError(IO.patch);\nexport const write = handleError(IO.write);\nexport const createDirectory = handleError(IO.createDirectory);\nexport const read = handleError(IO.read);\nexport const copy = handleError(IO.copy);\nexport const pack = handleError(IO.pack);\nexport const extract = handleError(IO.extract);\nexport const move = handleError(IO.move);\nexport const rename = handleError(IO.rename);\n\nexport const Config = {\n read: handleError(IO.Config.read),\n write: handleError(IO.Config.write),\n};\n\nexport const Markdown = {\n read: handleError(IO.Markdown.read),\n render: handleError(IO.Markdown.render),\n};\n","import exec from 'execon';\nimport wrap from 'wraptile';\nimport createElement from '@cloudcmd/create-element';\nimport {getIdBySrc} from '#dom/load';\nimport * as RESTful from '#dom/rest';\nimport {FS} from '#common/cloudfunc';\nimport {createCloudMenu} from './cloudmenu.js';\n\nconst {CloudCmd, DOM} = globalThis;\nconst {config, Key} = CloudCmd;\n\nconst {\n Buffer,\n Events,\n Dialog,\n Images,\n} = DOM;\n\nconst Info = DOM.CurrentInfo;\nconst alertNoFiles = Dialog.alert.noFiles;\nconst uploadTo = wrap(_uploadTo);\n\nlet MenuShowedName;\nlet MenuContext;\nlet MenuContextFile;\n\nexport const ENABLED = false;\n\nCloudCmd.Menu = {\n init,\n show,\n hide,\n};\n\nexport async function init() {\n const {isAuth, menuDataFile} = getFileMenuData();\n \n const fm = DOM.getFM();\n const menuData = getMenuData(isAuth);\n \n const options = getOptions({\n type: 'context',\n });\n \n const optionsFile = getOptions({\n type: 'file',\n });\n \n const {name} = fm.dataset;\n \n MenuContext = await createCloudMenu(name, options, menuData);\n MenuContextFile = await createCloudMenu(name, optionsFile, menuDataFile);\n \n MenuContext.addContextMenuListener();\n MenuContextFile.addContextMenuListener();\n \n Events.addKey(listener);\n}\n\nexport function hide() {\n MenuContext.hide();\n MenuContextFile.hide();\n}\n\nexport function show(position) {\n const {x, y} = getPosition(position);\n \n MenuContext.show(x, y);\n MenuContextFile.show(x, y);\n \n Images.hide();\n}\n\nfunction getPosition(position) {\n if (position)\n return {\n x: position.x,\n y: position.y,\n };\n \n return getCurrentPosition();\n}\n\nfunction getMenuNameByEl(el) {\n if (!el)\n return 'context';\n \n const name = DOM.getCurrentName(el);\n \n if (name === '..')\n return 'context';\n \n return 'contextFile';\n}\n\nfunction getOptions({type}) {\n let name;\n let func;\n \n if (type === 'context') {\n name = 'context';\n func = Key.unsetBind;\n } else if (type === 'file') {\n name = 'contextFile';\n }\n \n const options = {\n icon: true,\n infiniteScroll: false,\n beforeClose: Key.setBind,\n beforeHide: Key.setBind,\n beforeShow: exec.with(beforeShow, func),\n beforeClick,\n name,\n };\n \n return options;\n}\n\nfunction getMenuData(isAuth) {\n const menu = {\n 'Paste': Buffer.paste,\n 'New': {\n File: DOM.promptNewFile,\n Directory: DOM.promptNewDir,\n },\n 'Upload': () => {\n CloudCmd.Upload.show();\n },\n 'Upload From Cloud': uploadFromCloud,\n 'Toggle File Selection': DOM.toggleSelectedFile,\n '(Un)Select All': DOM.toggleAllSelectedFiles,\n };\n \n if (isAuth)\n menu['Log Out'] = CloudCmd.logOut;\n \n return menu;\n}\n\nfunction getFileMenuData() {\n const isAuth = CloudCmd.config('auth');\n \n const menuBottom = getMenuData(isAuth);\n const menuTop = {\n 'View': () => {\n CloudCmd.View.show();\n },\n 'Edit': () => {\n const name = config('vim') ? 'EditFileVim' : 'EditFile';\n CloudCmd[name].show();\n },\n 'Rename': () => {\n setTimeout(DOM.renameCurrent, 100);\n },\n 'Delete': () => {\n CloudCmd.Operation.show('delete');\n },\n 'Pack': () => {\n CloudCmd.Operation.show('pack');\n },\n 'Extract': () => {\n CloudCmd.Operation.show('extract');\n },\n 'Download': preDownload,\n 'Upload To Cloud': uploadTo('Cloud'),\n 'Cut': () => {\n isCurrent(Buffer.cut, alertNoFiles);\n },\n 'Copy': () => {\n isCurrent(Buffer.copy, alertNoFiles);\n },\n };\n \n const menuDataFile = {\n ...menuTop,\n ...menuBottom,\n };\n \n return {\n isAuth,\n menuDataFile,\n };\n}\n\nfunction isCurrent(yesFn, noFn) {\n if (Info.name !== '..')\n return yesFn();\n \n noFn();\n}\n\nfunction isPath(x, y) {\n const {panel} = Info;\n const isEmptyRoot = !panel;\n \n if (isEmptyRoot)\n return false;\n \n const el = document.elementFromPoint(x, y);\n const elements = panel.querySelectorAll('[data-name=\"js-path\"] *');\n \n return !~[].indexOf.call(elements, el);\n}\n\nfunction beforeShow(callback, params) {\n Key.unsetBind();\n \n const {\n name,\n position = {\n x: params.x,\n y: params.y,\n },\n } = params;\n \n const {x, y} = position;\n \n const el = DOM.getCurrentByPosition({\n x,\n y,\n });\n \n const menuName = getMenuNameByEl(el);\n \n let isShow = menuName !== 'contextFile';\n \n if (params.name === 'contextFile')\n isShow = !isShow;\n \n if (isShow)\n MenuShowedName = name;\n \n exec(callback);\n \n if (isShow)\n isShow = isPath(x, y);\n \n return isShow;\n}\n\nconst beforeClick = (name) => MenuShowedName !== name;\n\nasync function _uploadTo(nameModule) {\n const [error, data] = await Info.getData();\n \n if (error)\n return;\n \n const {name} = Info;\n \n CloudCmd.execFromModule(nameModule, 'uploadFile', name, data);\n CloudCmd.log(`Uploading to ${name}...`);\n}\n\nfunction uploadFromCloud() {\n Images.show.load('top');\n \n CloudCmd.execFromModule('Cloud', 'saveFile', async (currentName, data) => {\n const path = DOM.getCurrentDirPath() + currentName;\n const [e] = await RESTful.write(path, data);\n \n if (e)\n return;\n \n await CloudCmd.refresh({\n currentName,\n });\n });\n}\n\nfunction preDownload() {\n download(config('packer'));\n}\n\nfunction download(type) {\n const TIME = 30 * 1000;\n const {prefixURL} = CloudCmd;\n const PACK = '/pack';\n const date = Date.now();\n const files = DOM.getActiveFiles();\n \n if (!files.length)\n return alertNoFiles();\n \n for (const file of files) {\n const selected = DOM.isSelected(file);\n const isDir = DOM.isCurrentIsDir(file);\n const path = DOM.getCurrentPath(file);\n \n CloudCmd.log(`downloading file ${path}...`);\n \n /*\n * if we send ajax request -\n * no need in hash so we escape #\n * and all other characters, like \"%\"\n */\n const encodedPath = encodeURI(path).replace(/#/g, '#');\n const id = getIdBySrc(path);\n \n let src;\n \n if (isDir)\n src = prefixURL + PACK + encodedPath + DOM.getPackerExt(type);\n else\n src = prefixURL + FS + encodedPath + '?download';\n \n const element = createElement('iframe', {\n id: id + '-' + date,\n async: false,\n className: 'hidden',\n src,\n });\n \n const {body} = document;\n const removeChild = body.removeChild.bind(body, element);\n \n setTimeout(removeChild, TIME);\n \n if (selected)\n DOM.toggleSelectedFile(file);\n }\n}\n\nfunction getCurrentPosition() {\n const current = Info.element;\n const rect = current.getBoundingClientRect();\n \n const position = {\n x: Math.round(rect.left + rect.width / 3),\n y: Math.round(rect.top),\n };\n \n return position;\n}\n\nfunction listener(event) {\n const {F9, ESC} = Key;\n \n const key = event.keyCode;\n const isBind = Key.isBind();\n \n if (key === ESC) {\n Key.setBind();\n return hide();\n }\n \n if (isBind && key === F9) {\n const position = getCurrentPosition();\n MenuContext.show(position.x, position.y);\n \n event.preventDefault();\n }\n}\n","import {operator, types} from 'putout';\n\nconst {isJSXElement} = types;\nconst {\n hasTagName,\n removeClassName,\n} = operator;\n\nexport const report = () => `Unselect all submenu items`;\n\nexport const fix = (path) => {\n removeClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {showSubmenu} = options;\n \n if (showSubmenu)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath.parentPath.parentPath))\n return;\n \n push(path);\n },\n});\n","import {operator} from 'putout';\n\nconst {\n getAttributeValue,\n hasTagName,\n removeClassName,\n containsClassName,\n} = operator;\n\nexport const report = () => `Unselect wrongly selected`;\n\nexport const fix = (path) => {\n removeClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {index = 1, command} = options;\n \n if (command === 'hide')\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (hasTagName(path.parentPath.parentPath, 'li'))\n return;\n \n if (!containsClassName(path, 'menu-item-selected'))\n return;\n \n const dataMenuIndex = Number(getAttributeValue(path, 'data-menu-index'));\n \n if (index === dataMenuIndex)\n return;\n \n push(path);\n },\n});\n","import {operator} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst CLASS = 'menu-submenu-show';\n\nexport const report = () => `Hide submenu`;\n\nexport const fix = (path) => {\n removeClassName(path, CLASS);\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {name = 'menu', showSubmenu} = options;\n const {parentPath} = path;\n \n if (showSubmenu)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!hasDataName(parentPath, name))\n return false;\n \n if (containsClassName(path, CLASS))\n push(path);\n },\n});\n","import {operator, types} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n addClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst {isJSXElement} = types;\n\nexport const report = ({insideSubmenu}) => `${insideSubmenu ? 'Show' : 'Hide'} submenu`;\n\nexport const fix = ({path, prev, next, insideSubmenu}) => {\n unselect(prev);\n unselect(next);\n \n if (!insideSubmenu) {\n removeClassName(path, 'menu-item-selected');\n return;\n }\n \n addClassName(path, 'menu-item-selected');\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath))\n return;\n \n const {\n insideSubmenu = true,\n submenuIndex = 1,\n } = options;\n \n const parentMenu = path.parentPath.parentPath.parentPath;\n \n if (!isJSXElement(parentMenu))\n return;\n \n if (!isParentSelected(path.parentPath.parentPath))\n return;\n \n if (!hasDataName(path.parentPath, 'menu'))\n return;\n \n const children = path.parentPath\n .get('children')\n .filter(isJSXElement);\n \n const prev = children[submenuIndex - 1];\n const current = children[submenuIndex];\n const next = children[submenuIndex + 1];\n \n if (!current)\n return;\n \n push({\n path: current,\n insideSubmenu,\n prev,\n next,\n });\n },\n});\n\nfunction isParentSelected(path) {\n return containsClassName(path, 'menu-item-selected');\n}\n\nfunction unselect(path) {\n if (!path)\n return;\n \n removeClassName(path, 'menu-item-selected');\n}\n","import {types, operator} from 'putout';\n\nconst {\n setAttributeValue,\n getAttributeValue,\n getAttributePath,\n hasDataName,\n} = operator;\n\nconst {\n stringLiteral,\n jsxIdentifier,\n jsxAttribute,\n} = types;\n\nexport const report = () => `Set position`;\n\nexport const fix = ({path, attr, x, y}) => {\n const style = `left: ${x}px; top: ${y}px;`;\n \n if (attr) {\n setAttributeValue(path, 'style', style);\n return;\n }\n \n const {attributes} = path.node.openingElement;\n const attribute = jsxAttribute(jsxIdentifier('style'), stringLiteral(style));\n \n attributes.push(attribute);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n position = {},\n } = options;\n \n const {\n x = 0,\n y = 20,\n } = position;\n \n if (!hasDataName(path, name))\n return;\n \n const styleAttributeValue = getAttributeValue(path, 'style');\n \n if (!styleAttributeValue) {\n push({\n path,\n x,\n y,\n });\n return;\n }\n \n const [x1, y1] = parsePosition(styleAttributeValue);\n \n if (x === x1 && y === y1)\n return;\n \n const styleAttributePath = getAttributePath(path, 'style');\n \n push({\n path,\n attr: styleAttributePath,\n x,\n y,\n });\n },\n});\n\nfunction parsePosition(str) {\n const [x, y] = str\n .split(/;|left|\\s|:|top|px/)\n .filter(Boolean);\n \n return [\n Number(x),\n Number(y),\n ];\n}\n","import {\n template,\n operator,\n types,\n} from 'putout';\n\nconst {jsxText} = types;\n\nconst {\n setAttributeValue,\n hasDataName,\n addClassName,\n} = operator;\n\nconst {entries} = Object;\n\nconst isObject = (a) => a && typeof a === 'object';\n\nexport const report = () => `Build menu`;\n\nconst createMenuItem = template(`\n <li data-name=\"menu-item\" data-menu-index=\"\" className=\"menu-item\" data-menu-path=\"\">\n <label data-menu-path=\"\">NAME</label>\n </li>\n`);\n\nconst createMenu = template(`\n <ul data-name=\"menu\" className=\"menu menu-hidden\"></ul>\n`);\n\nconst DefaultMenu = {\n hello: null,\n world: null,\n};\n\nconst NEWLINE = jsxText('\\n');\nconst INDENT = jsxText(' ');\n\nexport const fix = ({path, menu, icon, name = ''}) => {\n const {children} = path.node;\n let i = 0;\n \n for (const [key, value] of entries(menu)) {\n const menuItem = createMenuItem();\n \n menuItem.children[1].children[0].value = key;\n \n if (icon)\n setIcon(key, menuItem);\n \n setDataMenuIndex(i++, menuItem);\n setDataMenuPath(key, name, menuItem);\n \n setDataMenuPath(key, name, menuItem.children[1]);\n children.push(INDENT, menuItem);\n \n if (isObject(value)) {\n setSubmenu(menuItem);\n menuItem.children.push(createMenu());\n \n const elementPath = path.get('children').at(-1)\n .get('children.3');\n \n fix({\n path: elementPath,\n icon,\n menu: value,\n name: key,\n });\n }\n }\n \n children.push(NEWLINE);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n menu = DefaultMenu,\n icon = false,\n } = options;\n \n if (!hasDataName(path, name))\n return;\n \n if (path.node.children.length)\n return;\n \n push({\n path,\n menu,\n icon,\n });\n },\n});\n\nfunction setSubmenu(menuItem) {\n addClassName(menuItem, 'menu-submenu');\n}\n\nfunction setDataMenuPath(key, name, menuItem) {\n const dataMenuPath = name ? `${name}.${key}` : key;\n setAttributeValue(menuItem, 'data-menu-path', dataMenuPath);\n}\n\nfunction setDataMenuIndex(index, menuItem) {\n setAttributeValue(menuItem, 'data-menu-index', index);\n}\n\nfunction setIcon(name, menuItem) {\n addClassName(menuItem, `icon ${getIconName(name)}`);\n}\n\nfunction getIconName(name) {\n return 'icon-' + name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n}\n","import {operator} from 'putout';\n\nconst {\n containsClassName,\n hasDataName,\n addClassName,\n removeClassName,\n} = operator;\n\nexport const report = ({command}) => {\n const [first, ...rest] = command;\n \n return `${first.toUpperCase()}${rest.join('')} menu`;\n};\n\nexport const fix = ({path, command}) => {\n if (command === 'show') {\n removeClassName(path, 'menu-hidden');\n return;\n }\n \n addClassName(path, 'menu-hidden');\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {name, command} = options;\n \n if (!hasDataName(path, name))\n return;\n \n const shown = !containsClassName(path, 'menu-hidden');\n \n if (command === 'show' && !shown || command === 'hide' && shown)\n push({\n command,\n path,\n });\n },\n});\n","import {operator, types} from 'putout';\n\nconst {isJSXElement} = types;\nconst {\n hasTagName,\n addClassName,\n hasDataName,\n removeClassName,\n hasAttributeValue,\n containsClassName,\n getAttributeValue,\n} = operator;\n\nconst SELECTED = 'menu-item-selected';\nconst SHOW = 'menu-submenu-show';\n\nexport const report = () => `Select item`;\n\nexport const fix = ({path, prev, next, showSubmenu}) => {\n addClassName(path, SELECTED);\n addShowSubmenu(path, {\n showSubmenu,\n });\n unselect(prev);\n unselect(next);\n \n removeShowSubmenu(next);\n removeShowSubmenu(prev);\n};\n\nexport const traverse = ({options, push}) => ({\n JSXElement(path) {\n const {\n name = 'menu',\n index = 1,\n showSubmenu,\n insideSubmenu,\n } = options;\n \n if (index < 0)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n const {parentPath} = path;\n \n if (!isJSXElement(parentPath))\n return;\n \n if (!hasDataName(parentPath, name))\n return;\n \n if (!insideSubmenu && !hasAttributeValue(path, 'data-menu-index', String(index)))\n return;\n \n if (!insideSubmenu && containsClassName(path, 'menu-item-selected'))\n return;\n \n const children = parentPath.get('children').filter(isJSXElement);\n \n const prev = children[index - 1];\n const current = children[index];\n const next = children[index + 1];\n \n if (!current)\n return;\n \n push({\n path: current,\n prev,\n next,\n showSubmenu,\n });\n },\n});\n\nfunction unselect(path) {\n removeClassName(path, SELECTED);\n}\n\nfunction addShowSubmenu(path, {showSubmenu}) {\n const menuPath = getAttributeValue(path, 'data-menu-path');\n \n if (menuPath.includes('.'))\n return;\n \n // only submenu items can show a submenu\n if (!containsClassName(path, 'menu-submenu'))\n return;\n \n if (showSubmenu)\n return addClassName(path, SHOW);\n}\n\nfunction removeShowSubmenu(path) {\n removeClassName(path, SHOW);\n}\n","import {operator, types} from 'putout';\n\nconst {\n hasTagName,\n removeClassName,\n hasDataName,\n containsClassName,\n} = operator;\n\nconst {isJSXElement} = types;\nconst SELECTED = 'menu-item-selected';\n\nexport const report = () => `Unselect all`;\n\nexport const fix = (path) => {\n removeClassName(path, SELECTED);\n};\n\nexport const traverse = ({push, options}) => ({\n JSXElement(path) {\n const {\n index,\n name = 'menu',\n command,\n } = options;\n \n if (command === 'hide')\n return;\n \n if (index !== -1)\n return;\n \n if (!hasTagName(path, 'li'))\n return;\n \n if (!isJSXElement(path.parentPath))\n return;\n \n if (!hasDataName(path.parentPath, name))\n return;\n \n const children = path.parentPath\n .get('children')\n .filter(isJSXElement);\n \n for (const child of children) {\n if (containsClassName(child, SELECTED))\n push(child);\n }\n },\n});\n","import * as unselectAllSubmenuItems from './unselect-all-submenu-items/index.js';\nimport * as unselectWronglySelected from './unselect-wrongly-selected/index.js';\nimport * as hideSubmenu from './hide-submenu/index.js';\nimport * as submenu from './submenu/index.js';\nimport * as setPosition from './set-position/index.js';\nimport * as buildMenu from './build-menu/index.js';\nimport * as menu from './menu/index.js';\nimport * as select from './select/index.js';\nimport * as unselectAll from './unselect-all/index.js';\n\nexport const rules = {\n 'menu': menu,\n 'build-menu': buildMenu,\n 'set-position': setPosition,\n 'select': select,\n 'unselect-all': unselectAll,\n 'submenu': submenu,\n 'hide-submenu': hideSubmenu,\n 'unselect-wrongly-selected': unselectWronglySelected,\n 'unselect-all-submenu-items': unselectAllSubmenuItems,\n};\n","import {fullstore} from 'fullstore';\n\nconst {assign} = Object;\nconst {stringify, parse} = JSON;\n\nconst wrap = (render, {prev, options, stateElement, readState, writeState}) => () => {\n const {textContent} = stateElement;\n \n if (stateElement.textContent === prev())\n return;\n \n const state = readState();\n prev(textContent);\n writeState(state);\n \n render({\n state,\n options,\n });\n};\n\nexport const createState = (state, {options, listener, stateName = 'aleman-state'}) => {\n const stateElement = document.querySelector(`[data-name=\"${stateName}\"]`);\n \n const prev = fullstore();\n const readState = createReadState(stateElement);\n const writeState = createWriteState(prev, stateElement);\n \n const fn = wrap(listener, {\n options,\n prev,\n stateElement,\n readState,\n writeState,\n });\n \n const observer = new MutationObserver(fn);\n const str = stringify(state, null, 4);\n \n // Do not pollute window.history\n // history[str] = true;\n stateElement.textContent = str;\n globalThis.alemanSync = fn;\n \n document.addEventListener('keydown', ({key}) => {\n if (key === '`')\n fn();\n });\n \n observer.observe(stateElement, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n \n return {\n readState,\n writeState,\n };\n};\n\nexport const createReadState = (stateElement) => () => {\n return parse(stateElement.textContent);\n};\n\nexport const createWriteState = (prev, stateElement) => (newState) => {\n const prevStateStr = stateElement.textContent;\n const prevState = parse(stateElement.textContent);\n \n assign(prevState, newState);\n const str = stringify(prevState, null, 4);\n \n if (str === prevStateStr)\n return;\n \n stateElement.textContent = str;\n setTimeout(() => {\n prev(str);\n });\n};\n","const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';\n\nexport const createVimParser = (buffer = []) => ({key}) => {\n if (/F\\d/.test(key)) {\n buffer = [];\n return [''];\n }\n \n if (key === '^')\n return ['^'];\n \n if (key === '$')\n return ['$'];\n \n if (!buffer.length && key === 'g') {\n buffer.push('g');\n return [''];\n }\n \n if (!buffer.length && /\\d/.test(key)) {\n buffer.push(Number(key));\n return [''];\n }\n \n if (!buffer.length && key === 'j')\n buffer.push(1);\n \n if (!buffer.length && key === 'k')\n buffer.push(1);\n \n const [count] = buffer;\n \n if (isNumber(count) && key === 'j') {\n buffer = [];\n return ['j', count];\n }\n \n if (isNumber(count) && key === 'k') {\n buffer = [];\n return ['k', count];\n }\n \n if (count === 'g' && key === 'g') {\n buffer = [];\n return ['gg'];\n }\n \n buffer = [];\n \n return [''];\n};\n","import {createVimParser} from './vim.js';\nimport {\n emitBefore,\n emitIf,\n emitRun,\n} from './emit.js';\n\nconst queryElement = ({name}) => {\n return document.querySelector(`[data-name=\"${name}\"]`);\n};\n\nconst maybeEvents = ({events}) => {\n if (events)\n return events;\n \n return ['keydown'];\n};\n\nexport const addListeners = ({namedAddons, options, readState, writeState}) => {\n for (const addon of namedAddons) {\n const element = queryElement(addon);\n const events = maybeEvents(addon);\n \n for (const event of events) {\n element.addEventListener(event, createListener({\n addon,\n options,\n readState,\n writeState,\n }));\n }\n }\n};\n\nconst hasName = ({name}) => name;\n\nexport const splitAddons = (addons) => {\n const globalAddons = [];\n const namedAddons = [];\n \n for (const addon of addons) {\n if (hasName(addon)) {\n namedAddons.push(addon);\n continue;\n }\n \n globalAddons.push(addon);\n }\n \n return {\n globalAddons,\n namedAddons,\n };\n};\n\nexport const addGlobalListeners = ({globalAddons, options, readState, writeState, document = globalThis.document}) => {\n for (const addon of globalAddons) {\n const events = maybeEvents(addon);\n \n for (const event of events) {\n document.addEventListener(event, createListener({\n addon,\n options,\n readState,\n writeState,\n }));\n }\n }\n};\n\nconst createListener = ({options, addon, readState, writeState, parseVim = createVimParser()}) => (event) => {\n const {\n preventDefault,\n stopPropagation,\n after,\n afterIf,\n } = addon;\n \n const [isEmitBefore, count] = emitBefore(addon, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return false;\n \n const state = readState();\n \n const is = emitIf(addon, {\n event,\n state,\n options,\n });\n \n if (!is)\n return;\n \n if (preventDefault)\n event.preventDefault();\n \n if (stopPropagation)\n event.stopPropagation();\n \n const newState = emitRun(addon, {\n count,\n event,\n state,\n options,\n });\n \n writeState(newState);\n \n const isAfterIf = !afterIf || afterIf({\n state: newState,\n options,\n });\n \n if (after && isAfterIf)\n requestAnimationFrame(() => {\n writeState(after({\n event,\n state: newState,\n options,\n }));\n });\n};\n","export const emit = (addon, {state, options, event, parseVim}) => {\n const [isEmitBefore, count] = emitBefore(addon, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return state;\n \n if (!emitIf(addon, {state, event, options}))\n return state;\n \n if (addon.events && !addon.events.includes(event.type))\n return state;\n \n return emitRun(addon, {\n event,\n state,\n options,\n count,\n });\n};\nexport const emitIf = (addon, {state, event, options}) => {\n if (!addon.filter)\n return true;\n \n return addon.filter({\n state,\n event,\n options,\n });\n};\n\nexport const emitRun = (addon, {count, state, event, options}) => {\n return addon.listener({\n count,\n event,\n state,\n options,\n });\n};\n\nexport const emitBefore = (addon, {event, parseVim}) => {\n const {keys, commands} = addon;\n \n if (keys && !keys.includes(event.key))\n return [false];\n \n const [command, count] = parseVim(event);\n \n if (commands && !commands.includes(command))\n return [false];\n \n return [true, count];\n};\n","import {\n parse,\n transform,\n print,\n findPlaces,\n} from 'putout';\nimport {branch, merge} from '@putout/processor-html';\n\nconst {entries} = Object;\n\nexport const SKIP = false;\nexport const TRANSFORM = true;\n\nexport const createRender = (html, {options, rules, type}) => {\n const {ast, source} = parseAccordingToType(html, type);\n \n return function render(state) {\n const currentRules = {};\n const plugins = entries(rules);\n \n for (const [name] of plugins) {\n currentRules[name] = ['on', {\n ...state,\n ...options,\n }];\n }\n \n const places = findPlaces(ast, {\n rules: currentRules,\n plugins,\n });\n \n if (!places.length)\n return [\n SKIP,\n source,\n places,\n ];\n \n transform(ast, {\n rules: currentRules,\n plugins,\n });\n \n const code = print(ast, {\n printer: ['putout', {\n format: {\n newline: '\\n',\n endOfFile: '',\n },\n }],\n });\n \n if (type === 'jsx')\n return [\n TRANSFORM,\n code,\n places,\n ];\n \n const prefix = '<template>';\n const suffix = '<\\\\template>\\n';\n \n const result = merge('', [code])\n .slice(prefix.length, -suffix.length)\n .trim();\n \n return [\n TRANSFORM,\n result,\n places,\n ];\n };\n};\n\nfunction parseAccordingToType(html, type) {\n if (type === 'jsx')\n return {\n ast: parse(html),\n source: html,\n };\n \n const {source} = branch(html)[0];\n const withDiv = `<template>${source}</template>`;\n \n const ast = parse(withDiv);\n \n return {\n ast,\n source,\n };\n}\n","const isString = (a) => typeof a === 'string';\nconst isUndefined = (a) => typeof a === 'undefined';\nconst isEmpty = (obj) => !Object.keys(obj).length;\n\nexport function jessy(selector, divider, value) {\n if (!value) {\n value = divider;\n divider = '.';\n }\n \n check(selector, value);\n \n if (!selector)\n return value;\n \n if (isEmpty(value))\n return undefined;\n \n const selects = selector\n .split(divider)\n .filter(Boolean);\n \n for (const [i, name] of selects.entries()) {\n const nestedName = selects\n .slice(i)\n .join(divider);\n \n if (!isUndefined(value[nestedName])) {\n value = value[nestedName];\n break;\n }\n \n if (!value[name]) {\n value = undefined;\n break;\n }\n \n value = value[name];\n }\n \n return value;\n}\n\nfunction check(selector, obj) {\n if (!isString(selector))\n throw Error('selector should be string!');\n \n if (typeof obj !== 'object')\n throw Error('obj should be object!');\n}\n","export function getMenuPath(event) {\n let menuItemElement = document.elementFromPoint(event.clientX, event.clientY);\n const {menuPath} = menuItemElement.dataset;\n \n if (!menuPath)\n menuItemElement = menuItemElement.querySelector('[data-menu-path]');\n \n if (!menuPath)\n return '';\n \n return menuItemElement.dataset.menuPath;\n}\n","import {jessy} from 'jessy';\nimport {getMenuPath as _getMenuPath} from '../menu/get-menu-path.js';\n\nconst isFn = (a) => typeof a === 'function';\n\nexport const events = ['click'];\nexport const preventDefault = true;\n\nexport const filter = ({event, state, options}) => {\n const {\n menu,\n getMenuPath = _getMenuPath,\n } = options;\n \n if (state.command === 'hide')\n return false;\n \n const menuPath = getMenuPath(event);\n \n if (!menuPath)\n return true;\n \n const fn = jessy(menuPath, menu);\n \n return isFn(fn);\n};\n\nexport const listener = ({options, state}) => {\n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n index: -1,\n showSubmenu: false,\n insideSubmenu: false,\n };\n};\n","export const keys = ['Escape'];\n\nexport const listener = ({state, options}) => {\n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n showSubmenu: false,\n index: -1,\n };\n};\n","const isObject = (a) => a && typeof a === 'object';\n\nexport function getSubmenu({index, options}) {\n const {menu} = options;\n const currentName = Object.keys(menu)[index];\n const submenu = menu[currentName];\n \n if (isObject(submenu))\n return submenu;\n \n return {};\n}\n","import {getSubmenu} from '../submenu/index.js';\n\nexport const keys = ['ArrowDown'];\nexport const preventDefault = true;\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = ({state, options}) => {\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const {menu, infiniteScroll} = options;\n const n = Object.keys(menu).length - 1;\n \n if (!insideSubmenu && (infiniteScroll && index === n || index < n))\n ++index;\n \n if (!insideSubmenu && infiniteScroll && index > n)\n index -= n + 1;\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length - 1;\n \n if (insideSubmenu)\n if (submenuIndex < submenuCount)\n ++submenuIndex;\n else if (infiniteScroll && submenuIndex === submenuCount)\n submenuIndex = 0;\n \n const showSubmenu = submenuCount > -1;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","import {getSubmenu} from './submenu/index.js';\n\nexport const keys = ['ArrowUp'];\n\nexport const preventDefault = true;\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = ({state, options}) => {\n const {menu, infiniteScroll} = options;\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const count = Object.keys(menu).length;\n \n if (insideSubmenu && submenuIndex > 0)\n --submenuIndex;\n \n if (infiniteScroll && !index)\n index = count - 1;\n else if (!insideSubmenu && index > 0)\n --index;\n \n if (index === -1)\n index = count - 1;\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length;\n const showSubmenu = submenuCount > 0;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","const isObject = (a) => a && typeof a === 'object';\nconst {values} = Object;\n\nexport const run = ({options, state}) => {\n const {index, submenuIndex} = state;\n const {menu} = options;\n \n const fn = values(menu)[index];\n \n if (isObject(fn) && submenuIndex === -1)\n return [false];\n \n if (isObject(fn))\n return [true, setTimeout(values(fn)[submenuIndex])];\n \n return [true, setTimeout(fn)];\n};\n","import {getSubmenu} from './submenu/index.js';\n\nexport const keys = [\n 'ArrowRight',\n 'l',\n];\nexport const preventDefault = true;\n\nexport const filter = ({state, options}) => {\n const {index} = state;\n const submenu = getSubmenu({\n index,\n options,\n });\n \n return Object.keys(submenu).length;\n};\n\nexport const listener = () => ({\n submenuIndex: 0,\n insideSubmenu: true,\n showSubmenu: true,\n});\n","import {run} from '../run/index.js';\nimport * as right from '../right.js';\n\nexport const keys = ['Enter'];\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const stopPropagation = true;\nexport const preventDefault = true;\n\nexport const listener = ({options, state}) => {\n const [result] = run({\n options,\n state,\n });\n \n if (!result)\n return right.listener({\n options,\n state,\n });\n \n options.beforeHide?.(state);\n \n return {\n command: 'hide',\n index: -1,\n insideSubmenu: false,\n };\n};\n","export const keys = [\n 'ArrowLeft',\n 'h',\n];\nexport const preventDefault = true;\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const listener = () => ({\n submenuIndex: -1,\n insideSubmenu: false,\n showSubmenu: false,\n});\n","import {getSubmenu} from '../submenu/index.js';\n\nexport const keys = [\n 'G',\n '$',\n];\n\nexport const filter = ({state}) => state.command === 'show';\n\nexport const preventDefault = true;\n\nexport const listener = ({state, options}) => {\n const {menu} = options;\n let {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const menuValues = Object.values(menu);\n \n const submenu = getSubmenu({\n index,\n options,\n });\n \n const submenuCount = Object.keys(submenu).length;\n \n if (insideSubmenu)\n submenuIndex = submenuCount - 1;\n else\n index = menuValues.length - 1;\n \n const showSubmenu = submenuCount > 0;\n \n return {\n index,\n submenuIndex,\n showSubmenu,\n };\n};\n","import * as up from '../up.js';\n\nexport const {filter} = up;\nexport const commands = [\n 'gg',\n '^',\n];\n\nexport function listener({state, options}) {\n const {\n insideSubmenu,\n index,\n submenuIndex,\n } = state;\n \n const newState = {\n ...state,\n index: insideSubmenu ? index : 1,\n submenuIndex: insideSubmenu ? 1 : submenuIndex,\n };\n \n return up.listener({\n state: newState,\n options,\n });\n}\n","import * as down from '../down/down.js';\nimport {getSubmenu} from '../submenu/index.js';\n\nexport const {filter} = down;\nexport const commands = ['j'];\n\nexport function listener({count, state, options}) {\n const {menu, infiniteScroll} = options;\n const {\n index,\n insideSubmenu,\n submenuIndex,\n } = state;\n \n const menuCount = Object.keys(menu).length;\n \n const submenuCount = Object.keys(getSubmenu({\n index,\n options,\n })).length;\n \n let newIndex = insideSubmenu ? index : index + count;\n let newSubmenuIndex = insideSubmenu ? submenuIndex + count : submenuIndex;\n \n if (newIndex > menuCount - 1)\n newIndex = infiniteScroll ? 0 : menuCount - 1;\n \n if (infiniteScroll && newSubmenuIndex === submenuCount)\n newSubmenuIndex = 0;\n else if (newSubmenuIndex > submenuCount - 1)\n newSubmenuIndex = submenuCount - 1;\n \n const showSubmenu = submenuCount > -1;\n \n return {\n index: newIndex,\n submenuIndex: newSubmenuIndex,\n showSubmenu,\n };\n}\n","import * as up from '../up.js';\n\nexport const {filter} = up;\nexport const commands = ['k'];\n\nexport function listener({count, state, options}) {\n const {\n insideSubmenu,\n index,\n submenuIndex,\n } = state;\n \n let newIndex = insideSubmenu ? index : index - count + 1;\n let newSubmenuIndex = insideSubmenu ? submenuIndex - count + 1 : submenuIndex;\n \n const {infiniteScroll} = options;\n \n if (newIndex <= 0)\n newIndex = infiniteScroll ? -1 : 0;\n \n if (newSubmenuIndex < -1)\n newSubmenuIndex = -1;\n \n const newState = {\n ...state,\n index: newIndex,\n submenuIndex: newSubmenuIndex,\n };\n \n return up.listener({\n state: newState,\n options,\n });\n}\n","import * as click from './click/click.js';\nimport * as escape from './escape/escape.js';\nimport * as down from './down/down.js';\nimport * as up from './up.js';\nimport * as enter from './enter/enter.js';\nimport * as left from './left.js';\nimport * as right from './right.js';\nimport * as shiftG from './shift-g/shift-g.js';\nimport * as gg from './gg/gg.js';\nimport * as j from './j/j.js';\nimport * as k from './k/k.js';\n\nexport const addons = [\n click,\n escape,\n down,\n up,\n enter,\n left,\n right,\n shiftG,\n gg,\n j,\n k,\n];\n","import {jessy} from 'jessy';\nimport {getMenuPath as _getMenuPath} from '../menu/get-menu-path.js';\n\nconst isFn = (a) => typeof a === 'function';\n\nexport const createItemClick = (name) => ({\n name,\n events: ['click'],\n listener,\n filter,\n stopPropagation: true,\n});\n\nconst filter = ({event, state, options}) => {\n if (state.command !== 'show')\n return;\n \n const {\n getMenuPath = _getMenuPath,\n menu,\n } = options;\n \n const menuPath = getMenuPath(event);\n const fn = jessy(menuPath, menu);\n \n return isFn(fn);\n};\n\nconst listener = ({event, state, options}) => {\n const {\n menu,\n getMenuPath = _getMenuPath,\n } = options;\n \n const menuPath = getMenuPath(event);\n const fn = jessy(menuPath, menu);\n \n setTimeout(fn);\n \n options.beforeHide?.(state);\n \n return {\n index: -1,\n command: 'hide',\n showSubmenu: false,\n };\n};\n","export function calculate(event, sizes) {\n let {clientX, clientY} = event;\n const {\n heightMenu,\n widthMenu,\n innerHeight,\n innerWidth,\n } = sizes;\n \n if (innerWidth < widthMenu + clientX + clientX / 2) {\n clientX -= widthMenu;\n \n if (clientX < 0)\n clientX = 0;\n }\n \n if (innerHeight < heightMenu + clientY) {\n clientY -= heightMenu;\n \n if (clientY < 0)\n clientY = 0;\n }\n \n return {\n x: clientX,\n y: clientY - 14,\n };\n}\n","import {setPosition} from './set-position/set-position.js';\n\nexport const createContextMenu = (name) => ({\n name,\n events,\n preventDefault,\n after,\n afterIf,\n listener,\n});\n\nconst events = [\n 'contextmenu',\n];\n\nconst preventDefault = true;\n\nconst listener = ({event, state, options}) => {\n const {beforeShow} = options;\n const {x, y} = {\n x: event.clientX,\n y: event.clientY,\n };\n \n const is = !beforeShow || beforeShow?.({\n ...state,\n position: {\n x,\n y,\n },\n });\n \n const command = is ? 'show' : 'hide';\n \n return {\n command,\n showSubmenu: false,\n position: {\n x,\n y: y - 14,\n },\n };\n};\n\nconst after = ({event, options}) => {\n const {name} = options;\n return setPosition(name, event);\n};\n\nconst afterIf = ({state}) => state.command === 'show';\n","import {calculate} from '../../../lunes/engine/position/calculate.js';\n\nexport const setPosition = (name, event) => {\n const element = document.querySelector(`[data-name=\"${name}\"]`);\n const heightMenu = getMenuHeight(element);\n const widthMenu = getMenuWidth(element);\n const {innerHeight, innerWidth} = globalThis;\n \n const {x, y} = calculate(event, {\n heightMenu,\n widthMenu,\n innerWidth,\n innerHeight,\n });\n \n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n \n return {\n position: {\n x,\n y,\n },\n };\n};\n\nfunction getMenuHeight(element) {\n const {height} = getComputedStyle(element);\n return parseInt(height, 10);\n}\n\nfunction getMenuWidth(element) {\n const {width} = getComputedStyle(element);\n return parseInt(width, 10);\n}\n","import {rules} from './rules/index.js';\nimport {hydrate} from '../aleman/index.js';\nimport {initState} from './state.js';\nimport {addons} from './addons/index.js';\nimport {createMouseEnter} from './addons/mouse-leave/index.js';\nimport {createItemClick} from './addons/item-click/item-click.js';\nimport * as click from './addons/click/click.js';\nimport {createContextMenu} from './addons/context-menu.js';\n\nconst {assign} = Object;\n\nexport const hydrateMenu = (elementName, {hydrateElement, options, menu}) => {\n assign(options, {\n menu,\n });\n \n const {name} = options;\n const state = initState(options);\n const contextMenu = createContextMenu(elementName);\n \n const {run} = hydrate(hydrateElement, {\n options,\n state,\n addons: [\n contextMenu,\n createMouseEnter(name),\n createItemClick(name),\n ...addons,\n ],\n rules,\n stateName: `aleman-state-${name}`,\n });\n \n return {\n show: (clientX, clientY) => {\n const event = {\n clientX,\n clientY,\n };\n \n run(event, contextMenu);\n },\n hide: () => run({}, click),\n };\n};\n","import css from './menu.css';\nimport {hydrateMenu} from './hydrate-menu.js';\n\nexport const createMenu = (elementName, options, menu) => {\n options.name = options.name || 'menu';\n const {name} = options;\n const hydrateElement = createHydrate(name);\n \n loadStyle();\n createStateElement(name);\n \n return hydrateMenu(elementName, {\n hydrateElement,\n options,\n menu,\n });\n};\n\nfunction loadStyle() {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const style = document.createElement('style');\n \n style.dataset.name = name;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\nfunction createHydrate(name) {\n const hydrateElement = findByName(name);\n \n if (hydrateElement)\n return hydrateElement;\n \n const section = document.createElement('section');\n \n section.dataset.name = `aleman-hydrate-${name}`;\n section.innerHTML = `<ul data-name=\"${name}\" class=\"menu menu-hidden\"></ul>`;\n document.body.append(section);\n \n return section;\n}\n\nfunction createStateElement(name) {\n const elementName = `aleman-state-${name}`;\n \n if (findByName(elementName))\n return;\n \n const section = document.createElement('section');\n \n section.dataset.name = elementName;\n section.classList.add('menu-hidden');\n document.body.append(section);\n}\n\nfunction findByName(name) {\n return document.querySelector(`[data-name=${name}]`);\n}\n","export const initState = ({name = 'menu'}) => ({\n name,\n command: 'hide',\n insideSubmenu: false,\n submenuIndex: 0,\n showSubmenu: false,\n index: -1,\n position: {\n x: 0,\n y: 20,\n },\n});\n","import {createState} from './state.js';\nimport {\n addGlobalListeners,\n addListeners,\n splitAddons,\n} from './add-listeners.js';\nimport {createRender} from './render.js';\n\nexport const hydrate = (element, config) => {\n const {\n addons,\n options,\n state,\n rules,\n stateName = 'aleman-state',\n } = config;\n \n const render = createRender(element.innerHTML, {\n options,\n rules,\n });\n \n const {globalAddons, namedAddons} = splitAddons(addons);\n \n const listener = () => {\n const state = readState();\n const [is, result] = render(state);\n \n if (!is)\n return;\n \n element.innerHTML = result;\n addListeners({\n readState,\n writeState,\n namedAddons,\n options,\n });\n };\n \n const {readState, writeState} = createState(state, {\n stateName,\n listener,\n });\n \n addGlobalListeners({\n readState,\n writeState,\n globalAddons,\n options,\n });\n \n return {\n run: (event, addon) => {\n const state = readState();\n const newState = addon.listener({\n state,\n event,\n options,\n writeState,\n });\n \n writeState({\n ...state,\n ...newState,\n });\n \n if (addon.afterIf?.({state: newState, options}))\n requestAnimationFrame(() => {\n writeState(addon.after({\n event,\n options,\n state: newState,\n }));\n });\n },\n };\n};\n","export const createMouseEnter = (name) => ({\n name,\n events: ['mouseleave'],\n listener: () => ({\n index: -1,\n showSubmenu: false,\n insideSubmenu: false,\n submenuIndex: 0,\n }),\n});\n","const noop = () => {};\n\nconst NAMES = [\n 'beforeShow',\n 'afterShow',\n 'beforeHide',\n 'beforeClose',\n 'afterHide',\n 'beforeClick',\n 'afterClick',\n];\n\nexport const createHooks = (options) => {\n const hooks = {};\n \n for (const name of NAMES)\n hooks[name] = options[name] || noop;\n \n return hooks;\n};\n","const {entries} = Object;\nconst isObject = (a) => a && typeof a === 'object';\nconst isIdentifier = (a) => /^[a-z_$][\\w$]*$/i.test(a);\nconst quote = (a) => `'${a.replaceAll('\\\\', '\\\\\\\\').replaceAll(`'`, `\\\\'`)}'`;\nconst getKey = (a) => isIdentifier(a) ? a : quote(a);\n\nexport function convertMenuToState(menu, {submenu} = {}) {\n const result = [];\n \n for (const [key, value] of entries(menu)) {\n if (!isObject(value)) {\n result.push(isIdentifier(key) ? key : `${quote(key)}: null`);\n continue;\n }\n \n result.push(`${getKey(key)}: ${convertMenuToState(value, {\n submenu: true,\n })}`);\n }\n \n const noCursor = submenu ? '' : `'no-cursor', `;\n \n return `['off', ${noCursor} {${result.join(', ')}}]`;\n}\n","import {types, operator} from 'putout';\n\nconst isUndefined = (a) => typeof a === 'undefined';\nconst {remove} = operator;\n\nconst {\n stringLiteral,\n isArrayExpression,\n isIdentifier,\n identifier,\n isObjectProperty,\n isExpressionStatement,\n isNullLiteral,\n nullLiteral,\n} = types;\n\nexport const getKeyName = ({key}) => key.name || key.value;\n\nexport const itemOf = ({parentPath}) => {\n if (isArrayExpression(parentPath))\n return parentPath.parentPath;\n \n return parentPath;\n};\n\nexport const pathOf = (path) => {\n const names = [];\n \n for (let current = itemOf(path); current; current = current.parentPath)\n if (isObjectProperty(current))\n names.unshift(getKeyName(current.node));\n \n return names.join('.');\n};\n\nexport const isCursorPath = (path, {cursorPath}) => isUndefined(cursorPath) || pathOf(path) === cursorPath;\n\nexport const siblings = (item) => item.parentPath.get('properties');\n\nexport const first = (path) => path\n .getNextSibling()\n .get('properties')\n .at(0);\n\nexport const last = (path) => path\n .getNextSibling()\n .get('properties')\n .at(-1);\n\nexport const next = (item, {infiniteScroll}) => {\n const nextItem = item.getNextSibling();\n \n if (nextItem.node)\n return nextItem;\n \n return infiniteScroll ? siblings(item).at(0) : item;\n};\n\nexport const prev = (item, {infiniteScroll}) => {\n const prevItem = item.getPrevSibling();\n \n if (prevItem.node)\n return prevItem;\n \n return infiniteScroll ? siblings(item).at(-1) : item;\n};\n\nexport const findRoot = (path) => path.findParent((current) => {\n return isArrayExpression(current) && isExpressionStatement(current.parentPath);\n});\n\nexport const rootProperties = (root) => root.get('elements').at(-1)\n .get('properties');\n\nexport function setCursor(path) {\n const valuePath = path.get('value');\n \n if (isIdentifier(valuePath) || isNullLiteral(valuePath)) {\n path.node.value = stringLiteral('cursor');\n path.node.shorthand = false;\n \n return;\n }\n \n if (isArrayExpression(valuePath))\n valuePath.node.elements.splice(1, 0, stringLiteral('cursor'));\n}\n\nexport function clearCursor(path) {\n const {parentPath} = path;\n \n if (isObjectProperty(parentPath)) {\n const {key} = parentPath.node;\n \n if (isIdentifier(key)) {\n parentPath.node.value = identifier(key.name);\n parentPath.node.shorthand = true;\n \n return;\n }\n \n parentPath.node.value = nullLiteral();\n \n return;\n }\n \n if (isArrayExpression(parentPath))\n remove(path);\n}\n\nexport const closeSubmenus = (root) => {\n root.traverse({\n ArrayExpression(path) {\n path.node.elements[0] = stringLiteral('off');\n },\n });\n};\n\nexport const markNoCursor = (root) => {\n root.node.elements.splice(1, 0, stringLiteral('no-cursor'));\n};\n","import {types} from 'putout';\nimport {\n next,\n prev,\n itemOf,\n setCursor,\n clearCursor,\n getKeyName,\n} from '../cursor.js';\n\nconst operations = {\n prev,\n next,\n};\n\nconst {isArrayExpression} = types;\n\nexport const report = () => `Move cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const {operation = 'next', cursor} = options;\n const {parentPath} = path;\n \n if (!operations[operation])\n return false;\n \n if (isArrayExpression(parentPath))\n return getKeyName(parentPath.parentPath.node) === cursor;\n \n return getKeyName(parentPath.node) === cursor;\n};\n\nexport const fix = (path, {options}) => {\n const {\n operation = 'next',\n count = 1,\n infiniteScroll = false,\n } = options;\n \n const move = operations[operation];\n const from = itemOf(path);\n let item = from;\n \n for (let i = 0; i < count; i++)\n item = move(item, {\n infiniteScroll,\n });\n \n if (item === from)\n return;\n \n clearCursor(path);\n setCursor(item);\n};\n","import {operator} from 'putout';\nimport {\n first,\n last,\n setCursor,\n} from '../cursor.js';\n\nconst {remove} = operator;\n\nconst operations = {\n last,\n first,\n};\n\nexport const report = () => `Add cursor`;\n\nexport const include = () => [\n '\"no-cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const {operation} = options;\n return operations[operation];\n};\n\nexport const fix = (path, {options}) => {\n const {operation} = options;\n \n const getCursor = operations[operation];\n const cursorPath = getCursor(path);\n \n setCursor(cursorPath);\n remove(path);\n};\n","import {types} from 'putout';\n\nconst {isExpressionStatement} = types;\n\nexport const report = () => `Apply visibility`;\n\nexport const match = ({options}) => {\n const {operation = 'show'} = options;\n \n return {\n '\"off\"': (vars, path) => {\n if (operation !== 'show')\n return false;\n \n return isExpressionStatement(path.parentPath.parentPath);\n },\n '\"on\"': (vars, path) => {\n if (operation !== 'hide')\n return false;\n \n return isExpressionStatement(path.parentPath.parentPath);\n },\n };\n};\n\nexport const replace = () => ({\n '\"off\"': '\"on\"',\n '\"on\"': '\"off\"',\n});\n","import {\n findRoot,\n closeSubmenus,\n clearCursor,\n markNoCursor,\n} from '../cursor.js';\n\nexport const report = () => `Reset cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const fix = (path) => {\n const root = findRoot(path);\n \n clearCursor(path);\n closeSubmenus(root);\n markNoCursor(root);\n};\n","import {operator} from 'putout';\nimport {\n findRoot,\n rootProperties,\n closeSubmenus,\n clearCursor,\n setCursor,\n} from '../cursor.js';\n\nconst {remove} = operator;\n\nexport const report = () => `Put cursor`;\n\nexport const include = () => [\n '\"cursor\"',\n '\"no-cursor\"',\n];\n\nexport const filter = (path, {options}) => ['first', 'last'].includes(options.operation);\n\nexport const fix = (path, {options}) => {\n const {operation} = options;\n const root = findRoot(path);\n const properties = rootProperties(root);\n const target = operation === 'first' ? properties.at(0) : properties.at(-1);\n \n if (path.node.value === 'no-cursor')\n remove(path);\n else\n clearCursor(path);\n \n closeSubmenus(root);\n setCursor(target);\n};\n","import {types, operator} from 'putout';\nimport {setCursor, isCursorPath} from '../cursor.js';\n\nconst {\n isArrayExpression,\n stringLiteral,\n} = types;\n\nconst {remove} = operator;\n\nexport const report = () => `Enter submenu`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => isArrayExpression(path.parentPath) && isCursorPath(path, options);\n\nexport const fix = (path) => {\n const array = path.parentPath;\n const properties = array.get('elements').at(-1)\n .get('properties');\n \n if (!properties.length)\n return;\n \n remove(path);\n array.node.elements[0] = stringLiteral('on');\n setCursor(properties.at(0));\n};\n","import {types} from 'putout';\nimport {\n itemOf,\n setCursor,\n clearCursor,\n isCursorPath,\n} from '../cursor.js';\n\nconst {\n isArrayExpression,\n isExpressionStatement,\n stringLiteral,\n} = types;\n\nconst submenuOf = (path) => itemOf(path).parentPath.parentPath;\n\nexport const report = () => `Leave submenu`;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const filter = (path, {options}) => {\n const array = submenuOf(path);\n \n return isArrayExpression(array) && !isExpressionStatement(array.parentPath) && isCursorPath(path, options);\n};\n\nexport const fix = (path) => {\n const array = submenuOf(path);\n \n clearCursor(path);\n array.node.elements[0] = stringLiteral('off');\n setCursor(array.parentPath);\n};\n","import {putout} from 'putout';\nimport {next} from './transforms/next.js';\nimport {prev} from './transforms/prev.js';\nimport {hide} from './transforms/hide.js';\nimport {show} from './transforms/show.js';\nimport {first} from './transforms/first.js';\nimport {last} from './transforms/last.js';\nimport {right} from './transforms/right.js';\nimport {left} from './transforms/left.js';\nimport {reset} from './transforms/reset.js';\n\nconst transforms = {\n next,\n prev,\n show,\n hide,\n first,\n last,\n right,\n left,\n reset,\n};\n\nexport const transform = (state, operation, options) => {\n const createConfig = transforms[operation];\n const config = createConfig(options);\n \n const {code} = putout(state, {\n fixCount: 1,\n ...config,\n });\n \n return code;\n};\n","import * as moveCursor from '../rules/move-cursor/index.js';\nimport * as addCursor from '../rules/add-cursor/index.js';\n\nexport const next = (options) => ({\n rules: {\n 'add-cursor': ['on', {\n operation: 'first',\n }],\n 'move-cursor': ['on', options],\n },\n plugins: [\n ['move-cursor', moveCursor],\n ['add-cursor', addCursor],\n ],\n});\n","import * as moveCursor from '../rules/move-cursor/index.js';\nimport * as addCursor from '../rules/add-cursor/index.js';\n\nexport const prev = (options) => ({\n rules: {\n 'add-cursor': ['on', {\n operation: 'last',\n }],\n 'move-cursor': ['on', options],\n },\n plugins: [\n ['move-cursor', moveCursor],\n ['add-cursor', addCursor],\n ],\n});\n","import * as applyVisibility from '../rules/apply-visibility/index.js';\n\nexport const show = (options) => ({\n rules: {\n 'apply-visibility': ['on', options],\n },\n plugins: [\n ['apply-visibility', applyVisibility],\n ],\n});\n","import * as applyVisibility from '../rules/apply-visibility/index.js';\nimport * as resetCursor from '../rules/reset-cursor/index.js';\n\nexport const hide = (options) => ({\n rules: {\n 'apply-visibility': ['on', options],\n 'reset-cursor': 'on',\n },\n plugins: [\n ['apply-visibility', applyVisibility],\n ['reset-cursor', resetCursor],\n ],\n});\n","import * as putCursor from '../rules/put-cursor/index.js';\n\nexport const first = () => ({\n rules: {\n 'put-cursor': ['on', {\n operation: 'first',\n }],\n },\n plugins: [\n ['put-cursor', putCursor],\n ],\n});\n","import * as putCursor from '../rules/put-cursor/index.js';\n\nexport const last = () => ({\n rules: {\n 'put-cursor': ['on', {\n operation: 'last',\n }],\n },\n plugins: [\n ['put-cursor', putCursor],\n ],\n});\n","import * as enterSubmenu from '../rules/enter-submenu/index.js';\n\nexport const right = (options) => ({\n rules: {\n 'enter-submenu': ['on', options],\n },\n plugins: [\n ['enter-submenu', enterSubmenu],\n ],\n});\n","import * as leaveSubmenu from '../rules/leave-submenu/index.js';\n\nexport const left = (options) => ({\n rules: {\n 'leave-submenu': ['on', options],\n },\n plugins: [\n ['leave-submenu', leaveSubmenu],\n ],\n});\n","import * as resetCursor from '../rules/reset-cursor/index.js';\n\nexport const reset = () => ({\n rules: {\n 'reset-cursor': 'on',\n },\n plugins: [\n ['reset-cursor', resetCursor],\n ],\n});\n","import {pathOf} from '../../transformer/rules/cursor.js';\n\nexport const report = pathOf;\n\nexport const include = () => [\n '\"cursor\"',\n];\n\nexport const fix = () => {};\n","import {putout} from 'putout';\nimport * as getCursorPlugin from './get-cursor/index.js';\n\nexport const getCursorPath = (state) => {\n const {places} = putout(state, {\n fix: false,\n plugins: [\n ['lunes/get-cursor', getCursorPlugin],\n ],\n });\n \n if (!places.length)\n return '';\n \n const {message} = places[0];\n \n return message;\n};\n\nexport const getCursor = (state) => getCursorPath(state)\n .split('.')\n .at(-1);\n","import {fullstore} from 'fullstore';\nimport {convertMenuToState} from './convert-menu-to-state/convert-menu-to-state.js';\nimport {transform} from './transformer/transformer.js';\nimport {getCursorPath} from './getter/getter.js';\n\nconst SHOWN = /^\\[\\s*'on'/;\nconst ALWAYS = [\n 'show',\n 'hide',\n];\n\nconst MOVES = [\n 'next',\n 'prev',\n];\n\nexport const isShown = (state) => SHOWN.test(state);\n\nexport const createState = (menu, {infiniteScroll = false} = {}) => {\n const state = convertMenuToState(menu);\n const stateStore = fullstore(state);\n \n return {\n read: stateStore,\n isShown: () => isShown(stateStore()),\n commit: createCommit(stateStore, {\n infiniteScroll,\n }),\n };\n};\n\nconst createCommit = (stateStore, {infiniteScroll}) => {\n const commit = (operation, options = {}) => {\n const state = stateStore();\n \n if (!ALWAYS.includes(operation) && !isShown(state))\n return state;\n \n const cursorPath = getCursorPath(state);\n const {count = 1} = options;\n \n if (MOVES.includes(operation) && !cursorPath && count > 1) {\n commit(operation, {\n ...options,\n count: 1,\n });\n \n return commit(operation, {\n ...options,\n count: count - 1,\n });\n }\n \n const newState = transform(state, operation, {\n infiniteScroll,\n ...options,\n operation,\n cursorPath,\n cursor: cursorPath\n .split('.')\n .at(-1),\n });\n \n stateStore(newState);\n \n return newState;\n };\n \n return commit;\n};\n","import {\n template,\n types,\n operator,\n} from 'putout';\nimport {getKeyName} from '../../../state/transformer/rules/cursor.js';\n\nconst {\n isExpressionStatement,\n isObjectProperty,\n jsxText,\n isArrayExpression,\n} = types;\n\nconst {\n replaceWith,\n removeClassName,\n setAttributeValue,\n} = operator;\n\nconst isOn = ({node}) => node.elements[0].value === 'on';\n\nconst isSelected = ({node}) => {\n if (isObjectProperty(node))\n return node.value.value;\n \n return node.elements[1].value === 'cursor';\n};\n\nconst getMenuPath = (path) => {\n const names = [];\n \n for (let current = path; current; current = current.parentPath)\n if (isObjectProperty(current))\n names.unshift(getKeyName(current.node));\n \n return names.join('.');\n};\n\nexport const report = () => `Build menu`;\nexport const include = () => [\n 'ObjectProperty',\n 'ArrayExpression',\n];\n\nconst ENTITIES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '{': '{',\n '}': '}',\n '\"': '"',\n};\n\nconst escapeText = (a) => a.replace(/[&<>{}]/g, (char) => ENTITIES[char]);\nconst escapeAttribute = (a) => a.replace(/[&<>{}\"]/g, (char) => ENTITIES[char]);\n\nconst getIconName = (name) => 'icon-' + name\n .replace(/[()]/g, '')\n .replace(/\\s/g, '-')\n .toLowerCase();\n\nconst createIconClass = (path, icon) => icon ? ` icon ${getIconName(getKeyName(path.node))}` : '';\n\nconst createMenuItem = (path, {icon} = {}) => {\n const name = escapeText(getKeyName(path.node));\n const valuePath = path.get('value');\n \n if (isArrayExpression(valuePath)) {\n const objectPath = valuePath.get('elements').at(-1);\n const children = [];\n \n for (const prop of objectPath.get('properties').map((property) => createMenuItem(property, {icon}))) {\n children.push(prop);\n children.push(jsxText('\\n'));\n }\n \n const submenu = createSubmenu(valuePath, {icon});\n \n submenu.children[3].children = [\n jsxText('\\n'),\n ...children,\n ];\n \n return submenu;\n }\n \n const classSelected = isSelected(path) ? ' menu-item-selected' : '';\n const classIcon = createIconClass(path, icon);\n \n const node = template.ast.fresh(`\n <li data-name=\"menu-item\" className=\"menu-item${classIcon}${classSelected}\">\n <label data-menu-path=\"${escapeAttribute(getMenuPath(path))}\">${name}</label>\n </li>\n `);\n \n return node;\n};\n\nconst createUL = (path) => {\n const node = template.ast.fresh(`\n <ul className=\"menu menu-hidden\"></ul>\n `);\n \n if (isOn(path))\n removeClassName(node, 'menu-hidden');\n \n return node;\n};\n\nconst createSubmenu = (path, {icon} = {}) => {\n const name = escapeText(getKeyName(path.parentPath.node));\n const menuHidden = isOn(path) ? '' : ' menu-hidden';\n const classShow = isOn(path) ? ' menu-submenu-show' : '';\n const classSelected = isSelected(path) || isOn(path) ? ' menu-item-selected' : '';\n const classIcon = icon ? ` icon ${getIconName(getKeyName(path.parentPath.node))}` : '';\n \n const node = template.ast.fresh(`\n <li data-name=\"menu-item\" className=\"menu-item${classIcon} menu-submenu${classSelected}${classShow}\">\n <label data-menu-path=\"${escapeAttribute(getMenuPath(path))}\">${name}</label>\n <ul className=\"menu${menuHidden}\"></ul>\n </li>\n `);\n \n return node;\n};\n\nexport const fix = (path, {options}) => {\n const {position, icon} = options;\n const {top, left} = position;\n \n if (isObjectProperty(path)) {\n replaceWith(path, createMenuItem(path, {icon}));\n return;\n }\n \n if (isArrayExpression(path)) {\n const ul = createUL(path);\n \n if (isExpressionStatement(path.parentPath)) {\n replaceWith(path, ul);\n setAttributeValue(ul, 'style', `left: ${left}px; top: ${top}px`);\n }\n \n const {properties} = path.node.elements.at(-1);\n const children = [];\n \n for (const prop of properties) {\n children.push(prop);\n children.push(jsxText('\\n'));\n }\n \n ul.children = [\n jsxText('\\n'),\n ...children,\n ];\n \n return;\n }\n};\n","export const emitBefore = (addon, {event, parseVim}) => {\n const {keys, commands} = addon;\n \n if (keys && !keys.includes(event.key))\n return [false];\n \n const [command, count] = parseVim(event);\n \n if (commands && !commands.includes(command))\n return [false];\n \n return [true, count];\n};\n","const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';\n\nexport const createVimParser = (buffer = []) => ({key}) => {\n if (/F\\d/.test(key)) {\n buffer = [];\n return [''];\n }\n \n if (key === '^')\n return ['^'];\n \n if (key === '$')\n return ['$'];\n \n if (!buffer.length && key === 'g') {\n buffer.push('g');\n return [''];\n }\n \n if (!buffer.length && /\\d/.test(key)) {\n buffer.push(Number(key));\n return [''];\n }\n \n if (!buffer.length && key === 'j')\n buffer.push(1);\n \n if (!buffer.length && key === 'k')\n buffer.push(1);\n \n const [count] = buffer;\n \n if (isNumber(count) && key === 'j') {\n buffer = [];\n return ['j', count];\n }\n \n if (isNumber(count) && key === 'k') {\n buffer = [];\n return ['k', count];\n }\n \n if (count === 'g' && key === 'g') {\n buffer = [];\n return ['gg'];\n }\n \n buffer = [];\n \n return [''];\n};\n","import {emitBefore} from './emit.js';\nimport {createVimParser} from './vim.js';\n\nconst {values} = Object;\nconst {isArray} = Array;\nconst getDefault = (a) => a.default;\n\nconst maybeEvents = ({events}) => {\n if (events)\n return events;\n \n return ['keydown'];\n};\n\nconst maybeActions = (actions) => {\n if (isArray(actions))\n return actions;\n \n return values(actions).map(getDefault);\n};\n\nexport const listen = (actions = [], overrides = {}) => ({\n [Symbol.asyncIterator]() {\n const {\n addEventListener = globalThis.addEventListener,\n removeEventListener = globalThis.removeEventListener,\n parseVim = createVimParser(),\n isShown = () => true,\n isTarget = () => true,\n } = overrides;\n \n const queue = [];\n let resolveNext;\n const handlers = [];\n \n for (const action of maybeActions(actions)) {\n const events = maybeEvents(action);\n \n for (const event of events) {\n const {\n preventDefault,\n stopPropagation,\n operations,\n } = action;\n \n const fn = (event) => {\n if (action.when === 'shown' && !isShown())\n return;\n \n if (action.scoped && !isTarget(event))\n return;\n \n const [isEmitBefore, count] = emitBefore(action, {\n event,\n parseVim,\n });\n \n if (!isEmitBefore)\n return;\n \n if (preventDefault)\n event.preventDefault();\n \n if (stopPropagation)\n event.stopPropagation();\n \n const value = [\n operations, {\n count,\n position: {},\n event,\n },\n ];\n \n if (resolveNext) {\n resolveNext({\n value,\n done: false,\n });\n resolveNext = null;\n \n return;\n }\n \n queue.push(value);\n };\n \n addEventListener(event, fn);\n \n handlers.push({\n event,\n fn,\n });\n }\n }\n \n const cleanup = () => {\n for (const {event, fn} of handlers) {\n removeEventListener(event, fn);\n }\n };\n \n return {\n next() {\n if (queue.length)\n return Promise.resolve({\n value: queue.shift(),\n done: false,\n });\n \n return new Promise((resolve) => {\n resolveNext = resolve;\n });\n },\n \n return() {\n cleanup();\n \n if (resolveNext)\n resolveNext({\n done: true,\n });\n \n resolveNext = null;\n \n return Promise.resolve({\n done: true,\n });\n },\n };\n },\n});\n","import {fullstore} from 'fullstore';\n\nconst hasPosition = (position) => typeof position?.top === 'number';\n\nconst DEFAULT_POSITION = {\n top: 0,\n left: 0,\n};\n\nconst fromEvent = (event) => {\n if (typeof event?.clientX !== 'number')\n return null;\n \n return {\n top: event.clientY,\n left: event.clientX,\n };\n};\n\nconst isSame = (a, b) => a.top === b.top && a.left === b.left;\n\nexport const createCompiler = (element, {commit, render, getPosition = () => null, mainOptions = fullstore()}) => (operation, options = {}) => {\n const {event} = options;\n const state = commit(operation, options);\n const saved = mainOptions() || {};\n const isShow = operation === 'show';\n \n const position = hasPosition(options.position) ? options.position : isShow && fromEvent(event) || saved.position || DEFAULT_POSITION;\n \n element.innerHTML = render(state, {\n ...options,\n position,\n });\n \n const fixed = isShow && event && getPosition(event);\n \n if (fixed && !isSame(fixed, position))\n element.innerHTML = render(state, {\n ...options,\n position: fixed,\n });\n \n mainOptions({\n position: fixed || position,\n });\n};\n","export const findByName = (name) => document.querySelector(`[data-name=${name}]`);\n\nexport const createHydrate = (name) => {\n const hydrateElement = findByName(name);\n \n if (hydrateElement)\n return hydrateElement;\n \n const section = document.createElement('section');\n \n section.dataset.name = `aleman-hydrate-${name}`;\n section.innerHTML = `<ul data-name=\"${name}\" class=\"menu menu-hidden\"></ul>`;\n document.body.append(section);\n \n return section;\n};\n\nexport const addStyleText = (css) => {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const style = document.createElement('style');\n \n style.dataset.name = name;\n style.textContent = css;\n document.head.appendChild(style);\n};\n\nexport const addStyleLink = () => {\n const name = 'aleman-menu-style';\n \n if (findByName(name))\n return;\n \n const link = document.createElement('link');\n \n link.dataset.name = name;\n link.rel = 'stylesheet';\n link.href = new URL('menu.css', import.meta.url).pathname;\n document.head.appendChild(link);\n};\n","import css from './menu.css';\nimport {hydrateMenu} from './hydrate-menu.js';\nimport {createBundleMenu} from './create-bundle-menu.js';\n\nexport const createMenu = createBundleMenu({\n css,\n hydrateMenu,\n});\n","import {createHydrate, addStyleText} from './dom.js';\n\nexport const createBundleMenu = ({css, hydrateMenu}) => (elementName, options, menu) => {\n options.name = options.name || 'menu';\n \n const hydrateElement = createHydrate(options.name);\n \n addStyleText(css);\n \n return hydrateMenu(elementName, {\n hydrateElement,\n options,\n menu,\n });\n};\n","import {jessy} from 'jessy';\nimport {createHooks} from './hooks.js';\nimport {createState} from './state/state.js';\nimport {getCursorPath} from './state/getter/getter.js';\nimport {render} from './render/render.js';\nimport * as actions from './actions/index.js';\nimport {createLoop} from './engine/engine.js';\nimport {createCompiler} from './compiler/compiler.js';\nimport {calculate} from './engine/position/calculate.js';\n\nconst isFn = (a) => typeof a === 'function';\nconst isCancel = (a) => Object.is(a, false);\n\nexport const hydrateMenu = (elementName, {hydrateElement, options, menu}) => {\n const {\n commit,\n read,\n isShown,\n } = createState(menu, options);\n \n const {name} = options;\n const hooks = createHooks(options);\n \n const getPosition = (event) => {\n const menuElement = hydrateElement.querySelector('ul.menu');\n \n if (!menuElement)\n return null;\n \n const {height, width} = getComputedStyle(menuElement);\n \n const {x, y} = calculate(event, {\n heightMenu: parseInt(height, 10),\n widthMenu: parseInt(width, 10),\n innerHeight: globalThis.innerHeight,\n innerWidth: globalThis.innerWidth,\n });\n \n return {\n top: y,\n left: x,\n };\n };\n \n const compile = createCompiler(hydrateElement, {\n commit,\n read,\n render: (state, renderOptions) => render(state, {\n ...renderOptions,\n icon: options.icon,\n }),\n getPosition,\n });\n \n const showMenu = (showOptions) => {\n const {event} = showOptions;\n const {clientX: x, clientY: y} = event;\n \n const params = {\n x,\n y,\n name,\n position: {\n x,\n y,\n },\n };\n \n if (isCancel(hooks.beforeShow(params))) {\n if (isShown())\n compile('hide');\n \n return;\n }\n \n compile('show', showOptions);\n hooks.afterShow(params);\n };\n \n const hideMenu = () => {\n if (!isShown())\n return;\n \n hooks.beforeHide();\n \n if (hooks.beforeClose())\n return;\n \n compile('hide');\n hooks.afterHide();\n };\n \n const clickItem = (fn) => {\n const isSkip = hooks.beforeClick(name);\n \n hideMenu();\n \n if (isSkip)\n return;\n \n fn();\n hooks.afterClick();\n };\n \n const dispatch = (operation, dispatchOptions) => {\n if (operation === 'show')\n return showMenu(dispatchOptions);\n \n if (operation === 'hide')\n return hideMenu();\n \n if (operation === 'run')\n return runItem(getCursorPath(read()));\n \n compile(operation, dispatchOptions);\n };\n \n const runItem = (path) => {\n const fn = path && jessy(path, menu);\n \n if (isFn(fn))\n clickItem(fn);\n };\n \n createLoop(hydrateElement, {\n compile: dispatch,\n actions,\n isShown,\n overrides: {\n isTarget: (event) => Boolean(event.target.closest(`[data-name=\"${elementName}\"]`)),\n },\n });\n \n hydrateElement.addEventListener('click', (event) => {\n const label = event.target.closest('label[data-menu-path]');\n \n if (label)\n runItem(label.dataset.menuPath);\n });\n \n globalThis.addEventListener('click', (event) => {\n if (hydrateElement.contains(event.target))\n return;\n \n hideMenu();\n });\n \n hydrateElement.addEventListener('mouseleave', (event) => {\n if (event.target.parentElement !== hydrateElement)\n return;\n \n compile('reset');\n }, true);\n \n return {\n show: (x = 0, y = 0) => {\n showMenu({\n event: {\n clientX: x,\n clientY: y,\n },\n });\n },\n hide: hideMenu,\n };\n};\n","import {putout} from 'putout';\nimport {merge} from '@putout/processor-html';\nimport * as buildMenu from './rules/build-menu/index.js';\n\nexport const render = (state, options) => {\n const {code} = putout(state, {\n rules: {\n 'lunes/build-menu': ['on', options],\n },\n plugins: [\n ['lunes/build-menu', buildMenu],\n ],\n });\n \n return merge('', [code]);\n};\n","import {listen} from './listen.js';\n\nexport const createLoop = (element, {actions, compile, isShown, overrides = {}}) => {\n const iterator = listen(actions, {\n ...overrides,\n isShown,\n })[Symbol.asyncIterator]();\n \n loop(iterator, compile);\n \n return () => iterator.return();\n};\n\nconst loop = async (iterator, compile) => {\n const iterable = {\n [Symbol.asyncIterator]: () => iterator,\n };\n \n for await (const [operations, options] of iterable) {\n for (const operation of operations)\n compile(operation, options);\n }\n};\n","import {supermenu} from 'supermenu';\nimport {createMenu as createAlemanMenu} from 'aleman/menu/bundle';\nimport {createMenu as createLunesMenu} from 'aleman/lunes/bundle';\nimport {pickMenu} from './pick-menu.js';\n\nconst noop = () => {};\nconst {CloudCmd} = globalThis;\n\nexport const createCloudMenu = async (fm, options, menuData) => {\n const createMenu = pickMenu(CloudCmd.config('menu'), {\n supermenu: createSupermenu,\n aleman: createAlemanMenu,\n lunes: createLunesMenu,\n });\n \n const menu = await createMenu(fm, options, menuData);\n \n menu.addContextMenuListener = menu.addContextMenuListener || noop;\n \n return menu;\n};\n\nfunction createSupermenu(name, options, menuData) {\n const element = document.querySelector('[data-name=\"js-fm\"]');\n return supermenu(element, options, menuData);\n}\n","export const pickMenu = (name, {supermenu, ...menus}) => menus[name] || supermenu;\n","import {rendy} from 'rendy';\nimport currify from 'currify';\nimport {fullstore} from 'fullstore';\nimport {encode} from '#common/entity';\n\nconst id = (a) => a;\nconst NAME = 'Cloud Commander';\n\nexport const dateFormatter = fullstore(id);\nexport const getHeaderField = currify(_getHeaderField);\nexport const FS = '/fs';\n\nconst Path = fullstore();\n\nPath('/');\n\nconst filterOutDotFiles = ({showDotFiles}) => ({name}) => {\n if (showDotFiles)\n return true;\n \n return !name.startsWith('.');\n};\n\nexport const apiURL = '/api/v1';\nexport const MAX_FILE_SIZE = 500 * 1024;\n\nexport const formatMsg = (msg, name, status) => {\n status = status || 'ok';\n name = name || '';\n \n if (name)\n name = `(\"${name}\")`;\n \n return `${msg}: ${status}${name}`;\n};\n\n/**\n * Функция возвращает заголовок веб страницы\n * @path\n */\nexport const getTitle = (options) => {\n options = options || {};\n \n const {path = Path(), name} = options;\n \n const array = [\n name || NAME,\n path,\n ];\n \n return array\n .filter(Boolean)\n .join(' - ');\n};\n\n/** Функция получает адреса каждого каталога в пути\n * возвращаеться массив каталогов\n * @param url - адрес каталога\n */\nexport function getPathLink(url, prefix, template) {\n if (!url)\n throw Error('url could not be empty!');\n \n if (!template)\n throw Error('template could not be empty!');\n \n const names = url\n .split('/')\n .slice(1, -1);\n \n const allNames = [\n '/',\n ...names,\n ];\n \n const lines = [];\n const n = allNames.length;\n \n let path = '/';\n \n for (let i = 0; i < n; i++) {\n const name = allNames[i];\n const isLast = i === n - 1;\n \n if (i)\n path += `${name}/`;\n \n if (i && isLast) {\n lines.push(`${name}/`);\n continue;\n }\n \n const slash = i ? '/' : '';\n \n lines.push(rendy(template, {\n path,\n name,\n slash,\n prefix,\n }));\n }\n \n return lines.join('');\n}\n\nexport function _getDataName(name) {\n const encoded = btoa(encodeURI(name));\n return `data-name=\"js-file-${encoded}\" `;\n}\n\n/**\n * Функция строит таблицу файлв из JSON-информации о файлах\n * @param params - информация о файлах\n *\n */\nexport const buildFromJSON = (params) => {\n const {\n prefix,\n template,\n sort = 'name',\n order = 'asc',\n showDotFiles,\n } = params;\n \n const formatDate = dateFormatter();\n \n const templateFile = template.file;\n const templateLink = template.link;\n const json = params.data;\n \n const path = encode(json.path);\n const {files} = json;\n \n /*\n * Строим путь каталога в котором мы находимся\n * со всеми подкаталогами\n */\n const htmlPath = getPathLink(path, prefix, template.pathLink);\n \n let fileTable = rendy(template.path, {\n link: prefix + FS + path,\n fullPath: path,\n path: htmlPath,\n });\n \n const owner = 'owner';\n const mode = 'mode';\n \n const getFieldName = getHeaderField(sort, order);\n \n const name = getFieldName('name');\n const size = getFieldName('size');\n const date = getFieldName('date');\n const time = getFieldName('time');\n \n const header = rendy(templateFile, {\n tag: 'div',\n attribute: 'data-name=\"js-fm-header\" ',\n className: 'fm-header',\n type: '',\n name,\n size,\n date,\n time,\n owner,\n mode,\n });\n \n /* сохраняем путь */\n Path(path);\n \n fileTable += `${header}<ul data-name=\"js-files\" class=\"files\">`;\n \n /* Если мы не в корне */\n if (path !== '/') {\n const dotDot = getDotDot(path);\n const link = prefix + FS + dotDot;\n \n const linkResult = rendy(template.link, {\n link,\n title: '..',\n name: '..',\n });\n \n const dataName = _getDataName('..');\n const attribute = `draggable=\"true\" ${dataName}`;\n \n /* Сохраняем путь к каталогу верхнего уровня*/\n fileTable += rendy(template.file, {\n tag: 'li',\n attribute,\n className: '',\n type: 'directory',\n name: linkResult,\n size: '<dir>',\n date: '--.--.----',\n time: '--:--:--',\n owner: '.',\n mode: '--- --- ---',\n });\n }\n \n fileTable += files\n .filter(filterOutDotFiles({\n showDotFiles,\n }))\n .map(updateField)\n .map((file) => {\n const name = encode(file.name);\n const link = prefix + FS + path + name;\n \n const {\n type,\n mode,\n date,\n time,\n owner,\n size,\n } = file;\n \n const linkResult = rendy(templateLink, {\n link,\n title: name,\n name,\n attribute: getAttribute(file.type),\n });\n \n const dataName = _getDataName(file.name);\n const attribute = `draggable=\"true\" ${dataName}`;\n \n return rendy(templateFile, {\n tag: 'li',\n attribute,\n className: '',\n type,\n name: linkResult,\n size,\n date: formatDate(date),\n time,\n owner,\n mode,\n });\n })\n .join('');\n \n fileTable += '</ul>';\n \n return fileTable;\n};\n\nconst updateField = (file) => ({\n ...file,\n date: file.date || '--.--.----',\n time: file.time || '--:--:--',\n owner: file.owner || 'root',\n size: getSize(file),\n});\n\nfunction getAttribute(type) {\n if (type === 'directory')\n return '';\n \n return 'target=\"_blank\" ';\n}\n\nexport const _getSize = getSize;\n\nfunction getSize({size, type}) {\n if (type === 'directory')\n return '<dir>';\n \n if (/link/.test(type))\n return '<link>';\n \n return size;\n}\n\nfunction _getHeaderField(sort, order, name) {\n const arrow = order === 'asc' ? '↑' : '↓';\n \n if (sort !== name)\n return name;\n \n if (sort === 'name' && order === 'asc')\n return name;\n \n return `${name}${arrow}`;\n}\n\nexport function getDotDot(path) {\n // убираем последний слеш и каталог в котором мы сейчас находимся\n const lastSlash = path.substr(path, path.lastIndexOf('/'));\n const dotDot = lastSlash.substr(lastSlash, lastSlash.lastIndexOf('/'));\n \n if (!dotDot)\n return '/';\n \n return dotDot;\n}\n","const Entities = {\n '<': '<',\n '>': '>',\n '"': '\"',\n '{': '{',\n '}': '}',\n};\n\nconst keys = Object.keys(Entities);\n\nexport const encode = (str) => {\n for (const code of keys) {\n const char = Entities[code];\n const reg = RegExp(char, 'g');\n \n str = str.replace(reg, code);\n }\n \n return str;\n};\n\nexport const decode = (str) => {\n for (const code of keys) {\n const char = Entities[code];\n const reg = RegExp(code, 'g');\n \n str = str.replace(reg, char);\n }\n \n return str;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\n// Check if module is in cache\nvar cachedModule = __webpack_module_cache__[moduleId];\nif (cachedModule !== undefined) {\nreturn cachedModule.exports;\n}\n// Create a new module (and put it into the cache)\nvar module = (__webpack_module_cache__[moduleId] = {\nexports: {}\n});\n// Execute the module function\n__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n// Return the exports of the module\nreturn module.exports;\n\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.d = (exports, getters, values) => {\n\tvar define = (defs, kind) => {\n\t\tfor(var key in defs) {\n\t\t\tif(__webpack_require__.o(defs, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, [kind]: defs[key] });\n\t\t\t}\n\t\t}\n\t};\n\tdefine(getters, \"get\");\n\tdefine(values, \"value\");\n};","__webpack_require__.g = (() => {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.j = \"854\";","// module factories are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"136\"], () => __webpack_require__(7137));\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["e","n","i","document","Object","Error","arguments","Array","r","c","RegExp","t","JSON","TypeError","Promise","d","window","getComputedStyle","parseInt","globalThis","f","Boolean","title","alert","a","smalltalk","LOADING","HIDDEN","ERROR","getLoadingType","isSVG","createNS","name","svgNode","create","getElement","createElement","show","position","panel","current","image","Images","parent","refreshButton","DOM","hide","element","text","clearProgress","setProgress","value","get","error","classList","loadingImage","loading","sendRequest","promisify","params","callback","prefixURL","CloudCmd","p","encodeURI","url","load","jqXHR","response","statusText","status","data","assign","imgPosition","remove","overrides","_sendRequest","request","FS","patch","write","createDirectory","read","dataType","notLog","copy","from","to","names","pack","extract","move","rename","Config","Markdown","isObject","itype","isArray","isArrayBuf","type","headers","xhr","XMLHttpRequest","jonny","event","exec","notText","isContain","src","num","sub","handleError","promise","args","tryToCatch","encoded","encode","Dialog","IO","MenuShowedName","MenuContext","MenuContextFile","Number","String","m","s","o","requestAnimationFrame","setTimeout","MutationObserver","Symbol","noop","createCloudMenu","fm","options","menuData","createMenu","pickMenu","supermenu","menus","createSupermenu","createAlemanMenu","createLunesMenu","menu","config","Key","Buffer","Events","Info","alertNoFiles","uploadTo","wrap","nameModule","getOptions","func","beforeShow","beforeClick","getMenuData","isAuth","uploadFromCloud","isCurrent","yesFn","noFn","el","x","y","isShow","menuName","isPath","elements","init","menuBottom","menuDataFile","preDownload","optionsFile","listener","getCurrentPosition","currentName","path","RESTful","download","date","Date","files","file","selected","isDir","encodedPath","id","getIdBySrc","body","rect","Math","F9","ESC","key","isBind","currify","sort","order","Path","fullstore","Entities","keys","str","code","reg","Function","self"],"mappings":"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"}
|