katoikia-app/web-ui/web-react/node_modules/.cache/babel-loader/9bb8ac3c02b72304218829a187c...

1 line
21 KiB
JSON

{"ast":null,"code":"import _asyncToGenerator from \"/Users/paolasanchez/Desktop/Pry4/Katoikia/katoikia-app/web-ui/sakai-react/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"/Users/paolasanchez/Desktop/Pry4/Katoikia/katoikia-app/web-ui/sakai-react/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray\";\n\nvar _this = this,\n _jsxFileName = \"/Users/paolasanchez/Desktop/Pry4/Katoikia/katoikia-app/web-ui/sakai-react/src/BlockViewer.js\";\n\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = \"function\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \"@@iterator\", asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\", toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \"\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = \"suspendedStart\"; return function (method, arg) { if (\"executing\" === state) throw new Error(\"Generator is already running\"); if (\"completed\" === state) { if (\"throw\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) { if (\"suspendedStart\" === state) throw state = \"completed\", context.arg; context.dispatchException(context.arg); } else \"return\" === context.method && context.abrupt(\"return\", context.arg); state = \"executing\"; var record = tryCatch(innerFn, self, context); if (\"normal\" === record.type) { if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: \"normal\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \"throw\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\"next\", \"throw\", \"return\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\"throw\" !== record.type) { var result = record.arg, value = result.value; return value && \"object\" == typeof value && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\"next\", value, resolve, reject); }, function (err) { invoke(\"throw\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\"throw\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, \"throw\" === context.method) { if (delegate.iterator.return && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method)) return ContinueSentinel; context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a 'throw' method\"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \"normal\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \"root\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\"function\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, \"constructor\", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) { var ctor = \"function\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \"toString\", function () { return \"[object Generator]\"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\"throw\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\"root\" === entry.tryLoc) return handle(\"end\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \"catchLoc\"), hasFinally = hasOwn.call(entry, \"finallyLoc\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\"try statement without catch or finally\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\"throw\" === record.type) throw record.arg; return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\"throw\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\n\nimport React, { useState } from 'react';\nimport { classNames } from 'primereact/utils';\nimport { CodeHighlight } from './components/CodeHighlight';\n\nvar BlockViewer = function BlockViewer(props) {\n var _useState = useState('PREVIEW'),\n _useState2 = _slicedToArray(_useState, 2),\n blockView = _useState2[0],\n setBlockView = _useState2[1];\n\n var copyCode = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return navigator.clipboard.writeText(props.code);\n\n case 2:\n event.preventDefault();\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function copyCode(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"block-viewer\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 15,\n columnNumber: 9\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"block-section\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 16,\n columnNumber: 13\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"block-header\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 17,\n columnNumber: 17\n }\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"block-title\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 18,\n columnNumber: 21\n }\n }, /*#__PURE__*/React.createElement(\"span\", {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 19,\n columnNumber: 25\n }\n }, props.header), props.new && /*#__PURE__*/React.createElement(\"span\", {\n className: \"badge-new\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 20,\n columnNumber: 39\n }\n }, \"New\")), /*#__PURE__*/React.createElement(\"div\", {\n className: \"block-actions\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 22,\n columnNumber: 21\n }\n }, /*#__PURE__*/React.createElement(\"button\", {\n tabIndex: \"0\",\n className: classNames('p-link', {\n 'block-action-active': blockView === 'PREVIEW'\n }),\n onClick: function onClick() {\n return setBlockView('PREVIEW');\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 23,\n columnNumber: 25\n }\n }, /*#__PURE__*/React.createElement(\"span\", {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 23,\n columnNumber: 171\n }\n }, \"Preview\")), /*#__PURE__*/React.createElement(\"button\", {\n className: classNames('p-link', {\n 'block-action-active': blockView === 'CODE'\n }),\n onClick: function onClick() {\n return setBlockView('CODE');\n },\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 24,\n columnNumber: 25\n }\n }, /*#__PURE__*/React.createElement(\"span\", {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 25,\n columnNumber: 29\n }\n }, \"Code\")), /*#__PURE__*/React.createElement(\"button\", {\n tabIndex: \"0\",\n className: \"p-link block-action-copy\",\n onClick: copyCode,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 27,\n columnNumber: 25\n }\n }, /*#__PURE__*/React.createElement(\"i\", {\n className: \"pi pi-copy\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 28,\n columnNumber: 29\n }\n })))), /*#__PURE__*/React.createElement(\"div\", {\n className: \"block-content\",\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 32,\n columnNumber: 17\n }\n }, blockView === 'PREVIEW' && /*#__PURE__*/React.createElement(\"div\", {\n className: props.containerClassName,\n style: props.previewStyle,\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 34,\n columnNumber: 25\n }\n }, props.children), blockView === 'CODE' && /*#__PURE__*/React.createElement(CodeHighlight, {\n __self: _this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 39,\n columnNumber: 25\n }\n }, props.code))));\n};\n\nexport default BlockViewer;","map":{"version":3,"names":["React","useState","classNames","CodeHighlight","BlockViewer","props","blockView","setBlockView","copyCode","event","navigator","clipboard","writeText","code","preventDefault","header","new","containerClassName","previewStyle","children"],"sources":["/Users/paolasanchez/Desktop/Pry4/Katoikia/katoikia-app/web-ui/sakai-react/src/BlockViewer.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { classNames } from 'primereact/utils';\nimport { CodeHighlight } from './components/CodeHighlight';\n\nconst BlockViewer = (props) => {\n\n const [blockView, setBlockView] = useState('PREVIEW')\n\n const copyCode = async (event) => {\n await navigator.clipboard.writeText(props.code);\n event.preventDefault();\n }\n\n return (\n <div className=\"block-viewer\">\n <div className=\"block-section\">\n <div className=\"block-header\">\n <span className=\"block-title\">\n <span>{props.header}</span>\n {props.new && <span className=\"badge-new\">New</span>}\n </span>\n <div className=\"block-actions\">\n <button tabIndex=\"0\" className={classNames('p-link', { 'block-action-active': blockView === 'PREVIEW' })} onClick={() => setBlockView('PREVIEW')}><span>Preview</span></button>\n <button className={classNames('p-link', { 'block-action-active': blockView === 'CODE' })} onClick={() => setBlockView('CODE')} >\n <span>Code</span>\n </button>\n <button tabIndex=\"0\" className=\"p-link block-action-copy\" onClick={copyCode}>\n <i className=\"pi pi-copy\"></i>\n </button>\n </div>\n </div>\n <div className=\"block-content\">\n {blockView === 'PREVIEW' &&\n <div className={props.containerClassName} style={props.previewStyle}>\n {props.children}\n </div>}\n\n {blockView === 'CODE' &&\n <CodeHighlight>\n {props.code}\n </CodeHighlight>\n }\n </div>\n </div>\n </div>\n )\n}\n\nexport default BlockViewer;\n"],"mappings":";;;;;;+CACA,oJ;;AADA,OAAOA,KAAP,IAAgBC,QAAhB,QAAgC,OAAhC;AACA,SAASC,UAAT,QAA2B,kBAA3B;AACA,SAASC,aAAT,QAA8B,4BAA9B;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAW;EAE3B,gBAAkCJ,QAAQ,CAAC,SAAD,CAA1C;EAAA;EAAA,IAAOK,SAAP;EAAA,IAAkBC,YAAlB;;EAEA,IAAMC,QAAQ;IAAA,sEAAG,iBAAOC,KAAP;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACPC,SAAS,CAACC,SAAV,CAAoBC,SAApB,CAA8BP,KAAK,CAACQ,IAApC,CADO;;YAAA;cAEbJ,KAAK,CAACK,cAAN;;YAFa;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAH;;IAAA,gBAARN,QAAQ;MAAA;IAAA;EAAA,GAAd;;EAKA,oBACI;IAAK,SAAS,EAAC,cAAf;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAK,SAAS,EAAC,eAAf;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAK,SAAS,EAAC,cAAf;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAM,SAAS,EAAC,aAAhB;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GAAOH,KAAK,CAACU,MAAb,CADJ,EAEKV,KAAK,CAACW,GAAN,iBAAa;IAAM,SAAS,EAAC,WAAhB;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,SAFlB,CADJ,eAKI;IAAK,SAAS,EAAC,eAAf;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAQ,QAAQ,EAAC,GAAjB;IAAqB,SAAS,EAAEd,UAAU,CAAC,QAAD,EAAW;MAAE,uBAAuBI,SAAS,KAAK;IAAvC,CAAX,CAA1C;IAA0G,OAAO,EAAE;MAAA,OAAMC,YAAY,CAAC,SAAD,CAAlB;IAAA,CAAnH;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBAAkJ;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,aAAlJ,CADJ,eAEI;IAAQ,SAAS,EAAEL,UAAU,CAAC,QAAD,EAAW;MAAE,uBAAuBI,SAAS,KAAK;IAAvC,CAAX,CAA7B;IAA0F,OAAO,EAAE;MAAA,OAAMC,YAAY,CAAC,MAAD,CAAlB;IAAA,CAAnG;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,UADJ,CAFJ,eAKI;IAAQ,QAAQ,EAAC,GAAjB;IAAqB,SAAS,EAAC,0BAA/B;IAA0D,OAAO,EAAEC,QAAnE;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,gBACI;IAAG,SAAS,EAAC,YAAb;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,EADJ,CALJ,CALJ,CADJ,eAgBI;IAAK,SAAS,EAAC,eAAf;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACKF,SAAS,KAAK,SAAd,iBACG;IAAK,SAAS,EAAED,KAAK,CAACY,kBAAtB;IAA0C,KAAK,EAAEZ,KAAK,CAACa,YAAvD;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACKb,KAAK,CAACc,QADX,CAFR,EAMKb,SAAS,KAAK,MAAd,iBACG,oBAAC,aAAD;IAAA;IAAA;MAAA;MAAA;MAAA;IAAA;EAAA,GACKD,KAAK,CAACQ,IADX,CAPR,CAhBJ,CADJ,CADJ;AAiCH,CA1CD;;AA4CA,eAAeT,WAAf"},"metadata":{},"sourceType":"module"}