cloudcmd 19.18.1 → 19.19.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/dist/sw.js CHANGED
@@ -311,7 +311,7 @@ const respondWith = currify((f, e) => {
311
311
  e.respondWith(f(e));
312
312
  });
313
313
  const getPathName = url => new URL(url).pathname;
314
- const date = "Tue May 26 2026 22:09:20 GMT+0300 (Eastern European Summer Time)";
314
+ const date = "Mon Jun 15 2026 14:50:28 GMT+0300 (Eastern European Summer Time)";
315
315
  const NAME = `cloudcmd: ${date}`;
316
316
  const createRequest = a => new Request(a, {
317
317
  credentials: 'same-origin'
@@ -975,7 +975,7 @@ eval("{/* provided dependency */ var process = __webpack_require__(/*! process/b
975
975
  (module, __unused_webpack_exports, __webpack_require__) {
976
976
 
977
977
  "use strict";
978
- eval("{\n\nvar forEach = __webpack_require__(/*! for-each */ \"./node_modules/for-each/index.js\");\nvar availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ \"./node_modules/available-typed-arrays/index.js\");\nvar callBind = __webpack_require__(/*! call-bind */ \"./node_modules/call-bind/index.js\");\nvar callBound = __webpack_require__(/*! call-bound */ \"./node_modules/call-bound/index.js\");\nvar gOPD = __webpack_require__(/*! gopd */ \"./node_modules/gopd/index.js\");\nvar getProto = __webpack_require__(/*! get-proto */ \"./node_modules/get-proto/index.js\");\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ \"./node_modules/has-tostringtag/shams.js\")();\n\nvar g = typeof globalThis === 'undefined' ? globalThis : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {import('./types').Getter} Getter */\n/** @type {import('./types').Cache} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getProto) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr && getProto) {\n\t\t\tvar proto = getProto(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor && proto) {\n\t\t\t\tvar superProto = getProto(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tif (descriptor && descriptor.get) {\n\t\t\t\tvar bound = callBind(descriptor.get);\n\t\t\t\tcache[\n\t\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t\t] = bound;\n\t\t\t}\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tvar bound = /** @type {import('./types').BoundSlice | import('./types').BoundSet} */ (\n\t\t\t\t// @ts-expect-error TODO FIXME\n\t\t\t\tcallBind(fn)\n\t\t\t);\n\t\t\tcache[\n\t\t\t\t/** @type {`$${import('.').TypedArrayName}`} */ ('$' + typedArray)\n\t\t\t] = bound;\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryAllTypedArrays>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */ (cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(typedArray, 1));\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {(value: object) => false | import('.').TypedArrayName} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType<typeof tryAllSlices>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`\\$${import('.').TypedArrayName}`, Getter>} */(cache),\n\t\t/** @type {(getter: Getter, name: `\\$${import('.').TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = /** @type {import('.').TypedArrayName} */ ($slice(name, 1));\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\t/** @type {string} */\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/which-typed-array/index.js\n}");
978
+ eval("{\n\nvar forEach = __webpack_require__(/*! for-each */ \"./node_modules/for-each/index.js\");\nvar availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ \"./node_modules/available-typed-arrays/index.js\");\nvar callBind = __webpack_require__(/*! call-bind */ \"./node_modules/call-bind/index.js\");\nvar callBound = __webpack_require__(/*! call-bound */ \"./node_modules/call-bound/index.js\");\nvar gOPD = __webpack_require__(/*! gopd */ \"./node_modules/gopd/index.js\");\nvar getProto = __webpack_require__(/*! get-proto */ \"./node_modules/get-proto/index.js\");\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ \"./node_modules/has-tostringtag/shams.js\")();\n\nvar g = typeof globalThis === 'undefined' ? globalThis : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\n\n/** @import { BoundSet, BoundSlice, Cache, Getter } from './types' */\n/** @import { TypedArrayName } from '.' */\n\n/** @type {<T = unknown>(array: readonly T[], value: unknown) => number} */\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @type {Cache} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getProto) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr && getProto) {\n\t\t\tvar proto = getProto(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor && proto) {\n\t\t\t\tvar superProto = getProto(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\tif (descriptor && descriptor.get) {\n\t\t\t\tvar bound = callBind(descriptor.get);\n\t\t\t\tcache[\n\t\t\t\t\t/** @type {`$${TypedArrayName}`} */\n\t\t\t\t\t('$' + typedArray)\n\t\t\t\t] = bound;\n\t\t\t}\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\tvar bound = /** @type {BoundSlice | BoundSet} */ (\n\t\t\t\t// @ts-expect-error TODO FIXME\n\t\t\t\tcallBind(fn)\n\t\t\t);\n\t\t\tcache[\n\t\t\t\t/** @type {`$${TypedArrayName}`} */\n\t\t\t\t('$' + typedArray)\n\t\t\t] = bound;\n\t\t}\n\t});\n}\n\n/** @type {(value: object) => false | TypedArrayName} */\nfunction tryTypedArrays(value) {\n\t/** @type {ReturnType<typeof tryTypedArrays>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`$${TypedArrayName}`, Getter>} */ (cache),\n\t\t/** @param {Getter} getter @param {`$${TypedArrayName}`} typedArray */\n\t\tfunction (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = /** @type {TypedArrayName} */ ($slice(typedArray, 1));\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n}\n\n/** @type {(value: object) => false | TypedArrayName} */\nfunction trySlices(value) {\n\t/** @type {ReturnType<typeof trySlices>} */ var found = false;\n\tforEach(\n\t\t/** @type {Record<`$${TypedArrayName}`, Getter>} */(cache),\n\t\t/** @param {Getter} getter @param {`$${TypedArrayName}`} name */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error a throw is fine here\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = /** @type {TypedArrayName} */ ($slice(name, 1));\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n}\n\n/** @type {(tag: unknown) => tag is typeof typedArrays[number]} */\nfunction isTATag(tag) {\n\treturn $indexOf(typedArrays, tag) > -1;\n}\n\n/**\n * @type {import('.')}\n * @param {unknown} value\n */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif (isTATag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/node_modules/which-typed-array/index.js\n}");
979
979
 
980
980
  /***/ },
981
981
 
@@ -1415,7 +1415,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
1415
1415
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
1416
1416
 
1417
1417
  "use strict";
1418
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Key: () => (/* binding */ Key),\n/* harmony export */ _listener: () => (/* binding */ _listener)\n/* harmony export */ });\n/* harmony import */ var _cloudcmd_clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @cloudcmd/clipboard */ \"./node_modules/@cloudcmd/clipboard/lib/clipboard.js\");\n/* harmony import */ var fullstore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fullstore */ \"./node_modules/fullstore/lib/fullstore.js\");\n/* harmony import */ var _dom_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! #dom/events */ \"./client/dom/events/index.js\");\n/* harmony import */ var _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom/buffer.js */ \"./client/dom/buffer.js\");\n/* harmony import */ var _key_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./key.js */ \"./client/key/key.js\");\n/* harmony import */ var _vim_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./vim/index.js */ \"./client/key/vim/index.js\");\n/* harmony import */ var _set_current_by_char_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./set-current-by-char.js */ \"./client/key/set-current-by-char.js\");\n/* harmony import */ var _binder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./binder.js */ \"./client/key/binder.js\");\n/* global CloudCmd, DOM */\n\n\n\n\n\n\n\n\nconst Chars = (0,fullstore__WEBPACK_IMPORTED_MODULE_1__.fullstore)();\nconst toggleVim = (keyCode, overrides = {}) => {\n const {\n _config,\n config\n } = overrides;\n if (!config('vim') && keyCode === _key_js__WEBPACK_IMPORTED_MODULE_4__.ESC) _config('vim', true);\n};\nconst isUndefined = a => typeof a === 'undefined';\nChars([]);\nconst {\n assign\n} = Object;\nconst binder = (0,_binder_js__WEBPACK_IMPORTED_MODULE_7__.createBinder)();\nconst bind = () => {\n _dom_events__WEBPACK_IMPORTED_MODULE_2__.addKey(listener, true);\n binder.setBind();\n};\nconst Key = assign(binder, _key_js__WEBPACK_IMPORTED_MODULE_4__, {\n bind\n});\nconst _listener = listener;\nfunction getChar(event) {\n /*\n * event.keyIdentifier deprecated in chrome v51\n * but event.key is absent in chrome <= v51\n */\n const {\n key,\n shift,\n keyCode,\n keyIdentifier\n } = event;\n const char = key || fromCharCode(keyIdentifier);\n const symbol = getSymbol(shift, keyCode);\n return [symbol, char];\n}\nasync function listener(event, overrides = {}) {\n const {\n config = CloudCmd.config,\n _config = CloudCmd._config,\n switchKey = _switchKey,\n vim = _vim_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n } = overrides;\n const {\n keyCode\n } = event;\n\n // strange chrome bug calls listener twice\n // in second time event misses a lot fields\n if (isUndefined(event.altKey)) return;\n const alt = event.altKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const isBetween = keyCode >= _key_js__WEBPACK_IMPORTED_MODULE_4__.ZERO && keyCode <= _key_js__WEBPACK_IMPORTED_MODULE_4__.Z;\n const isNumpad = /Numpad/.test(event.code);\n const [symbol, char] = getChar(event);\n if (!binder.isBind()) return;\n toggleVim(keyCode, {\n config,\n _config\n });\n const isVim = config('vim');\n if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || symbol)) return (0,_set_current_by_char_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(char, Chars);\n Chars([]);\n await switchKey(event);\n if (keyCode >= _key_js__WEBPACK_IMPORTED_MODULE_4__.F1 && keyCode <= _key_js__WEBPACK_IMPORTED_MODULE_4__.F10) return;\n if (isVim) vim(char, event);\n}\nfunction getSymbol(shift, keyCode) {\n switch (keyCode) {\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOT:\n return '.';\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.HYPHEN:\n return shift ? '_' : '-';\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.EQUAL:\n return shift ? '+' : '=';\n }\n return '';\n}\nfunction fromCharCode(keyIdentifier) {\n const code = keyIdentifier.substring(2);\n const hex = parseInt(code, 16);\n return String.fromCharCode(hex);\n}\nasync function _switchKey(event) {\n const Info = DOM.CurrentInfo;\n let i;\n let isSelected;\n let prev;\n let next;\n let current = Info.element;\n let dataName;\n const {\n name,\n panel,\n path,\n isDir\n } = Info;\n const {\n Operation,\n changeDir,\n config\n } = CloudCmd;\n const {\n keyCode\n } = event;\n const alt = event.altKey;\n const shift = event.shiftKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const ctrlMeta = ctrl || meta;\n if (current) {\n prev = current.previousSibling;\n next = current.nextSibling;\n }\n switch (keyCode) {\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.TAB:\n DOM.changePanel();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.INSERT:\n DOM.toggleSelectedFile(current).setCurrentFile(next);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.INSERT_MAC:\n DOM.toggleSelectedFile(current).setCurrentFile(next);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DELETE:\n if (shift) Operation.show('delete:silent');else Operation.show('delete');\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.ASTERISK:\n DOM.toggleAllSelectedFiles(current);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PLUS:\n DOM.expandSelection();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.MINUS:\n DOM.shrinkSelection();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F1:\n CloudCmd.Help.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F2:\n CloudCmd.UserMenu.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F3:\n event.preventDefault();\n if (Info.isDir) await changeDir(path);else if (shift) CloudCmd.View.show(null, {\n raw: true\n });else if (ctrlMeta) CloudCmd.sortPanel('name');else CloudCmd.View.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F4:\n if (config('vim')) CloudCmd.EditFileVim.show();else CloudCmd.EditFile.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F5:\n if (ctrlMeta) CloudCmd.sortPanel('date');else if (alt) Operation.show('pack');else Operation.show('copy');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F6:\n if (ctrlMeta) CloudCmd.sortPanel('size');else if (shift) DOM.renameCurrent(current);else Operation.show('move');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F7:\n if (shift) DOM.promptNewFile();else DOM.promptNewDir();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F8:\n Operation.show('delete');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F9:\n if (alt) Operation.show('extract');else CloudCmd.Menu.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F10:\n CloudCmd.Config.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.TRA:\n event.preventDefault();\n if (shift) return CloudCmd.Terminal.show();\n CloudCmd.Konsole.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BRACKET_CLOSE:\n CloudCmd.Konsole.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.SPACE:\n event.preventDefault();\n if (!isDir || name === '..') isSelected = true;else isSelected = DOM.isSelected(current);\n if (!isSelected) await DOM.loadCurrentSize(current);\n DOM.toggleSelectedFile(current);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.U:\n if (ctrlMeta) {\n DOM.swapPanels();\n event.preventDefault();\n }\n break;\n\n /* navigation on file table: *\n * in case of pressing button 'up', *\n * select previous row */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.UP:\n if (shift) DOM.toggleSelectedFile(current);\n DOM.setCurrentFile(prev);\n event.preventDefault();\n break;\n\n /* in case of pressing button 'down', *\n * select next row */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOWN:\n if (shift) DOM.toggleSelectedFile(current);\n DOM.setCurrentFile(next);\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.LEFT:\n if (!alt) return;\n event.preventDefault();\n dataName = Info.panel.getAttribute('data-name');\n if (dataName === 'js-right') DOM.duplicatePanel();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.RIGHT:\n if (!alt) return;\n event.preventDefault();\n dataName = Info.panel.getAttribute('data-name');\n if (dataName === 'js-left') DOM.duplicatePanel();\n break;\n\n /* in case of pressing button 'Home', *\n * go to top element */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.HOME:\n DOM.setCurrentFile(Info.first);\n event.preventDefault();\n break;\n\n /* in case of pressing button 'End', select last element */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.END:\n DOM.setCurrentFile(Info.last);\n event.preventDefault();\n break;\n\n /* если нажали клавишу page down проматываем экран */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PAGE_DOWN:\n DOM.scrollByPages(panel, 1);\n for (i = 0; i < 30; i++) {\n if (!current.nextSibling) break;\n current = current.nextSibling;\n }\n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n\n /* если нажали клавишу page up проматываем экран */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PAGE_UP:\n DOM.scrollByPages(panel, -1);\n for (i = 0; i < 30; i++) {\n if (!current.previousSibling) break;\n current = current.previousSibling;\n }\n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.ENTER:\n if (Info.isDir) await changeDir(path);else CloudCmd.View.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BACKSPACE:\n CloudCmd.goToParentDir();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BACKSLASH:\n if (ctrlMeta) await changeDir('/');\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.A:\n if (ctrlMeta) {\n DOM.selectAllFiles();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.G:\n if (alt) {\n DOM.goToDirectory();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.L:\n if (ctrlMeta) {\n CloudCmd.logOut();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.M:\n if (ctrlMeta) {\n if (config('vim')) CloudCmd.EditNamesVim.show();else CloudCmd.EditNames.show();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.P:\n if (!ctrlMeta) return;\n event.preventDefault();\n _cloudcmd_clipboard__WEBPACK_IMPORTED_MODULE_0__.writeText(Info.dirPath).catch(CloudCmd.log);\n break;\n\n /**\n * обновляем страницу,\n * загружаем содержимое каталога\n * при этом данные берём всегда с\n * сервера, а не из кэша\n * (обновляем кэш)\n */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.R:\n if (ctrlMeta) {\n CloudCmd.log('reloading page...\\n');\n CloudCmd.refresh();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.C:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.copy();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.X:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.cut();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.V:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.paste();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.Z:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.clear();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.COLON:\n CloudCmd.CommandLine.show();\n event.preventDefault();\n break;\n\n /* чистим хранилище */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.D:\n if (ctrlMeta) {\n CloudCmd.log('clearing storage...');\n await DOM.Storage.clear();\n CloudCmd.log('storage cleared');\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOT:\n if (meta && shift) {\n const showDotFiles = !CloudCmd.config('showDotFiles');\n CloudCmd._config('showDotFiles', showDotFiles);\n CloudCmd.refresh();\n await DOM.RESTful.Config.write({\n showDotFiles\n });\n }\n break;\n }\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/key/index.js\n}");
1418
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Key: () => (/* binding */ Key),\n/* harmony export */ _listener: () => (/* binding */ _listener)\n/* harmony export */ });\n/* harmony import */ var _cloudcmd_clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @cloudcmd/clipboard */ \"./node_modules/@cloudcmd/clipboard/lib/clipboard.js\");\n/* harmony import */ var fullstore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! fullstore */ \"./node_modules/fullstore/lib/fullstore.js\");\n/* harmony import */ var _dom_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! #dom/events */ \"./client/dom/events/index.js\");\n/* harmony import */ var _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom/buffer.js */ \"./client/dom/buffer.js\");\n/* harmony import */ var _key_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./key.js */ \"./client/key/key.js\");\n/* harmony import */ var _vim_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./vim/index.js */ \"./client/key/vim/index.js\");\n/* harmony import */ var _set_current_by_char_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./set-current-by-char.js */ \"./client/key/set-current-by-char.js\");\n/* harmony import */ var _binder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./binder.js */ \"./client/key/binder.js\");\n/* global CloudCmd, DOM */\n\n\n\n\n\n\n\n\nconst Chars = (0,fullstore__WEBPACK_IMPORTED_MODULE_1__.fullstore)();\nconst toggleVim = (keyCode, overrides = {}) => {\n const {\n _config,\n config\n } = overrides;\n if (!config('vim') && keyCode === _key_js__WEBPACK_IMPORTED_MODULE_4__.ESC) _config('vim', true);\n};\nconst isUndefined = a => typeof a === 'undefined';\nChars([]);\nconst {\n assign\n} = Object;\nconst binder = (0,_binder_js__WEBPACK_IMPORTED_MODULE_7__.createBinder)();\nconst bind = () => {\n _dom_events__WEBPACK_IMPORTED_MODULE_2__.addKey(listener, true);\n binder.setBind();\n};\nconst Key = assign(binder, _key_js__WEBPACK_IMPORTED_MODULE_4__, {\n bind\n});\nconst _listener = listener;\nfunction getChar(event) {\n /*\n * event.keyIdentifier deprecated in chrome v51\n * but event.key is absent in chrome <= v51\n */\n const {\n key,\n shift,\n keyCode,\n keyIdentifier\n } = event;\n const char = key || fromCharCode(keyIdentifier);\n const symbol = getSymbol(shift, keyCode);\n return [symbol, char];\n}\nasync function listener(event, overrides = {}) {\n const {\n config = CloudCmd.config,\n _config = CloudCmd._config,\n switchKey = _switchKey,\n vim = _vim_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]\n } = overrides;\n const {\n keyCode\n } = event;\n\n // strange chrome bug calls listener twice\n // in second time event misses a lot fields\n if (isUndefined(event.altKey)) return;\n const alt = event.altKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const isBetween = keyCode >= _key_js__WEBPACK_IMPORTED_MODULE_4__.ZERO && keyCode <= _key_js__WEBPACK_IMPORTED_MODULE_4__.Z;\n const isNumpad = /Numpad/.test(event.code);\n const [symbol, char] = getChar(event);\n if (!binder.isBind()) return;\n toggleVim(keyCode, {\n config,\n _config\n });\n const isVim = config('vim');\n if (!isVim && !isNumpad && !alt && !ctrl && !meta && (isBetween || symbol)) return (0,_set_current_by_char_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(char, Chars);\n Chars([]);\n await switchKey(event);\n if (keyCode >= _key_js__WEBPACK_IMPORTED_MODULE_4__.F1 && keyCode <= _key_js__WEBPACK_IMPORTED_MODULE_4__.F10) return;\n if (isVim) vim(char, event);\n}\nfunction getSymbol(shift, keyCode) {\n switch (keyCode) {\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOT:\n return '.';\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.HYPHEN:\n return shift ? '_' : '-';\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.EQUAL:\n return shift ? '+' : '=';\n }\n return '';\n}\nfunction fromCharCode(keyIdentifier) {\n const code = keyIdentifier.substring(2);\n const hex = parseInt(code, 16);\n return String.fromCharCode(hex);\n}\nasync function _switchKey(event) {\n const Info = DOM.CurrentInfo;\n let i;\n let isSelected;\n let prev;\n let next;\n let current = Info.element;\n let dataName;\n const {\n name,\n panel,\n path,\n isDir\n } = Info;\n const {\n Operation,\n changeDir,\n config\n } = CloudCmd;\n const {\n keyCode\n } = event;\n const alt = event.altKey;\n const shift = event.shiftKey;\n const ctrl = event.ctrlKey;\n const meta = event.metaKey;\n const ctrlMeta = ctrl || meta;\n if (current) {\n prev = current.previousSibling;\n next = current.nextSibling;\n }\n switch (keyCode) {\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.TAB:\n DOM.changePanel();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.INSERT:\n DOM.toggleSelectedFile(current).setCurrentFile(next);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.INSERT_MAC:\n DOM.toggleSelectedFile(current).setCurrentFile(next);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DELETE:\n if (shift) Operation.show('delete:silent');else Operation.show('delete');\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.ASTERISK:\n DOM.toggleAllSelectedFiles(current);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PLUS:\n DOM.expandSelection();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.MINUS:\n DOM.shrinkSelection();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F1:\n CloudCmd.Help.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F2:\n CloudCmd.UserMenu.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F3:\n event.preventDefault();\n if (Info.isDir) await changeDir(path);else if (shift) CloudCmd.View.show(null, {\n raw: true\n });else if (ctrlMeta) CloudCmd.sortPanel('name');else CloudCmd.View.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F4:\n if (config('vim')) CloudCmd.EditFileVim.show();else CloudCmd.EditFile.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F5:\n if (ctrlMeta) CloudCmd.sortPanel('date');else if (alt) Operation.show('pack');else Operation.show('copy');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F6:\n if (ctrlMeta) CloudCmd.sortPanel('size');else if (shift) DOM.renameCurrent(current);else Operation.show('move');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F7:\n if (shift) DOM.promptNewFile();else DOM.promptNewDir();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F8:\n Operation.show('delete');\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F9:\n if (alt) Operation.show('extract');else CloudCmd.Menu.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.F10:\n CloudCmd.Config.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.TRA:\n event.preventDefault();\n if (shift) return CloudCmd.Terminal.show();\n CloudCmd.Konsole.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BRACKET_CLOSE:\n CloudCmd.Konsole.show();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.SPACE:\n event.preventDefault();\n if (!isDir || name === '..') isSelected = true;else isSelected = DOM.isSelected(current);\n if (!isSelected) await DOM.loadCurrentSize(current);\n DOM.toggleSelectedFile(current);\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.U:\n if (ctrlMeta) {\n DOM.swapPanels();\n event.preventDefault();\n }\n break;\n\n /* navigation on file table: *\n * in case of pressing button 'up', *\n * select previous row */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.UP:\n if (shift) DOM.toggleSelectedFile(current);\n DOM.setCurrentFile(prev);\n event.preventDefault();\n break;\n\n /* in case of pressing button 'down', *\n * select next row */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOWN:\n if (shift) DOM.toggleSelectedFile(current);\n DOM.setCurrentFile(next);\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.LEFT:\n if (!alt) return;\n event.preventDefault();\n dataName = Info.panel.getAttribute('data-name');\n if (dataName === 'js-right') DOM.duplicatePanel();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.RIGHT:\n if (!alt) return;\n event.preventDefault();\n dataName = Info.panel.getAttribute('data-name');\n if (dataName === 'js-left') DOM.duplicatePanel();\n break;\n\n /* in case of pressing button 'Home', *\n * go to top element */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.HOME:\n DOM.setCurrentFile(Info.first);\n event.preventDefault();\n break;\n\n /* in case of pressing button 'End', select last element */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.END:\n DOM.setCurrentFile(Info.last);\n event.preventDefault();\n break;\n\n /* если нажали клавишу page down проматываем экран */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PAGE_DOWN:\n DOM.scrollByPages(panel, 1);\n for (i = 0; i < 30; i++) {\n if (!current.nextSibling) break;\n current = current.nextSibling;\n }\n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n\n /* если нажали клавишу page up проматываем экран */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.PAGE_UP:\n DOM.scrollByPages(panel, -1);\n for (i = 0; i < 30; i++) {\n if (!current.previousSibling) break;\n current = current.previousSibling;\n }\n DOM.setCurrentFile(current);\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.ENTER:\n if (Info.isDir) await changeDir(path);else CloudCmd.View.show();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BACKSPACE:\n CloudCmd.goToParentDir();\n event.preventDefault();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.BACKSLASH:\n if (ctrlMeta) await changeDir('/');\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.A:\n if (ctrlMeta) {\n DOM.selectAllFiles();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.G:\n if (alt) {\n DOM.goToDirectory();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.L:\n if (ctrlMeta && shift) {\n CloudCmd.logOut();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.M:\n if (ctrlMeta) {\n if (config('vim')) CloudCmd.EditNamesVim.show();else CloudCmd.EditNames.show();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.P:\n if (!ctrlMeta) return;\n event.preventDefault();\n _cloudcmd_clipboard__WEBPACK_IMPORTED_MODULE_0__.writeText(Info.dirPath).catch(CloudCmd.log);\n break;\n\n /**\n * обновляем страницу,\n * загружаем содержимое каталога\n * при этом данные берём всегда с\n * сервера, а не из кэша\n * (обновляем кэш)\n */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.R:\n if (ctrlMeta) {\n CloudCmd.log('reloading page...\\n');\n CloudCmd.refresh();\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.C:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.copy();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.X:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.cut();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.V:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.paste();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.Z:\n if (ctrlMeta) _dom_buffer_js__WEBPACK_IMPORTED_MODULE_3__.clear();\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.COLON:\n CloudCmd.CommandLine.show();\n event.preventDefault();\n break;\n\n /* чистим хранилище */\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.D:\n if (ctrlMeta) {\n CloudCmd.log('clearing storage...');\n await DOM.Storage.clear();\n CloudCmd.log('storage cleared');\n event.preventDefault();\n }\n break;\n case _key_js__WEBPACK_IMPORTED_MODULE_4__.DOT:\n if (meta && shift) {\n const showDotFiles = !CloudCmd.config('showDotFiles');\n CloudCmd._config('showDotFiles', showDotFiles);\n CloudCmd.refresh();\n await DOM.RESTful.Config.write({\n showDotFiles\n });\n }\n break;\n }\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/key/index.js\n}");
1419
1419
 
1420
1420
  /***/ },
1421
1421
 
@@ -1877,7 +1877,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
1877
1877
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
1878
1878
 
1879
1879
  "use strict";
1880
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _detectType: () => (/* binding */ _detectType),\n/* harmony export */ getType: () => (/* binding */ getType),\n/* harmony export */ isAudio: () => (/* binding */ isAudio),\n/* harmony export */ isImage: () => (/* binding */ isImage)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"./node_modules/path-browserify/index.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\nconst isAudio = name => /\\.(mp3|ogg|m4a)$/i.test(name);\nconst testRegExp = currify__WEBPACK_IMPORTED_MODULE_1__((name, reg) => reg.test(name));\nconst getRegExp = ext => RegExp(`\\\\.${ext}$`, 'i');\nconst isPDF = a => /\\.pdf$/i.test(a);\nconst isHTML = a => a.endsWith('.html');\nconst isMarkdown = a => /.\\.md$/.test(a);\nconst getType = async path => {\n const ext = (0,node_path__WEBPACK_IMPORTED_MODULE_0__.extname)(path);\n if (!ext) path = await detectType(path);\n if (isPDF(path)) return 'pdf';\n if (isImage(path)) return 'image';\n if (isMedia(path)) return 'media';\n if (isHTML(path)) return 'html';\n if (isMarkdown(path)) return 'markdown';\n};\nfunction isImage(name) {\n const images = ['jp(e|g|eg)', 'gif', 'png', 'bmp', 'webp', 'svg', 'ico'];\n return images.map(getRegExp).some(testRegExp(name));\n}\nfunction isMedia(name) {\n return isAudio(name) || isVideo(name);\n}\nfunction isVideo(name) {\n return /\\.(mp4|avi|webm)$/i.test(name);\n}\nconst _detectType = detectType;\nasync function detectType(path) {\n const {\n headers\n } = await fetch(path, {\n method: 'HEAD'\n });\n for (const [name, value] of headers) {\n if (name === 'content-type') return `.${value.split('/').pop()}`;\n }\n return '';\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/view/types.js\n}");
1880
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _detectType: () => (/* binding */ _detectType),\n/* harmony export */ getType: () => (/* binding */ getType),\n/* harmony export */ isAudio: () => (/* binding */ isAudio),\n/* harmony export */ isImage: () => (/* binding */ isImage)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"./node_modules/path-browserify/index.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\nconst isAudio = name => /\\.(mp3|ogg|m4a|flac)$/i.test(name);\nconst testRegExp = currify__WEBPACK_IMPORTED_MODULE_1__((name, reg) => reg.test(name));\nconst getRegExp = ext => RegExp(`\\\\.${ext}$`, 'i');\nconst isPDF = a => /\\.pdf$/i.test(a);\nconst isHTML = a => a.endsWith('.html');\nconst isMarkdown = a => /.\\.md$/.test(a);\nconst getType = async path => {\n const ext = (0,node_path__WEBPACK_IMPORTED_MODULE_0__.extname)(path);\n if (!ext) path = await detectType(path);\n if (isPDF(path)) return 'pdf';\n if (isImage(path)) return 'image';\n if (isMedia(path)) return 'media';\n if (isHTML(path)) return 'html';\n if (isMarkdown(path)) return 'markdown';\n};\nfunction isImage(name) {\n const images = ['jp(e|g|eg)', 'gif', 'png', 'bmp', 'webp', 'svg', 'ico'];\n return images.map(getRegExp).some(testRegExp(name));\n}\nfunction isMedia(name) {\n return isAudio(name) || isVideo(name);\n}\nfunction isVideo(name) {\n return /\\.(mp4|avi|webm)$/i.test(name);\n}\nconst _detectType = detectType;\nasync function detectType(path) {\n const {\n headers\n } = await fetch(path, {\n method: 'HEAD'\n });\n for (const [name, value] of headers) {\n if (name === 'content-type') return `.${value.split('/').pop()}`;\n }\n return '';\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/modules/view/types.js\n}");
1881
1881
 
1882
1882
  /***/ },
1883
1883
 
package/dist-dev/sw.js CHANGED
@@ -37,7 +37,7 @@ eval("{// shim for using process in browser\nvar process = module.exports = {};\
37
37
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
38
38
 
39
39
  "use strict";
40
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\n/* harmony import */ var try_to_catch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\n\nconst isDev = \"development\" === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => e.waitUntil(f()));\nconst respondWith = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"Tue May 26 2026 22:09:22 GMT+0300 (Eastern European Summer Time)\";\nconst NAME = `cloudcmd: ${date}`;\nconst createRequest = a => new Request(a, {\n credentials: 'same-origin'\n});\nconst getRequest = (a, request) => {\n if (a !== '/') return request;\n return createRequest('/');\n};\nglobalThis.addEventListener('install', wait(onInstall));\nglobalThis.addEventListener('fetch', respondWith(onFetch));\nglobalThis.addEventListener('activate', wait(onActivate));\nasync function onActivate() {\n console.info(`cloudcmd: sw: activate: ${NAME}`);\n await globalThis.clients.claim();\n const keys = await caches.keys();\n const deleteCache = caches.delete.bind(caches);\n await Promise.all(keys.map(deleteCache));\n}\nasync function onInstall() {\n console.info(`cloudcmd: sw: install: ${NAME}`);\n await globalThis.skipWaiting();\n}\nasync function onFetch(event) {\n const {\n request\n } = event;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n const newRequest = getRequest(pathname, event.request);\n const cache = await caches.open(NAME);\n const response = await cache.match(request);\n if (!isDev && response) return response;\n const [e, resp] = await (0,try_to_catch__WEBPACK_IMPORTED_MODULE_1__.tryToCatch)(fetch, newRequest, {\n credentials: 'same-origin'\n });\n if (e) return new Response(e.message);\n await addToCache(request, resp.clone());\n return resp;\n}\nasync function addToCache(request, response) {\n const cache = await caches.open(NAME);\n return cache.put(request, response);\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/sw/sw.js\n}");
40
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var node_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:process */ \"./node_modules/process/browser.js\");\n/* harmony import */ var try_to_catch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! try-to-catch */ \"./node_modules/try-to-catch/lib/try-to-catch.js\");\n/* harmony import */ var currify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! currify */ \"./node_modules/currify/lib/currify.js\");\n\n\n\nconst isDev = \"development\" === 'development';\nconst isGet = a => a.method === 'GET';\nconst isBasic = a => a.type === 'basic';\nconst wait = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => e.waitUntil(f()));\nconst respondWith = currify__WEBPACK_IMPORTED_MODULE_2__((f, e) => {\n const {\n request\n } = e;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n if (url.endsWith('/') || /\\^\\/fs/.test(pathname)) return;\n if (!isGet(request)) return;\n if (!isBasic(request)) return;\n if (pathname.startsWith('/api')) return;\n if (/^socket.io/.test(pathname)) return;\n e.respondWith(f(e));\n});\nconst getPathName = url => new URL(url).pathname;\nconst date = \"Mon Jun 15 2026 14:50:30 GMT+0300 (Eastern European Summer Time)\";\nconst NAME = `cloudcmd: ${date}`;\nconst createRequest = a => new Request(a, {\n credentials: 'same-origin'\n});\nconst getRequest = (a, request) => {\n if (a !== '/') return request;\n return createRequest('/');\n};\nglobalThis.addEventListener('install', wait(onInstall));\nglobalThis.addEventListener('fetch', respondWith(onFetch));\nglobalThis.addEventListener('activate', wait(onActivate));\nasync function onActivate() {\n console.info(`cloudcmd: sw: activate: ${NAME}`);\n await globalThis.clients.claim();\n const keys = await caches.keys();\n const deleteCache = caches.delete.bind(caches);\n await Promise.all(keys.map(deleteCache));\n}\nasync function onInstall() {\n console.info(`cloudcmd: sw: install: ${NAME}`);\n await globalThis.skipWaiting();\n}\nasync function onFetch(event) {\n const {\n request\n } = event;\n const {\n url\n } = request;\n const pathname = getPathName(url);\n const newRequest = getRequest(pathname, event.request);\n const cache = await caches.open(NAME);\n const response = await cache.match(request);\n if (!isDev && response) return response;\n const [e, resp] = await (0,try_to_catch__WEBPACK_IMPORTED_MODULE_1__.tryToCatch)(fetch, newRequest, {\n credentials: 'same-origin'\n });\n if (e) return new Response(e.message);\n await addToCache(request, resp.clone());\n return resp;\n}\nasync function addToCache(request, response) {\n const cache = await caches.open(NAME);\n return cache.put(request, response);\n}\n\n//# sourceURL=file://cloudcmd//Users/coderaiser/cloudcmd/client/sw/sw.js\n}");
41
41
 
42
42
  /***/ },
43
43
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloudcmd",
3
- "version": "19.18.1",
3
+ "version": "19.19.1",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "File manager for the web with console and editor",
@@ -195,7 +195,6 @@
195
195
  "morgan": "^1.6.1",
196
196
  "multi-rename": "^3.0.0",
197
197
  "nodemon": "^3.0.1",
198
- "optimize-css-assets-webpack-plugin": "^6.0.1",
199
198
  "path-browserify": "^1.0.1",
200
199
  "philip": "^3.0.0",
201
200
  "place": "^1.1.4",